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 #ifndef PARSER_DEBUG
00073 #define PARSER_DEBUG 0
00074 #endif
00075 #define YYDEBUG 1
00076 #define YYERROR_VERBOSE 1
00077 #define YYSTACK_USE_ALLOCA 0
00078
00079 #include "ruby/ruby.h"
00080 #include "ruby/st.h"
00081 #include "ruby/encoding.h"
00082 #include "internal.h"
00083 #include "node.h"
00084 #include "parse.h"
00085 #include "id.h"
00086 #include "regenc.h"
00087 #include <stdio.h>
00088 #include <errno.h>
00089 #include <ctype.h>
00090 #include "probes.h"
00091
00092 #define YYMALLOC(size) rb_parser_malloc(parser, (size))
00093 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size))
00094 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size))
00095 #define YYFREE(ptr) rb_parser_free(parser, (ptr))
00096 #define malloc YYMALLOC
00097 #define realloc YYREALLOC
00098 #define calloc YYCALLOC
00099 #define free YYFREE
00100
00101 #ifndef RIPPER
00102 static ID register_symid(ID, const char *, long, rb_encoding *);
00103 static ID register_symid_str(ID, VALUE);
00104 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc)
00105 #include "id.c"
00106 #endif
00107
00108 #define is_notop_id(id) ((id)>tLAST_OP_ID)
00109 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00110 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00111 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00112 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00113 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00114 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00115 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00116 #define id_type(id) (is_notop_id(id) ? (int)((id)&ID_SCOPE_MASK) : -1)
00117
00118 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00119 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00120 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00121 ((id)&ID_SCOPE_MASK) == ID_CLASS))
00122
00123 enum lex_state_bits {
00124 EXPR_BEG_bit,
00125 EXPR_END_bit,
00126 EXPR_ENDARG_bit,
00127 EXPR_ENDFN_bit,
00128 EXPR_ARG_bit,
00129 EXPR_CMDARG_bit,
00130 EXPR_MID_bit,
00131 EXPR_FNAME_bit,
00132 EXPR_DOT_bit,
00133 EXPR_CLASS_bit,
00134 EXPR_VALUE_bit,
00135 EXPR_LABELARG_bit,
00136 EXPR_MAX_STATE
00137 };
00138
00139 enum lex_state_e {
00140 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
00141 DEF_EXPR(BEG),
00142 DEF_EXPR(END),
00143 DEF_EXPR(ENDARG),
00144 DEF_EXPR(ENDFN),
00145 DEF_EXPR(ARG),
00146 DEF_EXPR(CMDARG),
00147 DEF_EXPR(MID),
00148 DEF_EXPR(FNAME),
00149 DEF_EXPR(DOT),
00150 DEF_EXPR(CLASS),
00151 DEF_EXPR(VALUE),
00152 DEF_EXPR(LABELARG),
00153 EXPR_BEG_ANY = (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS | EXPR_LABELARG),
00154 EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG),
00155 EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
00156 };
00157 #define IS_lex_state_for(x, ls) ((x) & (ls))
00158 #define IS_lex_state(ls) IS_lex_state_for(lex_state, (ls))
00159
00160 #if PARSER_DEBUG
00161 static const char *lex_state_name(enum lex_state_e state);
00162 #endif
00163
00164 typedef VALUE stack_type;
00165
00166 # define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1))
00167 # define BITSTACK_POP(stack) ((stack) = (stack) >> 1)
00168 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
00169 # define BITSTACK_SET_P(stack) ((stack)&1)
00170
00171 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n))
00172 #define COND_POP() BITSTACK_POP(cond_stack)
00173 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack)
00174 #define COND_P() BITSTACK_SET_P(cond_stack)
00175
00176 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n))
00177 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack)
00178 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00179 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack)
00180
00181 struct vtable {
00182 ID *tbl;
00183 int pos;
00184 int capa;
00185 struct vtable *prev;
00186 };
00187
00188 struct local_vars {
00189 struct vtable *args;
00190 struct vtable *vars;
00191 struct vtable *used;
00192 struct local_vars *prev;
00193 stack_type cmdargs;
00194 };
00195
00196 #define DVARS_INHERIT ((void*)1)
00197 #define DVARS_TOPSCOPE NULL
00198 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00199 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00200
00201 static int
00202 vtable_size(const struct vtable *tbl)
00203 {
00204 if (POINTER_P(tbl)) {
00205 return tbl->pos;
00206 }
00207 else {
00208 return 0;
00209 }
00210 }
00211
00212 #define VTBL_DEBUG 0
00213
00214 static struct vtable *
00215 vtable_alloc(struct vtable *prev)
00216 {
00217 struct vtable *tbl = ALLOC(struct vtable);
00218 tbl->pos = 0;
00219 tbl->capa = 8;
00220 tbl->tbl = ALLOC_N(ID, tbl->capa);
00221 tbl->prev = prev;
00222 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00223 return tbl;
00224 }
00225
00226 static void
00227 vtable_free(struct vtable *tbl)
00228 {
00229 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00230 if (POINTER_P(tbl)) {
00231 if (tbl->tbl) {
00232 xfree(tbl->tbl);
00233 }
00234 xfree(tbl);
00235 }
00236 }
00237
00238 static void
00239 vtable_add(struct vtable *tbl, ID id)
00240 {
00241 if (!POINTER_P(tbl)) {
00242 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00243 }
00244 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00245
00246 if (tbl->pos == tbl->capa) {
00247 tbl->capa = tbl->capa * 2;
00248 REALLOC_N(tbl->tbl, ID, tbl->capa);
00249 }
00250 tbl->tbl[tbl->pos++] = id;
00251 }
00252
00253 static int
00254 vtable_included(const struct vtable * tbl, ID id)
00255 {
00256 int i;
00257
00258 if (POINTER_P(tbl)) {
00259 for (i = 0; i < tbl->pos; i++) {
00260 if (tbl->tbl[i] == id) {
00261 return i+1;
00262 }
00263 }
00264 }
00265 return 0;
00266 }
00267
00268
00269 #ifndef RIPPER
00270 typedef struct token_info {
00271 const char *token;
00272 int linenum;
00273 int column;
00274 int nonspc;
00275 struct token_info *next;
00276 } token_info;
00277 #endif
00278
00279
00280
00281
00282
00283
00284
00285
00286
00287
00288 struct parser_params {
00289 int is_ripper;
00290 NODE *heap;
00291
00292 YYSTYPE *parser_yylval;
00293 VALUE eofp;
00294
00295 NODE *parser_lex_strterm;
00296 enum lex_state_e parser_lex_state;
00297 stack_type parser_cond_stack;
00298 stack_type parser_cmdarg_stack;
00299 int parser_class_nest;
00300 int parser_paren_nest;
00301 int parser_lpar_beg;
00302 int parser_in_single;
00303 int parser_in_def;
00304 int parser_brace_nest;
00305 int parser_compile_for_eval;
00306 VALUE parser_cur_mid;
00307 int parser_in_kwarg;
00308 int parser_in_defined;
00309 char *parser_tokenbuf;
00310 int parser_tokidx;
00311 int parser_toksiz;
00312 int parser_tokline;
00313 VALUE parser_lex_input;
00314 VALUE parser_lex_lastline;
00315 VALUE parser_lex_nextline;
00316 const char *parser_lex_pbeg;
00317 const char *parser_lex_p;
00318 const char *parser_lex_pend;
00319 int parser_heredoc_end;
00320 int parser_command_start;
00321 NODE *parser_deferred_nodes;
00322 long parser_lex_gets_ptr;
00323 VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00324 struct local_vars *parser_lvtbl;
00325 int parser_ruby__end__seen;
00326 int line_count;
00327 int has_shebang;
00328 char *parser_ruby_sourcefile;
00329 int parser_ruby_sourceline;
00330 VALUE parser_ruby_sourcefile_string;
00331 rb_encoding *enc;
00332
00333 int parser_yydebug;
00334
00335 int last_cr_line;
00336
00337 #ifndef RIPPER
00338
00339 NODE *parser_eval_tree_begin;
00340 NODE *parser_eval_tree;
00341 VALUE debug_lines;
00342 VALUE coverage;
00343 int nerr;
00344
00345 int parser_token_info_enabled;
00346 token_info *parser_token_info;
00347 #else
00348
00349 const char *tokp;
00350 VALUE delayed;
00351 int delayed_line;
00352 int delayed_col;
00353
00354 VALUE value;
00355 VALUE result;
00356 VALUE parsing_thread;
00357 int toplevel_p;
00358 #endif
00359 };
00360
00361 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
00362 #define STR_NEW0() rb_enc_str_new(0,0,current_enc)
00363 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
00364 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
00365 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00366 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), current_enc)
00367
00368 static int parser_yyerror(struct parser_params*, const char*);
00369 #define yyerror(msg) parser_yyerror(parser, (msg))
00370
00371 #define lex_strterm (parser->parser_lex_strterm)
00372 #define lex_state (parser->parser_lex_state)
00373 #define cond_stack (parser->parser_cond_stack)
00374 #define cmdarg_stack (parser->parser_cmdarg_stack)
00375 #define class_nest (parser->parser_class_nest)
00376 #define paren_nest (parser->parser_paren_nest)
00377 #define lpar_beg (parser->parser_lpar_beg)
00378 #define brace_nest (parser->parser_brace_nest)
00379 #define in_single (parser->parser_in_single)
00380 #define in_def (parser->parser_in_def)
00381 #define compile_for_eval (parser->parser_compile_for_eval)
00382 #define cur_mid (parser->parser_cur_mid)
00383 #define in_defined (parser->parser_in_defined)
00384 #define tokenbuf (parser->parser_tokenbuf)
00385 #define tokidx (parser->parser_tokidx)
00386 #define toksiz (parser->parser_toksiz)
00387 #define tokline (parser->parser_tokline)
00388 #define lex_input (parser->parser_lex_input)
00389 #define lex_lastline (parser->parser_lex_lastline)
00390 #define lex_nextline (parser->parser_lex_nextline)
00391 #define lex_pbeg (parser->parser_lex_pbeg)
00392 #define lex_p (parser->parser_lex_p)
00393 #define lex_pend (parser->parser_lex_pend)
00394 #define heredoc_end (parser->parser_heredoc_end)
00395 #define command_start (parser->parser_command_start)
00396 #define deferred_nodes (parser->parser_deferred_nodes)
00397 #define lex_gets_ptr (parser->parser_lex_gets_ptr)
00398 #define lex_gets (parser->parser_lex_gets)
00399 #define lvtbl (parser->parser_lvtbl)
00400 #define ruby__end__seen (parser->parser_ruby__end__seen)
00401 #define ruby_sourceline (parser->parser_ruby_sourceline)
00402 #define ruby_sourcefile (parser->parser_ruby_sourcefile)
00403 #define ruby_sourcefile_string (parser->parser_ruby_sourcefile_string)
00404 #define current_enc (parser->enc)
00405 #define yydebug (parser->parser_yydebug)
00406 #ifdef RIPPER
00407 #else
00408 #define ruby_eval_tree (parser->parser_eval_tree)
00409 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin)
00410 #define ruby_debug_lines (parser->debug_lines)
00411 #define ruby_coverage (parser->coverage)
00412 #endif
00413
00414 #if YYPURE
00415 static int yylex(void*, void*);
00416 #else
00417 static int yylex(void*);
00418 #endif
00419
00420 #ifndef RIPPER
00421 #define yyparse ruby_yyparse
00422
00423 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00424 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
00425
00426 static NODE *cond_gen(struct parser_params*,NODE*);
00427 #define cond(node) cond_gen(parser, (node))
00428 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00429 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
00430
00431 static NODE *newline_node(NODE*);
00432 static void fixpos(NODE*,NODE*);
00433
00434 static int value_expr_gen(struct parser_params*,NODE*);
00435 static void void_expr_gen(struct parser_params*,NODE*);
00436 static NODE *remove_begin(NODE*);
00437 static NODE *remove_begin_all(NODE*);
00438 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00439 #define void_expr0(node) void_expr_gen(parser, (node))
00440 #define void_expr(node) void_expr0((node) = remove_begin(node))
00441 static void void_stmts_gen(struct parser_params*,NODE*);
00442 #define void_stmts(node) void_stmts_gen(parser, (node))
00443 static void reduce_nodes_gen(struct parser_params*,NODE**);
00444 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
00445 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00446 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
00447
00448 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00449 #define block_append(h,t) block_append_gen(parser,(h),(t))
00450 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00451 #define list_append(l,i) list_append_gen(parser,(l),(i))
00452 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00453 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
00454 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00455 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
00456 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00457 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
00458 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00459 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
00460 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00461 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00462 #define new_evstr(n) new_evstr_gen(parser,(n))
00463 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00464 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
00465 static NODE *splat_array(NODE*);
00466
00467 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00468 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
00469 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00470 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
00471
00472 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
00473 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
00474 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
00475 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
00476
00477 static NODE *negate_lit(NODE*);
00478 static NODE *ret_args_gen(struct parser_params*,NODE*);
00479 #define ret_args(node) ret_args_gen(parser, (node))
00480 static NODE *arg_blk_pass(NODE*,NODE*);
00481 static NODE *new_yield_gen(struct parser_params*,NODE*);
00482 #define new_yield(node) new_yield_gen(parser, (node))
00483 static NODE *dsym_node_gen(struct parser_params*,NODE*);
00484 #define dsym_node(node) dsym_node_gen(parser, (node))
00485
00486 static NODE *gettable_gen(struct parser_params*,ID);
00487 #define gettable(id) gettable_gen(parser,(id))
00488 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00489 #define assignable(id,node) assignable_gen(parser, (id), (node))
00490
00491 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00492 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
00493 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00494 #define attrset(node,id) attrset_gen(parser, (node), (id))
00495
00496 static void rb_backref_error_gen(struct parser_params*,NODE*);
00497 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
00498 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00499 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
00500
00501 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
00502 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs);
00503 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs))
00504 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
00505 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
00506
00507 #define new_defined(expr) NEW_DEFINED(remove_begin_all(expr))
00508
00509 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00510 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
00511
00512 static ID *local_tbl_gen(struct parser_params*);
00513 #define local_tbl() local_tbl_gen(parser)
00514
00515 static void fixup_nodes(NODE **);
00516
00517 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00518 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
00519 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00520 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
00521 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00522 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
00523 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00524 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
00525
00526 #define get_id(id) (id)
00527 #define get_value(val) (val)
00528 #else
00529 #define value_expr(node) ((void)(node))
00530 #define remove_begin(node) (node)
00531 #define rb_dvar_defined(id) 0
00532 #define rb_local_defined(id) 0
00533 static ID ripper_get_id(VALUE);
00534 #define get_id(id) ripper_get_id(id)
00535 static VALUE ripper_get_value(VALUE);
00536 #define get_value(val) ripper_get_value(val)
00537 static VALUE assignable_gen(struct parser_params*,VALUE);
00538 #define assignable(lhs,node) assignable_gen(parser, (lhs))
00539 static int id_is_var_gen(struct parser_params *parser, ID id);
00540 #define id_is_var(id) id_is_var_gen(parser, (id))
00541
00542 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
00543
00544 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
00545 static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs);
00546 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
00547
00548 #endif
00549
00550 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
00551
00552 static ID formal_argument_gen(struct parser_params*, ID);
00553 #define formal_argument(id) formal_argument_gen(parser, (id))
00554 static ID shadowing_lvar_gen(struct parser_params*,ID);
00555 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
00556 static void new_bv_gen(struct parser_params*,ID);
00557 #define new_bv(id) new_bv_gen(parser, (id))
00558
00559 static void local_push_gen(struct parser_params*,int);
00560 #define local_push(top) local_push_gen(parser,(top))
00561 static void local_pop_gen(struct parser_params*);
00562 #define local_pop() local_pop_gen(parser)
00563 static int local_var_gen(struct parser_params*, ID);
00564 #define local_var(id) local_var_gen(parser, (id))
00565 static int arg_var_gen(struct parser_params*, ID);
00566 #define arg_var(id) arg_var_gen(parser, (id))
00567 static int local_id_gen(struct parser_params*, ID);
00568 #define local_id(id) local_id_gen(parser, (id))
00569 static ID internal_id_gen(struct parser_params*);
00570 #define internal_id() internal_id_gen(parser)
00571
00572 static const struct vtable *dyna_push_gen(struct parser_params *);
00573 #define dyna_push() dyna_push_gen(parser)
00574 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00575 #define dyna_pop(node) dyna_pop_gen(parser, (node))
00576 static int dyna_in_block_gen(struct parser_params*);
00577 #define dyna_in_block() dyna_in_block_gen(parser)
00578 #define dyna_var(id) local_var(id)
00579 static int dvar_defined_gen(struct parser_params*,ID,int);
00580 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
00581 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
00582 static int dvar_curr_gen(struct parser_params*,ID);
00583 #define dvar_curr(id) dvar_curr_gen(parser, (id))
00584
00585 static int lvar_defined_gen(struct parser_params*, ID);
00586 #define lvar_defined(id) lvar_defined_gen(parser, (id))
00587
00588 #define RE_OPTION_ONCE (1<<16)
00589 #define RE_OPTION_ENCODING_SHIFT 8
00590 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00591 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00592 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00593 #define RE_OPTION_MASK 0xff
00594 #define RE_OPTION_ARG_ENCODING_NONE 32
00595
00596 #define NODE_STRTERM NODE_ZARRAY
00597 #define NODE_HEREDOC NODE_ARRAY
00598 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00599 #define nd_func u1.id
00600 #if SIZEOF_SHORT == 2
00601 #define nd_term(node) ((signed short)(node)->u2.id)
00602 #else
00603 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00604 #endif
00605 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00606 #define nd_nest u3.cnt
00607
00608
00609
00610 #ifdef RIPPER
00611 #define RIPPER_VERSION "0.1.0"
00612
00613 #include "eventids1.c"
00614 #include "eventids2.c"
00615
00616 static VALUE ripper_dispatch0(struct parser_params*,ID);
00617 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00618 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00619 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00620 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00621 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00622 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
00623
00624 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00625 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
00626 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
00627 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
00628 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
00629 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
00630 #define dispatch7(n,a,b,c,d,e,f,g) ripper_dispatch7(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e), (f), (g))
00631
00632 #define yyparse ripper_yyparse
00633
00634 #define ripper_intern(s) ID2SYM(rb_intern(s))
00635 static VALUE ripper_id2sym(ID);
00636 #ifdef __GNUC__
00637 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00638 ID2SYM(id) : ripper_id2sym(id))
00639 #endif
00640
00641 #define arg_new() dispatch0(args_new)
00642 #define arg_add(l,a) dispatch2(args_add, (l), (a))
00643 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
00644 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
00645 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
00646 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
00647 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
00648
00649 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
00650 #define mrhs_new() dispatch0(mrhs_new)
00651 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
00652 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
00653
00654 #define mlhs_new() dispatch0(mlhs_new)
00655 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
00656 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
00657
00658 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
00659 dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
00660
00661 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
00662 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
00663 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
00664
00665 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
00666 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
00667 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
00668
00669 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00670
00671 static inline VALUE
00672 new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail)
00673 {
00674 NODE *t = (NODE *)tail;
00675 VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
00676 return params_new(f, o, r, p, k, kr, escape_Qundef(b));
00677 }
00678 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
00679
00680 static inline VALUE
00681 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
00682 {
00683 return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b);
00684 }
00685 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
00686
00687 #define new_defined(expr) dispatch1(defined, (expr))
00688
00689 #define FIXME 0
00690
00691 #endif
00692
00693 #ifndef RIPPER
00694 # define Qnone 0
00695 # define ifndef_ripper(x) (x)
00696 #else
00697 # define Qnone Qnil
00698 # define ifndef_ripper(x)
00699 #endif
00700
00701 #ifndef RIPPER
00702 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
00703 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00704 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00705 # define rb_warn4S(file,line,fmt,a) rb_compile_warn((file), (line), (fmt), (a))
00706 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
00707 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00708 #else
00709 # define rb_warn0(fmt) ripper_warn0(parser, (fmt))
00710 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a))
00711 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a))
00712 # define rb_warn4S(file,line,fmt,a) ripper_warnS(parser, (fmt), (a))
00713 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
00714 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
00715 static void ripper_warn0(struct parser_params*, const char*);
00716 static void ripper_warnI(struct parser_params*, const char*, int);
00717 static void ripper_warnS(struct parser_params*, const char*, const char*);
00718 static void ripper_warning0(struct parser_params*, const char*);
00719 static void ripper_warningS(struct parser_params*, const char*, const char*);
00720 #endif
00721
00722 #ifdef RIPPER
00723 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00724 # define rb_compile_error ripper_compile_error
00725 # define compile_error ripper_compile_error
00726 # define PARSER_ARG parser,
00727 #else
00728 # define rb_compile_error rb_compile_error_with_enc
00729 # define compile_error parser->nerr++,rb_compile_error_with_enc
00730 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
00731 #endif
00732
00733
00734
00735
00736 #ifdef OLD_YACC
00737 #ifndef YYMAXDEPTH
00738 #define YYMAXDEPTH 10000
00739 #endif
00740 #endif
00741
00742 #ifndef RIPPER
00743 static void token_info_push(struct parser_params*, const char *token);
00744 static void token_info_pop(struct parser_params*, const char *token);
00745 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
00746 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
00747 #else
00748 #define token_info_push(token)
00749 #define token_info_pop(token)
00750 #endif
00751
00752
00753
00754 #line 755 "parse.c"
00755
00756
00757 #ifndef YYDEBUG
00758 # define YYDEBUG 0
00759 #endif
00760
00761
00762 #ifdef YYERROR_VERBOSE
00763 # undef YYERROR_VERBOSE
00764 # define YYERROR_VERBOSE 1
00765 #else
00766 # define YYERROR_VERBOSE 0
00767 #endif
00768
00769
00770 #ifndef YYTOKEN_TABLE
00771 # define YYTOKEN_TABLE 0
00772 #endif
00773
00774
00775
00776 #ifndef YYTOKENTYPE
00777 # define YYTOKENTYPE
00778
00779
00780 enum yytokentype {
00781 END_OF_INPUT = 0,
00782 keyword_class = 258,
00783 keyword_module = 259,
00784 keyword_def = 260,
00785 keyword_undef = 261,
00786 keyword_begin = 262,
00787 keyword_rescue = 263,
00788 keyword_ensure = 264,
00789 keyword_end = 265,
00790 keyword_if = 266,
00791 keyword_unless = 267,
00792 keyword_then = 268,
00793 keyword_elsif = 269,
00794 keyword_else = 270,
00795 keyword_case = 271,
00796 keyword_when = 272,
00797 keyword_while = 273,
00798 keyword_until = 274,
00799 keyword_for = 275,
00800 keyword_break = 276,
00801 keyword_next = 277,
00802 keyword_redo = 278,
00803 keyword_retry = 279,
00804 keyword_in = 280,
00805 keyword_do = 281,
00806 keyword_do_cond = 282,
00807 keyword_do_block = 283,
00808 keyword_do_LAMBDA = 284,
00809 keyword_return = 285,
00810 keyword_yield = 286,
00811 keyword_super = 287,
00812 keyword_self = 288,
00813 keyword_nil = 289,
00814 keyword_true = 290,
00815 keyword_false = 291,
00816 keyword_and = 292,
00817 keyword_or = 293,
00818 keyword_not = 294,
00819 modifier_if = 295,
00820 modifier_unless = 296,
00821 modifier_while = 297,
00822 modifier_until = 298,
00823 modifier_rescue = 299,
00824 keyword_alias = 300,
00825 keyword_defined = 301,
00826 keyword_BEGIN = 302,
00827 keyword_END = 303,
00828 keyword__LINE__ = 304,
00829 keyword__FILE__ = 305,
00830 keyword__ENCODING__ = 306,
00831 tIDENTIFIER = 307,
00832 tFID = 308,
00833 tGVAR = 309,
00834 tIVAR = 310,
00835 tCONSTANT = 311,
00836 tCVAR = 312,
00837 tLABEL = 313,
00838 tINTEGER = 314,
00839 tFLOAT = 315,
00840 tRATIONAL = 316,
00841 tIMAGINARY = 317,
00842 tSTRING_CONTENT = 318,
00843 tCHAR = 319,
00844 tNTH_REF = 320,
00845 tBACK_REF = 321,
00846 tREGEXP_END = 322,
00847 tUPLUS = 130,
00848 tUMINUS = 131,
00849 tPOW = 132,
00850 tCMP = 134,
00851 tEQ = 139,
00852 tEQQ = 140,
00853 tNEQ = 141,
00854 tGEQ = 138,
00855 tLEQ = 137,
00856 tANDOP = 323,
00857 tOROP = 324,
00858 tMATCH = 142,
00859 tNMATCH = 143,
00860 tDOT2 = 128,
00861 tDOT3 = 129,
00862 tAREF = 144,
00863 tASET = 145,
00864 tLSHFT = 135,
00865 tRSHFT = 136,
00866 tCOLON2 = 325,
00867 tCOLON3 = 326,
00868 tOP_ASGN = 327,
00869 tASSOC = 328,
00870 tLPAREN = 329,
00871 tLPAREN_ARG = 330,
00872 tRPAREN = 331,
00873 tLBRACK = 332,
00874 tLBRACE = 333,
00875 tLBRACE_ARG = 334,
00876 tSTAR = 335,
00877 tDSTAR = 336,
00878 tAMPER = 337,
00879 tLAMBDA = 338,
00880 tSYMBEG = 339,
00881 tSTRING_BEG = 340,
00882 tXSTRING_BEG = 341,
00883 tREGEXP_BEG = 342,
00884 tWORDS_BEG = 343,
00885 tQWORDS_BEG = 344,
00886 tSYMBOLS_BEG = 345,
00887 tQSYMBOLS_BEG = 346,
00888 tSTRING_DBEG = 347,
00889 tSTRING_DEND = 348,
00890 tSTRING_DVAR = 349,
00891 tSTRING_END = 350,
00892 tLAMBEG = 351,
00893 tLOWEST = 352,
00894 tUMINUS_NUM = 353,
00895 tLAST_TOKEN = 354
00896 };
00897 #endif
00898
00899
00900
00901 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00902 typedef union YYSTYPE
00903 {
00904
00905
00906 #line 699 "parse.y"
00907
00908 VALUE val;
00909 NODE *node;
00910 ID id;
00911 int num;
00912 const struct vtable *vars;
00913
00914
00915
00916
00917 #line 918 "parse.c"
00918 } YYSTYPE;
00919 # define YYSTYPE_IS_TRIVIAL 1
00920 # define yystype YYSTYPE
00921 # define YYSTYPE_IS_DECLARED 1
00922 #endif
00923
00924
00925
00926
00927
00928
00929 #line 930 "parse.c"
00930
00931 #ifdef short
00932 # undef short
00933 #endif
00934
00935 #ifdef YYTYPE_UINT8
00936 typedef YYTYPE_UINT8 yytype_uint8;
00937 #else
00938 typedef unsigned char yytype_uint8;
00939 #endif
00940
00941 #ifdef YYTYPE_INT8
00942 typedef YYTYPE_INT8 yytype_int8;
00943 #elif (defined __STDC__ || defined __C99__FUNC__ \
00944 || defined __cplusplus || defined _MSC_VER)
00945 typedef signed char yytype_int8;
00946 #else
00947 typedef short int yytype_int8;
00948 #endif
00949
00950 #ifdef YYTYPE_UINT16
00951 typedef YYTYPE_UINT16 yytype_uint16;
00952 #else
00953 typedef unsigned short int yytype_uint16;
00954 #endif
00955
00956 #ifdef YYTYPE_INT16
00957 typedef YYTYPE_INT16 yytype_int16;
00958 #else
00959 typedef short int yytype_int16;
00960 #endif
00961
00962 #ifndef YYSIZE_T
00963 # ifdef __SIZE_TYPE__
00964 # define YYSIZE_T __SIZE_TYPE__
00965 # elif defined size_t
00966 # define YYSIZE_T size_t
00967 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00968 || defined __cplusplus || defined _MSC_VER)
00969 # include <stddef.h>
00970 # define YYSIZE_T size_t
00971 # else
00972 # define YYSIZE_T unsigned int
00973 # endif
00974 #endif
00975
00976 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00977
00978 #ifndef YY_
00979 # if defined YYENABLE_NLS && YYENABLE_NLS
00980 # if ENABLE_NLS
00981 # include <libintl.h>
00982 # define YY_(msgid) dgettext ("bison-runtime", msgid)
00983 # endif
00984 # endif
00985 # ifndef YY_
00986 # define YY_(msgid) msgid
00987 # endif
00988 #endif
00989
00990
00991 #if ! defined lint || defined __GNUC__
00992 # define YYUSE(e) ((void) (e))
00993 #else
00994 # define YYUSE(e)
00995 #endif
00996
00997
00998 #ifndef lint
00999 # define YYID(n) (n)
01000 #else
01001 #if (defined __STDC__ || defined __C99__FUNC__ \
01002 || defined __cplusplus || defined _MSC_VER)
01003 static int
01004 YYID (int yyi)
01005 #else
01006 static int
01007 YYID (yyi)
01008 int yyi;
01009 #endif
01010 {
01011 return yyi;
01012 }
01013 #endif
01014
01015 #if ! defined yyoverflow || YYERROR_VERBOSE
01016
01017
01018
01019 # ifdef YYSTACK_USE_ALLOCA
01020 # if YYSTACK_USE_ALLOCA
01021 # ifdef __GNUC__
01022 # define YYSTACK_ALLOC __builtin_alloca
01023 # elif defined __BUILTIN_VA_ARG_INCR
01024 # include <alloca.h>
01025 # elif defined _AIX
01026 # define YYSTACK_ALLOC __alloca
01027 # elif defined _MSC_VER
01028 # include <malloc.h>
01029 # define alloca _alloca
01030 # else
01031 # define YYSTACK_ALLOC alloca
01032 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01033 || defined __cplusplus || defined _MSC_VER)
01034 # include <stdlib.h>
01035 # ifndef EXIT_SUCCESS
01036 # define EXIT_SUCCESS 0
01037 # endif
01038 # endif
01039 # endif
01040 # endif
01041 # endif
01042
01043 # ifdef YYSTACK_ALLOC
01044
01045 # define YYSTACK_FREE(Ptr) do { ; } while (YYID (0))
01046 # ifndef YYSTACK_ALLOC_MAXIMUM
01047
01048
01049
01050
01051 # define YYSTACK_ALLOC_MAXIMUM 4032
01052 # endif
01053 # else
01054 # define YYSTACK_ALLOC YYMALLOC
01055 # define YYSTACK_FREE YYFREE
01056 # ifndef YYSTACK_ALLOC_MAXIMUM
01057 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
01058 # endif
01059 # if (defined __cplusplus && ! defined EXIT_SUCCESS \
01060 && ! ((defined YYMALLOC || defined malloc) \
01061 && (defined YYFREE || defined free)))
01062 # include <stdlib.h>
01063 # ifndef EXIT_SUCCESS
01064 # define EXIT_SUCCESS 0
01065 # endif
01066 # endif
01067 # ifndef YYMALLOC
01068 # define YYMALLOC malloc
01069 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01070 || defined __cplusplus || defined _MSC_VER)
01071 void *malloc (YYSIZE_T);
01072 # endif
01073 # endif
01074 # ifndef YYFREE
01075 # define YYFREE free
01076 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01077 || defined __cplusplus || defined _MSC_VER)
01078 void free (void *);
01079 # endif
01080 # endif
01081 # endif
01082 #endif
01083
01084
01085 #if (! defined yyoverflow \
01086 && (! defined __cplusplus \
01087 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01088
01089
01090 union yyalloc
01091 {
01092 yytype_int16 yyss_alloc;
01093 YYSTYPE yyvs_alloc;
01094 };
01095
01096
01097 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01098
01099
01100
01101 # define YYSTACK_BYTES(N) \
01102 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01103 + YYSTACK_GAP_MAXIMUM)
01104
01105 # define YYCOPY_NEEDED 1
01106
01107
01108
01109
01110
01111
01112 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \
01113 do \
01114 { \
01115 YYSIZE_T yynewbytes; \
01116 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
01117 Stack = &yyptr->Stack_alloc; \
01118 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01119 yyptr += yynewbytes / sizeof (*yyptr); \
01120 } \
01121 while (YYID (0))
01122
01123 #endif
01124
01125 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
01126
01127
01128 # ifndef YYCOPY
01129 # if defined __GNUC__ && 1 < __GNUC__
01130 # define YYCOPY(To, From, Count) \
01131 __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01132 # else
01133 # define YYCOPY(To, From, Count) \
01134 do \
01135 { \
01136 YYSIZE_T yyi; \
01137 for (yyi = 0; yyi < (Count); yyi++) \
01138 (To)[yyi] = (From)[yyi]; \
01139 } \
01140 while (YYID (0))
01141 # endif
01142 # endif
01143 #endif
01144
01145
01146 #define YYFINAL 3
01147
01148 #define YYLAST 11071
01149
01150
01151 #define YYNTOKENS 144
01152
01153 #define YYNNTS 203
01154
01155 #define YYNRULES 626
01156
01157 #define YYNSTATES 1059
01158
01159
01160 #define YYUNDEFTOK 2
01161 #define YYMAXUTOK 354
01162
01163 #define YYTRANSLATE(YYX) \
01164 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01165
01166
01167 static const yytype_uint8 yytranslate[] =
01168 {
01169 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01170 143, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01171 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01172 2, 2, 142, 129, 2, 2, 2, 127, 122, 2,
01173 138, 139, 125, 123, 136, 124, 135, 126, 2, 2,
01174 2, 2, 2, 2, 2, 2, 2, 2, 117, 141,
01175 119, 115, 118, 116, 2, 2, 2, 2, 2, 2,
01176 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01177 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01178 2, 134, 2, 140, 121, 2, 137, 2, 2, 2,
01179 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01180 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01181 2, 2, 2, 132, 120, 133, 130, 2, 81, 82,
01182 68, 69, 70, 2, 71, 85, 86, 76, 75, 72,
01183 73, 74, 79, 80, 83, 84, 2, 2, 2, 2,
01184 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01185 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01186 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01187 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01188 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01189 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01190 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01191 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01192 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01193 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
01194 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
01195 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
01196 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
01197 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
01198 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
01199 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
01200 55, 56, 57, 58, 59, 60, 61, 62, 63, 64,
01201 65, 66, 67, 77, 78, 87, 88, 89, 90, 91,
01202 92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
01203 102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
01204 112, 113, 114, 128, 131
01205 };
01206
01207 #if YYDEBUG
01208
01209
01210 static const yytype_uint16 yyprhs[] =
01211 {
01212 0, 0, 3, 4, 7, 10, 12, 14, 18, 21,
01213 23, 24, 30, 35, 38, 40, 42, 46, 49, 51,
01214 52, 58, 59, 64, 68, 72, 76, 79, 83, 87,
01215 91, 95, 99, 104, 106, 110, 114, 121, 127, 133,
01216 139, 145, 149, 153, 157, 159, 163, 167, 169, 173,
01217 177, 181, 184, 186, 188, 190, 192, 194, 199, 200,
01218 206, 208, 211, 215, 220, 226, 231, 237, 240, 243,
01219 246, 249, 252, 254, 258, 260, 264, 266, 269, 273,
01220 279, 282, 287, 290, 295, 297, 301, 303, 307, 310,
01221 314, 316, 320, 322, 324, 329, 333, 337, 341, 345,
01222 348, 350, 352, 354, 359, 363, 367, 371, 375, 378,
01223 380, 382, 384, 387, 389, 393, 395, 397, 399, 401,
01224 403, 405, 407, 409, 411, 413, 414, 419, 421, 423,
01225 425, 427, 429, 431, 433, 435, 437, 439, 441, 443,
01226 445, 447, 449, 451, 453, 455, 457, 459, 461, 463,
01227 465, 467, 469, 471, 473, 475, 477, 479, 481, 483,
01228 485, 487, 489, 491, 493, 495, 497, 499, 501, 503,
01229 505, 507, 509, 511, 513, 515, 517, 519, 521, 523,
01230 525, 527, 529, 531, 533, 535, 537, 539, 541, 543,
01231 545, 547, 549, 551, 553, 555, 557, 559, 561, 565,
01232 571, 575, 581, 588, 594, 600, 606, 612, 617, 621,
01233 625, 629, 633, 637, 641, 645, 649, 653, 658, 661,
01234 664, 668, 672, 676, 680, 684, 688, 692, 696, 700,
01235 704, 708, 712, 716, 719, 722, 726, 730, 734, 738,
01236 739, 744, 751, 753, 755, 757, 760, 765, 768, 772,
01237 774, 776, 778, 780, 783, 788, 791, 793, 796, 799,
01238 804, 806, 807, 810, 813, 816, 818, 820, 823, 827,
01239 832, 834, 836, 840, 845, 848, 850, 852, 854, 856,
01240 858, 860, 862, 864, 866, 868, 870, 871, 876, 877,
01241 881, 882, 883, 889, 893, 897, 900, 904, 908, 910,
01242 915, 919, 921, 922, 929, 934, 938, 941, 943, 946,
01243 949, 956, 963, 964, 965, 973, 974, 975, 983, 989,
01244 994, 995, 996, 1006, 1007, 1014, 1015, 1016, 1025, 1026,
01245 1032, 1033, 1040, 1041, 1042, 1052, 1054, 1056, 1058, 1060,
01246 1062, 1064, 1066, 1068, 1070, 1072, 1074, 1076, 1078, 1080,
01247 1082, 1084, 1086, 1088, 1091, 1093, 1095, 1097, 1103, 1105,
01248 1108, 1110, 1112, 1114, 1118, 1120, 1124, 1126, 1131, 1138,
01249 1142, 1148, 1151, 1156, 1158, 1162, 1167, 1170, 1173, 1175,
01250 1178, 1179, 1186, 1195, 1200, 1207, 1212, 1215, 1222, 1225,
01251 1230, 1237, 1240, 1245, 1248, 1253, 1255, 1257, 1259, 1263,
01252 1265, 1270, 1272, 1277, 1279, 1283, 1285, 1287, 1288, 1289,
01253 1290, 1296, 1301, 1303, 1307, 1311, 1312, 1318, 1321, 1326,
01254 1332, 1338, 1341, 1342, 1348, 1349, 1355, 1359, 1360, 1365,
01255 1366, 1371, 1374, 1376, 1381, 1382, 1388, 1389, 1395, 1401,
01256 1403, 1405, 1412, 1414, 1416, 1418, 1420, 1423, 1425, 1428,
01257 1430, 1432, 1434, 1436, 1438, 1440, 1442, 1445, 1449, 1453,
01258 1457, 1461, 1465, 1466, 1470, 1472, 1475, 1479, 1483, 1484,
01259 1488, 1492, 1496, 1500, 1504, 1505, 1509, 1510, 1514, 1515,
01260 1518, 1519, 1522, 1523, 1526, 1528, 1529, 1533, 1534, 1535,
01261 1536, 1543, 1545, 1547, 1549, 1551, 1554, 1556, 1558, 1560,
01262 1562, 1566, 1568, 1571, 1573, 1575, 1577, 1579, 1581, 1583,
01263 1585, 1587, 1589, 1591, 1593, 1595, 1597, 1599, 1601, 1603,
01264 1605, 1607, 1609, 1611, 1613, 1615, 1617, 1618, 1623, 1626,
01265 1630, 1631, 1635, 1640, 1643, 1646, 1648, 1651, 1652, 1659,
01266 1668, 1673, 1680, 1685, 1692, 1695, 1700, 1707, 1710, 1715,
01267 1718, 1723, 1725, 1726, 1728, 1730, 1732, 1734, 1736, 1738,
01268 1740, 1744, 1746, 1750, 1752, 1755, 1757, 1760, 1762, 1764,
01269 1768, 1770, 1774, 1776, 1778, 1781, 1783, 1787, 1791, 1793,
01270 1797, 1799, 1803, 1805, 1807, 1810, 1812, 1814, 1816, 1819,
01271 1822, 1824, 1826, 1827, 1832, 1834, 1837, 1839, 1843, 1847,
01272 1850, 1853, 1855, 1857, 1859, 1861, 1863, 1865, 1867, 1869,
01273 1871, 1873, 1875, 1877, 1878, 1880, 1881, 1883, 1886, 1889,
01274 1890, 1892, 1894, 1896, 1898, 1900, 1903
01275 };
01276
01277
01278 static const yytype_int16 yyrhs[] =
01279 {
01280 145, 0, -1, -1, 146, 147, -1, 148, 339, -1,
01281 346, -1, 149, -1, 148, 345, 149, -1, 1, 149,
01282 -1, 156, -1, -1, 47, 150, 132, 147, 133, -1,
01283 152, 265, 233, 268, -1, 153, 339, -1, 346, -1,
01284 154, -1, 153, 345, 154, -1, 1, 156, -1, 156,
01285 -1, -1, 47, 155, 132, 147, 133, -1, -1, 45,
01286 179, 157, 179, -1, 45, 54, 54, -1, 45, 54,
01287 66, -1, 45, 54, 65, -1, 6, 180, -1, 156,
01288 40, 160, -1, 156, 41, 160, -1, 156, 42, 160,
01289 -1, 156, 43, 160, -1, 156, 44, 156, -1, 48,
01290 132, 152, 133, -1, 158, -1, 167, 115, 161, -1,
01291 301, 89, 161, -1, 218, 134, 190, 342, 89, 161,
01292 -1, 218, 135, 52, 89, 161, -1, 218, 135, 56,
01293 89, 161, -1, 218, 87, 56, 89, 161, -1, 218,
01294 87, 52, 89, 161, -1, 302, 89, 161, -1, 174,
01295 115, 198, -1, 167, 115, 197, -1, 159, -1, 174,
01296 115, 161, -1, 174, 115, 158, -1, 161, -1, 159,
01297 37, 159, -1, 159, 38, 159, -1, 39, 340, 159,
01298 -1, 129, 161, -1, 184, -1, 159, -1, 166, -1,
01299 162, -1, 254, -1, 254, 338, 336, 192, -1, -1,
01300 96, 164, 241, 152, 133, -1, 335, -1, 165, 192,
01301 -1, 165, 192, 163, -1, 218, 135, 336, 192, -1,
01302 218, 135, 336, 192, 163, -1, 218, 87, 336, 192,
01303 -1, 218, 87, 336, 192, 163, -1, 32, 192, -1,
01304 31, 192, -1, 30, 191, -1, 21, 191, -1, 22,
01305 191, -1, 169, -1, 91, 168, 341, -1, 169, -1,
01306 91, 168, 341, -1, 171, -1, 171, 170, -1, 171,
01307 97, 173, -1, 171, 97, 173, 136, 172, -1, 171,
01308 97, -1, 171, 97, 136, 172, -1, 97, 173, -1,
01309 97, 173, 136, 172, -1, 97, -1, 97, 136, 172,
01310 -1, 173, -1, 91, 168, 341, -1, 170, 136, -1,
01311 171, 170, 136, -1, 170, -1, 172, 136, 170, -1,
01312 298, -1, 299, -1, 218, 134, 190, 342, -1, 218,
01313 135, 52, -1, 218, 87, 52, -1, 218, 135, 56,
01314 -1, 218, 87, 56, -1, 88, 56, -1, 302, -1,
01315 298, -1, 299, -1, 218, 134, 190, 342, -1, 218,
01316 135, 52, -1, 218, 87, 52, -1, 218, 135, 56,
01317 -1, 218, 87, 56, -1, 88, 56, -1, 302, -1,
01318 52, -1, 56, -1, 88, 175, -1, 175, -1, 218,
01319 87, 175, -1, 52, -1, 56, -1, 53, -1, 182,
01320 -1, 183, -1, 177, -1, 293, -1, 178, -1, 295,
01321 -1, 179, -1, -1, 180, 136, 181, 179, -1, 120,
01322 -1, 121, -1, 122, -1, 71, -1, 72, -1, 73,
01323 -1, 79, -1, 80, -1, 118, -1, 75, -1, 119,
01324 -1, 76, -1, 74, -1, 85, -1, 86, -1, 123,
01325 -1, 124, -1, 125, -1, 97, -1, 126, -1, 127,
01326 -1, 70, -1, 98, -1, 129, -1, 130, -1, 68,
01327 -1, 69, -1, 83, -1, 84, -1, 137, -1, 49,
01328 -1, 50, -1, 51, -1, 47, -1, 48, -1, 45,
01329 -1, 37, -1, 7, -1, 21, -1, 16, -1, 3,
01330 -1, 5, -1, 46, -1, 26, -1, 15, -1, 14,
01331 -1, 10, -1, 9, -1, 36, -1, 20, -1, 25,
01332 -1, 4, -1, 22, -1, 34, -1, 39, -1, 38,
01333 -1, 23, -1, 8, -1, 24, -1, 30, -1, 33,
01334 -1, 32, -1, 13, -1, 35, -1, 6, -1, 17,
01335 -1, 31, -1, 11, -1, 12, -1, 18, -1, 19,
01336 -1, 174, 115, 184, -1, 174, 115, 184, 44, 184,
01337 -1, 301, 89, 184, -1, 301, 89, 184, 44, 184,
01338 -1, 218, 134, 190, 342, 89, 184, -1, 218, 135,
01339 52, 89, 184, -1, 218, 135, 56, 89, 184, -1,
01340 218, 87, 52, 89, 184, -1, 218, 87, 56, 89,
01341 184, -1, 88, 56, 89, 184, -1, 302, 89, 184,
01342 -1, 184, 81, 184, -1, 184, 82, 184, -1, 184,
01343 123, 184, -1, 184, 124, 184, -1, 184, 125, 184,
01344 -1, 184, 126, 184, -1, 184, 127, 184, -1, 184,
01345 70, 184, -1, 128, 297, 70, 184, -1, 68, 184,
01346 -1, 69, 184, -1, 184, 120, 184, -1, 184, 121,
01347 184, -1, 184, 122, 184, -1, 184, 71, 184, -1,
01348 184, 118, 184, -1, 184, 75, 184, -1, 184, 119,
01349 184, -1, 184, 76, 184, -1, 184, 72, 184, -1,
01350 184, 73, 184, -1, 184, 74, 184, -1, 184, 79,
01351 184, -1, 184, 80, 184, -1, 129, 184, -1, 130,
01352 184, -1, 184, 85, 184, -1, 184, 86, 184, -1,
01353 184, 77, 184, -1, 184, 78, 184, -1, -1, 46,
01354 340, 185, 184, -1, 184, 116, 184, 340, 117, 184,
01355 -1, 199, -1, 184, -1, 346, -1, 196, 343, -1,
01356 196, 136, 333, 343, -1, 333, 343, -1, 138, 190,
01357 341, -1, 346, -1, 188, -1, 346, -1, 191, -1,
01358 196, 136, -1, 196, 136, 333, 136, -1, 333, 136,
01359 -1, 166, -1, 196, 195, -1, 333, 195, -1, 196,
01360 136, 333, 195, -1, 194, -1, -1, 193, 191, -1,
01361 99, 186, -1, 136, 194, -1, 346, -1, 186, -1,
01362 97, 186, -1, 196, 136, 186, -1, 196, 136, 97,
01363 186, -1, 198, -1, 186, -1, 196, 136, 186, -1,
01364 196, 136, 97, 186, -1, 97, 186, -1, 269, -1,
01365 270, -1, 273, -1, 274, -1, 275, -1, 280, -1,
01366 278, -1, 281, -1, 300, -1, 302, -1, 53, -1,
01367 -1, 219, 200, 151, 229, -1, -1, 92, 201, 341,
01368 -1, -1, -1, 92, 202, 159, 203, 341, -1, 91,
01369 152, 139, -1, 218, 87, 56, -1, 88, 56, -1,
01370 94, 187, 140, -1, 95, 332, 133, -1, 30, -1,
01371 31, 138, 191, 341, -1, 31, 138, 341, -1, 31,
01372 -1, -1, 46, 340, 138, 204, 159, 341, -1, 39,
01373 138, 159, 341, -1, 39, 138, 341, -1, 165, 260,
01374 -1, 255, -1, 255, 260, -1, 100, 246, -1, 220,
01375 160, 230, 152, 232, 229, -1, 221, 160, 230, 152,
01376 233, 229, -1, -1, -1, 222, 205, 160, 231, 206,
01377 152, 229, -1, -1, -1, 223, 207, 160, 231, 208,
01378 152, 229, -1, 224, 160, 339, 263, 229, -1, 224,
01379 339, 263, 229, -1, -1, -1, 225, 234, 25, 209,
01380 160, 231, 210, 152, 229, -1, -1, 226, 176, 303,
01381 211, 151, 229, -1, -1, -1, 226, 85, 159, 212,
01382 344, 213, 151, 229, -1, -1, 227, 176, 214, 151,
01383 229, -1, -1, 228, 177, 215, 305, 151, 229, -1,
01384 -1, -1, 228, 330, 338, 216, 177, 217, 305, 151,
01385 229, -1, 21, -1, 22, -1, 23, -1, 24, -1,
01386 199, -1, 7, -1, 11, -1, 12, -1, 18, -1,
01387 19, -1, 16, -1, 20, -1, 3, -1, 4, -1,
01388 5, -1, 10, -1, 344, -1, 13, -1, 344, 13,
01389 -1, 344, -1, 27, -1, 233, -1, 14, 160, 230,
01390 152, 232, -1, 346, -1, 15, 152, -1, 174, -1,
01391 167, -1, 311, -1, 91, 237, 341, -1, 235, -1,
01392 236, 136, 235, -1, 236, -1, 236, 136, 97, 311,
01393 -1, 236, 136, 97, 311, 136, 236, -1, 236, 136,
01394 97, -1, 236, 136, 97, 136, 236, -1, 97, 311,
01395 -1, 97, 311, 136, 236, -1, 97, -1, 97, 136,
01396 236, -1, 317, 136, 320, 329, -1, 317, 329, -1,
01397 320, 329, -1, 328, -1, 136, 238, -1, -1, 313,
01398 136, 323, 136, 326, 239, -1, 313, 136, 323, 136,
01399 326, 136, 313, 239, -1, 313, 136, 323, 239, -1,
01400 313, 136, 323, 136, 313, 239, -1, 313, 136, 326,
01401 239, -1, 313, 136, -1, 313, 136, 326, 136, 313,
01402 239, -1, 313, 239, -1, 323, 136, 326, 239, -1,
01403 323, 136, 326, 136, 313, 239, -1, 323, 239, -1,
01404 323, 136, 313, 239, -1, 326, 239, -1, 326, 136,
01405 313, 239, -1, 238, -1, 346, -1, 242, -1, 120,
01406 243, 120, -1, 78, -1, 120, 240, 243, 120, -1,
01407 340, -1, 340, 141, 244, 340, -1, 245, -1, 244,
01408 136, 245, -1, 52, -1, 310, -1, -1, -1, -1,
01409 247, 248, 250, 249, 251, -1, 138, 309, 243, 139,
01410 -1, 309, -1, 113, 152, 133, -1, 29, 152, 10,
01411 -1, -1, 28, 253, 241, 152, 10, -1, 166, 252,
01412 -1, 254, 338, 336, 189, -1, 254, 338, 336, 189,
01413 260, -1, 254, 338, 336, 192, 252, -1, 165, 188,
01414 -1, -1, 218, 135, 336, 256, 189, -1, -1, 218,
01415 87, 336, 257, 188, -1, 218, 87, 337, -1, -1,
01416 218, 135, 258, 188, -1, -1, 218, 87, 259, 188,
01417 -1, 32, 188, -1, 32, -1, 218, 134, 190, 342,
01418 -1, -1, 132, 261, 241, 152, 133, -1, -1, 26,
01419 262, 241, 152, 10, -1, 17, 196, 230, 152, 264,
01420 -1, 233, -1, 263, -1, 8, 266, 267, 230, 152,
01421 265, -1, 346, -1, 186, -1, 198, -1, 346, -1,
01422 90, 174, -1, 346, -1, 9, 152, -1, 346, -1,
01423 296, -1, 293, -1, 295, -1, 271, -1, 64, -1,
01424 272, -1, 271, 272, -1, 102, 284, 112, -1, 103,
01425 285, 112, -1, 104, 286, 67, -1, 105, 142, 112,
01426 -1, 105, 276, 112, -1, -1, 276, 277, 142, -1,
01427 287, -1, 277, 287, -1, 107, 142, 112, -1, 107,
01428 279, 112, -1, -1, 279, 277, 142, -1, 106, 142,
01429 112, -1, 106, 282, 112, -1, 108, 142, 112, -1,
01430 108, 283, 112, -1, -1, 282, 63, 142, -1, -1,
01431 283, 63, 142, -1, -1, 284, 287, -1, -1, 285,
01432 287, -1, -1, 286, 287, -1, 63, -1, -1, 111,
01433 288, 292, -1, -1, -1, -1, 109, 289, 290, 291,
01434 152, 110, -1, 54, -1, 55, -1, 57, -1, 302,
01435 -1, 101, 294, -1, 177, -1, 55, -1, 54, -1,
01436 57, -1, 101, 285, 112, -1, 297, -1, 128, 297,
01437 -1, 59, -1, 60, -1, 61, -1, 62, -1, 52,
01438 -1, 55, -1, 54, -1, 56, -1, 57, -1, 34,
01439 -1, 33, -1, 35, -1, 36, -1, 50, -1, 49,
01440 -1, 51, -1, 298, -1, 299, -1, 298, -1, 299,
01441 -1, 65, -1, 66, -1, 344, -1, -1, 119, 304,
01442 160, 344, -1, 1, 344, -1, 138, 309, 341, -1,
01443 -1, 306, 309, 344, -1, 318, 136, 320, 329, -1,
01444 318, 329, -1, 320, 329, -1, 328, -1, 136, 307,
01445 -1, -1, 313, 136, 324, 136, 326, 308, -1, 313,
01446 136, 324, 136, 326, 136, 313, 308, -1, 313, 136,
01447 324, 308, -1, 313, 136, 324, 136, 313, 308, -1,
01448 313, 136, 326, 308, -1, 313, 136, 326, 136, 313,
01449 308, -1, 313, 308, -1, 324, 136, 326, 308, -1,
01450 324, 136, 326, 136, 313, 308, -1, 324, 308, -1,
01451 324, 136, 313, 308, -1, 326, 308, -1, 326, 136,
01452 313, 308, -1, 307, -1, -1, 56, -1, 55, -1,
01453 54, -1, 57, -1, 310, -1, 52, -1, 311, -1,
01454 91, 237, 341, -1, 312, -1, 313, 136, 312, -1,
01455 58, -1, 314, 186, -1, 314, -1, 314, 218, -1,
01456 314, -1, 316, -1, 317, 136, 316, -1, 315, -1,
01457 318, 136, 315, -1, 70, -1, 98, -1, 319, 52,
01458 -1, 319, -1, 311, 115, 186, -1, 311, 115, 218,
01459 -1, 322, -1, 323, 136, 322, -1, 321, -1, 324,
01460 136, 321, -1, 125, -1, 97, -1, 325, 52, -1,
01461 325, -1, 122, -1, 99, -1, 327, 52, -1, 136,
01462 328, -1, 346, -1, 300, -1, -1, 138, 331, 159,
01463 341, -1, 346, -1, 333, 343, -1, 334, -1, 333,
01464 136, 334, -1, 186, 90, 186, -1, 58, 186, -1,
01465 98, 186, -1, 52, -1, 56, -1, 53, -1, 52,
01466 -1, 56, -1, 53, -1, 182, -1, 52, -1, 53,
01467 -1, 182, -1, 135, -1, 87, -1, -1, 345, -1,
01468 -1, 143, -1, 340, 139, -1, 340, 140, -1, -1,
01469 143, -1, 136, -1, 141, -1, 143, -1, 344, -1,
01470 345, 141, -1, -1
01471 };
01472
01473
01474 static const yytype_uint16 yyrline[] =
01475 {
01476 0, 863, 863, 863, 894, 905, 914, 922, 930, 936,
01477 938, 937, 958, 991, 1002, 1011, 1019, 1027, 1033, 1038,
01478 1037, 1058, 1058, 1066, 1074, 1085, 1095, 1103, 1112, 1121,
01479 1134, 1147, 1156, 1168, 1169, 1179, 1184, 1205, 1210, 1215,
01480 1225, 1230, 1240, 1249, 1258, 1261, 1270, 1282, 1283, 1291,
01481 1299, 1307, 1315, 1318, 1330, 1331, 1334, 1335, 1347, 1346,
01482 1368, 1378, 1387, 1400, 1409, 1421, 1430, 1442, 1451, 1460,
01483 1468, 1476, 1486, 1487, 1497, 1498, 1508, 1516, 1524, 1532,
01484 1541, 1549, 1558, 1566, 1575, 1583, 1594, 1595, 1605, 1613,
01485 1623, 1631, 1641, 1645, 1649, 1657, 1665, 1673, 1681, 1693,
01486 1703, 1715, 1724, 1733, 1741, 1749, 1757, 1765, 1778, 1791,
01487 1802, 1810, 1813, 1821, 1829, 1839, 1840, 1841, 1842, 1847,
01488 1858, 1859, 1862, 1870, 1873, 1881, 1881, 1891, 1892, 1893,
01489 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903,
01490 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913,
01491 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1923, 1923, 1923,
01492 1924, 1924, 1925, 1925, 1925, 1926, 1926, 1926, 1926, 1927,
01493 1927, 1927, 1927, 1928, 1928, 1928, 1929, 1929, 1929, 1929,
01494 1930, 1930, 1930, 1930, 1931, 1931, 1931, 1931, 1932, 1932,
01495 1932, 1932, 1933, 1933, 1933, 1933, 1934, 1934, 1937, 1946,
01496 1956, 1961, 1971, 1997, 2002, 2007, 2012, 2022, 2032, 2043,
01497 2057, 2071, 2079, 2087, 2095, 2103, 2111, 2119, 2128, 2136,
01498 2144, 2152, 2160, 2168, 2176, 2184, 2192, 2200, 2208, 2216,
01499 2224, 2232, 2243, 2251, 2259, 2267, 2275, 2283, 2291, 2299,
01500 2299, 2309, 2319, 2325, 2337, 2338, 2342, 2350, 2360, 2370,
01501 2371, 2374, 2375, 2376, 2380, 2388, 2398, 2407, 2415, 2425,
01502 2434, 2443, 2443, 2455, 2465, 2469, 2475, 2483, 2491, 2505,
01503 2521, 2522, 2525, 2539, 2554, 2564, 2565, 2566, 2567, 2568,
01504 2569, 2570, 2571, 2572, 2573, 2574, 2583, 2582, 2610, 2610,
01505 2619, 2623, 2618, 2632, 2640, 2648, 2656, 2669, 2677, 2685,
01506 2693, 2701, 2709, 2709, 2719, 2727, 2735, 2745, 2746, 2756,
01507 2760, 2772, 2784, 2784, 2784, 2795, 2795, 2795, 2806, 2817,
01508 2826, 2828, 2825, 2892, 2891, 2913, 2918, 2912, 2937, 2936,
01509 2958, 2957, 2980, 2981, 2980, 3001, 3009, 3017, 3025, 3035,
01510 3047, 3053, 3059, 3065, 3071, 3077, 3083, 3089, 3095, 3101,
01511 3111, 3117, 3122, 3123, 3130, 3135, 3138, 3139, 3152, 3153,
01512 3163, 3164, 3167, 3175, 3185, 3193, 3203, 3211, 3220, 3229,
01513 3237, 3245, 3254, 3266, 3274, 3285, 3289, 3293, 3297, 3303,
01514 3308, 3313, 3317, 3321, 3325, 3329, 3333, 3341, 3345, 3349,
01515 3353, 3357, 3361, 3365, 3369, 3373, 3379, 3380, 3386, 3395,
01516 3404, 3415, 3419, 3429, 3436, 3445, 3453, 3459, 3462, 3467,
01517 3459, 3483, 3491, 3497, 3501, 3508, 3507, 3528, 3544, 3553,
01518 3565, 3579, 3589, 3588, 3605, 3604, 3620, 3629, 3628, 3646,
01519 3645, 3662, 3670, 3678, 3693, 3692, 3712, 3711, 3732, 3744,
01520 3745, 3748, 3767, 3770, 3778, 3786, 3789, 3793, 3796, 3804,
01521 3807, 3808, 3816, 3819, 3836, 3837, 3838, 3848, 3858, 3885,
01522 3950, 3959, 3970, 3977, 3987, 3995, 4005, 4014, 4025, 4032,
01523 4044, 4053, 4063, 4072, 4083, 4090, 4101, 4108, 4123, 4130,
01524 4141, 4148, 4159, 4166, 4195, 4197, 4196, 4213, 4219, 4224,
01525 4212, 4243, 4251, 4259, 4267, 4270, 4281, 4282, 4283, 4284,
01526 4287, 4298, 4299, 4309, 4310, 4311, 4312, 4315, 4316, 4317,
01527 4318, 4319, 4322, 4323, 4324, 4325, 4326, 4327, 4328, 4331,
01528 4344, 4354, 4362, 4372, 4373, 4376, 4385, 4384, 4393, 4405,
01529 4415, 4415, 4428, 4432, 4436, 4440, 4446, 4451, 4456, 4460,
01530 4464, 4468, 4472, 4476, 4480, 4484, 4488, 4492, 4496, 4500,
01531 4504, 4508, 4513, 4519, 4528, 4537, 4546, 4557, 4558, 4565,
01532 4574, 4593, 4600, 4614, 4621, 4630, 4641, 4650, 4661, 4669,
01533 4686, 4694, 4710, 4711, 4714, 4719, 4725, 4737, 4749, 4757,
01534 4773, 4781, 4797, 4798, 4801, 4814, 4825, 4826, 4829, 4846,
01535 4850, 4860, 4870, 4870, 4899, 4900, 4910, 4917, 4927, 4939,
01536 4947, 4959, 4960, 4961, 4964, 4965, 4966, 4967, 4970, 4971,
01537 4972, 4975, 4980, 4987, 4988, 4991, 4992, 4995, 4998, 5001,
01538 5002, 5003, 5006, 5007, 5010, 5011, 5015
01539 };
01540 #endif
01541
01542 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01543
01544
01545 static const char *const yytname[] =
01546 {
01547 "\"end-of-input\"", "error", "$undefined", "keyword_class",
01548 "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
01549 "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
01550 "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
01551 "keyword_case", "keyword_when", "keyword_while", "keyword_until",
01552 "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
01553 "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
01554 "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
01555 "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
01556 "keyword_true", "keyword_false", "keyword_and", "keyword_or",
01557 "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
01558 "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
01559 "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
01560 "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
01561 "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tRATIONAL",
01562 "tIMAGINARY", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", "tBACK_REF",
01563 "tREGEXP_END", "\"unary+\"", "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"",
01564 "\"===\"", "\"!=\"", "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"",
01565 "\"!~\"", "\"..\"", "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"",
01566 "\"::\"", "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"",
01567 "\"( arg\"", "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"",
01568 "\"**arg\"", "\"&\"", "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG",
01569 "tREGEXP_BEG", "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG",
01570 "tQSYMBOLS_BEG", "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR",
01571 "tSTRING_END", "tLAMBEG", "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'",
01572 "'|'", "'^'", "'&'", "'+'", "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM",
01573 "'!'", "'~'", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','", "'`'",
01574 "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program", "$@1",
01575 "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt", "compstmt",
01576 "stmts", "stmt_or_begin", "$@3", "stmt", "$@4", "command_asgn", "expr",
01577 "expr_value", "command_call", "block_command", "cmd_brace_block", "@5",
01578 "fcall", "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item",
01579 "mlhs_head", "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname",
01580 "fsym", "fitem", "undef_list", "$@6", "op", "reswords", "arg", "$@7",
01581 "arg_value", "aref_args", "paren_args", "opt_paren_args",
01582 "opt_call_args", "call_args", "command_args", "@8", "block_arg",
01583 "opt_block_arg", "args", "mrhs_arg", "mrhs", "primary", "@9", "$@10",
01584 "$@11", "$@12", "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19",
01585 "@20", "@21", "@22", "@23", "@24", "$@25", "$@26", "primary_value",
01586 "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for",
01587 "k_class", "k_module", "k_def", "k_end", "then", "do", "if_tail",
01588 "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01589 "block_args_tail", "opt_block_args_tail", "block_param",
01590 "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
01591 "lambda", "@27", "@28", "@29", "f_larglist", "lambda_body", "do_block",
01592 "@30", "block_call", "method_call", "@31", "@32", "@33", "@34",
01593 "brace_block", "@35", "@36", "case_body", "cases", "opt_rescue",
01594 "exc_list", "exc_var", "opt_ensure", "literal", "strings", "string",
01595 "string1", "xstring", "regexp", "words", "word_list", "word", "symbols",
01596 "symbol_list", "qwords", "qsymbols", "qword_list", "qsym_list",
01597 "string_contents", "xstring_contents", "regexp_contents",
01598 "string_content", "@37", "@38", "@39", "@40", "string_dvar", "symbol",
01599 "sym", "dsym", "numeric", "simple_numeric", "user_variable",
01600 "keyword_variable", "var_ref", "var_lhs", "backref", "superclass",
01601 "$@41", "f_arglist", "@42", "args_tail", "opt_args_tail", "f_args",
01602 "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_label", "f_kw",
01603 "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest",
01604 "f_opt", "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
01605 "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
01606 "singleton", "$@43", "assoc_list", "assocs", "assoc", "operation",
01607 "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
01608 "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01609 };
01610 #endif
01611
01612 # ifdef YYPRINT
01613
01614
01615 static const yytype_uint16 yytoknum[] =
01616 {
01617 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
01618 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
01619 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
01620 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
01621 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
01622 305, 306, 307, 308, 309, 310, 311, 312, 313, 314,
01623 315, 316, 317, 318, 319, 320, 321, 322, 130, 131,
01624 132, 134, 139, 140, 141, 138, 137, 323, 324, 142,
01625 143, 128, 129, 144, 145, 135, 136, 325, 326, 327,
01626 328, 329, 330, 331, 332, 333, 334, 335, 336, 337,
01627 338, 339, 340, 341, 342, 343, 344, 345, 346, 347,
01628 348, 349, 350, 351, 352, 61, 63, 58, 62, 60,
01629 124, 94, 38, 43, 45, 42, 47, 37, 353, 33,
01630 126, 354, 123, 125, 91, 46, 44, 96, 40, 41,
01631 93, 59, 32, 10
01632 };
01633 # endif
01634
01635
01636 static const yytype_uint16 yyr1[] =
01637 {
01638 0, 144, 146, 145, 147, 148, 148, 148, 148, 149,
01639 150, 149, 151, 152, 153, 153, 153, 153, 154, 155,
01640 154, 157, 156, 156, 156, 156, 156, 156, 156, 156,
01641 156, 156, 156, 156, 156, 156, 156, 156, 156, 156,
01642 156, 156, 156, 156, 156, 158, 158, 159, 159, 159,
01643 159, 159, 159, 160, 161, 161, 162, 162, 164, 163,
01644 165, 166, 166, 166, 166, 166, 166, 166, 166, 166,
01645 166, 166, 167, 167, 168, 168, 169, 169, 169, 169,
01646 169, 169, 169, 169, 169, 169, 170, 170, 171, 171,
01647 172, 172, 173, 173, 173, 173, 173, 173, 173, 173,
01648 173, 174, 174, 174, 174, 174, 174, 174, 174, 174,
01649 175, 175, 176, 176, 176, 177, 177, 177, 177, 177,
01650 178, 178, 179, 179, 180, 181, 180, 182, 182, 182,
01651 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01652 182, 182, 182, 182, 182, 182, 182, 182, 182, 182,
01653 182, 182, 182, 182, 182, 182, 182, 183, 183, 183,
01654 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01655 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01656 183, 183, 183, 183, 183, 183, 183, 183, 183, 183,
01657 183, 183, 183, 183, 183, 183, 183, 183, 184, 184,
01658 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01659 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01660 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
01661 184, 184, 184, 184, 184, 184, 184, 184, 184, 185,
01662 184, 184, 184, 186, 187, 187, 187, 187, 188, 189,
01663 189, 190, 190, 190, 190, 190, 191, 191, 191, 191,
01664 191, 193, 192, 194, 195, 195, 196, 196, 196, 196,
01665 197, 197, 198, 198, 198, 199, 199, 199, 199, 199,
01666 199, 199, 199, 199, 199, 199, 200, 199, 201, 199,
01667 202, 203, 199, 199, 199, 199, 199, 199, 199, 199,
01668 199, 199, 204, 199, 199, 199, 199, 199, 199, 199,
01669 199, 199, 205, 206, 199, 207, 208, 199, 199, 199,
01670 209, 210, 199, 211, 199, 212, 213, 199, 214, 199,
01671 215, 199, 216, 217, 199, 199, 199, 199, 199, 218,
01672 219, 220, 221, 222, 223, 224, 225, 226, 227, 228,
01673 229, 230, 230, 230, 231, 231, 232, 232, 233, 233,
01674 234, 234, 235, 235, 236, 236, 237, 237, 237, 237,
01675 237, 237, 237, 237, 237, 238, 238, 238, 238, 239,
01676 239, 240, 240, 240, 240, 240, 240, 240, 240, 240,
01677 240, 240, 240, 240, 240, 240, 241, 241, 242, 242,
01678 242, 243, 243, 244, 244, 245, 245, 247, 248, 249,
01679 246, 250, 250, 251, 251, 253, 252, 254, 254, 254,
01680 254, 255, 256, 255, 257, 255, 255, 258, 255, 259,
01681 255, 255, 255, 255, 261, 260, 262, 260, 263, 264,
01682 264, 265, 265, 266, 266, 266, 267, 267, 268, 268,
01683 269, 269, 269, 270, 271, 271, 271, 272, 273, 274,
01684 275, 275, 276, 276, 277, 277, 278, 278, 279, 279,
01685 280, 280, 281, 281, 282, 282, 283, 283, 284, 284,
01686 285, 285, 286, 286, 287, 288, 287, 289, 290, 291,
01687 287, 292, 292, 292, 292, 293, 294, 294, 294, 294,
01688 295, 296, 296, 297, 297, 297, 297, 298, 298, 298,
01689 298, 298, 299, 299, 299, 299, 299, 299, 299, 300,
01690 300, 301, 301, 302, 302, 303, 304, 303, 303, 305,
01691 306, 305, 307, 307, 307, 307, 308, 308, 309, 309,
01692 309, 309, 309, 309, 309, 309, 309, 309, 309, 309,
01693 309, 309, 309, 310, 310, 310, 310, 311, 311, 312,
01694 312, 313, 313, 314, 315, 315, 316, 316, 317, 317,
01695 318, 318, 319, 319, 320, 320, 321, 322, 323, 323,
01696 324, 324, 325, 325, 326, 326, 327, 327, 328, 329,
01697 329, 330, 331, 330, 332, 332, 333, 333, 334, 334,
01698 334, 335, 335, 335, 336, 336, 336, 336, 337, 337,
01699 337, 338, 338, 339, 339, 340, 340, 341, 342, 343,
01700 343, 343, 344, 344, 345, 345, 346
01701 };
01702
01703
01704 static const yytype_uint8 yyr2[] =
01705 {
01706 0, 2, 0, 2, 2, 1, 1, 3, 2, 1,
01707 0, 5, 4, 2, 1, 1, 3, 2, 1, 0,
01708 5, 0, 4, 3, 3, 3, 2, 3, 3, 3,
01709 3, 3, 4, 1, 3, 3, 6, 5, 5, 5,
01710 5, 3, 3, 3, 1, 3, 3, 1, 3, 3,
01711 3, 2, 1, 1, 1, 1, 1, 4, 0, 5,
01712 1, 2, 3, 4, 5, 4, 5, 2, 2, 2,
01713 2, 2, 1, 3, 1, 3, 1, 2, 3, 5,
01714 2, 4, 2, 4, 1, 3, 1, 3, 2, 3,
01715 1, 3, 1, 1, 4, 3, 3, 3, 3, 2,
01716 1, 1, 1, 4, 3, 3, 3, 3, 2, 1,
01717 1, 1, 2, 1, 3, 1, 1, 1, 1, 1,
01718 1, 1, 1, 1, 1, 0, 4, 1, 1, 1,
01719 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01720 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01721 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01722 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01723 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01724 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01725 1, 1, 1, 1, 1, 1, 1, 1, 3, 5,
01726 3, 5, 6, 5, 5, 5, 5, 4, 3, 3,
01727 3, 3, 3, 3, 3, 3, 3, 4, 2, 2,
01728 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
01729 3, 3, 3, 2, 2, 3, 3, 3, 3, 0,
01730 4, 6, 1, 1, 1, 2, 4, 2, 3, 1,
01731 1, 1, 1, 2, 4, 2, 1, 2, 2, 4,
01732 1, 0, 2, 2, 2, 1, 1, 2, 3, 4,
01733 1, 1, 3, 4, 2, 1, 1, 1, 1, 1,
01734 1, 1, 1, 1, 1, 1, 0, 4, 0, 3,
01735 0, 0, 5, 3, 3, 2, 3, 3, 1, 4,
01736 3, 1, 0, 6, 4, 3, 2, 1, 2, 2,
01737 6, 6, 0, 0, 7, 0, 0, 7, 5, 4,
01738 0, 0, 9, 0, 6, 0, 0, 8, 0, 5,
01739 0, 6, 0, 0, 9, 1, 1, 1, 1, 1,
01740 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01741 1, 1, 1, 2, 1, 1, 1, 5, 1, 2,
01742 1, 1, 1, 3, 1, 3, 1, 4, 6, 3,
01743 5, 2, 4, 1, 3, 4, 2, 2, 1, 2,
01744 0, 6, 8, 4, 6, 4, 2, 6, 2, 4,
01745 6, 2, 4, 2, 4, 1, 1, 1, 3, 1,
01746 4, 1, 4, 1, 3, 1, 1, 0, 0, 0,
01747 5, 4, 1, 3, 3, 0, 5, 2, 4, 5,
01748 5, 2, 0, 5, 0, 5, 3, 0, 4, 0,
01749 4, 2, 1, 4, 0, 5, 0, 5, 5, 1,
01750 1, 6, 1, 1, 1, 1, 2, 1, 2, 1,
01751 1, 1, 1, 1, 1, 1, 2, 3, 3, 3,
01752 3, 3, 0, 3, 1, 2, 3, 3, 0, 3,
01753 3, 3, 3, 3, 0, 3, 0, 3, 0, 2,
01754 0, 2, 0, 2, 1, 0, 3, 0, 0, 0,
01755 6, 1, 1, 1, 1, 2, 1, 1, 1, 1,
01756 3, 1, 2, 1, 1, 1, 1, 1, 1, 1,
01757 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01758 1, 1, 1, 1, 1, 1, 0, 4, 2, 3,
01759 0, 3, 4, 2, 2, 1, 2, 0, 6, 8,
01760 4, 6, 4, 6, 2, 4, 6, 2, 4, 2,
01761 4, 1, 0, 1, 1, 1, 1, 1, 1, 1,
01762 3, 1, 3, 1, 2, 1, 2, 1, 1, 3,
01763 1, 3, 1, 1, 2, 1, 3, 3, 1, 3,
01764 1, 3, 1, 1, 2, 1, 1, 1, 2, 2,
01765 1, 1, 0, 4, 1, 2, 1, 3, 3, 2,
01766 2, 1, 1, 1, 1, 1, 1, 1, 1, 1,
01767 1, 1, 1, 0, 1, 0, 1, 2, 2, 0,
01768 1, 1, 1, 1, 1, 2, 0
01769 };
01770
01771
01772
01773
01774 static const yytype_uint16 yydefact[] =
01775 {
01776 2, 0, 0, 1, 0, 347, 348, 349, 0, 340,
01777 341, 342, 345, 343, 344, 346, 335, 336, 337, 338,
01778 298, 261, 261, 513, 512, 514, 515, 615, 0, 615,
01779 10, 0, 517, 516, 518, 601, 603, 509, 508, 602,
01780 511, 503, 504, 505, 506, 454, 523, 524, 0, 0,
01781 0, 0, 290, 626, 626, 84, 407, 480, 478, 480,
01782 482, 462, 474, 468, 476, 0, 0, 0, 3, 613,
01783 6, 9, 33, 44, 47, 55, 261, 54, 0, 72,
01784 0, 76, 86, 0, 52, 242, 0, 286, 0, 0,
01785 312, 315, 613, 0, 0, 0, 0, 56, 307, 275,
01786 276, 453, 455, 277, 278, 279, 281, 280, 282, 451,
01787 452, 450, 501, 519, 520, 283, 0, 284, 60, 5,
01788 8, 167, 178, 168, 191, 164, 184, 174, 173, 194,
01789 195, 189, 172, 171, 166, 192, 196, 197, 176, 165,
01790 179, 183, 185, 177, 170, 186, 193, 188, 187, 180,
01791 190, 175, 163, 182, 181, 162, 169, 160, 161, 157,
01792 158, 159, 115, 117, 116, 152, 153, 148, 130, 131,
01793 132, 139, 136, 138, 133, 134, 154, 155, 140, 141,
01794 145, 149, 135, 137, 127, 128, 129, 142, 143, 144,
01795 146, 147, 150, 151, 156, 120, 122, 124, 26, 118,
01796 119, 121, 123, 0, 0, 0, 0, 0, 0, 0,
01797 0, 256, 0, 243, 266, 70, 260, 626, 0, 519,
01798 520, 0, 284, 626, 596, 71, 69, 615, 68, 0,
01799 626, 431, 67, 615, 616, 0, 0, 21, 239, 0,
01800 0, 335, 336, 298, 301, 432, 0, 218, 0, 219,
01801 295, 0, 19, 0, 0, 613, 15, 18, 615, 74,
01802 14, 615, 0, 0, 619, 619, 244, 0, 0, 619,
01803 594, 615, 0, 0, 0, 82, 339, 0, 92, 93,
01804 100, 309, 408, 498, 497, 499, 496, 0, 495, 0,
01805 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01806 502, 51, 233, 234, 622, 623, 4, 624, 614, 0,
01807 0, 0, 0, 0, 0, 0, 436, 434, 421, 61,
01808 306, 415, 417, 0, 88, 0, 80, 77, 0, 0,
01809 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01810 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
01811 0, 0, 0, 0, 0, 429, 626, 427, 0, 53,
01812 0, 0, 0, 0, 613, 0, 614, 0, 361, 360,
01813 0, 0, 519, 520, 284, 110, 111, 0, 0, 113,
01814 0, 0, 519, 520, 284, 328, 187, 180, 190, 175,
01815 157, 158, 159, 115, 116, 592, 330, 591, 0, 612,
01816 611, 0, 308, 456, 0, 0, 125, 599, 295, 267,
01817 600, 263, 0, 0, 0, 257, 265, 429, 626, 427,
01818 0, 0, 0, 258, 615, 0, 300, 262, 615, 252,
01819 626, 626, 251, 615, 305, 50, 23, 25, 24, 0,
01820 302, 0, 0, 0, 429, 427, 0, 17, 0, 615,
01821 293, 13, 614, 73, 289, 291, 296, 621, 620, 245,
01822 621, 247, 297, 595, 0, 99, 502, 90, 85, 0,
01823 429, 626, 427, 552, 484, 487, 485, 500, 481, 457,
01824 479, 458, 459, 483, 460, 461, 0, 464, 470, 0,
01825 471, 466, 467, 0, 472, 0, 473, 0, 625, 7,
01826 27, 28, 29, 30, 31, 48, 49, 626, 626, 58,
01827 62, 626, 0, 34, 271, 0, 43, 270, 615, 0,
01828 78, 89, 46, 45, 0, 198, 266, 42, 216, 223,
01829 228, 229, 230, 225, 227, 237, 238, 231, 232, 209,
01830 210, 235, 236, 615, 224, 226, 220, 221, 222, 211,
01831 212, 213, 214, 215, 604, 606, 605, 607, 0, 261,
01832 426, 615, 604, 606, 605, 607, 0, 261, 0, 626,
01833 352, 0, 351, 0, 0, 0, 0, 0, 0, 295,
01834 429, 626, 427, 320, 325, 110, 111, 112, 0, 526,
01835 323, 525, 429, 626, 427, 0, 0, 530, 332, 604,
01836 605, 261, 35, 200, 41, 208, 0, 198, 598, 0,
01837 268, 264, 626, 604, 605, 615, 604, 605, 597, 299,
01838 617, 248, 253, 255, 304, 22, 0, 240, 0, 32,
01839 424, 422, 207, 0, 75, 16, 615, 619, 0, 83,
01840 96, 98, 615, 604, 605, 558, 555, 554, 553, 556,
01841 563, 572, 0, 583, 573, 587, 586, 582, 552, 409,
01842 551, 412, 557, 559, 561, 537, 565, 570, 626, 575,
01843 626, 580, 537, 585, 537, 0, 535, 488, 0, 463,
01844 465, 475, 469, 477, 217, 399, 615, 0, 397, 396,
01845 0, 626, 0, 274, 0, 87, 81, 0, 0, 0,
01846 0, 0, 0, 430, 65, 0, 0, 433, 0, 0,
01847 428, 63, 626, 350, 287, 626, 626, 442, 626, 353,
01848 626, 355, 313, 354, 316, 0, 0, 319, 608, 294,
01849 615, 604, 605, 0, 0, 528, 0, 0, 110, 111,
01850 114, 615, 0, 615, 552, 0, 552, 0, 250, 418,
01851 57, 249, 0, 126, 269, 259, 0, 0, 433, 0,
01852 0, 626, 615, 11, 0, 292, 246, 91, 94, 0,
01853 373, 364, 366, 615, 362, 615, 0, 0, 0, 544,
01854 564, 0, 533, 590, 574, 0, 534, 0, 547, 584,
01855 0, 549, 588, 489, 491, 492, 493, 486, 494, 395,
01856 615, 0, 559, 380, 567, 568, 626, 626, 578, 380,
01857 380, 378, 401, 0, 0, 0, 0, 0, 272, 79,
01858 199, 0, 40, 205, 39, 206, 66, 425, 618, 0,
01859 37, 203, 38, 204, 64, 423, 443, 444, 626, 445,
01860 0, 626, 358, 0, 0, 356, 0, 0, 0, 318,
01861 0, 0, 433, 0, 326, 0, 0, 433, 329, 593,
01862 615, 0, 0, 333, 419, 420, 201, 0, 254, 303,
01863 20, 615, 0, 371, 0, 560, 0, 0, 0, 410,
01864 576, 536, 562, 537, 537, 571, 626, 589, 537, 581,
01865 537, 559, 537, 0, 0, 398, 0, 386, 388, 0,
01866 566, 0, 376, 377, 0, 391, 0, 393, 0, 437,
01867 435, 0, 416, 273, 241, 36, 202, 0, 0, 447,
01868 359, 0, 12, 449, 0, 310, 311, 0, 0, 268,
01869 626, 321, 0, 527, 324, 529, 331, 531, 530, 363,
01870 374, 0, 369, 365, 411, 0, 0, 0, 540, 0,
01871 542, 532, 0, 548, 0, 545, 550, 0, 400, 577,
01872 379, 380, 380, 295, 429, 569, 626, 380, 579, 380,
01873 380, 405, 615, 403, 406, 59, 0, 446, 0, 101,
01874 102, 109, 0, 448, 0, 314, 317, 439, 440, 438,
01875 0, 0, 0, 0, 372, 0, 367, 414, 413, 537,
01876 537, 537, 537, 490, 0, 383, 0, 385, 608, 294,
01877 375, 0, 392, 0, 389, 394, 0, 402, 108, 429,
01878 626, 427, 626, 626, 0, 327, 0, 370, 0, 541,
01879 0, 538, 543, 546, 380, 380, 380, 380, 404, 608,
01880 107, 615, 604, 605, 441, 357, 322, 334, 368, 537,
01881 384, 0, 381, 387, 390, 433, 539, 380, 382
01882 };
01883
01884
01885 static const yytype_int16 yydefgoto[] =
01886 {
01887 -1, 1, 2, 68, 69, 70, 239, 568, 569, 255,
01888 256, 448, 257, 439, 72, 73, 360, 74, 75, 510,
01889 691, 246, 77, 78, 258, 79, 80, 81, 468, 82,
01890 212, 379, 380, 195, 196, 197, 198, 606, 557, 200,
01891 84, 441, 214, 263, 231, 749, 428, 429, 228, 229,
01892 216, 415, 430, 516, 517, 85, 358, 261, 262, 636,
01893 626, 362, 847, 363, 848, 733, 990, 737, 734, 932,
01894 595, 597, 747, 938, 248, 87, 88, 89, 90, 91,
01895 92, 93, 94, 95, 96, 714, 571, 722, 844, 845,
01896 371, 771, 772, 773, 960, 898, 800, 687, 688, 801,
01897 972, 973, 281, 282, 473, 776, 659, 879, 322, 511,
01898 97, 98, 712, 705, 566, 558, 320, 508, 507, 578,
01899 989, 716, 838, 918, 922, 99, 100, 101, 102, 103,
01900 104, 105, 293, 486, 106, 297, 107, 108, 295, 299,
01901 289, 287, 291, 478, 678, 677, 793, 893, 797, 109,
01902 288, 110, 111, 112, 219, 220, 115, 221, 222, 590,
01903 736, 745, 746, 881, 779, 661, 662, 891, 664, 665,
01904 666, 667, 805, 806, 668, 669, 670, 671, 808, 809,
01905 672, 673, 674, 675, 676, 782, 398, 596, 268, 431,
01906 224, 118, 630, 560, 401, 306, 425, 426, 707, 459,
01907 572, 366, 260
01908 };
01909
01910
01911
01912 #define YYPACT_NINF -816
01913 static const yytype_int16 yypact[] =
01914 {
01915 -816, 132, 2698, -816, 7384, -816, -816, -816, 6899, -816,
01916 -816, -816, -816, -816, -816, -816, 7499, 7499, -816, -816,
01917 7499, 4040, 3629, -816, -816, -816, -816, 140, 6764, 0,
01918 -816, 27, -816, -816, -816, 2944, 3766, -816, -816, 3081,
01919 -816, -816, -816, -816, -816, -816, -816, -816, 8879, 8879,
01920 166, 5108, 288, 7844, 8189, 7162, -816, 6629, -816, -816,
01921 -816, 105, 123, 177, 196, 941, 8994, 8879, -816, 17,
01922 -816, 867, -816, 484, -816, -816, 76, 294, 226, -816,
01923 210, 9224, -816, 237, 3060, 285, 311, -816, 9109, 9109,
01924 -816, -816, 6009, 9335, 9446, 9557, 6493, 30, 62, -816,
01925 -816, 256, -816, -816, -816, -816, -816, -816, -816, -816,
01926 -816, -816, -816, 491, 593, -816, 303, 616, -816, -816,
01927 -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
01928 -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
01929 -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
01930 -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
01931 -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
01932 -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
01933 -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
01934 -816, -816, -816, -816, -816, -816, -816, -816, 229, -816,
01935 -816, -816, -816, 270, 8879, 359, 5249, 8879, 8879, 8879,
01936 8879, -816, 310, 3060, 349, -816, -816, 322, 393, 34,
01937 38, 365, 63, 325, -816, -816, -816, 5894, -816, 7499,
01938 7499, -816, -816, 6124, -816, 9109, 679, -816, 309, 332,
01939 5390, -816, -816, -816, 328, 361, 76, -816, 421, 402,
01940 736, 7614, -816, 5108, 362, 17, -816, 867, 0, 408,
01941 -816, 0, 9109, 398, -15, 180, -816, 349, 429, 180,
01942 -816, 0, 502, 941, 9668, 440, -816, 466, 563, 601,
01943 645, -816, -816, -816, -816, -816, -816, 425, -816, 506,
01944 540, 545, 453, 575, 469, 101, 474, 658, 476, 222,
01945 522, -816, -816, -816, -816, -816, -816, -816, 6239, 9109,
01946 9109, 9109, 9109, 7614, 9109, 9109, -816, -816, -816, 498,
01947 -816, -816, -816, 8304, -816, 5108, 7273, 460, 8304, 8879,
01948 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879,
01949 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879, 8879,
01950 8879, 8879, 8879, 8879, 8879, 9951, 7499, 10030, 4455, 484,
01951 113, 113, 9109, 9109, 17, 585, 472, 551, -816, -816,
01952 651, 595, 67, 88, 93, 487, 542, 9109, 78, -816,
01953 114, 686, -816, -816, -816, -816, 48, 50, 60, 266,
01954 276, 289, 347, 380, 416, -816, -816, -816, 30, -816,
01955 -816, 10109, -816, -816, 8994, 8994, -816, -816, 240, -816,
01956 -816, -816, 8879, 8879, 7729, -816, -816, 10188, 7499, 10267,
01957 8879, 8879, 7959, -816, 0, 494, -816, -816, 0, -816,
01958 490, 500, -816, 136, -816, -816, -816, -816, -816, 6899,
01959 -816, 8879, 5523, 497, 10188, 10267, 8879, 867, 512, 0,
01960 -816, -816, 6354, 528, -816, 484, -816, 8074, -816, -816,
01961 8189, -816, -816, -816, 309, 703, -816, -816, 529, 9668,
01962 10346, 7499, 10425, 1091, -816, -816, -816, -816, -816, -816,
01963 -816, -816, -816, -816, -816, -816, 35, -816, -816, 481,
01964 -816, -816, -816, 45, -816, 521, -816, 8879, -816, -816,
01965 -816, -816, -816, -816, -816, -816, -816, 70, 70, -816,
01966 -816, 70, 8879, -816, 536, 537, -816, -816, 0, 9668,
01967 557, -816, -816, -816, 566, 3197, -816, -816, 402, 2451,
01968 2451, 2451, 2451, 1100, 1100, 2544, 2079, 2451, 2451, 3334,
01969 3334, 708, 708, 10928, 1100, 1100, 849, 849, 944, 385,
01970 385, 402, 402, 402, 4177, 3218, 4314, 3355, 361, 558,
01971 -816, 0, 760, -816, 768, -816, 361, 3903, 685, 693,
01972 -816, 4596, 689, 4878, 59, 59, 585, 8419, 685, 106,
01973 10504, 7499, 10583, -816, 484, -816, 703, -816, 17, -816,
01974 -816, -816, 10662, 7499, 10109, 4455, 9109, 565, -816, -816,
01975 -816, 1231, -816, 2786, -816, 3060, 6899, 2923, -816, 8879,
01976 349, -816, 325, 2807, 3492, 0, 241, 306, -816, -816,
01977 -816, -816, 7729, 7959, -816, -816, 9109, 3060, 576, -816,
01978 -816, -816, 3060, 5523, 278, -816, 0, 180, 9668, 529,
01979 588, 351, 0, 334, 348, -816, -816, -816, -816, -816,
01980 -816, -816, 893, -816, -816, -816, -816, -816, 1256, -816,
01981 -816, -816, -816, 596, -816, 581, 8879, -816, 583, 672,
01982 589, -816, 591, 682, 603, 702, -816, -816, 858, -816,
01983 -816, -816, -816, -816, 402, -816, 1059, 5664, -816, -816,
01984 5390, 70, 5664, 620, 8534, -816, 529, 9668, 8994, 8879,
01985 646, 8994, 8994, -816, 498, 361, 625, 770, 8994, 8994,
01986 -816, 498, 361, -816, -816, 8649, 766, -816, 527, -816,
01987 766, -816, -816, -816, -816, 685, 228, -816, 71, 89,
01988 0, 116, 125, 9109, 17, -816, 9109, 4455, 588, 351,
01989 -816, 0, 685, 136, 1256, 4455, 1256, 7034, -816, 62,
01990 294, -816, 8879, -816, -816, -816, 8879, 8879, 415, 8879,
01991 8879, 653, 136, -816, 654, -816, -816, -816, 318, 893,
01992 441, -816, 659, 0, -816, 0, 297, 8879, 1256, -816,
01993 -816, 742, -816, -816, -816, 58, -816, 1256, -816, -816,
01994 772, -816, -816, -816, -816, -816, -816, -816, -816, -816,
01995 0, 674, 683, 666, 9779, -816, 667, 589, -816, 673,
01996 677, -816, 675, 807, 690, 5390, 812, 8879, 710, 529,
01997 3060, 8879, -816, 3060, -816, 3060, -816, -816, -816, 8994,
01998 -816, 3060, -816, 3060, -816, -816, 536, -816, 757, -816,
01999 4993, 845, -816, 9109, 685, -816, 685, 5664, 5664, -816,
02000 8764, 4737, 126, 59, -816, 17, 685, -816, -816, -816,
02001 0, 685, 17, -816, -816, -816, 3060, 8879, 7959, -816,
02002 -816, 0, 942, 725, 1005, -816, 723, 5664, 5390, -816,
02003 -816, -816, -816, 733, 738, -816, 589, -816, 740, -816,
02004 743, -816, 740, 5779, 761, -816, 9779, 1256, -816, 830,
02005 709, 742, -816, -816, 1256, -816, 772, -816, 1080, -816,
02006 -816, 754, -816, 752, 3060, -816, 3060, 9890, 113, -816,
02007 -816, 5664, -816, -816, 113, -816, -816, 685, 685, -816,
02008 171, -816, 4455, -816, -816, -816, -816, -816, 565, -816,
02009 756, 942, 492, -816, -816, 880, 762, 1256, -816, 772,
02010 -816, -816, 772, -816, 772, -816, -816, 789, -816, 709,
02011 -816, 780, 782, -816, 10741, -816, 589, 784, -816, 790,
02012 784, -816, 225, -816, -816, -816, 874, -816, 721, 563,
02013 601, 645, 4455, -816, 4596, -816, -816, -816, -816, -816,
02014 5664, 685, 4455, 942, 756, 942, 797, -816, -816, 740,
02015 800, 740, 740, -816, 1256, -816, 772, -816, 764, 799,
02016 -816, 772, -816, 772, -816, -816, 1080, -816, 703, 10820,
02017 7499, 10899, 693, 527, 685, -816, 685, 756, 942, -816,
02018 772, -816, -816, -816, 784, 808, 784, 784, -816, 253,
02019 351, 0, 148, 159, -816, -816, -816, -816, 756, 740,
02020 -816, 772, -816, -816, -816, 169, -816, 784, -816
02021 };
02022
02023
02024 static const yytype_int16 yypgoto[] =
02025 {
02026 -816, -816, -816, -380, -816, 23, -816, -566, 358, -816,
02027 505, -816, 20, -816, -308, -42, -75, 39, -816, -330,
02028 -816, 726, -11, 850, -141, 7, -63, -816, -416, 16,
02029 1705, -294, 859, -55, -816, -16, -816, -816, 3, -816,
02030 1056, -816, 1763, -816, -6, 246, -349, 122, 4, -816,
02031 -374, -200, 47, -816, -312, -51, -816, -816, -816, -816,
02032 -816, -816, -816, -816, -816, -816, -816, -816, -816, -816,
02033 -816, -816, -816, -816, 74, -816, -816, -816, -816, -816,
02034 -816, -816, -816, -816, -816, -550, -346, -536, -61, -648,
02035 -816, -787, -765, 191, 277, 43, -816, -392, -816, -655,
02036 -816, -48, -816, -816, -816, -816, -816, -816, 215, -816,
02037 -816, -816, -816, -816, -816, -816, -90, -816, -816, -551,
02038 -816, -53, -816, -816, -816, -816, -816, -816, 877, -816,
02039 -816, -816, -816, 684, -816, -816, -816, -816, -816, -816,
02040 -816, 924, -816, -196, -816, -816, -816, -816, -816, 26,
02041 -816, 51, -816, -9, 846, 1250, 889, 1597, 1618, -816,
02042 -816, 54, -816, -407, -359, -311, -804, 957, -693, -447,
02043 -113, 205, 92, -816, -816, -816, -24, -730, -815, 110,
02044 230, -816, -654, -816, -146, -609, -816, -816, -816, 57,
02045 -385, -816, -336, -816, 613, -59, -26, -223, -560, -220,
02046 -56, 37, -2
02047 };
02048
02049
02050
02051
02052 #define YYTABLE_NINF -627
02053 static const yytype_int16 yytable[] =
02054 {
02055 119, 235, 286, 238, 276, 211, 211, 561, 402, 211,
02056 434, 199, 237, 307, 361, 573, 527, 364, 327, 559,
02057 522, 567, 71, 423, 71, 725, 232, 120, 727, 742,
02058 276, 199, 810, 365, 201, 453, 307, 618, 454, 724,
02059 611, 396, 276, 276, 276, 461, 359, 359, 611, 463,
02060 359, 266, 270, 639, 201, 758, 300, 889, 259, 202,
02061 199, 786, 628, 217, 217, 601, 660, 217, 841, 615,
02062 318, 275, 846, 223, 223, 618, 86, 223, 86, 202,
02063 319, 559, 768, 567, 587, 882, 721, 943, 316, 968,
02064 218, 218, -101, 480, 218, 483, -105, 487, 474, 199,
02065 264, 487, 316, 696, 974, 301, 308, 940, 474, 631,
02066 265, 269, 449, -102, -107, 588, 690, 399, -109, 692,
02067 876, 457, 642, -521, 884, 86, 570, -522, 458, 277,
02068 585, -108, 3, 890, 586, -513, 631, -512, 215, 225,
02069 218, -104, 226, 234, 475, 894, 476, -514, 685, -101,
02070 -106, -103, 421, -102, 475, 277, 476, 655, 304, 240,
02071 305, -104, 218, 218, 489, 400, 218, 370, 381, 381,
02072 852, 856, -106, 314, 315, 849, 994, 679, -109, 861,
02073 656, 857, -103, -513, 518, -512, 840, 682, 577, 968,
02074 686, 433, 858, 435, 317, -514, 451, 902, 903, 307,
02075 304, 619, 305, -92, 882, 621, 943, -96, 317, -604,
02076 624, 467, 974, 490, 230, 416, 211, 889, 211, 211,
02077 455, 416, 250, 276, -93, -98, 634, -605, 432, -100,
02078 1027, 423, 730, 589, 500, 501, 502, 503, 618, 803,
02079 318, 570, -99, 962, 741, 464, 631, 292, 611, 611,
02080 969, 660, -95, 764, 304, 304, 305, 305, 631, 882,
02081 259, -97, -94, 1048, 466, 294, -105, 359, 359, 359,
02082 359, 447, 505, 506, 217, 276, 217, 951, 233, 234,
02083 86, 819, 987, 234, 223, 495, 223, 574, 575, -104,
02084 680, -104, 452, 1000, 925, 695, 926, 680, 740, 815,
02085 -106, 218, -106, 218, 218, 576, 934, 218, 307, 218,
02086 -103, 936, -103, 788, 86, 791, 460, 931, 882, 296,
02087 359, 359, 321, 458, 591, 86, 877, 86, 71, 446,
02088 759, 499, 259, 504, 496, 584, 218, 660, 298, 660,
02089 888, 323, 520, 892, -433, 211, 324, 775, 277, 424,
02090 1035, 427, 328, -515, 432, -108, -104, 1010, 58, -95,
02091 565, 1016, 513, -517, 850, 406, 991, 523, 234, 304,
02092 515, 305, -339, -97, 826, 515, -516, 985, 986, 988,
02093 851, 834, 86, 218, 218, 218, 218, 86, 218, 218,
02094 522, -604, 404, -73, -105, 760, -105, 218, 355, 86,
02095 277, -515, 218, 837, 565, -433, 467, 211, 233, 254,
02096 878, -517, 755, 765, -87, 408, 432, 766, 276, -339,
02097 -339, -106, 565, 625, -516, 412, 1026, -288, 416, 416,
02098 218, -288, 86, 860, -518, 862, 218, 218, -294, 413,
02099 119, 1025, 199, 602, 604, 356, 357, 440, 565, -95,
02100 -433, 218, -433, -433, 420, 329, 467, 967, 414, 970,
02101 211, 422, 71, -97, 442, 201, 227, -507, 276, 432,
02102 -95, 612, 329, -95, 1046, 565, 1047, -95, 218, 218,
02103 417, 1055, -518, 618, -97, -294, -294, -97, 474, -605,
02104 202, -97, 218, 645, 611, 646, 647, 648, 649, 230,
02105 999, 450, 1001, -510, 867, 689, 689, 1002, 444, 689,
02106 352, 353, 354, -601, 637, -507, 86, 700, 723, 723,
02107 859, 314, 315, -72, 948, 950, 86, 418, 419, 953,
02108 -103, 955, 735, 956, 475, 706, 476, 477, 456, 869,
02109 811, 843, 840, 277, 645, 218, 646, 647, 648, 649,
02110 875, -510, 703, 470, 743, 418, 445, 1034, 465, 1036,
02111 710, 755, 462, 704, 254, 484, 1037, 717, -602, 474,
02112 211, 711, 982, 804, -507, 767, 469, 872, 984, 432,
02113 -521, 488, 211, 1049, 762, 565, 491, 276, 494, 706,
02114 753, 432, 497, 277, 509, 748, 521, 565, 443, 751,
02115 471, 472, 577, 474, 1057, 750, -101, 579, 474, 199,
02116 416, 254, 482, 498, -608, 475, 706, 476, 479, -601,
02117 583, -507, -507, 681, 726, -601, 622, -92, 995, -510,
02118 629, 119, 201, 620, 467, 887, 623, 935, 474, 887,
02119 1029, 1031, 1032, 1033, 633, 86, 276, 86, 939, 475,
02120 -519, 476, 481, 71, 475, 218, 476, 202, 853, 864,
02121 812, 855, 807, 683, -87, 638, 783, 218, 783, 86,
02122 218, 1041, -266, 694, -602, -608, -510, -510, 854, 761,
02123 -602, 698, -522, 254, 475, 631, 476, 485, -520, 689,
02124 1056, 359, 863, 697, 359, 713, -424, -519, -519, 827,
02125 218, 715, 719, 744, 706, 405, 748, 86, -102, 763,
02126 751, 777, 277, 839, 842, 706, 842, 778, 842, 781,
02127 -608, 474, -608, -608, 784, 785, -604, 787, 76, -93,
02128 76, -109, -284, 436, 789, -520, -520, 523, 580, 790,
02129 822, 824, 76, 76, 437, 438, 76, 830, 832, 812,
02130 199, 811, -100, 276, 792, 887, -267, 886, 811, 416,
02131 811, 86, 515, 821, 86, 828, 86, 475, 924, 476,
02132 492, 277, 218, 592, 812, 218, 218, 76, 329, -284,
02133 -284, 840, 218, 218, 804, 581, 582, 870, 804, 868,
02134 -295, 804, 76, 804, 895, 874, 964, 723, 896, 933,
02135 650, 359, 897, 901, 783, 783, 937, 218, 1019, 904,
02136 218, 86, 651, 906, 76, 76, 908, 909, 76, 86,
02137 593, 594, 912, 910, 645, 446, 646, 647, 648, 649,
02138 650, 350, 351, 352, 353, 354, 919, -295, -295, 923,
02139 654, 655, 651, 593, 594, 276, -268, 917, 113, 708,
02140 113, -108, 905, 907, 921, 1020, 1021, 709, 811, 829,
02141 811, 941, 944, 652, 656, 811, 276, 811, 915, 947,
02142 654, 655, -99, 807, 949, -104, 952, 966, 900, 954,
02143 807, 958, 807, -106, 783, -103, 963, 975, -269, 86,
02144 997, 804, 993, 804, 656, 998, -95, 113, 804, 1003,
02145 804, 278, -604, 218, -97, 811, -94, 309, 310, 311,
02146 312, 313, 794, 795, 86, 796, 1004, 218, 1006, 329,
02147 1011, 86, 86, 46, 47, 86, 1013, 278, 842, 718,
02148 1018, 720, 76, 1028, 342, 343, 1030, -605, 804, 372,
02149 382, 382, 382, 368, 1051, 645, 1017, 646, 647, 648,
02150 649, 86, 86, 76, 385, 76, 76, 635, 835, 76,
02151 871, 76, 1045, 799, 783, 865, 76, 86, 1038, 1044,
02152 959, 349, 350, 351, 352, 353, 354, 76, 403, 76,
02153 807, 493, 807, 290, 769, 397, 885, 807, 76, 807,
02154 770, 978, 992, 965, 645, 86, 646, 647, 648, 649,
02155 41, 42, 43, 44, 1005, 1007, 86, 961, 883, 211,
02156 1012, 598, 1014, 1015, 329, 706, 0, 0, 432, 0,
02157 717, 842, 0, 0, 565, 0, 0, 807, 0, 342,
02158 343, 0, 0, 769, 76, 76, 76, 76, 76, 76,
02159 76, 76, 0, 0, 0, 813, 0, 0, 814, 76,
02160 816, 76, 113, 0, 76, 0, 86, 645, 86, 646,
02161 647, 648, 649, 0, 86, 0, 86, 350, 351, 352,
02162 353, 354, 213, 213, 0, 0, 213, 1050, 1052, 1053,
02163 1054, 0, 76, 0, 76, 0, 113, 0, 76, 76,
02164 0, 0, 0, 0, 218, 0, 769, 113, 0, 113,
02165 1058, 0, 942, 76, 247, 249, 0, 0, 0, 213,
02166 213, 645, 0, 646, 647, 648, 649, 650, 0, 0,
02167 278, 0, 302, 303, 0, 0, 0, 0, 0, 651,
02168 76, 76, 971, 0, 646, 647, 648, 649, 0, 0,
02169 0, 0, 0, 645, 76, 646, 647, 648, 649, 650,
02170 652, 0, 0, 0, 113, 0, 653, 654, 655, 113,
02171 0, 651, 0, 0, 0, 0, 0, 0, 76, 0,
02172 329, 113, 278, 911, 0, 0, 0, 0, 76, 0,
02173 0, 656, 652, 0, 657, 342, 343, 0, 653, 654,
02174 655, 0, 0, 0, 0, 0, 0, 76, 920, 0,
02175 0, 0, 234, 0, 113, 927, 928, 0, 0, 930,
02176 0, 0, 0, 656, 0, 0, 657, 0, 0, 0,
02177 347, 348, 349, 350, 351, 352, 353, 354, 0, 658,
02178 0, -626, 0, 0, 0, 945, 946, 0, 0, -626,
02179 -626, -626, 0, 0, -626, -626, -626, 0, -626, 0,
02180 0, 957, 114, 0, 114, 0, 0, -626, -626, 0,
02181 213, 0, 0, 213, 213, 213, 302, 0, -626, -626,
02182 0, -626, -626, -626, -626, -626, 0, 0, 0, 983,
02183 0, 0, 0, 213, 0, 213, 213, 0, 113, 0,
02184 0, 0, 0, 0, 0, 0, 0, 76, 113, 76,
02185 0, 114, 0, 0, 0, 279, 0, 76, 645, 0,
02186 646, 647, 648, 649, 650, 278, 0, 0, -626, 76,
02187 0, 76, 76, 0, 0, 0, 651, 0, 0, 0,
02188 0, 279, 0, 0, 0, 0, 0, 0, 0, 0,
02189 1022, -626, 1023, 373, 383, 383, 383, 652, 1024, 0,
02190 0, 0, 76, 653, 654, 655, 0, 0, 0, 76,
02191 0, 0, 0, -626, -626, 278, -626, 0, 0, 230,
02192 -626, 0, -626, 0, -626, 0, 0, 0, 656, 213,
02193 0, 657, 0, 0, 525, 528, 529, 530, 531, 532,
02194 533, 534, 535, 536, 537, 538, 539, 540, 541, 542,
02195 543, 544, 545, 546, 547, 548, 549, 550, 551, 552,
02196 553, 0, 213, 76, 0, 0, 76, 113, 76, 113,
02197 0, 0, 0, 0, 76, 0, 0, 76, 76, 0,
02198 663, 0, 0, 0, 76, 76, 0, 0, 0, 0,
02199 0, 113, 0, 0, 0, 0, 0, 0, 0, 0,
02200 0, 0, 0, 0, 0, 0, 114, 0, 0, 76,
02201 603, 605, 76, 76, 0, 0, 0, 0, 607, 213,
02202 213, 76, 0, 0, 213, 0, 603, 605, 213, 113,
02203 0, 0, 0, 0, 278, 0, 0, 0, 0, 0,
02204 114, 0, 0, 0, 0, 0, 0, 627, 0, 0,
02205 0, 114, 632, 114, 0, 0, 0, 0, 0, 0,
02206 0, 0, 0, 213, 0, 0, 213, 0, 0, 0,
02207 0, 0, 0, 0, 279, 0, 0, 213, 0, 0,
02208 0, 0, 0, 113, 0, 0, 113, 0, 113, 0,
02209 0, 76, 0, 278, 0, 0, 0, 0, 0, 0,
02210 0, 0, 0, 684, 0, 76, 0, 0, 114, 0,
02211 0, 0, 0, 114, 0, 0, 76, 0, 213, 76,
02212 0, 0, 0, 76, 76, 114, 279, 76, 0, 0,
02213 0, 0, 0, 113, 0, 0, 0, 0, 0, 0,
02214 0, 113, 0, 0, 0, 0, 0, 0, 0, 116,
02215 0, 116, 0, 76, 76, 0, 0, 0, 114, 774,
02216 0, 0, 0, 0, 0, 663, 0, 0, 0, 76,
02217 117, 0, 117, 0, 0, 0, 0, 0, 0, 0,
02218 0, 0, 0, 213, 0, 0, 0, 213, 0, 0,
02219 0, 0, 0, 802, 0, 0, 0, 76, 116, 213,
02220 382, 0, 0, 0, 0, 0, 0, 0, 76, 0,
02221 0, 113, 0, 0, 0, 213, 0, 0, 0, 117,
02222 0, 0, 0, 280, 0, 0, 0, 0, 213, 213,
02223 0, 0, 0, 0, 0, 0, 113, 0, 0, 0,
02224 0, 0, 114, 113, 113, 0, 0, 113, 0, 280,
02225 0, 663, 114, 663, 0, 0, 0, 83, 76, 83,
02226 76, 374, 384, 384, 0, 0, 76, 0, 76, 279,
02227 0, 0, 213, 113, 113, 0, 774, 873, 0, 0,
02228 0, 0, 0, 0, 0, 663, 0, 0, 0, 113,
02229 0, 0, 382, 0, 663, 0, 76, 0, 0, 0,
02230 213, 0, 0, 0, 607, 820, 83, 823, 825, 0,
02231 0, 0, 0, 979, 831, 833, 0, 113, 0, 279,
02232 0, 213, 0, 0, 0, 0, 0, 0, 113, 0,
02233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02234 0, 0, 0, 0, 0, 0, 0, 0, 369, 0,
02235 0, 0, 0, 116, 0, 0, 0, 0, 866, 0,
02236 0, 0, 823, 825, 0, 831, 833, 267, 0, 0,
02237 0, 114, 0, 114, 117, 0, 0, 0, 113, 774,
02238 113, 774, 0, 213, 0, 0, 113, 116, 113, 0,
02239 0, 0, 0, 0, 0, 114, 0, 0, 116, 0,
02240 116, 0, 0, 0, 802, 0, 0, 0, 117, 0,
02241 0, 802, 0, 0, 0, 0, 0, 0, 0, 117,
02242 0, 117, 0, 213, 0, 0, 0, 914, 0, 0,
02243 0, 0, 0, 114, 0, 916, 0, 0, 279, 0,
02244 0, 0, 280, 0, 0, 0, 0, 0, 774, 996,
02245 0, 0, 0, 0, 663, 116, 213, 0, 0, 0,
02246 116, 83, 0, 0, 0, 0, 0, 0, 0, 0,
02247 0, 0, 116, 916, 213, 0, 117, 0, 0, 0,
02248 0, 117, 0, 0, 0, 0, 0, 114, 0, 0,
02249 114, 0, 114, 117, 280, 83, 0, 279, 0, 0,
02250 774, 0, 774, 0, 0, 116, 83, 0, 83, 0,
02251 0, 802, 0, 0, 0, 0, 0, 407, 0, 0,
02252 409, 410, 411, 0, 0, 0, 117, 0, 0, 0,
02253 0, 0, 0, 0, 0, 774, 0, 114, 0, 0,
02254 0, 0, 0, 0, 0, 114, 0, 0, 0, 0,
02255 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02256 0, 0, 0, 83, 0, 0, 0, 0, 83, 0,
02257 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02258 83, 0, 0, 524, 0, 0, 0, 0, 0, 116,
02259 0, 0, 0, 0, 0, 0, 0, 0, 0, 116,
02260 0, 0, 0, 0, 383, 0, 0, 0, 0, 0,
02261 117, 0, 0, 83, 0, 114, 0, 0, 0, 0,
02262 117, 0, 0, 0, 0, 0, 213, 0, 0, 0,
02263 0, 0, 0, 0, 0, 0, 514, 280, 0, 0,
02264 114, 526, 0, 0, 0, 0, 0, 114, 114, 0,
02265 0, 114, 0, 0, 0, 0, 0, 0, 0, 0,
02266 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02267 0, 0, 0, 0, 0, 0, 0, 114, 114, 0,
02268 0, 0, 0, 0, 0, 0, 0, 280, 0, 0,
02269 0, 0, 0, 114, 0, 0, 383, 83, 0, 329,
02270 330, 331, 332, 333, 334, 335, 336, 83, 338, 339,
02271 0, 0, 0, 0, 342, 343, 0, 980, 116, 0,
02272 116, 114, 0, 0, 0, 0, 608, 610, 0, 0,
02273 0, 0, 114, 0, 0, 267, 0, 0, 0, 117,
02274 0, 117, 116, 0, 0, 0, 0, 345, 346, 347,
02275 348, 349, 350, 351, 352, 353, 354, 0, 0, 0,
02276 0, 0, 0, 117, 0, 0, 0, 0, 0, 0,
02277 610, 0, 0, 267, 0, 0, 0, 0, 0, 0,
02278 116, 0, 114, 0, 114, 0, 0, 0, 0, 0,
02279 114, 0, 114, 0, 0, 0, 0, 0, 0, 0,
02280 0, 117, 0, 0, 0, 0, 280, 0, 0, 0,
02281 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02282 0, 0, 0, 0, 0, 693, 83, 0, 83, 0,
02283 0, 0, 0, 0, 116, 0, 0, 116, 0, 116,
02284 0, 0, 0, 0, 0, 0, 798, 0, 0, 0,
02285 83, 0, 0, 0, 0, 117, 0, 0, 117, 0,
02286 117, 0, 0, 0, 0, 280, 0, 0, 0, 0,
02287 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02288 0, 0, 0, 0, 116, 0, 0, 0, 83, 0,
02289 526, 0, 116, 0, 0, 0, 0, 0, 0, 0,
02290 0, 0, 0, 0, 0, 117, 0, 0, 0, 0,
02291 0, 0, 0, 117, 0, 0, 0, 0, 0, 0,
02292 0, 0, 754, 0, 0, 0, 0, 0, 0, 0,
02293 0, 0, 0, 0, 0, 610, 267, 0, 0, 0,
02294 0, 0, 83, 0, 0, 83, 0, 83, 0, 0,
02295 0, 0, 0, 524, 0, 0, 0, 0, 0, 0,
02296 0, 0, 116, 0, 0, 0, 0, 0, 0, 0,
02297 0, 0, 384, 0, 0, 0, 0, 0, 0, 780,
02298 0, 0, 0, 117, 0, 0, 0, 116, 0, 0,
02299 0, 0, 83, 0, 116, 116, 0, 0, 116, 0,
02300 83, 0, 0, 0, 0, 0, 0, 818, 117, 0,
02301 0, 0, 0, 0, 0, 117, 117, 0, 0, 117,
02302 0, 0, 0, 0, 116, 116, 0, 0, 836, 0,
02303 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02304 116, 0, 0, 0, 0, 117, 117, 0, 0, 0,
02305 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02306 0, 117, 0, 0, 384, 0, 0, 0, 116, 0,
02307 83, 329, -627, -627, -627, -627, 334, 335, 0, 116,
02308 -627, -627, 0, 0, 0, 981, 342, 343, 0, 117,
02309 880, 0, 0, 0, 0, 83, 0, 0, 0, 0,
02310 117, 0, 83, 83, 0, 0, 83, 0, 0, 0,
02311 0, 0, 0, 0, 0, 0, 0, 0, 0, 345,
02312 346, 347, 348, 349, 350, 351, 352, 353, 354, 116,
02313 913, 116, 83, 83, 0, 0, 0, 116, 0, 116,
02314 0, 0, 0, 0, 0, 0, 0, 0, 83, 0,
02315 117, 0, 117, 0, 0, 0, 0, 0, 117, 0,
02316 117, 0, 0, 929, 329, 330, 331, 332, 333, 334,
02317 335, 0, 977, 338, 339, 0, 83, 0, 0, 342,
02318 343, 267, 0, 0, 0, 0, 0, 83, 0, 0,
02319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02320 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02321 0, 0, 345, 346, 347, 348, 349, 350, 351, 352,
02322 353, 354, 0, 0, 0, 0, 0, 0, 0, 0,
02323 0, 0, 0, 0, 0, 0, 0, 83, 0, 83,
02324 0, 0, 0, 0, 0, 83, 0, 83, -626, 4,
02325 0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
02326 11, 0, 0, 0, 12, 0, 13, 14, 15, 16,
02327 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02328 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
02329 0, 0, 0, 28, 29, 30, 31, 32, 33, 34,
02330 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
02331 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
02332 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02333 0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
02334 52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
02335 58, 59, 60, 61, 62, 63, 64, -608, 0, 0,
02336 0, 0, 0, 0, 0, -608, -608, -608, 0, 0,
02337 -608, -608, -608, 0, -608, 0, 65, 66, 67, 0,
02338 752, 0, 0, -608, -608, -608, -608, 0, 0, -626,
02339 0, -626, 0, 0, -608, -608, 0, -608, -608, -608,
02340 -608, -608, 0, 0, 0, 0, 329, 330, 331, 332,
02341 333, 334, 335, 336, 337, 338, 339, 340, 341, 0,
02342 0, 342, 343, 0, 0, 0, 0, -608, -608, -608,
02343 -608, -608, -608, -608, -608, -608, -608, -608, -608, -608,
02344 0, 0, -608, -608, -608, 0, 756, -608, 0, 0,
02345 0, 0, 344, -608, 345, 346, 347, 348, 349, 350,
02346 351, 352, 353, 354, 0, 0, 0, -608, 0, 0,
02347 -608, 0, -105, -608, -608, -608, -608, -608, -608, -608,
02348 -608, -608, -608, -608, -608, 0, 0, 0, 0, -608,
02349 -608, -608, -608, -608, -507, 0, -608, -608, -608, 0,
02350 -608, 0, -507, -507, -507, 0, 0, -507, -507, -507,
02351 0, -507, 0, 0, 0, 0, 0, 699, 0, -507,
02352 0, -507, -507, -507, 0, 0, 0, 0, 0, 0,
02353 0, -507, -507, 0, -507, -507, -507, -507, -507, 0,
02354 0, 0, 0, 329, 330, 331, 332, 333, 334, 335,
02355 336, 337, 338, 339, 340, 341, 0, 0, 342, 343,
02356 0, 0, 0, 0, -507, -507, -507, -507, -507, -507,
02357 -507, -507, -507, -507, -507, -507, -507, 0, 0, -507,
02358 -507, -507, 0, -507, -507, 0, 0, 0, 0, 344,
02359 -507, 345, 346, 347, 348, 349, 350, 351, 352, 353,
02360 354, 0, 0, 0, -507, 0, 0, -507, 0, -507,
02361 -507, -507, -507, -507, -507, -507, -507, -507, -507, -507,
02362 -507, -507, 0, 0, 0, 0, 0, -507, -507, -507,
02363 -507, -510, 0, -507, -507, -507, 0, -507, 0, -510,
02364 -510, -510, 0, 0, -510, -510, -510, 0, -510, 0,
02365 0, 0, 0, 0, 0, 0, -510, 0, -510, -510,
02366 -510, 0, 0, 0, 0, 0, 0, 0, -510, -510,
02367 0, -510, -510, -510, -510, -510, 0, 0, 0, 0,
02368 329, 330, 331, 332, 333, 334, 335, 336, 337, 338,
02369 339, 340, 341, 0, 0, 342, 343, 0, 0, 0,
02370 0, -510, -510, -510, -510, -510, -510, -510, -510, -510,
02371 -510, -510, -510, -510, 0, 0, -510, -510, -510, 0,
02372 -510, -510, 0, 0, 0, 0, 344, -510, 345, 346,
02373 347, 348, 349, 350, 351, 352, 353, 354, 0, 0,
02374 0, -510, 0, 0, -510, 0, -510, -510, -510, -510,
02375 -510, -510, -510, -510, -510, -510, -510, -510, -510, 0,
02376 0, 0, 0, 0, -510, -510, -510, -510, -609, 0,
02377 -510, -510, -510, 0, -510, 0, -609, -609, -609, 0,
02378 0, -609, -609, -609, 0, -609, 0, 0, 0, 0,
02379 0, 699, 0, 0, -609, -609, -609, -609, 0, 0,
02380 0, 0, 0, 0, 0, -609, -609, 0, -609, -609,
02381 -609, -609, -609, 0, 0, 0, 0, 329, 330, 331,
02382 332, 333, 334, 335, 336, 337, 338, 339, 340, 341,
02383 0, 0, 342, 343, 0, 0, 0, 0, -609, -609,
02384 -609, -609, -609, -609, -609, -609, -609, -609, -609, -609,
02385 -609, 0, 0, -609, -609, -609, 0, 0, -609, 0,
02386 0, 0, 0, 344, -609, 345, 346, 347, 348, 349,
02387 350, 351, 352, 353, 354, 0, 0, 0, -609, 0,
02388 0, -609, 0, -243, -609, -609, -609, -609, -609, -609,
02389 -609, -609, -609, -609, -609, -609, 0, 0, 0, 0,
02390 -609, -609, -609, -609, -609, -610, 0, -609, -609, -609,
02391 0, -609, 0, -610, -610, -610, 0, 0, -610, -610,
02392 -610, 0, -610, 0, 0, 0, 0, 0, 0, 0,
02393 0, -610, -610, -610, -610, 0, 0, 0, 0, 0,
02394 0, 0, -610, -610, 0, -610, -610, -610, -610, -610,
02395 0, 0, 0, 0, 329, 330, 331, 332, 333, 334,
02396 335, 336, 337, 338, 339, -627, -627, 0, 0, 342,
02397 343, 0, 0, 0, 0, -610, -610, -610, -610, -610,
02398 -610, -610, -610, -610, -610, -610, -610, -610, 0, 0,
02399 -610, -610, -610, 0, 0, -610, 0, 0, 0, 0,
02400 0, -610, 345, 346, 347, 348, 349, 350, 351, 352,
02401 353, 354, 0, 0, 0, -610, 0, 0, -610, 0,
02402 0, -610, -610, -610, -610, -610, -610, -610, -610, -610,
02403 -610, -610, -610, 0, 0, 0, 0, -610, -610, -610,
02404 -610, -610, -294, 0, -610, -610, -610, 0, -610, 0,
02405 -294, -294, -294, 0, 0, -294, -294, -294, 0, -294,
02406 0, 0, 0, 0, 0, 0, 0, 0, 0, -294,
02407 -294, -294, 0, 0, 0, 0, 0, 0, 0, -294,
02408 -294, 0, -294, -294, -294, -294, -294, 0, 0, 0,
02409 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02410 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02411 0, 0, -294, -294, -294, -294, -294, -294, -294, -294,
02412 -294, -294, -294, -294, -294, 0, 0, -294, -294, -294,
02413 0, 757, -294, 0, 0, 0, 0, 0, -294, 0,
02414 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02415 0, 0, -294, 0, 0, -294, 0, -107, -294, -294,
02416 -294, -294, -294, -294, -294, -294, -294, -294, -294, -294,
02417 0, 0, 0, 0, 0, -294, -294, -294, -294, -432,
02418 0, -294, -294, -294, 0, -294, 0, -432, -432, -432,
02419 0, 0, -432, -432, -432, 0, -432, 0, 0, 0,
02420 0, 0, 0, 0, 0, -432, -432, -432, 0, 0,
02421 0, 0, 0, 0, 0, 0, -432, -432, 0, -432,
02422 -432, -432, -432, -432, 0, 0, 0, 0, 0, 0,
02423 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02424 0, 0, 0, 0, 0, 0, 0, 0, 0, -432,
02425 -432, -432, -432, -432, -432, -432, -432, -432, -432, -432,
02426 -432, -432, 0, 0, -432, -432, -432, 0, 0, -432,
02427 0, 0, 0, 0, 0, -432, 0, 0, 0, 0,
02428 0, 0, 0, 0, 0, 0, 0, 0, 0, -432,
02429 0, 0, 0, 0, 0, -432, 0, -432, -432, -432,
02430 -432, -432, -432, -432, -432, -432, -432, 0, 0, 0,
02431 0, -432, -432, -432, -432, -432, -285, 230, -432, -432,
02432 -432, 0, -432, 0, -285, -285, -285, 0, 0, -285,
02433 -285, -285, 0, -285, 0, 0, 0, 0, 0, 0,
02434 0, 0, 0, -285, -285, -285, 0, 0, 0, 0,
02435 0, 0, 0, -285, -285, 0, -285, -285, -285, -285,
02436 -285, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02437 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02438 0, 0, 0, 0, 0, 0, -285, -285, -285, -285,
02439 -285, -285, -285, -285, -285, -285, -285, -285, -285, 0,
02440 0, -285, -285, -285, 0, 0, -285, 0, 0, 0,
02441 0, 0, -285, 0, 0, 0, 0, 0, 0, 0,
02442 0, 0, 0, 0, 0, 0, -285, 0, 0, -285,
02443 0, 0, -285, -285, -285, -285, -285, -285, -285, -285,
02444 -285, -285, -285, -285, 0, 0, 0, 0, 0, -285,
02445 -285, -285, -285, -422, 0, -285, -285, -285, 0, -285,
02446 0, -422, -422, -422, 0, 0, -422, -422, -422, 0,
02447 -422, 0, 0, 0, 0, 0, 0, 0, 0, -422,
02448 -422, -422, 0, 0, 0, 0, 0, 0, 0, 0,
02449 -422, -422, 0, -422, -422, -422, -422, -422, 0, 0,
02450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02451 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02452 0, 0, 0, -422, -422, -422, -422, -422, -422, -422,
02453 -422, -422, -422, -422, -422, -422, 0, 0, -422, -422,
02454 -422, 0, 0, -422, 0, 0, 0, 0, 0, -422,
02455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02456 0, 0, 0, -422, 0, 0, 0, 0, 0, -422,
02457 0, -422, -422, -422, -422, -422, -422, -422, -422, -422,
02458 -422, 0, 0, 0, 0, -422, -422, -422, -422, -422,
02459 -301, -422, -422, -422, -422, 0, -422, 0, -301, -301,
02460 -301, 0, 0, -301, -301, -301, 0, -301, 0, 0,
02461 0, 0, 0, 0, 0, 0, 0, -301, -301, 0,
02462 0, 0, 0, 0, 0, 0, 0, -301, -301, 0,
02463 -301, -301, -301, -301, -301, 0, 0, 0, 0, 0,
02464 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02465 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02466 -301, -301, -301, -301, -301, -301, -301, -301, -301, -301,
02467 -301, -301, -301, 0, 0, -301, -301, -301, 0, 0,
02468 -301, 0, 0, 0, 0, 0, -301, 0, 0, 0,
02469 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02470 -301, 0, 0, 0, 0, 0, -301, 0, -301, -301,
02471 -301, -301, -301, -301, -301, -301, -301, -301, 0, 0,
02472 0, 0, 0, -301, -301, -301, -301, -608, 227, -301,
02473 -301, -301, 0, -301, 0, -608, -608, -608, 0, 0,
02474 0, -608, -608, 0, -608, 0, 0, 0, 0, 0,
02475 0, 0, 0, -608, 0, 0, 0, 0, 0, 0,
02476 0, 0, 0, 0, -608, -608, 0, -608, -608, -608,
02477 -608, -608, 0, 0, 0, 0, 0, 0, 0, 0,
02478 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02479 0, 0, 0, 0, 0, 0, 0, -608, -608, -608,
02480 -608, -608, -608, -608, -608, -608, -608, -608, -608, -608,
02481 0, 0, -608, -608, -608, 0, 701, 0, 0, 0,
02482 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02483 0, 0, 0, 0, 0, 0, 0, -608, 0, 0,
02484 0, 0, -105, -608, 0, -608, -608, -608, -608, -608,
02485 -608, -608, -608, -608, -608, 0, 0, 0, 0, -608,
02486 -608, -608, -608, -96, -294, 0, -608, 0, -608, 0,
02487 -608, 0, -294, -294, -294, 0, 0, 0, -294, -294,
02488 0, -294, 0, 0, 0, 0, 0, 0, 0, 0,
02489 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02490 0, -294, -294, 0, -294, -294, -294, -294, -294, 0,
02491 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02492 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02493 0, 0, 0, 0, -294, -294, -294, -294, -294, -294,
02494 -294, -294, -294, -294, -294, -294, -294, 0, 0, -294,
02495 -294, -294, 0, 702, 0, 0, 0, 0, 0, 0,
02496 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02497 0, 0, 0, 0, -294, 0, 0, 0, 0, -107,
02498 -294, 0, -294, -294, -294, -294, -294, -294, -294, -294,
02499 -294, -294, 0, 0, 0, 0, 0, -294, -294, -294,
02500 -98, 0, 0, -294, 0, -294, 251, -294, 5, 6,
02501 7, 8, 9, -626, -626, -626, 10, 11, 0, 0,
02502 -626, 12, 0, 13, 14, 15, 16, 17, 18, 19,
02503 0, 0, 0, 0, 0, 20, 21, 22, 23, 24,
02504 25, 26, 0, 0, 27, 0, 0, 0, 0, 0,
02505 28, 29, 252, 31, 32, 33, 34, 35, 36, 37,
02506 38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
02507 46, 47, 0, 48, 49, 0, 0, 0, 0, 0,
02508 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02509 0, 0, 0, 50, 0, 0, 51, 52, 0, 53,
02510 54, 0, 55, 0, 0, 56, 57, 58, 59, 60,
02511 61, 62, 63, 64, 0, 0, 0, 0, 0, 0,
02512 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02513 0, 0, 0, 65, 66, 67, 0, 0, 0, 0,
02514 0, 0, 0, 0, 0, 0, -626, 251, -626, 5,
02515 6, 7, 8, 9, 0, 0, -626, 10, 11, 0,
02516 -626, -626, 12, 0, 13, 14, 15, 16, 17, 18,
02517 19, 0, 0, 0, 0, 0, 20, 21, 22, 23,
02518 24, 25, 26, 0, 0, 27, 0, 0, 0, 0,
02519 0, 28, 29, 252, 31, 32, 33, 34, 35, 36,
02520 37, 38, 39, 40, 0, 41, 42, 43, 44, 0,
02521 45, 46, 47, 0, 48, 49, 0, 0, 0, 0,
02522 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02523 0, 0, 0, 0, 50, 0, 0, 51, 52, 0,
02524 53, 54, 0, 55, 0, 0, 56, 57, 58, 59,
02525 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
02526 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02527 0, 0, 0, 0, 65, 66, 67, 0, 0, 0,
02528 0, 0, 0, 0, 0, 0, 0, -626, 251, -626,
02529 5, 6, 7, 8, 9, 0, 0, -626, 10, 11,
02530 0, 0, -626, 12, -626, 13, 14, 15, 16, 17,
02531 18, 19, 0, 0, 0, 0, 0, 20, 21, 22,
02532 23, 24, 25, 26, 0, 0, 27, 0, 0, 0,
02533 0, 0, 28, 29, 252, 31, 32, 33, 34, 35,
02534 36, 37, 38, 39, 40, 0, 41, 42, 43, 44,
02535 0, 45, 46, 47, 0, 48, 49, 0, 0, 0,
02536 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02537 0, 0, 0, 0, 0, 50, 0, 0, 51, 52,
02538 0, 53, 54, 0, 55, 0, 0, 56, 57, 58,
02539 59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
02540 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02541 0, 0, 0, 0, 0, 65, 66, 67, 0, 0,
02542 0, 0, 0, 0, 0, 0, 0, 0, -626, 251,
02543 -626, 5, 6, 7, 8, 9, 0, 0, -626, 10,
02544 11, 0, 0, -626, 12, 0, 13, 14, 15, 16,
02545 17, 18, 19, 0, 0, 0, 0, 0, 20, 21,
02546 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
02547 0, 0, 0, 28, 29, 252, 31, 32, 33, 34,
02548 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
02549 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
02550 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02551 0, 0, 0, 0, 0, 0, 50, 0, 0, 51,
02552 52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
02553 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
02554 0, 0, 0, 0, 251, 0, 5, 6, 7, 8,
02555 9, 0, -626, -626, 10, 11, 65, 66, 67, 12,
02556 0, 13, 14, 15, 16, 17, 18, 19, 0, -626,
02557 0, -626, 0, 20, 21, 22, 23, 24, 25, 26,
02558 0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
02559 252, 31, 32, 33, 34, 35, 36, 37, 38, 39,
02560 40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
02561 0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
02562 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02563 0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
02564 55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
02565 63, 64, 0, 0, 0, 0, 0, 0, 0, 251,
02566 0, 5, 6, 7, 8, 9, 0, 0, 0, 10,
02567 11, 65, 66, 67, 12, 0, 13, 14, 15, 16,
02568 17, 18, 19, 0, -626, 0, -626, 0, 20, 21,
02569 22, 23, 24, 25, 26, 0, 0, 27, 0, 0,
02570 0, 0, 0, 28, 29, 252, 31, 32, 33, 34,
02571 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
02572 44, 0, 45, 46, 47, 0, 48, 49, 0, 0,
02573 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02574 0, 0, 0, 0, 0, 0, 50, 0, 0, 253,
02575 52, 0, 53, 54, 0, 55, 0, 0, 56, 57,
02576 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
02577 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02578 0, 0, 0, 0, 0, 0, 65, 66, 67, 0,
02579 0, 0, 0, 0, 0, 0, 0, -626, 0, -626,
02580 251, -626, 5, 6, 7, 8, 9, 0, 0, 0,
02581 10, 11, 0, 0, 0, 12, 0, 13, 14, 15,
02582 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02583 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02584 0, 0, 0, 0, 28, 29, 252, 31, 32, 33,
02585 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02586 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02587 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02588 0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
02589 51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
02590 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02591 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02592 0, 0, 0, 0, 0, 0, 0, 65, 66, 67,
02593 0, 0, 0, 0, 0, 0, 0, 0, -626, 0,
02594 -626, 251, -626, 5, 6, 7, 8, 9, 0, 0,
02595 0, 10, 11, 0, 0, 0, 12, 0, 13, 14,
02596 15, 16, 17, 18, 19, 0, 0, 0, 0, 0,
02597 20, 21, 22, 23, 24, 25, 26, 0, 0, 27,
02598 0, 0, 0, 0, 0, 28, 29, 252, 31, 32,
02599 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
02600 42, 43, 44, 0, 45, 46, 47, 0, 48, 49,
02601 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02602 0, 0, 0, 0, 0, 0, 0, 0, 50, 0,
02603 0, 51, 52, 0, 53, 54, 0, 55, 0, 0,
02604 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
02605 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02606 0, 0, 0, 0, 0, 0, 0, 0, 65, 66,
02607 67, 0, 0, -626, 4, 0, 5, 6, 7, 8,
02608 9, -626, 0, -626, 10, 11, 0, 0, 0, 12,
02609 0, 13, 14, 15, 16, 17, 18, 19, 0, 0,
02610 0, 0, 0, 20, 21, 22, 23, 24, 25, 26,
02611 0, 0, 27, 0, 0, 0, 0, 0, 28, 29,
02612 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
02613 40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
02614 0, 48, 49, 0, 0, 0, 0, 0, 0, 0,
02615 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02616 0, 50, 0, 0, 51, 52, 0, 53, 54, 0,
02617 55, 0, 0, 56, 57, 58, 59, 60, 61, 62,
02618 63, 64, 0, 0, 0, 0, 0, 0, 0, 0,
02619 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02620 0, 65, 66, 67, 0, 0, -626, 0, 0, 0,
02621 0, 0, 0, 0, -626, 251, -626, 5, 6, 7,
02622 8, 9, 0, 0, -626, 10, 11, 0, 0, 0,
02623 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02624 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02625 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02626 29, 252, 31, 32, 33, 34, 35, 36, 37, 38,
02627 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02628 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02629 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02630 0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
02631 0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
02632 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02633 251, 0, 5, 6, 7, 8, 9, 0, 0, 0,
02634 10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
02635 16, 17, 18, 19, 0, -626, 0, -626, 0, 20,
02636 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02637 0, 0, 0, 0, 28, 29, 252, 31, 32, 33,
02638 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02639 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02640 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02641 0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
02642 51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
02643 57, 58, 59, 60, 61, 62, 63, 64, 0, -626,
02644 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02645 0, 9, 0, 0, 0, 10, 11, 65, 66, 67,
02646 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02647 -626, 0, -626, 0, 20, 21, 22, 23, 24, 25,
02648 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
02649 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02650 39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
02651 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02652 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02653 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
02654 0, 207, 208, 209, 56, 57, 58, 59, 60, 61,
02655 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02656 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02657 10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
02658 16, 17, 18, 19, 0, 0, 0, 234, 0, 20,
02659 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02660 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02661 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02662 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02663 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02664 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02665 206, 52, 0, 53, 54, 0, 0, 0, 0, 56,
02666 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02667 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02668 0, 9, 0, 0, 0, 10, 11, 65, 66, 67,
02669 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02670 304, 0, 305, 0, 20, 21, 22, 23, 24, 25,
02671 26, 0, 0, 27, 0, 0, 0, 0, 0, 0,
02672 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02673 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02674 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02675 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02676 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
02677 0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
02678 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02679 0, 0, 5, 6, 7, 8, 9, 0, 0, 0,
02680 10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
02681 16, 17, 18, 19, 0, 0, 0, 234, 0, 20,
02682 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02683 0, 0, 0, 0, 28, 29, 30, 31, 32, 33,
02684 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02685 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02686 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02687 0, 0, 0, 0, 0, 0, 0, 50, 0, 0,
02688 51, 52, 0, 53, 54, 0, 55, 0, 0, 56,
02689 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02690 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02691 8, 9, 0, 0, 0, 10, 11, 65, 66, 67,
02692 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02693 498, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02694 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02695 29, 252, 31, 32, 33, 34, 35, 36, 37, 38,
02696 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02697 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02698 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02699 0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
02700 0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
02701 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02702 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02703 0, 0, 65, 66, 67, 0, 0, 0, 0, 0,
02704 0, 0, 0, 0, 0, 498, 121, 122, 123, 124,
02705 125, 126, 127, 128, 129, 130, 131, 132, 133, 134,
02706 135, 136, 137, 138, 139, 140, 141, 142, 143, 144,
02707 0, 0, 0, 145, 146, 147, 386, 387, 388, 389,
02708 152, 153, 154, 0, 0, 0, 0, 0, 155, 156,
02709 157, 158, 390, 391, 392, 393, 163, 37, 38, 394,
02710 40, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02711 0, 165, 166, 167, 168, 169, 170, 171, 172, 173,
02712 0, 0, 174, 175, 0, 0, 176, 177, 178, 179,
02713 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02714 180, 181, 0, 0, 0, 0, 0, 0, 0, 0,
02715 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02716 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
02717 191, 0, 192, 193, 0, 0, 0, 0, 0, 0,
02718 194, 395, 121, 122, 123, 124, 125, 126, 127, 128,
02719 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
02720 139, 140, 141, 142, 143, 144, 0, 0, 0, 145,
02721 146, 147, 148, 149, 150, 151, 152, 153, 154, 0,
02722 0, 0, 0, 0, 155, 156, 157, 158, 159, 160,
02723 161, 162, 163, 283, 284, 164, 285, 0, 0, 0,
02724 0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
02725 168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
02726 0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
02727 0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
02728 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02729 0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
02730 185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
02731 0, 0, 0, 0, 0, 0, 194, 121, 122, 123,
02732 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
02733 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
02734 144, 0, 0, 0, 145, 146, 147, 148, 149, 150,
02735 151, 152, 153, 154, 0, 0, 0, 0, 0, 155,
02736 156, 157, 158, 159, 160, 161, 162, 163, 236, 0,
02737 164, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02738 0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
02739 173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
02740 179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02741 0, 180, 181, 0, 0, 57, 0, 0, 0, 0,
02742 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02743 0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
02744 190, 191, 0, 192, 193, 0, 0, 0, 0, 0,
02745 0, 194, 121, 122, 123, 124, 125, 126, 127, 128,
02746 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
02747 139, 140, 141, 142, 143, 144, 0, 0, 0, 145,
02748 146, 147, 148, 149, 150, 151, 152, 153, 154, 0,
02749 0, 0, 0, 0, 155, 156, 157, 158, 159, 160,
02750 161, 162, 163, 0, 0, 164, 0, 0, 0, 0,
02751 0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
02752 168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
02753 0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
02754 0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
02755 57, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02756 0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
02757 185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
02758 0, 0, 0, 0, 0, 0, 194, 121, 122, 123,
02759 124, 125, 126, 127, 128, 129, 130, 131, 132, 133,
02760 134, 135, 136, 137, 138, 139, 140, 141, 142, 143,
02761 144, 0, 0, 0, 145, 146, 147, 148, 149, 150,
02762 151, 152, 153, 154, 0, 0, 0, 0, 0, 155,
02763 156, 157, 158, 159, 160, 161, 162, 163, 0, 0,
02764 164, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02765 0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
02766 173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
02767 179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02768 0, 180, 181, 0, 0, 0, 0, 0, 0, 0,
02769 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02770 0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
02771 190, 191, 0, 192, 193, 5, 6, 7, 0, 9,
02772 0, 194, 0, 10, 11, 0, 0, 0, 12, 0,
02773 13, 14, 15, 241, 242, 18, 19, 0, 0, 0,
02774 0, 0, 243, 244, 245, 23, 24, 25, 26, 0,
02775 0, 203, 0, 0, 0, 0, 0, 0, 271, 0,
02776 0, 32, 33, 34, 35, 36, 37, 38, 39, 40,
02777 0, 41, 42, 43, 44, 0, 45, 46, 47, 0,
02778 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02779 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02780 272, 0, 0, 206, 52, 0, 53, 54, 0, 0,
02781 0, 0, 56, 57, 58, 59, 60, 61, 62, 63,
02782 64, 0, 0, 0, 0, 0, 5, 6, 7, 0,
02783 9, 0, 0, 0, 10, 11, 0, 0, 0, 12,
02784 273, 13, 14, 15, 241, 242, 18, 19, 274, 0,
02785 0, 0, 0, 243, 244, 245, 23, 24, 25, 26,
02786 0, 0, 203, 0, 0, 0, 0, 0, 0, 271,
02787 0, 0, 32, 33, 34, 35, 36, 37, 38, 39,
02788 40, 0, 41, 42, 43, 44, 0, 45, 46, 47,
02789 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02790 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02791 0, 272, 0, 0, 206, 52, 0, 53, 54, 0,
02792 0, 0, 0, 56, 57, 58, 59, 60, 61, 62,
02793 63, 64, 0, 0, 0, 0, 0, 5, 6, 7,
02794 8, 9, 0, 0, 0, 10, 11, 0, 0, 0,
02795 12, 273, 13, 14, 15, 16, 17, 18, 19, 519,
02796 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02797 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02798 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,
02799 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02800 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02801 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02802 0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
02803 0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
02804 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02805 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02806 10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
02807 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02808 21, 22, 23, 24, 25, 26, 0, 0, 203, 0,
02809 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02810 34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
02811 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02812 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02813 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02814 206, 52, 0, 53, 54, 0, 207, 208, 209, 56,
02815 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02816 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02817 8, 9, 0, 0, 0, 10, 11, 65, 210, 67,
02818 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02819 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02820 26, 0, 0, 27, 0, 0, 0, 0, 0, 28,
02821 29, 0, 31, 32, 33, 34, 35, 36, 37, 38,
02822 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02823 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02824 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02825 0, 0, 50, 0, 0, 51, 52, 0, 53, 54,
02826 0, 55, 0, 0, 56, 57, 58, 59, 60, 61,
02827 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02828 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02829 10, 11, 65, 66, 67, 12, 0, 13, 14, 15,
02830 241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
02831 244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
02832 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02833 34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
02834 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02835 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02836 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02837 206, 52, 0, 53, 54, 0, 609, 208, 209, 56,
02838 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02839 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02840 0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
02841 12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
02842 0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
02843 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
02844 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02845 39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
02846 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02847 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02848 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
02849 0, 207, 208, 0, 56, 57, 58, 59, 60, 61,
02850 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02851 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02852 10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
02853 241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
02854 244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
02855 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02856 34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
02857 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02859 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02860 206, 52, 0, 53, 54, 0, 0, 208, 209, 56,
02861 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02862 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02863 0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
02864 12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
02865 0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
02866 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
02867 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02868 39, 40, 204, 41, 42, 43, 44, 0, 45, 46,
02869 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02870 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02871 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
02872 0, 609, 208, 0, 56, 57, 58, 59, 60, 61,
02873 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02874 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02875 10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
02876 241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
02877 244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
02878 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02879 34, 35, 36, 37, 38, 39, 40, 204, 41, 42,
02880 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02881 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02882 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02883 206, 52, 0, 53, 54, 0, 0, 208, 0, 56,
02884 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02885 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02886 0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
02887 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02888 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02889 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
02890 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02891 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02892 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02893 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02894 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
02895 0, 512, 0, 0, 56, 57, 58, 59, 60, 61,
02896 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02897 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02898 10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
02899 241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
02900 244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
02901 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02902 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02903 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02904 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02905 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02906 206, 52, 0, 53, 54, 0, 207, 0, 0, 56,
02907 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02908 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02909 0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
02910 12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
02911 0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
02912 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
02913 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02914 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02915 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02916 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02917 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
02918 0, 817, 0, 0, 56, 57, 58, 59, 60, 61,
02919 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02920 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02921 10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
02922 241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
02923 244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
02924 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02925 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02926 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02927 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02928 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02929 206, 52, 0, 53, 54, 0, 512, 0, 0, 56,
02930 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02931 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02932 0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
02933 12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
02934 0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
02935 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
02936 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02937 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02938 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02939 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02940 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
02941 0, 609, 0, 0, 56, 57, 58, 59, 60, 61,
02942 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02943 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02944 10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
02945 241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
02946 244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
02947 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02948 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02949 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02950 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02951 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02952 206, 52, 0, 53, 54, 0, 0, 0, 0, 56,
02953 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02954 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02955 0, 9, 0, 0, 0, 10, 11, 65, 210, 67,
02956 12, 0, 13, 14, 15, 16, 17, 18, 19, 0,
02957 0, 0, 0, 0, 20, 21, 22, 23, 24, 25,
02958 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
02959 29, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02960 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02961 47, 0, 48, 49, 0, 0, 0, 0, 0, 0,
02962 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02963 0, 0, 205, 0, 0, 206, 52, 0, 53, 54,
02964 0, 0, 0, 0, 56, 57, 58, 59, 60, 61,
02965 62, 63, 64, 0, 0, 0, 0, 0, 0, 0,
02966 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
02967 10, 11, 65, 210, 67, 12, 0, 13, 14, 15,
02968 16, 17, 18, 19, 0, 0, 0, 0, 0, 20,
02969 21, 22, 23, 24, 25, 26, 0, 0, 27, 0,
02970 0, 0, 0, 0, 0, 29, 0, 0, 32, 33,
02971 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
02972 43, 44, 0, 45, 46, 47, 0, 48, 49, 0,
02973 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02974 0, 0, 0, 0, 0, 0, 0, 205, 0, 0,
02975 206, 52, 0, 53, 54, 0, 0, 0, 0, 56,
02976 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
02977 0, 0, 0, 0, 0, 0, 0, 5, 6, 7,
02978 0, 9, 0, 0, 0, 10, 11, 65, 66, 67,
02979 12, 0, 13, 14, 15, 241, 242, 18, 19, 0,
02980 0, 0, 0, 0, 243, 244, 245, 23, 24, 25,
02981 26, 0, 0, 203, 0, 0, 0, 0, 0, 0,
02982 271, 0, 0, 32, 33, 34, 35, 36, 37, 38,
02983 39, 40, 0, 41, 42, 43, 44, 0, 45, 46,
02984 47, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02985 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02986 0, 0, 272, 0, 0, 325, 52, 0, 53, 54,
02987 0, 326, 0, 0, 56, 57, 58, 59, 60, 61,
02988 62, 63, 64, 0, 0, 0, 0, 0, 5, 6,
02989 7, 0, 9, 0, 0, 0, 10, 11, 0, 0,
02990 0, 12, 273, 13, 14, 15, 241, 242, 18, 19,
02991 0, 0, 0, 0, 0, 243, 244, 245, 23, 24,
02992 25, 26, 0, 0, 203, 0, 0, 0, 0, 0,
02993 0, 271, 0, 0, 32, 33, 34, 35, 36, 37,
02994 38, 39, 40, 0, 41, 42, 43, 44, 0, 45,
02995 46, 47, 0, 0, 0, 0, 0, 0, 0, 0,
02996 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
02997 0, 0, 0, 367, 0, 0, 51, 52, 0, 53,
02998 54, 0, 55, 0, 0, 56, 57, 58, 59, 60,
02999 61, 62, 63, 64, 0, 0, 0, 0, 0, 5,
03000 6, 7, 0, 9, 0, 0, 0, 10, 11, 0,
03001 0, 0, 12, 273, 13, 14, 15, 241, 242, 18,
03002 19, 0, 0, 0, 0, 0, 243, 244, 245, 23,
03003 24, 25, 26, 0, 0, 203, 0, 0, 0, 0,
03004 0, 0, 271, 0, 0, 32, 33, 34, 375, 36,
03005 37, 38, 376, 40, 0, 41, 42, 43, 44, 0,
03006 45, 46, 47, 0, 0, 0, 0, 0, 0, 0,
03007 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03008 0, 377, 0, 0, 378, 0, 0, 206, 52, 0,
03009 53, 54, 0, 0, 0, 0, 56, 57, 58, 59,
03010 60, 61, 62, 63, 64, 0, 0, 0, 0, 0,
03011 5, 6, 7, 0, 9, 0, 0, 0, 10, 11,
03012 0, 0, 0, 12, 273, 13, 14, 15, 241, 242,
03013 18, 19, 0, 0, 0, 0, 0, 243, 244, 245,
03014 23, 24, 25, 26, 0, 0, 203, 0, 0, 0,
03015 0, 0, 0, 271, 0, 0, 32, 33, 34, 375,
03016 36, 37, 38, 376, 40, 0, 41, 42, 43, 44,
03017 0, 45, 46, 47, 0, 0, 0, 0, 0, 0,
03018 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03019 0, 0, 0, 0, 0, 378, 0, 0, 206, 52,
03020 0, 53, 54, 0, 0, 0, 0, 56, 57, 58,
03021 59, 60, 61, 62, 63, 64, 0, 0, 0, 0,
03022 0, 5, 6, 7, 0, 9, 0, 0, 0, 10,
03023 11, 0, 0, 0, 12, 273, 13, 14, 15, 241,
03024 242, 18, 19, 0, 0, 0, 0, 0, 243, 244,
03025 245, 23, 24, 25, 26, 0, 0, 203, 0, 0,
03026 0, 0, 0, 0, 271, 0, 0, 32, 33, 34,
03027 35, 36, 37, 38, 39, 40, 0, 41, 42, 43,
03028 44, 0, 45, 46, 47, 0, 0, 0, 0, 0,
03029 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03030 0, 0, 0, 0, 0, 0, 272, 0, 0, 325,
03031 52, 0, 53, 54, 0, 0, 0, 0, 56, 57,
03032 58, 59, 60, 61, 62, 63, 64, 0, 0, 0,
03033 0, 0, 5, 6, 7, 0, 9, 0, 0, 0,
03034 10, 11, 0, 0, 0, 12, 273, 13, 14, 15,
03035 241, 242, 18, 19, 0, 0, 0, 0, 0, 243,
03036 244, 245, 23, 24, 25, 26, 0, 0, 203, 0,
03037 0, 0, 0, 0, 0, 271, 0, 0, 32, 33,
03038 34, 35, 36, 37, 38, 39, 40, 0, 41, 42,
03039 43, 44, 0, 45, 46, 47, 0, 0, 0, 0,
03040 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03041 0, 0, 0, 0, 0, 0, 0, 899, 0, 0,
03042 206, 52, 0, 53, 54, 0, 0, 0, 0, 56,
03043 57, 58, 59, 60, 61, 62, 63, 64, 0, 0,
03044 0, 0, 0, 5, 6, 7, 0, 9, 0, 0,
03045 0, 10, 11, 0, 0, 0, 12, 273, 13, 14,
03046 15, 241, 242, 18, 19, 0, 0, 0, 0, 0,
03047 243, 244, 245, 23, 24, 25, 26, 0, 0, 203,
03048 0, 0, 0, 0, 0, 0, 271, 0, 0, 32,
03049 33, 34, 35, 36, 37, 38, 39, 40, 0, 41,
03050 42, 43, 44, 0, 45, 46, 47, 0, 0, 0,
03051 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03052 0, 0, 0, 0, 0, 0, 0, 0, 976, 0,
03053 0, 206, 52, 0, 53, 54, 0, 0, 0, 0,
03054 56, 57, 58, 59, 60, 61, 62, 63, 64, 0,
03055 0, 0, 0, 554, 555, 0, 0, 556, 0, 0,
03056 0, 0, 0, 0, 0, 0, 0, 0, 273, 165,
03057 166, 167, 168, 169, 170, 171, 172, 173, 0, 0,
03058 174, 175, 0, 0, 176, 177, 178, 179, 0, 0,
03059 0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
03060 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03061 0, 0, 0, 0, 0, 0, 0, 0, 0, 182,
03062 183, 184, 185, 186, 187, 188, 189, 190, 191, 0,
03063 192, 193, 562, 563, 0, 0, 564, 0, 194, 0,
03064 0, 0, 0, 0, 0, 0, 0, 0, 165, 166,
03065 167, 168, 169, 170, 171, 172, 173, 0, 0, 174,
03066 175, 0, 0, 176, 177, 178, 179, 0, 0, 0,
03067 0, 0, 0, 0, 0, 0, 0, 180, 181, 0,
03068 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03069 0, 0, 0, 0, 0, 0, 0, 0, 182, 183,
03070 184, 185, 186, 187, 188, 189, 190, 191, 0, 192,
03071 193, 599, 563, 0, 0, 600, 0, 194, 0, 0,
03072 0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
03073 168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
03074 0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
03075 0, 0, 0, 0, 0, 0, 180, 181, 0, 0,
03076 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03077 0, 0, 0, 0, 0, 0, 0, 182, 183, 184,
03078 185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
03079 613, 555, 0, 0, 614, 0, 194, 0, 0, 0,
03080 0, 0, 0, 0, 0, 0, 165, 166, 167, 168,
03081 169, 170, 171, 172, 173, 0, 0, 174, 175, 0,
03082 0, 176, 177, 178, 179, 0, 0, 0, 0, 0,
03083 0, 0, 0, 0, 0, 180, 181, 0, 0, 0,
03084 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03085 0, 0, 0, 0, 0, 0, 182, 183, 184, 185,
03086 186, 187, 188, 189, 190, 191, 0, 192, 193, 616,
03087 563, 0, 0, 617, 0, 194, 0, 0, 0, 0,
03088 0, 0, 0, 0, 0, 165, 166, 167, 168, 169,
03089 170, 171, 172, 173, 0, 0, 174, 175, 0, 0,
03090 176, 177, 178, 179, 0, 0, 0, 0, 0, 0,
03091 0, 0, 0, 0, 180, 181, 0, 0, 0, 0,
03092 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03093 0, 0, 0, 0, 0, 182, 183, 184, 185, 186,
03094 187, 188, 189, 190, 191, 0, 192, 193, 640, 555,
03095 0, 0, 641, 0, 194, 0, 0, 0, 0, 0,
03096 0, 0, 0, 0, 165, 166, 167, 168, 169, 170,
03097 171, 172, 173, 0, 0, 174, 175, 0, 0, 176,
03098 177, 178, 179, 0, 0, 0, 0, 0, 0, 0,
03099 0, 0, 0, 180, 181, 0, 0, 0, 0, 0,
03100 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03101 0, 0, 0, 0, 182, 183, 184, 185, 186, 187,
03102 188, 189, 190, 191, 0, 192, 193, 643, 563, 0,
03103 0, 644, 0, 194, 0, 0, 0, 0, 0, 0,
03104 0, 0, 0, 165, 166, 167, 168, 169, 170, 171,
03105 172, 173, 0, 0, 174, 175, 0, 0, 176, 177,
03106 178, 179, 0, 0, 0, 0, 0, 0, 0, 0,
03107 0, 0, 180, 181, 0, 0, 0, 0, 0, 0,
03108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03109 0, 0, 0, 182, 183, 184, 185, 186, 187, 188,
03110 189, 190, 191, 0, 192, 193, 728, 555, 0, 0,
03111 729, 0, 194, 0, 0, 0, 0, 0, 0, 0,
03112 0, 0, 165, 166, 167, 168, 169, 170, 171, 172,
03113 173, 0, 0, 174, 175, 0, 0, 176, 177, 178,
03114 179, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03115 0, 180, 181, 0, 0, 0, 0, 0, 0, 0,
03116 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03117 0, 0, 182, 183, 184, 185, 186, 187, 188, 189,
03118 190, 191, 0, 192, 193, 731, 563, 0, 0, 732,
03119 0, 194, 0, 0, 0, 0, 0, 0, 0, 0,
03120 0, 165, 166, 167, 168, 169, 170, 171, 172, 173,
03121 0, 0, 174, 175, 0, 0, 176, 177, 178, 179,
03122 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03123 180, 181, 0, 0, 0, 0, 0, 0, 0, 0,
03124 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03125 0, 182, 183, 184, 185, 186, 187, 188, 189, 190,
03126 191, 0, 192, 193, 738, 555, 0, 0, 739, 0,
03127 194, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03128 165, 166, 167, 168, 169, 170, 171, 172, 173, 0,
03129 0, 174, 175, 0, 0, 176, 177, 178, 179, 0,
03130 0, 0, 0, 0, 0, 0, 0, 0, 0, 180,
03131 181, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03132 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03133 182, 183, 184, 185, 186, 187, 188, 189, 190, 191,
03134 0, 192, 193, 1008, 555, 0, 0, 1009, 0, 194,
03135 0, 0, 0, 0, 0, 0, 0, 0, 0, 165,
03136 166, 167, 168, 169, 170, 171, 172, 173, 0, 0,
03137 174, 175, 0, 0, 176, 177, 178, 179, 0, 0,
03138 0, 0, 0, 0, 0, 0, 0, 0, 180, 181,
03139 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03140 0, 0, 0, 0, 0, 0, 0, 0, 0, 182,
03141 183, 184, 185, 186, 187, 188, 189, 190, 191, 0,
03142 192, 193, 1039, 555, 0, 0, 1040, 0, 194, 0,
03143 0, 0, 0, 0, 0, 0, 0, 0, 165, 166,
03144 167, 168, 169, 170, 171, 172, 173, 0, 0, 174,
03145 175, 0, 0, 176, 177, 178, 179, 0, 0, 0,
03146 0, 0, 0, 0, 0, 0, 0, 180, 181, 0,
03147 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03148 0, 0, 0, 0, 0, 0, 0, 0, 182, 183,
03149 184, 185, 186, 187, 188, 189, 190, 191, 0, 192,
03150 193, 1042, 563, 0, 0, 1043, 0, 194, 0, 0,
03151 0, 0, 0, 0, 0, 0, 0, 165, 166, 167,
03152 168, 169, 170, 171, 172, 173, 0, 0, 174, 175,
03153 0, 0, 176, 177, 178, 179, 0, 0, 0, 0,
03154 0, 0, 0, 0, 0, 0, 180, 181, 329, 330,
03155 331, 332, 333, 334, 335, 336, 337, 338, 339, 340,
03156 341, 0, 0, 342, 343, 0, 0, 182, 183, 184,
03157 185, 186, 187, 188, 189, 190, 191, 0, 192, 193,
03158 0, 0, 0, 0, 0, 0, 194, 0, 0, 0,
03159 0, 0, 0, 0, 344, 0, 345, 346, 347, 348,
03160 349, 350, 351, 352, 353, 354, 0, 0, 0, 0,
03161 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
03162 0, 234
03163 };
03164
03165 #define yypact_value_is_default(yystate) \
03166 ((yystate) == (-816))
03167
03168 #define yytable_value_is_error(yytable_value) \
03169 ((yytable_value) == (-627))
03170
03171 static const yytype_int16 yycheck[] =
03172 {
03173 2, 27, 57, 29, 55, 16, 17, 356, 98, 20,
03174 233, 8, 28, 69, 89, 361, 328, 92, 81, 355,
03175 328, 357, 2, 223, 4, 576, 22, 4, 578, 595,
03176 81, 28, 686, 92, 8, 258, 92, 422, 261, 575,
03177 414, 96, 93, 94, 95, 265, 88, 89, 422, 269,
03178 92, 53, 54, 469, 28, 615, 65, 787, 51, 8,
03179 57, 670, 442, 16, 17, 401, 473, 20, 716, 418,
03180 76, 55, 720, 16, 17, 460, 2, 20, 4, 28,
03181 76, 417, 642, 419, 378, 778, 27, 874, 26, 904,
03182 16, 17, 25, 289, 20, 291, 25, 293, 63, 96,
03183 53, 297, 26, 519, 908, 66, 69, 872, 63, 445,
03184 53, 54, 253, 25, 25, 1, 508, 87, 25, 511,
03185 775, 136, 471, 89, 778, 51, 13, 89, 143, 55,
03186 52, 25, 0, 787, 56, 87, 472, 87, 16, 17,
03187 66, 25, 20, 143, 109, 800, 111, 87, 78, 115,
03188 25, 25, 89, 115, 109, 81, 111, 99, 141, 132,
03189 143, 13, 88, 89, 63, 135, 92, 93, 94, 95,
03190 730, 737, 13, 37, 38, 725, 941, 142, 115, 745,
03191 122, 741, 13, 135, 325, 135, 15, 142, 17, 1004,
03192 120, 233, 742, 235, 132, 135, 255, 806, 807, 255,
03193 141, 424, 143, 136, 897, 428, 993, 136, 132, 138,
03194 433, 274, 1016, 112, 138, 217, 227, 947, 229, 230,
03195 262, 223, 56, 274, 136, 136, 449, 138, 230, 136,
03196 995, 431, 581, 119, 309, 310, 311, 312, 623, 686,
03197 246, 13, 136, 897, 593, 271, 582, 142, 622, 623,
03198 904, 658, 136, 633, 141, 141, 143, 143, 594, 952,
03199 253, 136, 136, 1028, 273, 142, 13, 309, 310, 311,
03200 312, 251, 314, 315, 227, 326, 229, 886, 138, 143,
03201 206, 697, 930, 143, 227, 63, 229, 362, 363, 141,
03202 486, 143, 255, 947, 844, 518, 846, 493, 592, 691,
03203 141, 227, 143, 229, 230, 364, 856, 233, 364, 235,
03204 141, 861, 143, 672, 240, 674, 136, 853, 1011, 142,
03205 362, 363, 28, 143, 380, 251, 29, 253, 308, 89,
03206 89, 308, 325, 313, 112, 377, 262, 744, 142, 746,
03207 787, 115, 326, 790, 26, 356, 136, 658, 274, 227,
03208 1004, 229, 115, 87, 356, 115, 115, 966, 102, 25,
03209 357, 136, 323, 87, 136, 136, 932, 328, 143, 141,
03210 323, 143, 87, 25, 704, 328, 87, 927, 928, 930,
03211 726, 711, 308, 309, 310, 311, 312, 313, 314, 315,
03212 698, 138, 89, 115, 141, 89, 143, 323, 87, 325,
03213 326, 135, 328, 715, 401, 87, 469, 418, 138, 51,
03214 113, 135, 612, 636, 136, 56, 418, 637, 469, 134,
03215 135, 115, 419, 439, 135, 115, 992, 139, 430, 431,
03216 356, 143, 358, 744, 87, 746, 362, 363, 87, 90,
03217 442, 991, 439, 404, 405, 134, 135, 138, 445, 115,
03218 132, 377, 134, 135, 89, 70, 519, 904, 136, 906,
03219 471, 136, 442, 115, 132, 439, 138, 87, 519, 471,
03220 136, 414, 70, 139, 1024, 472, 1026, 143, 404, 405,
03221 87, 1041, 135, 868, 136, 134, 135, 139, 63, 138,
03222 439, 143, 418, 52, 868, 54, 55, 56, 57, 138,
03223 947, 139, 949, 87, 89, 507, 508, 954, 87, 511,
03224 125, 126, 127, 26, 457, 135, 442, 543, 574, 575,
03225 743, 37, 38, 115, 883, 884, 452, 134, 135, 888,
03226 115, 890, 588, 892, 109, 561, 111, 112, 140, 762,
03227 686, 14, 15, 469, 52, 471, 54, 55, 56, 57,
03228 773, 135, 558, 87, 596, 134, 135, 1004, 56, 1006,
03229 566, 761, 133, 559, 206, 112, 1013, 569, 26, 63,
03230 581, 567, 918, 686, 87, 638, 136, 136, 924, 581,
03231 89, 112, 593, 1030, 626, 582, 112, 638, 112, 615,
03232 606, 593, 70, 519, 96, 601, 136, 594, 240, 601,
03233 134, 135, 17, 63, 1051, 601, 115, 56, 63, 606,
03234 612, 253, 67, 141, 26, 109, 642, 111, 112, 132,
03235 25, 134, 135, 142, 577, 138, 136, 136, 136, 87,
03236 133, 633, 606, 139, 697, 781, 136, 860, 63, 785,
03237 999, 1000, 1001, 1002, 132, 571, 697, 573, 871, 109,
03238 87, 111, 112, 633, 109, 581, 111, 606, 733, 749,
03239 686, 736, 686, 142, 136, 136, 668, 593, 670, 595,
03240 596, 1020, 136, 136, 132, 87, 134, 135, 734, 622,
03241 138, 115, 89, 325, 109, 1021, 111, 112, 87, 691,
03242 1049, 733, 747, 136, 736, 10, 138, 134, 135, 705,
03243 626, 8, 13, 138, 730, 89, 712, 633, 115, 133,
03244 712, 115, 638, 715, 716, 741, 718, 136, 720, 136,
03245 132, 63, 134, 135, 52, 136, 138, 136, 2, 136,
03246 4, 115, 87, 54, 52, 134, 135, 698, 87, 136,
03247 701, 702, 16, 17, 65, 66, 20, 708, 709, 775,
03248 747, 897, 136, 804, 52, 901, 136, 781, 904, 761,
03249 906, 687, 715, 117, 690, 140, 692, 109, 843, 111,
03250 112, 697, 698, 87, 800, 701, 702, 51, 70, 134,
03251 135, 15, 708, 709, 897, 134, 135, 133, 901, 136,
03252 87, 904, 66, 906, 120, 136, 87, 853, 115, 855,
03253 58, 843, 136, 136, 806, 807, 862, 733, 87, 136,
03254 736, 737, 70, 136, 88, 89, 141, 10, 92, 745,
03255 134, 135, 10, 133, 52, 89, 54, 55, 56, 57,
03256 58, 123, 124, 125, 126, 127, 838, 134, 135, 841,
03257 98, 99, 70, 134, 135, 896, 136, 90, 2, 89,
03258 4, 115, 809, 810, 9, 134, 135, 89, 1004, 89,
03259 1006, 136, 139, 91, 122, 1011, 917, 1013, 829, 136,
03260 98, 99, 136, 897, 136, 115, 136, 901, 804, 136,
03261 904, 120, 906, 115, 886, 115, 56, 133, 136, 815,
03262 10, 1004, 136, 1006, 122, 133, 136, 51, 1011, 110,
03263 1013, 55, 138, 829, 136, 1051, 136, 40, 41, 42,
03264 43, 44, 54, 55, 840, 57, 136, 843, 136, 70,
03265 136, 847, 848, 65, 66, 851, 136, 81, 930, 571,
03266 56, 573, 206, 136, 85, 86, 136, 138, 1051, 93,
03267 94, 95, 96, 93, 136, 52, 972, 54, 55, 56,
03268 57, 877, 878, 227, 95, 229, 230, 452, 712, 233,
03269 769, 235, 1023, 686, 966, 750, 240, 893, 1016, 1022,
03270 896, 122, 123, 124, 125, 126, 127, 251, 101, 253,
03271 1004, 297, 1006, 59, 91, 96, 781, 1011, 262, 1013,
03272 97, 917, 938, 901, 52, 921, 54, 55, 56, 57,
03273 59, 60, 61, 62, 961, 962, 932, 897, 778, 1020,
03274 967, 398, 969, 970, 70, 1041, -1, -1, 1020, -1,
03275 1022, 1023, -1, -1, 1021, -1, -1, 1051, -1, 85,
03276 86, -1, -1, 91, 308, 309, 310, 311, 312, 313,
03277 314, 315, -1, -1, -1, 687, -1, -1, 690, 323,
03278 692, 325, 206, -1, 328, -1, 982, 52, 984, 54,
03279 55, 56, 57, -1, 990, -1, 992, 123, 124, 125,
03280 126, 127, 16, 17, -1, -1, 20, 1034, 1035, 1036,
03281 1037, -1, 356, -1, 358, -1, 240, -1, 362, 363,
03282 -1, -1, -1, -1, 1020, -1, 91, 251, -1, 253,
03283 1057, -1, 97, 377, 48, 49, -1, -1, -1, 53,
03284 54, 52, -1, 54, 55, 56, 57, 58, -1, -1,
03285 274, -1, 66, 67, -1, -1, -1, -1, -1, 70,
03286 404, 405, 52, -1, 54, 55, 56, 57, -1, -1,
03287 -1, -1, -1, 52, 418, 54, 55, 56, 57, 58,
03288 91, -1, -1, -1, 308, -1, 97, 98, 99, 313,
03289 -1, 70, -1, -1, -1, -1, -1, -1, 442, -1,
03290 70, 325, 326, 815, -1, -1, -1, -1, 452, -1,
03291 -1, 122, 91, -1, 125, 85, 86, -1, 97, 98,
03292 99, -1, -1, -1, -1, -1, -1, 471, 840, -1,
03293 -1, -1, 143, -1, 358, 847, 848, -1, -1, 851,
03294 -1, -1, -1, 122, -1, -1, 125, -1, -1, -1,
03295 120, 121, 122, 123, 124, 125, 126, 127, -1, 138,
03296 -1, 0, -1, -1, -1, 877, 878, -1, -1, 8,
03297 9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
03298 -1, 893, 2, -1, 4, -1, -1, 26, 27, -1,
03299 204, -1, -1, 207, 208, 209, 210, -1, 37, 38,
03300 -1, 40, 41, 42, 43, 44, -1, -1, -1, 921,
03301 -1, -1, -1, 227, -1, 229, 230, -1, 442, -1,
03302 -1, -1, -1, -1, -1, -1, -1, 571, 452, 573,
03303 -1, 51, -1, -1, -1, 55, -1, 581, 52, -1,
03304 54, 55, 56, 57, 58, 469, -1, -1, 87, 593,
03305 -1, 595, 596, -1, -1, -1, 70, -1, -1, -1,
03306 -1, 81, -1, -1, -1, -1, -1, -1, -1, -1,
03307 982, 110, 984, 93, 94, 95, 96, 91, 990, -1,
03308 -1, -1, 626, 97, 98, 99, -1, -1, -1, 633,
03309 -1, -1, -1, 132, 133, 519, 135, -1, -1, 138,
03310 139, -1, 141, -1, 143, -1, -1, -1, 122, 323,
03311 -1, 125, -1, -1, 328, 329, 330, 331, 332, 333,
03312 334, 335, 336, 337, 338, 339, 340, 341, 342, 343,
03313 344, 345, 346, 347, 348, 349, 350, 351, 352, 353,
03314 354, -1, 356, 687, -1, -1, 690, 571, 692, 573,
03315 -1, -1, -1, -1, 698, -1, -1, 701, 702, -1,
03316 473, -1, -1, -1, 708, 709, -1, -1, -1, -1,
03317 -1, 595, -1, -1, -1, -1, -1, -1, -1, -1,
03318 -1, -1, -1, -1, -1, -1, 206, -1, -1, 733,
03319 404, 405, 736, 737, -1, -1, -1, -1, 412, 413,
03320 414, 745, -1, -1, 418, -1, 420, 421, 422, 633,
03321 -1, -1, -1, -1, 638, -1, -1, -1, -1, -1,
03322 240, -1, -1, -1, -1, -1, -1, 441, -1, -1,
03323 -1, 251, 446, 253, -1, -1, -1, -1, -1, -1,
03324 -1, -1, -1, 457, -1, -1, 460, -1, -1, -1,
03325 -1, -1, -1, -1, 274, -1, -1, 471, -1, -1,
03326 -1, -1, -1, 687, -1, -1, 690, -1, 692, -1,
03327 -1, 815, -1, 697, -1, -1, -1, -1, -1, -1,
03328 -1, -1, -1, 497, -1, 829, -1, -1, 308, -1,
03329 -1, -1, -1, 313, -1, -1, 840, -1, 512, 843,
03330 -1, -1, -1, 847, 848, 325, 326, 851, -1, -1,
03331 -1, -1, -1, 737, -1, -1, -1, -1, -1, -1,
03332 -1, 745, -1, -1, -1, -1, -1, -1, -1, 2,
03333 -1, 4, -1, 877, 878, -1, -1, -1, 358, 652,
03334 -1, -1, -1, -1, -1, 658, -1, -1, -1, 893,
03335 2, -1, 4, -1, -1, -1, -1, -1, -1, -1,
03336 -1, -1, -1, 577, -1, -1, -1, 581, -1, -1,
03337 -1, -1, -1, 686, -1, -1, -1, 921, 51, 593,
03338 804, -1, -1, -1, -1, -1, -1, -1, 932, -1,
03339 -1, 815, -1, -1, -1, 609, -1, -1, -1, 51,
03340 -1, -1, -1, 55, -1, -1, -1, -1, 622, 623,
03341 -1, -1, -1, -1, -1, -1, 840, -1, -1, -1,
03342 -1, -1, 442, 847, 848, -1, -1, 851, -1, 81,
03343 -1, 744, 452, 746, -1, -1, -1, 2, 982, 4,
03344 984, 93, 94, 95, -1, -1, 990, -1, 992, 469,
03345 -1, -1, 666, 877, 878, -1, 769, 770, -1, -1,
03346 -1, -1, -1, -1, -1, 778, -1, -1, -1, 893,
03347 -1, -1, 896, -1, 787, -1, 1020, -1, -1, -1,
03348 694, -1, -1, -1, 698, 699, 51, 701, 702, -1,
03349 -1, -1, -1, 917, 708, 709, -1, 921, -1, 519,
03350 -1, 715, -1, -1, -1, -1, -1, -1, 932, -1,
03351 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03352 -1, -1, -1, -1, -1, -1, -1, -1, 93, -1,
03353 -1, -1, -1, 206, -1, -1, -1, -1, 752, -1,
03354 -1, -1, 756, 757, -1, 759, 760, 54, -1, -1,
03355 -1, 571, -1, 573, 206, -1, -1, -1, 982, 872,
03356 984, 874, -1, 777, -1, -1, 990, 240, 992, -1,
03357 -1, -1, -1, -1, -1, 595, -1, -1, 251, -1,
03358 253, -1, -1, -1, 897, -1, -1, -1, 240, -1,
03359 -1, 904, -1, -1, -1, -1, -1, -1, -1, 251,
03360 -1, 253, -1, 817, -1, -1, -1, 821, -1, -1,
03361 -1, -1, -1, 633, -1, 829, -1, -1, 638, -1,
03362 -1, -1, 274, -1, -1, -1, -1, -1, 941, 942,
03363 -1, -1, -1, -1, 947, 308, 850, -1, -1, -1,
03364 313, 206, -1, -1, -1, -1, -1, -1, -1, -1,
03365 -1, -1, 325, 867, 868, -1, 308, -1, -1, -1,
03366 -1, 313, -1, -1, -1, -1, -1, 687, -1, -1,
03367 690, -1, 692, 325, 326, 240, -1, 697, -1, -1,
03368 993, -1, 995, -1, -1, 358, 251, -1, 253, -1,
03369 -1, 1004, -1, -1, -1, -1, -1, 204, -1, -1,
03370 207, 208, 209, -1, -1, -1, 358, -1, -1, -1,
03371 -1, -1, -1, -1, -1, 1028, -1, 737, -1, -1,
03372 -1, -1, -1, -1, -1, 745, -1, -1, -1, -1,
03373 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03374 -1, -1, -1, 308, -1, -1, -1, -1, 313, -1,
03375 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03376 325, -1, -1, 328, -1, -1, -1, -1, -1, 442,
03377 -1, -1, -1, -1, -1, -1, -1, -1, -1, 452,
03378 -1, -1, -1, -1, 804, -1, -1, -1, -1, -1,
03379 442, -1, -1, 358, -1, 815, -1, -1, -1, -1,
03380 452, -1, -1, -1, -1, -1, 1020, -1, -1, -1,
03381 -1, -1, -1, -1, -1, -1, 323, 469, -1, -1,
03382 840, 328, -1, -1, -1, -1, -1, 847, 848, -1,
03383 -1, 851, -1, -1, -1, -1, -1, -1, -1, -1,
03384 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03385 -1, -1, -1, -1, -1, -1, -1, 877, 878, -1,
03386 -1, -1, -1, -1, -1, -1, -1, 519, -1, -1,
03387 -1, -1, -1, 893, -1, -1, 896, 442, -1, 70,
03388 71, 72, 73, 74, 75, 76, 77, 452, 79, 80,
03389 -1, -1, -1, -1, 85, 86, -1, 917, 571, -1,
03390 573, 921, -1, -1, -1, -1, 413, 414, -1, -1,
03391 -1, -1, 932, -1, -1, 422, -1, -1, -1, 571,
03392 -1, 573, 595, -1, -1, -1, -1, 118, 119, 120,
03393 121, 122, 123, 124, 125, 126, 127, -1, -1, -1,
03394 -1, -1, -1, 595, -1, -1, -1, -1, -1, -1,
03395 457, -1, -1, 460, -1, -1, -1, -1, -1, -1,
03396 633, -1, 982, -1, 984, -1, -1, -1, -1, -1,
03397 990, -1, 992, -1, -1, -1, -1, -1, -1, -1,
03398 -1, 633, -1, -1, -1, -1, 638, -1, -1, -1,
03399 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03400 -1, -1, -1, -1, -1, 512, 571, -1, 573, -1,
03401 -1, -1, -1, -1, 687, -1, -1, 690, -1, 692,
03402 -1, -1, -1, -1, -1, -1, 678, -1, -1, -1,
03403 595, -1, -1, -1, -1, 687, -1, -1, 690, -1,
03404 692, -1, -1, -1, -1, 697, -1, -1, -1, -1,
03405 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03406 -1, -1, -1, -1, 737, -1, -1, -1, 633, -1,
03407 577, -1, 745, -1, -1, -1, -1, -1, -1, -1,
03408 -1, -1, -1, -1, -1, 737, -1, -1, -1, -1,
03409 -1, -1, -1, 745, -1, -1, -1, -1, -1, -1,
03410 -1, -1, 609, -1, -1, -1, -1, -1, -1, -1,
03411 -1, -1, -1, -1, -1, 622, 623, -1, -1, -1,
03412 -1, -1, 687, -1, -1, 690, -1, 692, -1, -1,
03413 -1, -1, -1, 698, -1, -1, -1, -1, -1, -1,
03414 -1, -1, 815, -1, -1, -1, -1, -1, -1, -1,
03415 -1, -1, 804, -1, -1, -1, -1, -1, -1, 666,
03416 -1, -1, -1, 815, -1, -1, -1, 840, -1, -1,
03417 -1, -1, 737, -1, 847, 848, -1, -1, 851, -1,
03418 745, -1, -1, -1, -1, -1, -1, 694, 840, -1,
03419 -1, -1, -1, -1, -1, 847, 848, -1, -1, 851,
03420 -1, -1, -1, -1, 877, 878, -1, -1, 715, -1,
03421 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03422 893, -1, -1, -1, -1, 877, 878, -1, -1, -1,
03423 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03424 -1, 893, -1, -1, 896, -1, -1, -1, 921, -1,
03425 815, 70, 71, 72, 73, 74, 75, 76, -1, 932,
03426 79, 80, -1, -1, -1, 917, 85, 86, -1, 921,
03427 777, -1, -1, -1, -1, 840, -1, -1, -1, -1,
03428 932, -1, 847, 848, -1, -1, 851, -1, -1, -1,
03429 -1, -1, -1, -1, -1, -1, -1, -1, -1, 118,
03430 119, 120, 121, 122, 123, 124, 125, 126, 127, 982,
03431 817, 984, 877, 878, -1, -1, -1, 990, -1, 992,
03432 -1, -1, -1, -1, -1, -1, -1, -1, 893, -1,
03433 982, -1, 984, -1, -1, -1, -1, -1, 990, -1,
03434 992, -1, -1, 850, 70, 71, 72, 73, 74, 75,
03435 76, -1, 917, 79, 80, -1, 921, -1, -1, 85,
03436 86, 868, -1, -1, -1, -1, -1, 932, -1, -1,
03437 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03438 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03439 -1, -1, 118, 119, 120, 121, 122, 123, 124, 125,
03440 126, 127, -1, -1, -1, -1, -1, -1, -1, -1,
03441 -1, -1, -1, -1, -1, -1, -1, 982, -1, 984,
03442 -1, -1, -1, -1, -1, 990, -1, 992, 0, 1,
03443 -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
03444 12, -1, -1, -1, 16, -1, 18, 19, 20, 21,
03445 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03446 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03447 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
03448 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
03449 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
03450 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03451 -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
03452 92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
03453 102, 103, 104, 105, 106, 107, 108, 0, -1, -1,
03454 -1, -1, -1, -1, -1, 8, 9, 10, -1, -1,
03455 13, 14, 15, -1, 17, -1, 128, 129, 130, -1,
03456 44, -1, -1, 26, 27, 28, 29, -1, -1, 141,
03457 -1, 143, -1, -1, 37, 38, -1, 40, 41, 42,
03458 43, 44, -1, -1, -1, -1, 70, 71, 72, 73,
03459 74, 75, 76, 77, 78, 79, 80, 81, 82, -1,
03460 -1, 85, 86, -1, -1, -1, -1, 70, 71, 72,
03461 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
03462 -1, -1, 85, 86, 87, -1, 89, 90, -1, -1,
03463 -1, -1, 116, 96, 118, 119, 120, 121, 122, 123,
03464 124, 125, 126, 127, -1, -1, -1, 110, -1, -1,
03465 113, -1, 115, 116, 117, 118, 119, 120, 121, 122,
03466 123, 124, 125, 126, 127, -1, -1, -1, -1, 132,
03467 133, 134, 135, 136, 0, -1, 139, 140, 141, -1,
03468 143, -1, 8, 9, 10, -1, -1, 13, 14, 15,
03469 -1, 17, -1, -1, -1, -1, -1, 44, -1, 25,
03470 -1, 27, 28, 29, -1, -1, -1, -1, -1, -1,
03471 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03472 -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
03473 77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
03474 -1, -1, -1, -1, 70, 71, 72, 73, 74, 75,
03475 76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
03476 86, 87, -1, 89, 90, -1, -1, -1, -1, 116,
03477 96, 118, 119, 120, 121, 122, 123, 124, 125, 126,
03478 127, -1, -1, -1, 110, -1, -1, 113, -1, 115,
03479 116, 117, 118, 119, 120, 121, 122, 123, 124, 125,
03480 126, 127, -1, -1, -1, -1, -1, 133, 134, 135,
03481 136, 0, -1, 139, 140, 141, -1, 143, -1, 8,
03482 9, 10, -1, -1, 13, 14, 15, -1, 17, -1,
03483 -1, -1, -1, -1, -1, -1, 25, -1, 27, 28,
03484 29, -1, -1, -1, -1, -1, -1, -1, 37, 38,
03485 -1, 40, 41, 42, 43, 44, -1, -1, -1, -1,
03486 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
03487 80, 81, 82, -1, -1, 85, 86, -1, -1, -1,
03488 -1, 70, 71, 72, 73, 74, 75, 76, 77, 78,
03489 79, 80, 81, 82, -1, -1, 85, 86, 87, -1,
03490 89, 90, -1, -1, -1, -1, 116, 96, 118, 119,
03491 120, 121, 122, 123, 124, 125, 126, 127, -1, -1,
03492 -1, 110, -1, -1, 113, -1, 115, 116, 117, 118,
03493 119, 120, 121, 122, 123, 124, 125, 126, 127, -1,
03494 -1, -1, -1, -1, 133, 134, 135, 136, 0, -1,
03495 139, 140, 141, -1, 143, -1, 8, 9, 10, -1,
03496 -1, 13, 14, 15, -1, 17, -1, -1, -1, -1,
03497 -1, 44, -1, -1, 26, 27, 28, 29, -1, -1,
03498 -1, -1, -1, -1, -1, 37, 38, -1, 40, 41,
03499 42, 43, 44, -1, -1, -1, -1, 70, 71, 72,
03500 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
03501 -1, -1, 85, 86, -1, -1, -1, -1, 70, 71,
03502 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
03503 82, -1, -1, 85, 86, 87, -1, -1, 90, -1,
03504 -1, -1, -1, 116, 96, 118, 119, 120, 121, 122,
03505 123, 124, 125, 126, 127, -1, -1, -1, 110, -1,
03506 -1, 113, -1, 136, 116, 117, 118, 119, 120, 121,
03507 122, 123, 124, 125, 126, 127, -1, -1, -1, -1,
03508 132, 133, 134, 135, 136, 0, -1, 139, 140, 141,
03509 -1, 143, -1, 8, 9, 10, -1, -1, 13, 14,
03510 15, -1, 17, -1, -1, -1, -1, -1, -1, -1,
03511 -1, 26, 27, 28, 29, -1, -1, -1, -1, -1,
03512 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44,
03513 -1, -1, -1, -1, 70, 71, 72, 73, 74, 75,
03514 76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
03515 86, -1, -1, -1, -1, 70, 71, 72, 73, 74,
03516 75, 76, 77, 78, 79, 80, 81, 82, -1, -1,
03517 85, 86, 87, -1, -1, 90, -1, -1, -1, -1,
03518 -1, 96, 118, 119, 120, 121, 122, 123, 124, 125,
03519 126, 127, -1, -1, -1, 110, -1, -1, 113, -1,
03520 -1, 116, 117, 118, 119, 120, 121, 122, 123, 124,
03521 125, 126, 127, -1, -1, -1, -1, 132, 133, 134,
03522 135, 136, 0, -1, 139, 140, 141, -1, 143, -1,
03523 8, 9, 10, -1, -1, 13, 14, 15, -1, 17,
03524 -1, -1, -1, -1, -1, -1, -1, -1, -1, 27,
03525 28, 29, -1, -1, -1, -1, -1, -1, -1, 37,
03526 38, -1, 40, 41, 42, 43, 44, -1, -1, -1,
03527 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03528 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03529 -1, -1, 70, 71, 72, 73, 74, 75, 76, 77,
03530 78, 79, 80, 81, 82, -1, -1, 85, 86, 87,
03531 -1, 89, 90, -1, -1, -1, -1, -1, 96, -1,
03532 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03533 -1, -1, 110, -1, -1, 113, -1, 115, 116, 117,
03534 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
03535 -1, -1, -1, -1, -1, 133, 134, 135, 136, 0,
03536 -1, 139, 140, 141, -1, 143, -1, 8, 9, 10,
03537 -1, -1, 13, 14, 15, -1, 17, -1, -1, -1,
03538 -1, -1, -1, -1, -1, 26, 27, 28, -1, -1,
03539 -1, -1, -1, -1, -1, -1, 37, 38, -1, 40,
03540 41, 42, 43, 44, -1, -1, -1, -1, -1, -1,
03541 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03542 -1, -1, -1, -1, -1, -1, -1, -1, -1, 70,
03543 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
03544 81, 82, -1, -1, 85, 86, 87, -1, -1, 90,
03545 -1, -1, -1, -1, -1, 96, -1, -1, -1, -1,
03546 -1, -1, -1, -1, -1, -1, -1, -1, -1, 110,
03547 -1, -1, -1, -1, -1, 116, -1, 118, 119, 120,
03548 121, 122, 123, 124, 125, 126, 127, -1, -1, -1,
03549 -1, 132, 133, 134, 135, 136, 0, 138, 139, 140,
03550 141, -1, 143, -1, 8, 9, 10, -1, -1, 13,
03551 14, 15, -1, 17, -1, -1, -1, -1, -1, -1,
03552 -1, -1, -1, 27, 28, 29, -1, -1, -1, -1,
03553 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43,
03554 44, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03555 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03556 -1, -1, -1, -1, -1, -1, 70, 71, 72, 73,
03557 74, 75, 76, 77, 78, 79, 80, 81, 82, -1,
03558 -1, 85, 86, 87, -1, -1, 90, -1, -1, -1,
03559 -1, -1, 96, -1, -1, -1, -1, -1, -1, -1,
03560 -1, -1, -1, -1, -1, -1, 110, -1, -1, 113,
03561 -1, -1, 116, 117, 118, 119, 120, 121, 122, 123,
03562 124, 125, 126, 127, -1, -1, -1, -1, -1, 133,
03563 134, 135, 136, 0, -1, 139, 140, 141, -1, 143,
03564 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1,
03565 17, -1, -1, -1, -1, -1, -1, -1, -1, 26,
03566 27, 28, -1, -1, -1, -1, -1, -1, -1, -1,
03567 37, 38, -1, 40, 41, 42, 43, 44, -1, -1,
03568 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03569 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03570 -1, -1, -1, 70, 71, 72, 73, 74, 75, 76,
03571 77, 78, 79, 80, 81, 82, -1, -1, 85, 86,
03572 87, -1, -1, 90, -1, -1, -1, -1, -1, 96,
03573 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03574 -1, -1, -1, 110, -1, -1, -1, -1, -1, 116,
03575 -1, 118, 119, 120, 121, 122, 123, 124, 125, 126,
03576 127, -1, -1, -1, -1, 132, 133, 134, 135, 136,
03577 0, 138, 139, 140, 141, -1, 143, -1, 8, 9,
03578 10, -1, -1, 13, 14, 15, -1, 17, -1, -1,
03579 -1, -1, -1, -1, -1, -1, -1, 27, 28, -1,
03580 -1, -1, -1, -1, -1, -1, -1, 37, 38, -1,
03581 40, 41, 42, 43, 44, -1, -1, -1, -1, -1,
03582 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03583 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03584 70, 71, 72, 73, 74, 75, 76, 77, 78, 79,
03585 80, 81, 82, -1, -1, 85, 86, 87, -1, -1,
03586 90, -1, -1, -1, -1, -1, 96, -1, -1, -1,
03587 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03588 110, -1, -1, -1, -1, -1, 116, -1, 118, 119,
03589 120, 121, 122, 123, 124, 125, 126, 127, -1, -1,
03590 -1, -1, -1, 133, 134, 135, 136, 0, 138, 139,
03591 140, 141, -1, 143, -1, 8, 9, 10, -1, -1,
03592 -1, 14, 15, -1, 17, -1, -1, -1, -1, -1,
03593 -1, -1, -1, 26, -1, -1, -1, -1, -1, -1,
03594 -1, -1, -1, -1, 37, 38, -1, 40, 41, 42,
03595 43, 44, -1, -1, -1, -1, -1, -1, -1, -1,
03596 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03597 -1, -1, -1, -1, -1, -1, -1, 70, 71, 72,
03598 73, 74, 75, 76, 77, 78, 79, 80, 81, 82,
03599 -1, -1, 85, 86, 87, -1, 89, -1, -1, -1,
03600 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03601 -1, -1, -1, -1, -1, -1, -1, 110, -1, -1,
03602 -1, -1, 115, 116, -1, 118, 119, 120, 121, 122,
03603 123, 124, 125, 126, 127, -1, -1, -1, -1, 132,
03604 133, 134, 135, 136, 0, -1, 139, -1, 141, -1,
03605 143, -1, 8, 9, 10, -1, -1, -1, 14, 15,
03606 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1,
03607 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03608 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1,
03609 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03610 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03611 -1, -1, -1, -1, 70, 71, 72, 73, 74, 75,
03612 76, 77, 78, 79, 80, 81, 82, -1, -1, 85,
03613 86, 87, -1, 89, -1, -1, -1, -1, -1, -1,
03614 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03615 -1, -1, -1, -1, 110, -1, -1, -1, -1, 115,
03616 116, -1, 118, 119, 120, 121, 122, 123, 124, 125,
03617 126, 127, -1, -1, -1, -1, -1, 133, 134, 135,
03618 136, -1, -1, 139, -1, 141, 1, 143, 3, 4,
03619 5, 6, 7, 8, 9, 10, 11, 12, -1, -1,
03620 15, 16, -1, 18, 19, 20, 21, 22, 23, 24,
03621 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
03622 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
03623 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
03624 55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
03625 65, 66, -1, 68, 69, -1, -1, -1, -1, -1,
03626 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03627 -1, -1, -1, 88, -1, -1, 91, 92, -1, 94,
03628 95, -1, 97, -1, -1, 100, 101, 102, 103, 104,
03629 105, 106, 107, 108, -1, -1, -1, -1, -1, -1,
03630 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03631 -1, -1, -1, 128, 129, 130, -1, -1, -1, -1,
03632 -1, -1, -1, -1, -1, -1, 141, 1, 143, 3,
03633 4, 5, 6, 7, -1, -1, 10, 11, 12, -1,
03634 14, 15, 16, -1, 18, 19, 20, 21, 22, 23,
03635 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
03636 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
03637 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53,
03638 54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
03639 64, 65, 66, -1, 68, 69, -1, -1, -1, -1,
03640 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03641 -1, -1, -1, -1, 88, -1, -1, 91, 92, -1,
03642 94, 95, -1, 97, -1, -1, 100, 101, 102, 103,
03643 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
03644 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03645 -1, -1, -1, -1, 128, 129, 130, -1, -1, -1,
03646 -1, -1, -1, -1, -1, -1, -1, 141, 1, 143,
03647 3, 4, 5, 6, 7, -1, -1, 10, 11, 12,
03648 -1, -1, 15, 16, 17, 18, 19, 20, 21, 22,
03649 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
03650 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
03651 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52,
03652 53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
03653 -1, 64, 65, 66, -1, 68, 69, -1, -1, -1,
03654 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03655 -1, -1, -1, -1, -1, 88, -1, -1, 91, 92,
03656 -1, 94, 95, -1, 97, -1, -1, 100, 101, 102,
03657 103, 104, 105, 106, 107, 108, -1, -1, -1, -1,
03658 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03659 -1, -1, -1, -1, -1, 128, 129, 130, -1, -1,
03660 -1, -1, -1, -1, -1, -1, -1, -1, 141, 1,
03661 143, 3, 4, 5, 6, 7, -1, -1, 10, 11,
03662 12, -1, -1, 15, 16, -1, 18, 19, 20, 21,
03663 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
03664 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03665 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
03666 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
03667 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
03668 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03669 -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
03670 92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
03671 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
03672 -1, -1, -1, -1, 1, -1, 3, 4, 5, 6,
03673 7, -1, 9, 10, 11, 12, 128, 129, 130, 16,
03674 -1, 18, 19, 20, 21, 22, 23, 24, -1, 141,
03675 -1, 143, -1, 30, 31, 32, 33, 34, 35, 36,
03676 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
03677 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
03678 57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
03679 -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
03680 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03681 -1, 88, -1, -1, 91, 92, -1, 94, 95, -1,
03682 97, -1, -1, 100, 101, 102, 103, 104, 105, 106,
03683 107, 108, -1, -1, -1, -1, -1, -1, -1, 1,
03684 -1, 3, 4, 5, 6, 7, -1, -1, -1, 11,
03685 12, 128, 129, 130, 16, -1, 18, 19, 20, 21,
03686 22, 23, 24, -1, 141, -1, 143, -1, 30, 31,
03687 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
03688 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51,
03689 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
03690 62, -1, 64, 65, 66, -1, 68, 69, -1, -1,
03691 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03692 -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
03693 92, -1, 94, 95, -1, 97, -1, -1, 100, 101,
03694 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
03695 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03696 -1, -1, -1, -1, -1, -1, 128, 129, 130, -1,
03697 -1, -1, -1, -1, -1, -1, -1, 139, -1, 141,
03698 1, 143, 3, 4, 5, 6, 7, -1, -1, -1,
03699 11, 12, -1, -1, -1, 16, -1, 18, 19, 20,
03700 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03701 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03702 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
03703 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03704 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
03705 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03706 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
03707 91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
03708 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
03709 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03710 -1, -1, -1, -1, -1, -1, -1, 128, 129, 130,
03711 -1, -1, -1, -1, -1, -1, -1, -1, 139, -1,
03712 141, 1, 143, 3, 4, 5, 6, 7, -1, -1,
03713 -1, 11, 12, -1, -1, -1, 16, -1, 18, 19,
03714 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
03715 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
03716 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49,
03717 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
03718 60, 61, 62, -1, 64, 65, 66, -1, 68, 69,
03719 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03720 -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
03721 -1, 91, 92, -1, 94, 95, -1, 97, -1, -1,
03722 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
03723 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03724 -1, -1, -1, -1, -1, -1, -1, -1, 128, 129,
03725 130, -1, -1, 133, 1, -1, 3, 4, 5, 6,
03726 7, 141, -1, 143, 11, 12, -1, -1, -1, 16,
03727 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1,
03728 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03729 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46,
03730 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
03731 57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
03732 -1, 68, 69, -1, -1, -1, -1, -1, -1, -1,
03733 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03734 -1, 88, -1, -1, 91, 92, -1, 94, 95, -1,
03735 97, -1, -1, 100, 101, 102, 103, 104, 105, 106,
03736 107, 108, -1, -1, -1, -1, -1, -1, -1, -1,
03737 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03738 -1, 128, 129, 130, -1, -1, 133, -1, -1, -1,
03739 -1, -1, -1, -1, 141, 1, 143, 3, 4, 5,
03740 6, 7, -1, -1, 10, 11, 12, -1, -1, -1,
03741 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03742 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03743 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03744 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
03745 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
03746 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
03747 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03748 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
03749 -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
03750 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
03751 1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
03752 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
03753 21, 22, 23, 24, -1, 141, -1, 143, -1, 30,
03754 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03755 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
03756 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03757 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
03758 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03759 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
03760 91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
03761 101, 102, 103, 104, 105, 106, 107, 108, -1, 110,
03762 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03763 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
03764 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03765 141, -1, 143, -1, 30, 31, 32, 33, 34, 35,
03766 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03767 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03768 56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
03769 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
03770 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03771 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
03772 -1, 97, 98, 99, 100, 101, 102, 103, 104, 105,
03773 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
03774 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03775 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
03776 21, 22, 23, 24, -1, -1, -1, 143, -1, 30,
03777 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03778 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03779 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03780 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
03781 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03782 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
03783 91, 92, -1, 94, 95, -1, -1, -1, -1, 100,
03784 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
03785 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03786 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
03787 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03788 141, -1, 143, -1, 30, 31, 32, 33, 34, 35,
03789 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03790 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03791 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
03792 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
03793 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03794 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
03795 -1, -1, -1, -1, 100, 101, 102, 103, 104, 105,
03796 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
03797 -1, -1, 3, 4, 5, 6, 7, -1, -1, -1,
03798 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
03799 21, 22, 23, 24, -1, -1, -1, 143, -1, 30,
03800 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03801 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
03802 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
03803 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
03804 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03805 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
03806 91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
03807 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
03808 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03809 6, 7, -1, -1, -1, 11, 12, 128, 129, 130,
03810 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03811 141, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03812 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03813 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
03814 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
03815 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
03816 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03817 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
03818 -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
03819 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
03820 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03821 -1, -1, 128, 129, 130, -1, -1, -1, -1, -1,
03822 -1, -1, -1, -1, -1, 141, 3, 4, 5, 6,
03823 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
03824 17, 18, 19, 20, 21, 22, 23, 24, 25, 26,
03825 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03826 37, 38, 39, -1, -1, -1, -1, -1, 45, 46,
03827 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
03828 57, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03829 -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
03830 -1, -1, 79, 80, -1, -1, 83, 84, 85, 86,
03831 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03832 97, 98, -1, -1, -1, -1, -1, -1, -1, -1,
03833 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03834 -1, 118, 119, 120, 121, 122, 123, 124, 125, 126,
03835 127, -1, 129, 130, -1, -1, -1, -1, -1, -1,
03836 137, 138, 3, 4, 5, 6, 7, 8, 9, 10,
03837 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
03838 21, 22, 23, 24, 25, 26, -1, -1, -1, 30,
03839 31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
03840 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
03841 51, 52, 53, 54, 55, 56, 57, -1, -1, -1,
03842 -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
03843 71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
03844 -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
03845 -1, -1, -1, -1, -1, -1, 97, 98, -1, -1,
03846 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03847 -1, -1, -1, -1, -1, -1, -1, 118, 119, 120,
03848 121, 122, 123, 124, 125, 126, 127, -1, 129, 130,
03849 -1, -1, -1, -1, -1, -1, 137, 3, 4, 5,
03850 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
03851 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
03852 26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03853 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
03854 46, 47, 48, 49, 50, 51, 52, 53, 54, -1,
03855 56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03856 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03857 76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
03858 86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03859 -1, 97, 98, -1, -1, 101, -1, -1, -1, -1,
03860 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03861 -1, -1, 118, 119, 120, 121, 122, 123, 124, 125,
03862 126, 127, -1, 129, 130, -1, -1, -1, -1, -1,
03863 -1, 137, 3, 4, 5, 6, 7, 8, 9, 10,
03864 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
03865 21, 22, 23, 24, 25, 26, -1, -1, -1, 30,
03866 31, 32, 33, 34, 35, 36, 37, 38, 39, -1,
03867 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50,
03868 51, 52, 53, -1, -1, 56, -1, -1, -1, -1,
03869 -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
03870 71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
03871 -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
03872 -1, -1, -1, -1, -1, -1, 97, 98, -1, -1,
03873 101, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03874 -1, -1, -1, -1, -1, -1, -1, 118, 119, 120,
03875 121, 122, 123, 124, 125, 126, 127, -1, 129, 130,
03876 -1, -1, -1, -1, -1, -1, 137, 3, 4, 5,
03877 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
03878 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
03879 26, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03880 36, 37, 38, 39, -1, -1, -1, -1, -1, 45,
03881 46, 47, 48, 49, 50, 51, 52, 53, -1, -1,
03882 56, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03883 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
03884 76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
03885 86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03886 -1, 97, 98, -1, -1, -1, -1, -1, -1, -1,
03887 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03888 -1, -1, 118, 119, 120, 121, 122, 123, 124, 125,
03889 126, 127, -1, 129, 130, 3, 4, 5, -1, 7,
03890 -1, 137, -1, 11, 12, -1, -1, -1, 16, -1,
03891 18, 19, 20, 21, 22, 23, 24, -1, -1, -1,
03892 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1,
03893 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1,
03894 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57,
03895 -1, 59, 60, 61, 62, -1, 64, 65, 66, -1,
03896 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03897 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03898 88, -1, -1, 91, 92, -1, 94, 95, -1, -1,
03899 -1, -1, 100, 101, 102, 103, 104, 105, 106, 107,
03900 108, -1, -1, -1, -1, -1, 3, 4, 5, -1,
03901 7, -1, -1, -1, 11, 12, -1, -1, -1, 16,
03902 128, 18, 19, 20, 21, 22, 23, 24, 136, -1,
03903 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36,
03904 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46,
03905 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56,
03906 57, -1, 59, 60, 61, 62, -1, 64, 65, 66,
03907 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03908 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03909 -1, 88, -1, -1, 91, 92, -1, 94, 95, -1,
03910 -1, -1, -1, 100, 101, 102, 103, 104, 105, 106,
03911 107, 108, -1, -1, -1, -1, -1, 3, 4, 5,
03912 6, 7, -1, -1, -1, 11, 12, -1, -1, -1,
03913 16, 128, 18, 19, 20, 21, 22, 23, 24, 136,
03914 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03915 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03916 46, 47, 48, 49, 50, 51, 52, 53, 54, 55,
03917 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
03918 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
03919 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03920 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
03921 -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
03922 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
03923 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03924 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
03925 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03926 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03927 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03928 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03929 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
03930 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03931 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
03932 91, 92, -1, 94, 95, -1, 97, 98, 99, 100,
03933 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
03934 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03935 6, 7, -1, -1, -1, 11, 12, 128, 129, 130,
03936 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03937 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03938 36, -1, -1, 39, -1, -1, -1, -1, -1, 45,
03939 46, -1, 48, 49, 50, 51, 52, 53, 54, 55,
03940 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
03941 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
03942 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03943 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
03944 -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
03945 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
03946 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03947 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
03948 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03949 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03950 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03951 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03952 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
03953 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03954 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
03955 91, 92, -1, 94, 95, -1, 97, 98, 99, 100,
03956 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
03957 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03958 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
03959 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03960 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03961 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03962 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03963 56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
03964 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
03965 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03966 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
03967 -1, 97, 98, -1, 100, 101, 102, 103, 104, 105,
03968 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
03969 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03970 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
03971 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03972 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03973 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03974 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03975 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
03976 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03977 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
03978 91, 92, -1, 94, 95, -1, -1, 98, 99, 100,
03979 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
03980 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
03981 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
03982 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
03983 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
03984 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
03985 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
03986 56, 57, 58, 59, 60, 61, 62, -1, 64, 65,
03987 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
03988 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
03989 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
03990 -1, 97, 98, -1, 100, 101, 102, 103, 104, 105,
03991 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
03992 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
03993 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
03994 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
03995 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
03996 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
03997 51, 52, 53, 54, 55, 56, 57, 58, 59, 60,
03998 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
03999 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04000 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
04001 91, 92, -1, 94, 95, -1, -1, 98, -1, 100,
04002 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
04003 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
04004 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
04005 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
04006 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
04007 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
04008 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
04009 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
04010 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
04011 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04012 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
04013 -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
04014 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
04015 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
04016 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
04017 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
04018 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
04019 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
04020 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
04021 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
04022 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04023 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
04024 91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
04025 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
04026 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
04027 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
04028 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
04029 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
04030 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
04031 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
04032 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
04033 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
04034 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04035 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
04036 -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
04037 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
04038 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
04039 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
04040 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
04041 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
04042 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
04043 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
04044 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
04045 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04046 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
04047 91, 92, -1, 94, 95, -1, 97, -1, -1, 100,
04048 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
04049 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
04050 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
04051 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
04052 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
04053 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
04054 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
04055 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
04056 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
04057 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04058 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
04059 -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
04060 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
04061 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
04062 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
04063 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
04064 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
04065 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
04066 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
04067 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
04068 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04069 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
04070 91, 92, -1, 94, 95, -1, -1, -1, -1, 100,
04071 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
04072 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
04073 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
04074 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
04075 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
04076 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
04077 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
04078 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
04079 66, -1, 68, 69, -1, -1, -1, -1, -1, -1,
04080 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04081 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
04082 -1, -1, -1, -1, 100, 101, 102, 103, 104, 105,
04083 106, 107, 108, -1, -1, -1, -1, -1, -1, -1,
04084 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
04085 11, 12, 128, 129, 130, 16, -1, 18, 19, 20,
04086 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
04087 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
04088 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
04089 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
04090 61, 62, -1, 64, 65, 66, -1, 68, 69, -1,
04091 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04092 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
04093 91, 92, -1, 94, 95, -1, -1, -1, -1, 100,
04094 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
04095 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5,
04096 -1, 7, -1, -1, -1, 11, 12, 128, 129, 130,
04097 16, -1, 18, 19, 20, 21, 22, 23, 24, -1,
04098 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35,
04099 36, -1, -1, 39, -1, -1, -1, -1, -1, -1,
04100 46, -1, -1, 49, 50, 51, 52, 53, 54, 55,
04101 56, 57, -1, 59, 60, 61, 62, -1, 64, 65,
04102 66, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04103 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04104 -1, -1, 88, -1, -1, 91, 92, -1, 94, 95,
04105 -1, 97, -1, -1, 100, 101, 102, 103, 104, 105,
04106 106, 107, 108, -1, -1, -1, -1, -1, 3, 4,
04107 5, -1, 7, -1, -1, -1, 11, 12, -1, -1,
04108 -1, 16, 128, 18, 19, 20, 21, 22, 23, 24,
04109 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34,
04110 35, 36, -1, -1, 39, -1, -1, -1, -1, -1,
04111 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54,
04112 55, 56, 57, -1, 59, 60, 61, 62, -1, 64,
04113 65, 66, -1, -1, -1, -1, -1, -1, -1, -1,
04114 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04115 -1, -1, -1, 88, -1, -1, 91, 92, -1, 94,
04116 95, -1, 97, -1, -1, 100, 101, 102, 103, 104,
04117 105, 106, 107, 108, -1, -1, -1, -1, -1, 3,
04118 4, 5, -1, 7, -1, -1, -1, 11, 12, -1,
04119 -1, -1, 16, 128, 18, 19, 20, 21, 22, 23,
04120 24, -1, -1, -1, -1, -1, 30, 31, 32, 33,
04121 34, 35, 36, -1, -1, 39, -1, -1, -1, -1,
04122 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53,
04123 54, 55, 56, 57, -1, 59, 60, 61, 62, -1,
04124 64, 65, 66, -1, -1, -1, -1, -1, -1, -1,
04125 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04126 -1, 85, -1, -1, 88, -1, -1, 91, 92, -1,
04127 94, 95, -1, -1, -1, -1, 100, 101, 102, 103,
04128 104, 105, 106, 107, 108, -1, -1, -1, -1, -1,
04129 3, 4, 5, -1, 7, -1, -1, -1, 11, 12,
04130 -1, -1, -1, 16, 128, 18, 19, 20, 21, 22,
04131 23, 24, -1, -1, -1, -1, -1, 30, 31, 32,
04132 33, 34, 35, 36, -1, -1, 39, -1, -1, -1,
04133 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52,
04134 53, 54, 55, 56, 57, -1, 59, 60, 61, 62,
04135 -1, 64, 65, 66, -1, -1, -1, -1, -1, -1,
04136 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04137 -1, -1, -1, -1, -1, 88, -1, -1, 91, 92,
04138 -1, 94, 95, -1, -1, -1, -1, 100, 101, 102,
04139 103, 104, 105, 106, 107, 108, -1, -1, -1, -1,
04140 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11,
04141 12, -1, -1, -1, 16, 128, 18, 19, 20, 21,
04142 22, 23, 24, -1, -1, -1, -1, -1, 30, 31,
04143 32, 33, 34, 35, 36, -1, -1, 39, -1, -1,
04144 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51,
04145 52, 53, 54, 55, 56, 57, -1, 59, 60, 61,
04146 62, -1, 64, 65, 66, -1, -1, -1, -1, -1,
04147 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04148 -1, -1, -1, -1, -1, -1, 88, -1, -1, 91,
04149 92, -1, 94, 95, -1, -1, -1, -1, 100, 101,
04150 102, 103, 104, 105, 106, 107, 108, -1, -1, -1,
04151 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1,
04152 11, 12, -1, -1, -1, 16, 128, 18, 19, 20,
04153 21, 22, 23, 24, -1, -1, -1, -1, -1, 30,
04154 31, 32, 33, 34, 35, 36, -1, -1, 39, -1,
04155 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50,
04156 51, 52, 53, 54, 55, 56, 57, -1, 59, 60,
04157 61, 62, -1, 64, 65, 66, -1, -1, -1, -1,
04158 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04159 -1, -1, -1, -1, -1, -1, -1, 88, -1, -1,
04160 91, 92, -1, 94, 95, -1, -1, -1, -1, 100,
04161 101, 102, 103, 104, 105, 106, 107, 108, -1, -1,
04162 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1,
04163 -1, 11, 12, -1, -1, -1, 16, 128, 18, 19,
04164 20, 21, 22, 23, 24, -1, -1, -1, -1, -1,
04165 30, 31, 32, 33, 34, 35, 36, -1, -1, 39,
04166 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49,
04167 50, 51, 52, 53, 54, 55, 56, 57, -1, 59,
04168 60, 61, 62, -1, 64, 65, 66, -1, -1, -1,
04169 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04170 -1, -1, -1, -1, -1, -1, -1, -1, 88, -1,
04171 -1, 91, 92, -1, 94, 95, -1, -1, -1, -1,
04172 100, 101, 102, 103, 104, 105, 106, 107, 108, -1,
04173 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1,
04174 -1, -1, -1, -1, -1, -1, -1, -1, 128, 68,
04175 69, 70, 71, 72, 73, 74, 75, 76, -1, -1,
04176 79, 80, -1, -1, 83, 84, 85, 86, -1, -1,
04177 -1, -1, -1, -1, -1, -1, -1, -1, 97, 98,
04178 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04179 -1, -1, -1, -1, -1, -1, -1, -1, -1, 118,
04180 119, 120, 121, 122, 123, 124, 125, 126, 127, -1,
04181 129, 130, 52, 53, -1, -1, 56, -1, 137, -1,
04182 -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
04183 70, 71, 72, 73, 74, 75, 76, -1, -1, 79,
04184 80, -1, -1, 83, 84, 85, 86, -1, -1, -1,
04185 -1, -1, -1, -1, -1, -1, -1, 97, 98, -1,
04186 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04187 -1, -1, -1, -1, -1, -1, -1, -1, 118, 119,
04188 120, 121, 122, 123, 124, 125, 126, 127, -1, 129,
04189 130, 52, 53, -1, -1, 56, -1, 137, -1, -1,
04190 -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
04191 71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
04192 -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
04193 -1, -1, -1, -1, -1, -1, 97, 98, -1, -1,
04194 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04195 -1, -1, -1, -1, -1, -1, -1, 118, 119, 120,
04196 121, 122, 123, 124, 125, 126, 127, -1, 129, 130,
04197 52, 53, -1, -1, 56, -1, 137, -1, -1, -1,
04198 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71,
04199 72, 73, 74, 75, 76, -1, -1, 79, 80, -1,
04200 -1, 83, 84, 85, 86, -1, -1, -1, -1, -1,
04201 -1, -1, -1, -1, -1, 97, 98, -1, -1, -1,
04202 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04203 -1, -1, -1, -1, -1, -1, 118, 119, 120, 121,
04204 122, 123, 124, 125, 126, 127, -1, 129, 130, 52,
04205 53, -1, -1, 56, -1, 137, -1, -1, -1, -1,
04206 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72,
04207 73, 74, 75, 76, -1, -1, 79, 80, -1, -1,
04208 83, 84, 85, 86, -1, -1, -1, -1, -1, -1,
04209 -1, -1, -1, -1, 97, 98, -1, -1, -1, -1,
04210 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04211 -1, -1, -1, -1, -1, 118, 119, 120, 121, 122,
04212 123, 124, 125, 126, 127, -1, 129, 130, 52, 53,
04213 -1, -1, 56, -1, 137, -1, -1, -1, -1, -1,
04214 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73,
04215 74, 75, 76, -1, -1, 79, 80, -1, -1, 83,
04216 84, 85, 86, -1, -1, -1, -1, -1, -1, -1,
04217 -1, -1, -1, 97, 98, -1, -1, -1, -1, -1,
04218 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04219 -1, -1, -1, -1, 118, 119, 120, 121, 122, 123,
04220 124, 125, 126, 127, -1, 129, 130, 52, 53, -1,
04221 -1, 56, -1, 137, -1, -1, -1, -1, -1, -1,
04222 -1, -1, -1, 68, 69, 70, 71, 72, 73, 74,
04223 75, 76, -1, -1, 79, 80, -1, -1, 83, 84,
04224 85, 86, -1, -1, -1, -1, -1, -1, -1, -1,
04225 -1, -1, 97, 98, -1, -1, -1, -1, -1, -1,
04226 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04227 -1, -1, -1, 118, 119, 120, 121, 122, 123, 124,
04228 125, 126, 127, -1, 129, 130, 52, 53, -1, -1,
04229 56, -1, 137, -1, -1, -1, -1, -1, -1, -1,
04230 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75,
04231 76, -1, -1, 79, 80, -1, -1, 83, 84, 85,
04232 86, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04233 -1, 97, 98, -1, -1, -1, -1, -1, -1, -1,
04234 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04235 -1, -1, 118, 119, 120, 121, 122, 123, 124, 125,
04236 126, 127, -1, 129, 130, 52, 53, -1, -1, 56,
04237 -1, 137, -1, -1, -1, -1, -1, -1, -1, -1,
04238 -1, 68, 69, 70, 71, 72, 73, 74, 75, 76,
04239 -1, -1, 79, 80, -1, -1, 83, 84, 85, 86,
04240 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04241 97, 98, -1, -1, -1, -1, -1, -1, -1, -1,
04242 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04243 -1, 118, 119, 120, 121, 122, 123, 124, 125, 126,
04244 127, -1, 129, 130, 52, 53, -1, -1, 56, -1,
04245 137, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04246 68, 69, 70, 71, 72, 73, 74, 75, 76, -1,
04247 -1, 79, 80, -1, -1, 83, 84, 85, 86, -1,
04248 -1, -1, -1, -1, -1, -1, -1, -1, -1, 97,
04249 98, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04250 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04251 118, 119, 120, 121, 122, 123, 124, 125, 126, 127,
04252 -1, 129, 130, 52, 53, -1, -1, 56, -1, 137,
04253 -1, -1, -1, -1, -1, -1, -1, -1, -1, 68,
04254 69, 70, 71, 72, 73, 74, 75, 76, -1, -1,
04255 79, 80, -1, -1, 83, 84, 85, 86, -1, -1,
04256 -1, -1, -1, -1, -1, -1, -1, -1, 97, 98,
04257 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04258 -1, -1, -1, -1, -1, -1, -1, -1, -1, 118,
04259 119, 120, 121, 122, 123, 124, 125, 126, 127, -1,
04260 129, 130, 52, 53, -1, -1, 56, -1, 137, -1,
04261 -1, -1, -1, -1, -1, -1, -1, -1, 68, 69,
04262 70, 71, 72, 73, 74, 75, 76, -1, -1, 79,
04263 80, -1, -1, 83, 84, 85, 86, -1, -1, -1,
04264 -1, -1, -1, -1, -1, -1, -1, 97, 98, -1,
04265 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04266 -1, -1, -1, -1, -1, -1, -1, -1, 118, 119,
04267 120, 121, 122, 123, 124, 125, 126, 127, -1, 129,
04268 130, 52, 53, -1, -1, 56, -1, 137, -1, -1,
04269 -1, -1, -1, -1, -1, -1, -1, 68, 69, 70,
04270 71, 72, 73, 74, 75, 76, -1, -1, 79, 80,
04271 -1, -1, 83, 84, 85, 86, -1, -1, -1, -1,
04272 -1, -1, -1, -1, -1, -1, 97, 98, 70, 71,
04273 72, 73, 74, 75, 76, 77, 78, 79, 80, 81,
04274 82, -1, -1, 85, 86, -1, -1, 118, 119, 120,
04275 121, 122, 123, 124, 125, 126, 127, -1, 129, 130,
04276 -1, -1, -1, -1, -1, -1, 137, -1, -1, -1,
04277 -1, -1, -1, -1, 116, -1, 118, 119, 120, 121,
04278 122, 123, 124, 125, 126, 127, -1, -1, -1, -1,
04279 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
04280 -1, 143
04281 };
04282
04283
04284
04285 static const yytype_uint16 yystos[] =
04286 {
04287 0, 145, 146, 0, 1, 3, 4, 5, 6, 7,
04288 11, 12, 16, 18, 19, 20, 21, 22, 23, 24,
04289 30, 31, 32, 33, 34, 35, 36, 39, 45, 46,
04290 47, 48, 49, 50, 51, 52, 53, 54, 55, 56,
04291 57, 59, 60, 61, 62, 64, 65, 66, 68, 69,
04292 88, 91, 92, 94, 95, 97, 100, 101, 102, 103,
04293 104, 105, 106, 107, 108, 128, 129, 130, 147, 148,
04294 149, 156, 158, 159, 161, 162, 165, 166, 167, 169,
04295 170, 171, 173, 174, 184, 199, 218, 219, 220, 221,
04296 222, 223, 224, 225, 226, 227, 228, 254, 255, 269,
04297 270, 271, 272, 273, 274, 275, 278, 280, 281, 293,
04298 295, 296, 297, 298, 299, 300, 301, 302, 335, 346,
04299 149, 3, 4, 5, 6, 7, 8, 9, 10, 11,
04300 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
04301 22, 23, 24, 25, 26, 30, 31, 32, 33, 34,
04302 35, 36, 37, 38, 39, 45, 46, 47, 48, 49,
04303 50, 51, 52, 53, 56, 68, 69, 70, 71, 72,
04304 73, 74, 75, 76, 79, 80, 83, 84, 85, 86,
04305 97, 98, 118, 119, 120, 121, 122, 123, 124, 125,
04306 126, 127, 129, 130, 137, 177, 178, 179, 180, 182,
04307 183, 293, 295, 39, 58, 88, 91, 97, 98, 99,
04308 129, 166, 174, 184, 186, 191, 194, 196, 218, 298,
04309 299, 301, 302, 333, 334, 191, 191, 138, 192, 193,
04310 138, 188, 192, 138, 143, 340, 54, 179, 340, 150,
04311 132, 21, 22, 30, 31, 32, 165, 184, 218, 184,
04312 56, 1, 47, 91, 152, 153, 154, 156, 168, 169,
04313 346, 201, 202, 187, 196, 333, 346, 186, 332, 333,
04314 346, 46, 88, 128, 136, 173, 199, 218, 298, 299,
04315 302, 246, 247, 54, 55, 57, 177, 285, 294, 284,
04316 285, 286, 142, 276, 142, 282, 142, 279, 142, 283,
04317 297, 161, 184, 184, 141, 143, 339, 344, 345, 40,
04318 41, 42, 43, 44, 37, 38, 26, 132, 188, 192,
04319 260, 28, 252, 115, 136, 91, 97, 170, 115, 70,
04320 71, 72, 73, 74, 75, 76, 77, 78, 79, 80,
04321 81, 82, 85, 86, 116, 118, 119, 120, 121, 122,
04322 123, 124, 125, 126, 127, 87, 134, 135, 200, 159,
04323 160, 160, 205, 207, 160, 339, 345, 88, 167, 174,
04324 218, 234, 298, 299, 302, 52, 56, 85, 88, 175,
04325 176, 218, 298, 299, 302, 176, 33, 34, 35, 36,
04326 49, 50, 51, 52, 56, 138, 177, 300, 330, 87,
04327 135, 338, 260, 272, 89, 89, 136, 186, 56, 186,
04328 186, 186, 115, 90, 136, 195, 346, 87, 134, 135,
04329 89, 89, 136, 195, 191, 340, 341, 191, 190, 191,
04330 196, 333, 346, 159, 341, 159, 54, 65, 66, 157,
04331 138, 185, 132, 152, 87, 135, 89, 156, 155, 168,
04332 139, 339, 345, 341, 341, 159, 140, 136, 143, 343,
04333 136, 343, 133, 343, 340, 56, 297, 170, 172, 136,
04334 87, 134, 135, 248, 63, 109, 111, 112, 287, 112,
04335 287, 112, 67, 287, 112, 112, 277, 287, 112, 63,
04336 112, 112, 112, 277, 112, 63, 112, 70, 141, 149,
04337 160, 160, 160, 160, 156, 159, 159, 262, 261, 96,
04338 163, 253, 97, 161, 186, 196, 197, 198, 168, 136,
04339 173, 136, 158, 161, 174, 184, 186, 198, 184, 184,
04340 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
04341 184, 184, 184, 184, 184, 184, 184, 184, 184, 184,
04342 184, 184, 184, 184, 52, 53, 56, 182, 259, 336,
04343 337, 190, 52, 53, 56, 182, 258, 336, 151, 152,
04344 13, 230, 344, 230, 160, 160, 339, 17, 263, 56,
04345 87, 134, 135, 25, 159, 52, 56, 175, 1, 119,
04346 303, 344, 87, 134, 135, 214, 331, 215, 338, 52,
04347 56, 336, 161, 184, 161, 184, 181, 184, 186, 97,
04348 186, 194, 333, 52, 56, 190, 52, 56, 334, 341,
04349 139, 341, 136, 136, 341, 179, 204, 184, 147, 133,
04350 336, 336, 184, 132, 341, 154, 203, 333, 136, 172,
04351 52, 56, 190, 52, 56, 52, 54, 55, 56, 57,
04352 58, 70, 91, 97, 98, 99, 122, 125, 138, 250,
04353 307, 309, 310, 311, 312, 313, 314, 315, 318, 319,
04354 320, 321, 324, 325, 326, 327, 328, 289, 288, 142,
04355 287, 142, 142, 142, 184, 78, 120, 241, 242, 346,
04356 241, 164, 241, 186, 136, 341, 172, 136, 115, 44,
04357 340, 89, 89, 188, 192, 257, 340, 342, 89, 89,
04358 188, 192, 256, 10, 229, 8, 265, 346, 152, 13,
04359 152, 27, 231, 344, 231, 263, 196, 229, 52, 56,
04360 190, 52, 56, 209, 212, 344, 304, 211, 52, 56,
04361 175, 190, 151, 159, 138, 305, 306, 216, 188, 189,
04362 192, 346, 44, 179, 186, 195, 89, 89, 342, 89,
04363 89, 333, 159, 133, 147, 341, 343, 170, 342, 91,
04364 97, 235, 236, 237, 311, 309, 249, 115, 136, 308,
04365 186, 136, 329, 346, 52, 136, 329, 136, 308, 52,
04366 136, 308, 52, 290, 54, 55, 57, 292, 302, 238,
04367 240, 243, 311, 313, 314, 316, 317, 320, 322, 323,
04368 326, 328, 340, 152, 152, 241, 152, 97, 186, 172,
04369 184, 117, 161, 184, 161, 184, 163, 188, 140, 89,
04370 161, 184, 161, 184, 163, 189, 186, 198, 266, 346,
04371 15, 233, 346, 14, 232, 233, 233, 206, 208, 229,
04372 136, 230, 342, 160, 344, 160, 151, 342, 229, 341,
04373 309, 151, 309, 177, 260, 252, 184, 89, 136, 341,
04374 133, 237, 136, 311, 136, 341, 243, 29, 113, 251,
04375 186, 307, 312, 324, 326, 315, 320, 328, 313, 321,
04376 326, 311, 313, 291, 243, 120, 115, 136, 239, 88,
04377 218, 136, 329, 329, 136, 239, 136, 239, 141, 10,
04378 133, 152, 10, 186, 184, 161, 184, 90, 267, 346,
04379 152, 9, 268, 346, 160, 229, 229, 152, 152, 186,
04380 152, 231, 213, 344, 229, 341, 229, 344, 217, 341,
04381 236, 136, 97, 235, 139, 152, 152, 136, 308, 136,
04382 308, 329, 136, 308, 136, 308, 308, 152, 120, 218,
04383 238, 323, 326, 56, 87, 316, 320, 313, 322, 326,
04384 313, 52, 244, 245, 310, 133, 88, 174, 218, 298,
04385 299, 302, 230, 152, 230, 229, 229, 233, 263, 264,
04386 210, 151, 305, 136, 236, 136, 311, 10, 133, 313,
04387 326, 313, 313, 110, 136, 239, 136, 239, 52, 56,
04388 329, 136, 239, 136, 239, 239, 136, 340, 56, 87,
04389 134, 135, 152, 152, 152, 229, 151, 236, 136, 308,
04390 136, 308, 308, 308, 313, 326, 313, 313, 245, 52,
04391 56, 190, 52, 56, 265, 232, 229, 229, 236, 313,
04392 239, 136, 239, 239, 239, 342, 308, 313, 239
04393 };
04394
04395 #define yyerrok (yyerrstatus = 0)
04396 #define yyclearin (yychar = YYEMPTY)
04397 #define YYEMPTY (-2)
04398 #define YYEOF 0
04399
04400 #define YYACCEPT goto yyacceptlab
04401 #define YYABORT goto yyabortlab
04402 #define YYERROR goto yyerrorlab
04403
04404
04405
04406
04407
04408
04409
04410
04411
04412 #define YYFAIL goto yyerrlab
04413 #if defined YYFAIL
04414
04415
04416
04417
04418 #endif
04419
04420 #define YYRECOVERING() (!!yyerrstatus)
04421
04422 #define YYBACKUP(Token, Value) \
04423 do \
04424 if (yychar == YYEMPTY && yylen == 1) \
04425 { \
04426 yychar = (Token); \
04427 yylval = (Value); \
04428 YYPOPSTACK (1); \
04429 goto yybackup; \
04430 } \
04431 else \
04432 { \
04433 parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04434 YYERROR; \
04435 } \
04436 while (YYID (0))
04437
04438
04439 #define YYTERROR 1
04440 #define YYERRCODE 256
04441
04442
04443
04444
04445
04446
04447 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04448 #ifndef YYLLOC_DEFAULT
04449 # define YYLLOC_DEFAULT(Current, Rhs, N) \
04450 do \
04451 if (YYID (N)) \
04452 { \
04453 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \
04454 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \
04455 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \
04456 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \
04457 } \
04458 else \
04459 { \
04460 (Current).first_line = (Current).last_line = \
04461 YYRHSLOC (Rhs, 0).last_line; \
04462 (Current).first_column = (Current).last_column = \
04463 YYRHSLOC (Rhs, 0).last_column; \
04464 } \
04465 while (YYID (0))
04466 #endif
04467
04468
04469
04470
04471 #ifndef YY_LOCATION_PRINT
04472 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04473 #endif
04474
04475
04476
04477
04478 #ifdef YYLEX_PARAM
04479 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04480 #else
04481 # define YYLEX yylex (&yylval, parser)
04482 #endif
04483
04484
04485 #if YYDEBUG
04486
04487 # ifndef YYFPRINTF
04488 # include <stdio.h>
04489 # define YYFPRINTF fprintf
04490 # endif
04491
04492 # define YYDPRINTF(Args) \
04493 do { \
04494 if (yydebug) \
04495 YYFPRINTF Args; \
04496 } while (YYID (0))
04497
04498 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
04499 do { \
04500 if (yydebug) \
04501 { \
04502 YYFPRINTF (stderr, "%s ", Title); \
04503 yy_symbol_print (stderr, \
04504 Type, Value, parser); \
04505 YYFPRINTF (stderr, "\n"); \
04506 } \
04507 } while (YYID (0))
04508
04509
04510
04511
04512
04513
04514
04515 #if (defined __STDC__ || defined __C99__FUNC__ \
04516 || defined __cplusplus || defined _MSC_VER)
04517 static void
04518 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04519 #else
04520 static void
04521 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04522 FILE *yyoutput;
04523 int yytype;
04524 YYSTYPE const * const yyvaluep;
04525 struct parser_params *parser;
04526 #endif
04527 {
04528 if (!yyvaluep)
04529 return;
04530 YYUSE (parser);
04531 # ifdef YYPRINT
04532 if (yytype < YYNTOKENS)
04533 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04534 # else
04535 YYUSE (yyoutput);
04536 # endif
04537 switch (yytype)
04538 {
04539 default:
04540 break;
04541 }
04542 }
04543
04544
04545
04546
04547
04548
04549 #if (defined __STDC__ || defined __C99__FUNC__ \
04550 || defined __cplusplus || defined _MSC_VER)
04551 static void
04552 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04553 #else
04554 static void
04555 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04556 FILE *yyoutput;
04557 int yytype;
04558 YYSTYPE const * const yyvaluep;
04559 struct parser_params *parser;
04560 #endif
04561 {
04562 if (yytype < YYNTOKENS)
04563 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04564 else
04565 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04566
04567 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04568 YYFPRINTF (yyoutput, ")");
04569 }
04570
04571
04572
04573
04574
04575
04576 #if (defined __STDC__ || defined __C99__FUNC__ \
04577 || defined __cplusplus || defined _MSC_VER)
04578 static void
04579 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04580 #else
04581 static void
04582 yy_stack_print (yybottom, yytop)
04583 yytype_int16 *yybottom;
04584 yytype_int16 *yytop;
04585 #endif
04586 {
04587 YYFPRINTF (stderr, "Stack now");
04588 for (; yybottom <= yytop; yybottom++)
04589 {
04590 int yybot = *yybottom;
04591 YYFPRINTF (stderr, " %d", yybot);
04592 }
04593 YYFPRINTF (stderr, "\n");
04594 }
04595
04596 # define YY_STACK_PRINT(Bottom, Top) \
04597 do { \
04598 if (yydebug) \
04599 yy_stack_print ((Bottom), (Top)); \
04600 } while (YYID (0))
04601
04602
04603
04604
04605
04606
04607 #if (defined __STDC__ || defined __C99__FUNC__ \
04608 || defined __cplusplus || defined _MSC_VER)
04609 static void
04610 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04611 #else
04612 static void
04613 yy_reduce_print (yyvsp, yyrule, parser)
04614 YYSTYPE *yyvsp;
04615 int yyrule;
04616 struct parser_params *parser;
04617 #endif
04618 {
04619 int yynrhs = yyr2[yyrule];
04620 int yyi;
04621 unsigned long int yylno = yyrline[yyrule];
04622 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04623 yyrule - 1, yylno);
04624
04625 for (yyi = 0; yyi < yynrhs; yyi++)
04626 {
04627 YYFPRINTF (stderr, " $%d = ", yyi + 1);
04628 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04629 &(yyvsp[(yyi + 1) - (yynrhs)])
04630 , parser);
04631 YYFPRINTF (stderr, "\n");
04632 }
04633 }
04634
04635 # define YY_REDUCE_PRINT(Rule) \
04636 do { \
04637 if (yydebug) \
04638 yy_reduce_print (yyvsp, Rule, parser); \
04639 } while (YYID (0))
04640
04641
04642
04643 #ifndef yydebug
04644 int yydebug;
04645 #endif
04646 #else
04647 # define YYDPRINTF(Args)
04648 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04649 # define YY_STACK_PRINT(Bottom, Top)
04650 # define YY_REDUCE_PRINT(Rule)
04651 #endif
04652
04653
04654
04655 #ifndef YYINITDEPTH
04656 # define YYINITDEPTH 200
04657 #endif
04658
04659
04660
04661
04662
04663
04664
04665
04666 #ifndef YYMAXDEPTH
04667 # define YYMAXDEPTH 10000
04668 #endif
04669
04670
04671 #if YYERROR_VERBOSE
04672
04673 # ifndef yystrlen
04674 # if defined __GLIBC__ && defined _STRING_H
04675 # define yystrlen strlen
04676 # else
04677
04678 #if (defined __STDC__ || defined __C99__FUNC__ \
04679 || defined __cplusplus || defined _MSC_VER)
04680 static YYSIZE_T
04681 yystrlen (const char *yystr)
04682 #else
04683 static YYSIZE_T
04684 yystrlen (yystr)
04685 const char *yystr;
04686 #endif
04687 {
04688 YYSIZE_T yylen;
04689 for (yylen = 0; yystr[yylen]; yylen++)
04690 continue;
04691 return yylen;
04692 }
04693 # endif
04694 # endif
04695
04696 # ifndef yystpcpy
04697 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04698 # define yystpcpy stpcpy
04699 # else
04700
04701
04702 #if (defined __STDC__ || defined __C99__FUNC__ \
04703 || defined __cplusplus || defined _MSC_VER)
04704 static char *
04705 yystpcpy (char *yydest, const char *yysrc)
04706 #else
04707 static char *
04708 yystpcpy (yydest, yysrc)
04709 char *yydest;
04710 const char *yysrc;
04711 #endif
04712 {
04713 char *yyd = yydest;
04714 const char *yys = yysrc;
04715
04716 while ((*yyd++ = *yys++) != '\0')
04717 continue;
04718
04719 return yyd - 1;
04720 }
04721 # endif
04722 # endif
04723
04724 # ifndef yytnamerr
04725
04726
04727
04728
04729
04730
04731
04732 static YYSIZE_T
04733 yytnamerr (char *yyres, const char *yystr)
04734 {
04735 if (*yystr == '"')
04736 {
04737 YYSIZE_T yyn = 0;
04738 char const *yyp = yystr;
04739
04740 for (;;)
04741 switch (*++yyp)
04742 {
04743 case '\'':
04744 case ',':
04745 goto do_not_strip_quotes;
04746
04747 case '\\':
04748 if (*++yyp != '\\')
04749 goto do_not_strip_quotes;
04750
04751 default:
04752 if (yyres)
04753 yyres[yyn] = *yyp;
04754 yyn++;
04755 break;
04756
04757 case '"':
04758 if (yyres)
04759 yyres[yyn] = '\0';
04760 return yyn;
04761 }
04762 do_not_strip_quotes: ;
04763 }
04764
04765 if (! yyres)
04766 return yystrlen (yystr);
04767
04768 return yystpcpy (yyres, yystr) - yyres;
04769 }
04770 # endif
04771
04772
04773
04774
04775
04776
04777
04778
04779
04780 static int
04781 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
04782 yytype_int16 *yyssp, int yytoken)
04783 {
04784 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
04785 YYSIZE_T yysize = yysize0;
04786 YYSIZE_T yysize1;
04787 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04788
04789 const char *yyformat = 0;
04790
04791 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04792
04793
04794 int yycount = 0;
04795
04796
04797
04798
04799
04800
04801
04802
04803
04804
04805
04806
04807
04808
04809
04810
04811
04812
04813
04814
04815
04816
04817
04818
04819
04820
04821
04822
04823 if (yytoken != YYEMPTY)
04824 {
04825 int yyn = yypact[*yyssp];
04826 yyarg[yycount++] = yytname[yytoken];
04827 if (!yypact_value_is_default (yyn))
04828 {
04829
04830
04831
04832 int yyxbegin = yyn < 0 ? -yyn : 0;
04833
04834 int yychecklim = YYLAST - yyn + 1;
04835 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04836 int yyx;
04837
04838 for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04839 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
04840 && !yytable_value_is_error (yytable[yyx + yyn]))
04841 {
04842 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04843 {
04844 yycount = 1;
04845 yysize = yysize0;
04846 break;
04847 }
04848 yyarg[yycount++] = yytname[yyx];
04849 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04850 if (! (yysize <= yysize1
04851 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04852 return 2;
04853 yysize = yysize1;
04854 }
04855 }
04856 }
04857
04858 switch (yycount)
04859 {
04860 # define YYCASE_(N, S) \
04861 case N: \
04862 yyformat = S; \
04863 break
04864 YYCASE_(0, YY_("syntax error"));
04865 YYCASE_(1, YY_("syntax error, unexpected %s"));
04866 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
04867 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
04868 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
04869 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
04870 # undef YYCASE_
04871 }
04872
04873 yysize1 = yysize + yystrlen (yyformat);
04874 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04875 return 2;
04876 yysize = yysize1;
04877
04878 if (*yymsg_alloc < yysize)
04879 {
04880 *yymsg_alloc = 2 * yysize;
04881 if (! (yysize <= *yymsg_alloc
04882 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
04883 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
04884 return 1;
04885 }
04886
04887
04888
04889
04890 {
04891 char *yyp = *yymsg;
04892 int yyi = 0;
04893 while ((*yyp = *yyformat) != '\0')
04894 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
04895 {
04896 yyp += yytnamerr (yyp, yyarg[yyi++]);
04897 yyformat += 2;
04898 }
04899 else
04900 {
04901 yyp++;
04902 yyformat++;
04903 }
04904 }
04905 return 0;
04906 }
04907 #endif
04908
04909
04910
04911
04912
04913
04914 #if (defined __STDC__ || defined __C99__FUNC__ \
04915 || defined __cplusplus || defined _MSC_VER)
04916 static void
04917 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04918 #else
04919 static void
04920 yydestruct (yymsg, yytype, yyvaluep, parser)
04921 const char *yymsg;
04922 int yytype;
04923 YYSTYPE *yyvaluep;
04924 struct parser_params *parser;
04925 #endif
04926 {
04927 YYUSE (yyvaluep);
04928 YYUSE (parser);
04929
04930 if (!yymsg)
04931 yymsg = "Deleting";
04932 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04933
04934 switch (yytype)
04935 {
04936
04937 default:
04938 break;
04939 }
04940 }
04941
04942
04943
04944 #ifdef YYPARSE_PARAM
04945 #if defined __STDC__ || defined __cplusplus
04946 int yyparse (void *YYPARSE_PARAM);
04947 #else
04948 int yyparse ();
04949 #endif
04950 #else
04951 #if defined __STDC__ || defined __cplusplus
04952 int yyparse (struct parser_params *parser);
04953 #else
04954 int yyparse ();
04955 #endif
04956 #endif
04957
04958
04959
04960
04961
04962
04963 #ifdef YYPARSE_PARAM
04964 #if (defined __STDC__ || defined __C99__FUNC__ \
04965 || defined __cplusplus || defined _MSC_VER)
04966 int
04967 yyparse (void *YYPARSE_PARAM)
04968 #else
04969 int
04970 yyparse (YYPARSE_PARAM)
04971 void *YYPARSE_PARAM;
04972 #endif
04973 #else
04974 #if (defined __STDC__ || defined __C99__FUNC__ \
04975 || defined __cplusplus || defined _MSC_VER)
04976 int
04977 yyparse (struct parser_params *parser)
04978 #else
04979 int
04980 yyparse (parser)
04981 struct parser_params *parser;
04982 #endif
04983 #endif
04984 {
04985
04986 int yychar;
04987
04988
04989 YYSTYPE yylval;
04990
04991
04992 int yynerrs;
04993
04994 int yystate;
04995
04996 int yyerrstatus;
04997
04998
04999
05000
05001
05002
05003
05004
05005
05006 yytype_int16 yyssa[YYINITDEPTH];
05007 yytype_int16 *yyss;
05008 yytype_int16 *yyssp;
05009
05010
05011 YYSTYPE yyvsa[YYINITDEPTH];
05012 YYSTYPE *yyvs;
05013 YYSTYPE *yyvsp;
05014
05015 YYSIZE_T yystacksize;
05016
05017 int yyn;
05018 int yyresult;
05019
05020 int yytoken;
05021
05022
05023 YYSTYPE yyval;
05024
05025 #if YYERROR_VERBOSE
05026
05027 char yymsgbuf[128];
05028 char *yymsg = yymsgbuf;
05029 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
05030 #endif
05031
05032 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
05033
05034
05035
05036 int yylen = 0;
05037
05038 yytoken = 0;
05039 yyss = yyssa;
05040 yyvs = yyvsa;
05041 yystacksize = YYINITDEPTH;
05042
05043 YYDPRINTF ((stderr, "Starting parse\n"));
05044
05045 yystate = 0;
05046 yyerrstatus = 0;
05047 yynerrs = 0;
05048 yychar = YYEMPTY;
05049
05050
05051
05052
05053
05054 yyssp = yyss;
05055 yyvsp = yyvs;
05056
05057 goto yysetstate;
05058
05059
05060
05061
05062 yynewstate:
05063
05064
05065 yyssp++;
05066
05067 yysetstate:
05068 *yyssp = yystate;
05069
05070 if (yyss + yystacksize - 1 <= yyssp)
05071 {
05072
05073 YYSIZE_T yysize = yyssp - yyss + 1;
05074
05075 #ifdef yyoverflow
05076 {
05077
05078
05079
05080 YYSTYPE *yyvs1 = yyvs;
05081 yytype_int16 *yyss1 = yyss;
05082
05083
05084
05085
05086
05087 yyoverflow (YY_("memory exhausted"),
05088 &yyss1, yysize * sizeof (*yyssp),
05089 &yyvs1, yysize * sizeof (*yyvsp),
05090 &yystacksize);
05091
05092 yyss = yyss1;
05093 yyvs = yyvs1;
05094 }
05095 #else
05096 # ifndef YYSTACK_RELOCATE
05097 goto yyexhaustedlab;
05098 # else
05099
05100 if (YYMAXDEPTH <= yystacksize)
05101 goto yyexhaustedlab;
05102 yystacksize *= 2;
05103 if (YYMAXDEPTH < yystacksize)
05104 yystacksize = YYMAXDEPTH;
05105
05106 {
05107 yytype_int16 *yyss1 = yyss;
05108 union yyalloc *yyptr =
05109 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
05110 if (! yyptr)
05111 goto yyexhaustedlab;
05112 YYSTACK_RELOCATE (yyss_alloc, yyss);
05113 YYSTACK_RELOCATE (yyvs_alloc, yyvs);
05114 # undef YYSTACK_RELOCATE
05115 if (yyss1 != yyssa)
05116 YYSTACK_FREE (yyss1);
05117 }
05118 # endif
05119 #endif
05120
05121 yyssp = yyss + yysize - 1;
05122 yyvsp = yyvs + yysize - 1;
05123
05124 YYDPRINTF ((stderr, "Stack size increased to %lu\n",
05125 (unsigned long int) yystacksize));
05126
05127 if (yyss + yystacksize - 1 <= yyssp)
05128 YYABORT;
05129 }
05130
05131 YYDPRINTF ((stderr, "Entering state %d\n", yystate));
05132
05133 if (yystate == YYFINAL)
05134 YYACCEPT;
05135
05136 goto yybackup;
05137
05138
05139
05140
05141 yybackup:
05142
05143
05144
05145
05146
05147 yyn = yypact[yystate];
05148 if (yypact_value_is_default (yyn))
05149 goto yydefault;
05150
05151
05152
05153
05154 if (yychar == YYEMPTY)
05155 {
05156 YYDPRINTF ((stderr, "Reading a token: "));
05157 yychar = YYLEX;
05158 }
05159
05160 if (yychar <= YYEOF)
05161 {
05162 yychar = yytoken = YYEOF;
05163 YYDPRINTF ((stderr, "Now at end of input.\n"));
05164 }
05165 else
05166 {
05167 yytoken = YYTRANSLATE (yychar);
05168 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
05169 }
05170
05171
05172
05173 yyn += yytoken;
05174 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
05175 goto yydefault;
05176 yyn = yytable[yyn];
05177 if (yyn <= 0)
05178 {
05179 if (yytable_value_is_error (yyn))
05180 goto yyerrlab;
05181 yyn = -yyn;
05182 goto yyreduce;
05183 }
05184
05185
05186
05187 if (yyerrstatus)
05188 yyerrstatus--;
05189
05190
05191 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
05192
05193
05194 yychar = YYEMPTY;
05195
05196 yystate = yyn;
05197 *++yyvsp = yylval;
05198
05199 goto yynewstate;
05200
05201
05202
05203
05204
05205 yydefault:
05206 yyn = yydefact[yystate];
05207 if (yyn == 0)
05208 goto yyerrlab;
05209 goto yyreduce;
05210
05211
05212
05213
05214
05215 yyreduce:
05216
05217 yylen = yyr2[yyn];
05218
05219
05220
05221
05222
05223
05224
05225
05226
05227 yyval = yyvsp[1-yylen];
05228
05229
05230 YY_REDUCE_PRINT (yyn);
05231 switch (yyn)
05232 {
05233 case 2:
05234
05235
05236 #line 863 "parse.y"
05237 {
05238 lex_state = EXPR_BEG;
05239
05240 local_push(compile_for_eval || rb_parse_in_main());
05241
05242
05243
05244 }
05245 break;
05246
05247 case 3:
05248
05249
05250 #line 872 "parse.y"
05251 {
05252
05253 if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
05254
05255 if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
05256 else {
05257 NODE *node = (yyvsp[(2) - (2)].node);
05258 while (node->nd_next) {
05259 node = node->nd_next;
05260 }
05261 void_expr(node->nd_head);
05262 }
05263 }
05264 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
05265
05266
05267
05268
05269 local_pop();
05270 }
05271 break;
05272
05273 case 4:
05274
05275
05276 #line 895 "parse.y"
05277 {
05278
05279 void_stmts((yyvsp[(1) - (2)].node));
05280 fixup_nodes(&deferred_nodes);
05281
05282
05283 (yyval.node) = (yyvsp[(1) - (2)].node);
05284 }
05285 break;
05286
05287 case 5:
05288
05289
05290 #line 906 "parse.y"
05291 {
05292
05293 (yyval.node) = NEW_BEGIN(0);
05294
05295
05296
05297
05298 }
05299 break;
05300
05301 case 6:
05302
05303
05304 #line 915 "parse.y"
05305 {
05306
05307 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05308
05309
05310
05311 }
05312 break;
05313
05314 case 7:
05315
05316
05317 #line 923 "parse.y"
05318 {
05319
05320 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05321
05322
05323
05324 }
05325 break;
05326
05327 case 8:
05328
05329
05330 #line 931 "parse.y"
05331 {
05332 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05333 }
05334 break;
05335
05336 case 10:
05337
05338
05339 #line 938 "parse.y"
05340 {
05341
05342
05343
05344
05345 }
05346 break;
05347
05348 case 11:
05349
05350
05351 #line 945 "parse.y"
05352 {
05353
05354 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05355 (yyvsp[(4) - (5)].node));
05356
05357
05358 (yyval.node) = NEW_BEGIN(0);
05359
05360
05361
05362 }
05363 break;
05364
05365 case 12:
05366
05367
05368 #line 962 "parse.y"
05369 {
05370
05371 (yyval.node) = (yyvsp[(1) - (4)].node);
05372 if ((yyvsp[(2) - (4)].node)) {
05373 (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05374 }
05375 else if ((yyvsp[(3) - (4)].node)) {
05376 rb_warn0("else without rescue is useless");
05377 (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05378 }
05379 if ((yyvsp[(4) - (4)].node)) {
05380 if ((yyval.node)) {
05381 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05382 }
05383 else {
05384 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05385 }
05386 }
05387 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05388
05389
05390
05391
05392
05393
05394
05395 }
05396 break;
05397
05398 case 13:
05399
05400
05401 #line 992 "parse.y"
05402 {
05403
05404 void_stmts((yyvsp[(1) - (2)].node));
05405 fixup_nodes(&deferred_nodes);
05406
05407
05408 (yyval.node) = (yyvsp[(1) - (2)].node);
05409 }
05410 break;
05411
05412 case 14:
05413
05414
05415 #line 1003 "parse.y"
05416 {
05417
05418 (yyval.node) = NEW_BEGIN(0);
05419
05420
05421
05422
05423 }
05424 break;
05425
05426 case 15:
05427
05428
05429 #line 1012 "parse.y"
05430 {
05431
05432 (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05433
05434
05435
05436 }
05437 break;
05438
05439 case 16:
05440
05441
05442 #line 1020 "parse.y"
05443 {
05444
05445 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05446
05447
05448
05449 }
05450 break;
05451
05452 case 17:
05453
05454
05455 #line 1028 "parse.y"
05456 {
05457 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05458 }
05459 break;
05460
05461 case 18:
05462
05463
05464 #line 1034 "parse.y"
05465 {
05466 (yyval.node) = (yyvsp[(1) - (1)].node);
05467 }
05468 break;
05469
05470 case 19:
05471
05472
05473 #line 1038 "parse.y"
05474 {
05475 yyerror("BEGIN is permitted only at toplevel");
05476
05477
05478
05479
05480 }
05481 break;
05482
05483 case 20:
05484
05485
05486 #line 1046 "parse.y"
05487 {
05488
05489 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05490 (yyvsp[(4) - (5)].node));
05491
05492
05493 (yyval.node) = NEW_BEGIN(0);
05494
05495
05496
05497 }
05498 break;
05499
05500 case 21:
05501
05502
05503 #line 1058 "parse.y"
05504 {lex_state = EXPR_FNAME;}
05505 break;
05506
05507 case 22:
05508
05509
05510 #line 1059 "parse.y"
05511 {
05512
05513 (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05514
05515
05516
05517 }
05518 break;
05519
05520 case 23:
05521
05522
05523 #line 1067 "parse.y"
05524 {
05525
05526 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05527
05528
05529
05530 }
05531 break;
05532
05533 case 24:
05534
05535
05536 #line 1075 "parse.y"
05537 {
05538
05539 char buf[2];
05540 buf[0] = '$';
05541 buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05542 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05543
05544
05545
05546 }
05547 break;
05548
05549 case 25:
05550
05551
05552 #line 1086 "parse.y"
05553 {
05554
05555 yyerror("can't make alias for the number variables");
05556 (yyval.node) = NEW_BEGIN(0);
05557
05558
05559
05560
05561 }
05562 break;
05563
05564 case 26:
05565
05566
05567 #line 1096 "parse.y"
05568 {
05569
05570 (yyval.node) = (yyvsp[(2) - (2)].node);
05571
05572
05573
05574 }
05575 break;
05576
05577 case 27:
05578
05579
05580 #line 1104 "parse.y"
05581 {
05582
05583 (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05584 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05585
05586
05587
05588 }
05589 break;
05590
05591 case 28:
05592
05593
05594 #line 1113 "parse.y"
05595 {
05596
05597 (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05598 fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05599
05600
05601
05602 }
05603 break;
05604
05605 case 29:
05606
05607
05608 #line 1122 "parse.y"
05609 {
05610
05611 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05612 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05613 }
05614 else {
05615 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05616 }
05617
05618
05619
05620 }
05621 break;
05622
05623 case 30:
05624
05625
05626 #line 1135 "parse.y"
05627 {
05628
05629 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05630 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05631 }
05632 else {
05633 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05634 }
05635
05636
05637
05638 }
05639 break;
05640
05641 case 31:
05642
05643
05644 #line 1148 "parse.y"
05645 {
05646
05647 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05648 (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05649
05650
05651
05652 }
05653 break;
05654
05655 case 32:
05656
05657
05658 #line 1157 "parse.y"
05659 {
05660 if (in_def || in_single) {
05661 rb_warn0("END in method; use at_exit");
05662 }
05663
05664 (yyval.node) = NEW_POSTEXE(NEW_NODE(
05665 NODE_SCOPE, 0 , (yyvsp[(3) - (4)].node) , 0 ));
05666
05667
05668
05669 }
05670 break;
05671
05672 case 34:
05673
05674
05675 #line 1170 "parse.y"
05676 {
05677
05678 value_expr((yyvsp[(3) - (3)].node));
05679 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05680 (yyval.node) = (yyvsp[(1) - (3)].node);
05681
05682
05683
05684 }
05685 break;
05686
05687 case 35:
05688
05689
05690 #line 1180 "parse.y"
05691 {
05692 value_expr((yyvsp[(3) - (3)].node));
05693 (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
05694 }
05695 break;
05696
05697 case 36:
05698
05699
05700 #line 1185 "parse.y"
05701 {
05702
05703 NODE *args;
05704
05705 value_expr((yyvsp[(6) - (6)].node));
05706 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05707 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05708 if ((yyvsp[(5) - (6)].id) == tOROP) {
05709 (yyvsp[(5) - (6)].id) = 0;
05710 }
05711 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05712 (yyvsp[(5) - (6)].id) = 1;
05713 }
05714 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05715 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05716
05717
05718
05719
05720 }
05721 break;
05722
05723 case 37:
05724
05725
05726 #line 1206 "parse.y"
05727 {
05728 value_expr((yyvsp[(5) - (5)].node));
05729 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05730 }
05731 break;
05732
05733 case 38:
05734
05735
05736 #line 1211 "parse.y"
05737 {
05738 value_expr((yyvsp[(5) - (5)].node));
05739 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05740 }
05741 break;
05742
05743 case 39:
05744
05745
05746 #line 1216 "parse.y"
05747 {
05748
05749 (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
05750 (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05751
05752
05753
05754
05755 }
05756 break;
05757
05758 case 40:
05759
05760
05761 #line 1226 "parse.y"
05762 {
05763 value_expr((yyvsp[(5) - (5)].node));
05764 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05765 }
05766 break;
05767
05768 case 41:
05769
05770
05771 #line 1231 "parse.y"
05772 {
05773
05774 rb_backref_error((yyvsp[(1) - (3)].node));
05775 (yyval.node) = NEW_BEGIN(0);
05776
05777
05778
05779
05780 }
05781 break;
05782
05783 case 42:
05784
05785
05786 #line 1241 "parse.y"
05787 {
05788
05789 value_expr((yyvsp[(3) - (3)].node));
05790 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05791
05792
05793
05794 }
05795 break;
05796
05797 case 43:
05798
05799
05800 #line 1250 "parse.y"
05801 {
05802
05803 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05804 (yyval.node) = (yyvsp[(1) - (3)].node);
05805
05806
05807
05808 }
05809 break;
05810
05811 case 45:
05812
05813
05814 #line 1262 "parse.y"
05815 {
05816
05817 value_expr((yyvsp[(3) - (3)].node));
05818 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05819
05820
05821
05822 }
05823 break;
05824
05825 case 46:
05826
05827
05828 #line 1271 "parse.y"
05829 {
05830
05831 value_expr((yyvsp[(3) - (3)].node));
05832 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05833
05834
05835
05836 }
05837 break;
05838
05839 case 48:
05840
05841
05842 #line 1284 "parse.y"
05843 {
05844
05845 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05846
05847
05848
05849 }
05850 break;
05851
05852 case 49:
05853
05854
05855 #line 1292 "parse.y"
05856 {
05857
05858 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05859
05860
05861
05862 }
05863 break;
05864
05865 case 50:
05866
05867
05868 #line 1300 "parse.y"
05869 {
05870
05871 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05872
05873
05874
05875 }
05876 break;
05877
05878 case 51:
05879
05880
05881 #line 1308 "parse.y"
05882 {
05883
05884 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05885
05886
05887
05888 }
05889 break;
05890
05891 case 53:
05892
05893
05894 #line 1319 "parse.y"
05895 {
05896
05897 value_expr((yyvsp[(1) - (1)].node));
05898 (yyval.node) = (yyvsp[(1) - (1)].node);
05899 if (!(yyval.node)) (yyval.node) = NEW_NIL();
05900
05901
05902
05903 }
05904 break;
05905
05906 case 57:
05907
05908
05909 #line 1336 "parse.y"
05910 {
05911
05912 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05913
05914
05915
05916
05917 }
05918 break;
05919
05920 case 58:
05921
05922
05923 #line 1347 "parse.y"
05924 {
05925 (yyvsp[(1) - (1)].vars) = dyna_push();
05926
05927 (yyval.num) = ruby_sourceline;
05928
05929
05930 }
05931 break;
05932
05933 case 59:
05934
05935
05936 #line 1357 "parse.y"
05937 {
05938
05939 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05940 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05941
05942
05943
05944 dyna_pop((yyvsp[(1) - (5)].vars));
05945 }
05946 break;
05947
05948 case 60:
05949
05950
05951 #line 1369 "parse.y"
05952 {
05953
05954 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
05955 nd_set_line((yyval.node), tokline);
05956
05957
05958 }
05959 break;
05960
05961 case 61:
05962
05963
05964 #line 1379 "parse.y"
05965 {
05966
05967 (yyval.node) = (yyvsp[(1) - (2)].node);
05968 (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
05969
05970
05971
05972 }
05973 break;
05974
05975 case 62:
05976
05977
05978 #line 1388 "parse.y"
05979 {
05980
05981 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05982 (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
05983 (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
05984 (yyval.node) = (yyvsp[(3) - (3)].node);
05985 fixpos((yyval.node), (yyvsp[(1) - (3)].node));
05986
05987
05988
05989
05990 }
05991 break;
05992
05993 case 63:
05994
05995
05996 #line 1401 "parse.y"
05997 {
05998
05999 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
06000 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
06001
06002
06003
06004 }
06005 break;
06006
06007 case 64:
06008
06009
06010 #line 1410 "parse.y"
06011 {
06012
06013 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
06014 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
06015 (yyval.node) = (yyvsp[(5) - (5)].node);
06016 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06017
06018
06019
06020
06021 }
06022 break;
06023
06024 case 65:
06025
06026
06027 #line 1422 "parse.y"
06028 {
06029
06030 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
06031 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
06032
06033
06034
06035 }
06036 break;
06037
06038 case 66:
06039
06040
06041 #line 1431 "parse.y"
06042 {
06043
06044 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
06045 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
06046 (yyval.node) = (yyvsp[(5) - (5)].node);
06047 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06048
06049
06050
06051
06052 }
06053 break;
06054
06055 case 67:
06056
06057
06058 #line 1443 "parse.y"
06059 {
06060
06061 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
06062 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
06063
06064
06065
06066 }
06067 break;
06068
06069 case 68:
06070
06071
06072 #line 1452 "parse.y"
06073 {
06074
06075 (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
06076 fixpos((yyval.node), (yyvsp[(2) - (2)].node));
06077
06078
06079
06080 }
06081 break;
06082
06083 case 69:
06084
06085
06086 #line 1461 "parse.y"
06087 {
06088
06089 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
06090
06091
06092
06093 }
06094 break;
06095
06096 case 70:
06097
06098
06099 #line 1469 "parse.y"
06100 {
06101
06102 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
06103
06104
06105
06106 }
06107 break;
06108
06109 case 71:
06110
06111
06112 #line 1477 "parse.y"
06113 {
06114
06115 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
06116
06117
06118
06119 }
06120 break;
06121
06122 case 73:
06123
06124
06125 #line 1488 "parse.y"
06126 {
06127
06128 (yyval.node) = (yyvsp[(2) - (3)].node);
06129
06130
06131
06132 }
06133 break;
06134
06135 case 75:
06136
06137
06138 #line 1499 "parse.y"
06139 {
06140
06141 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
06142
06143
06144
06145 }
06146 break;
06147
06148 case 76:
06149
06150
06151 #line 1509 "parse.y"
06152 {
06153
06154 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
06155
06156
06157
06158 }
06159 break;
06160
06161 case 77:
06162
06163
06164 #line 1517 "parse.y"
06165 {
06166
06167 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
06168
06169
06170
06171 }
06172 break;
06173
06174 case 78:
06175
06176
06177 #line 1525 "parse.y"
06178 {
06179
06180 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06181
06182
06183
06184 }
06185 break;
06186
06187 case 79:
06188
06189
06190 #line 1533 "parse.y"
06191 {
06192
06193 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
06194
06195
06196
06197
06198 }
06199 break;
06200
06201 case 80:
06202
06203
06204 #line 1542 "parse.y"
06205 {
06206
06207 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
06208
06209
06210
06211 }
06212 break;
06213
06214 case 81:
06215
06216
06217 #line 1550 "parse.y"
06218 {
06219
06220 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
06221
06222
06223
06224
06225 }
06226 break;
06227
06228 case 82:
06229
06230
06231 #line 1559 "parse.y"
06232 {
06233
06234 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
06235
06236
06237
06238 }
06239 break;
06240
06241 case 83:
06242
06243
06244 #line 1567 "parse.y"
06245 {
06246
06247 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
06248
06249
06250
06251
06252 }
06253 break;
06254
06255 case 84:
06256
06257
06258 #line 1576 "parse.y"
06259 {
06260
06261 (yyval.node) = NEW_MASGN(0, -1);
06262
06263
06264
06265 }
06266 break;
06267
06268 case 85:
06269
06270
06271 #line 1584 "parse.y"
06272 {
06273
06274 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
06275
06276
06277
06278
06279 }
06280 break;
06281
06282 case 87:
06283
06284
06285 #line 1596 "parse.y"
06286 {
06287
06288 (yyval.node) = (yyvsp[(2) - (3)].node);
06289
06290
06291
06292 }
06293 break;
06294
06295 case 88:
06296
06297
06298 #line 1606 "parse.y"
06299 {
06300
06301 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06302
06303
06304
06305 }
06306 break;
06307
06308 case 89:
06309
06310
06311 #line 1614 "parse.y"
06312 {
06313
06314 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06315
06316
06317
06318 }
06319 break;
06320
06321 case 90:
06322
06323
06324 #line 1624 "parse.y"
06325 {
06326
06327 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06328
06329
06330
06331 }
06332 break;
06333
06334 case 91:
06335
06336
06337 #line 1632 "parse.y"
06338 {
06339
06340 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06341
06342
06343
06344 }
06345 break;
06346
06347 case 92:
06348
06349
06350 #line 1642 "parse.y"
06351 {
06352 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06353 }
06354 break;
06355
06356 case 93:
06357
06358
06359 #line 1646 "parse.y"
06360 {
06361 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06362 }
06363 break;
06364
06365 case 94:
06366
06367
06368 #line 1650 "parse.y"
06369 {
06370
06371 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06372
06373
06374
06375 }
06376 break;
06377
06378 case 95:
06379
06380
06381 #line 1658 "parse.y"
06382 {
06383
06384 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06385
06386
06387
06388 }
06389 break;
06390
06391 case 96:
06392
06393
06394 #line 1666 "parse.y"
06395 {
06396
06397 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06398
06399
06400
06401 }
06402 break;
06403
06404 case 97:
06405
06406
06407 #line 1674 "parse.y"
06408 {
06409
06410 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06411
06412
06413
06414 }
06415 break;
06416
06417 case 98:
06418
06419
06420 #line 1682 "parse.y"
06421 {
06422
06423 if (in_def || in_single)
06424 yyerror("dynamic constant assignment");
06425 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06426
06427
06428
06429
06430
06431 }
06432 break;
06433
06434 case 99:
06435
06436
06437 #line 1694 "parse.y"
06438 {
06439
06440 if (in_def || in_single)
06441 yyerror("dynamic constant assignment");
06442 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06443
06444
06445
06446 }
06447 break;
06448
06449 case 100:
06450
06451
06452 #line 1704 "parse.y"
06453 {
06454
06455 rb_backref_error((yyvsp[(1) - (1)].node));
06456 (yyval.node) = NEW_BEGIN(0);
06457
06458
06459
06460
06461 }
06462 break;
06463
06464 case 101:
06465
06466
06467 #line 1716 "parse.y"
06468 {
06469 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06470
06471 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06472
06473
06474
06475 }
06476 break;
06477
06478 case 102:
06479
06480
06481 #line 1725 "parse.y"
06482 {
06483 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06484
06485 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06486
06487
06488
06489 }
06490 break;
06491
06492 case 103:
06493
06494
06495 #line 1734 "parse.y"
06496 {
06497
06498 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06499
06500
06501
06502 }
06503 break;
06504
06505 case 104:
06506
06507
06508 #line 1742 "parse.y"
06509 {
06510
06511 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06512
06513
06514
06515 }
06516 break;
06517
06518 case 105:
06519
06520
06521 #line 1750 "parse.y"
06522 {
06523
06524 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06525
06526
06527
06528 }
06529 break;
06530
06531 case 106:
06532
06533
06534 #line 1758 "parse.y"
06535 {
06536
06537 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06538
06539
06540
06541 }
06542 break;
06543
06544 case 107:
06545
06546
06547 #line 1766 "parse.y"
06548 {
06549
06550 if (in_def || in_single)
06551 yyerror("dynamic constant assignment");
06552 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06553
06554
06555
06556
06557
06558
06559 }
06560 break;
06561
06562 case 108:
06563
06564
06565 #line 1779 "parse.y"
06566 {
06567
06568 if (in_def || in_single)
06569 yyerror("dynamic constant assignment");
06570 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06571
06572
06573
06574
06575
06576
06577 }
06578 break;
06579
06580 case 109:
06581
06582
06583 #line 1792 "parse.y"
06584 {
06585
06586 rb_backref_error((yyvsp[(1) - (1)].node));
06587 (yyval.node) = NEW_BEGIN(0);
06588
06589
06590
06591 }
06592 break;
06593
06594 case 110:
06595
06596
06597 #line 1803 "parse.y"
06598 {
06599
06600 yyerror("class/module name must be CONSTANT");
06601
06602
06603
06604 }
06605 break;
06606
06607 case 112:
06608
06609
06610 #line 1814 "parse.y"
06611 {
06612
06613 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06614
06615
06616
06617 }
06618 break;
06619
06620 case 113:
06621
06622
06623 #line 1822 "parse.y"
06624 {
06625
06626 (yyval.node) = NEW_COLON2(0, (yyval.node));
06627
06628
06629
06630 }
06631 break;
06632
06633 case 114:
06634
06635
06636 #line 1830 "parse.y"
06637 {
06638
06639 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06640
06641
06642
06643 }
06644 break;
06645
06646 case 118:
06647
06648
06649 #line 1843 "parse.y"
06650 {
06651 lex_state = EXPR_ENDFN;
06652 (yyval.id) = (yyvsp[(1) - (1)].id);
06653 }
06654 break;
06655
06656 case 119:
06657
06658
06659 #line 1848 "parse.y"
06660 {
06661 lex_state = EXPR_ENDFN;
06662
06663 (yyval.id) = (yyvsp[(1) - (1)].id);
06664
06665
06666
06667 }
06668 break;
06669
06670 case 122:
06671
06672
06673 #line 1863 "parse.y"
06674 {
06675
06676 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06677
06678
06679
06680 }
06681 break;
06682
06683 case 124:
06684
06685
06686 #line 1874 "parse.y"
06687 {
06688
06689 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06690
06691
06692
06693 }
06694 break;
06695
06696 case 125:
06697
06698
06699 #line 1881 "parse.y"
06700 {lex_state = EXPR_FNAME;}
06701 break;
06702
06703 case 126:
06704
06705
06706 #line 1882 "parse.y"
06707 {
06708
06709 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06710
06711
06712
06713 }
06714 break;
06715
06716 case 127:
06717
06718
06719 #line 1891 "parse.y"
06720 { ifndef_ripper((yyval.id) = '|'); }
06721 break;
06722
06723 case 128:
06724
06725
06726 #line 1892 "parse.y"
06727 { ifndef_ripper((yyval.id) = '^'); }
06728 break;
06729
06730 case 129:
06731
06732
06733 #line 1893 "parse.y"
06734 { ifndef_ripper((yyval.id) = '&'); }
06735 break;
06736
06737 case 130:
06738
06739
06740 #line 1894 "parse.y"
06741 { ifndef_ripper((yyval.id) = tCMP); }
06742 break;
06743
06744 case 131:
06745
06746
06747 #line 1895 "parse.y"
06748 { ifndef_ripper((yyval.id) = tEQ); }
06749 break;
06750
06751 case 132:
06752
06753
06754 #line 1896 "parse.y"
06755 { ifndef_ripper((yyval.id) = tEQQ); }
06756 break;
06757
06758 case 133:
06759
06760
06761 #line 1897 "parse.y"
06762 { ifndef_ripper((yyval.id) = tMATCH); }
06763 break;
06764
06765 case 134:
06766
06767
06768 #line 1898 "parse.y"
06769 { ifndef_ripper((yyval.id) = tNMATCH); }
06770 break;
06771
06772 case 135:
06773
06774
06775 #line 1899 "parse.y"
06776 { ifndef_ripper((yyval.id) = '>'); }
06777 break;
06778
06779 case 136:
06780
06781
06782 #line 1900 "parse.y"
06783 { ifndef_ripper((yyval.id) = tGEQ); }
06784 break;
06785
06786 case 137:
06787
06788
06789 #line 1901 "parse.y"
06790 { ifndef_ripper((yyval.id) = '<'); }
06791 break;
06792
06793 case 138:
06794
06795
06796 #line 1902 "parse.y"
06797 { ifndef_ripper((yyval.id) = tLEQ); }
06798 break;
06799
06800 case 139:
06801
06802
06803 #line 1903 "parse.y"
06804 { ifndef_ripper((yyval.id) = tNEQ); }
06805 break;
06806
06807 case 140:
06808
06809
06810 #line 1904 "parse.y"
06811 { ifndef_ripper((yyval.id) = tLSHFT); }
06812 break;
06813
06814 case 141:
06815
06816
06817 #line 1905 "parse.y"
06818 { ifndef_ripper((yyval.id) = tRSHFT); }
06819 break;
06820
06821 case 142:
06822
06823
06824 #line 1906 "parse.y"
06825 { ifndef_ripper((yyval.id) = '+'); }
06826 break;
06827
06828 case 143:
06829
06830
06831 #line 1907 "parse.y"
06832 { ifndef_ripper((yyval.id) = '-'); }
06833 break;
06834
06835 case 144:
06836
06837
06838 #line 1908 "parse.y"
06839 { ifndef_ripper((yyval.id) = '*'); }
06840 break;
06841
06842 case 145:
06843
06844
06845 #line 1909 "parse.y"
06846 { ifndef_ripper((yyval.id) = '*'); }
06847 break;
06848
06849 case 146:
06850
06851
06852 #line 1910 "parse.y"
06853 { ifndef_ripper((yyval.id) = '/'); }
06854 break;
06855
06856 case 147:
06857
06858
06859 #line 1911 "parse.y"
06860 { ifndef_ripper((yyval.id) = '%'); }
06861 break;
06862
06863 case 148:
06864
06865
06866 #line 1912 "parse.y"
06867 { ifndef_ripper((yyval.id) = tPOW); }
06868 break;
06869
06870 case 149:
06871
06872
06873 #line 1913 "parse.y"
06874 { ifndef_ripper((yyval.id) = tDSTAR); }
06875 break;
06876
06877 case 150:
06878
06879
06880 #line 1914 "parse.y"
06881 { ifndef_ripper((yyval.id) = '!'); }
06882 break;
06883
06884 case 151:
06885
06886
06887 #line 1915 "parse.y"
06888 { ifndef_ripper((yyval.id) = '~'); }
06889 break;
06890
06891 case 152:
06892
06893
06894 #line 1916 "parse.y"
06895 { ifndef_ripper((yyval.id) = tUPLUS); }
06896 break;
06897
06898 case 153:
06899
06900
06901 #line 1917 "parse.y"
06902 { ifndef_ripper((yyval.id) = tUMINUS); }
06903 break;
06904
06905 case 154:
06906
06907
06908 #line 1918 "parse.y"
06909 { ifndef_ripper((yyval.id) = tAREF); }
06910 break;
06911
06912 case 155:
06913
06914
06915 #line 1919 "parse.y"
06916 { ifndef_ripper((yyval.id) = tASET); }
06917 break;
06918
06919 case 156:
06920
06921
06922 #line 1920 "parse.y"
06923 { ifndef_ripper((yyval.id) = '`'); }
06924 break;
06925
06926 case 198:
06927
06928
06929 #line 1938 "parse.y"
06930 {
06931
06932 value_expr((yyvsp[(3) - (3)].node));
06933 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06934
06935
06936
06937 }
06938 break;
06939
06940 case 199:
06941
06942
06943 #line 1947 "parse.y"
06944 {
06945
06946 value_expr((yyvsp[(3) - (5)].node));
06947 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06948 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06949
06950
06951
06952 }
06953 break;
06954
06955 case 200:
06956
06957
06958 #line 1957 "parse.y"
06959 {
06960 value_expr((yyvsp[(3) - (3)].node));
06961 (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
06962 }
06963 break;
06964
06965 case 201:
06966
06967
06968 #line 1962 "parse.y"
06969 {
06970
06971 value_expr((yyvsp[(3) - (5)].node));
06972 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06973
06974
06975
06976 (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node));
06977 }
06978 break;
06979
06980 case 202:
06981
06982
06983 #line 1972 "parse.y"
06984 {
06985
06986 NODE *args;
06987
06988 value_expr((yyvsp[(6) - (6)].node));
06989 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06990 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06991 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06992 }
06993 else {
06994 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06995 }
06996 if ((yyvsp[(5) - (6)].id) == tOROP) {
06997 (yyvsp[(5) - (6)].id) = 0;
06998 }
06999 else if ((yyvsp[(5) - (6)].id) == tANDOP) {
07000 (yyvsp[(5) - (6)].id) = 1;
07001 }
07002 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
07003 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07004
07005
07006
07007
07008 }
07009 break;
07010
07011 case 203:
07012
07013
07014 #line 1998 "parse.y"
07015 {
07016 value_expr((yyvsp[(5) - (5)].node));
07017 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
07018 }
07019 break;
07020
07021 case 204:
07022
07023
07024 #line 2003 "parse.y"
07025 {
07026 value_expr((yyvsp[(5) - (5)].node));
07027 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
07028 }
07029 break;
07030
07031 case 205:
07032
07033
07034 #line 2008 "parse.y"
07035 {
07036 value_expr((yyvsp[(5) - (5)].node));
07037 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
07038 }
07039 break;
07040
07041 case 206:
07042
07043
07044 #line 2013 "parse.y"
07045 {
07046
07047 (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
07048 (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
07049
07050
07051
07052
07053 }
07054 break;
07055
07056 case 207:
07057
07058
07059 #line 2023 "parse.y"
07060 {
07061
07062 (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id));
07063 (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
07064
07065
07066
07067
07068 }
07069 break;
07070
07071 case 208:
07072
07073
07074 #line 2033 "parse.y"
07075 {
07076
07077 rb_backref_error((yyvsp[(1) - (3)].node));
07078 (yyval.node) = NEW_BEGIN(0);
07079
07080
07081
07082
07083
07084 }
07085 break;
07086
07087 case 209:
07088
07089
07090 #line 2044 "parse.y"
07091 {
07092
07093 value_expr((yyvsp[(1) - (3)].node));
07094 value_expr((yyvsp[(3) - (3)].node));
07095 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07096 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07097 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07098 deferred_nodes = list_append(deferred_nodes, (yyval.node));
07099 }
07100
07101
07102
07103 }
07104 break;
07105
07106 case 210:
07107
07108
07109 #line 2058 "parse.y"
07110 {
07111
07112 value_expr((yyvsp[(1) - (3)].node));
07113 value_expr((yyvsp[(3) - (3)].node));
07114 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07115 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07116 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07117 deferred_nodes = list_append(deferred_nodes, (yyval.node));
07118 }
07119
07120
07121
07122 }
07123 break;
07124
07125 case 211:
07126
07127
07128 #line 2072 "parse.y"
07129 {
07130
07131 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
07132
07133
07134
07135 }
07136 break;
07137
07138 case 212:
07139
07140
07141 #line 2080 "parse.y"
07142 {
07143
07144 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
07145
07146
07147
07148 }
07149 break;
07150
07151 case 213:
07152
07153
07154 #line 2088 "parse.y"
07155 {
07156
07157 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
07158
07159
07160
07161 }
07162 break;
07163
07164 case 214:
07165
07166
07167 #line 2096 "parse.y"
07168 {
07169
07170 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
07171
07172
07173
07174 }
07175 break;
07176
07177 case 215:
07178
07179
07180 #line 2104 "parse.y"
07181 {
07182
07183 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
07184
07185
07186
07187 }
07188 break;
07189
07190 case 216:
07191
07192
07193 #line 2112 "parse.y"
07194 {
07195
07196 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
07197
07198
07199
07200 }
07201 break;
07202
07203 case 217:
07204
07205
07206 #line 2120 "parse.y"
07207 {
07208
07209 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07210
07211
07212
07213
07214 }
07215 break;
07216
07217 case 218:
07218
07219
07220 #line 2129 "parse.y"
07221 {
07222
07223 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07224
07225
07226
07227 }
07228 break;
07229
07230 case 219:
07231
07232
07233 #line 2137 "parse.y"
07234 {
07235
07236 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07237
07238
07239
07240 }
07241 break;
07242
07243 case 220:
07244
07245
07246 #line 2145 "parse.y"
07247 {
07248
07249 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07250
07251
07252
07253 }
07254 break;
07255
07256 case 221:
07257
07258
07259 #line 2153 "parse.y"
07260 {
07261
07262 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07263
07264
07265
07266 }
07267 break;
07268
07269 case 222:
07270
07271
07272 #line 2161 "parse.y"
07273 {
07274
07275 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07276
07277
07278
07279 }
07280 break;
07281
07282 case 223:
07283
07284
07285 #line 2169 "parse.y"
07286 {
07287
07288 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07289
07290
07291
07292 }
07293 break;
07294
07295 case 224:
07296
07297
07298 #line 2177 "parse.y"
07299 {
07300
07301 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07302
07303
07304
07305 }
07306 break;
07307
07308 case 225:
07309
07310
07311 #line 2185 "parse.y"
07312 {
07313
07314 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07315
07316
07317
07318 }
07319 break;
07320
07321 case 226:
07322
07323
07324 #line 2193 "parse.y"
07325 {
07326
07327 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07328
07329
07330
07331 }
07332 break;
07333
07334 case 227:
07335
07336
07337 #line 2201 "parse.y"
07338 {
07339
07340 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07341
07342
07343
07344 }
07345 break;
07346
07347 case 228:
07348
07349
07350 #line 2209 "parse.y"
07351 {
07352
07353 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07354
07355
07356
07357 }
07358 break;
07359
07360 case 229:
07361
07362
07363 #line 2217 "parse.y"
07364 {
07365
07366 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07367
07368
07369
07370 }
07371 break;
07372
07373 case 230:
07374
07375
07376 #line 2225 "parse.y"
07377 {
07378
07379 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07380
07381
07382
07383 }
07384 break;
07385
07386 case 231:
07387
07388
07389 #line 2233 "parse.y"
07390 {
07391
07392 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07393 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) {
07394 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07395 }
07396
07397
07398
07399 }
07400 break;
07401
07402 case 232:
07403
07404
07405 #line 2244 "parse.y"
07406 {
07407
07408 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07409
07410
07411
07412 }
07413 break;
07414
07415 case 233:
07416
07417
07418 #line 2252 "parse.y"
07419 {
07420
07421 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07422
07423
07424
07425 }
07426 break;
07427
07428 case 234:
07429
07430
07431 #line 2260 "parse.y"
07432 {
07433
07434 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07435
07436
07437
07438 }
07439 break;
07440
07441 case 235:
07442
07443
07444 #line 2268 "parse.y"
07445 {
07446
07447 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07448
07449
07450
07451 }
07452 break;
07453
07454 case 236:
07455
07456
07457 #line 2276 "parse.y"
07458 {
07459
07460 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07461
07462
07463
07464 }
07465 break;
07466
07467 case 237:
07468
07469
07470 #line 2284 "parse.y"
07471 {
07472
07473 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07474
07475
07476
07477 }
07478 break;
07479
07480 case 238:
07481
07482
07483 #line 2292 "parse.y"
07484 {
07485
07486 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07487
07488
07489
07490 }
07491 break;
07492
07493 case 239:
07494
07495
07496 #line 2299 "parse.y"
07497 {in_defined = 1;}
07498 break;
07499
07500 case 240:
07501
07502
07503 #line 2300 "parse.y"
07504 {
07505
07506 in_defined = 0;
07507 (yyval.node) = new_defined((yyvsp[(4) - (4)].node));
07508
07509
07510
07511
07512 }
07513 break;
07514
07515 case 241:
07516
07517
07518 #line 2310 "parse.y"
07519 {
07520
07521 value_expr((yyvsp[(1) - (6)].node));
07522 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07523 fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07524
07525
07526
07527 }
07528 break;
07529
07530 case 242:
07531
07532
07533 #line 2320 "parse.y"
07534 {
07535 (yyval.node) = (yyvsp[(1) - (1)].node);
07536 }
07537 break;
07538
07539 case 243:
07540
07541
07542 #line 2326 "parse.y"
07543 {
07544
07545 value_expr((yyvsp[(1) - (1)].node));
07546 (yyval.node) = (yyvsp[(1) - (1)].node);
07547 if (!(yyval.node)) (yyval.node) = NEW_NIL();
07548
07549
07550
07551 }
07552 break;
07553
07554 case 245:
07555
07556
07557 #line 2339 "parse.y"
07558 {
07559 (yyval.node) = (yyvsp[(1) - (2)].node);
07560 }
07561 break;
07562
07563 case 246:
07564
07565
07566 #line 2343 "parse.y"
07567 {
07568
07569 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07570
07571
07572
07573 }
07574 break;
07575
07576 case 247:
07577
07578
07579 #line 2351 "parse.y"
07580 {
07581
07582 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07583
07584
07585
07586 }
07587 break;
07588
07589 case 248:
07590
07591
07592 #line 2361 "parse.y"
07593 {
07594
07595 (yyval.node) = (yyvsp[(2) - (3)].node);
07596
07597
07598
07599 }
07600 break;
07601
07602 case 253:
07603
07604
07605 #line 2377 "parse.y"
07606 {
07607 (yyval.node) = (yyvsp[(1) - (2)].node);
07608 }
07609 break;
07610
07611 case 254:
07612
07613
07614 #line 2381 "parse.y"
07615 {
07616
07617 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07618
07619
07620
07621 }
07622 break;
07623
07624 case 255:
07625
07626
07627 #line 2389 "parse.y"
07628 {
07629
07630 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07631
07632
07633
07634 }
07635 break;
07636
07637 case 256:
07638
07639
07640 #line 2399 "parse.y"
07641 {
07642
07643 value_expr((yyvsp[(1) - (1)].node));
07644 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07645
07646
07647
07648 }
07649 break;
07650
07651 case 257:
07652
07653
07654 #line 2408 "parse.y"
07655 {
07656
07657 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07658
07659
07660
07661 }
07662 break;
07663
07664 case 258:
07665
07666
07667 #line 2416 "parse.y"
07668 {
07669
07670 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07671 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07672
07673
07674
07675
07676 }
07677 break;
07678
07679 case 259:
07680
07681
07682 #line 2426 "parse.y"
07683 {
07684
07685 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07686 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07687
07688
07689
07690 }
07691 break;
07692
07693 case 261:
07694
07695
07696 #line 2443 "parse.y"
07697 {
07698 (yyval.val) = cmdarg_stack;
07699 CMDARG_PUSH(1);
07700 }
07701 break;
07702
07703 case 262:
07704
07705
07706 #line 2448 "parse.y"
07707 {
07708
07709 cmdarg_stack = (yyvsp[(1) - (2)].val);
07710 (yyval.node) = (yyvsp[(2) - (2)].node);
07711 }
07712 break;
07713
07714 case 263:
07715
07716
07717 #line 2456 "parse.y"
07718 {
07719
07720 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07721
07722
07723
07724 }
07725 break;
07726
07727 case 264:
07728
07729
07730 #line 2466 "parse.y"
07731 {
07732 (yyval.node) = (yyvsp[(2) - (2)].node);
07733 }
07734 break;
07735
07736 case 265:
07737
07738
07739 #line 2470 "parse.y"
07740 {
07741 (yyval.node) = 0;
07742 }
07743 break;
07744
07745 case 266:
07746
07747
07748 #line 2476 "parse.y"
07749 {
07750
07751 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07752
07753
07754
07755 }
07756 break;
07757
07758 case 267:
07759
07760
07761 #line 2484 "parse.y"
07762 {
07763
07764 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07765
07766
07767
07768 }
07769 break;
07770
07771 case 268:
07772
07773
07774 #line 2492 "parse.y"
07775 {
07776
07777 NODE *n1;
07778 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07779 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07780 }
07781 else {
07782 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07783 }
07784
07785
07786
07787 }
07788 break;
07789
07790 case 269:
07791
07792
07793 #line 2506 "parse.y"
07794 {
07795
07796 NODE *n1;
07797 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07798 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07799 }
07800 else {
07801 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07802 }
07803
07804
07805
07806 }
07807 break;
07808
07809 case 272:
07810
07811
07812 #line 2526 "parse.y"
07813 {
07814
07815 NODE *n1;
07816 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07817 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07818 }
07819 else {
07820 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07821 }
07822
07823
07824
07825 }
07826 break;
07827
07828 case 273:
07829
07830
07831 #line 2540 "parse.y"
07832 {
07833
07834 NODE *n1;
07835 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07836 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07837 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07838 }
07839 else {
07840 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07841 }
07842
07843
07844
07845 }
07846 break;
07847
07848 case 274:
07849
07850
07851 #line 2555 "parse.y"
07852 {
07853
07854 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07855
07856
07857
07858 }
07859 break;
07860
07861 case 285:
07862
07863
07864 #line 2575 "parse.y"
07865 {
07866
07867 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07868
07869
07870
07871 }
07872 break;
07873
07874 case 286:
07875
07876
07877 #line 2583 "parse.y"
07878 {
07879 (yyvsp[(1) - (1)].val) = cmdarg_stack;
07880 cmdarg_stack = 0;
07881
07882 (yyval.num) = ruby_sourceline;
07883
07884
07885 }
07886 break;
07887
07888 case 287:
07889
07890
07891 #line 2593 "parse.y"
07892 {
07893 cmdarg_stack = (yyvsp[(1) - (4)].val);
07894
07895 if ((yyvsp[(3) - (4)].node) == NULL) {
07896 (yyval.node) = NEW_NIL();
07897 }
07898 else {
07899 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07900 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07901 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07902 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07903 }
07904 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07905
07906
07907
07908 }
07909 break;
07910
07911 case 288:
07912
07913
07914 #line 2610 "parse.y"
07915 {lex_state = EXPR_ENDARG;}
07916 break;
07917
07918 case 289:
07919
07920
07921 #line 2611 "parse.y"
07922 {
07923
07924 (yyval.node) = 0;
07925
07926
07927
07928 }
07929 break;
07930
07931 case 290:
07932
07933
07934 #line 2619 "parse.y"
07935 {
07936 (yyvsp[(1) - (1)].val) = cmdarg_stack;
07937 cmdarg_stack = 0;
07938 }
07939 break;
07940
07941 case 291:
07942
07943
07944 #line 2623 "parse.y"
07945 {lex_state = EXPR_ENDARG;}
07946 break;
07947
07948 case 292:
07949
07950
07951 #line 2624 "parse.y"
07952 {
07953 cmdarg_stack = (yyvsp[(1) - (5)].val);
07954
07955 (yyval.node) = (yyvsp[(3) - (5)].node);
07956
07957
07958
07959 }
07960 break;
07961
07962 case 293:
07963
07964
07965 #line 2633 "parse.y"
07966 {
07967
07968 (yyval.node) = (yyvsp[(2) - (3)].node);
07969
07970
07971
07972 }
07973 break;
07974
07975 case 294:
07976
07977
07978 #line 2641 "parse.y"
07979 {
07980
07981 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07982
07983
07984
07985 }
07986 break;
07987
07988 case 295:
07989
07990
07991 #line 2649 "parse.y"
07992 {
07993
07994 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07995
07996
07997
07998 }
07999 break;
08000
08001 case 296:
08002
08003
08004 #line 2657 "parse.y"
08005 {
08006
08007 if ((yyvsp[(2) - (3)].node) == 0) {
08008 (yyval.node) = NEW_ZARRAY();
08009 }
08010 else {
08011 (yyval.node) = (yyvsp[(2) - (3)].node);
08012 }
08013
08014
08015
08016 }
08017 break;
08018
08019 case 297:
08020
08021
08022 #line 2670 "parse.y"
08023 {
08024
08025 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
08026
08027
08028
08029 }
08030 break;
08031
08032 case 298:
08033
08034
08035 #line 2678 "parse.y"
08036 {
08037
08038 (yyval.node) = NEW_RETURN(0);
08039
08040
08041
08042 }
08043 break;
08044
08045 case 299:
08046
08047
08048 #line 2686 "parse.y"
08049 {
08050
08051 (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
08052
08053
08054
08055 }
08056 break;
08057
08058 case 300:
08059
08060
08061 #line 2694 "parse.y"
08062 {
08063
08064 (yyval.node) = NEW_YIELD(0);
08065
08066
08067
08068 }
08069 break;
08070
08071 case 301:
08072
08073
08074 #line 2702 "parse.y"
08075 {
08076
08077 (yyval.node) = NEW_YIELD(0);
08078
08079
08080
08081 }
08082 break;
08083
08084 case 302:
08085
08086
08087 #line 2709 "parse.y"
08088 {in_defined = 1;}
08089 break;
08090
08091 case 303:
08092
08093
08094 #line 2710 "parse.y"
08095 {
08096
08097 in_defined = 0;
08098 (yyval.node) = new_defined((yyvsp[(5) - (6)].node));
08099
08100
08101
08102
08103 }
08104 break;
08105
08106 case 304:
08107
08108
08109 #line 2720 "parse.y"
08110 {
08111
08112 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
08113
08114
08115
08116 }
08117 break;
08118
08119 case 305:
08120
08121
08122 #line 2728 "parse.y"
08123 {
08124
08125 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
08126
08127
08128
08129 }
08130 break;
08131
08132 case 306:
08133
08134
08135 #line 2736 "parse.y"
08136 {
08137
08138 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
08139 (yyval.node) = (yyvsp[(2) - (2)].node);
08140
08141
08142
08143
08144 }
08145 break;
08146
08147 case 308:
08148
08149
08150 #line 2747 "parse.y"
08151 {
08152
08153 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
08154 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
08155 (yyval.node) = (yyvsp[(2) - (2)].node);
08156
08157
08158
08159 }
08160 break;
08161
08162 case 309:
08163
08164
08165 #line 2757 "parse.y"
08166 {
08167 (yyval.node) = (yyvsp[(2) - (2)].node);
08168 }
08169 break;
08170
08171 case 310:
08172
08173
08174 #line 2764 "parse.y"
08175 {
08176
08177 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08178 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08179
08180
08181
08182 }
08183 break;
08184
08185 case 311:
08186
08187
08188 #line 2776 "parse.y"
08189 {
08190
08191 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08192 fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08193
08194
08195
08196 }
08197 break;
08198
08199 case 312:
08200
08201
08202 #line 2784 "parse.y"
08203 {COND_PUSH(1);}
08204 break;
08205
08206 case 313:
08207
08208
08209 #line 2784 "parse.y"
08210 {COND_POP();}
08211 break;
08212
08213 case 314:
08214
08215
08216 #line 2787 "parse.y"
08217 {
08218
08219 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08220 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08221
08222
08223
08224 }
08225 break;
08226
08227 case 315:
08228
08229
08230 #line 2795 "parse.y"
08231 {COND_PUSH(1);}
08232 break;
08233
08234 case 316:
08235
08236
08237 #line 2795 "parse.y"
08238 {COND_POP();}
08239 break;
08240
08241 case 317:
08242
08243
08244 #line 2798 "parse.y"
08245 {
08246
08247 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08248 fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08249
08250
08251
08252 }
08253 break;
08254
08255 case 318:
08256
08257
08258 #line 2809 "parse.y"
08259 {
08260
08261 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08262 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08263
08264
08265
08266 }
08267 break;
08268
08269 case 319:
08270
08271
08272 #line 2818 "parse.y"
08273 {
08274
08275 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08276
08277
08278
08279 }
08280 break;
08281
08282 case 320:
08283
08284
08285 #line 2826 "parse.y"
08286 {COND_PUSH(1);}
08287 break;
08288
08289 case 321:
08290
08291
08292 #line 2828 "parse.y"
08293 {COND_POP();}
08294 break;
08295
08296 case 322:
08297
08298
08299 #line 2831 "parse.y"
08300 {
08301
08302
08303
08304
08305
08306
08307
08308
08309
08310
08311 ID id = internal_id();
08312 ID *tbl = ALLOC_N(ID, 2);
08313 NODE *m = NEW_ARGS_AUX(0, 0);
08314 NODE *args, *scope;
08315
08316 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08317
08318
08319
08320
08321 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08322 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08323 m->nd_next = block_append(
08324 NEW_IF(
08325 NEW_NODE(NODE_AND,
08326 NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0),
08327 idEq, one),
08328 NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero),
08329 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08330 0),
08331 NEW_DASGN_CURR(id,
08332 NEW_CALL(NEW_DVAR(id), idAREF, zero)),
08333 0),
08334 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08335
08336 args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
08337 }
08338 else {
08339 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08340 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08341 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08342 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08343 m->nd_plen = 1;
08344 m->nd_next = (yyvsp[(2) - (9)].node);
08345 args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
08346 }
08347 else {
08348 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08349 args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
08350 }
08351 }
08352 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08353 tbl[0] = 1; tbl[1] = id;
08354 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08355 fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08356
08357
08358
08359 }
08360 break;
08361
08362 case 323:
08363
08364
08365 #line 2892 "parse.y"
08366 {
08367 if (in_def || in_single)
08368 yyerror("class definition in method body");
08369 local_push(0);
08370
08371 (yyval.num) = ruby_sourceline;
08372
08373
08374 }
08375 break;
08376
08377 case 324:
08378
08379
08380 #line 2903 "parse.y"
08381 {
08382
08383 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08384 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08385
08386
08387
08388 local_pop();
08389 }
08390 break;
08391
08392 case 325:
08393
08394
08395 #line 2913 "parse.y"
08396 {
08397 (yyval.num) = in_def;
08398 in_def = 0;
08399 }
08400 break;
08401
08402 case 326:
08403
08404
08405 #line 2918 "parse.y"
08406 {
08407 (yyval.num) = in_single;
08408 in_single = 0;
08409 local_push(0);
08410 }
08411 break;
08412
08413 case 327:
08414
08415
08416 #line 2925 "parse.y"
08417 {
08418
08419 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08420 fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08421
08422
08423
08424 local_pop();
08425 in_def = (yyvsp[(4) - (8)].num);
08426 in_single = (yyvsp[(6) - (8)].num);
08427 }
08428 break;
08429
08430 case 328:
08431
08432
08433 #line 2937 "parse.y"
08434 {
08435 if (in_def || in_single)
08436 yyerror("module definition in method body");
08437 local_push(0);
08438
08439 (yyval.num) = ruby_sourceline;
08440
08441
08442 }
08443 break;
08444
08445 case 329:
08446
08447
08448 #line 2948 "parse.y"
08449 {
08450
08451 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08452 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08453
08454
08455
08456 local_pop();
08457 }
08458 break;
08459
08460 case 330:
08461
08462
08463 #line 2958 "parse.y"
08464 {
08465 (yyval.id) = cur_mid;
08466 cur_mid = (yyvsp[(2) - (2)].id);
08467 in_def++;
08468 local_push(0);
08469 }
08470 break;
08471
08472 case 331:
08473
08474
08475 #line 2967 "parse.y"
08476 {
08477
08478 NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08479 reduce_nodes(&body);
08480 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08481 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08482
08483
08484
08485 local_pop();
08486 in_def--;
08487 cur_mid = (yyvsp[(3) - (6)].id);
08488 }
08489 break;
08490
08491 case 332:
08492
08493
08494 #line 2980 "parse.y"
08495 {lex_state = EXPR_FNAME;}
08496 break;
08497
08498 case 333:
08499
08500
08501 #line 2981 "parse.y"
08502 {
08503 in_single++;
08504 lex_state = EXPR_ENDFN;
08505 local_push(0);
08506 }
08507 break;
08508
08509 case 334:
08510
08511
08512 #line 2989 "parse.y"
08513 {
08514
08515 NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08516 reduce_nodes(&body);
08517 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08518 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08519
08520
08521
08522 local_pop();
08523 in_single--;
08524 }
08525 break;
08526
08527 case 335:
08528
08529
08530 #line 3002 "parse.y"
08531 {
08532
08533 (yyval.node) = NEW_BREAK(0);
08534
08535
08536
08537 }
08538 break;
08539
08540 case 336:
08541
08542
08543 #line 3010 "parse.y"
08544 {
08545
08546 (yyval.node) = NEW_NEXT(0);
08547
08548
08549
08550 }
08551 break;
08552
08553 case 337:
08554
08555
08556 #line 3018 "parse.y"
08557 {
08558
08559 (yyval.node) = NEW_REDO();
08560
08561
08562
08563 }
08564 break;
08565
08566 case 338:
08567
08568
08569 #line 3026 "parse.y"
08570 {
08571
08572 (yyval.node) = NEW_RETRY();
08573
08574
08575
08576 }
08577 break;
08578
08579 case 339:
08580
08581
08582 #line 3036 "parse.y"
08583 {
08584
08585 value_expr((yyvsp[(1) - (1)].node));
08586 (yyval.node) = (yyvsp[(1) - (1)].node);
08587 if (!(yyval.node)) (yyval.node) = NEW_NIL();
08588
08589
08590
08591 }
08592 break;
08593
08594 case 340:
08595
08596
08597 #line 3048 "parse.y"
08598 {
08599 token_info_push("begin");
08600 }
08601 break;
08602
08603 case 341:
08604
08605
08606 #line 3054 "parse.y"
08607 {
08608 token_info_push("if");
08609 }
08610 break;
08611
08612 case 342:
08613
08614
08615 #line 3060 "parse.y"
08616 {
08617 token_info_push("unless");
08618 }
08619 break;
08620
08621 case 343:
08622
08623
08624 #line 3066 "parse.y"
08625 {
08626 token_info_push("while");
08627 }
08628 break;
08629
08630 case 344:
08631
08632
08633 #line 3072 "parse.y"
08634 {
08635 token_info_push("until");
08636 }
08637 break;
08638
08639 case 345:
08640
08641
08642 #line 3078 "parse.y"
08643 {
08644 token_info_push("case");
08645 }
08646 break;
08647
08648 case 346:
08649
08650
08651 #line 3084 "parse.y"
08652 {
08653 token_info_push("for");
08654 }
08655 break;
08656
08657 case 347:
08658
08659
08660 #line 3090 "parse.y"
08661 {
08662 token_info_push("class");
08663 }
08664 break;
08665
08666 case 348:
08667
08668
08669 #line 3096 "parse.y"
08670 {
08671 token_info_push("module");
08672 }
08673 break;
08674
08675 case 349:
08676
08677
08678 #line 3102 "parse.y"
08679 {
08680 token_info_push("def");
08681
08682 (yyval.num) = ruby_sourceline;
08683
08684
08685 }
08686 break;
08687
08688 case 350:
08689
08690
08691 #line 3112 "parse.y"
08692 {
08693 token_info_pop("end");
08694 }
08695 break;
08696
08697 case 357:
08698
08699
08700 #line 3142 "parse.y"
08701 {
08702
08703 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08704 fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08705
08706
08707
08708 }
08709 break;
08710
08711 case 359:
08712
08713
08714 #line 3154 "parse.y"
08715 {
08716
08717 (yyval.node) = (yyvsp[(2) - (2)].node);
08718
08719
08720
08721 }
08722 break;
08723
08724 case 362:
08725
08726
08727 #line 3168 "parse.y"
08728 {
08729 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08730
08731
08732
08733
08734 }
08735 break;
08736
08737 case 363:
08738
08739
08740 #line 3176 "parse.y"
08741 {
08742
08743 (yyval.node) = (yyvsp[(2) - (3)].node);
08744
08745
08746
08747 }
08748 break;
08749
08750 case 364:
08751
08752
08753 #line 3186 "parse.y"
08754 {
08755
08756 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08757
08758
08759
08760 }
08761 break;
08762
08763 case 365:
08764
08765
08766 #line 3194 "parse.y"
08767 {
08768
08769 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08770
08771
08772
08773 }
08774 break;
08775
08776 case 366:
08777
08778
08779 #line 3204 "parse.y"
08780 {
08781
08782 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08783
08784
08785
08786 }
08787 break;
08788
08789 case 367:
08790
08791
08792 #line 3212 "parse.y"
08793 {
08794 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08795
08796 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08797
08798
08799
08800 }
08801 break;
08802
08803 case 368:
08804
08805
08806 #line 3221 "parse.y"
08807 {
08808 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08809
08810 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08811
08812
08813
08814 }
08815 break;
08816
08817 case 369:
08818
08819
08820 #line 3230 "parse.y"
08821 {
08822
08823 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08824
08825
08826
08827 }
08828 break;
08829
08830 case 370:
08831
08832
08833 #line 3238 "parse.y"
08834 {
08835
08836 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08837
08838
08839
08840 }
08841 break;
08842
08843 case 371:
08844
08845
08846 #line 3246 "parse.y"
08847 {
08848 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08849
08850 (yyval.node) = NEW_MASGN(0, (yyval.node));
08851
08852
08853
08854 }
08855 break;
08856
08857 case 372:
08858
08859
08860 #line 3255 "parse.y"
08861 {
08862 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08863
08864 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08865
08866
08867
08868
08869
08870
08871 }
08872 break;
08873
08874 case 373:
08875
08876
08877 #line 3267 "parse.y"
08878 {
08879
08880 (yyval.node) = NEW_MASGN(0, -1);
08881
08882
08883
08884 }
08885 break;
08886
08887 case 374:
08888
08889
08890 #line 3275 "parse.y"
08891 {
08892
08893 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08894
08895
08896
08897 }
08898 break;
08899
08900 case 375:
08901
08902
08903 #line 3286 "parse.y"
08904 {
08905 (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
08906 }
08907 break;
08908
08909 case 376:
08910
08911
08912 #line 3290 "parse.y"
08913 {
08914 (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
08915 }
08916 break;
08917
08918 case 377:
08919
08920
08921 #line 3294 "parse.y"
08922 {
08923 (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
08924 }
08925 break;
08926
08927 case 378:
08928
08929
08930 #line 3298 "parse.y"
08931 {
08932 (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
08933 }
08934 break;
08935
08936 case 379:
08937
08938
08939 #line 3304 "parse.y"
08940 {
08941 (yyval.node) = (yyvsp[(2) - (2)].node);
08942 }
08943 break;
08944
08945 case 380:
08946
08947
08948 #line 3308 "parse.y"
08949 {
08950 (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
08951 }
08952 break;
08953
08954 case 381:
08955
08956
08957 #line 3314 "parse.y"
08958 {
08959 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
08960 }
08961 break;
08962
08963 case 382:
08964
08965
08966 #line 3318 "parse.y"
08967 {
08968 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
08969 }
08970 break;
08971
08972 case 383:
08973
08974
08975 #line 3322 "parse.y"
08976 {
08977 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
08978 }
08979 break;
08980
08981 case 384:
08982
08983
08984 #line 3326 "parse.y"
08985 {
08986 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
08987 }
08988 break;
08989
08990 case 385:
08991
08992
08993 #line 3330 "parse.y"
08994 {
08995 (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
08996 }
08997 break;
08998
08999 case 386:
09000
09001
09002 #line 3334 "parse.y"
09003 {
09004 (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
09005
09006
09007
09008
09009 }
09010 break;
09011
09012 case 387:
09013
09014
09015 #line 3342 "parse.y"
09016 {
09017 (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09018 }
09019 break;
09020
09021 case 388:
09022
09023
09024 #line 3346 "parse.y"
09025 {
09026 (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
09027 }
09028 break;
09029
09030 case 389:
09031
09032
09033 #line 3350 "parse.y"
09034 {
09035 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
09036 }
09037 break;
09038
09039 case 390:
09040
09041
09042 #line 3354 "parse.y"
09043 {
09044 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09045 }
09046 break;
09047
09048 case 391:
09049
09050
09051 #line 3358 "parse.y"
09052 {
09053 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
09054 }
09055 break;
09056
09057 case 392:
09058
09059
09060 #line 3362 "parse.y"
09061 {
09062 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
09063 }
09064 break;
09065
09066 case 393:
09067
09068
09069 #line 3366 "parse.y"
09070 {
09071 (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
09072 }
09073 break;
09074
09075 case 394:
09076
09077
09078 #line 3370 "parse.y"
09079 {
09080 (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
09081 }
09082 break;
09083
09084 case 395:
09085
09086
09087 #line 3374 "parse.y"
09088 {
09089 (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
09090 }
09091 break;
09092
09093 case 397:
09094
09095
09096 #line 3381 "parse.y"
09097 {
09098 command_start = TRUE;
09099 }
09100 break;
09101
09102 case 398:
09103
09104
09105 #line 3387 "parse.y"
09106 {
09107
09108 (yyval.node) = 0;
09109
09110
09111
09112
09113 }
09114 break;
09115
09116 case 399:
09117
09118
09119 #line 3396 "parse.y"
09120 {
09121
09122 (yyval.node) = 0;
09123
09124
09125
09126
09127 }
09128 break;
09129
09130 case 400:
09131
09132
09133 #line 3405 "parse.y"
09134 {
09135
09136 (yyval.node) = (yyvsp[(2) - (4)].node);
09137
09138
09139
09140 }
09141 break;
09142
09143 case 401:
09144
09145
09146 #line 3416 "parse.y"
09147 {
09148 (yyval.node) = 0;
09149 }
09150 break;
09151
09152 case 402:
09153
09154
09155 #line 3420 "parse.y"
09156 {
09157
09158 (yyval.node) = 0;
09159
09160
09161
09162 }
09163 break;
09164
09165 case 405:
09166
09167
09168 #line 3446 "parse.y"
09169 {
09170 new_bv(get_id((yyvsp[(1) - (1)].id)));
09171
09172
09173
09174
09175 }
09176 break;
09177
09178 case 406:
09179
09180
09181 #line 3454 "parse.y"
09182 {
09183 (yyval.node) = 0;
09184 }
09185 break;
09186
09187 case 407:
09188
09189
09190 #line 3459 "parse.y"
09191 {
09192 (yyval.vars) = dyna_push();
09193 }
09194 break;
09195
09196 case 408:
09197
09198
09199 #line 3462 "parse.y"
09200 {
09201 (yyval.num) = lpar_beg;
09202 lpar_beg = ++paren_nest;
09203 }
09204 break;
09205
09206 case 409:
09207
09208
09209 #line 3467 "parse.y"
09210 {
09211 (yyval.num) = ruby_sourceline;
09212 }
09213 break;
09214
09215 case 410:
09216
09217
09218 #line 3471 "parse.y"
09219 {
09220 lpar_beg = (yyvsp[(2) - (5)].num);
09221
09222 (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
09223 nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09224
09225
09226
09227 dyna_pop((yyvsp[(1) - (5)].vars));
09228 }
09229 break;
09230
09231 case 411:
09232
09233
09234 #line 3484 "parse.y"
09235 {
09236
09237 (yyval.node) = (yyvsp[(2) - (4)].node);
09238
09239
09240
09241 }
09242 break;
09243
09244 case 412:
09245
09246
09247 #line 3492 "parse.y"
09248 {
09249 (yyval.node) = (yyvsp[(1) - (1)].node);
09250 }
09251 break;
09252
09253 case 413:
09254
09255
09256 #line 3498 "parse.y"
09257 {
09258 (yyval.node) = (yyvsp[(2) - (3)].node);
09259 }
09260 break;
09261
09262 case 414:
09263
09264
09265 #line 3502 "parse.y"
09266 {
09267 (yyval.node) = (yyvsp[(2) - (3)].node);
09268 }
09269 break;
09270
09271 case 415:
09272
09273
09274 #line 3508 "parse.y"
09275 {
09276 (yyvsp[(1) - (1)].vars) = dyna_push();
09277
09278 (yyval.num) = ruby_sourceline;
09279
09280 }
09281 break;
09282
09283 case 416:
09284
09285
09286 #line 3517 "parse.y"
09287 {
09288
09289 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09290 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09291
09292
09293
09294 dyna_pop((yyvsp[(1) - (5)].vars));
09295 }
09296 break;
09297
09298 case 417:
09299
09300
09301 #line 3529 "parse.y"
09302 {
09303
09304 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09305 compile_error(PARSER_ARG "block given to yield");
09306 }
09307 else {
09308 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09309 }
09310 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09311 (yyval.node) = (yyvsp[(2) - (2)].node);
09312 fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09313
09314
09315
09316 }
09317 break;
09318
09319 case 418:
09320
09321
09322 #line 3545 "parse.y"
09323 {
09324
09325 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09326
09327
09328
09329
09330 }
09331 break;
09332
09333 case 419:
09334
09335
09336 #line 3554 "parse.y"
09337 {
09338
09339 block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09340 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
09341 (yyval.node) = (yyvsp[(5) - (5)].node);
09342 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
09343
09344
09345
09346
09347 }
09348 break;
09349
09350 case 420:
09351
09352
09353 #line 3566 "parse.y"
09354 {
09355
09356 block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09357 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
09358 (yyval.node) = (yyvsp[(5) - (5)].node);
09359 fixpos((yyval.node), (yyvsp[(1) - (5)].node));
09360
09361
09362
09363
09364 }
09365 break;
09366
09367 case 421:
09368
09369
09370 #line 3580 "parse.y"
09371 {
09372
09373 (yyval.node) = (yyvsp[(1) - (2)].node);
09374 (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
09375
09376
09377
09378 }
09379 break;
09380
09381 case 422:
09382
09383
09384 #line 3589 "parse.y"
09385 {
09386
09387 (yyval.num) = ruby_sourceline;
09388
09389 }
09390 break;
09391
09392 case 423:
09393
09394
09395 #line 3595 "parse.y"
09396 {
09397
09398 (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
09399 nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09400
09401
09402
09403
09404 }
09405 break;
09406
09407 case 424:
09408
09409
09410 #line 3605 "parse.y"
09411 {
09412
09413 (yyval.num) = ruby_sourceline;
09414
09415 }
09416 break;
09417
09418 case 425:
09419
09420
09421 #line 3611 "parse.y"
09422 {
09423
09424 (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
09425 nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09426
09427
09428
09429
09430 }
09431 break;
09432
09433 case 426:
09434
09435
09436 #line 3621 "parse.y"
09437 {
09438
09439 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09440
09441
09442
09443 }
09444 break;
09445
09446 case 427:
09447
09448
09449 #line 3629 "parse.y"
09450 {
09451
09452 (yyval.num) = ruby_sourceline;
09453
09454 }
09455 break;
09456
09457 case 428:
09458
09459
09460 #line 3635 "parse.y"
09461 {
09462
09463 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
09464 nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
09465
09466
09467
09468
09469
09470 }
09471 break;
09472
09473 case 429:
09474
09475
09476 #line 3646 "parse.y"
09477 {
09478
09479 (yyval.num) = ruby_sourceline;
09480
09481 }
09482 break;
09483
09484 case 430:
09485
09486
09487 #line 3652 "parse.y"
09488 {
09489
09490 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
09491 nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
09492
09493
09494
09495
09496
09497 }
09498 break;
09499
09500 case 431:
09501
09502
09503 #line 3663 "parse.y"
09504 {
09505
09506 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09507
09508
09509
09510 }
09511 break;
09512
09513 case 432:
09514
09515
09516 #line 3671 "parse.y"
09517 {
09518
09519 (yyval.node) = NEW_ZSUPER();
09520
09521
09522
09523 }
09524 break;
09525
09526 case 433:
09527
09528
09529 #line 3679 "parse.y"
09530 {
09531
09532 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09533 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09534 else
09535 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09536 fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09537
09538
09539
09540 }
09541 break;
09542
09543 case 434:
09544
09545
09546 #line 3693 "parse.y"
09547 {
09548 (yyvsp[(1) - (1)].vars) = dyna_push();
09549
09550 (yyval.num) = ruby_sourceline;
09551
09552
09553 }
09554 break;
09555
09556 case 435:
09557
09558
09559 #line 3702 "parse.y"
09560 {
09561
09562 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09563 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09564
09565
09566
09567 dyna_pop((yyvsp[(1) - (5)].vars));
09568 }
09569 break;
09570
09571 case 436:
09572
09573
09574 #line 3712 "parse.y"
09575 {
09576 (yyvsp[(1) - (1)].vars) = dyna_push();
09577
09578 (yyval.num) = ruby_sourceline;
09579
09580
09581 }
09582 break;
09583
09584 case 437:
09585
09586
09587 #line 3721 "parse.y"
09588 {
09589
09590 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09591 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09592
09593
09594
09595 dyna_pop((yyvsp[(1) - (5)].vars));
09596 }
09597 break;
09598
09599 case 438:
09600
09601
09602 #line 3735 "parse.y"
09603 {
09604
09605 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09606
09607
09608
09609 }
09610 break;
09611
09612 case 441:
09613
09614
09615 #line 3751 "parse.y"
09616 {
09617
09618 if ((yyvsp[(3) - (6)].node)) {
09619 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09620 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09621 }
09622 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09623 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09624
09625
09626
09627
09628
09629
09630
09631 }
09632 break;
09633
09634 case 443:
09635
09636
09637 #line 3771 "parse.y"
09638 {
09639
09640 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09641
09642
09643
09644 }
09645 break;
09646
09647 case 444:
09648
09649
09650 #line 3779 "parse.y"
09651 {
09652
09653 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09654
09655
09656
09657 }
09658 break;
09659
09660 case 446:
09661
09662
09663 #line 3790 "parse.y"
09664 {
09665 (yyval.node) = (yyvsp[(2) - (2)].node);
09666 }
09667 break;
09668
09669 case 448:
09670
09671
09672 #line 3797 "parse.y"
09673 {
09674
09675 (yyval.node) = (yyvsp[(2) - (2)].node);
09676
09677
09678
09679 }
09680 break;
09681
09682 case 451:
09683
09684
09685 #line 3809 "parse.y"
09686 {
09687
09688 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09689
09690
09691
09692 }
09693 break;
09694
09695 case 453:
09696
09697
09698 #line 3820 "parse.y"
09699 {
09700
09701 NODE *node = (yyvsp[(1) - (1)].node);
09702 if (!node) {
09703 node = NEW_STR(STR_NEW0());
09704 }
09705 else {
09706 node = evstr2dstr(node);
09707 }
09708 (yyval.node) = node;
09709
09710
09711
09712 }
09713 break;
09714
09715 case 456:
09716
09717
09718 #line 3839 "parse.y"
09719 {
09720
09721 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09722
09723
09724
09725 }
09726 break;
09727
09728 case 457:
09729
09730
09731 #line 3849 "parse.y"
09732 {
09733
09734 (yyval.node) = (yyvsp[(2) - (3)].node);
09735
09736
09737
09738 }
09739 break;
09740
09741 case 458:
09742
09743
09744 #line 3859 "parse.y"
09745 {
09746
09747 NODE *node = (yyvsp[(2) - (3)].node);
09748 if (!node) {
09749 node = NEW_XSTR(STR_NEW0());
09750 }
09751 else {
09752 switch (nd_type(node)) {
09753 case NODE_STR:
09754 nd_set_type(node, NODE_XSTR);
09755 break;
09756 case NODE_DSTR:
09757 nd_set_type(node, NODE_DXSTR);
09758 break;
09759 default:
09760 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09761 break;
09762 }
09763 }
09764 (yyval.node) = node;
09765
09766
09767
09768 }
09769 break;
09770
09771 case 459:
09772
09773
09774 #line 3886 "parse.y"
09775 {
09776
09777 int options = (yyvsp[(3) - (3)].num);
09778 NODE *node = (yyvsp[(2) - (3)].node);
09779 NODE *list, *prev;
09780 if (!node) {
09781 node = NEW_LIT(reg_compile(STR_NEW0(), options));
09782 }
09783 else switch (nd_type(node)) {
09784 case NODE_STR:
09785 {
09786 VALUE src = node->nd_lit;
09787 nd_set_type(node, NODE_LIT);
09788 node->nd_lit = reg_compile(src, options);
09789 }
09790 break;
09791 default:
09792 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09793 case NODE_DSTR:
09794 if (options & RE_OPTION_ONCE) {
09795 nd_set_type(node, NODE_DREGX_ONCE);
09796 }
09797 else {
09798 nd_set_type(node, NODE_DREGX);
09799 }
09800 node->nd_cflag = options & RE_OPTION_MASK;
09801 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09802 for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09803 if (nd_type(list->nd_head) == NODE_STR) {
09804 VALUE tail = list->nd_head->nd_lit;
09805 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09806 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09807 if (!literal_concat0(parser, lit, tail)) {
09808 node = 0;
09809 break;
09810 }
09811 rb_str_resize(tail, 0);
09812 prev->nd_next = list->nd_next;
09813 rb_gc_force_recycle((VALUE)list->nd_head);
09814 rb_gc_force_recycle((VALUE)list);
09815 list = prev;
09816 }
09817 else {
09818 prev = list;
09819 }
09820 }
09821 else {
09822 prev = 0;
09823 }
09824 }
09825 if (!node->nd_next) {
09826 VALUE src = node->nd_lit;
09827 nd_set_type(node, NODE_LIT);
09828 node->nd_lit = reg_compile(src, options);
09829 }
09830 break;
09831 }
09832 (yyval.node) = node;
09833
09834
09835
09836 }
09837 break;
09838
09839 case 460:
09840
09841
09842 #line 3951 "parse.y"
09843 {
09844
09845 (yyval.node) = NEW_ZARRAY();
09846
09847
09848
09849
09850 }
09851 break;
09852
09853 case 461:
09854
09855
09856 #line 3960 "parse.y"
09857 {
09858
09859 (yyval.node) = (yyvsp[(2) - (3)].node);
09860
09861
09862
09863 }
09864 break;
09865
09866 case 462:
09867
09868
09869 #line 3970 "parse.y"
09870 {
09871
09872 (yyval.node) = 0;
09873
09874
09875
09876 }
09877 break;
09878
09879 case 463:
09880
09881
09882 #line 3978 "parse.y"
09883 {
09884
09885 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09886
09887
09888
09889 }
09890 break;
09891
09892 case 465:
09893
09894
09895 #line 3996 "parse.y"
09896 {
09897
09898 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09899
09900
09901
09902 }
09903 break;
09904
09905 case 466:
09906
09907
09908 #line 4006 "parse.y"
09909 {
09910
09911 (yyval.node) = NEW_ZARRAY();
09912
09913
09914
09915
09916 }
09917 break;
09918
09919 case 467:
09920
09921
09922 #line 4015 "parse.y"
09923 {
09924
09925 (yyval.node) = (yyvsp[(2) - (3)].node);
09926
09927
09928
09929 }
09930 break;
09931
09932 case 468:
09933
09934
09935 #line 4025 "parse.y"
09936 {
09937
09938 (yyval.node) = 0;
09939
09940
09941
09942 }
09943 break;
09944
09945 case 469:
09946
09947
09948 #line 4033 "parse.y"
09949 {
09950
09951 (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
09952 nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
09953 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09954
09955
09956
09957 }
09958 break;
09959
09960 case 470:
09961
09962
09963 #line 4045 "parse.y"
09964 {
09965
09966 (yyval.node) = NEW_ZARRAY();
09967
09968
09969
09970
09971 }
09972 break;
09973
09974 case 471:
09975
09976
09977 #line 4054 "parse.y"
09978 {
09979
09980 (yyval.node) = (yyvsp[(2) - (3)].node);
09981
09982
09983
09984 }
09985 break;
09986
09987 case 472:
09988
09989
09990 #line 4064 "parse.y"
09991 {
09992
09993 (yyval.node) = NEW_ZARRAY();
09994
09995
09996
09997
09998 }
09999 break;
10000
10001 case 473:
10002
10003
10004 #line 4073 "parse.y"
10005 {
10006
10007 (yyval.node) = (yyvsp[(2) - (3)].node);
10008
10009
10010
10011 }
10012 break;
10013
10014 case 474:
10015
10016
10017 #line 4083 "parse.y"
10018 {
10019
10020 (yyval.node) = 0;
10021
10022
10023
10024 }
10025 break;
10026
10027 case 475:
10028
10029
10030 #line 4091 "parse.y"
10031 {
10032
10033 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10034
10035
10036
10037 }
10038 break;
10039
10040 case 476:
10041
10042
10043 #line 4101 "parse.y"
10044 {
10045
10046 (yyval.node) = 0;
10047
10048
10049
10050 }
10051 break;
10052
10053 case 477:
10054
10055
10056 #line 4109 "parse.y"
10057 {
10058
10059 VALUE lit;
10060 lit = (yyvsp[(2) - (3)].node)->nd_lit;
10061 (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
10062 nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
10063 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10064
10065
10066
10067 }
10068 break;
10069
10070 case 478:
10071
10072
10073 #line 4123 "parse.y"
10074 {
10075
10076 (yyval.node) = 0;
10077
10078
10079
10080 }
10081 break;
10082
10083 case 479:
10084
10085
10086 #line 4131 "parse.y"
10087 {
10088
10089 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10090
10091
10092
10093 }
10094 break;
10095
10096 case 480:
10097
10098
10099 #line 4141 "parse.y"
10100 {
10101
10102 (yyval.node) = 0;
10103
10104
10105
10106 }
10107 break;
10108
10109 case 481:
10110
10111
10112 #line 4149 "parse.y"
10113 {
10114
10115 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10116
10117
10118
10119 }
10120 break;
10121
10122 case 482:
10123
10124
10125 #line 4159 "parse.y"
10126 {
10127
10128 (yyval.node) = 0;
10129
10130
10131
10132 }
10133 break;
10134
10135 case 483:
10136
10137
10138 #line 4167 "parse.y"
10139 {
10140
10141 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
10142 if (!head) {
10143 (yyval.node) = tail;
10144 }
10145 else if (!tail) {
10146 (yyval.node) = head;
10147 }
10148 else {
10149 switch (nd_type(head)) {
10150 case NODE_STR:
10151 nd_set_type(head, NODE_DSTR);
10152 break;
10153 case NODE_DSTR:
10154 break;
10155 default:
10156 head = list_append(NEW_DSTR(Qnil), head);
10157 break;
10158 }
10159 (yyval.node) = list_append(head, tail);
10160 }
10161
10162
10163
10164 }
10165 break;
10166
10167 case 485:
10168
10169
10170 #line 4197 "parse.y"
10171 {
10172 (yyval.node) = lex_strterm;
10173 lex_strterm = 0;
10174 lex_state = EXPR_BEG;
10175 }
10176 break;
10177
10178 case 486:
10179
10180
10181 #line 4203 "parse.y"
10182 {
10183
10184 lex_strterm = (yyvsp[(2) - (3)].node);
10185 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
10186
10187
10188
10189
10190 }
10191 break;
10192
10193 case 487:
10194
10195
10196 #line 4213 "parse.y"
10197 {
10198 (yyvsp[(1) - (1)].val) = cond_stack;
10199 (yyval.val) = cmdarg_stack;
10200 cond_stack = 0;
10201 cmdarg_stack = 0;
10202 }
10203 break;
10204
10205 case 488:
10206
10207
10208 #line 4219 "parse.y"
10209 {
10210 (yyval.node) = lex_strterm;
10211 lex_strterm = 0;
10212 lex_state = EXPR_BEG;
10213 }
10214 break;
10215
10216 case 489:
10217
10218
10219 #line 4224 "parse.y"
10220 {
10221 (yyval.num) = brace_nest;
10222 brace_nest = 0;
10223 }
10224 break;
10225
10226 case 490:
10227
10228
10229 #line 4229 "parse.y"
10230 {
10231 cond_stack = (yyvsp[(1) - (6)].val);
10232 cmdarg_stack = (yyvsp[(2) - (6)].val);
10233 lex_strterm = (yyvsp[(3) - (6)].node);
10234 brace_nest = (yyvsp[(4) - (6)].num);
10235
10236 if ((yyvsp[(5) - (6)].node)) (yyvsp[(5) - (6)].node)->flags &= ~NODE_FL_NEWLINE;
10237 (yyval.node) = new_evstr((yyvsp[(5) - (6)].node));
10238
10239
10240
10241 }
10242 break;
10243
10244 case 491:
10245
10246
10247 #line 4244 "parse.y"
10248 {
10249
10250 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
10251
10252
10253
10254 }
10255 break;
10256
10257 case 492:
10258
10259
10260 #line 4252 "parse.y"
10261 {
10262
10263 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
10264
10265
10266
10267 }
10268 break;
10269
10270 case 493:
10271
10272
10273 #line 4260 "parse.y"
10274 {
10275
10276 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
10277
10278
10279
10280 }
10281 break;
10282
10283 case 495:
10284
10285
10286 #line 4271 "parse.y"
10287 {
10288 lex_state = EXPR_END;
10289
10290 (yyval.id) = (yyvsp[(2) - (2)].id);
10291
10292
10293
10294 }
10295 break;
10296
10297 case 500:
10298
10299
10300 #line 4288 "parse.y"
10301 {
10302 lex_state = EXPR_END;
10303
10304 (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
10305
10306
10307
10308 }
10309 break;
10310
10311 case 502:
10312
10313
10314 #line 4300 "parse.y"
10315 {
10316
10317 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10318
10319
10320
10321 }
10322 break;
10323
10324 case 512:
10325
10326
10327 #line 4322 "parse.y"
10328 {ifndef_ripper((yyval.id) = keyword_nil);}
10329 break;
10330
10331 case 513:
10332
10333
10334 #line 4323 "parse.y"
10335 {ifndef_ripper((yyval.id) = keyword_self);}
10336 break;
10337
10338 case 514:
10339
10340
10341 #line 4324 "parse.y"
10342 {ifndef_ripper((yyval.id) = keyword_true);}
10343 break;
10344
10345 case 515:
10346
10347
10348 #line 4325 "parse.y"
10349 {ifndef_ripper((yyval.id) = keyword_false);}
10350 break;
10351
10352 case 516:
10353
10354
10355 #line 4326 "parse.y"
10356 {ifndef_ripper((yyval.id) = keyword__FILE__);}
10357 break;
10358
10359 case 517:
10360
10361
10362 #line 4327 "parse.y"
10363 {ifndef_ripper((yyval.id) = keyword__LINE__);}
10364 break;
10365
10366 case 518:
10367
10368
10369 #line 4328 "parse.y"
10370 {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10371 break;
10372
10373 case 519:
10374
10375
10376 #line 4332 "parse.y"
10377 {
10378
10379 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10380
10381
10382
10383
10384
10385
10386
10387
10388 }
10389 break;
10390
10391 case 520:
10392
10393
10394 #line 4345 "parse.y"
10395 {
10396
10397 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10398
10399
10400
10401 }
10402 break;
10403
10404 case 521:
10405
10406
10407 #line 4355 "parse.y"
10408 {
10409 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10410
10411
10412
10413
10414 }
10415 break;
10416
10417 case 522:
10418
10419
10420 #line 4363 "parse.y"
10421 {
10422 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10423
10424
10425
10426
10427 }
10428 break;
10429
10430 case 525:
10431
10432
10433 #line 4377 "parse.y"
10434 {
10435
10436 (yyval.node) = 0;
10437
10438
10439
10440 }
10441 break;
10442
10443 case 526:
10444
10445
10446 #line 4385 "parse.y"
10447 {
10448 lex_state = EXPR_BEG;
10449 command_start = TRUE;
10450 }
10451 break;
10452
10453 case 527:
10454
10455
10456 #line 4390 "parse.y"
10457 {
10458 (yyval.node) = (yyvsp[(3) - (4)].node);
10459 }
10460 break;
10461
10462 case 528:
10463
10464
10465 #line 4394 "parse.y"
10466 {
10467
10468 yyerrok;
10469 (yyval.node) = 0;
10470
10471
10472
10473
10474 }
10475 break;
10476
10477 case 529:
10478
10479
10480 #line 4406 "parse.y"
10481 {
10482
10483 (yyval.node) = (yyvsp[(2) - (3)].node);
10484
10485
10486
10487 lex_state = EXPR_BEG;
10488 command_start = TRUE;
10489 }
10490 break;
10491
10492 case 530:
10493
10494
10495 #line 4415 "parse.y"
10496 {
10497 (yyval.num) = parser->parser_in_kwarg;
10498 parser->parser_in_kwarg = 1;
10499 }
10500 break;
10501
10502 case 531:
10503
10504
10505 #line 4420 "parse.y"
10506 {
10507 parser->parser_in_kwarg = (yyvsp[(1) - (3)].num);
10508 (yyval.node) = (yyvsp[(2) - (3)].node);
10509 lex_state = EXPR_BEG;
10510 command_start = TRUE;
10511 }
10512 break;
10513
10514 case 532:
10515
10516
10517 #line 4429 "parse.y"
10518 {
10519 (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
10520 }
10521 break;
10522
10523 case 533:
10524
10525
10526 #line 4433 "parse.y"
10527 {
10528 (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
10529 }
10530 break;
10531
10532 case 534:
10533
10534
10535 #line 4437 "parse.y"
10536 {
10537 (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
10538 }
10539 break;
10540
10541 case 535:
10542
10543
10544 #line 4441 "parse.y"
10545 {
10546 (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
10547 }
10548 break;
10549
10550 case 536:
10551
10552
10553 #line 4447 "parse.y"
10554 {
10555 (yyval.node) = (yyvsp[(2) - (2)].node);
10556 }
10557 break;
10558
10559 case 537:
10560
10561
10562 #line 4451 "parse.y"
10563 {
10564 (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10565 }
10566 break;
10567
10568 case 538:
10569
10570
10571 #line 4457 "parse.y"
10572 {
10573 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
10574 }
10575 break;
10576
10577 case 539:
10578
10579
10580 #line 4461 "parse.y"
10581 {
10582 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
10583 }
10584 break;
10585
10586 case 540:
10587
10588
10589 #line 4465 "parse.y"
10590 {
10591 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
10592 }
10593 break;
10594
10595 case 541:
10596
10597
10598 #line 4469 "parse.y"
10599 {
10600 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10601 }
10602 break;
10603
10604 case 542:
10605
10606
10607 #line 4473 "parse.y"
10608 {
10609 (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10610 }
10611 break;
10612
10613 case 543:
10614
10615
10616 #line 4477 "parse.y"
10617 {
10618 (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10619 }
10620 break;
10621
10622 case 544:
10623
10624
10625 #line 4481 "parse.y"
10626 {
10627 (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
10628 }
10629 break;
10630
10631 case 545:
10632
10633
10634 #line 4485 "parse.y"
10635 {
10636 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10637 }
10638 break;
10639
10640 case 546:
10641
10642
10643 #line 4489 "parse.y"
10644 {
10645 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10646 }
10647 break;
10648
10649 case 547:
10650
10651
10652 #line 4493 "parse.y"
10653 {
10654 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
10655 }
10656 break;
10657
10658 case 548:
10659
10660
10661 #line 4497 "parse.y"
10662 {
10663 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10664 }
10665 break;
10666
10667 case 549:
10668
10669
10670 #line 4501 "parse.y"
10671 {
10672 (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
10673 }
10674 break;
10675
10676 case 550:
10677
10678
10679 #line 4505 "parse.y"
10680 {
10681 (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10682 }
10683 break;
10684
10685 case 551:
10686
10687
10688 #line 4509 "parse.y"
10689 {
10690 (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
10691 }
10692 break;
10693
10694 case 552:
10695
10696
10697 #line 4513 "parse.y"
10698 {
10699 (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10700 (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
10701 }
10702 break;
10703
10704 case 553:
10705
10706
10707 #line 4520 "parse.y"
10708 {
10709
10710 yyerror("formal argument cannot be a constant");
10711 (yyval.id) = 0;
10712
10713
10714
10715 }
10716 break;
10717
10718 case 554:
10719
10720
10721 #line 4529 "parse.y"
10722 {
10723
10724 yyerror("formal argument cannot be an instance variable");
10725 (yyval.id) = 0;
10726
10727
10728
10729 }
10730 break;
10731
10732 case 555:
10733
10734
10735 #line 4538 "parse.y"
10736 {
10737
10738 yyerror("formal argument cannot be a global variable");
10739 (yyval.id) = 0;
10740
10741
10742
10743 }
10744 break;
10745
10746 case 556:
10747
10748
10749 #line 4547 "parse.y"
10750 {
10751
10752 yyerror("formal argument cannot be a class variable");
10753 (yyval.id) = 0;
10754
10755
10756
10757 }
10758 break;
10759
10760 case 558:
10761
10762
10763 #line 4559 "parse.y"
10764 {
10765 formal_argument(get_id((yyvsp[(1) - (1)].id)));
10766 (yyval.id) = (yyvsp[(1) - (1)].id);
10767 }
10768 break;
10769
10770 case 559:
10771
10772
10773 #line 4566 "parse.y"
10774 {
10775 arg_var(get_id((yyvsp[(1) - (1)].id)));
10776
10777 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10778
10779
10780
10781 }
10782 break;
10783
10784 case 560:
10785
10786
10787 #line 4575 "parse.y"
10788 {
10789 ID tid = internal_id();
10790 arg_var(tid);
10791
10792 if (dyna_in_block()) {
10793 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10794 }
10795 else {
10796 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10797 }
10798 (yyval.node) = NEW_ARGS_AUX(tid, 1);
10799 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10800
10801
10802
10803 }
10804 break;
10805
10806 case 562:
10807
10808
10809 #line 4601 "parse.y"
10810 {
10811
10812 (yyval.node) = (yyvsp[(1) - (3)].node);
10813 (yyval.node)->nd_plen++;
10814 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10815 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10816
10817
10818
10819 }
10820 break;
10821
10822 case 563:
10823
10824
10825 #line 4615 "parse.y"
10826 {
10827 arg_var(formal_argument(get_id((yyvsp[(1) - (1)].id))));
10828 (yyval.id) = (yyvsp[(1) - (1)].id);
10829 }
10830 break;
10831
10832 case 564:
10833
10834
10835 #line 4622 "parse.y"
10836 {
10837 (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10838
10839 (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10840
10841
10842
10843 }
10844 break;
10845
10846 case 565:
10847
10848
10849 #line 4631 "parse.y"
10850 {
10851 (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
10852
10853 (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10854
10855
10856
10857 }
10858 break;
10859
10860 case 566:
10861
10862
10863 #line 4642 "parse.y"
10864 {
10865 (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10866
10867 (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10868
10869
10870
10871 }
10872 break;
10873
10874 case 567:
10875
10876
10877 #line 4651 "parse.y"
10878 {
10879 (yyval.node) = assignable((yyvsp[(1) - (1)].id), (NODE *)-1);
10880
10881 (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10882
10883
10884
10885 }
10886 break;
10887
10888 case 568:
10889
10890
10891 #line 4662 "parse.y"
10892 {
10893
10894 (yyval.node) = (yyvsp[(1) - (1)].node);
10895
10896
10897
10898 }
10899 break;
10900
10901 case 569:
10902
10903
10904 #line 4670 "parse.y"
10905 {
10906
10907 NODE *kws = (yyvsp[(1) - (3)].node);
10908
10909 while (kws->nd_next) {
10910 kws = kws->nd_next;
10911 }
10912 kws->nd_next = (yyvsp[(3) - (3)].node);
10913 (yyval.node) = (yyvsp[(1) - (3)].node);
10914
10915
10916
10917 }
10918 break;
10919
10920 case 570:
10921
10922
10923 #line 4687 "parse.y"
10924 {
10925
10926 (yyval.node) = (yyvsp[(1) - (1)].node);
10927
10928
10929
10930 }
10931 break;
10932
10933 case 571:
10934
10935
10936 #line 4695 "parse.y"
10937 {
10938
10939 NODE *kws = (yyvsp[(1) - (3)].node);
10940
10941 while (kws->nd_next) {
10942 kws = kws->nd_next;
10943 }
10944 kws->nd_next = (yyvsp[(3) - (3)].node);
10945 (yyval.node) = (yyvsp[(1) - (3)].node);
10946
10947
10948
10949 }
10950 break;
10951
10952 case 574:
10953
10954
10955 #line 4715 "parse.y"
10956 {
10957 shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
10958 (yyval.id) = (yyvsp[(2) - (2)].id);
10959 }
10960 break;
10961
10962 case 575:
10963
10964
10965 #line 4720 "parse.y"
10966 {
10967 (yyval.id) = internal_id();
10968 }
10969 break;
10970
10971 case 576:
10972
10973
10974 #line 4726 "parse.y"
10975 {
10976 arg_var(get_id((yyvsp[(1) - (3)].id)));
10977 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10978
10979 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10980
10981
10982
10983 }
10984 break;
10985
10986 case 577:
10987
10988
10989 #line 4738 "parse.y"
10990 {
10991 arg_var(get_id((yyvsp[(1) - (3)].id)));
10992 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10993
10994 (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10995
10996
10997
10998 }
10999 break;
11000
11001 case 578:
11002
11003
11004 #line 4750 "parse.y"
11005 {
11006
11007 (yyval.node) = (yyvsp[(1) - (1)].node);
11008
11009
11010
11011 }
11012 break;
11013
11014 case 579:
11015
11016
11017 #line 4758 "parse.y"
11018 {
11019
11020 NODE *opts = (yyvsp[(1) - (3)].node);
11021
11022 while (opts->nd_next) {
11023 opts = opts->nd_next;
11024 }
11025 opts->nd_next = (yyvsp[(3) - (3)].node);
11026 (yyval.node) = (yyvsp[(1) - (3)].node);
11027
11028
11029
11030 }
11031 break;
11032
11033 case 580:
11034
11035
11036 #line 4774 "parse.y"
11037 {
11038
11039 (yyval.node) = (yyvsp[(1) - (1)].node);
11040
11041
11042
11043 }
11044 break;
11045
11046 case 581:
11047
11048
11049 #line 4782 "parse.y"
11050 {
11051
11052 NODE *opts = (yyvsp[(1) - (3)].node);
11053
11054 while (opts->nd_next) {
11055 opts = opts->nd_next;
11056 }
11057 opts->nd_next = (yyvsp[(3) - (3)].node);
11058 (yyval.node) = (yyvsp[(1) - (3)].node);
11059
11060
11061
11062 }
11063 break;
11064
11065 case 584:
11066
11067
11068 #line 4802 "parse.y"
11069 {
11070
11071 if (!is_local_id((yyvsp[(2) - (2)].id)))
11072 yyerror("rest argument must be local variable");
11073
11074 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11075
11076 (yyval.id) = (yyvsp[(2) - (2)].id);
11077
11078
11079
11080 }
11081 break;
11082
11083 case 585:
11084
11085
11086 #line 4815 "parse.y"
11087 {
11088
11089 (yyval.id) = internal_id();
11090 arg_var((yyval.id));
11091
11092
11093
11094 }
11095 break;
11096
11097 case 588:
11098
11099
11100 #line 4830 "parse.y"
11101 {
11102
11103 if (!is_local_id((yyvsp[(2) - (2)].id)))
11104 yyerror("block argument must be local variable");
11105 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
11106 yyerror("duplicated block argument name");
11107
11108 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11109
11110 (yyval.id) = (yyvsp[(2) - (2)].id);
11111
11112
11113
11114 }
11115 break;
11116
11117 case 589:
11118
11119
11120 #line 4847 "parse.y"
11121 {
11122 (yyval.id) = (yyvsp[(2) - (2)].id);
11123 }
11124 break;
11125
11126 case 590:
11127
11128
11129 #line 4851 "parse.y"
11130 {
11131
11132 (yyval.id) = 0;
11133
11134
11135
11136 }
11137 break;
11138
11139 case 591:
11140
11141
11142 #line 4861 "parse.y"
11143 {
11144
11145 value_expr((yyvsp[(1) - (1)].node));
11146 (yyval.node) = (yyvsp[(1) - (1)].node);
11147 if (!(yyval.node)) (yyval.node) = NEW_NIL();
11148
11149
11150
11151 }
11152 break;
11153
11154 case 592:
11155
11156
11157 #line 4870 "parse.y"
11158 {lex_state = EXPR_BEG;}
11159 break;
11160
11161 case 593:
11162
11163
11164 #line 4871 "parse.y"
11165 {
11166
11167 if ((yyvsp[(3) - (4)].node) == 0) {
11168 yyerror("can't define singleton method for ().");
11169 }
11170 else {
11171 switch (nd_type((yyvsp[(3) - (4)].node))) {
11172 case NODE_STR:
11173 case NODE_DSTR:
11174 case NODE_XSTR:
11175 case NODE_DXSTR:
11176 case NODE_DREGX:
11177 case NODE_LIT:
11178 case NODE_ARRAY:
11179 case NODE_ZARRAY:
11180 yyerror("can't define singleton method for literals");
11181 default:
11182 value_expr((yyvsp[(3) - (4)].node));
11183 break;
11184 }
11185 }
11186 (yyval.node) = (yyvsp[(3) - (4)].node);
11187
11188
11189
11190 }
11191 break;
11192
11193 case 595:
11194
11195
11196 #line 4901 "parse.y"
11197 {
11198
11199 (yyval.node) = (yyvsp[(1) - (2)].node);
11200
11201
11202
11203 }
11204 break;
11205
11206 case 597:
11207
11208
11209 #line 4918 "parse.y"
11210 {
11211
11212 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
11213
11214
11215
11216 }
11217 break;
11218
11219 case 598:
11220
11221
11222 #line 4928 "parse.y"
11223 {
11224
11225 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_STR) {
11226 nd_set_type((yyvsp[(1) - (3)].node), NODE_LIT);
11227 (yyvsp[(1) - (3)].node)->nd_lit = rb_fstring((yyvsp[(1) - (3)].node)->nd_lit);
11228 }
11229 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
11230
11231
11232
11233 }
11234 break;
11235
11236 case 599:
11237
11238
11239 #line 4940 "parse.y"
11240 {
11241
11242 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
11243
11244
11245
11246 }
11247 break;
11248
11249 case 600:
11250
11251
11252 #line 4948 "parse.y"
11253 {
11254
11255 (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
11256
11257
11258
11259 }
11260 break;
11261
11262 case 622:
11263
11264
11265 #line 5006 "parse.y"
11266 {yyerrok;}
11267 break;
11268
11269 case 625:
11270
11271
11272 #line 5011 "parse.y"
11273 {yyerrok;}
11274 break;
11275
11276 case 626:
11277
11278
11279 #line 5015 "parse.y"
11280 {
11281
11282 (yyval.node) = 0;
11283
11284
11285
11286 }
11287 break;
11288
11289
11290
11291
11292 #line 11291 "parse.c"
11293 default: break;
11294 }
11295
11296
11297
11298
11299
11300
11301
11302
11303
11304
11305
11306 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
11307
11308 YYPOPSTACK (yylen);
11309 yylen = 0;
11310 YY_STACK_PRINT (yyss, yyssp);
11311
11312 *++yyvsp = yyval;
11313
11314
11315
11316
11317
11318 yyn = yyr1[yyn];
11319
11320 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
11321 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
11322 yystate = yytable[yystate];
11323 else
11324 yystate = yydefgoto[yyn - YYNTOKENS];
11325
11326 goto yynewstate;
11327
11328
11329
11330
11331
11332 yyerrlab:
11333
11334
11335 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
11336
11337
11338 if (!yyerrstatus)
11339 {
11340 ++yynerrs;
11341 #if ! YYERROR_VERBOSE
11342 parser_yyerror (parser, YY_("syntax error"));
11343 #else
11344 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
11345 yyssp, yytoken)
11346 {
11347 char const *yymsgp = YY_("syntax error");
11348 int yysyntax_error_status;
11349 yysyntax_error_status = YYSYNTAX_ERROR;
11350 if (yysyntax_error_status == 0)
11351 yymsgp = yymsg;
11352 else if (yysyntax_error_status == 1)
11353 {
11354 if (yymsg != yymsgbuf)
11355 YYSTACK_FREE (yymsg);
11356 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
11357 if (!yymsg)
11358 {
11359 yymsg = yymsgbuf;
11360 yymsg_alloc = sizeof yymsgbuf;
11361 yysyntax_error_status = 2;
11362 }
11363 else
11364 {
11365 yysyntax_error_status = YYSYNTAX_ERROR;
11366 yymsgp = yymsg;
11367 }
11368 }
11369 parser_yyerror (parser, yymsgp);
11370 if (yysyntax_error_status == 2)
11371 goto yyexhaustedlab;
11372 }
11373 # undef YYSYNTAX_ERROR
11374 #endif
11375 }
11376
11377
11378
11379 if (yyerrstatus == 3)
11380 {
11381
11382
11383
11384 if (yychar <= YYEOF)
11385 {
11386
11387 if (yychar == YYEOF)
11388 YYABORT;
11389 }
11390 else
11391 {
11392 yydestruct ("Error: discarding",
11393 yytoken, &yylval, parser);
11394 yychar = YYEMPTY;
11395 }
11396 }
11397
11398
11399
11400 goto yyerrlab1;
11401
11402
11403
11404
11405
11406 yyerrorlab:
11407
11408
11409
11410
11411 if ( 0)
11412 goto yyerrorlab;
11413
11414
11415
11416 YYPOPSTACK (yylen);
11417 yylen = 0;
11418 YY_STACK_PRINT (yyss, yyssp);
11419 yystate = *yyssp;
11420 goto yyerrlab1;
11421
11422
11423
11424
11425
11426 yyerrlab1:
11427 yyerrstatus = 3;
11428
11429 for (;;)
11430 {
11431 yyn = yypact[yystate];
11432 if (!yypact_value_is_default (yyn))
11433 {
11434 yyn += YYTERROR;
11435 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
11436 {
11437 yyn = yytable[yyn];
11438 if (0 < yyn)
11439 break;
11440 }
11441 }
11442
11443
11444 if (yyssp == yyss)
11445 YYABORT;
11446
11447
11448 yydestruct ("Error: popping",
11449 yystos[yystate], yyvsp, parser);
11450 YYPOPSTACK (1);
11451 yystate = *yyssp;
11452 YY_STACK_PRINT (yyss, yyssp);
11453 }
11454
11455 *++yyvsp = yylval;
11456
11457
11458
11459 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11460
11461 yystate = yyn;
11462 goto yynewstate;
11463
11464
11465
11466
11467
11468 yyacceptlab:
11469 yyresult = 0;
11470 goto yyreturn;
11471
11472
11473
11474
11475 yyabortlab:
11476 yyresult = 1;
11477 goto yyreturn;
11478
11479 #if !defined(yyoverflow) || YYERROR_VERBOSE
11480
11481
11482
11483 yyexhaustedlab:
11484 parser_yyerror (parser, YY_("memory exhausted"));
11485 yyresult = 2;
11486
11487 #endif
11488
11489 yyreturn:
11490 if (yychar != YYEMPTY)
11491 {
11492
11493
11494 yytoken = YYTRANSLATE (yychar);
11495 yydestruct ("Cleanup: discarding lookahead",
11496 yytoken, &yylval, parser);
11497 }
11498
11499
11500 YYPOPSTACK (yylen);
11501 YY_STACK_PRINT (yyss, yyssp);
11502 while (yyssp != yyss)
11503 {
11504 yydestruct ("Cleanup: popping",
11505 yystos[*yyssp], yyvsp, parser);
11506 YYPOPSTACK (1);
11507 }
11508 #ifndef yyoverflow
11509 if (yyss != yyssa)
11510 YYSTACK_FREE (yyss);
11511 #endif
11512 #if YYERROR_VERBOSE
11513 if (yymsg != yymsgbuf)
11514 YYSTACK_FREE (yymsg);
11515 #endif
11516
11517 return YYID (yyresult);
11518 }
11519
11520
11521
11522
11523 #line 5023 "parse.y"
11524
11525 # undef parser
11526 # undef yylex
11527 # undef yylval
11528 # define yylval (*((YYSTYPE*)(parser->parser_yylval)))
11529
11530 static int parser_regx_options(struct parser_params*);
11531 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11532 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11533 static int parser_parse_string(struct parser_params*,NODE*);
11534 static int parser_here_document(struct parser_params*,NODE*);
11535
11536
11537 # define nextc() parser_nextc(parser)
11538 # define pushback(c) parser_pushback(parser, (c))
11539 # define newtok() parser_newtok(parser)
11540 # define tokspace(n) parser_tokspace(parser, (n))
11541 # define tokadd(c) parser_tokadd(parser, (c))
11542 # define tok_hex(numlen) parser_tok_hex(parser, (numlen))
11543 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e))
11544 # define tokadd_escape(e) parser_tokadd_escape(parser, (e))
11545 # define regx_options() parser_regx_options(parser)
11546 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11547 # define parse_string(n) parser_parse_string(parser,(n))
11548 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc))
11549 # define here_document(n) parser_here_document(parser,(n))
11550 # define heredoc_identifier() parser_heredoc_identifier(parser)
11551 # define heredoc_restore(n) parser_heredoc_restore(parser,(n))
11552 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i))
11553 # define number_literal_suffix(f) parser_number_literal_suffix(parser, (f))
11554 # define set_number_literal(v, t, f) parser_set_number_literal(parser, (v), (t), (f))
11555 # define set_integer_literal(v, f) parser_set_integer_literal(parser, (v), (f))
11556
11557 #ifndef RIPPER
11558 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11559 # define set_yylval_num(x) (yylval.num = (x))
11560 # define set_yylval_id(x) (yylval.id = (x))
11561 # define set_yylval_name(x) (yylval.id = (x))
11562 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11563 # define set_yylval_node(x) (yylval.node = (x))
11564 # define yylval_id() (yylval.id)
11565 #else
11566 static inline VALUE
11567 ripper_yylval_id(ID x)
11568 {
11569 return (VALUE)NEW_LASGN(x, ID2SYM(x));
11570 }
11571 # define set_yylval_str(x) (void)(x)
11572 # define set_yylval_num(x) (void)(x)
11573 # define set_yylval_id(x) (void)(x)
11574 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11575 # define set_yylval_literal(x) (void)(x)
11576 # define set_yylval_node(x) (void)(x)
11577 # define yylval_id() yylval.id
11578 #endif
11579
11580 #ifndef RIPPER
11581 #define ripper_flush(p) (void)(p)
11582 #else
11583 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
11584
11585 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11586
11587 static int
11588 ripper_has_scan_event(struct parser_params *parser)
11589 {
11590
11591 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11592 return lex_p > parser->tokp;
11593 }
11594
11595 static VALUE
11596 ripper_scan_event_val(struct parser_params *parser, int t)
11597 {
11598 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11599 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11600 ripper_flush(parser);
11601 return rval;
11602 }
11603
11604 static void
11605 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11606 {
11607 if (!ripper_has_scan_event(parser)) return;
11608 yylval_rval = ripper_scan_event_val(parser, t);
11609 }
11610
11611 static void
11612 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
11613 {
11614 if (!ripper_has_scan_event(parser)) return;
11615 (void)ripper_scan_event_val(parser, t);
11616 }
11617
11618 static void
11619 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11620 {
11621 int saved_line = ruby_sourceline;
11622 const char *saved_tokp = parser->tokp;
11623
11624 ruby_sourceline = parser->delayed_line;
11625 parser->tokp = lex_pbeg + parser->delayed_col;
11626 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11627 parser->delayed = Qnil;
11628 ruby_sourceline = saved_line;
11629 parser->tokp = saved_tokp;
11630 }
11631 #endif
11632
11633 #include "ruby/regex.h"
11634 #include "ruby/util.h"
11635
11636
11637
11638
11639
11640 #undef SIGN_EXTEND_CHAR
11641 #if __STDC__
11642 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11643 #else
11644
11645 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11646 #endif
11647
11648 #define parser_encoding_name() (current_enc->name)
11649 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc)
11650 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
11651 #define is_identchar(p,e,enc) (rb_enc_isalnum((unsigned char)(*(p)),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11652 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
11653
11654 #define parser_isascii() ISASCII(*(lex_p-1))
11655
11656 #ifndef RIPPER
11657 static int
11658 token_info_get_column(struct parser_params *parser, const char *token)
11659 {
11660 int column = 1;
11661 const char *p, *pend = lex_p - strlen(token);
11662 for (p = lex_pbeg; p < pend; p++) {
11663 if (*p == '\t') {
11664 column = (((column - 1) / 8) + 1) * 8;
11665 }
11666 column++;
11667 }
11668 return column;
11669 }
11670
11671 static int
11672 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11673 {
11674 const char *p, *pend = lex_p - strlen(token);
11675 for (p = lex_pbeg; p < pend; p++) {
11676 if (*p != ' ' && *p != '\t') {
11677 return 1;
11678 }
11679 }
11680 return 0;
11681 }
11682
11683 #undef token_info_push
11684 static void
11685 token_info_push(struct parser_params *parser, const char *token)
11686 {
11687 token_info *ptinfo;
11688
11689 if (!parser->parser_token_info_enabled) return;
11690 ptinfo = ALLOC(token_info);
11691 ptinfo->token = token;
11692 ptinfo->linenum = ruby_sourceline;
11693 ptinfo->column = token_info_get_column(parser, token);
11694 ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11695 ptinfo->next = parser->parser_token_info;
11696
11697 parser->parser_token_info = ptinfo;
11698 }
11699
11700 #undef token_info_pop
11701 static void
11702 token_info_pop(struct parser_params *parser, const char *token)
11703 {
11704 int linenum;
11705 token_info *ptinfo = parser->parser_token_info;
11706
11707 if (!ptinfo) return;
11708 parser->parser_token_info = ptinfo->next;
11709 if (token_info_get_column(parser, token) == ptinfo->column) {
11710 goto finish;
11711 }
11712 linenum = ruby_sourceline;
11713 if (linenum == ptinfo->linenum) {
11714 goto finish;
11715 }
11716 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
11717 goto finish;
11718 }
11719 if (parser->parser_token_info_enabled) {
11720 rb_compile_warn(ruby_sourcefile, linenum,
11721 "mismatched indentations at '%s' with '%s' at %d",
11722 token, ptinfo->token, ptinfo->linenum);
11723 }
11724
11725 finish:
11726 xfree(ptinfo);
11727 }
11728 #endif
11729
11730 static int
11731 parser_yyerror(struct parser_params *parser, const char *msg)
11732 {
11733 #ifndef RIPPER
11734 const int max_line_margin = 30;
11735 const char *p, *pe;
11736 char *buf;
11737 long len;
11738 int i;
11739
11740 compile_error(PARSER_ARG "%s", msg);
11741 p = lex_p;
11742 while (lex_pbeg <= p) {
11743 if (*p == '\n') break;
11744 p--;
11745 }
11746 p++;
11747
11748 pe = lex_p;
11749 while (pe < lex_pend) {
11750 if (*pe == '\n') break;
11751 pe++;
11752 }
11753
11754 len = pe - p;
11755 if (len > 4) {
11756 char *p2;
11757 const char *pre = "", *post = "";
11758
11759 if (len > max_line_margin * 2 + 10) {
11760 if (lex_p - p > max_line_margin) {
11761 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11762 pre = "...";
11763 }
11764 if (pe - lex_p > max_line_margin) {
11765 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11766 post = "...";
11767 }
11768 len = pe - p;
11769 }
11770 buf = ALLOCA_N(char, len+2);
11771 MEMCPY(buf, p, char, len);
11772 buf[len] = '\0';
11773 rb_compile_error_with_enc(NULL, 0, (void *)current_enc, "%s%s%s", pre, buf, post);
11774
11775 i = (int)(lex_p - p);
11776 p2 = buf; pe = buf + len;
11777
11778 while (p2 < pe) {
11779 if (*p2 != '\t') *p2 = ' ';
11780 p2++;
11781 }
11782 buf[i] = '^';
11783 buf[i+1] = '\0';
11784 rb_compile_error_append("%s%s", pre, buf);
11785 }
11786 #else
11787 dispatch1(parse_error, STR_NEW2(msg));
11788 #endif
11789 return 0;
11790 }
11791
11792 static void parser_prepare(struct parser_params *parser);
11793
11794 #ifndef RIPPER
11795 static VALUE
11796 debug_lines(VALUE fname)
11797 {
11798 ID script_lines;
11799 CONST_ID(script_lines, "SCRIPT_LINES__");
11800 if (rb_const_defined_at(rb_cObject, script_lines)) {
11801 VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11802 if (RB_TYPE_P(hash, T_HASH)) {
11803 VALUE lines = rb_ary_new();
11804 rb_hash_aset(hash, fname, lines);
11805 return lines;
11806 }
11807 }
11808 return 0;
11809 }
11810
11811 static VALUE
11812 coverage(VALUE fname, int n)
11813 {
11814 VALUE coverages = rb_get_coverages();
11815 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11816 VALUE lines = rb_ary_new2(n);
11817 int i;
11818 RBASIC_CLEAR_CLASS(lines);
11819 for (i = 0; i < n; i++) RARRAY_ASET(lines, i, Qnil);
11820 RARRAY(lines)->as.heap.len = n;
11821 rb_hash_aset(coverages, fname, lines);
11822 return lines;
11823 }
11824 return 0;
11825 }
11826
11827 static int
11828 e_option_supplied(struct parser_params *parser)
11829 {
11830 return strcmp(ruby_sourcefile, "-e") == 0;
11831 }
11832
11833 static VALUE
11834 yycompile0(VALUE arg)
11835 {
11836 int n;
11837 NODE *tree;
11838 struct parser_params *parser = (struct parser_params *)arg;
11839
11840 if (!compile_for_eval && rb_safe_level() == 0) {
11841 ruby_debug_lines = debug_lines(ruby_sourcefile_string);
11842 if (ruby_debug_lines && ruby_sourceline > 0) {
11843 VALUE str = STR_NEW0();
11844 n = ruby_sourceline;
11845 do {
11846 rb_ary_push(ruby_debug_lines, str);
11847 } while (--n);
11848 }
11849
11850 if (!e_option_supplied(parser)) {
11851 ruby_coverage = coverage(ruby_sourcefile_string, ruby_sourceline);
11852 }
11853 }
11854 parser->last_cr_line = ruby_sourceline - 1;
11855
11856 parser_prepare(parser);
11857 deferred_nodes = 0;
11858 #ifndef RIPPER
11859 parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose);
11860 #endif
11861 #ifndef RIPPER
11862 if (RUBY_DTRACE_PARSE_BEGIN_ENABLED()) {
11863 RUBY_DTRACE_PARSE_BEGIN(parser->parser_ruby_sourcefile,
11864 parser->parser_ruby_sourceline);
11865 }
11866 #endif
11867 n = yyparse((void*)parser);
11868 #ifndef RIPPER
11869 if (RUBY_DTRACE_PARSE_END_ENABLED()) {
11870 RUBY_DTRACE_PARSE_END(parser->parser_ruby_sourcefile,
11871 parser->parser_ruby_sourceline);
11872 }
11873 #endif
11874 ruby_debug_lines = 0;
11875 ruby_coverage = 0;
11876 compile_for_eval = 0;
11877
11878 lex_strterm = 0;
11879 lex_p = lex_pbeg = lex_pend = 0;
11880 lex_lastline = lex_nextline = 0;
11881 if (parser->nerr) {
11882 return 0;
11883 }
11884 tree = ruby_eval_tree;
11885 if (!tree) {
11886 tree = NEW_NIL();
11887 }
11888 else if (ruby_eval_tree_begin) {
11889 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11890 }
11891 return (VALUE)tree;
11892 }
11893
11894 static NODE*
11895 yycompile(struct parser_params *parser, VALUE fname, int line)
11896 {
11897 ruby_sourcefile_string = rb_str_new_frozen(fname);
11898 ruby_sourcefile = RSTRING_PTR(fname);
11899 ruby_sourceline = line - 1;
11900 return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
11901 }
11902 #endif
11903
11904 static rb_encoding *
11905 must_be_ascii_compatible(VALUE s)
11906 {
11907 rb_encoding *enc = rb_enc_get(s);
11908 if (!rb_enc_asciicompat(enc)) {
11909 rb_raise(rb_eArgError, "invalid source encoding");
11910 }
11911 return enc;
11912 }
11913
11914 static VALUE
11915 lex_get_str(struct parser_params *parser, VALUE s)
11916 {
11917 char *beg, *end, *pend;
11918 rb_encoding *enc = must_be_ascii_compatible(s);
11919
11920 beg = RSTRING_PTR(s);
11921 if (lex_gets_ptr) {
11922 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11923 beg += lex_gets_ptr;
11924 }
11925 pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11926 end = beg;
11927 while (end < pend) {
11928 if (*end++ == '\n') break;
11929 }
11930 lex_gets_ptr = end - RSTRING_PTR(s);
11931 return rb_enc_str_new(beg, end - beg, enc);
11932 }
11933
11934 static VALUE
11935 lex_getline(struct parser_params *parser)
11936 {
11937 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11938 if (NIL_P(line)) return line;
11939 must_be_ascii_compatible(line);
11940 #ifndef RIPPER
11941 if (ruby_debug_lines) {
11942 rb_enc_associate(line, current_enc);
11943 rb_ary_push(ruby_debug_lines, line);
11944 }
11945 if (ruby_coverage) {
11946 rb_ary_push(ruby_coverage, Qnil);
11947 }
11948 #endif
11949 return line;
11950 }
11951
11952 #ifdef RIPPER
11953 static rb_data_type_t parser_data_type;
11954 #else
11955 static const rb_data_type_t parser_data_type;
11956
11957 static NODE*
11958 parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line)
11959 {
11960 struct parser_params *parser;
11961 NODE *node;
11962
11963 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11964 lex_gets = lex_get_str;
11965 lex_gets_ptr = 0;
11966 lex_input = s;
11967 lex_pbeg = lex_p = lex_pend = 0;
11968 compile_for_eval = rb_parse_in_eval();
11969
11970 node = yycompile(parser, fname, line);
11971 RB_GC_GUARD(vparser);
11972
11973 return node;
11974 }
11975
11976 NODE*
11977 rb_compile_string(const char *f, VALUE s, int line)
11978 {
11979 must_be_ascii_compatible(s);
11980 return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), s, line);
11981 }
11982
11983 NODE*
11984 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11985 {
11986 return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line);
11987 }
11988
11989 NODE*
11990 rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line)
11991 {
11992 must_be_ascii_compatible(s);
11993 return parser_compile_string(vparser, f, s, line);
11994 }
11995
11996 NODE*
11997 rb_compile_cstr(const char *f, const char *s, int len, int line)
11998 {
11999 VALUE str = rb_str_new(s, len);
12000 return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), str, line);
12001 }
12002
12003 NODE*
12004 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
12005 {
12006 VALUE str = rb_str_new(s, len);
12007 return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line);
12008 }
12009
12010 static VALUE
12011 lex_io_gets(struct parser_params *parser, VALUE io)
12012 {
12013 return rb_io_gets(io);
12014 }
12015
12016 NODE*
12017 rb_compile_file(const char *f, VALUE file, int start)
12018 {
12019 VALUE volatile vparser = rb_parser_new();
12020
12021 return rb_parser_compile_file(vparser, f, file, start);
12022 }
12023
12024 NODE*
12025 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
12026 {
12027 return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start);
12028 }
12029
12030 NODE*
12031 rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start)
12032 {
12033 struct parser_params *parser;
12034 NODE *node;
12035
12036 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
12037 lex_gets = lex_io_gets;
12038 lex_input = file;
12039 lex_pbeg = lex_p = lex_pend = 0;
12040 compile_for_eval = rb_parse_in_eval();
12041
12042 node = yycompile(parser, fname, start);
12043 RB_GC_GUARD(vparser);
12044
12045 return node;
12046 }
12047 #endif
12048
12049 #define STR_FUNC_ESCAPE 0x01
12050 #define STR_FUNC_EXPAND 0x02
12051 #define STR_FUNC_REGEXP 0x04
12052 #define STR_FUNC_QWORDS 0x08
12053 #define STR_FUNC_SYMBOL 0x10
12054 #define STR_FUNC_INDENT 0x20
12055
12056 enum string_type {
12057 str_squote = (0),
12058 str_dquote = (STR_FUNC_EXPAND),
12059 str_xquote = (STR_FUNC_EXPAND),
12060 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
12061 str_sword = (STR_FUNC_QWORDS),
12062 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
12063 str_ssym = (STR_FUNC_SYMBOL),
12064 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
12065 };
12066
12067 static VALUE
12068 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
12069 {
12070 VALUE str;
12071
12072 str = rb_enc_str_new(p, n, enc);
12073 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
12074 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
12075 }
12076 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
12077 rb_enc_associate(str, rb_ascii8bit_encoding());
12078 }
12079 }
12080
12081 return str;
12082 }
12083
12084 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
12085 #define lex_eol_p() (lex_p >= lex_pend)
12086 #define peek(c) peek_n((c), 0)
12087 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
12088
12089 static inline int
12090 parser_nextc(struct parser_params *parser)
12091 {
12092 int c;
12093
12094 if (lex_p == lex_pend) {
12095 VALUE v = lex_nextline;
12096 lex_nextline = 0;
12097 if (!v) {
12098 if (parser->eofp)
12099 return -1;
12100
12101 if (!lex_input || NIL_P(v = lex_getline(parser))) {
12102 parser->eofp = Qtrue;
12103 lex_goto_eol(parser);
12104 return -1;
12105 }
12106 }
12107 {
12108 #ifdef RIPPER
12109 if (parser->tokp < lex_pend) {
12110 if (NIL_P(parser->delayed)) {
12111 parser->delayed = rb_str_buf_new(1024);
12112 rb_enc_associate(parser->delayed, current_enc);
12113 rb_str_buf_cat(parser->delayed,
12114 parser->tokp, lex_pend - parser->tokp);
12115 parser->delayed_line = ruby_sourceline;
12116 parser->delayed_col = (int)(parser->tokp - lex_pbeg);
12117 }
12118 else {
12119 rb_str_buf_cat(parser->delayed,
12120 parser->tokp, lex_pend - parser->tokp);
12121 }
12122 }
12123 #endif
12124 if (heredoc_end > 0) {
12125 ruby_sourceline = heredoc_end;
12126 heredoc_end = 0;
12127 }
12128 ruby_sourceline++;
12129 parser->line_count++;
12130 lex_pbeg = lex_p = RSTRING_PTR(v);
12131 lex_pend = lex_p + RSTRING_LEN(v);
12132 ripper_flush(parser);
12133 lex_lastline = v;
12134 }
12135 }
12136 c = (unsigned char)*lex_p++;
12137 if (c == '\r') {
12138 if (peek('\n')) {
12139 lex_p++;
12140 c = '\n';
12141 }
12142 else if (ruby_sourceline > parser->last_cr_line) {
12143 parser->last_cr_line = ruby_sourceline;
12144 rb_compile_warn(ruby_sourcefile, ruby_sourceline, "encountered \\r in middle of line, treated as a mere space");
12145 }
12146 }
12147
12148 return c;
12149 }
12150
12151 static void
12152 parser_pushback(struct parser_params *parser, int c)
12153 {
12154 if (c == -1) return;
12155 lex_p--;
12156 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
12157 lex_p--;
12158 }
12159 }
12160
12161 #define was_bol() (lex_p == lex_pbeg + 1)
12162
12163 #define tokfix() (tokenbuf[tokidx]='\0')
12164 #define tok() tokenbuf
12165 #define toklen() tokidx
12166 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
12167
12168 static char*
12169 parser_newtok(struct parser_params *parser)
12170 {
12171 tokidx = 0;
12172 tokline = ruby_sourceline;
12173 if (!tokenbuf) {
12174 toksiz = 60;
12175 tokenbuf = ALLOC_N(char, 60);
12176 }
12177 if (toksiz > 4096) {
12178 toksiz = 60;
12179 REALLOC_N(tokenbuf, char, 60);
12180 }
12181 return tokenbuf;
12182 }
12183
12184 static char *
12185 parser_tokspace(struct parser_params *parser, int n)
12186 {
12187 tokidx += n;
12188
12189 if (tokidx >= toksiz) {
12190 do {toksiz *= 2;} while (toksiz < tokidx);
12191 REALLOC_N(tokenbuf, char, toksiz);
12192 }
12193 return &tokenbuf[tokidx-n];
12194 }
12195
12196 static void
12197 parser_tokadd(struct parser_params *parser, int c)
12198 {
12199 tokenbuf[tokidx++] = (char)c;
12200 if (tokidx >= toksiz) {
12201 toksiz *= 2;
12202 REALLOC_N(tokenbuf, char, toksiz);
12203 }
12204 }
12205
12206 static int
12207 parser_tok_hex(struct parser_params *parser, size_t *numlen)
12208 {
12209 int c;
12210
12211 c = scan_hex(lex_p, 2, numlen);
12212 if (!*numlen) {
12213 yyerror("invalid hex escape");
12214 return 0;
12215 }
12216 lex_p += *numlen;
12217 return c;
12218 }
12219
12220 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
12221
12222
12223 static int
12224 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
12225 int string_literal, int symbol_literal, int regexp_literal)
12226 {
12227
12228
12229
12230
12231
12232
12233
12234 int codepoint;
12235 size_t numlen;
12236
12237 if (regexp_literal) { tokadd('\\'); tokadd('u'); }
12238
12239 if (peek('{')) {
12240 do {
12241 if (regexp_literal) { tokadd(*lex_p); }
12242 nextc();
12243 codepoint = scan_hex(lex_p, 6, &numlen);
12244 if (numlen == 0) {
12245 yyerror("invalid Unicode escape");
12246 return 0;
12247 }
12248 if (codepoint > 0x10ffff) {
12249 yyerror("invalid Unicode codepoint (too large)");
12250 return 0;
12251 }
12252 lex_p += numlen;
12253 if (regexp_literal) {
12254 tokcopy((int)numlen);
12255 }
12256 else if (codepoint >= 0x80) {
12257 *encp = rb_utf8_encoding();
12258 if (string_literal) tokaddmbc(codepoint, *encp);
12259 }
12260 else if (string_literal) {
12261 tokadd(codepoint);
12262 }
12263 } while (string_literal && (peek(' ') || peek('\t')));
12264
12265 if (!peek('}')) {
12266 yyerror("unterminated Unicode escape");
12267 return 0;
12268 }
12269
12270 if (regexp_literal) { tokadd('}'); }
12271 nextc();
12272 }
12273 else {
12274 codepoint = scan_hex(lex_p, 4, &numlen);
12275 if (numlen < 4) {
12276 yyerror("invalid Unicode escape");
12277 return 0;
12278 }
12279 lex_p += 4;
12280 if (regexp_literal) {
12281 tokcopy(4);
12282 }
12283 else if (codepoint >= 0x80) {
12284 *encp = rb_utf8_encoding();
12285 if (string_literal) tokaddmbc(codepoint, *encp);
12286 }
12287 else if (string_literal) {
12288 tokadd(codepoint);
12289 }
12290 }
12291
12292 return codepoint;
12293 }
12294
12295 #define ESCAPE_CONTROL 1
12296 #define ESCAPE_META 2
12297
12298 static int
12299 parser_read_escape(struct parser_params *parser, int flags,
12300 rb_encoding **encp)
12301 {
12302 int c;
12303 size_t numlen;
12304
12305 switch (c = nextc()) {
12306 case '\\':
12307 return c;
12308
12309 case 'n':
12310 return '\n';
12311
12312 case 't':
12313 return '\t';
12314
12315 case 'r':
12316 return '\r';
12317
12318 case 'f':
12319 return '\f';
12320
12321 case 'v':
12322 return '\13';
12323
12324 case 'a':
12325 return '\007';
12326
12327 case 'e':
12328 return 033;
12329
12330 case '0': case '1': case '2': case '3':
12331 case '4': case '5': case '6': case '7':
12332 pushback(c);
12333 c = scan_oct(lex_p, 3, &numlen);
12334 lex_p += numlen;
12335 return c;
12336
12337 case 'x':
12338 c = tok_hex(&numlen);
12339 if (numlen == 0) return 0;
12340 return c;
12341
12342 case 'b':
12343 return '\010';
12344
12345 case 's':
12346 return ' ';
12347
12348 case 'M':
12349 if (flags & ESCAPE_META) goto eof;
12350 if ((c = nextc()) != '-') {
12351 pushback(c);
12352 goto eof;
12353 }
12354 if ((c = nextc()) == '\\') {
12355 if (peek('u')) goto eof;
12356 return read_escape(flags|ESCAPE_META, encp) | 0x80;
12357 }
12358 else if (c == -1 || !ISASCII(c)) goto eof;
12359 else {
12360 return ((c & 0xff) | 0x80);
12361 }
12362
12363 case 'C':
12364 if ((c = nextc()) != '-') {
12365 pushback(c);
12366 goto eof;
12367 }
12368 case 'c':
12369 if (flags & ESCAPE_CONTROL) goto eof;
12370 if ((c = nextc())== '\\') {
12371 if (peek('u')) goto eof;
12372 c = read_escape(flags|ESCAPE_CONTROL, encp);
12373 }
12374 else if (c == '?')
12375 return 0177;
12376 else if (c == -1 || !ISASCII(c)) goto eof;
12377 return c & 0x9f;
12378
12379 eof:
12380 case -1:
12381 yyerror("Invalid escape character syntax");
12382 return '\0';
12383
12384 default:
12385 return c;
12386 }
12387 }
12388
12389 static void
12390 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
12391 {
12392 int len = rb_enc_codelen(c, enc);
12393 rb_enc_mbcput(c, tokspace(len), enc);
12394 }
12395
12396 static int
12397 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
12398 {
12399 int c;
12400 int flags = 0;
12401 size_t numlen;
12402
12403 first:
12404 switch (c = nextc()) {
12405 case '\n':
12406 return 0;
12407
12408 case '0': case '1': case '2': case '3':
12409 case '4': case '5': case '6': case '7':
12410 {
12411 ruby_scan_oct(--lex_p, 3, &numlen);
12412 if (numlen == 0) goto eof;
12413 lex_p += numlen;
12414 tokcopy((int)numlen + 1);
12415 }
12416 return 0;
12417
12418 case 'x':
12419 {
12420 tok_hex(&numlen);
12421 if (numlen == 0) return -1;
12422 tokcopy((int)numlen + 2);
12423 }
12424 return 0;
12425
12426 case 'M':
12427 if (flags & ESCAPE_META) goto eof;
12428 if ((c = nextc()) != '-') {
12429 pushback(c);
12430 goto eof;
12431 }
12432 tokcopy(3);
12433 flags |= ESCAPE_META;
12434 goto escaped;
12435
12436 case 'C':
12437 if (flags & ESCAPE_CONTROL) goto eof;
12438 if ((c = nextc()) != '-') {
12439 pushback(c);
12440 goto eof;
12441 }
12442 tokcopy(3);
12443 goto escaped;
12444
12445 case 'c':
12446 if (flags & ESCAPE_CONTROL) goto eof;
12447 tokcopy(2);
12448 flags |= ESCAPE_CONTROL;
12449 escaped:
12450 if ((c = nextc()) == '\\') {
12451 goto first;
12452 }
12453 else if (c == -1) goto eof;
12454 tokadd(c);
12455 return 0;
12456
12457 eof:
12458 case -1:
12459 yyerror("Invalid escape character syntax");
12460 return -1;
12461
12462 default:
12463 tokadd('\\');
12464 tokadd(c);
12465 }
12466 return 0;
12467 }
12468
12469 static int
12470 parser_regx_options(struct parser_params *parser)
12471 {
12472 int kcode = 0;
12473 int kopt = 0;
12474 int options = 0;
12475 int c, opt, kc;
12476
12477 newtok();
12478 while (c = nextc(), ISALPHA(c)) {
12479 if (c == 'o') {
12480 options |= RE_OPTION_ONCE;
12481 }
12482 else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12483 if (kc >= 0) {
12484 if (kc != rb_ascii8bit_encindex()) kcode = c;
12485 kopt = opt;
12486 }
12487 else {
12488 options |= opt;
12489 }
12490 }
12491 else {
12492 tokadd(c);
12493 }
12494 }
12495 options |= kopt;
12496 pushback(c);
12497 if (toklen()) {
12498 tokfix();
12499 compile_error(PARSER_ARG "unknown regexp option%s - %s",
12500 toklen() > 1 ? "s" : "", tok());
12501 }
12502 return options | RE_OPTION_ENCODING(kcode);
12503 }
12504
12505 static void
12506 dispose_string(VALUE str)
12507 {
12508 rb_str_free(str);
12509 rb_gc_force_recycle(str);
12510 }
12511
12512 static int
12513 parser_tokadd_mbchar(struct parser_params *parser, int c)
12514 {
12515 int len = parser_precise_mbclen();
12516 if (!MBCLEN_CHARFOUND_P(len)) {
12517 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12518 return -1;
12519 }
12520 tokadd(c);
12521 lex_p += --len;
12522 if (len > 0) tokcopy(len);
12523 return c;
12524 }
12525
12526 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12527
12528 static inline int
12529 simple_re_meta(int c)
12530 {
12531 switch (c) {
12532 case '$': case '*': case '+': case '.':
12533 case '?': case '^': case '|':
12534 case ')': case ']': case '}': case '>':
12535 return TRUE;
12536 default:
12537 return FALSE;
12538 }
12539 }
12540
12541 static int
12542 parser_tokadd_string(struct parser_params *parser,
12543 int func, int term, int paren, long *nest,
12544 rb_encoding **encp)
12545 {
12546 int c;
12547 int has_nonascii = 0;
12548 rb_encoding *enc = *encp;
12549 char *errbuf = 0;
12550 static const char mixed_msg[] = "%s mixed within %s source";
12551
12552 #define mixed_error(enc1, enc2) if (!errbuf) { \
12553 size_t len = sizeof(mixed_msg) - 4; \
12554 len += strlen(rb_enc_name(enc1)); \
12555 len += strlen(rb_enc_name(enc2)); \
12556 errbuf = ALLOCA_N(char, len); \
12557 snprintf(errbuf, len, mixed_msg, \
12558 rb_enc_name(enc1), \
12559 rb_enc_name(enc2)); \
12560 yyerror(errbuf); \
12561 }
12562 #define mixed_escape(beg, enc1, enc2) do { \
12563 const char *pos = lex_p; \
12564 lex_p = (beg); \
12565 mixed_error((enc1), (enc2)); \
12566 lex_p = pos; \
12567 } while (0)
12568
12569 while ((c = nextc()) != -1) {
12570 if (paren && c == paren) {
12571 ++*nest;
12572 }
12573 else if (c == term) {
12574 if (!nest || !*nest) {
12575 pushback(c);
12576 break;
12577 }
12578 --*nest;
12579 }
12580 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12581 int c2 = *lex_p;
12582 if (c2 == '$' || c2 == '@' || c2 == '{') {
12583 pushback(c);
12584 break;
12585 }
12586 }
12587 else if (c == '\\') {
12588 const char *beg = lex_p - 1;
12589 c = nextc();
12590 switch (c) {
12591 case '\n':
12592 if (func & STR_FUNC_QWORDS) break;
12593 if (func & STR_FUNC_EXPAND) continue;
12594 tokadd('\\');
12595 break;
12596
12597 case '\\':
12598 if (func & STR_FUNC_ESCAPE) tokadd(c);
12599 break;
12600
12601 case 'u':
12602 if ((func & STR_FUNC_EXPAND) == 0) {
12603 tokadd('\\');
12604 break;
12605 }
12606 parser_tokadd_utf8(parser, &enc, 1,
12607 func & STR_FUNC_SYMBOL,
12608 func & STR_FUNC_REGEXP);
12609 if (has_nonascii && enc != *encp) {
12610 mixed_escape(beg, enc, *encp);
12611 }
12612 continue;
12613
12614 default:
12615 if (c == -1) return -1;
12616 if (!ISASCII(c)) {
12617 if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
12618 goto non_ascii;
12619 }
12620 if (func & STR_FUNC_REGEXP) {
12621 if (c == term && !simple_re_meta(c)) {
12622 tokadd(c);
12623 continue;
12624 }
12625 pushback(c);
12626 if ((c = tokadd_escape(&enc)) < 0)
12627 return -1;
12628 if (has_nonascii && enc != *encp) {
12629 mixed_escape(beg, enc, *encp);
12630 }
12631 continue;
12632 }
12633 else if (func & STR_FUNC_EXPAND) {
12634 pushback(c);
12635 if (func & STR_FUNC_ESCAPE) tokadd('\\');
12636 c = read_escape(0, &enc);
12637 }
12638 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12639
12640 }
12641 else if (c != term && !(paren && c == paren)) {
12642 tokadd('\\');
12643 pushback(c);
12644 continue;
12645 }
12646 }
12647 }
12648 else if (!parser_isascii()) {
12649 non_ascii:
12650 has_nonascii = 1;
12651 if (enc != *encp) {
12652 mixed_error(enc, *encp);
12653 continue;
12654 }
12655 if (tokadd_mbchar(c) == -1) return -1;
12656 continue;
12657 }
12658 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12659 pushback(c);
12660 break;
12661 }
12662 if (c & 0x80) {
12663 has_nonascii = 1;
12664 if (enc != *encp) {
12665 mixed_error(enc, *encp);
12666 continue;
12667 }
12668 }
12669 tokadd(c);
12670 }
12671 *encp = enc;
12672 return c;
12673 }
12674
12675 #define NEW_STRTERM(func, term, paren) \
12676 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12677
12678 #ifdef RIPPER
12679 static void
12680 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
12681 {
12682 if (!NIL_P(parser->delayed)) {
12683 ptrdiff_t len = lex_p - parser->tokp;
12684 if (len > 0) {
12685 rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12686 }
12687 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12688 parser->tokp = lex_p;
12689 }
12690 }
12691
12692 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
12693 #else
12694 #define flush_string_content(enc) ((void)(enc))
12695 #endif
12696
12697 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
12698
12699
12700 #ifndef RIPPER
12701 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
12702 #define SPECIAL_PUNCT(idx) ( \
12703 BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
12704 BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
12705 BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
12706 BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
12707 BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
12708 BIT('0', idx))
12709 const unsigned int ruby_global_name_punct_bits[] = {
12710 SPECIAL_PUNCT(0),
12711 SPECIAL_PUNCT(1),
12712 SPECIAL_PUNCT(2),
12713 };
12714 #undef BIT
12715 #undef SPECIAL_PUNCT
12716 #endif
12717
12718 static inline int
12719 is_global_name_punct(const int c)
12720 {
12721 if (c <= 0x20 || 0x7e < c) return 0;
12722 return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
12723 }
12724
12725 static int
12726 parser_peek_variable_name(struct parser_params *parser)
12727 {
12728 int c;
12729 const char *p = lex_p;
12730
12731 if (p + 1 >= lex_pend) return 0;
12732 c = *p++;
12733 switch (c) {
12734 case '$':
12735 if ((c = *p) == '-') {
12736 if (++p >= lex_pend) return 0;
12737 c = *p;
12738 }
12739 else if (is_global_name_punct(c) || ISDIGIT(c)) {
12740 return tSTRING_DVAR;
12741 }
12742 break;
12743 case '@':
12744 if ((c = *p) == '@') {
12745 if (++p >= lex_pend) return 0;
12746 c = *p;
12747 }
12748 break;
12749 case '{':
12750 lex_p = p;
12751 command_start = TRUE;
12752 return tSTRING_DBEG;
12753 default:
12754 return 0;
12755 }
12756 if (!ISASCII(c) || c == '_' || ISALPHA(c))
12757 return tSTRING_DVAR;
12758 return 0;
12759 }
12760
12761 static int
12762 parser_parse_string(struct parser_params *parser, NODE *quote)
12763 {
12764 int func = (int)quote->nd_func;
12765 int term = nd_term(quote);
12766 int paren = nd_paren(quote);
12767 int c, space = 0;
12768 rb_encoding *enc = current_enc;
12769
12770 if (func == -1) return tSTRING_END;
12771 c = nextc();
12772 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12773 do {c = nextc();} while (ISSPACE(c));
12774 space = 1;
12775 }
12776 if (c == term && !quote->nd_nest) {
12777 if (func & STR_FUNC_QWORDS) {
12778 quote->nd_func = -1;
12779 return ' ';
12780 }
12781 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12782 set_yylval_num(regx_options());
12783 return tREGEXP_END;
12784 }
12785 if (space) {
12786 pushback(c);
12787 return ' ';
12788 }
12789 newtok();
12790 if ((func & STR_FUNC_EXPAND) && c == '#') {
12791 int t = parser_peek_variable_name(parser);
12792 if (t) return t;
12793 tokadd('#');
12794 c = nextc();
12795 }
12796 pushback(c);
12797 if (tokadd_string(func, term, paren, "e->nd_nest,
12798 &enc) == -1) {
12799 ruby_sourceline = nd_line(quote);
12800 if (func & STR_FUNC_REGEXP) {
12801 if (parser->eofp)
12802 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12803 return tREGEXP_END;
12804 }
12805 else {
12806 if (parser->eofp)
12807 compile_error(PARSER_ARG "unterminated string meets end of file");
12808 return tSTRING_END;
12809 }
12810 }
12811
12812 tokfix();
12813 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12814 flush_string_content(enc);
12815
12816 return tSTRING_CONTENT;
12817 }
12818
12819 static int
12820 parser_heredoc_identifier(struct parser_params *parser)
12821 {
12822 int c = nextc(), term, func = 0;
12823 long len;
12824
12825 if (c == '-') {
12826 c = nextc();
12827 func = STR_FUNC_INDENT;
12828 }
12829 switch (c) {
12830 case '\'':
12831 func |= str_squote; goto quoted;
12832 case '"':
12833 func |= str_dquote; goto quoted;
12834 case '`':
12835 func |= str_xquote;
12836 quoted:
12837 newtok();
12838 tokadd(func);
12839 term = c;
12840 while ((c = nextc()) != -1 && c != term) {
12841 if (tokadd_mbchar(c) == -1) return 0;
12842 }
12843 if (c == -1) {
12844 compile_error(PARSER_ARG "unterminated here document identifier");
12845 return 0;
12846 }
12847 break;
12848
12849 default:
12850 if (!parser_is_identchar()) {
12851 pushback(c);
12852 if (func & STR_FUNC_INDENT) {
12853 pushback('-');
12854 }
12855 return 0;
12856 }
12857 newtok();
12858 term = '"';
12859 tokadd(func |= str_dquote);
12860 do {
12861 if (tokadd_mbchar(c) == -1) return 0;
12862 } while ((c = nextc()) != -1 && parser_is_identchar());
12863 pushback(c);
12864 break;
12865 }
12866
12867 tokfix();
12868 #ifdef RIPPER
12869 ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12870 #endif
12871 len = lex_p - lex_pbeg;
12872 lex_goto_eol(parser);
12873 lex_strterm = rb_node_newnode(NODE_HEREDOC,
12874 STR_NEW(tok(), toklen()),
12875 len,
12876 lex_lastline);
12877 nd_set_line(lex_strterm, ruby_sourceline);
12878 ripper_flush(parser);
12879 return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12880 }
12881
12882 static void
12883 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12884 {
12885 VALUE line;
12886
12887 lex_strterm = 0;
12888 line = here->nd_orig;
12889 lex_lastline = line;
12890 lex_pbeg = RSTRING_PTR(line);
12891 lex_pend = lex_pbeg + RSTRING_LEN(line);
12892 lex_p = lex_pbeg + here->nd_nth;
12893 heredoc_end = ruby_sourceline;
12894 ruby_sourceline = nd_line(here);
12895 dispose_string(here->nd_lit);
12896 rb_gc_force_recycle((VALUE)here);
12897 ripper_flush(parser);
12898 }
12899
12900 static int
12901 parser_whole_match_p(struct parser_params *parser,
12902 const char *eos, long len, int indent)
12903 {
12904 const char *p = lex_pbeg;
12905 long n;
12906
12907 if (indent) {
12908 while (*p && ISSPACE(*p)) p++;
12909 }
12910 n = lex_pend - (p + len);
12911 if (n < 0) return FALSE;
12912 if (n > 0 && p[len] != '\n') {
12913 if (p[len] != '\r') return FALSE;
12914 if (n <= 1 || p[len+1] != '\n') return FALSE;
12915 }
12916 return strncmp(eos, p, len) == 0;
12917 }
12918
12919 #define NUM_SUFFIX_R (1<<0)
12920 #define NUM_SUFFIX_I (1<<1)
12921 #define NUM_SUFFIX_ALL 3
12922
12923 static int
12924 parser_number_literal_suffix(struct parser_params *parser, int mask)
12925 {
12926 int c, result = 0;
12927 const char *lastp = lex_p;
12928
12929 while ((c = nextc()) != -1) {
12930 if ((mask & NUM_SUFFIX_I) && c == 'i') {
12931 result |= (mask & NUM_SUFFIX_I);
12932 mask &= ~NUM_SUFFIX_I;
12933
12934 mask &= ~NUM_SUFFIX_R;
12935 continue;
12936 }
12937 if ((mask & NUM_SUFFIX_R) && c == 'r') {
12938 result |= (mask & NUM_SUFFIX_R);
12939 mask &= ~NUM_SUFFIX_R;
12940 continue;
12941 }
12942 if (!ISASCII(c) || ISALPHA(c) || c == '_') {
12943 lex_p = lastp;
12944 return 0;
12945 }
12946 pushback(c);
12947 break;
12948 }
12949 return result;
12950 }
12951
12952 static int
12953 parser_set_number_literal(struct parser_params *parser, VALUE v, int type, int suffix)
12954 {
12955 if (suffix & NUM_SUFFIX_I) {
12956 v = rb_complex_raw(INT2FIX(0), v);
12957 type = tIMAGINARY;
12958 }
12959 set_yylval_literal(v);
12960 return type;
12961 }
12962
12963 static int
12964 parser_set_integer_literal(struct parser_params *parser, VALUE v, int suffix)
12965 {
12966 int type = tINTEGER;
12967 if (suffix & NUM_SUFFIX_R) {
12968 v = rb_rational_raw1(v);
12969 type = tRATIONAL;
12970 }
12971 return set_number_literal(v, type, suffix);
12972 }
12973
12974 #ifdef RIPPER
12975 static void
12976 ripper_dispatch_heredoc_end(struct parser_params *parser)
12977 {
12978 if (!NIL_P(parser->delayed))
12979 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12980 lex_goto_eol(parser);
12981 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12982 }
12983
12984 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12985 #else
12986 #define dispatch_heredoc_end() ((void)0)
12987 #endif
12988
12989 static int
12990 parser_here_document(struct parser_params *parser, NODE *here)
12991 {
12992 int c, func, indent = 0;
12993 const char *eos, *p, *pend;
12994 long len;
12995 VALUE str = 0;
12996 rb_encoding *enc = current_enc;
12997
12998 eos = RSTRING_PTR(here->nd_lit);
12999 len = RSTRING_LEN(here->nd_lit) - 1;
13000 indent = (func = *eos++) & STR_FUNC_INDENT;
13001
13002 if ((c = nextc()) == -1) {
13003 error:
13004 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
13005 #ifdef RIPPER
13006 if (NIL_P(parser->delayed)) {
13007 ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
13008 }
13009 else {
13010 if (str ||
13011 ((len = lex_p - parser->tokp) > 0 &&
13012 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
13013 rb_str_append(parser->delayed, str);
13014 }
13015 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
13016 }
13017 lex_goto_eol(parser);
13018 #endif
13019 restore:
13020 heredoc_restore(lex_strterm);
13021 return 0;
13022 }
13023 if (was_bol() && whole_match_p(eos, len, indent)) {
13024 dispatch_heredoc_end();
13025 heredoc_restore(lex_strterm);
13026 return tSTRING_END;
13027 }
13028
13029 if (!(func & STR_FUNC_EXPAND)) {
13030 do {
13031 p = RSTRING_PTR(lex_lastline);
13032 pend = lex_pend;
13033 if (pend > p) {
13034 switch (pend[-1]) {
13035 case '\n':
13036 if (--pend == p || pend[-1] != '\r') {
13037 pend++;
13038 break;
13039 }
13040 case '\r':
13041 --pend;
13042 }
13043 }
13044 if (str)
13045 rb_str_cat(str, p, pend - p);
13046 else
13047 str = STR_NEW(p, pend - p);
13048 if (pend < lex_pend) rb_str_cat(str, "\n", 1);
13049 lex_goto_eol(parser);
13050 if (nextc() == -1) {
13051 if (str) {
13052 dispose_string(str);
13053 str = 0;
13054 }
13055 goto error;
13056 }
13057 } while (!whole_match_p(eos, len, indent));
13058 }
13059 else {
13060
13061 newtok();
13062 if (c == '#') {
13063 int t = parser_peek_variable_name(parser);
13064 if (t) return t;
13065 tokadd('#');
13066 c = nextc();
13067 }
13068 do {
13069 pushback(c);
13070 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
13071 if (parser->eofp) goto error;
13072 goto restore;
13073 }
13074 if (c != '\n') {
13075 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
13076 flush_string_content(enc);
13077 return tSTRING_CONTENT;
13078 }
13079 tokadd(nextc());
13080
13081 if ((c = nextc()) == -1) goto error;
13082 } while (!whole_match_p(eos, len, indent));
13083 str = STR_NEW3(tok(), toklen(), enc, func);
13084 }
13085 dispatch_heredoc_end();
13086 heredoc_restore(lex_strterm);
13087 lex_strterm = NEW_STRTERM(-1, 0, 0);
13088 set_yylval_str(str);
13089 return tSTRING_CONTENT;
13090 }
13091
13092 #include "lex.c"
13093
13094 static void
13095 arg_ambiguous_gen(struct parser_params *parser)
13096 {
13097 #ifndef RIPPER
13098 rb_warning0("ambiguous first argument; put parentheses or even spaces");
13099 #else
13100 dispatch0(arg_ambiguous);
13101 #endif
13102 }
13103 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
13104
13105 static ID
13106 formal_argument_gen(struct parser_params *parser, ID lhs)
13107 {
13108 #ifndef RIPPER
13109 if (!is_local_id(lhs))
13110 yyerror("formal argument must be local variable");
13111 #endif
13112 shadowing_lvar(lhs);
13113 return lhs;
13114 }
13115
13116 static int
13117 lvar_defined_gen(struct parser_params *parser, ID id)
13118 {
13119 return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
13120 }
13121
13122
13123 static long
13124 parser_encode_length(struct parser_params *parser, const char *name, long len)
13125 {
13126 long nlen;
13127
13128 if (len > 5 && name[nlen = len - 5] == '-') {
13129 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
13130 return nlen;
13131 }
13132 if (len > 4 && name[nlen = len - 4] == '-') {
13133 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
13134 return nlen;
13135 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
13136 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
13137
13138 return nlen;
13139 }
13140 return len;
13141 }
13142
13143 static void
13144 parser_set_encode(struct parser_params *parser, const char *name)
13145 {
13146 int idx = rb_enc_find_index(name);
13147 rb_encoding *enc;
13148 VALUE excargs[3];
13149
13150 if (idx < 0) {
13151 excargs[1] = rb_sprintf("unknown encoding name: %s", name);
13152 error:
13153 excargs[0] = rb_eArgError;
13154 excargs[2] = rb_make_backtrace();
13155 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
13156 rb_exc_raise(rb_make_exception(3, excargs));
13157 }
13158 enc = rb_enc_from_index(idx);
13159 if (!rb_enc_asciicompat(enc)) {
13160 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
13161 goto error;
13162 }
13163 parser->enc = enc;
13164 #ifndef RIPPER
13165 if (ruby_debug_lines) {
13166 VALUE lines = ruby_debug_lines;
13167 long i, n = RARRAY_LEN(lines);
13168 for (i = 0; i < n; ++i) {
13169 rb_enc_associate_index(RARRAY_AREF(lines, i), idx);
13170 }
13171 }
13172 #endif
13173 }
13174
13175 static int
13176 comment_at_top(struct parser_params *parser)
13177 {
13178 const char *p = lex_pbeg, *pend = lex_p - 1;
13179 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13180 while (p < pend) {
13181 if (!ISSPACE(*p)) return 0;
13182 p++;
13183 }
13184 return 1;
13185 }
13186
13187 #ifndef RIPPER
13188 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13189 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13190
13191 static void
13192 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13193 {
13194 if (!comment_at_top(parser)) {
13195 return;
13196 }
13197 parser_set_encode(parser, val);
13198 }
13199
13200 static void
13201 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13202 {
13203 int *p = &parser->parser_token_info_enabled;
13204
13205 switch (*val) {
13206 case 't': case 'T':
13207 if (strcasecmp(val, "true") == 0) {
13208 *p = TRUE;
13209 return;
13210 }
13211 break;
13212 case 'f': case 'F':
13213 if (strcasecmp(val, "false") == 0) {
13214 *p = FALSE;
13215 return;
13216 }
13217 break;
13218 }
13219 rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13220 }
13221
13222 struct magic_comment {
13223 const char *name;
13224 rb_magic_comment_setter_t func;
13225 rb_magic_comment_length_t length;
13226 };
13227
13228 static const struct magic_comment magic_comments[] = {
13229 {"coding", magic_comment_encoding, parser_encode_length},
13230 {"encoding", magic_comment_encoding, parser_encode_length},
13231 {"warn_indent", parser_set_token_info},
13232 };
13233 #endif
13234
13235 static const char *
13236 magic_comment_marker(const char *str, long len)
13237 {
13238 long i = 2;
13239
13240 while (i < len) {
13241 switch (str[i]) {
13242 case '-':
13243 if (str[i-1] == '*' && str[i-2] == '-') {
13244 return str + i + 1;
13245 }
13246 i += 2;
13247 break;
13248 case '*':
13249 if (i + 1 >= len) return 0;
13250 if (str[i+1] != '-') {
13251 i += 4;
13252 }
13253 else if (str[i-1] != '-') {
13254 i += 2;
13255 }
13256 else {
13257 return str + i + 2;
13258 }
13259 break;
13260 default:
13261 i += 3;
13262 break;
13263 }
13264 }
13265 return 0;
13266 }
13267
13268 static int
13269 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13270 {
13271 VALUE name = 0, val = 0;
13272 const char *beg, *end, *vbeg, *vend;
13273 #define str_copy(_s, _p, _n) ((_s) \
13274 ? (void)(rb_str_resize((_s), (_n)), \
13275 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13276 : (void)((_s) = STR_NEW((_p), (_n))))
13277
13278 if (len <= 7) return FALSE;
13279 if (!(beg = magic_comment_marker(str, len))) return FALSE;
13280 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
13281 str = beg;
13282 len = end - beg - 3;
13283
13284
13285 while (len > 0) {
13286 #ifndef RIPPER
13287 const struct magic_comment *p = magic_comments;
13288 #endif
13289 char *s;
13290 int i;
13291 long n = 0;
13292
13293 for (; len > 0 && *str; str++, --len) {
13294 switch (*str) {
13295 case '\'': case '"': case ':': case ';':
13296 continue;
13297 }
13298 if (!ISSPACE(*str)) break;
13299 }
13300 for (beg = str; len > 0; str++, --len) {
13301 switch (*str) {
13302 case '\'': case '"': case ':': case ';':
13303 break;
13304 default:
13305 if (ISSPACE(*str)) break;
13306 continue;
13307 }
13308 break;
13309 }
13310 for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13311 if (!len) break;
13312 if (*str != ':') continue;
13313
13314 do str++; while (--len > 0 && ISSPACE(*str));
13315 if (!len) break;
13316 if (*str == '"') {
13317 for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13318 if (*str == '\\') {
13319 --len;
13320 ++str;
13321 }
13322 }
13323 vend = str;
13324 if (len) {
13325 --len;
13326 ++str;
13327 }
13328 }
13329 else {
13330 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13331 vend = str;
13332 }
13333 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13334
13335 n = end - beg;
13336 str_copy(name, beg, n);
13337 s = RSTRING_PTR(name);
13338 for (i = 0; i < n; ++i) {
13339 if (s[i] == '-') s[i] = '_';
13340 }
13341 #ifndef RIPPER
13342 do {
13343 if (STRNCASECMP(p->name, s, n) == 0) {
13344 n = vend - vbeg;
13345 if (p->length) {
13346 n = (*p->length)(parser, vbeg, n);
13347 }
13348 str_copy(val, vbeg, n);
13349 (*p->func)(parser, s, RSTRING_PTR(val));
13350 break;
13351 }
13352 } while (++p < magic_comments + numberof(magic_comments));
13353 #else
13354 str_copy(val, vbeg, vend - vbeg);
13355 dispatch2(magic_comment, name, val);
13356 #endif
13357 }
13358
13359 return TRUE;
13360 }
13361
13362 static void
13363 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
13364 {
13365 int sep = 0;
13366 const char *beg = str;
13367 VALUE s;
13368
13369 for (;;) {
13370 if (send - str <= 6) return;
13371 switch (str[6]) {
13372 case 'C': case 'c': str += 6; continue;
13373 case 'O': case 'o': str += 5; continue;
13374 case 'D': case 'd': str += 4; continue;
13375 case 'I': case 'i': str += 3; continue;
13376 case 'N': case 'n': str += 2; continue;
13377 case 'G': case 'g': str += 1; continue;
13378 case '=': case ':':
13379 sep = 1;
13380 str += 6;
13381 break;
13382 default:
13383 str += 6;
13384 if (ISSPACE(*str)) break;
13385 continue;
13386 }
13387 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
13388 }
13389 for (;;) {
13390 do {
13391 if (++str >= send) return;
13392 } while (ISSPACE(*str));
13393 if (sep) break;
13394 if (*str != '=' && *str != ':') return;
13395 sep = 1;
13396 str++;
13397 }
13398 beg = str;
13399 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
13400 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
13401 parser_set_encode(parser, RSTRING_PTR(s));
13402 rb_str_resize(s, 0);
13403 }
13404
13405 static void
13406 parser_prepare(struct parser_params *parser)
13407 {
13408 int c = nextc();
13409 switch (c) {
13410 case '#':
13411 if (peek('!')) parser->has_shebang = 1;
13412 break;
13413 case 0xef:
13414 if (lex_pend - lex_p >= 2 &&
13415 (unsigned char)lex_p[0] == 0xbb &&
13416 (unsigned char)lex_p[1] == 0xbf) {
13417 parser->enc = rb_utf8_encoding();
13418 lex_p += 2;
13419 lex_pbeg = lex_p;
13420 return;
13421 }
13422 break;
13423 case EOF:
13424 return;
13425 }
13426 pushback(c);
13427 parser->enc = rb_enc_get(lex_lastline);
13428 }
13429
13430 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
13431 #define IS_END() IS_lex_state(EXPR_END_ANY)
13432 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
13433 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
13434 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
13435 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
13436 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
13437
13438 #ifndef RIPPER
13439 #define ambiguous_operator(op, syn) ( \
13440 rb_warning0("`"op"' after local variable or literal is interpreted as binary operator"), \
13441 rb_warning0("even though it seems like "syn""))
13442 #else
13443 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
13444 #endif
13445 #define warn_balanced(op, syn) ((void) \
13446 (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
13447 space_seen && !ISSPACE(c) && \
13448 (ambiguous_operator(op, syn), 0)))
13449
13450 static int
13451 parser_yylex(struct parser_params *parser)
13452 {
13453 register int c;
13454 int space_seen = 0;
13455 int cmd_state;
13456 enum lex_state_e last_state;
13457 rb_encoding *enc;
13458 int mb;
13459 #ifdef RIPPER
13460 int fallthru = FALSE;
13461 #endif
13462
13463 if (lex_strterm) {
13464 int token;
13465 if (nd_type(lex_strterm) == NODE_HEREDOC) {
13466 token = here_document(lex_strterm);
13467 if (token == tSTRING_END) {
13468 lex_strterm = 0;
13469 lex_state = EXPR_END;
13470 }
13471 }
13472 else {
13473 token = parse_string(lex_strterm);
13474 if (token == tSTRING_END || token == tREGEXP_END) {
13475 rb_gc_force_recycle((VALUE)lex_strterm);
13476 lex_strterm = 0;
13477 lex_state = EXPR_END;
13478 }
13479 }
13480 return token;
13481 }
13482 cmd_state = command_start;
13483 command_start = FALSE;
13484 retry:
13485 last_state = lex_state;
13486 switch (c = nextc()) {
13487 case '\0':
13488 case '\004':
13489 case '\032':
13490 case -1:
13491 return 0;
13492
13493
13494 case ' ': case '\t': case '\f': case '\r':
13495 case '\13':
13496 space_seen = 1;
13497 #ifdef RIPPER
13498 while ((c = nextc())) {
13499 switch (c) {
13500 case ' ': case '\t': case '\f': case '\r':
13501 case '\13':
13502 break;
13503 default:
13504 goto outofloop;
13505 }
13506 }
13507 outofloop:
13508 pushback(c);
13509 ripper_dispatch_scan_event(parser, tSP);
13510 #endif
13511 goto retry;
13512
13513 case '#':
13514
13515 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
13516 if (comment_at_top(parser)) {
13517 set_file_encoding(parser, lex_p, lex_pend);
13518 }
13519 }
13520 lex_p = lex_pend;
13521 #ifdef RIPPER
13522 ripper_dispatch_scan_event(parser, tCOMMENT);
13523 fallthru = TRUE;
13524 #endif
13525
13526 case '\n':
13527 if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT | EXPR_LABELARG)) {
13528 #ifdef RIPPER
13529 if (!fallthru) {
13530 ripper_dispatch_scan_event(parser, tIGNORED_NL);
13531 }
13532 fallthru = FALSE;
13533 #endif
13534 if (IS_lex_state(EXPR_LABELARG) && parser->parser_in_kwarg) {
13535 goto normal_newline;
13536 }
13537 goto retry;
13538 }
13539 while ((c = nextc())) {
13540 switch (c) {
13541 case ' ': case '\t': case '\f': case '\r':
13542 case '\13':
13543 space_seen = 1;
13544 break;
13545 case '.': {
13546 if ((c = nextc()) != '.') {
13547 pushback(c);
13548 pushback('.');
13549 goto retry;
13550 }
13551 }
13552 default:
13553 --ruby_sourceline;
13554 lex_nextline = lex_lastline;
13555 case -1:
13556 lex_goto_eol(parser);
13557 #ifdef RIPPER
13558 if (c != -1) {
13559 parser->tokp = lex_p;
13560 }
13561 #endif
13562 goto normal_newline;
13563 }
13564 }
13565 normal_newline:
13566 command_start = TRUE;
13567 lex_state = EXPR_BEG;
13568 return '\n';
13569
13570 case '*':
13571 if ((c = nextc()) == '*') {
13572 if ((c = nextc()) == '=') {
13573 set_yylval_id(tPOW);
13574 lex_state = EXPR_BEG;
13575 return tOP_ASGN;
13576 }
13577 pushback(c);
13578 if (IS_SPCARG(c)) {
13579 rb_warning0("`**' interpreted as argument prefix");
13580 c = tDSTAR;
13581 }
13582 else if (IS_BEG()) {
13583 c = tDSTAR;
13584 }
13585 else {
13586 warn_balanced("**", "argument prefix");
13587 c = tPOW;
13588 }
13589 }
13590 else {
13591 if (c == '=') {
13592 set_yylval_id('*');
13593 lex_state = EXPR_BEG;
13594 return tOP_ASGN;
13595 }
13596 pushback(c);
13597 if (IS_SPCARG(c)) {
13598 rb_warning0("`*' interpreted as argument prefix");
13599 c = tSTAR;
13600 }
13601 else if (IS_BEG()) {
13602 c = tSTAR;
13603 }
13604 else {
13605 warn_balanced("*", "argument prefix");
13606 c = '*';
13607 }
13608 }
13609 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13610 return c;
13611
13612 case '!':
13613 c = nextc();
13614 if (IS_AFTER_OPERATOR()) {
13615 lex_state = EXPR_ARG;
13616 if (c == '@') {
13617 return '!';
13618 }
13619 }
13620 else {
13621 lex_state = EXPR_BEG;
13622 }
13623 if (c == '=') {
13624 return tNEQ;
13625 }
13626 if (c == '~') {
13627 return tNMATCH;
13628 }
13629 pushback(c);
13630 return '!';
13631
13632 case '=':
13633 if (was_bol()) {
13634
13635 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13636 #ifdef RIPPER
13637 int first_p = TRUE;
13638
13639 lex_goto_eol(parser);
13640 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13641 #endif
13642 for (;;) {
13643 lex_goto_eol(parser);
13644 #ifdef RIPPER
13645 if (!first_p) {
13646 ripper_dispatch_scan_event(parser, tEMBDOC);
13647 }
13648 first_p = FALSE;
13649 #endif
13650 c = nextc();
13651 if (c == -1) {
13652 compile_error(PARSER_ARG "embedded document meets end of file");
13653 return 0;
13654 }
13655 if (c != '=') continue;
13656 if (strncmp(lex_p, "end", 3) == 0 &&
13657 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13658 break;
13659 }
13660 }
13661 lex_goto_eol(parser);
13662 #ifdef RIPPER
13663 ripper_dispatch_scan_event(parser, tEMBDOC_END);
13664 #endif
13665 goto retry;
13666 }
13667 }
13668
13669 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13670 if ((c = nextc()) == '=') {
13671 if ((c = nextc()) == '=') {
13672 return tEQQ;
13673 }
13674 pushback(c);
13675 return tEQ;
13676 }
13677 if (c == '~') {
13678 return tMATCH;
13679 }
13680 else if (c == '>') {
13681 return tASSOC;
13682 }
13683 pushback(c);
13684 return '=';
13685
13686 case '<':
13687 last_state = lex_state;
13688 c = nextc();
13689 if (c == '<' &&
13690 !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
13691 !IS_END() &&
13692 (!IS_ARG() || space_seen)) {
13693 int token = heredoc_identifier();
13694 if (token) return token;
13695 }
13696 if (IS_AFTER_OPERATOR()) {
13697 lex_state = EXPR_ARG;
13698 }
13699 else {
13700 if (IS_lex_state(EXPR_CLASS))
13701 command_start = TRUE;
13702 lex_state = EXPR_BEG;
13703 }
13704 if (c == '=') {
13705 if ((c = nextc()) == '>') {
13706 return tCMP;
13707 }
13708 pushback(c);
13709 return tLEQ;
13710 }
13711 if (c == '<') {
13712 if ((c = nextc()) == '=') {
13713 set_yylval_id(tLSHFT);
13714 lex_state = EXPR_BEG;
13715 return tOP_ASGN;
13716 }
13717 pushback(c);
13718 warn_balanced("<<", "here document");
13719 return tLSHFT;
13720 }
13721 pushback(c);
13722 return '<';
13723
13724 case '>':
13725 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13726 if ((c = nextc()) == '=') {
13727 return tGEQ;
13728 }
13729 if (c == '>') {
13730 if ((c = nextc()) == '=') {
13731 set_yylval_id(tRSHFT);
13732 lex_state = EXPR_BEG;
13733 return tOP_ASGN;
13734 }
13735 pushback(c);
13736 return tRSHFT;
13737 }
13738 pushback(c);
13739 return '>';
13740
13741 case '"':
13742 lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13743 return tSTRING_BEG;
13744
13745 case '`':
13746 if (IS_lex_state(EXPR_FNAME)) {
13747 lex_state = EXPR_ENDFN;
13748 return c;
13749 }
13750 if (IS_lex_state(EXPR_DOT)) {
13751 if (cmd_state)
13752 lex_state = EXPR_CMDARG;
13753 else
13754 lex_state = EXPR_ARG;
13755 return c;
13756 }
13757 lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13758 return tXSTRING_BEG;
13759
13760 case '\'':
13761 lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13762 return tSTRING_BEG;
13763
13764 case '?':
13765 if (IS_END()) {
13766 lex_state = EXPR_VALUE;
13767 return '?';
13768 }
13769 c = nextc();
13770 if (c == -1) {
13771 compile_error(PARSER_ARG "incomplete character syntax");
13772 return 0;
13773 }
13774 if (rb_enc_isspace(c, current_enc)) {
13775 if (!IS_ARG()) {
13776 int c2 = 0;
13777 switch (c) {
13778 case ' ':
13779 c2 = 's';
13780 break;
13781 case '\n':
13782 c2 = 'n';
13783 break;
13784 case '\t':
13785 c2 = 't';
13786 break;
13787 case '\v':
13788 c2 = 'v';
13789 break;
13790 case '\r':
13791 c2 = 'r';
13792 break;
13793 case '\f':
13794 c2 = 'f';
13795 break;
13796 }
13797 if (c2) {
13798 rb_warnI("invalid character syntax; use ?\\%c", c2);
13799 }
13800 }
13801 ternary:
13802 pushback(c);
13803 lex_state = EXPR_VALUE;
13804 return '?';
13805 }
13806 newtok();
13807 enc = current_enc;
13808 if (!parser_isascii()) {
13809 if (tokadd_mbchar(c) == -1) return 0;
13810 }
13811 else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
13812 lex_p < lex_pend && is_identchar(lex_p, lex_pend, current_enc)) {
13813 goto ternary;
13814 }
13815 else if (c == '\\') {
13816 if (peek('u')) {
13817 nextc();
13818 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13819 if (0x80 <= c) {
13820 tokaddmbc(c, enc);
13821 }
13822 else {
13823 tokadd(c);
13824 }
13825 }
13826 else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13827 nextc();
13828 if (tokadd_mbchar(c) == -1) return 0;
13829 }
13830 else {
13831 c = read_escape(0, &enc);
13832 tokadd(c);
13833 }
13834 }
13835 else {
13836 tokadd(c);
13837 }
13838 tokfix();
13839 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13840 lex_state = EXPR_END;
13841 return tCHAR;
13842
13843 case '&':
13844 if ((c = nextc()) == '&') {
13845 lex_state = EXPR_BEG;
13846 if ((c = nextc()) == '=') {
13847 set_yylval_id(tANDOP);
13848 lex_state = EXPR_BEG;
13849 return tOP_ASGN;
13850 }
13851 pushback(c);
13852 return tANDOP;
13853 }
13854 else if (c == '=') {
13855 set_yylval_id('&');
13856 lex_state = EXPR_BEG;
13857 return tOP_ASGN;
13858 }
13859 pushback(c);
13860 if (IS_SPCARG(c)) {
13861 rb_warning0("`&' interpreted as argument prefix");
13862 c = tAMPER;
13863 }
13864 else if (IS_BEG()) {
13865 c = tAMPER;
13866 }
13867 else {
13868 warn_balanced("&", "argument prefix");
13869 c = '&';
13870 }
13871 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13872 return c;
13873
13874 case '|':
13875 if ((c = nextc()) == '|') {
13876 lex_state = EXPR_BEG;
13877 if ((c = nextc()) == '=') {
13878 set_yylval_id(tOROP);
13879 lex_state = EXPR_BEG;
13880 return tOP_ASGN;
13881 }
13882 pushback(c);
13883 return tOROP;
13884 }
13885 if (c == '=') {
13886 set_yylval_id('|');
13887 lex_state = EXPR_BEG;
13888 return tOP_ASGN;
13889 }
13890 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13891 pushback(c);
13892 return '|';
13893
13894 case '+':
13895 c = nextc();
13896 if (IS_AFTER_OPERATOR()) {
13897 lex_state = EXPR_ARG;
13898 if (c == '@') {
13899 return tUPLUS;
13900 }
13901 pushback(c);
13902 return '+';
13903 }
13904 if (c == '=') {
13905 set_yylval_id('+');
13906 lex_state = EXPR_BEG;
13907 return tOP_ASGN;
13908 }
13909 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13910 lex_state = EXPR_BEG;
13911 pushback(c);
13912 if (c != -1 && ISDIGIT(c)) {
13913 c = '+';
13914 goto start_num;
13915 }
13916 return tUPLUS;
13917 }
13918 lex_state = EXPR_BEG;
13919 pushback(c);
13920 warn_balanced("+", "unary operator");
13921 return '+';
13922
13923 case '-':
13924 c = nextc();
13925 if (IS_AFTER_OPERATOR()) {
13926 lex_state = EXPR_ARG;
13927 if (c == '@') {
13928 return tUMINUS;
13929 }
13930 pushback(c);
13931 return '-';
13932 }
13933 if (c == '=') {
13934 set_yylval_id('-');
13935 lex_state = EXPR_BEG;
13936 return tOP_ASGN;
13937 }
13938 if (c == '>') {
13939 lex_state = EXPR_ENDFN;
13940 return tLAMBDA;
13941 }
13942 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13943 lex_state = EXPR_BEG;
13944 pushback(c);
13945 if (c != -1 && ISDIGIT(c)) {
13946 return tUMINUS_NUM;
13947 }
13948 return tUMINUS;
13949 }
13950 lex_state = EXPR_BEG;
13951 pushback(c);
13952 warn_balanced("-", "unary operator");
13953 return '-';
13954
13955 case '.':
13956 lex_state = EXPR_BEG;
13957 if ((c = nextc()) == '.') {
13958 if ((c = nextc()) == '.') {
13959 return tDOT3;
13960 }
13961 pushback(c);
13962 return tDOT2;
13963 }
13964 pushback(c);
13965 if (c != -1 && ISDIGIT(c)) {
13966 yyerror("no .<digit> floating literal anymore; put 0 before dot");
13967 }
13968 lex_state = EXPR_DOT;
13969 return '.';
13970
13971 start_num:
13972 case '0': case '1': case '2': case '3': case '4':
13973 case '5': case '6': case '7': case '8': case '9':
13974 {
13975 int is_float, seen_point, seen_e, nondigit;
13976 int suffix;
13977
13978 is_float = seen_point = seen_e = nondigit = 0;
13979 lex_state = EXPR_END;
13980 newtok();
13981 if (c == '-' || c == '+') {
13982 tokadd(c);
13983 c = nextc();
13984 }
13985 if (c == '0') {
13986 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13987 int start = toklen();
13988 c = nextc();
13989 if (c == 'x' || c == 'X') {
13990
13991 c = nextc();
13992 if (c != -1 && ISXDIGIT(c)) {
13993 do {
13994 if (c == '_') {
13995 if (nondigit) break;
13996 nondigit = c;
13997 continue;
13998 }
13999 if (!ISXDIGIT(c)) break;
14000 nondigit = 0;
14001 tokadd(c);
14002 } while ((c = nextc()) != -1);
14003 }
14004 pushback(c);
14005 tokfix();
14006 if (toklen() == start) {
14007 no_digits();
14008 }
14009 else if (nondigit) goto trailing_uc;
14010 suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14011 return set_integer_literal(rb_cstr_to_inum(tok(), 16, FALSE), suffix);
14012 }
14013 if (c == 'b' || c == 'B') {
14014
14015 c = nextc();
14016 if (c == '0' || c == '1') {
14017 do {
14018 if (c == '_') {
14019 if (nondigit) break;
14020 nondigit = c;
14021 continue;
14022 }
14023 if (c != '0' && c != '1') break;
14024 nondigit = 0;
14025 tokadd(c);
14026 } while ((c = nextc()) != -1);
14027 }
14028 pushback(c);
14029 tokfix();
14030 if (toklen() == start) {
14031 no_digits();
14032 }
14033 else if (nondigit) goto trailing_uc;
14034 suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14035 return set_integer_literal(rb_cstr_to_inum(tok(), 2, FALSE), suffix);
14036 }
14037 if (c == 'd' || c == 'D') {
14038
14039 c = nextc();
14040 if (c != -1 && ISDIGIT(c)) {
14041 do {
14042 if (c == '_') {
14043 if (nondigit) break;
14044 nondigit = c;
14045 continue;
14046 }
14047 if (!ISDIGIT(c)) break;
14048 nondigit = 0;
14049 tokadd(c);
14050 } while ((c = nextc()) != -1);
14051 }
14052 pushback(c);
14053 tokfix();
14054 if (toklen() == start) {
14055 no_digits();
14056 }
14057 else if (nondigit) goto trailing_uc;
14058 suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14059 return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14060 }
14061 if (c == '_') {
14062
14063 goto octal_number;
14064 }
14065 if (c == 'o' || c == 'O') {
14066
14067 c = nextc();
14068 if (c == -1 || c == '_' || !ISDIGIT(c)) {
14069 no_digits();
14070 }
14071 }
14072 if (c >= '0' && c <= '7') {
14073
14074 octal_number:
14075 do {
14076 if (c == '_') {
14077 if (nondigit) break;
14078 nondigit = c;
14079 continue;
14080 }
14081 if (c < '0' || c > '9') break;
14082 if (c > '7') goto invalid_octal;
14083 nondigit = 0;
14084 tokadd(c);
14085 } while ((c = nextc()) != -1);
14086 if (toklen() > start) {
14087 pushback(c);
14088 tokfix();
14089 if (nondigit) goto trailing_uc;
14090 suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14091 return set_integer_literal(rb_cstr_to_inum(tok(), 8, FALSE), suffix);
14092 }
14093 if (nondigit) {
14094 pushback(c);
14095 goto trailing_uc;
14096 }
14097 }
14098 if (c > '7' && c <= '9') {
14099 invalid_octal:
14100 yyerror("Invalid octal digit");
14101 }
14102 else if (c == '.' || c == 'e' || c == 'E') {
14103 tokadd('0');
14104 }
14105 else {
14106 pushback(c);
14107 suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14108 return set_integer_literal(INT2FIX(0), suffix);
14109 }
14110 }
14111
14112 for (;;) {
14113 switch (c) {
14114 case '0': case '1': case '2': case '3': case '4':
14115 case '5': case '6': case '7': case '8': case '9':
14116 nondigit = 0;
14117 tokadd(c);
14118 break;
14119
14120 case '.':
14121 if (nondigit) goto trailing_uc;
14122 if (seen_point || seen_e) {
14123 goto decode_num;
14124 }
14125 else {
14126 int c0 = nextc();
14127 if (c0 == -1 || !ISDIGIT(c0)) {
14128 pushback(c0);
14129 goto decode_num;
14130 }
14131 c = c0;
14132 }
14133 seen_point = toklen();
14134 tokadd('.');
14135 tokadd(c);
14136 is_float++;
14137 nondigit = 0;
14138 break;
14139
14140 case 'e':
14141 case 'E':
14142 if (nondigit) {
14143 pushback(c);
14144 c = nondigit;
14145 goto decode_num;
14146 }
14147 if (seen_e) {
14148 goto decode_num;
14149 }
14150 nondigit = c;
14151 c = nextc();
14152 if (c != '-' && c != '+' && !ISDIGIT(c)) {
14153 pushback(c);
14154 nondigit = 0;
14155 goto decode_num;
14156 }
14157 tokadd(nondigit);
14158 seen_e++;
14159 is_float++;
14160 tokadd(c);
14161 nondigit = (c == '-' || c == '+') ? c : 0;
14162 break;
14163
14164 case '_':
14165 if (nondigit) goto decode_num;
14166 nondigit = c;
14167 break;
14168
14169 default:
14170 goto decode_num;
14171 }
14172 c = nextc();
14173 }
14174
14175 decode_num:
14176 pushback(c);
14177 if (nondigit) {
14178 char tmp[30];
14179 trailing_uc:
14180 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14181 yyerror(tmp);
14182 }
14183 tokfix();
14184 if (is_float) {
14185 int type = tFLOAT;
14186 VALUE v;
14187
14188 suffix = number_literal_suffix(seen_e ? NUM_SUFFIX_I : NUM_SUFFIX_ALL);
14189 if (suffix & NUM_SUFFIX_R) {
14190 char *point = &tok()[seen_point];
14191 size_t fraclen = toklen()-seen_point-1;
14192 type = tRATIONAL;
14193 memmove(point, point+1, fraclen+1);
14194 v = rb_cstr_to_inum(tok(), 10, FALSE);
14195 v = rb_rational_new(v, rb_int_positive_pow(10, fraclen));
14196 }
14197 else {
14198 double d = strtod(tok(), 0);
14199 if (errno == ERANGE) {
14200 rb_warningS("Float %s out of range", tok());
14201 errno = 0;
14202 }
14203 v = DBL2NUM(d);
14204 }
14205 return set_number_literal(v, type, suffix);
14206 }
14207 suffix = number_literal_suffix(NUM_SUFFIX_ALL);
14208 return set_integer_literal(rb_cstr_to_inum(tok(), 10, FALSE), suffix);
14209 }
14210
14211 case ')':
14212 case ']':
14213 paren_nest--;
14214 case '}':
14215 COND_LEXPOP();
14216 CMDARG_LEXPOP();
14217 if (c == ')')
14218 lex_state = EXPR_ENDFN;
14219 else
14220 lex_state = EXPR_ENDARG;
14221 if (c == '}') {
14222 if (!brace_nest--) c = tSTRING_DEND;
14223 }
14224 return c;
14225
14226 case ':':
14227 c = nextc();
14228 if (c == ':') {
14229 if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
14230 lex_state = EXPR_BEG;
14231 return tCOLON3;
14232 }
14233 lex_state = EXPR_DOT;
14234 return tCOLON2;
14235 }
14236 if (IS_END() || ISSPACE(c)) {
14237 pushback(c);
14238 warn_balanced(":", "symbol literal");
14239 lex_state = EXPR_BEG;
14240 return ':';
14241 }
14242 switch (c) {
14243 case '\'':
14244 lex_strterm = NEW_STRTERM(str_ssym, c, 0);
14245 break;
14246 case '"':
14247 lex_strterm = NEW_STRTERM(str_dsym, c, 0);
14248 break;
14249 default:
14250 pushback(c);
14251 break;
14252 }
14253 lex_state = EXPR_FNAME;
14254 return tSYMBEG;
14255
14256 case '/':
14257 if (IS_lex_state(EXPR_BEG_ANY)) {
14258 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14259 return tREGEXP_BEG;
14260 }
14261 if ((c = nextc()) == '=') {
14262 set_yylval_id('/');
14263 lex_state = EXPR_BEG;
14264 return tOP_ASGN;
14265 }
14266 pushback(c);
14267 if (IS_SPCARG(c)) {
14268 (void)arg_ambiguous();
14269 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14270 return tREGEXP_BEG;
14271 }
14272 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14273 warn_balanced("/", "regexp literal");
14274 return '/';
14275
14276 case '^':
14277 if ((c = nextc()) == '=') {
14278 set_yylval_id('^');
14279 lex_state = EXPR_BEG;
14280 return tOP_ASGN;
14281 }
14282 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14283 pushback(c);
14284 return '^';
14285
14286 case ';':
14287 lex_state = EXPR_BEG;
14288 command_start = TRUE;
14289 return ';';
14290
14291 case ',':
14292 lex_state = EXPR_BEG;
14293 return ',';
14294
14295 case '~':
14296 if (IS_AFTER_OPERATOR()) {
14297 if ((c = nextc()) != '@') {
14298 pushback(c);
14299 }
14300 lex_state = EXPR_ARG;
14301 }
14302 else {
14303 lex_state = EXPR_BEG;
14304 }
14305 return '~';
14306
14307 case '(':
14308 if (IS_BEG()) {
14309 c = tLPAREN;
14310 }
14311 else if (IS_SPCARG(-1)) {
14312 c = tLPAREN_ARG;
14313 }
14314 paren_nest++;
14315 COND_PUSH(0);
14316 CMDARG_PUSH(0);
14317 lex_state = EXPR_BEG;
14318 return c;
14319
14320 case '[':
14321 paren_nest++;
14322 if (IS_AFTER_OPERATOR()) {
14323 lex_state = EXPR_ARG;
14324 if ((c = nextc()) == ']') {
14325 if ((c = nextc()) == '=') {
14326 return tASET;
14327 }
14328 pushback(c);
14329 return tAREF;
14330 }
14331 pushback(c);
14332 return '[';
14333 }
14334 else if (IS_BEG()) {
14335 c = tLBRACK;
14336 }
14337 else if (IS_ARG() && space_seen) {
14338 c = tLBRACK;
14339 }
14340 lex_state = EXPR_BEG;
14341 COND_PUSH(0);
14342 CMDARG_PUSH(0);
14343 return c;
14344
14345 case '{':
14346 ++brace_nest;
14347 if (lpar_beg && lpar_beg == paren_nest) {
14348 lex_state = EXPR_BEG;
14349 lpar_beg = 0;
14350 --paren_nest;
14351 COND_PUSH(0);
14352 CMDARG_PUSH(0);
14353 return tLAMBEG;
14354 }
14355 if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
14356 c = '{';
14357 else if (IS_lex_state(EXPR_ENDARG))
14358 c = tLBRACE_ARG;
14359 else
14360 c = tLBRACE;
14361 COND_PUSH(0);
14362 CMDARG_PUSH(0);
14363 lex_state = EXPR_BEG;
14364 if (c != tLBRACE) command_start = TRUE;
14365 return c;
14366
14367 case '\\':
14368 c = nextc();
14369 if (c == '\n') {
14370 space_seen = 1;
14371 #ifdef RIPPER
14372 ripper_dispatch_scan_event(parser, tSP);
14373 #endif
14374 goto retry;
14375 }
14376 pushback(c);
14377 return '\\';
14378
14379 case '%':
14380 if (IS_lex_state(EXPR_BEG_ANY)) {
14381 int term;
14382 int paren;
14383
14384 c = nextc();
14385 quotation:
14386 if (c == -1 || !ISALNUM(c)) {
14387 term = c;
14388 c = 'Q';
14389 }
14390 else {
14391 term = nextc();
14392 if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14393 yyerror("unknown type of %string");
14394 return 0;
14395 }
14396 }
14397 if (c == -1 || term == -1) {
14398 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14399 return 0;
14400 }
14401 paren = term;
14402 if (term == '(') term = ')';
14403 else if (term == '[') term = ']';
14404 else if (term == '{') term = '}';
14405 else if (term == '<') term = '>';
14406 else paren = 0;
14407
14408 switch (c) {
14409 case 'Q':
14410 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14411 return tSTRING_BEG;
14412
14413 case 'q':
14414 lex_strterm = NEW_STRTERM(str_squote, term, paren);
14415 return tSTRING_BEG;
14416
14417 case 'W':
14418 lex_strterm = NEW_STRTERM(str_dword, term, paren);
14419 do {c = nextc();} while (ISSPACE(c));
14420 pushback(c);
14421 return tWORDS_BEG;
14422
14423 case 'w':
14424 lex_strterm = NEW_STRTERM(str_sword, term, paren);
14425 do {c = nextc();} while (ISSPACE(c));
14426 pushback(c);
14427 return tQWORDS_BEG;
14428
14429 case 'I':
14430 lex_strterm = NEW_STRTERM(str_dword, term, paren);
14431 do {c = nextc();} while (ISSPACE(c));
14432 pushback(c);
14433 return tSYMBOLS_BEG;
14434
14435 case 'i':
14436 lex_strterm = NEW_STRTERM(str_sword, term, paren);
14437 do {c = nextc();} while (ISSPACE(c));
14438 pushback(c);
14439 return tQSYMBOLS_BEG;
14440
14441 case 'x':
14442 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14443 return tXSTRING_BEG;
14444
14445 case 'r':
14446 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14447 return tREGEXP_BEG;
14448
14449 case 's':
14450 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14451 lex_state = EXPR_FNAME;
14452 return tSYMBEG;
14453
14454 default:
14455 yyerror("unknown type of %string");
14456 return 0;
14457 }
14458 }
14459 if ((c = nextc()) == '=') {
14460 set_yylval_id('%');
14461 lex_state = EXPR_BEG;
14462 return tOP_ASGN;
14463 }
14464 if (IS_SPCARG(c)) {
14465 goto quotation;
14466 }
14467 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14468 pushback(c);
14469 warn_balanced("%%", "string literal");
14470 return '%';
14471
14472 case '$':
14473 lex_state = EXPR_END;
14474 newtok();
14475 c = nextc();
14476 switch (c) {
14477 case '_':
14478 c = nextc();
14479 if (parser_is_identchar()) {
14480 tokadd('$');
14481 tokadd('_');
14482 break;
14483 }
14484 pushback(c);
14485 c = '_';
14486
14487 case '~':
14488 case '*':
14489 case '$':
14490 case '?':
14491 case '!':
14492 case '@':
14493 case '/':
14494 case '\\':
14495 case ';':
14496 case ',':
14497 case '.':
14498 case '=':
14499 case ':':
14500 case '<':
14501 case '>':
14502 case '\"':
14503 tokadd('$');
14504 tokadd(c);
14505 goto gvar;
14506
14507 case '-':
14508 tokadd('$');
14509 tokadd(c);
14510 c = nextc();
14511 if (parser_is_identchar()) {
14512 if (tokadd_mbchar(c) == -1) return 0;
14513 }
14514 else {
14515 pushback(c);
14516 pushback('-');
14517 return '$';
14518 }
14519 gvar:
14520 set_yylval_name(rb_intern3(tok(), tokidx, current_enc));
14521 return tGVAR;
14522
14523 case '&':
14524 case '`':
14525 case '\'':
14526 case '+':
14527 if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14528 tokadd('$');
14529 tokadd(c);
14530 goto gvar;
14531 }
14532 set_yylval_node(NEW_BACK_REF(c));
14533 return tBACK_REF;
14534
14535 case '1': case '2': case '3':
14536 case '4': case '5': case '6':
14537 case '7': case '8': case '9':
14538 tokadd('$');
14539 do {
14540 tokadd(c);
14541 c = nextc();
14542 } while (c != -1 && ISDIGIT(c));
14543 pushback(c);
14544 if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14545 tokfix();
14546 set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
14547 return tNTH_REF;
14548
14549 default:
14550 if (!parser_is_identchar()) {
14551 pushback(c);
14552 compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14553 return 0;
14554 }
14555 case '0':
14556 tokadd('$');
14557 }
14558 break;
14559
14560 case '@':
14561 c = nextc();
14562 newtok();
14563 tokadd('@');
14564 if (c == '@') {
14565 tokadd('@');
14566 c = nextc();
14567 }
14568 if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
14569 pushback(c);
14570 if (tokidx == 1) {
14571 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14572 }
14573 else {
14574 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14575 }
14576 return 0;
14577 }
14578 break;
14579
14580 case '_':
14581 if (was_bol() && whole_match_p("__END__", 7, 0)) {
14582 ruby__end__seen = 1;
14583 parser->eofp = Qtrue;
14584 #ifndef RIPPER
14585 return -1;
14586 #else
14587 lex_goto_eol(parser);
14588 ripper_dispatch_scan_event(parser, k__END__);
14589 return 0;
14590 #endif
14591 }
14592 newtok();
14593 break;
14594
14595 default:
14596 if (!parser_is_identchar()) {
14597 compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
14598 goto retry;
14599 }
14600
14601 newtok();
14602 break;
14603 }
14604
14605 mb = ENC_CODERANGE_7BIT;
14606 do {
14607 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14608 if (tokadd_mbchar(c) == -1) return 0;
14609 c = nextc();
14610 } while (parser_is_identchar());
14611 switch (tok()[0]) {
14612 case '@': case '$':
14613 pushback(c);
14614 break;
14615 default:
14616 if ((c == '!' || c == '?') && !peek('=')) {
14617 tokadd(c);
14618 }
14619 else {
14620 pushback(c);
14621 }
14622 }
14623 tokfix();
14624
14625 {
14626 int result = 0;
14627
14628 last_state = lex_state;
14629 switch (tok()[0]) {
14630 case '$':
14631 lex_state = EXPR_END;
14632 result = tGVAR;
14633 break;
14634 case '@':
14635 lex_state = EXPR_END;
14636 if (tok()[1] == '@')
14637 result = tCVAR;
14638 else
14639 result = tIVAR;
14640 break;
14641
14642 default:
14643 if (toklast() == '!' || toklast() == '?') {
14644 result = tFID;
14645 }
14646 else {
14647 if (IS_lex_state(EXPR_FNAME)) {
14648 if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14649 (!peek('=') || (peek_n('>', 1)))) {
14650 result = tIDENTIFIER;
14651 tokadd(c);
14652 tokfix();
14653 }
14654 else {
14655 pushback(c);
14656 }
14657 }
14658 if (result == 0 && ISUPPER(tok()[0])) {
14659 result = tCONSTANT;
14660 }
14661 else {
14662 result = tIDENTIFIER;
14663 }
14664 }
14665
14666 if (IS_LABEL_POSSIBLE()) {
14667 if (IS_LABEL_SUFFIX(0)) {
14668 lex_state = EXPR_LABELARG;
14669 nextc();
14670 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
14671 return tLABEL;
14672 }
14673 }
14674 if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14675 const struct kwtable *kw;
14676
14677
14678 kw = rb_reserved_word(tok(), toklen());
14679 if (kw) {
14680 enum lex_state_e state = lex_state;
14681 lex_state = kw->state;
14682 if (IS_lex_state_for(state, EXPR_FNAME)) {
14683 set_yylval_name(rb_intern(kw->name));
14684 return kw->id[0];
14685 }
14686 if (IS_lex_state(EXPR_BEG)) {
14687 command_start = TRUE;
14688 }
14689 if (kw->id[0] == keyword_do) {
14690 if (lpar_beg && lpar_beg == paren_nest) {
14691 lpar_beg = 0;
14692 --paren_nest;
14693 return keyword_do_LAMBDA;
14694 }
14695 if (COND_P()) return keyword_do_cond;
14696 if (CMDARG_P() && !IS_lex_state_for(state, EXPR_CMDARG))
14697 return keyword_do_block;
14698 if (IS_lex_state_for(state, (EXPR_BEG | EXPR_ENDARG)))
14699 return keyword_do_block;
14700 return keyword_do;
14701 }
14702 if (IS_lex_state_for(state, (EXPR_BEG | EXPR_VALUE | EXPR_LABELARG)))
14703 return kw->id[0];
14704 else {
14705 if (kw->id[0] != kw->id[1])
14706 lex_state = EXPR_BEG;
14707 return kw->id[1];
14708 }
14709 }
14710 }
14711
14712 if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14713 if (cmd_state) {
14714 lex_state = EXPR_CMDARG;
14715 }
14716 else {
14717 lex_state = EXPR_ARG;
14718 }
14719 }
14720 else if (lex_state == EXPR_FNAME) {
14721 lex_state = EXPR_ENDFN;
14722 }
14723 else {
14724 lex_state = EXPR_END;
14725 }
14726 }
14727 {
14728 ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14729
14730 set_yylval_name(ident);
14731 if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14732 is_local_id(ident) && lvar_defined(ident)) {
14733 lex_state = EXPR_END;
14734 }
14735 }
14736 return result;
14737 }
14738 }
14739
14740 #if YYPURE
14741 static int
14742 yylex(void *lval, void *p)
14743 #else
14744 yylex(void *p)
14745 #endif
14746 {
14747 struct parser_params *parser = (struct parser_params*)p;
14748 int t;
14749
14750 #if YYPURE
14751 parser->parser_yylval = lval;
14752 parser->parser_yylval->val = Qundef;
14753 #endif
14754 t = parser_yylex(parser);
14755 #ifdef RIPPER
14756 if (!NIL_P(parser->delayed)) {
14757 ripper_dispatch_delayed_token(parser, t);
14758 return t;
14759 }
14760 if (t != 0)
14761 ripper_dispatch_scan_event(parser, t);
14762 #endif
14763
14764 return t;
14765 }
14766
14767 #ifndef RIPPER
14768 static NODE*
14769 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14770 {
14771 NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14772 nd_set_line(n, ruby_sourceline);
14773 return n;
14774 }
14775
14776 static enum node_type
14777 nodetype(NODE *node)
14778 {
14779 return (enum node_type)nd_type(node);
14780 }
14781
14782 static int
14783 nodeline(NODE *node)
14784 {
14785 return nd_line(node);
14786 }
14787
14788 static NODE*
14789 newline_node(NODE *node)
14790 {
14791 if (node) {
14792 node = remove_begin(node);
14793 node->flags |= NODE_FL_NEWLINE;
14794 }
14795 return node;
14796 }
14797
14798 static void
14799 fixpos(NODE *node, NODE *orig)
14800 {
14801 if (!node) return;
14802 if (!orig) return;
14803 if (orig == (NODE*)1) return;
14804 nd_set_line(node, nd_line(orig));
14805 }
14806
14807 static void
14808 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14809 {
14810 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14811 }
14812 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14813
14814 static void
14815 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14816 {
14817 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14818 }
14819 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14820
14821 static NODE*
14822 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14823 {
14824 NODE *end, *h = head, *nd;
14825
14826 if (tail == 0) return head;
14827
14828 if (h == 0) return tail;
14829 switch (nd_type(h)) {
14830 case NODE_LIT:
14831 case NODE_STR:
14832 case NODE_SELF:
14833 case NODE_TRUE:
14834 case NODE_FALSE:
14835 case NODE_NIL:
14836 parser_warning(h, "unused literal ignored");
14837 return tail;
14838 default:
14839 h = end = NEW_BLOCK(head);
14840 end->nd_end = end;
14841 fixpos(end, head);
14842 head = end;
14843 break;
14844 case NODE_BLOCK:
14845 end = h->nd_end;
14846 break;
14847 }
14848
14849 nd = end->nd_head;
14850 switch (nd_type(nd)) {
14851 case NODE_RETURN:
14852 case NODE_BREAK:
14853 case NODE_NEXT:
14854 case NODE_REDO:
14855 case NODE_RETRY:
14856 if (RTEST(ruby_verbose)) {
14857 parser_warning(tail, "statement not reached");
14858 }
14859 break;
14860
14861 default:
14862 break;
14863 }
14864
14865 if (nd_type(tail) != NODE_BLOCK) {
14866 tail = NEW_BLOCK(tail);
14867 tail->nd_end = tail;
14868 }
14869 end->nd_next = tail;
14870 h->nd_end = tail->nd_end;
14871 return head;
14872 }
14873
14874
14875 static NODE*
14876 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14877 {
14878 NODE *last;
14879
14880 if (list == 0) return NEW_LIST(item);
14881 if (list->nd_next) {
14882 last = list->nd_next->nd_end;
14883 }
14884 else {
14885 last = list;
14886 }
14887
14888 list->nd_alen += 1;
14889 last->nd_next = NEW_LIST(item);
14890 list->nd_next->nd_end = last->nd_next;
14891 return list;
14892 }
14893
14894
14895 static NODE*
14896 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14897 {
14898 NODE *last;
14899
14900 if (head->nd_next) {
14901 last = head->nd_next->nd_end;
14902 }
14903 else {
14904 last = head;
14905 }
14906
14907 head->nd_alen += tail->nd_alen;
14908 last->nd_next = tail;
14909 if (tail->nd_next) {
14910 head->nd_next->nd_end = tail->nd_next->nd_end;
14911 }
14912 else {
14913 head->nd_next->nd_end = tail;
14914 }
14915
14916 return head;
14917 }
14918
14919 static int
14920 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14921 {
14922 if (NIL_P(tail)) return 1;
14923 if (!rb_enc_compatible(head, tail)) {
14924 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14925 rb_enc_name(rb_enc_get(head)),
14926 rb_enc_name(rb_enc_get(tail)));
14927 rb_str_resize(head, 0);
14928 rb_str_resize(tail, 0);
14929 return 0;
14930 }
14931 rb_str_buf_append(head, tail);
14932 return 1;
14933 }
14934
14935
14936 static NODE *
14937 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14938 {
14939 enum node_type htype;
14940 NODE *headlast;
14941 VALUE lit;
14942
14943 if (!head) return tail;
14944 if (!tail) return head;
14945
14946 htype = nd_type(head);
14947 if (htype == NODE_EVSTR) {
14948 NODE *node = NEW_DSTR(Qnil);
14949 head = list_append(node, head);
14950 htype = NODE_DSTR;
14951 }
14952 switch (nd_type(tail)) {
14953 case NODE_STR:
14954 if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14955 nd_type(headlast) == NODE_STR) {
14956 htype = NODE_STR;
14957 lit = headlast->nd_lit;
14958 }
14959 else {
14960 lit = head->nd_lit;
14961 }
14962 if (htype == NODE_STR) {
14963 if (!literal_concat0(parser, lit, tail->nd_lit)) {
14964 error:
14965 rb_gc_force_recycle((VALUE)head);
14966 rb_gc_force_recycle((VALUE)tail);
14967 return 0;
14968 }
14969 rb_gc_force_recycle((VALUE)tail);
14970 }
14971 else {
14972 list_append(head, tail);
14973 }
14974 break;
14975
14976 case NODE_DSTR:
14977 if (htype == NODE_STR) {
14978 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14979 goto error;
14980 tail->nd_lit = head->nd_lit;
14981 rb_gc_force_recycle((VALUE)head);
14982 head = tail;
14983 }
14984 else if (NIL_P(tail->nd_lit)) {
14985 append:
14986 head->nd_alen += tail->nd_alen - 1;
14987 head->nd_next->nd_end->nd_next = tail->nd_next;
14988 head->nd_next->nd_end = tail->nd_next->nd_end;
14989 rb_gc_force_recycle((VALUE)tail);
14990 }
14991 else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14992 nd_type(headlast) == NODE_STR) {
14993 lit = headlast->nd_lit;
14994 if (!literal_concat0(parser, lit, tail->nd_lit))
14995 goto error;
14996 tail->nd_lit = Qnil;
14997 goto append;
14998 }
14999 else {
15000 nd_set_type(tail, NODE_ARRAY);
15001 tail->nd_head = NEW_STR(tail->nd_lit);
15002 list_concat(head, tail);
15003 }
15004 break;
15005
15006 case NODE_EVSTR:
15007 if (htype == NODE_STR) {
15008 nd_set_type(head, NODE_DSTR);
15009 head->nd_alen = 1;
15010 }
15011 list_append(head, tail);
15012 break;
15013 }
15014 return head;
15015 }
15016
15017 static NODE *
15018 evstr2dstr_gen(struct parser_params *parser, NODE *node)
15019 {
15020 if (nd_type(node) == NODE_EVSTR) {
15021 node = list_append(NEW_DSTR(Qnil), node);
15022 }
15023 return node;
15024 }
15025
15026 static NODE *
15027 new_evstr_gen(struct parser_params *parser, NODE *node)
15028 {
15029 NODE *head = node;
15030
15031 if (node) {
15032 switch (nd_type(node)) {
15033 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
15034 return node;
15035 }
15036 }
15037 return NEW_EVSTR(head);
15038 }
15039
15040 static NODE *
15041 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
15042 {
15043 value_expr(recv);
15044 value_expr(arg1);
15045 return NEW_CALL(recv, id, NEW_LIST(arg1));
15046 }
15047
15048 static NODE *
15049 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
15050 {
15051 value_expr(recv);
15052 return NEW_CALL(recv, id, 0);
15053 }
15054
15055 static NODE*
15056 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15057 {
15058 value_expr(node1);
15059 value_expr(node2);
15060 if (node1) {
15061 switch (nd_type(node1)) {
15062 case NODE_DREGX:
15063 case NODE_DREGX_ONCE:
15064 return NEW_MATCH2(node1, node2);
15065
15066 case NODE_LIT:
15067 if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
15068 return NEW_MATCH2(node1, node2);
15069 }
15070 }
15071 }
15072
15073 if (node2) {
15074 switch (nd_type(node2)) {
15075 case NODE_DREGX:
15076 case NODE_DREGX_ONCE:
15077 return NEW_MATCH3(node2, node1);
15078
15079 case NODE_LIT:
15080 if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
15081 return NEW_MATCH3(node2, node1);
15082 }
15083 }
15084 }
15085
15086 return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
15087 }
15088
15089 static NODE*
15090 gettable_gen(struct parser_params *parser, ID id)
15091 {
15092 switch (id) {
15093 case keyword_self:
15094 return NEW_SELF();
15095 case keyword_nil:
15096 return NEW_NIL();
15097 case keyword_true:
15098 return NEW_TRUE();
15099 case keyword_false:
15100 return NEW_FALSE();
15101 case keyword__FILE__:
15102 return NEW_STR(rb_str_dup(ruby_sourcefile_string));
15103 case keyword__LINE__:
15104 return NEW_LIT(INT2FIX(tokline));
15105 case keyword__ENCODING__:
15106 return NEW_LIT(rb_enc_from_encoding(current_enc));
15107 }
15108 switch (id_type(id)) {
15109 case ID_LOCAL:
15110 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
15111 if (local_id(id)) return NEW_LVAR(id);
15112
15113 return NEW_VCALL(id);
15114 case ID_GLOBAL:
15115 return NEW_GVAR(id);
15116 case ID_INSTANCE:
15117 return NEW_IVAR(id);
15118 case ID_CONST:
15119 return NEW_CONST(id);
15120 case ID_CLASS:
15121 return NEW_CVAR(id);
15122 }
15123 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15124 return 0;
15125 }
15126 #else
15127 static int
15128 id_is_var_gen(struct parser_params *parser, ID id)
15129 {
15130 if (is_notop_id(id)) {
15131 switch (id & ID_SCOPE_MASK) {
15132 case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
15133 return 1;
15134 case ID_LOCAL:
15135 if (dyna_in_block() && dvar_defined(id)) return 1;
15136 if (local_id(id)) return 1;
15137
15138 return 0;
15139 }
15140 }
15141 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
15142 return 0;
15143 }
15144 #endif
15145
15146 #if PARSER_DEBUG
15147 static const char *
15148 lex_state_name(enum lex_state_e state)
15149 {
15150 static const char names[][12] = {
15151 "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG",
15152 "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS",
15153 "EXPR_VALUE",
15154 };
15155
15156 if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
15157 return names[ffs(state)];
15158 return NULL;
15159 }
15160 #endif
15161
15162 #ifdef RIPPER
15163 static VALUE
15164 assignable_gen(struct parser_params *parser, VALUE lhs)
15165 #else
15166 static NODE*
15167 assignable_gen(struct parser_params *parser, ID id, NODE *val)
15168 #endif
15169 {
15170 #ifdef RIPPER
15171 ID id = get_id(lhs);
15172 # define assignable_result(x) get_value(lhs)
15173 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
15174 #else
15175 # define assignable_result(x) (x)
15176 #endif
15177 if (!id) return assignable_result(0);
15178 switch (id) {
15179 case keyword_self:
15180 yyerror("Can't change the value of self");
15181 goto error;
15182 case keyword_nil:
15183 yyerror("Can't assign to nil");
15184 goto error;
15185 case keyword_true:
15186 yyerror("Can't assign to true");
15187 goto error;
15188 case keyword_false:
15189 yyerror("Can't assign to false");
15190 goto error;
15191 case keyword__FILE__:
15192 yyerror("Can't assign to __FILE__");
15193 goto error;
15194 case keyword__LINE__:
15195 yyerror("Can't assign to __LINE__");
15196 goto error;
15197 case keyword__ENCODING__:
15198 yyerror("Can't assign to __ENCODING__");
15199 goto error;
15200 }
15201 switch (id_type(id)) {
15202 case ID_LOCAL:
15203 if (dyna_in_block()) {
15204 if (dvar_curr(id)) {
15205 return assignable_result(NEW_DASGN_CURR(id, val));
15206 }
15207 else if (dvar_defined(id)) {
15208 return assignable_result(NEW_DASGN(id, val));
15209 }
15210 else if (local_id(id)) {
15211 return assignable_result(NEW_LASGN(id, val));
15212 }
15213 else {
15214 dyna_var(id);
15215 return assignable_result(NEW_DASGN_CURR(id, val));
15216 }
15217 }
15218 else {
15219 if (!local_id(id)) {
15220 local_var(id);
15221 }
15222 return assignable_result(NEW_LASGN(id, val));
15223 }
15224 break;
15225 case ID_GLOBAL:
15226 return assignable_result(NEW_GASGN(id, val));
15227 case ID_INSTANCE:
15228 return assignable_result(NEW_IASGN(id, val));
15229 case ID_CONST:
15230 if (!in_def && !in_single)
15231 return assignable_result(NEW_CDECL(id, val, 0));
15232 yyerror("dynamic constant assignment");
15233 break;
15234 case ID_CLASS:
15235 return assignable_result(NEW_CVASGN(id, val));
15236 default:
15237 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
15238 }
15239 error:
15240 return assignable_result(0);
15241 #undef assignable_result
15242 #undef parser_yyerror
15243 }
15244
15245 static int
15246 is_private_local_id(ID name)
15247 {
15248 VALUE s;
15249 if (name == idUScore) return 1;
15250 if (!is_local_id(name)) return 0;
15251 s = rb_id2str(name);
15252 if (!s) return 0;
15253 return RSTRING_PTR(s)[0] == '_';
15254 }
15255
15256 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
15257
15258 static int
15259 shadowing_lvar_0(struct parser_params *parser, ID name)
15260 {
15261 if (is_private_local_id(name)) return 1;
15262 if (dyna_in_block()) {
15263 if (dvar_curr(name)) {
15264 yyerror("duplicated argument name");
15265 }
15266 else if (dvar_defined_get(name) || local_id(name)) {
15267 rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
15268 vtable_add(lvtbl->vars, name);
15269 if (lvtbl->used) {
15270 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
15271 }
15272 return 0;
15273 }
15274 }
15275 else {
15276 if (local_id(name)) {
15277 yyerror("duplicated argument name");
15278 }
15279 }
15280 return 1;
15281 }
15282
15283 static ID
15284 shadowing_lvar_gen(struct parser_params *parser, ID name)
15285 {
15286 shadowing_lvar_0(parser, name);
15287 return name;
15288 }
15289
15290 static void
15291 new_bv_gen(struct parser_params *parser, ID name)
15292 {
15293 if (!name) return;
15294 if (!is_local_id(name)) {
15295 compile_error(PARSER_ARG "invalid local variable - %s",
15296 rb_id2name(name));
15297 return;
15298 }
15299 if (!shadowing_lvar_0(parser, name)) return;
15300 dyna_var(name);
15301 }
15302
15303 #ifndef RIPPER
15304 static NODE *
15305 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
15306 {
15307 if (recv && nd_type(recv) == NODE_SELF)
15308 recv = (NODE *)1;
15309 return NEW_ATTRASGN(recv, tASET, idx);
15310 }
15311
15312 static void
15313 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15314 {
15315 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
15316 compile_error(PARSER_ARG "both block arg and actual block given");
15317 }
15318 }
15319
15320 static const char id_type_names[][9] = {
15321 "LOCAL",
15322 "INSTANCE",
15323 "",
15324 "GLOBAL",
15325 "ATTRSET",
15326 "CONST",
15327 "CLASS",
15328 "JUNK",
15329 };
15330
15331 ID
15332 rb_id_attrset(ID id)
15333 {
15334 if (!is_notop_id(id)) {
15335 switch (id) {
15336 case tAREF: case tASET:
15337 return tASET;
15338 }
15339 rb_name_error(id, "cannot make operator ID :%s attrset", rb_id2name(id));
15340 }
15341 else {
15342 int scope = (int)(id & ID_SCOPE_MASK);
15343 switch (scope) {
15344 case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL:
15345 case ID_CONST: case ID_CLASS: case ID_JUNK:
15346 break;
15347 case ID_ATTRSET:
15348 return id;
15349 default:
15350 rb_name_error(id, "cannot make %s ID %+"PRIsVALUE" attrset",
15351 id_type_names[scope], ID2SYM(id));
15352
15353 }
15354 }
15355 id &= ~ID_SCOPE_MASK;
15356 id |= ID_ATTRSET;
15357 return id;
15358 }
15359
15360 static NODE *
15361 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
15362 {
15363 if (recv && nd_type(recv) == NODE_SELF)
15364 recv = (NODE *)1;
15365 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
15366 }
15367
15368 static void
15369 rb_backref_error_gen(struct parser_params *parser, NODE *node)
15370 {
15371 switch (nd_type(node)) {
15372 case NODE_NTH_REF:
15373 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
15374 break;
15375 case NODE_BACK_REF:
15376 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
15377 break;
15378 }
15379 }
15380
15381 static NODE *
15382 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15383 {
15384 if (!node2) return node1;
15385 switch (nd_type(node1)) {
15386 case NODE_BLOCK_PASS:
15387 if (node1->nd_head)
15388 node1->nd_head = arg_concat(node1->nd_head, node2);
15389 else
15390 node1->nd_head = NEW_LIST(node2);
15391 return node1;
15392 case NODE_ARGSPUSH:
15393 if (nd_type(node2) != NODE_ARRAY) break;
15394 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
15395 nd_set_type(node1, NODE_ARGSCAT);
15396 return node1;
15397 case NODE_ARGSCAT:
15398 if (nd_type(node2) != NODE_ARRAY ||
15399 nd_type(node1->nd_body) != NODE_ARRAY) break;
15400 node1->nd_body = list_concat(node1->nd_body, node2);
15401 return node1;
15402 }
15403 return NEW_ARGSCAT(node1, node2);
15404 }
15405
15406 static NODE *
15407 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15408 {
15409 if (!node1) return NEW_LIST(node2);
15410 switch (nd_type(node1)) {
15411 case NODE_ARRAY:
15412 return list_append(node1, node2);
15413 case NODE_BLOCK_PASS:
15414 node1->nd_head = arg_append(node1->nd_head, node2);
15415 return node1;
15416 case NODE_ARGSPUSH:
15417 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
15418 nd_set_type(node1, NODE_ARGSCAT);
15419 return node1;
15420 }
15421 return NEW_ARGSPUSH(node1, node2);
15422 }
15423
15424 static NODE *
15425 splat_array(NODE* node)
15426 {
15427 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
15428 if (nd_type(node) == NODE_ARRAY) return node;
15429 return 0;
15430 }
15431
15432 static NODE *
15433 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
15434 {
15435 if (!lhs) return 0;
15436
15437 switch (nd_type(lhs)) {
15438 case NODE_GASGN:
15439 case NODE_IASGN:
15440 case NODE_IASGN2:
15441 case NODE_LASGN:
15442 case NODE_DASGN:
15443 case NODE_DASGN_CURR:
15444 case NODE_MASGN:
15445 case NODE_CDECL:
15446 case NODE_CVASGN:
15447 lhs->nd_value = rhs;
15448 break;
15449
15450 case NODE_ATTRASGN:
15451 case NODE_CALL:
15452 lhs->nd_args = arg_append(lhs->nd_args, rhs);
15453 break;
15454
15455 default:
15456
15457 break;
15458 }
15459
15460 return lhs;
15461 }
15462
15463 static int
15464 value_expr_gen(struct parser_params *parser, NODE *node)
15465 {
15466 int cond = 0;
15467
15468 if (!node) {
15469 rb_warning0("empty expression");
15470 }
15471 while (node) {
15472 switch (nd_type(node)) {
15473 case NODE_RETURN:
15474 case NODE_BREAK:
15475 case NODE_NEXT:
15476 case NODE_REDO:
15477 case NODE_RETRY:
15478 if (!cond) yyerror("void value expression");
15479
15480 return FALSE;
15481
15482 case NODE_BLOCK:
15483 while (node->nd_next) {
15484 node = node->nd_next;
15485 }
15486 node = node->nd_head;
15487 break;
15488
15489 case NODE_BEGIN:
15490 node = node->nd_body;
15491 break;
15492
15493 case NODE_IF:
15494 if (!node->nd_body) {
15495 node = node->nd_else;
15496 break;
15497 }
15498 else if (!node->nd_else) {
15499 node = node->nd_body;
15500 break;
15501 }
15502 if (!value_expr(node->nd_body)) return FALSE;
15503 node = node->nd_else;
15504 break;
15505
15506 case NODE_AND:
15507 case NODE_OR:
15508 cond = 1;
15509 node = node->nd_2nd;
15510 break;
15511
15512 default:
15513 return TRUE;
15514 }
15515 }
15516
15517 return TRUE;
15518 }
15519
15520 static void
15521 void_expr_gen(struct parser_params *parser, NODE *node)
15522 {
15523 const char *useless = 0;
15524
15525 if (!RTEST(ruby_verbose)) return;
15526
15527 if (!node) return;
15528 switch (nd_type(node)) {
15529 case NODE_CALL:
15530 switch (node->nd_mid) {
15531 case '+':
15532 case '-':
15533 case '*':
15534 case '/':
15535 case '%':
15536 case tPOW:
15537 case tUPLUS:
15538 case tUMINUS:
15539 case '|':
15540 case '^':
15541 case '&':
15542 case tCMP:
15543 case '>':
15544 case tGEQ:
15545 case '<':
15546 case tLEQ:
15547 case tEQ:
15548 case tNEQ:
15549 useless = rb_id2name(node->nd_mid);
15550 break;
15551 }
15552 break;
15553
15554 case NODE_LVAR:
15555 case NODE_DVAR:
15556 case NODE_GVAR:
15557 case NODE_IVAR:
15558 case NODE_CVAR:
15559 case NODE_NTH_REF:
15560 case NODE_BACK_REF:
15561 useless = "a variable";
15562 break;
15563 case NODE_CONST:
15564 useless = "a constant";
15565 break;
15566 case NODE_LIT:
15567 case NODE_STR:
15568 case NODE_DSTR:
15569 case NODE_DREGX:
15570 case NODE_DREGX_ONCE:
15571 useless = "a literal";
15572 break;
15573 case NODE_COLON2:
15574 case NODE_COLON3:
15575 useless = "::";
15576 break;
15577 case NODE_DOT2:
15578 useless = "..";
15579 break;
15580 case NODE_DOT3:
15581 useless = "...";
15582 break;
15583 case NODE_SELF:
15584 useless = "self";
15585 break;
15586 case NODE_NIL:
15587 useless = "nil";
15588 break;
15589 case NODE_TRUE:
15590 useless = "true";
15591 break;
15592 case NODE_FALSE:
15593 useless = "false";
15594 break;
15595 case NODE_DEFINED:
15596 useless = "defined?";
15597 break;
15598 }
15599
15600 if (useless) {
15601 int line = ruby_sourceline;
15602
15603 ruby_sourceline = nd_line(node);
15604 rb_warnS("possibly useless use of %s in void context", useless);
15605 ruby_sourceline = line;
15606 }
15607 }
15608
15609 static void
15610 void_stmts_gen(struct parser_params *parser, NODE *node)
15611 {
15612 if (!RTEST(ruby_verbose)) return;
15613 if (!node) return;
15614 if (nd_type(node) != NODE_BLOCK) return;
15615
15616 for (;;) {
15617 if (!node->nd_next) return;
15618 void_expr0(node->nd_head);
15619 node = node->nd_next;
15620 }
15621 }
15622
15623 static NODE *
15624 remove_begin(NODE *node)
15625 {
15626 NODE **n = &node, *n1 = node;
15627 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
15628 *n = n1 = n1->nd_body;
15629 }
15630 return node;
15631 }
15632
15633 static NODE *
15634 remove_begin_all(NODE *node)
15635 {
15636 NODE **n = &node, *n1 = node;
15637 while (n1 && nd_type(n1) == NODE_BEGIN) {
15638 *n = n1 = n1->nd_body;
15639 }
15640 return node;
15641 }
15642
15643 static void
15644 reduce_nodes_gen(struct parser_params *parser, NODE **body)
15645 {
15646 NODE *node = *body;
15647
15648 if (!node) {
15649 *body = NEW_NIL();
15650 return;
15651 }
15652 #define subnodes(n1, n2) \
15653 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
15654 (!node->n2) ? (body = &node->n1, 1) : \
15655 (reduce_nodes(&node->n1), body = &node->n2, 1))
15656
15657 while (node) {
15658 int newline = (int)(node->flags & NODE_FL_NEWLINE);
15659 switch (nd_type(node)) {
15660 end:
15661 case NODE_NIL:
15662 *body = 0;
15663 return;
15664 case NODE_RETURN:
15665 *body = node = node->nd_stts;
15666 if (newline && node) node->flags |= NODE_FL_NEWLINE;
15667 continue;
15668 case NODE_BEGIN:
15669 *body = node = node->nd_body;
15670 if (newline && node) node->flags |= NODE_FL_NEWLINE;
15671 continue;
15672 case NODE_BLOCK:
15673 body = &node->nd_end->nd_head;
15674 break;
15675 case NODE_IF:
15676 if (subnodes(nd_body, nd_else)) break;
15677 return;
15678 case NODE_CASE:
15679 body = &node->nd_body;
15680 break;
15681 case NODE_WHEN:
15682 if (!subnodes(nd_body, nd_next)) goto end;
15683 break;
15684 case NODE_ENSURE:
15685 if (!subnodes(nd_head, nd_resq)) goto end;
15686 break;
15687 case NODE_RESCUE:
15688 if (node->nd_else) {
15689 body = &node->nd_resq;
15690 break;
15691 }
15692 if (!subnodes(nd_head, nd_resq)) goto end;
15693 break;
15694 default:
15695 return;
15696 }
15697 node = *body;
15698 if (newline && node) node->flags |= NODE_FL_NEWLINE;
15699 }
15700
15701 #undef subnodes
15702 }
15703
15704 static int
15705 is_static_content(NODE *node)
15706 {
15707 if (!node) return 1;
15708 switch (nd_type(node)) {
15709 case NODE_HASH:
15710 if (!(node = node->nd_head)) break;
15711 case NODE_ARRAY:
15712 do {
15713 if (!is_static_content(node->nd_head)) return 0;
15714 } while ((node = node->nd_next) != 0);
15715 case NODE_LIT:
15716 case NODE_STR:
15717 case NODE_NIL:
15718 case NODE_TRUE:
15719 case NODE_FALSE:
15720 case NODE_ZARRAY:
15721 break;
15722 default:
15723 return 0;
15724 }
15725 return 1;
15726 }
15727
15728 static int
15729 assign_in_cond(struct parser_params *parser, NODE *node)
15730 {
15731 switch (nd_type(node)) {
15732 case NODE_MASGN:
15733 yyerror("multiple assignment in conditional");
15734 return 1;
15735
15736 case NODE_LASGN:
15737 case NODE_DASGN:
15738 case NODE_DASGN_CURR:
15739 case NODE_GASGN:
15740 case NODE_IASGN:
15741 break;
15742
15743 default:
15744 return 0;
15745 }
15746
15747 if (!node->nd_value) return 1;
15748 if (is_static_content(node->nd_value)) {
15749
15750 parser_warn(node->nd_value, "found = in conditional, should be ==");
15751 }
15752 return 1;
15753 }
15754
15755 static void
15756 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15757 {
15758 if (!e_option_supplied(parser)) parser_warn(node, str);
15759 }
15760
15761 static void
15762 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15763 {
15764 if (!e_option_supplied(parser)) parser_warning(node, str);
15765 }
15766
15767 static void
15768 fixup_nodes(NODE **rootnode)
15769 {
15770 NODE *node, *next, *head;
15771
15772 for (node = *rootnode; node; node = next) {
15773 enum node_type type;
15774 VALUE val;
15775
15776 next = node->nd_next;
15777 head = node->nd_head;
15778 rb_gc_force_recycle((VALUE)node);
15779 *rootnode = next;
15780 switch (type = nd_type(head)) {
15781 case NODE_DOT2:
15782 case NODE_DOT3:
15783 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15784 type == NODE_DOT3);
15785 rb_gc_force_recycle((VALUE)head->nd_beg);
15786 rb_gc_force_recycle((VALUE)head->nd_end);
15787 nd_set_type(head, NODE_LIT);
15788 head->nd_lit = val;
15789 break;
15790 default:
15791 break;
15792 }
15793 }
15794 }
15795
15796 static NODE *cond0(struct parser_params*,NODE*);
15797
15798 static NODE*
15799 range_op(struct parser_params *parser, NODE *node)
15800 {
15801 enum node_type type;
15802
15803 if (node == 0) return 0;
15804
15805 type = nd_type(node);
15806 value_expr(node);
15807 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15808 warn_unless_e_option(parser, node, "integer literal in conditional range");
15809 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15810 }
15811 return cond0(parser, node);
15812 }
15813
15814 static int
15815 literal_node(NODE *node)
15816 {
15817 if (!node) return 1;
15818 switch (nd_type(node)) {
15819 case NODE_LIT:
15820 case NODE_STR:
15821 case NODE_DSTR:
15822 case NODE_EVSTR:
15823 case NODE_DREGX:
15824 case NODE_DREGX_ONCE:
15825 case NODE_DSYM:
15826 return 2;
15827 case NODE_TRUE:
15828 case NODE_FALSE:
15829 case NODE_NIL:
15830 return 1;
15831 }
15832 return 0;
15833 }
15834
15835 static NODE*
15836 cond0(struct parser_params *parser, NODE *node)
15837 {
15838 if (node == 0) return 0;
15839 assign_in_cond(parser, node);
15840
15841 switch (nd_type(node)) {
15842 case NODE_DSTR:
15843 case NODE_EVSTR:
15844 case NODE_STR:
15845 rb_warn0("string literal in condition");
15846 break;
15847
15848 case NODE_DREGX:
15849 case NODE_DREGX_ONCE:
15850 warning_unless_e_option(parser, node, "regex literal in condition");
15851 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15852
15853 case NODE_AND:
15854 case NODE_OR:
15855 node->nd_1st = cond0(parser, node->nd_1st);
15856 node->nd_2nd = cond0(parser, node->nd_2nd);
15857 break;
15858
15859 case NODE_DOT2:
15860 case NODE_DOT3:
15861 node->nd_beg = range_op(parser, node->nd_beg);
15862 node->nd_end = range_op(parser, node->nd_end);
15863 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15864 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15865 if (!e_option_supplied(parser)) {
15866 int b = literal_node(node->nd_beg);
15867 int e = literal_node(node->nd_end);
15868 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15869 parser_warn(node, "range literal in condition");
15870 }
15871 }
15872 break;
15873
15874 case NODE_DSYM:
15875 parser_warning(node, "literal in condition");
15876 break;
15877
15878 case NODE_LIT:
15879 if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
15880 warn_unless_e_option(parser, node, "regex literal in condition");
15881 nd_set_type(node, NODE_MATCH);
15882 }
15883 else {
15884 parser_warning(node, "literal in condition");
15885 }
15886 default:
15887 break;
15888 }
15889 return node;
15890 }
15891
15892 static NODE*
15893 cond_gen(struct parser_params *parser, NODE *node)
15894 {
15895 if (node == 0) return 0;
15896 return cond0(parser, node);
15897 }
15898
15899 static NODE*
15900 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15901 {
15902 value_expr(left);
15903 if (left && (enum node_type)nd_type(left) == type) {
15904 NODE *node = left, *second;
15905 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15906 node = second;
15907 }
15908 node->nd_2nd = NEW_NODE(type, second, right, 0);
15909 return left;
15910 }
15911 return NEW_NODE(type, left, right, 0);
15912 }
15913
15914 static void
15915 no_blockarg(struct parser_params *parser, NODE *node)
15916 {
15917 if (node && nd_type(node) == NODE_BLOCK_PASS) {
15918 compile_error(PARSER_ARG "block argument should not be given");
15919 }
15920 }
15921
15922 static NODE *
15923 ret_args_gen(struct parser_params *parser, NODE *node)
15924 {
15925 if (node) {
15926 no_blockarg(parser, node);
15927 if (nd_type(node) == NODE_ARRAY) {
15928 if (node->nd_next == 0) {
15929 node = node->nd_head;
15930 }
15931 else {
15932 nd_set_type(node, NODE_VALUES);
15933 }
15934 }
15935 }
15936 return node;
15937 }
15938
15939 static NODE *
15940 new_yield_gen(struct parser_params *parser, NODE *node)
15941 {
15942 if (node) no_blockarg(parser, node);
15943
15944 return NEW_YIELD(node);
15945 }
15946
15947 static NODE*
15948 negate_lit(NODE *node)
15949 {
15950 switch (TYPE(node->nd_lit)) {
15951 case T_FIXNUM:
15952 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15953 break;
15954 case T_BIGNUM:
15955 case T_RATIONAL:
15956 case T_COMPLEX:
15957 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15958 break;
15959 case T_FLOAT:
15960 #if USE_FLONUM
15961 if (FLONUM_P(node->nd_lit)) {
15962 node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
15963 }
15964 else {
15965 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15966 }
15967 #else
15968 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15969 #endif
15970 break;
15971 default:
15972 rb_bug("unknown literal type passed to negate_lit");
15973 break;
15974 }
15975 return node;
15976 }
15977
15978 static NODE *
15979 arg_blk_pass(NODE *node1, NODE *node2)
15980 {
15981 if (node2) {
15982 node2->nd_head = node1;
15983 return node2;
15984 }
15985 return node1;
15986 }
15987
15988
15989 static NODE*
15990 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
15991 {
15992 int saved_line = ruby_sourceline;
15993 struct rb_args_info *args = tail->nd_ainfo;
15994
15995 args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0;
15996 args->pre_init = m ? m->nd_next : 0;
15997
15998 args->post_args_num = p ? rb_long2int(p->nd_plen) : 0;
15999 args->post_init = p ? p->nd_next : 0;
16000 args->first_post_arg = p ? p->nd_pid : 0;
16001
16002 args->rest_arg = r;
16003
16004 args->opt_args = o;
16005
16006 ruby_sourceline = saved_line;
16007
16008 return tail;
16009 }
16010
16011 static NODE*
16012 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
16013 {
16014 int saved_line = ruby_sourceline;
16015 struct rb_args_info *args;
16016 NODE *kw_rest_arg = 0;
16017 NODE *node;
16018 int check = 0;
16019
16020 args = ALLOC(struct rb_args_info);
16021 MEMZERO(args, struct rb_args_info, 1);
16022 node = NEW_NODE(NODE_ARGS, 0, 0, args);
16023
16024 args->block_arg = b;
16025 args->kw_args = k;
16026 if (k && !kr) {
16027 check = 1;
16028 kr = internal_id();
16029 }
16030 if (kr) {
16031 arg_var(kr);
16032 kw_rest_arg = NEW_DVAR(kr);
16033 kw_rest_arg->nd_cflag = check;
16034 }
16035 args->kw_rest_arg = kw_rest_arg;
16036
16037 ruby_sourceline = saved_line;
16038 return node;
16039 }
16040
16041 static NODE*
16042 dsym_node_gen(struct parser_params *parser, NODE *node)
16043 {
16044 VALUE lit;
16045
16046 if (!node) {
16047 return NEW_LIT(ID2SYM(idNULL));
16048 }
16049
16050 switch (nd_type(node)) {
16051 case NODE_DSTR:
16052 nd_set_type(node, NODE_DSYM);
16053 break;
16054 case NODE_STR:
16055 lit = node->nd_lit;
16056 node->nd_lit = ID2SYM(rb_intern_str(lit));
16057 nd_set_type(node, NODE_LIT);
16058 break;
16059 default:
16060 node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
16061 break;
16062 }
16063 return node;
16064 }
16065 #endif
16066
16067 #ifndef RIPPER
16068 static NODE *
16069 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16070 {
16071 NODE *asgn;
16072
16073 if (lhs) {
16074 ID vid = lhs->nd_vid;
16075 if (op == tOROP) {
16076 lhs->nd_value = rhs;
16077 asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
16078 if (is_asgn_or_id(vid)) {
16079 asgn->nd_aid = vid;
16080 }
16081 }
16082 else if (op == tANDOP) {
16083 lhs->nd_value = rhs;
16084 asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
16085 }
16086 else {
16087 asgn = lhs;
16088 asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
16089 }
16090 }
16091 else {
16092 asgn = NEW_BEGIN(0);
16093 }
16094 return asgn;
16095 }
16096
16097 static NODE *
16098 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
16099 {
16100 NODE *asgn;
16101
16102 if (op == tOROP) {
16103 op = 0;
16104 }
16105 else if (op == tANDOP) {
16106 op = 1;
16107 }
16108 asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
16109 fixpos(asgn, lhs);
16110 return asgn;
16111 }
16112
16113 static NODE *
16114 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
16115 {
16116 NODE *asgn;
16117
16118 if (op == tOROP) {
16119 op = 0;
16120 }
16121 else if (op == tANDOP) {
16122 op = 1;
16123 }
16124 if (lhs) {
16125 asgn = NEW_OP_CDECL(lhs, op, rhs);
16126 }
16127 else {
16128 asgn = NEW_BEGIN(0);
16129 }
16130 fixpos(asgn, lhs);
16131 return asgn;
16132 }
16133 #else
16134 static VALUE
16135 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
16136 {
16137 return dispatch3(opassign, lhs, op, rhs);
16138 }
16139
16140 static VALUE
16141 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
16142 {
16143 VALUE recv = dispatch3(field, lhs, type, attr);
16144 return dispatch3(opassign, recv, op, rhs);
16145 }
16146 #endif
16147
16148 static void
16149 warn_unused_var(struct parser_params *parser, struct local_vars *local)
16150 {
16151 int i, cnt;
16152 ID *v, *u;
16153
16154 if (!local->used) return;
16155 v = local->vars->tbl;
16156 u = local->used->tbl;
16157 cnt = local->used->pos;
16158 if (cnt != local->vars->pos) {
16159 rb_bug("local->used->pos != local->vars->pos");
16160 }
16161 for (i = 0; i < cnt; ++i) {
16162 if (!v[i] || (u[i] & LVAR_USED)) continue;
16163 if (is_private_local_id(v[i])) continue;
16164 rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
16165 }
16166 }
16167
16168 static void
16169 local_push_gen(struct parser_params *parser, int inherit_dvars)
16170 {
16171 struct local_vars *local;
16172
16173 local = ALLOC(struct local_vars);
16174 local->prev = lvtbl;
16175 local->args = vtable_alloc(0);
16176 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
16177 local->used = !(inherit_dvars &&
16178 (ifndef_ripper(compile_for_eval || e_option_supplied(parser))+0)) &&
16179 RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
16180 local->cmdargs = cmdarg_stack;
16181 cmdarg_stack = 0;
16182 lvtbl = local;
16183 }
16184
16185 static void
16186 local_pop_gen(struct parser_params *parser)
16187 {
16188 struct local_vars *local = lvtbl->prev;
16189 if (lvtbl->used) {
16190 warn_unused_var(parser, lvtbl);
16191 vtable_free(lvtbl->used);
16192 }
16193 vtable_free(lvtbl->args);
16194 vtable_free(lvtbl->vars);
16195 cmdarg_stack = lvtbl->cmdargs;
16196 xfree(lvtbl);
16197 lvtbl = local;
16198 }
16199
16200 #ifndef RIPPER
16201 static ID*
16202 local_tbl_gen(struct parser_params *parser)
16203 {
16204 int cnt_args = vtable_size(lvtbl->args);
16205 int cnt_vars = vtable_size(lvtbl->vars);
16206 int cnt = cnt_args + cnt_vars;
16207 int i, j;
16208 ID *buf;
16209
16210 if (cnt <= 0) return 0;
16211 buf = ALLOC_N(ID, cnt + 1);
16212 MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
16213
16214 for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
16215 ID id = lvtbl->vars->tbl[i];
16216 if (!vtable_included(lvtbl->args, id)) {
16217 buf[j++] = id;
16218 }
16219 }
16220 if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
16221 buf[0] = cnt;
16222 return buf;
16223 }
16224 #endif
16225
16226 static int
16227 arg_var_gen(struct parser_params *parser, ID id)
16228 {
16229 vtable_add(lvtbl->args, id);
16230 return vtable_size(lvtbl->args) - 1;
16231 }
16232
16233 static int
16234 local_var_gen(struct parser_params *parser, ID id)
16235 {
16236 vtable_add(lvtbl->vars, id);
16237 if (lvtbl->used) {
16238 vtable_add(lvtbl->used, (ID)ruby_sourceline);
16239 }
16240 return vtable_size(lvtbl->vars) - 1;
16241 }
16242
16243 static int
16244 local_id_gen(struct parser_params *parser, ID id)
16245 {
16246 struct vtable *vars, *args, *used;
16247
16248 vars = lvtbl->vars;
16249 args = lvtbl->args;
16250 used = lvtbl->used;
16251
16252 while (vars && POINTER_P(vars->prev)) {
16253 vars = vars->prev;
16254 args = args->prev;
16255 if (used) used = used->prev;
16256 }
16257
16258 if (vars && vars->prev == DVARS_INHERIT) {
16259 return rb_local_defined(id);
16260 }
16261 else if (vtable_included(args, id)) {
16262 return 1;
16263 }
16264 else {
16265 int i = vtable_included(vars, id);
16266 if (i && used) used->tbl[i-1] |= LVAR_USED;
16267 return i != 0;
16268 }
16269 }
16270
16271 static const struct vtable *
16272 dyna_push_gen(struct parser_params *parser)
16273 {
16274 lvtbl->args = vtable_alloc(lvtbl->args);
16275 lvtbl->vars = vtable_alloc(lvtbl->vars);
16276 if (lvtbl->used) {
16277 lvtbl->used = vtable_alloc(lvtbl->used);
16278 }
16279 return lvtbl->args;
16280 }
16281
16282 static void
16283 dyna_pop_1(struct parser_params *parser)
16284 {
16285 struct vtable *tmp;
16286
16287 if ((tmp = lvtbl->used) != 0) {
16288 warn_unused_var(parser, lvtbl);
16289 lvtbl->used = lvtbl->used->prev;
16290 vtable_free(tmp);
16291 }
16292 tmp = lvtbl->args;
16293 lvtbl->args = lvtbl->args->prev;
16294 vtable_free(tmp);
16295 tmp = lvtbl->vars;
16296 lvtbl->vars = lvtbl->vars->prev;
16297 vtable_free(tmp);
16298 }
16299
16300 static void
16301 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
16302 {
16303 while (lvtbl->args != lvargs) {
16304 dyna_pop_1(parser);
16305 if (!lvtbl->args) {
16306 struct local_vars *local = lvtbl->prev;
16307 xfree(lvtbl);
16308 lvtbl = local;
16309 }
16310 }
16311 dyna_pop_1(parser);
16312 }
16313
16314 static int
16315 dyna_in_block_gen(struct parser_params *parser)
16316 {
16317 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
16318 }
16319
16320 static int
16321 dvar_defined_gen(struct parser_params *parser, ID id, int get)
16322 {
16323 struct vtable *vars, *args, *used;
16324 int i;
16325
16326 args = lvtbl->args;
16327 vars = lvtbl->vars;
16328 used = lvtbl->used;
16329
16330 while (POINTER_P(vars)) {
16331 if (vtable_included(args, id)) {
16332 return 1;
16333 }
16334 if ((i = vtable_included(vars, id)) != 0) {
16335 if (used) used->tbl[i-1] |= LVAR_USED;
16336 return 1;
16337 }
16338 args = args->prev;
16339 vars = vars->prev;
16340 if (get) used = 0;
16341 if (used) used = used->prev;
16342 }
16343
16344 if (vars == DVARS_INHERIT) {
16345 return rb_dvar_defined(id);
16346 }
16347
16348 return 0;
16349 }
16350
16351 static int
16352 dvar_curr_gen(struct parser_params *parser, ID id)
16353 {
16354 return (vtable_included(lvtbl->args, id) ||
16355 vtable_included(lvtbl->vars, id));
16356 }
16357
16358 #ifndef RIPPER
16359 static void
16360 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
16361 {
16362 int c = RE_OPTION_ENCODING_IDX(options);
16363
16364 if (c) {
16365 int opt, idx;
16366 rb_char_to_option_kcode(c, &opt, &idx);
16367 if (idx != ENCODING_GET(str) &&
16368 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16369 goto error;
16370 }
16371 ENCODING_SET(str, idx);
16372 }
16373 else if (RE_OPTION_ENCODING_NONE(options)) {
16374 if (!ENCODING_IS_ASCII8BIT(str) &&
16375 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16376 c = 'n';
16377 goto error;
16378 }
16379 rb_enc_associate(str, rb_ascii8bit_encoding());
16380 }
16381 else if (current_enc == rb_usascii_encoding()) {
16382 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16383
16384 rb_enc_associate(str, rb_usascii_encoding());
16385 }
16386 else {
16387 rb_enc_associate(str, rb_ascii8bit_encoding());
16388 }
16389 }
16390 return;
16391
16392 error:
16393 compile_error(PARSER_ARG
16394 "regexp encoding option '%c' differs from source encoding '%s'",
16395 c, rb_enc_name(rb_enc_get(str)));
16396 }
16397
16398 static int
16399 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
16400 {
16401 VALUE err;
16402 reg_fragment_setenc(str, options);
16403 err = rb_reg_check_preprocess(str);
16404 if (err != Qnil) {
16405 err = rb_obj_as_string(err);
16406 compile_error(PARSER_ARG "%"PRIsVALUE, err);
16407 return 0;
16408 }
16409 return 1;
16410 }
16411
16412 typedef struct {
16413 struct parser_params* parser;
16414 rb_encoding *enc;
16415 NODE *succ_block;
16416 NODE *fail_block;
16417 int num;
16418 } reg_named_capture_assign_t;
16419
16420 static int
16421 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
16422 int back_num, int *back_refs, OnigRegex regex, void *arg0)
16423 {
16424 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
16425 struct parser_params* parser = arg->parser;
16426 rb_encoding *enc = arg->enc;
16427 long len = name_end - name;
16428 const char *s = (const char *)name;
16429 ID var;
16430
16431 arg->num++;
16432
16433 if (arg->succ_block == 0) {
16434 arg->succ_block = NEW_BEGIN(0);
16435 arg->fail_block = NEW_BEGIN(0);
16436 }
16437
16438 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
16439 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
16440 !rb_enc_symname2_p(s, len, enc)) {
16441 return ST_CONTINUE;
16442 }
16443 var = rb_intern3(s, len, enc);
16444 if (dvar_defined(var) || local_id(var)) {
16445 rb_warningS("named capture conflicts a local variable - %s",
16446 rb_id2name(var));
16447 }
16448 arg->succ_block = block_append(arg->succ_block,
16449 newline_node(node_assign(assignable(var,0),
16450 NEW_CALL(
16451 gettable(rb_intern("$~")),
16452 idAREF,
16453 NEW_LIST(NEW_LIT(ID2SYM(var))))
16454 )));
16455 arg->fail_block = block_append(arg->fail_block,
16456 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
16457 return ST_CONTINUE;
16458 }
16459
16460 static NODE *
16461 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
16462 {
16463 reg_named_capture_assign_t arg;
16464
16465 arg.parser = parser;
16466 arg.enc = rb_enc_get(regexp);
16467 arg.succ_block = 0;
16468 arg.fail_block = 0;
16469 arg.num = 0;
16470 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
16471
16472 if (arg.num == 0)
16473 return match;
16474
16475 return
16476 block_append(
16477 newline_node(match),
16478 NEW_IF(gettable(rb_intern("$~")),
16479 block_append(
16480 newline_node(arg.succ_block),
16481 newline_node(
16482 NEW_CALL(
16483 gettable(rb_intern("$~")),
16484 rb_intern("begin"),
16485 NEW_LIST(NEW_LIT(INT2FIX(0)))))),
16486 block_append(
16487 newline_node(arg.fail_block),
16488 newline_node(
16489 NEW_LIT(Qnil)))));
16490 }
16491
16492 static VALUE
16493 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
16494 {
16495 VALUE re;
16496 VALUE err;
16497
16498 reg_fragment_setenc(str, options);
16499 err = rb_errinfo();
16500 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
16501 if (NIL_P(re)) {
16502 ID mesg = rb_intern("mesg");
16503 VALUE m = rb_attr_get(rb_errinfo(), mesg);
16504 rb_set_errinfo(err);
16505 if (!NIL_P(err)) {
16506 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
16507 }
16508 else {
16509 compile_error(PARSER_ARG "%"PRIsVALUE, m);
16510 }
16511 return Qnil;
16512 }
16513 return re;
16514 }
16515
16516 void
16517 rb_gc_mark_parser(void)
16518 {
16519 }
16520
16521 NODE*
16522 rb_parser_append_print(VALUE vparser, NODE *node)
16523 {
16524 NODE *prelude = 0;
16525 NODE *scope = node;
16526 struct parser_params *parser;
16527
16528 if (!node) return node;
16529
16530 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16531
16532 node = node->nd_body;
16533
16534 if (nd_type(node) == NODE_PRELUDE) {
16535 prelude = node;
16536 node = node->nd_body;
16537 }
16538
16539 node = block_append(node,
16540 NEW_FCALL(rb_intern("print"),
16541 NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
16542 if (prelude) {
16543 prelude->nd_body = node;
16544 scope->nd_body = prelude;
16545 }
16546 else {
16547 scope->nd_body = node;
16548 }
16549
16550 return scope;
16551 }
16552
16553 NODE *
16554 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
16555 {
16556 NODE *prelude = 0;
16557 NODE *scope = node;
16558 struct parser_params *parser;
16559
16560 if (!node) return node;
16561
16562 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16563
16564 node = node->nd_body;
16565
16566 if (nd_type(node) == NODE_PRELUDE) {
16567 prelude = node;
16568 node = node->nd_body;
16569 }
16570 if (split) {
16571 node = block_append(NEW_GASGN(rb_intern("$F"),
16572 NEW_CALL(NEW_GVAR(rb_intern("$_")),
16573 rb_intern("split"), 0)),
16574 node);
16575 }
16576 if (chop) {
16577 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
16578 rb_intern("chop!"), 0), node);
16579 }
16580
16581 node = NEW_OPT_N(node);
16582
16583 if (prelude) {
16584 prelude->nd_body = node;
16585 scope->nd_body = prelude;
16586 }
16587 else {
16588 scope->nd_body = node;
16589 }
16590
16591 return scope;
16592 }
16593
16594 static const struct {
16595 ID token;
16596 const char *name;
16597 } op_tbl[] = {
16598 {tDOT2, ".."},
16599 {tDOT3, "..."},
16600 {tPOW, "**"},
16601 {tDSTAR, "**"},
16602 {tUPLUS, "+@"},
16603 {tUMINUS, "-@"},
16604 {tCMP, "<=>"},
16605 {tGEQ, ">="},
16606 {tLEQ, "<="},
16607 {tEQ, "=="},
16608 {tEQQ, "==="},
16609 {tNEQ, "!="},
16610 {tMATCH, "=~"},
16611 {tNMATCH, "!~"},
16612 {tAREF, "[]"},
16613 {tASET, "[]="},
16614 {tLSHFT, "<<"},
16615 {tRSHFT, ">>"},
16616 {tCOLON2, "::"},
16617 };
16618
16619 #define op_tbl_count numberof(op_tbl)
16620
16621 #ifndef ENABLE_SELECTOR_NAMESPACE
16622 #define ENABLE_SELECTOR_NAMESPACE 0
16623 #endif
16624
16625 static struct symbols {
16626 ID last_id;
16627 st_table *sym_id;
16628 st_table *id_str;
16629 #if ENABLE_SELECTOR_NAMESPACE
16630 st_table *ivar2_id;
16631 st_table *id_ivar2;
16632 #endif
16633 VALUE op_sym[tLAST_OP_ID];
16634 int minor_marked;
16635 } global_symbols = {tLAST_TOKEN};
16636
16637 static const struct st_hash_type symhash = {
16638 rb_str_hash_cmp,
16639 rb_str_hash,
16640 };
16641
16642 #if ENABLE_SELECTOR_NAMESPACE
16643 struct ivar2_key {
16644 ID id;
16645 VALUE klass;
16646 };
16647
16648 static int
16649 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
16650 {
16651 if (key1->id == key2->id && key1->klass == key2->klass) {
16652 return 0;
16653 }
16654 return 1;
16655 }
16656
16657 static int
16658 ivar2_hash(struct ivar2_key *key)
16659 {
16660 return (key->id << 8) ^ (key->klass >> 2);
16661 }
16662
16663 static const struct st_hash_type ivar2_hash_type = {
16664 ivar2_cmp,
16665 ivar2_hash,
16666 };
16667 #endif
16668
16669 void
16670 Init_sym(void)
16671 {
16672 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
16673 global_symbols.id_str = st_init_numtable_with_size(1000);
16674 #if ENABLE_SELECTOR_NAMESPACE
16675 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
16676 global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
16677 #endif
16678
16679 (void)nodetype;
16680 (void)nodeline;
16681 #if PARSER_DEBUG
16682 (void)lex_state_name(-1);
16683 #endif
16684
16685 Init_id();
16686 }
16687
16688 void
16689 rb_gc_mark_symbols(int full_mark)
16690 {
16691 if (full_mark || global_symbols.minor_marked == 0) {
16692 rb_mark_tbl(global_symbols.id_str);
16693 rb_gc_mark_locations(global_symbols.op_sym,
16694 global_symbols.op_sym + numberof(global_symbols.op_sym));
16695
16696 if (!full_mark) global_symbols.minor_marked = 1;
16697 }
16698 }
16699 #endif
16700
16701 static ID
16702 internal_id_gen(struct parser_params *parser)
16703 {
16704 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
16705 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
16706 return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
16707 }
16708
16709 #ifndef RIPPER
16710 static int
16711 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
16712 {
16713 int mb = 0;
16714
16715 if (m >= e) return 0;
16716 if (is_global_name_punct(*m)) {
16717 ++m;
16718 }
16719 else if (*m == '-') {
16720 if (++m >= e) return 0;
16721 if (is_identchar(m, e, enc)) {
16722 if (!ISASCII(*m)) mb = 1;
16723 m += rb_enc_mbclen(m, e, enc);
16724 }
16725 }
16726 else {
16727 if (!rb_enc_isdigit(*m, enc)) return 0;
16728 do {
16729 if (!ISASCII(*m)) mb = 1;
16730 ++m;
16731 } while (m < e && rb_enc_isdigit(*m, enc));
16732 }
16733 return m == e ? mb + 1 : 0;
16734 }
16735
16736 int
16737 rb_symname_p(const char *name)
16738 {
16739 return rb_enc_symname_p(name, rb_ascii8bit_encoding());
16740 }
16741
16742 int
16743 rb_enc_symname_p(const char *name, rb_encoding *enc)
16744 {
16745 return rb_enc_symname2_p(name, strlen(name), enc);
16746 }
16747
16748 #define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST))
16749 #define IDSET_ATTRSET_FOR_INTERN (~(~0U<<ID_SCOPE_MASK) & ~(1U<<ID_ATTRSET))
16750
16751 static int
16752 rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_attrset)
16753 {
16754 const char *m = name;
16755 const char *e = m + len;
16756 int type = ID_JUNK;
16757
16758 if (!m || len <= 0) return -1;
16759 switch (*m) {
16760 case '\0':
16761 return -1;
16762
16763 case '$':
16764 type = ID_GLOBAL;
16765 if (is_special_global_name(++m, e, enc)) return type;
16766 goto id;
16767
16768 case '@':
16769 type = ID_INSTANCE;
16770 if (*++m == '@') {
16771 ++m;
16772 type = ID_CLASS;
16773 }
16774 goto id;
16775
16776 case '<':
16777 switch (*++m) {
16778 case '<': ++m; break;
16779 case '=': if (*++m == '>') ++m; break;
16780 default: break;
16781 }
16782 break;
16783
16784 case '>':
16785 switch (*++m) {
16786 case '>': case '=': ++m; break;
16787 }
16788 break;
16789
16790 case '=':
16791 switch (*++m) {
16792 case '~': ++m; break;
16793 case '=': if (*++m == '=') ++m; break;
16794 default: return -1;
16795 }
16796 break;
16797
16798 case '*':
16799 if (*++m == '*') ++m;
16800 break;
16801
16802 case '+': case '-':
16803 if (*++m == '@') ++m;
16804 break;
16805
16806 case '|': case '^': case '&': case '/': case '%': case '~': case '`':
16807 ++m;
16808 break;
16809
16810 case '[':
16811 if (*++m != ']') return -1;
16812 if (*++m == '=') ++m;
16813 break;
16814
16815 case '!':
16816 if (len == 1) return ID_JUNK;
16817 switch (*++m) {
16818 case '=': case '~': ++m; break;
16819 default: return -1;
16820 }
16821 break;
16822
16823 default:
16824 type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
16825 id:
16826 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
16827 return -1;
16828 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
16829 if (m >= e) break;
16830 switch (*m) {
16831 case '!': case '?':
16832 if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
16833 type = ID_JUNK;
16834 ++m;
16835 break;
16836 case '=':
16837 if (!(allowed_attrset & (1U << type))) return -1;
16838 type = ID_ATTRSET;
16839 ++m;
16840 break;
16841 }
16842 break;
16843 }
16844 return m == e ? type : -1;
16845 }
16846
16847 int
16848 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
16849 {
16850 return rb_enc_symname_type(name, len, enc, IDSET_ATTRSET_FOR_SYNTAX) != -1;
16851 }
16852
16853 static int
16854 rb_str_symname_type(VALUE name, unsigned int allowed_attrset)
16855 {
16856 const char *ptr = StringValuePtr(name);
16857 long len = RSTRING_LEN(name);
16858 int type = rb_enc_symname_type(ptr, len, rb_enc_get(name), allowed_attrset);
16859 RB_GC_GUARD(name);
16860 return type;
16861 }
16862
16863 static ID
16864 register_symid(ID id, const char *name, long len, rb_encoding *enc)
16865 {
16866 VALUE str = rb_enc_str_new(name, len, enc);
16867 return register_symid_str(id, str);
16868 }
16869
16870 static ID
16871 register_symid_str(ID id, VALUE str)
16872 {
16873 OBJ_FREEZE(str);
16874 str = rb_fstring(str);
16875
16876 if (RUBY_DTRACE_SYMBOL_CREATE_ENABLED()) {
16877 RUBY_DTRACE_SYMBOL_CREATE(RSTRING_PTR(str), rb_sourcefile(), rb_sourceline());
16878 }
16879
16880 st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
16881 st_add_direct(global_symbols.id_str, id, (st_data_t)str);
16882 global_symbols.minor_marked = 0;
16883 return id;
16884 }
16885
16886 static int
16887 sym_check_asciionly(VALUE str)
16888 {
16889 if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
16890 switch (rb_enc_str_coderange(str)) {
16891 case ENC_CODERANGE_BROKEN:
16892 rb_raise(rb_eEncodingError, "invalid encoding symbol");
16893 case ENC_CODERANGE_7BIT:
16894 return TRUE;
16895 }
16896 return FALSE;
16897 }
16898
16899
16900
16901
16902
16903
16904 static ID intern_str(VALUE str);
16905
16906 static VALUE
16907 setup_fake_str(struct RString *fake_str, const char *name, long len)
16908 {
16909 fake_str->basic.flags = T_STRING|RSTRING_NOEMBED;
16910 RBASIC_SET_CLASS_RAW((VALUE)fake_str, rb_cString);
16911 fake_str->as.heap.len = len;
16912 fake_str->as.heap.ptr = (char *)name;
16913 fake_str->as.heap.aux.capa = len;
16914 return (VALUE)fake_str;
16915 }
16916
16917 ID
16918 rb_intern3(const char *name, long len, rb_encoding *enc)
16919 {
16920 st_data_t data;
16921 struct RString fake_str;
16922 VALUE str = setup_fake_str(&fake_str, name, len);
16923 rb_enc_associate(str, enc);
16924 OBJ_FREEZE(str);
16925
16926 if (st_lookup(global_symbols.sym_id, str, &data))
16927 return (ID)data;
16928
16929 str = rb_enc_str_new(name, len, enc);
16930 return intern_str(str);
16931 }
16932
16933 static ID
16934 intern_str(VALUE str)
16935 {
16936 const char *name, *m, *e;
16937 long len, last;
16938 rb_encoding *enc, *symenc;
16939 unsigned char c;
16940 ID id;
16941 int mb;
16942
16943 RSTRING_GETMEM(str, name, len);
16944 m = name;
16945 e = m + len;
16946 enc = rb_enc_get(str);
16947 symenc = enc;
16948
16949 if (!len || (rb_cString && !rb_enc_asciicompat(enc))) {
16950 junk:
16951 id = ID_JUNK;
16952 goto new_id;
16953 }
16954 last = len-1;
16955 id = 0;
16956 switch (*m) {
16957 case '$':
16958 if (len < 2) goto junk;
16959 id |= ID_GLOBAL;
16960 if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16961 if (!--mb) symenc = rb_usascii_encoding();
16962 goto new_id;
16963 }
16964 break;
16965 case '@':
16966 if (m[1] == '@') {
16967 if (len < 3) goto junk;
16968 m++;
16969 id |= ID_CLASS;
16970 }
16971 else {
16972 if (len < 2) goto junk;
16973 id |= ID_INSTANCE;
16974 }
16975 m++;
16976 break;
16977 default:
16978 c = m[0];
16979 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16980
16981 int i;
16982
16983 if (len == 1) {
16984 id = c;
16985 goto id_register;
16986 }
16987 for (i = 0; i < op_tbl_count; i++) {
16988 if (*op_tbl[i].name == *m &&
16989 strcmp(op_tbl[i].name, m) == 0) {
16990 id = op_tbl[i].token;
16991 goto id_register;
16992 }
16993 }
16994 }
16995 break;
16996 }
16997 if (name[last] == '=') {
16998
16999 if (last > 1 && name[last-1] == '=')
17000 goto junk;
17001 id = rb_intern3(name, last, enc);
17002 if (id > tLAST_OP_ID && !is_attrset_id(id)) {
17003 enc = rb_enc_get(rb_id2str(id));
17004 id = rb_id_attrset(id);
17005 goto id_register;
17006 }
17007 id = ID_ATTRSET;
17008 }
17009 else if (id == 0) {
17010 if (rb_enc_isupper(m[0], enc)) {
17011 id = ID_CONST;
17012 }
17013 else {
17014 id = ID_LOCAL;
17015 }
17016 }
17017 if (!rb_enc_isdigit(*m, enc)) {
17018 while (m <= name + last && is_identchar(m, e, enc)) {
17019 if (ISASCII(*m)) {
17020 m++;
17021 }
17022 else {
17023 m += rb_enc_mbclen(m, e, enc);
17024 }
17025 }
17026 }
17027 if (id != ID_ATTRSET && m - name < len) id = ID_JUNK;
17028 if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
17029 new_id:
17030 if (symenc != enc) rb_enc_associate(str, symenc);
17031 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
17032 if (len > 20) {
17033 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
17034 name);
17035 }
17036 else {
17037 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
17038 (int)len, name);
17039 }
17040 }
17041 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
17042 id_register:
17043 return register_symid_str(id, str);
17044 }
17045
17046 ID
17047 rb_intern2(const char *name, long len)
17048 {
17049 return rb_intern3(name, len, rb_usascii_encoding());
17050 }
17051
17052 #undef rb_intern
17053 ID
17054 rb_intern(const char *name)
17055 {
17056 return rb_intern2(name, strlen(name));
17057 }
17058
17059 ID
17060 rb_intern_str(VALUE str)
17061 {
17062 st_data_t id;
17063
17064 if (st_lookup(global_symbols.sym_id, str, &id))
17065 return (ID)id;
17066 return intern_str(rb_str_dup(str));
17067 }
17068
17069 VALUE
17070 rb_id2str(ID id)
17071 {
17072 st_data_t data;
17073
17074 if (id < tLAST_TOKEN) {
17075 int i = 0;
17076
17077 if (id < INT_MAX && rb_ispunct((int)id)) {
17078 VALUE str = global_symbols.op_sym[i = (int)id];
17079 if (!str) {
17080 char name[2];
17081 name[0] = (char)id;
17082 name[1] = 0;
17083 str = rb_usascii_str_new(name, 1);
17084 OBJ_FREEZE(str);
17085 str = rb_fstring(str);
17086 global_symbols.op_sym[i] = str;
17087 global_symbols.minor_marked = 0;
17088 }
17089 return str;
17090 }
17091 for (i = 0; i < op_tbl_count; i++) {
17092 if (op_tbl[i].token == id) {
17093 VALUE str = global_symbols.op_sym[i];
17094 if (!str) {
17095 str = rb_usascii_str_new2(op_tbl[i].name);
17096 OBJ_FREEZE(str);
17097 str = rb_fstring(str);
17098 global_symbols.op_sym[i] = str;
17099 global_symbols.minor_marked = 0;
17100 }
17101 return str;
17102 }
17103 }
17104 }
17105
17106 if (st_lookup(global_symbols.id_str, id, &data)) {
17107 VALUE str = (VALUE)data;
17108 if (RBASIC(str)->klass == 0)
17109 RBASIC_SET_CLASS_RAW(str, rb_cString);
17110 return str;
17111 }
17112
17113 if (is_attrset_id(id)) {
17114 ID id_stem = (id & ~ID_SCOPE_MASK);
17115 VALUE str;
17116
17117 do {
17118 if (!!(str = rb_id2str(id_stem | ID_LOCAL))) break;
17119 if (!!(str = rb_id2str(id_stem | ID_CONST))) break;
17120 if (!!(str = rb_id2str(id_stem | ID_INSTANCE))) break;
17121 if (!!(str = rb_id2str(id_stem | ID_GLOBAL))) break;
17122 if (!!(str = rb_id2str(id_stem | ID_CLASS))) break;
17123 if (!!(str = rb_id2str(id_stem | ID_JUNK))) break;
17124 return 0;
17125 } while (0);
17126 str = rb_str_dup(str);
17127 rb_str_cat(str, "=", 1);
17128 register_symid_str(id, str);
17129 if (st_lookup(global_symbols.id_str, id, &data)) {
17130 VALUE str = (VALUE)data;
17131 if (RBASIC(str)->klass == 0)
17132 RBASIC_SET_CLASS_RAW(str, rb_cString);
17133 return str;
17134 }
17135 }
17136 return 0;
17137 }
17138
17139 const char *
17140 rb_id2name(ID id)
17141 {
17142 VALUE str = rb_id2str(id);
17143
17144 if (!str) return 0;
17145 return RSTRING_PTR(str);
17146 }
17147
17148 static int
17149 symbols_i(VALUE sym, ID value, VALUE ary)
17150 {
17151 rb_ary_push(ary, ID2SYM(value));
17152 return ST_CONTINUE;
17153 }
17154
17155
17156
17157
17158
17159
17160
17161
17162
17163
17164
17165
17166
17167
17168
17169
17170
17171 VALUE
17172 rb_sym_all_symbols(void)
17173 {
17174 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
17175
17176 st_foreach(global_symbols.sym_id, symbols_i, ary);
17177 return ary;
17178 }
17179
17180 int
17181 rb_is_const_id(ID id)
17182 {
17183 return is_const_id(id);
17184 }
17185
17186 int
17187 rb_is_class_id(ID id)
17188 {
17189 return is_class_id(id);
17190 }
17191
17192 int
17193 rb_is_global_id(ID id)
17194 {
17195 return is_global_id(id);
17196 }
17197
17198 int
17199 rb_is_instance_id(ID id)
17200 {
17201 return is_instance_id(id);
17202 }
17203
17204 int
17205 rb_is_attrset_id(ID id)
17206 {
17207 return is_attrset_id(id);
17208 }
17209
17210 int
17211 rb_is_local_id(ID id)
17212 {
17213 return is_local_id(id);
17214 }
17215
17216 int
17217 rb_is_junk_id(ID id)
17218 {
17219 return is_junk_id(id);
17220 }
17221
17233 ID
17234 rb_check_id(volatile VALUE *namep)
17235 {
17236 st_data_t id;
17237 VALUE tmp;
17238 VALUE name = *namep;
17239
17240 if (SYMBOL_P(name)) {
17241 return SYM2ID(name);
17242 }
17243 else if (!RB_TYPE_P(name, T_STRING)) {
17244 tmp = rb_check_string_type(name);
17245 if (NIL_P(tmp)) {
17246 tmp = rb_inspect(name);
17247 rb_raise(rb_eTypeError, "%s is not a symbol",
17248 RSTRING_PTR(tmp));
17249 }
17250 name = tmp;
17251 *namep = name;
17252 }
17253
17254 sym_check_asciionly(name);
17255
17256 if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17257 return (ID)id;
17258
17259 if (rb_is_attrset_name(name)) {
17260 struct RString fake_str;
17261
17262 const VALUE localname = setup_fake_str(&fake_str, RSTRING_PTR(name), RSTRING_LEN(name) - 1);
17263 rb_enc_copy(localname, name);
17264 OBJ_FREEZE(localname);
17265
17266 if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
17267 return rb_id_attrset((ID)id);
17268 }
17269 RB_GC_GUARD(name);
17270 }
17271
17272 return (ID)0;
17273 }
17274
17275 ID
17276 rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
17277 {
17278 st_data_t id;
17279 struct RString fake_str;
17280 const VALUE name = setup_fake_str(&fake_str, ptr, len);
17281 rb_enc_associate(name, enc);
17282
17283 sym_check_asciionly(name);
17284
17285 if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17286 return (ID)id;
17287
17288 if (rb_is_attrset_name(name)) {
17289 fake_str.as.heap.len = len - 1;
17290 if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
17291 return rb_id_attrset((ID)id);
17292 }
17293 }
17294
17295 return (ID)0;
17296 }
17297
17298 int
17299 rb_is_const_name(VALUE name)
17300 {
17301 return rb_str_symname_type(name, 0) == ID_CONST;
17302 }
17303
17304 int
17305 rb_is_class_name(VALUE name)
17306 {
17307 return rb_str_symname_type(name, 0) == ID_CLASS;
17308 }
17309
17310 int
17311 rb_is_global_name(VALUE name)
17312 {
17313 return rb_str_symname_type(name, 0) == ID_GLOBAL;
17314 }
17315
17316 int
17317 rb_is_instance_name(VALUE name)
17318 {
17319 return rb_str_symname_type(name, 0) == ID_INSTANCE;
17320 }
17321
17322 int
17323 rb_is_attrset_name(VALUE name)
17324 {
17325 return rb_str_symname_type(name, IDSET_ATTRSET_FOR_INTERN) == ID_ATTRSET;
17326 }
17327
17328 int
17329 rb_is_local_name(VALUE name)
17330 {
17331 return rb_str_symname_type(name, 0) == ID_LOCAL;
17332 }
17333
17334 int
17335 rb_is_method_name(VALUE name)
17336 {
17337 switch (rb_str_symname_type(name, 0)) {
17338 case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
17339 return TRUE;
17340 }
17341 return FALSE;
17342 }
17343
17344 int
17345 rb_is_junk_name(VALUE name)
17346 {
17347 return rb_str_symname_type(name, IDSET_ATTRSET_FOR_SYNTAX) == -1;
17348 }
17349
17350 #endif
17351
17352 static void
17353 parser_initialize(struct parser_params *parser)
17354 {
17355 parser->eofp = Qfalse;
17356
17357 parser->parser_lex_strterm = 0;
17358 parser->parser_cond_stack = 0;
17359 parser->parser_cmdarg_stack = 0;
17360 parser->parser_class_nest = 0;
17361 parser->parser_paren_nest = 0;
17362 parser->parser_lpar_beg = 0;
17363 parser->parser_brace_nest = 0;
17364 parser->parser_in_single = 0;
17365 parser->parser_in_def = 0;
17366 parser->parser_in_defined = 0;
17367 parser->parser_in_kwarg = 0;
17368 parser->parser_compile_for_eval = 0;
17369 parser->parser_cur_mid = 0;
17370 parser->parser_tokenbuf = NULL;
17371 parser->parser_tokidx = 0;
17372 parser->parser_toksiz = 0;
17373 parser->parser_heredoc_end = 0;
17374 parser->parser_command_start = TRUE;
17375 parser->parser_deferred_nodes = 0;
17376 parser->parser_lex_pbeg = 0;
17377 parser->parser_lex_p = 0;
17378 parser->parser_lex_pend = 0;
17379 parser->parser_lvtbl = 0;
17380 parser->parser_ruby__end__seen = 0;
17381 parser->parser_ruby_sourcefile = 0;
17382 parser->parser_ruby_sourcefile_string = Qnil;
17383 #ifndef RIPPER
17384 parser->is_ripper = 0;
17385 parser->parser_eval_tree_begin = 0;
17386 parser->parser_eval_tree = 0;
17387 #else
17388 parser->is_ripper = 1;
17389 parser->delayed = Qnil;
17390
17391 parser->result = Qnil;
17392 parser->parsing_thread = Qnil;
17393 parser->toplevel_p = TRUE;
17394 #endif
17395 #ifdef YYMALLOC
17396 parser->heap = NULL;
17397 #endif
17398 parser->enc = rb_utf8_encoding();
17399 }
17400
17401 #ifdef RIPPER
17402 #define parser_mark ripper_parser_mark
17403 #define parser_free ripper_parser_free
17404 #endif
17405
17406 static void
17407 parser_mark(void *ptr)
17408 {
17409 struct parser_params *p = (struct parser_params*)ptr;
17410
17411 rb_gc_mark((VALUE)p->parser_lex_strterm);
17412 rb_gc_mark((VALUE)p->parser_deferred_nodes);
17413 rb_gc_mark(p->parser_lex_input);
17414 rb_gc_mark(p->parser_lex_lastline);
17415 rb_gc_mark(p->parser_lex_nextline);
17416 rb_gc_mark(p->parser_ruby_sourcefile_string);
17417 #ifndef RIPPER
17418 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
17419 rb_gc_mark((VALUE)p->parser_eval_tree) ;
17420 rb_gc_mark(p->debug_lines);
17421 #else
17422 rb_gc_mark(p->delayed);
17423 rb_gc_mark(p->value);
17424 rb_gc_mark(p->result);
17425 rb_gc_mark(p->parsing_thread);
17426 #endif
17427 #ifdef YYMALLOC
17428 rb_gc_mark((VALUE)p->heap);
17429 #endif
17430 }
17431
17432 static void
17433 parser_free(void *ptr)
17434 {
17435 struct parser_params *p = (struct parser_params*)ptr;
17436 struct local_vars *local, *prev;
17437
17438 if (p->parser_tokenbuf) {
17439 xfree(p->parser_tokenbuf);
17440 }
17441 for (local = p->parser_lvtbl; local; local = prev) {
17442 if (local->vars) xfree(local->vars);
17443 prev = local->prev;
17444 xfree(local);
17445 }
17446 xfree(p);
17447 }
17448
17449 static size_t
17450 parser_memsize(const void *ptr)
17451 {
17452 struct parser_params *p = (struct parser_params*)ptr;
17453 struct local_vars *local;
17454 size_t size = sizeof(*p);
17455
17456 if (!ptr) return 0;
17457 size += p->parser_toksiz;
17458 for (local = p->parser_lvtbl; local; local = local->prev) {
17459 size += sizeof(*local);
17460 if (local->vars) size += local->vars->capa * sizeof(ID);
17461 }
17462 return size;
17463 }
17464
17465 static
17466 #ifndef RIPPER
17467 const
17468 #endif
17469 rb_data_type_t parser_data_type = {
17470 "parser",
17471 {
17472 parser_mark,
17473 parser_free,
17474 parser_memsize,
17475 },
17476 NULL, NULL, RUBY_TYPED_FREE_IMMEDIATELY
17477 };
17478
17479 #ifndef RIPPER
17480 #undef rb_reserved_word
17481
17482 const struct kwtable *
17483 rb_reserved_word(const char *str, unsigned int len)
17484 {
17485 return reserved_word(str, len);
17486 }
17487
17488 static struct parser_params *
17489 parser_new(void)
17490 {
17491 struct parser_params *p;
17492
17493 p = ALLOC_N(struct parser_params, 1);
17494 MEMZERO(p, struct parser_params, 1);
17495 parser_initialize(p);
17496 return p;
17497 }
17498
17499 VALUE
17500 rb_parser_new(void)
17501 {
17502 struct parser_params *p = parser_new();
17503
17504 return TypedData_Wrap_Struct(0, &parser_data_type, p);
17505 }
17506
17507
17508
17509
17510
17511
17512
17513 VALUE
17514 rb_parser_end_seen_p(VALUE vparser)
17515 {
17516 struct parser_params *parser;
17517
17518 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17519 return ruby__end__seen ? Qtrue : Qfalse;
17520 }
17521
17522
17523
17524
17525
17526
17527
17528 VALUE
17529 rb_parser_encoding(VALUE vparser)
17530 {
17531 struct parser_params *parser;
17532
17533 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17534 return rb_enc_from_encoding(current_enc);
17535 }
17536
17537
17538
17539
17540
17541
17542
17543 VALUE
17544 rb_parser_get_yydebug(VALUE self)
17545 {
17546 struct parser_params *parser;
17547
17548 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17549 return yydebug ? Qtrue : Qfalse;
17550 }
17551
17552
17553
17554
17555
17556
17557
17558 VALUE
17559 rb_parser_set_yydebug(VALUE self, VALUE flag)
17560 {
17561 struct parser_params *parser;
17562
17563 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17564 yydebug = RTEST(flag);
17565 return flag;
17566 }
17567
17568 #ifdef YYMALLOC
17569 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17570 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17571 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17572 (n)->u3.cnt = (c), (p))
17573
17574 void *
17575 rb_parser_malloc(struct parser_params *parser, size_t size)
17576 {
17577 size_t cnt = HEAPCNT(1, size);
17578 NODE *n = NEWHEAP();
17579 void *ptr = xmalloc(size);
17580
17581 return ADD2HEAP(n, cnt, ptr);
17582 }
17583
17584 void *
17585 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17586 {
17587 size_t cnt = HEAPCNT(nelem, size);
17588 NODE *n = NEWHEAP();
17589 void *ptr = xcalloc(nelem, size);
17590
17591 return ADD2HEAP(n, cnt, ptr);
17592 }
17593
17594 void *
17595 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17596 {
17597 NODE *n;
17598 size_t cnt = HEAPCNT(1, size);
17599
17600 if (ptr && (n = parser->heap) != NULL) {
17601 do {
17602 if (n->u1.node == ptr) {
17603 n->u1.node = ptr = xrealloc(ptr, size);
17604 if (n->u3.cnt) n->u3.cnt = cnt;
17605 return ptr;
17606 }
17607 } while ((n = n->u2.node) != NULL);
17608 }
17609 n = NEWHEAP();
17610 ptr = xrealloc(ptr, size);
17611 return ADD2HEAP(n, cnt, ptr);
17612 }
17613
17614 void
17615 rb_parser_free(struct parser_params *parser, void *ptr)
17616 {
17617 NODE **prev = &parser->heap, *n;
17618
17619 while ((n = *prev) != NULL) {
17620 if (n->u1.node == ptr) {
17621 *prev = n->u2.node;
17622 rb_gc_force_recycle((VALUE)n);
17623 break;
17624 }
17625 prev = &n->u2.node;
17626 }
17627 xfree(ptr);
17628 }
17629 #endif
17630 #endif
17631
17632 #ifdef RIPPER
17633 #ifdef RIPPER_DEBUG
17634 extern int rb_is_pointer_to_heap(VALUE);
17635
17636
17637 static VALUE
17638 ripper_validate_object(VALUE self, VALUE x)
17639 {
17640 if (x == Qfalse) return x;
17641 if (x == Qtrue) return x;
17642 if (x == Qnil) return x;
17643 if (x == Qundef)
17644 rb_raise(rb_eArgError, "Qundef given");
17645 if (FIXNUM_P(x)) return x;
17646 if (SYMBOL_P(x)) return x;
17647 if (!rb_is_pointer_to_heap(x))
17648 rb_raise(rb_eArgError, "invalid pointer: %p", x);
17649 switch (BUILTIN_TYPE(x)) {
17650 case T_STRING:
17651 case T_OBJECT:
17652 case T_ARRAY:
17653 case T_BIGNUM:
17654 case T_FLOAT:
17655 case T_COMPLEX:
17656 case T_RATIONAL:
17657 return x;
17658 case T_NODE:
17659 if (nd_type(x) != NODE_LASGN) {
17660 rb_raise(rb_eArgError, "NODE given: %p", x);
17661 }
17662 return ((NODE *)x)->nd_rval;
17663 default:
17664 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17665 x, rb_obj_classname(x));
17666 }
17667 return x;
17668 }
17669 #endif
17670
17671 #define validate(x) ((x) = get_value(x))
17672
17673 static VALUE
17674 ripper_dispatch0(struct parser_params *parser, ID mid)
17675 {
17676 return rb_funcall(parser->value, mid, 0);
17677 }
17678
17679 static VALUE
17680 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17681 {
17682 validate(a);
17683 return rb_funcall(parser->value, mid, 1, a);
17684 }
17685
17686 static VALUE
17687 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
17688 {
17689 validate(a);
17690 validate(b);
17691 return rb_funcall(parser->value, mid, 2, a, b);
17692 }
17693
17694 static VALUE
17695 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
17696 {
17697 validate(a);
17698 validate(b);
17699 validate(c);
17700 return rb_funcall(parser->value, mid, 3, a, b, c);
17701 }
17702
17703 static VALUE
17704 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
17705 {
17706 validate(a);
17707 validate(b);
17708 validate(c);
17709 validate(d);
17710 return rb_funcall(parser->value, mid, 4, a, b, c, d);
17711 }
17712
17713 static VALUE
17714 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
17715 {
17716 validate(a);
17717 validate(b);
17718 validate(c);
17719 validate(d);
17720 validate(e);
17721 return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
17722 }
17723
17724 static VALUE
17725 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
17726 {
17727 validate(a);
17728 validate(b);
17729 validate(c);
17730 validate(d);
17731 validate(e);
17732 validate(f);
17733 validate(g);
17734 return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
17735 }
17736
17737 static const struct kw_assoc {
17738 ID id;
17739 const char *name;
17740 } keyword_to_name[] = {
17741 {keyword_class, "class"},
17742 {keyword_module, "module"},
17743 {keyword_def, "def"},
17744 {keyword_undef, "undef"},
17745 {keyword_begin, "begin"},
17746 {keyword_rescue, "rescue"},
17747 {keyword_ensure, "ensure"},
17748 {keyword_end, "end"},
17749 {keyword_if, "if"},
17750 {keyword_unless, "unless"},
17751 {keyword_then, "then"},
17752 {keyword_elsif, "elsif"},
17753 {keyword_else, "else"},
17754 {keyword_case, "case"},
17755 {keyword_when, "when"},
17756 {keyword_while, "while"},
17757 {keyword_until, "until"},
17758 {keyword_for, "for"},
17759 {keyword_break, "break"},
17760 {keyword_next, "next"},
17761 {keyword_redo, "redo"},
17762 {keyword_retry, "retry"},
17763 {keyword_in, "in"},
17764 {keyword_do, "do"},
17765 {keyword_do_cond, "do"},
17766 {keyword_do_block, "do"},
17767 {keyword_return, "return"},
17768 {keyword_yield, "yield"},
17769 {keyword_super, "super"},
17770 {keyword_self, "self"},
17771 {keyword_nil, "nil"},
17772 {keyword_true, "true"},
17773 {keyword_false, "false"},
17774 {keyword_and, "and"},
17775 {keyword_or, "or"},
17776 {keyword_not, "not"},
17777 {modifier_if, "if"},
17778 {modifier_unless, "unless"},
17779 {modifier_while, "while"},
17780 {modifier_until, "until"},
17781 {modifier_rescue, "rescue"},
17782 {keyword_alias, "alias"},
17783 {keyword_defined, "defined?"},
17784 {keyword_BEGIN, "BEGIN"},
17785 {keyword_END, "END"},
17786 {keyword__LINE__, "__LINE__"},
17787 {keyword__FILE__, "__FILE__"},
17788 {keyword__ENCODING__, "__ENCODING__"},
17789 {0, NULL}
17790 };
17791
17792 static const char*
17793 keyword_id_to_str(ID id)
17794 {
17795 const struct kw_assoc *a;
17796
17797 for (a = keyword_to_name; a->id; a++) {
17798 if (a->id == id)
17799 return a->name;
17800 }
17801 return NULL;
17802 }
17803
17804 #undef ripper_id2sym
17805 static VALUE
17806 ripper_id2sym(ID id)
17807 {
17808 const char *name;
17809 char buf[8];
17810
17811 if (id <= 256) {
17812 buf[0] = (char)id;
17813 buf[1] = '\0';
17814 return ID2SYM(rb_intern2(buf, 1));
17815 }
17816 if ((name = keyword_id_to_str(id))) {
17817 return ID2SYM(rb_intern(name));
17818 }
17819 switch (id) {
17820 case tOROP:
17821 name = "||";
17822 break;
17823 case tANDOP:
17824 name = "&&";
17825 break;
17826 default:
17827 name = rb_id2name(id);
17828 if (!name) {
17829 rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
17830 }
17831 return ID2SYM(id);
17832 }
17833 return ID2SYM(rb_intern(name));
17834 }
17835
17836 static ID
17837 ripper_get_id(VALUE v)
17838 {
17839 NODE *nd;
17840 if (!RB_TYPE_P(v, T_NODE)) return 0;
17841 nd = (NODE *)v;
17842 if (nd_type(nd) != NODE_LASGN) return 0;
17843 return nd->nd_vid;
17844 }
17845
17846 static VALUE
17847 ripper_get_value(VALUE v)
17848 {
17849 NODE *nd;
17850 if (v == Qundef) return Qnil;
17851 if (!RB_TYPE_P(v, T_NODE)) return v;
17852 nd = (NODE *)v;
17853 if (nd_type(nd) != NODE_LASGN) return Qnil;
17854 return nd->nd_rval;
17855 }
17856
17857 static void
17858 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
17859 {
17860 VALUE str;
17861 va_list args;
17862
17863 va_start(args, fmt);
17864 str = rb_vsprintf(fmt, args);
17865 va_end(args);
17866 rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
17867 }
17868
17869 static void
17870 ripper_warn0(struct parser_params *parser, const char *fmt)
17871 {
17872 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
17873 }
17874
17875 static void
17876 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
17877 {
17878 rb_funcall(parser->value, rb_intern("warn"), 2,
17879 STR_NEW2(fmt), INT2NUM(a));
17880 }
17881
17882 static void
17883 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
17884 {
17885 rb_funcall(parser->value, rb_intern("warn"), 2,
17886 STR_NEW2(fmt), STR_NEW2(str));
17887 }
17888
17889 static void
17890 ripper_warning0(struct parser_params *parser, const char *fmt)
17891 {
17892 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
17893 }
17894
17895 static void
17896 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
17897 {
17898 rb_funcall(parser->value, rb_intern("warning"), 2,
17899 STR_NEW2(fmt), STR_NEW2(str));
17900 }
17901
17902 static VALUE
17903 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
17904 {
17905 return rb_io_gets(src);
17906 }
17907
17908 static VALUE
17909 ripper_s_allocate(VALUE klass)
17910 {
17911 struct parser_params *p;
17912 VALUE self;
17913
17914 p = ALLOC_N(struct parser_params, 1);
17915 MEMZERO(p, struct parser_params, 1);
17916 self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
17917 p->value = self;
17918 return self;
17919 }
17920
17921 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
17922
17923
17924
17925
17926
17927
17928
17929
17930
17931
17932
17933 static VALUE
17934 ripper_initialize(int argc, VALUE *argv, VALUE self)
17935 {
17936 struct parser_params *parser;
17937 VALUE src, fname, lineno;
17938
17939 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17940 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
17941 if (RB_TYPE_P(src, T_FILE)) {
17942 parser->parser_lex_gets = ripper_lex_get_generic;
17943 }
17944 else {
17945 StringValue(src);
17946 parser->parser_lex_gets = lex_get_str;
17947 }
17948 parser->parser_lex_input = src;
17949 parser->eofp = Qfalse;
17950 if (NIL_P(fname)) {
17951 fname = STR_NEW2("(ripper)");
17952 }
17953 else {
17954 StringValue(fname);
17955 }
17956 parser_initialize(parser);
17957
17958 parser->parser_ruby_sourcefile_string = fname;
17959 parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
17960 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
17961
17962 return Qnil;
17963 }
17964
17965 struct ripper_args {
17966 struct parser_params *parser;
17967 int argc;
17968 VALUE *argv;
17969 };
17970
17971 static VALUE
17972 ripper_parse0(VALUE parser_v)
17973 {
17974 struct parser_params *parser;
17975
17976 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17977 parser_prepare(parser);
17978 ripper_yyparse((void*)parser);
17979 return parser->result;
17980 }
17981
17982 static VALUE
17983 ripper_ensure(VALUE parser_v)
17984 {
17985 struct parser_params *parser;
17986
17987 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17988 parser->parsing_thread = Qnil;
17989 return Qnil;
17990 }
17991
17992
17993
17994
17995
17996
17997
17998 static VALUE
17999 ripper_parse(VALUE self)
18000 {
18001 struct parser_params *parser;
18002
18003 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18004 if (!ripper_initialized_p(parser)) {
18005 rb_raise(rb_eArgError, "method called for uninitialized object");
18006 }
18007 if (!NIL_P(parser->parsing_thread)) {
18008 if (parser->parsing_thread == rb_thread_current())
18009 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
18010 else
18011 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
18012 }
18013 parser->parsing_thread = rb_thread_current();
18014 rb_ensure(ripper_parse0, self, ripper_ensure, self);
18015
18016 return parser->result;
18017 }
18018
18019
18020
18021
18022
18023
18024
18025
18026 static VALUE
18027 ripper_column(VALUE self)
18028 {
18029 struct parser_params *parser;
18030 long col;
18031
18032 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18033 if (!ripper_initialized_p(parser)) {
18034 rb_raise(rb_eArgError, "method called for uninitialized object");
18035 }
18036 if (NIL_P(parser->parsing_thread)) return Qnil;
18037 col = parser->tokp - parser->parser_lex_pbeg;
18038 return LONG2NUM(col);
18039 }
18040
18041
18042
18043
18044
18045
18046
18047 static VALUE
18048 ripper_filename(VALUE self)
18049 {
18050 struct parser_params *parser;
18051
18052 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18053 if (!ripper_initialized_p(parser)) {
18054 rb_raise(rb_eArgError, "method called for uninitialized object");
18055 }
18056 return parser->parser_ruby_sourcefile_string;
18057 }
18058
18059
18060
18061
18062
18063
18064
18065
18066 static VALUE
18067 ripper_lineno(VALUE self)
18068 {
18069 struct parser_params *parser;
18070
18071 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
18072 if (!ripper_initialized_p(parser)) {
18073 rb_raise(rb_eArgError, "method called for uninitialized object");
18074 }
18075 if (NIL_P(parser->parsing_thread)) return Qnil;
18076 return INT2NUM(parser->parser_ruby_sourceline);
18077 }
18078
18079 #ifdef RIPPER_DEBUG
18080
18081 static VALUE
18082 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
18083 {
18084 StringValue(msg);
18085 if (obj == Qundef) {
18086 rb_raise(rb_eArgError, "%"PRIsVALUE, msg);
18087 }
18088 return Qnil;
18089 }
18090
18091
18092 static VALUE
18093 ripper_value(VALUE self, VALUE obj)
18094 {
18095 return ULONG2NUM(obj);
18096 }
18097 #endif
18098
18099
18100 void
18101 Init_ripper(void)
18102 {
18103 parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
18104
18105 ripper_init_eventids1();
18106 ripper_init_eventids2();
18107
18108 (void)rb_intern("||");
18109 (void)rb_intern("&&");
18110
18111 InitVM(ripper);
18112 }
18113
18114 void
18115 InitVM_ripper(void)
18116 {
18117 VALUE Ripper;
18118
18119 Ripper = rb_define_class("Ripper", rb_cObject);
18120
18121 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
18122 rb_define_alloc_func(Ripper, ripper_s_allocate);
18123 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
18124 rb_define_method(Ripper, "parse", ripper_parse, 0);
18125 rb_define_method(Ripper, "column", ripper_column, 0);
18126 rb_define_method(Ripper, "filename", ripper_filename, 0);
18127 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
18128 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
18129 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
18130 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
18131 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
18132 #ifdef RIPPER_DEBUG
18133 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
18134 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
18135 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
18136 #endif
18137
18138 ripper_init_eventids1_table(Ripper);
18139 ripper_init_eventids2_table(Ripper);
18140
18141 # if 0
18142
18143
18144
18145
18146
18147
18148
18149 rb_define_global_const("SCRIPT_LINES__", Qnil);
18150 #endif
18151
18152 }
18153 #endif
18154
18155