|
Ruby 1.9.2p136(2010-12-25revision30365)
|
00001 /* A Bison parser, made by GNU Bison 2.4.3. */ 00002 00003 /* Skeleton implementation for Bison's Yacc-like parsers in C 00004 00005 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 00006 2009, 2010 Free Software Foundation, Inc. 00007 00008 This program is free software: you can redistribute it and/or modify 00009 it under the terms of the GNU General Public License as published by 00010 the Free Software Foundation, either version 3 of the License, or 00011 (at your option) any later version. 00012 00013 This program is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 00020 00021 /* As a special exception, you may create a larger work that contains 00022 part or all of the Bison parser skeleton and distribute that work 00023 under terms of your choice, so long as that work isn't itself a 00024 parser generator using the skeleton or a modified version thereof 00025 as a parser skeleton. Alternatively, if you modify or redistribute 00026 the parser skeleton itself, you may (at your option) remove this 00027 special exception, which will cause the skeleton and the resulting 00028 Bison output files to be licensed under the GNU General Public 00029 License without this special exception. 00030 00031 This special exception was added by the Free Software Foundation in 00032 version 2.2 of Bison. */ 00033 00034 /* C LALR(1) parser skeleton written by Richard Stallman, by 00035 simplifying the original so-called "semantic" parser. */ 00036 00037 /* All symbols defined below should begin with yy or YY, to avoid 00038 infringing on user name space. This should be done even for local 00039 variables, as they might otherwise be expanded by user macros. 00040 There are some unavoidable exceptions within include files to 00041 define necessary library symbols; they are noted "INFRINGES ON 00042 USER NAME SPACE" below. */ 00043 00044 /* Identify Bison output. */ 00045 #define YYBISON 1 00046 00047 /* Bison version. */ 00048 #define YYBISON_VERSION "2.4.3" 00049 00050 /* Skeleton name. */ 00051 #define YYSKELETON_NAME "yacc.c" 00052 00053 /* Pure parsers. */ 00054 #define YYPURE 1 00055 00056 /* Push parsers. */ 00057 #define YYPUSH 0 00058 00059 /* Pull parsers. */ 00060 #define YYPULL 1 00061 00062 /* Using locations. */ 00063 #define YYLSP_NEEDED 0 00064 00065 00066 00067 /* Copy the first part of user declarations. */ 00068 00069 /* Line 189 of yacc.c */ 00070 #line 12 "parse.y" 00071 00072 00073 #define YYDEBUG 1 00074 #define YYERROR_VERBOSE 1 00075 #define YYSTACK_USE_ALLOCA 0 00076 00077 #include "ruby/ruby.h" 00078 #include "ruby/st.h" 00079 #include "ruby/encoding.h" 00080 #include "node.h" 00081 #include "parse.h" 00082 #include "id.h" 00083 #include "regenc.h" 00084 #include <stdio.h> 00085 #include <errno.h> 00086 #include <ctype.h> 00087 00088 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0])) 00089 00090 #define YYMALLOC(size) rb_parser_malloc(parser, size) 00091 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, ptr, size) 00092 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, nelem, size) 00093 #define YYFREE(ptr) rb_parser_free(parser, ptr) 00094 #define malloc YYMALLOC 00095 #define realloc YYREALLOC 00096 #define calloc YYCALLOC 00097 #define free YYFREE 00098 00099 #ifndef RIPPER 00100 static ID register_symid(ID, const char *, long, rb_encoding *); 00101 #define REGISTER_SYMID(id, name) register_symid(id, name, strlen(name), enc) 00102 #include "id.c" 00103 #endif 00104 00105 #define is_notop_id(id) ((id)>tLAST_TOKEN) 00106 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL) 00107 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL) 00108 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE) 00109 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET) 00110 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST) 00111 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS) 00112 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK) 00113 00114 #define is_asgn_or_id(id) ((is_notop_id(id)) && \ 00115 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \ 00116 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \ 00117 ((id)&ID_SCOPE_MASK) == ID_CLASS)) 00118 00119 enum lex_state_e { 00120 EXPR_BEG, /* ignore newline, +/- is a sign. */ 00121 EXPR_END, /* newline significant, +/- is an operator. */ 00122 EXPR_ENDARG, /* ditto, and unbound braces. */ 00123 EXPR_ENDFN, /* ditto, and unbound braces. */ 00124 EXPR_ARG, /* newline significant, +/- is an operator. */ 00125 EXPR_CMDARG, /* newline significant, +/- is an operator. */ 00126 EXPR_MID, /* newline significant, +/- is an operator. */ 00127 EXPR_FNAME, /* ignore newline, no reserved words. */ 00128 EXPR_DOT, /* right after `.' or `::', no reserved words. */ 00129 EXPR_CLASS, /* immediate after `class', no here document. */ 00130 EXPR_VALUE, /* alike EXPR_BEG but label is disallowed. */ 00131 EXPR_MAX_STATE 00132 }; 00133 00134 typedef VALUE stack_type; 00135 00136 # define BITSTACK_PUSH(stack, n) (stack = (stack<<1)|((n)&1)) 00137 # define BITSTACK_POP(stack) (stack = stack >> 1) 00138 # define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1)) 00139 # define BITSTACK_SET_P(stack) (stack&1) 00140 00141 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, n) 00142 #define COND_POP() BITSTACK_POP(cond_stack) 00143 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack) 00144 #define COND_P() BITSTACK_SET_P(cond_stack) 00145 00146 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, n) 00147 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack) 00148 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack) 00149 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack) 00150 00151 struct vtable { 00152 ID *tbl; 00153 int pos; 00154 int capa; 00155 struct vtable *prev; 00156 }; 00157 00158 struct local_vars { 00159 struct vtable *args; 00160 struct vtable *vars; 00161 struct local_vars *prev; 00162 }; 00163 00164 #define DVARS_INHERIT ((void*)1) 00165 #define DVARS_TOPSCOPE NULL 00166 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl)) 00167 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3) 00168 00169 static int 00170 vtable_size(const struct vtable *tbl) 00171 { 00172 if (POINTER_P(tbl)) { 00173 return tbl->pos; 00174 } 00175 else { 00176 return 0; 00177 } 00178 } 00179 00180 #define VTBL_DEBUG 0 00181 00182 static struct vtable * 00183 vtable_alloc(struct vtable *prev) 00184 { 00185 struct vtable *tbl = ALLOC(struct vtable); 00186 tbl->pos = 0; 00187 tbl->capa = 8; 00188 tbl->tbl = ALLOC_N(ID, tbl->capa); 00189 tbl->prev = prev; 00190 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl); 00191 return tbl; 00192 } 00193 00194 static void 00195 vtable_free(struct vtable *tbl) 00196 { 00197 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl); 00198 if (POINTER_P(tbl)) { 00199 if (tbl->tbl) { 00200 xfree(tbl->tbl); 00201 } 00202 xfree(tbl); 00203 } 00204 } 00205 00206 static void 00207 vtable_add(struct vtable *tbl, ID id) 00208 { 00209 if (!POINTER_P(tbl)) { 00210 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl); 00211 } 00212 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id)); 00213 00214 if (tbl->pos == tbl->capa) { 00215 tbl->capa = tbl->capa * 2; 00216 REALLOC_N(tbl->tbl, ID, tbl->capa); 00217 } 00218 tbl->tbl[tbl->pos++] = id; 00219 } 00220 00221 static int 00222 vtable_included(const struct vtable * tbl, ID id) 00223 { 00224 int i; 00225 00226 if (POINTER_P(tbl)) { 00227 for (i = 0; i < tbl->pos; i++) { 00228 if (tbl->tbl[i] == id) { 00229 return 1; 00230 } 00231 } 00232 } 00233 return 0; 00234 } 00235 00236 00237 #ifndef RIPPER 00238 typedef struct token_info { 00239 const char *token; 00240 int linenum; 00241 int column; 00242 int nonspc; 00243 struct token_info *next; 00244 } token_info; 00245 #endif 00246 00247 /* 00248 Structure of Lexer Buffer: 00249 00250 lex_pbeg tokp lex_p lex_pend 00251 | | | | 00252 |-----------+--------------+------------| 00253 |<------------>| 00254 token 00255 */ 00256 struct parser_params { 00257 int is_ripper; 00258 NODE *heap; 00259 00260 YYSTYPE *parser_yylval; 00261 VALUE eofp; 00262 00263 NODE *parser_lex_strterm; 00264 enum lex_state_e parser_lex_state; 00265 stack_type parser_cond_stack; 00266 stack_type parser_cmdarg_stack; 00267 int parser_class_nest; 00268 int parser_paren_nest; 00269 int parser_lpar_beg; 00270 int parser_in_single; 00271 int parser_in_def; 00272 int parser_compile_for_eval; 00273 VALUE parser_cur_mid; 00274 int parser_in_defined; 00275 char *parser_tokenbuf; 00276 int parser_tokidx; 00277 int parser_toksiz; 00278 VALUE parser_lex_input; 00279 VALUE parser_lex_lastline; 00280 VALUE parser_lex_nextline; 00281 const char *parser_lex_pbeg; 00282 const char *parser_lex_p; 00283 const char *parser_lex_pend; 00284 int parser_heredoc_end; 00285 int parser_command_start; 00286 NODE *parser_deferred_nodes; 00287 long parser_lex_gets_ptr; 00288 VALUE (*parser_lex_gets)(struct parser_params*,VALUE); 00289 struct local_vars *parser_lvtbl; 00290 int parser_ruby__end__seen; 00291 int line_count; 00292 int has_shebang; 00293 char *parser_ruby_sourcefile; /* current source file */ 00294 int parser_ruby_sourceline; /* current line no. */ 00295 rb_encoding *enc; 00296 rb_encoding *utf8; 00297 00298 int parser_yydebug; 00299 00300 #ifndef RIPPER 00301 /* Ruby core only */ 00302 NODE *parser_eval_tree_begin; 00303 NODE *parser_eval_tree; 00304 VALUE debug_lines; 00305 VALUE coverage; 00306 int nerr; 00307 00308 token_info *parser_token_info; 00309 #else 00310 /* Ripper only */ 00311 VALUE parser_ruby_sourcefile_string; 00312 const char *tokp; 00313 VALUE delayed; 00314 int delayed_line; 00315 int delayed_col; 00316 00317 VALUE value; 00318 VALUE result; 00319 VALUE parsing_thread; 00320 int toplevel_p; 00321 #endif 00322 }; 00323 00324 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \ 00325 (parser->utf8 = rb_utf8_encoding())) 00326 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc) 00327 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc) 00328 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc) 00329 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc) 00330 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT) 00331 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc) 00332 00333 #ifdef YYMALLOC 00334 void *rb_parser_malloc(struct parser_params *, size_t); 00335 void *rb_parser_realloc(struct parser_params *, void *, size_t); 00336 void *rb_parser_calloc(struct parser_params *, size_t, size_t); 00337 void rb_parser_free(struct parser_params *, void *); 00338 #endif 00339 00340 static int parser_yyerror(struct parser_params*, const char*); 00341 #define yyerror(msg) parser_yyerror(parser, msg) 00342 00343 #define YYLEX_PARAM parser 00344 00345 #define lex_strterm (parser->parser_lex_strterm) 00346 #define lex_state (parser->parser_lex_state) 00347 #define cond_stack (parser->parser_cond_stack) 00348 #define cmdarg_stack (parser->parser_cmdarg_stack) 00349 #define class_nest (parser->parser_class_nest) 00350 #define paren_nest (parser->parser_paren_nest) 00351 #define lpar_beg (parser->parser_lpar_beg) 00352 #define in_single (parser->parser_in_single) 00353 #define in_def (parser->parser_in_def) 00354 #define compile_for_eval (parser->parser_compile_for_eval) 00355 #define cur_mid (parser->parser_cur_mid) 00356 #define in_defined (parser->parser_in_defined) 00357 #define tokenbuf (parser->parser_tokenbuf) 00358 #define tokidx (parser->parser_tokidx) 00359 #define toksiz (parser->parser_toksiz) 00360 #define lex_input (parser->parser_lex_input) 00361 #define lex_lastline (parser->parser_lex_lastline) 00362 #define lex_nextline (parser->parser_lex_nextline) 00363 #define lex_pbeg (parser->parser_lex_pbeg) 00364 #define lex_p (parser->parser_lex_p) 00365 #define lex_pend (parser->parser_lex_pend) 00366 #define heredoc_end (parser->parser_heredoc_end) 00367 #define command_start (parser->parser_command_start) 00368 #define deferred_nodes (parser->parser_deferred_nodes) 00369 #define lex_gets_ptr (parser->parser_lex_gets_ptr) 00370 #define lex_gets (parser->parser_lex_gets) 00371 #define lvtbl (parser->parser_lvtbl) 00372 #define ruby__end__seen (parser->parser_ruby__end__seen) 00373 #define ruby_sourceline (parser->parser_ruby_sourceline) 00374 #define ruby_sourcefile (parser->parser_ruby_sourcefile) 00375 #define yydebug (parser->parser_yydebug) 00376 #ifdef RIPPER 00377 #else 00378 #define ruby_eval_tree (parser->parser_eval_tree) 00379 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin) 00380 #define ruby_debug_lines (parser->debug_lines) 00381 #define ruby_coverage (parser->coverage) 00382 #endif 00383 00384 static int yylex(void*, void*); 00385 00386 #ifndef RIPPER 00387 #define yyparse ruby_yyparse 00388 00389 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE); 00390 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, type, a1, a2, a3) 00391 00392 static NODE *cond_gen(struct parser_params*,NODE*); 00393 #define cond(node) cond_gen(parser, node) 00394 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*); 00395 #define logop(type,node1,node2) logop_gen(parser, type, node1, node2) 00396 00397 static NODE *newline_node(NODE*); 00398 static void fixpos(NODE*,NODE*); 00399 00400 static int value_expr_gen(struct parser_params*,NODE*); 00401 static void void_expr_gen(struct parser_params*,NODE*); 00402 static NODE *remove_begin(NODE*); 00403 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node)) 00404 #define void_expr0(node) void_expr_gen(parser, (node)) 00405 #define void_expr(node) void_expr0((node) = remove_begin(node)) 00406 static void void_stmts_gen(struct parser_params*,NODE*); 00407 #define void_stmts(node) void_stmts_gen(parser, node) 00408 static void reduce_nodes_gen(struct parser_params*,NODE**); 00409 #define reduce_nodes(n) reduce_nodes_gen(parser,n) 00410 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*); 00411 #define block_dup_check(n1,n2) block_dup_check_gen(parser,n1,n2) 00412 00413 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*); 00414 #define block_append(h,t) block_append_gen(parser,h,t) 00415 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*); 00416 #define list_append(l,i) list_append_gen(parser,l,i) 00417 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*); 00418 #define list_concat(h,t) list_concat_gen(parser,h,t) 00419 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*); 00420 #define arg_append(h,t) arg_append_gen(parser,h,t) 00421 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*); 00422 #define arg_concat(h,t) arg_concat_gen(parser,h,t) 00423 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*); 00424 #define literal_concat(h,t) literal_concat_gen(parser,h,t) 00425 static int literal_concat0(struct parser_params *, VALUE, VALUE); 00426 static NODE *new_evstr_gen(struct parser_params*,NODE*); 00427 #define new_evstr(n) new_evstr_gen(parser,n) 00428 static NODE *evstr2dstr_gen(struct parser_params*,NODE*); 00429 #define evstr2dstr(n) evstr2dstr_gen(parser,n) 00430 static NODE *splat_array(NODE*); 00431 00432 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*); 00433 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1) 00434 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID); 00435 #define call_uni_op(recv,id) call_uni_op_gen(parser, recv,id) 00436 00437 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID); 00438 #define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b) 00439 00440 static NODE *negate_lit(NODE*); 00441 static NODE *ret_args_gen(struct parser_params*,NODE*); 00442 #define ret_args(node) ret_args_gen(parser, node) 00443 static NODE *arg_blk_pass(NODE*,NODE*); 00444 static NODE *new_yield_gen(struct parser_params*,NODE*); 00445 #define new_yield(node) new_yield_gen(parser, node) 00446 00447 static NODE *gettable_gen(struct parser_params*,ID); 00448 #define gettable(id) gettable_gen(parser,id) 00449 static NODE *assignable_gen(struct parser_params*,ID,NODE*); 00450 #define assignable(id,node) assignable_gen(parser, id, node) 00451 00452 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*); 00453 #define aryset(node1,node2) aryset_gen(parser, node1, node2) 00454 static NODE *attrset_gen(struct parser_params*,NODE*,ID); 00455 #define attrset(node,id) attrset_gen(parser, node, id) 00456 00457 static void rb_backref_error_gen(struct parser_params*,NODE*); 00458 #define rb_backref_error(n) rb_backref_error_gen(parser,n) 00459 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*); 00460 #define node_assign(node1, node2) node_assign_gen(parser, node1, node2) 00461 00462 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*); 00463 #define match_op(node1,node2) match_op_gen(parser, node1, node2) 00464 00465 static ID *local_tbl_gen(struct parser_params*); 00466 #define local_tbl() local_tbl_gen(parser) 00467 00468 static void fixup_nodes(NODE **); 00469 00470 extern int rb_dvar_defined(ID); 00471 extern int rb_local_defined(ID); 00472 extern int rb_parse_in_eval(void); 00473 extern int rb_parse_in_main(void); 00474 00475 static VALUE reg_compile_gen(struct parser_params*, VALUE, int); 00476 #define reg_compile(str,options) reg_compile_gen(parser, str, options) 00477 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int); 00478 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, str, options) 00479 static int reg_fragment_check_gen(struct parser_params*, VALUE, int); 00480 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, str, options) 00481 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match); 00482 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,regexp,match) 00483 00484 #define get_id(id) (id) 00485 #define get_value(val) (val) 00486 #else 00487 #define remove_begin(node) (node) 00488 #define rb_dvar_defined(id) 0 00489 #define rb_local_defined(id) 0 00490 static ID ripper_get_id(VALUE); 00491 #define get_id(id) ripper_get_id(id) 00492 static VALUE ripper_get_value(VALUE); 00493 #define get_value(val) ripper_get_value(val) 00494 static VALUE assignable_gen(struct parser_params*,VALUE); 00495 #define assignable(lhs,node) assignable_gen(parser, lhs) 00496 #endif /* !RIPPER */ 00497 00498 static ID formal_argument_gen(struct parser_params*, ID); 00499 #define formal_argument(id) formal_argument_gen(parser, id) 00500 static ID shadowing_lvar_gen(struct parser_params*,ID); 00501 #define shadowing_lvar(name) shadowing_lvar_gen(parser, name) 00502 static void new_bv_gen(struct parser_params*,ID); 00503 #define new_bv(id) new_bv_gen(parser, id) 00504 00505 static void local_push_gen(struct parser_params*,int); 00506 #define local_push(top) local_push_gen(parser,top) 00507 static void local_pop_gen(struct parser_params*); 00508 #define local_pop() local_pop_gen(parser) 00509 static int local_var_gen(struct parser_params*, ID); 00510 #define local_var(id) local_var_gen(parser, id); 00511 static int arg_var_gen(struct parser_params*, ID); 00512 #define arg_var(id) arg_var_gen(parser, id) 00513 static int local_id_gen(struct parser_params*, ID); 00514 #define local_id(id) local_id_gen(parser, id) 00515 static ID internal_id_gen(struct parser_params*); 00516 #define internal_id() internal_id_gen(parser) 00517 00518 static const struct vtable *dyna_push_gen(struct parser_params *); 00519 #define dyna_push() dyna_push_gen(parser) 00520 static void dyna_pop_gen(struct parser_params*, const struct vtable *); 00521 #define dyna_pop(node) dyna_pop_gen(parser, node) 00522 static int dyna_in_block_gen(struct parser_params*); 00523 #define dyna_in_block() dyna_in_block_gen(parser) 00524 #define dyna_var(id) local_var(id) 00525 static int dvar_defined_gen(struct parser_params*,ID); 00526 #define dvar_defined(id) dvar_defined_gen(parser, id) 00527 static int dvar_curr_gen(struct parser_params*,ID); 00528 #define dvar_curr(id) dvar_curr_gen(parser, id) 00529 00530 static int lvar_defined_gen(struct parser_params*, ID); 00531 #define lvar_defined(id) lvar_defined_gen(parser, id) 00532 00533 #define RE_OPTION_ONCE (1<<16) 00534 #define RE_OPTION_ENCODING_SHIFT 8 00535 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT) 00536 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff) 00537 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE) 00538 #define RE_OPTION_MASK 0xff 00539 #define RE_OPTION_ARG_ENCODING_NONE 32 00540 00541 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */ 00542 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */ 00543 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1)) 00544 #define nd_func u1.id 00545 #if SIZEOF_SHORT == 2 00546 #define nd_term(node) ((signed short)(node)->u2.id) 00547 #else 00548 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2) 00549 #endif 00550 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2) 00551 #define nd_nest u3.cnt 00552 00553 /****** Ripper *******/ 00554 00555 #ifdef RIPPER 00556 #define RIPPER_VERSION "0.1.0" 00557 00558 #include "eventids1.c" 00559 #include "eventids2.c" 00560 static ID ripper_id_gets; 00561 00562 static VALUE ripper_dispatch0(struct parser_params*,ID); 00563 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE); 00564 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE); 00565 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE); 00566 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE); 00567 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE); 00568 00569 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n)) 00570 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), a) 00571 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), a, b) 00572 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), a, b, c) 00573 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d) 00574 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d, e) 00575 00576 #define yyparse ripper_yyparse 00577 00578 #define ripper_intern(s) ID2SYM(rb_intern(s)) 00579 static VALUE ripper_id2sym(ID); 00580 #ifdef __GNUC__ 00581 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \ 00582 ID2SYM(id) : ripper_id2sym(id)) 00583 #endif 00584 00585 #define arg_new() dispatch0(args_new) 00586 #define arg_add(l,a) dispatch2(args_add, l, a) 00587 #define arg_add_star(l,a) dispatch2(args_add_star, l, a) 00588 #define arg_add_block(l,b) dispatch2(args_add_block, l, b) 00589 #define arg_add_optblock(l,b) ((b)==Qundef? l : dispatch2(args_add_block, l, b)) 00590 #define bare_assoc(v) dispatch1(bare_assoc_hash, v) 00591 #define arg_add_assocs(l,b) arg_add(l, bare_assoc(b)) 00592 00593 #define args2mrhs(a) dispatch1(mrhs_new_from_args, a) 00594 #define mrhs_new() dispatch0(mrhs_new) 00595 #define mrhs_add(l,a) dispatch2(mrhs_add, l, a) 00596 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, l, a) 00597 00598 #define mlhs_new() dispatch0(mlhs_new) 00599 #define mlhs_add(l,a) dispatch2(mlhs_add, l, a) 00600 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, l, a) 00601 00602 #define params_new(pars, opts, rest, pars2, blk) \ 00603 dispatch5(params, pars, opts, rest, pars2, blk) 00604 00605 #define blockvar_new(p,v) dispatch2(block_var, p, v) 00606 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, l, a) 00607 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, l, a) 00608 00609 #define method_optarg(m,a) ((a)==Qundef ? m : dispatch2(method_add_arg,m,a)) 00610 #define method_arg(m,a) dispatch2(method_add_arg,m,a) 00611 #define method_add_block(m,b) dispatch2(method_add_block, m, b) 00612 00613 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x)) 00614 00615 #define FIXME 0 00616 00617 #endif /* RIPPER */ 00618 00619 #ifndef RIPPER 00620 # define ifndef_ripper(x) x 00621 #else 00622 # define ifndef_ripper(x) 00623 #endif 00624 00625 #ifndef RIPPER 00626 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt) 00627 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a) 00628 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a) 00629 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt) 00630 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt, a) 00631 #else 00632 # define rb_warn0(fmt) ripper_warn0(parser, fmt) 00633 # define rb_warnI(fmt,a) ripper_warnI(parser, fmt, a) 00634 # define rb_warnS(fmt,a) ripper_warnS(parser, fmt, a) 00635 # define rb_warning0(fmt) ripper_warning0(parser, fmt) 00636 # define rb_warningS(fmt,a) ripper_warningS(parser, fmt, a) 00637 static void ripper_warn0(struct parser_params*, const char*); 00638 static void ripper_warnI(struct parser_params*, const char*, int); 00639 #if 0 00640 static void ripper_warnS(struct parser_params*, const char*, const char*); 00641 #endif 00642 static void ripper_warning0(struct parser_params*, const char*); 00643 static void ripper_warningS(struct parser_params*, const char*, const char*); 00644 #endif 00645 00646 #ifdef RIPPER 00647 static void ripper_compile_error(struct parser_params*, const char *fmt, ...); 00648 # define rb_compile_error ripper_compile_error 00649 # define compile_error ripper_compile_error 00650 # define PARSER_ARG parser, 00651 #else 00652 # define compile_error parser->nerr++,rb_compile_error 00653 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, 00654 #endif 00655 00656 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150, 00657 for instance). This is too low for Ruby to parse some files, such as 00658 date/format.rb, therefore bump the value up to at least Bison's default. */ 00659 #ifdef OLD_YACC 00660 #ifndef YYMAXDEPTH 00661 #define YYMAXDEPTH 10000 00662 #endif 00663 #endif 00664 00665 #ifndef RIPPER 00666 static void token_info_push(struct parser_params*, const char *token); 00667 static void token_info_pop(struct parser_params*, const char *token); 00668 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, token) : (void)0) 00669 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, token) : (void)0) 00670 #else 00671 #define token_info_push(token) /* nothing */ 00672 #define token_info_pop(token) /* nothing */ 00673 #endif 00674 00675 00676 /* Line 189 of yacc.c */ 00677 #line 678 "parse.c" 00678 00679 /* Enabling traces. */ 00680 #ifndef YYDEBUG 00681 # define YYDEBUG 0 00682 #endif 00683 00684 /* Enabling verbose error messages. */ 00685 #ifdef YYERROR_VERBOSE 00686 # undef YYERROR_VERBOSE 00687 # define YYERROR_VERBOSE 1 00688 #else 00689 # define YYERROR_VERBOSE 0 00690 #endif 00691 00692 /* Enabling the token table. */ 00693 #ifndef YYTOKEN_TABLE 00694 # define YYTOKEN_TABLE 0 00695 #endif 00696 00697 00698 /* Tokens. */ 00699 #ifndef YYTOKENTYPE 00700 # define YYTOKENTYPE 00701 /* Put the tokens into the symbol table, so that GDB and other debuggers 00702 know about them. */ 00703 enum yytokentype { 00704 keyword_class = 258, 00705 keyword_module = 259, 00706 keyword_def = 260, 00707 keyword_undef = 261, 00708 keyword_begin = 262, 00709 keyword_rescue = 263, 00710 keyword_ensure = 264, 00711 keyword_end = 265, 00712 keyword_if = 266, 00713 keyword_unless = 267, 00714 keyword_then = 268, 00715 keyword_elsif = 269, 00716 keyword_else = 270, 00717 keyword_case = 271, 00718 keyword_when = 272, 00719 keyword_while = 273, 00720 keyword_until = 274, 00721 keyword_for = 275, 00722 keyword_break = 276, 00723 keyword_next = 277, 00724 keyword_redo = 278, 00725 keyword_retry = 279, 00726 keyword_in = 280, 00727 keyword_do = 281, 00728 keyword_do_cond = 282, 00729 keyword_do_block = 283, 00730 keyword_do_LAMBDA = 284, 00731 keyword_return = 285, 00732 keyword_yield = 286, 00733 keyword_super = 287, 00734 keyword_self = 288, 00735 keyword_nil = 289, 00736 keyword_true = 290, 00737 keyword_false = 291, 00738 keyword_and = 292, 00739 keyword_or = 293, 00740 keyword_not = 294, 00741 modifier_if = 295, 00742 modifier_unless = 296, 00743 modifier_while = 297, 00744 modifier_until = 298, 00745 modifier_rescue = 299, 00746 keyword_alias = 300, 00747 keyword_defined = 301, 00748 keyword_BEGIN = 302, 00749 keyword_END = 303, 00750 keyword__LINE__ = 304, 00751 keyword__FILE__ = 305, 00752 keyword__ENCODING__ = 306, 00753 tIDENTIFIER = 307, 00754 tFID = 308, 00755 tGVAR = 309, 00756 tIVAR = 310, 00757 tCONSTANT = 311, 00758 tCVAR = 312, 00759 tLABEL = 313, 00760 tINTEGER = 314, 00761 tFLOAT = 315, 00762 tSTRING_CONTENT = 316, 00763 tCHAR = 317, 00764 tNTH_REF = 318, 00765 tBACK_REF = 319, 00766 tREGEXP_END = 320, 00767 tUPLUS = 321, 00768 tUMINUS = 322, 00769 tPOW = 323, 00770 tCMP = 324, 00771 tEQ = 325, 00772 tEQQ = 326, 00773 tNEQ = 327, 00774 tGEQ = 328, 00775 tLEQ = 329, 00776 tANDOP = 330, 00777 tOROP = 331, 00778 tMATCH = 332, 00779 tNMATCH = 333, 00780 tDOT2 = 334, 00781 tDOT3 = 335, 00782 tAREF = 336, 00783 tASET = 337, 00784 tLSHFT = 338, 00785 tRSHFT = 339, 00786 tCOLON2 = 340, 00787 tCOLON3 = 341, 00788 tOP_ASGN = 342, 00789 tASSOC = 343, 00790 tLPAREN = 344, 00791 tLPAREN_ARG = 345, 00792 tRPAREN = 346, 00793 tLBRACK = 347, 00794 tLBRACE = 348, 00795 tLBRACE_ARG = 349, 00796 tSTAR = 350, 00797 tAMPER = 351, 00798 tLAMBDA = 352, 00799 tSYMBEG = 353, 00800 tSTRING_BEG = 354, 00801 tXSTRING_BEG = 355, 00802 tREGEXP_BEG = 356, 00803 tWORDS_BEG = 357, 00804 tQWORDS_BEG = 358, 00805 tSTRING_DBEG = 359, 00806 tSTRING_DVAR = 360, 00807 tSTRING_END = 361, 00808 tLAMBEG = 362, 00809 tLOWEST = 363, 00810 tUMINUS_NUM = 364, 00811 idNULL = 365, 00812 idRespond_to = 366, 00813 idIFUNC = 367, 00814 idCFUNC = 368, 00815 id_core_set_method_alias = 369, 00816 id_core_set_variable_alias = 370, 00817 id_core_undef_method = 371, 00818 id_core_define_method = 372, 00819 id_core_define_singleton_method = 373, 00820 id_core_set_postexe = 374, 00821 tLAST_TOKEN = 375 00822 }; 00823 #endif 00824 00825 00826 00827 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 00828 typedef union YYSTYPE 00829 { 00830 00831 /* Line 214 of yacc.c */ 00832 #line 620 "parse.y" 00833 00834 VALUE val; 00835 NODE *node; 00836 ID id; 00837 int num; 00838 const struct vtable *vars; 00839 00840 00841 00842 /* Line 214 of yacc.c */ 00843 #line 844 "parse.c" 00844 } YYSTYPE; 00845 # define YYSTYPE_IS_TRIVIAL 1 00846 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 00847 # define YYSTYPE_IS_DECLARED 1 00848 #endif 00849 00850 00851 /* Copy the second part of user declarations. */ 00852 00853 00854 /* Line 264 of yacc.c */ 00855 #line 856 "parse.c" 00856 00857 #ifdef short 00858 # undef short 00859 #endif 00860 00861 #ifdef YYTYPE_UINT8 00862 typedef YYTYPE_UINT8 yytype_uint8; 00863 #else 00864 typedef unsigned char yytype_uint8; 00865 #endif 00866 00867 #ifdef YYTYPE_INT8 00868 typedef YYTYPE_INT8 yytype_int8; 00869 #elif (defined __STDC__ || defined __C99__FUNC__ \ 00870 || defined __cplusplus || defined _MSC_VER) 00871 typedef signed char yytype_int8; 00872 #else 00873 typedef short int yytype_int8; 00874 #endif 00875 00876 #ifdef YYTYPE_UINT16 00877 typedef YYTYPE_UINT16 yytype_uint16; 00878 #else 00879 typedef unsigned short int yytype_uint16; 00880 #endif 00881 00882 #ifdef YYTYPE_INT16 00883 typedef YYTYPE_INT16 yytype_int16; 00884 #else 00885 typedef short int yytype_int16; 00886 #endif 00887 00888 #ifndef YYSIZE_T 00889 # ifdef __SIZE_TYPE__ 00890 # define YYSIZE_T __SIZE_TYPE__ 00891 # elif defined size_t 00892 # define YYSIZE_T size_t 00893 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 00894 || defined __cplusplus || defined _MSC_VER) 00895 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 00896 # define YYSIZE_T size_t 00897 # else 00898 # define YYSIZE_T unsigned int 00899 # endif 00900 #endif 00901 00902 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 00903 00904 #ifndef YY_ 00905 # if defined YYENABLE_NLS && YYENABLE_NLS 00906 # if ENABLE_NLS 00907 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 00908 # define YY_(msgid) dgettext ("bison-runtime", msgid) 00909 # endif 00910 # endif 00911 # ifndef YY_ 00912 # define YY_(msgid) msgid 00913 # endif 00914 #endif 00915 00916 /* Suppress unused-variable warnings by "using" E. */ 00917 #if ! defined lint || defined __GNUC__ 00918 # define YYUSE(e) ((void) (e)) 00919 #else 00920 # define YYUSE(e) /* empty */ 00921 #endif 00922 00923 /* Identity function, used to suppress warnings about constant conditions. */ 00924 #ifndef lint 00925 # define YYID(n) (n) 00926 #else 00927 #if (defined __STDC__ || defined __C99__FUNC__ \ 00928 || defined __cplusplus || defined _MSC_VER) 00929 static int 00930 YYID (int yyi) 00931 #else 00932 static int 00933 YYID (yyi) 00934 int yyi; 00935 #endif 00936 { 00937 return yyi; 00938 } 00939 #endif 00940 00941 #if ! defined yyoverflow || YYERROR_VERBOSE 00942 00943 /* The parser invokes alloca or malloc; define the necessary symbols. */ 00944 00945 # ifdef YYSTACK_USE_ALLOCA 00946 # if YYSTACK_USE_ALLOCA 00947 # ifdef __GNUC__ 00948 # define YYSTACK_ALLOC __builtin_alloca 00949 # elif defined __BUILTIN_VA_ARG_INCR 00950 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 00951 # elif defined _AIX 00952 # define YYSTACK_ALLOC __alloca 00953 # elif defined _MSC_VER 00954 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 00955 # define alloca _alloca 00956 # else 00957 # define YYSTACK_ALLOC alloca 00958 # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 00959 || defined __cplusplus || defined _MSC_VER) 00960 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 00961 # ifndef _STDLIB_H 00962 # define _STDLIB_H 1 00963 # endif 00964 # endif 00965 # endif 00966 # endif 00967 # endif 00968 00969 # ifdef YYSTACK_ALLOC 00970 /* Pacify GCC's `empty if-body' warning. */ 00971 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 00972 # ifndef YYSTACK_ALLOC_MAXIMUM 00973 /* The OS might guarantee only one guard page at the bottom of the stack, 00974 and a page size can be as small as 4096 bytes. So we cannot safely 00975 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 00976 to allow for a few compiler-allocated temporary stack slots. */ 00977 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 00978 # endif 00979 # else 00980 # define YYSTACK_ALLOC YYMALLOC 00981 # define YYSTACK_FREE YYFREE 00982 # ifndef YYSTACK_ALLOC_MAXIMUM 00983 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 00984 # endif 00985 # if (defined __cplusplus && ! defined _STDLIB_H \ 00986 && ! ((defined YYMALLOC || defined malloc) \ 00987 && (defined YYFREE || defined free))) 00988 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 00989 # ifndef _STDLIB_H 00990 # define _STDLIB_H 1 00991 # endif 00992 # endif 00993 # ifndef YYMALLOC 00994 # define YYMALLOC malloc 00995 # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 00996 || defined __cplusplus || defined _MSC_VER) 00997 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 00998 # endif 00999 # endif 01000 # ifndef YYFREE 01001 # define YYFREE free 01002 # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 01003 || defined __cplusplus || defined _MSC_VER) 01004 void free (void *); /* INFRINGES ON USER NAME SPACE */ 01005 # endif 01006 # endif 01007 # endif 01008 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 01009 01010 01011 #if (! defined yyoverflow \ 01012 && (! defined __cplusplus \ 01013 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 01014 01015 /* A type that is properly aligned for any stack member. */ 01016 union yyalloc 01017 { 01018 yytype_int16 yyss_alloc; 01019 YYSTYPE yyvs_alloc; 01020 }; 01021 01022 /* The size of the maximum gap between one aligned stack and the next. */ 01023 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 01024 01025 /* The size of an array large to enough to hold all stacks, each with 01026 N elements. */ 01027 # define YYSTACK_BYTES(N) \ 01028 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 01029 + YYSTACK_GAP_MAXIMUM) 01030 01031 /* Copy COUNT objects from FROM to TO. The source and destination do 01032 not overlap. */ 01033 # ifndef YYCOPY 01034 # if defined __GNUC__ && 1 < __GNUC__ 01035 # define YYCOPY(To, From, Count) \ 01036 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 01037 # else 01038 # define YYCOPY(To, From, Count) \ 01039 do \ 01040 { \ 01041 YYSIZE_T yyi; \ 01042 for (yyi = 0; yyi < (Count); yyi++) \ 01043 (To)[yyi] = (From)[yyi]; \ 01044 } \ 01045 while (YYID (0)) 01046 # endif 01047 # endif 01048 01049 /* Relocate STACK from its old location to the new one. The 01050 local variables YYSIZE and YYSTACKSIZE give the old and new number of 01051 elements in the stack, and YYPTR gives the new location of the 01052 stack. Advance YYPTR to a properly aligned location for the next 01053 stack. */ 01054 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 01055 do \ 01056 { \ 01057 YYSIZE_T yynewbytes; \ 01058 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 01059 Stack = &yyptr->Stack_alloc; \ 01060 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 01061 yyptr += yynewbytes / sizeof (*yyptr); \ 01062 } \ 01063 while (YYID (0)) 01064 01065 #endif 01066 01067 /* YYFINAL -- State number of the termination state. */ 01068 #define YYFINAL 3 01069 /* YYLAST -- Last index in YYTABLE. */ 01070 #define YYLAST 10410 01071 01072 /* YYNTOKENS -- Number of terminals. */ 01073 #define YYNTOKENS 148 01074 /* YYNNTS -- Number of nonterminals. */ 01075 #define YYNNTS 172 01076 /* YYNRULES -- Number of rules. */ 01077 #define YYNRULES 565 01078 /* YYNRULES -- Number of states. */ 01079 #define YYNSTATES 975 01080 01081 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 01082 #define YYUNDEFTOK 2 01083 #define YYMAXUTOK 375 01084 01085 #define YYTRANSLATE(YYX) \ 01086 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 01087 01088 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 01089 static const yytype_uint8 yytranslate[] = 01090 { 01091 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01092 147, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01093 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01094 2, 2, 146, 123, 2, 2, 2, 121, 116, 2, 01095 142, 143, 119, 117, 140, 118, 139, 120, 2, 2, 01096 2, 2, 2, 2, 2, 2, 2, 2, 111, 145, 01097 113, 109, 112, 110, 2, 2, 2, 2, 2, 2, 01098 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01099 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01100 2, 138, 2, 144, 115, 2, 141, 2, 2, 2, 01101 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01102 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01103 2, 2, 2, 136, 114, 137, 124, 2, 2, 2, 01104 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01105 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01106 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01107 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01108 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01109 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01110 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01111 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01112 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01113 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01114 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01115 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01116 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 01117 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 01118 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 01119 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 01120 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 01121 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 01122 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 01123 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 01124 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 01125 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 01126 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 01127 105, 106, 107, 108, 122, 125, 126, 127, 128, 129, 01128 130, 131, 132, 133, 134, 135 01129 }; 01130 01131 #if YYDEBUG 01132 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 01133 YYRHS. */ 01134 static const yytype_uint16 yyprhs[] = 01135 { 01136 0, 0, 3, 4, 7, 10, 12, 14, 18, 21, 01137 23, 24, 30, 35, 38, 40, 42, 46, 49, 50, 01138 55, 59, 63, 67, 70, 74, 78, 82, 86, 90, 01139 95, 99, 103, 107, 114, 120, 126, 132, 138, 142, 01140 146, 150, 154, 156, 158, 162, 166, 170, 173, 175, 01141 177, 179, 181, 183, 188, 193, 194, 200, 203, 207, 01142 212, 218, 223, 229, 232, 235, 238, 241, 244, 246, 01143 250, 252, 256, 258, 261, 265, 271, 274, 279, 282, 01144 287, 289, 293, 295, 299, 302, 306, 308, 312, 314, 01145 319, 323, 327, 331, 335, 338, 340, 342, 347, 351, 01146 355, 359, 363, 366, 368, 370, 372, 375, 377, 381, 01147 383, 385, 387, 389, 391, 393, 395, 397, 399, 401, 01148 402, 407, 409, 411, 413, 415, 417, 419, 421, 423, 01149 425, 427, 429, 431, 433, 435, 437, 439, 441, 443, 01150 445, 447, 449, 451, 453, 455, 457, 459, 461, 463, 01151 465, 467, 469, 471, 473, 475, 477, 479, 481, 483, 01152 485, 487, 489, 491, 493, 495, 497, 499, 501, 503, 01153 505, 507, 509, 511, 513, 515, 517, 519, 521, 523, 01154 525, 527, 529, 531, 533, 535, 537, 539, 541, 543, 01155 545, 547, 551, 557, 561, 567, 574, 580, 586, 592, 01156 598, 603, 607, 611, 615, 619, 623, 627, 631, 635, 01157 639, 644, 649, 652, 655, 659, 663, 667, 671, 675, 01158 679, 683, 687, 691, 695, 699, 703, 707, 710, 713, 01159 717, 721, 725, 729, 730, 735, 742, 744, 746, 748, 01160 751, 756, 759, 763, 765, 767, 769, 771, 773, 776, 01161 779, 784, 786, 787, 790, 793, 796, 798, 800, 802, 01162 805, 809, 814, 818, 823, 826, 828, 830, 832, 834, 01163 836, 838, 840, 842, 844, 845, 850, 851, 856, 860, 01164 864, 867, 871, 875, 877, 882, 886, 888, 889, 896, 01165 901, 905, 908, 910, 913, 916, 923, 930, 931, 932, 01166 940, 941, 942, 950, 956, 961, 962, 963, 973, 974, 01167 981, 982, 983, 992, 993, 999, 1000, 1007, 1008, 1009, 01168 1019, 1021, 1023, 1025, 1027, 1029, 1031, 1033, 1035, 1037, 01169 1039, 1041, 1043, 1045, 1047, 1049, 1051, 1053, 1055, 1058, 01170 1060, 1062, 1064, 1070, 1072, 1075, 1077, 1079, 1081, 1085, 01171 1087, 1091, 1093, 1098, 1105, 1109, 1115, 1118, 1123, 1125, 01172 1129, 1136, 1145, 1150, 1157, 1162, 1165, 1172, 1175, 1180, 01173 1187, 1190, 1195, 1198, 1203, 1205, 1207, 1209, 1213, 1215, 01174 1220, 1222, 1225, 1227, 1231, 1233, 1235, 1236, 1237, 1242, 01175 1247, 1249, 1253, 1257, 1258, 1264, 1267, 1272, 1277, 1280, 01176 1285, 1290, 1294, 1298, 1302, 1305, 1307, 1312, 1313, 1319, 01177 1320, 1326, 1332, 1334, 1336, 1343, 1345, 1347, 1349, 1351, 01178 1354, 1356, 1359, 1361, 1363, 1365, 1367, 1369, 1371, 1373, 01179 1376, 1380, 1384, 1388, 1392, 1396, 1397, 1401, 1403, 1406, 01180 1410, 1414, 1415, 1419, 1420, 1423, 1424, 1427, 1428, 1431, 01181 1433, 1434, 1438, 1439, 1440, 1446, 1448, 1450, 1452, 1454, 01182 1457, 1459, 1461, 1463, 1465, 1469, 1471, 1473, 1476, 1479, 01183 1481, 1483, 1485, 1487, 1489, 1491, 1493, 1495, 1497, 1499, 01184 1501, 1503, 1505, 1507, 1509, 1511, 1513, 1514, 1519, 1522, 01185 1526, 1529, 1536, 1545, 1550, 1557, 1562, 1569, 1572, 1577, 01186 1584, 1587, 1592, 1595, 1600, 1602, 1603, 1605, 1607, 1609, 01187 1611, 1613, 1615, 1617, 1621, 1623, 1627, 1631, 1635, 1637, 01188 1641, 1643, 1647, 1649, 1651, 1654, 1656, 1658, 1660, 1663, 01189 1666, 1668, 1670, 1671, 1676, 1678, 1681, 1683, 1687, 1691, 01190 1694, 1696, 1698, 1700, 1702, 1704, 1706, 1708, 1710, 1712, 01191 1714, 1716, 1718, 1719, 1721, 1722, 1724, 1727, 1730, 1731, 01192 1733, 1735, 1737, 1739, 1741, 1744 01193 }; 01194 01195 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 01196 static const yytype_int16 yyrhs[] = 01197 { 01198 149, 0, -1, -1, 150, 151, -1, 152, 312, -1, 01199 319, -1, 153, -1, 152, 318, 153, -1, 1, 153, 01200 -1, 158, -1, -1, 47, 154, 136, 151, 137, -1, 01201 156, 255, 230, 258, -1, 157, 312, -1, 319, -1, 01202 158, -1, 157, 318, 158, -1, 1, 158, -1, -1, 01203 45, 179, 159, 179, -1, 45, 54, 54, -1, 45, 01204 54, 64, -1, 45, 54, 63, -1, 6, 180, -1, 01205 158, 40, 161, -1, 158, 41, 161, -1, 158, 42, 01206 161, -1, 158, 43, 161, -1, 158, 44, 158, -1, 01207 48, 136, 156, 137, -1, 174, 109, 162, -1, 167, 01208 109, 162, -1, 284, 87, 162, -1, 215, 138, 190, 01209 315, 87, 162, -1, 215, 139, 52, 87, 162, -1, 01210 215, 139, 56, 87, 162, -1, 215, 85, 56, 87, 01211 162, -1, 215, 85, 52, 87, 162, -1, 285, 87, 01212 162, -1, 174, 109, 197, -1, 167, 109, 186, -1, 01213 167, 109, 197, -1, 160, -1, 162, -1, 160, 37, 01214 160, -1, 160, 38, 160, -1, 39, 313, 160, -1, 01215 123, 162, -1, 184, -1, 160, -1, 166, -1, 163, 01216 -1, 248, -1, 248, 139, 309, 192, -1, 248, 85, 01217 309, 192, -1, -1, 94, 165, 236, 156, 137, -1, 01218 308, 192, -1, 308, 192, 164, -1, 215, 139, 309, 01219 192, -1, 215, 139, 309, 192, 164, -1, 215, 85, 01220 309, 192, -1, 215, 85, 309, 192, 164, -1, 32, 01221 192, -1, 31, 192, -1, 30, 191, -1, 21, 191, 01222 -1, 22, 191, -1, 169, -1, 89, 168, 314, -1, 01223 169, -1, 89, 168, 314, -1, 171, -1, 171, 170, 01224 -1, 171, 95, 173, -1, 171, 95, 173, 140, 172, 01225 -1, 171, 95, -1, 171, 95, 140, 172, -1, 95, 01226 173, -1, 95, 173, 140, 172, -1, 95, -1, 95, 01227 140, 172, -1, 173, -1, 89, 168, 314, -1, 170, 01228 140, -1, 171, 170, 140, -1, 170, -1, 172, 140, 01229 170, -1, 282, -1, 215, 138, 190, 315, -1, 215, 01230 139, 52, -1, 215, 85, 52, -1, 215, 139, 56, 01231 -1, 215, 85, 56, -1, 86, 56, -1, 285, -1, 01232 282, -1, 215, 138, 190, 315, -1, 215, 139, 52, 01233 -1, 215, 85, 52, -1, 215, 139, 56, -1, 215, 01234 85, 56, -1, 86, 56, -1, 285, -1, 52, -1, 01235 56, -1, 86, 175, -1, 175, -1, 215, 85, 175, 01236 -1, 52, -1, 56, -1, 53, -1, 182, -1, 183, 01237 -1, 177, -1, 278, -1, 178, -1, 280, -1, 179, 01238 -1, -1, 180, 140, 181, 179, -1, 114, -1, 115, 01239 -1, 116, -1, 69, -1, 70, -1, 71, -1, 77, 01240 -1, 78, -1, 112, -1, 73, -1, 113, -1, 74, 01241 -1, 72, -1, 83, -1, 84, -1, 117, -1, 118, 01242 -1, 119, -1, 95, -1, 120, -1, 121, -1, 68, 01243 -1, 123, -1, 124, -1, 66, -1, 67, -1, 81, 01244 -1, 82, -1, 141, -1, 49, -1, 50, -1, 51, 01245 -1, 47, -1, 48, -1, 45, -1, 37, -1, 7, 01246 -1, 21, -1, 16, -1, 3, -1, 5, -1, 46, 01247 -1, 26, -1, 15, -1, 14, -1, 10, -1, 9, 01248 -1, 36, -1, 20, -1, 25, -1, 4, -1, 22, 01249 -1, 34, -1, 39, -1, 38, -1, 23, -1, 8, 01250 -1, 24, -1, 30, -1, 33, -1, 32, -1, 13, 01251 -1, 35, -1, 6, -1, 17, -1, 31, -1, 11, 01252 -1, 12, -1, 18, -1, 19, -1, 174, 109, 184, 01253 -1, 174, 109, 184, 44, 184, -1, 284, 87, 184, 01254 -1, 284, 87, 184, 44, 184, -1, 215, 138, 190, 01255 315, 87, 184, -1, 215, 139, 52, 87, 184, -1, 01256 215, 139, 56, 87, 184, -1, 215, 85, 52, 87, 01257 184, -1, 215, 85, 56, 87, 184, -1, 86, 56, 01258 87, 184, -1, 285, 87, 184, -1, 184, 79, 184, 01259 -1, 184, 80, 184, -1, 184, 117, 184, -1, 184, 01260 118, 184, -1, 184, 119, 184, -1, 184, 120, 184, 01261 -1, 184, 121, 184, -1, 184, 68, 184, -1, 122, 01262 59, 68, 184, -1, 122, 60, 68, 184, -1, 66, 01263 184, -1, 67, 184, -1, 184, 114, 184, -1, 184, 01264 115, 184, -1, 184, 116, 184, -1, 184, 69, 184, 01265 -1, 184, 112, 184, -1, 184, 73, 184, -1, 184, 01266 113, 184, -1, 184, 74, 184, -1, 184, 70, 184, 01267 -1, 184, 71, 184, -1, 184, 72, 184, -1, 184, 01268 77, 184, -1, 184, 78, 184, -1, 123, 184, -1, 01269 124, 184, -1, 184, 83, 184, -1, 184, 84, 184, 01270 -1, 184, 75, 184, -1, 184, 76, 184, -1, -1, 01271 46, 313, 185, 184, -1, 184, 110, 184, 313, 111, 01272 184, -1, 198, -1, 184, -1, 319, -1, 196, 316, 01273 -1, 196, 140, 306, 316, -1, 306, 316, -1, 142, 01274 190, 314, -1, 319, -1, 188, -1, 319, -1, 191, 01275 -1, 166, -1, 196, 195, -1, 306, 195, -1, 196, 01276 140, 306, 195, -1, 194, -1, -1, 193, 191, -1, 01277 96, 186, -1, 140, 194, -1, 140, -1, 319, -1, 01278 186, -1, 95, 186, -1, 196, 140, 186, -1, 196, 01279 140, 95, 186, -1, 196, 140, 186, -1, 196, 140, 01280 95, 186, -1, 95, 186, -1, 259, -1, 260, -1, 01281 263, -1, 264, -1, 265, -1, 268, -1, 283, -1, 01282 285, -1, 53, -1, -1, 216, 199, 155, 226, -1, 01283 -1, 90, 160, 200, 314, -1, 89, 156, 143, -1, 01284 215, 85, 56, -1, 86, 56, -1, 92, 187, 144, 01285 -1, 93, 305, 137, -1, 30, -1, 31, 142, 191, 01286 314, -1, 31, 142, 314, -1, 31, -1, -1, 46, 01287 313, 142, 201, 160, 314, -1, 39, 142, 160, 314, 01288 -1, 39, 142, 314, -1, 308, 250, -1, 249, -1, 01289 249, 250, -1, 97, 241, -1, 217, 161, 227, 156, 01290 229, 226, -1, 218, 161, 227, 156, 230, 226, -1, 01291 -1, -1, 219, 202, 161, 228, 203, 156, 226, -1, 01292 -1, -1, 220, 204, 161, 228, 205, 156, 226, -1, 01293 221, 161, 312, 253, 226, -1, 221, 312, 253, 226, 01294 -1, -1, -1, 222, 231, 25, 206, 161, 228, 207, 01295 156, 226, -1, -1, 223, 176, 286, 208, 155, 226, 01296 -1, -1, -1, 223, 83, 160, 209, 317, 210, 155, 01297 226, -1, -1, 224, 176, 211, 155, 226, -1, -1, 01298 225, 177, 212, 288, 155, 226, -1, -1, -1, 225, 01299 303, 311, 213, 177, 214, 288, 155, 226, -1, 21, 01300 -1, 22, -1, 23, -1, 24, -1, 198, -1, 7, 01301 -1, 11, -1, 12, -1, 18, -1, 19, -1, 16, 01302 -1, 20, -1, 3, -1, 4, -1, 5, -1, 10, 01303 -1, 317, -1, 13, -1, 317, 13, -1, 317, -1, 01304 27, -1, 230, -1, 14, 161, 227, 156, 229, -1, 01305 319, -1, 15, 156, -1, 174, -1, 167, -1, 291, 01306 -1, 89, 234, 314, -1, 232, -1, 233, 140, 232, 01307 -1, 233, -1, 233, 140, 95, 291, -1, 233, 140, 01308 95, 291, 140, 233, -1, 233, 140, 95, -1, 233, 01309 140, 95, 140, 233, -1, 95, 291, -1, 95, 291, 01310 140, 233, -1, 95, -1, 95, 140, 233, -1, 293, 01311 140, 296, 140, 299, 302, -1, 293, 140, 296, 140, 01312 299, 140, 293, 302, -1, 293, 140, 296, 302, -1, 01313 293, 140, 296, 140, 293, 302, -1, 293, 140, 299, 01314 302, -1, 293, 140, -1, 293, 140, 299, 140, 293, 01315 302, -1, 293, 302, -1, 296, 140, 299, 302, -1, 01316 296, 140, 299, 140, 293, 302, -1, 296, 302, -1, 01317 296, 140, 293, 302, -1, 299, 302, -1, 299, 140, 01318 293, 302, -1, 301, -1, 319, -1, 237, -1, 114, 01319 238, 114, -1, 76, -1, 114, 235, 238, 114, -1, 01320 319, -1, 145, 239, -1, 240, -1, 239, 140, 240, 01321 -1, 52, -1, 290, -1, -1, -1, 242, 243, 244, 01322 245, -1, 142, 289, 238, 314, -1, 289, -1, 107, 01323 156, 137, -1, 29, 156, 10, -1, -1, 28, 247, 01324 236, 156, 10, -1, 166, 246, -1, 248, 139, 309, 01325 189, -1, 248, 85, 309, 189, -1, 308, 188, -1, 01326 215, 139, 309, 189, -1, 215, 85, 309, 188, -1, 01327 215, 85, 310, -1, 215, 139, 188, -1, 215, 85, 01328 188, -1, 32, 188, -1, 32, -1, 215, 138, 190, 01329 315, -1, -1, 136, 251, 236, 156, 137, -1, -1, 01330 26, 252, 236, 156, 10, -1, 17, 196, 227, 156, 01331 254, -1, 230, -1, 253, -1, 8, 256, 257, 227, 01332 156, 255, -1, 319, -1, 186, -1, 197, -1, 319, 01333 -1, 88, 174, -1, 319, -1, 9, 156, -1, 319, 01334 -1, 281, -1, 278, -1, 280, -1, 261, -1, 62, 01335 -1, 262, -1, 261, 262, -1, 99, 270, 106, -1, 01336 100, 271, 106, -1, 101, 272, 65, -1, 102, 146, 01337 106, -1, 102, 266, 106, -1, -1, 266, 267, 146, 01338 -1, 273, -1, 267, 273, -1, 103, 146, 106, -1, 01339 103, 269, 106, -1, -1, 269, 61, 146, -1, -1, 01340 270, 273, -1, -1, 271, 273, -1, -1, 272, 273, 01341 -1, 61, -1, -1, 105, 274, 277, -1, -1, -1, 01342 104, 275, 276, 156, 137, -1, 54, -1, 55, -1, 01343 57, -1, 285, -1, 98, 279, -1, 177, -1, 55, 01344 -1, 54, -1, 57, -1, 98, 271, 106, -1, 59, 01345 -1, 60, -1, 122, 59, -1, 122, 60, -1, 52, 01346 -1, 55, -1, 54, -1, 56, -1, 57, -1, 34, 01347 -1, 33, -1, 35, -1, 36, -1, 50, -1, 49, 01348 -1, 51, -1, 282, -1, 282, -1, 63, -1, 64, 01349 -1, 317, -1, -1, 113, 287, 161, 317, -1, 1, 01350 317, -1, 142, 289, 314, -1, 289, 317, -1, 293, 01351 140, 297, 140, 299, 302, -1, 293, 140, 297, 140, 01352 299, 140, 293, 302, -1, 293, 140, 297, 302, -1, 01353 293, 140, 297, 140, 293, 302, -1, 293, 140, 299, 01354 302, -1, 293, 140, 299, 140, 293, 302, -1, 293, 01355 302, -1, 297, 140, 299, 302, -1, 297, 140, 299, 01356 140, 293, 302, -1, 297, 302, -1, 297, 140, 293, 01357 302, -1, 299, 302, -1, 299, 140, 293, 302, -1, 01358 301, -1, -1, 56, -1, 55, -1, 54, -1, 57, 01359 -1, 290, -1, 52, -1, 291, -1, 89, 234, 314, 01360 -1, 292, -1, 293, 140, 292, -1, 52, 109, 186, 01361 -1, 52, 109, 215, -1, 295, -1, 296, 140, 295, 01362 -1, 294, -1, 297, 140, 294, -1, 119, -1, 95, 01363 -1, 298, 52, -1, 298, -1, 116, -1, 96, -1, 01364 300, 52, -1, 140, 301, -1, 319, -1, 283, -1, 01365 -1, 142, 304, 160, 314, -1, 319, -1, 306, 316, 01366 -1, 307, -1, 306, 140, 307, -1, 186, 88, 186, 01367 -1, 58, 186, -1, 52, -1, 56, -1, 53, -1, 01368 52, -1, 56, -1, 53, -1, 182, -1, 52, -1, 01369 53, -1, 182, -1, 139, -1, 85, -1, -1, 318, 01370 -1, -1, 147, -1, 313, 143, -1, 313, 144, -1, 01371 -1, 147, -1, 140, -1, 145, -1, 147, -1, 317, 01372 -1, 318, 145, -1, -1 01373 }; 01374 01375 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 01376 static const yytype_uint16 yyrline[] = 01377 { 01378 0, 786, 786, 786, 817, 828, 837, 845, 853, 859, 01379 861, 860, 884, 917, 928, 937, 945, 953, 959, 959, 01380 967, 975, 986, 996, 1004, 1013, 1022, 1035, 1048, 1057, 01381 1069, 1078, 1088, 1117, 1138, 1155, 1172, 1177, 1194, 1204, 01382 1213, 1222, 1231, 1234, 1235, 1243, 1251, 1259, 1267, 1270, 01383 1282, 1283, 1286, 1287, 1296, 1308, 1307, 1329, 1338, 1350, 01384 1359, 1371, 1380, 1392, 1401, 1410, 1418, 1426, 1436, 1437, 01385 1447, 1448, 1458, 1466, 1474, 1482, 1491, 1499, 1507, 1515, 01386 1523, 1531, 1541, 1542, 1552, 1560, 1570, 1578, 1588, 1592, 01387 1600, 1608, 1616, 1624, 1636, 1646, 1658, 1667, 1675, 1683, 01388 1691, 1699, 1712, 1725, 1736, 1744, 1747, 1755, 1763, 1773, 01389 1774, 1775, 1776, 1781, 1792, 1793, 1796, 1804, 1807, 1815, 01390 1815, 1825, 1826, 1827, 1828, 1829, 1830, 1831, 1832, 1833, 01391 1834, 1835, 1836, 1837, 1838, 1839, 1840, 1841, 1842, 1843, 01392 1844, 1845, 1846, 1847, 1848, 1849, 1850, 1851, 1852, 1853, 01393 1856, 1856, 1856, 1857, 1857, 1858, 1858, 1858, 1859, 1859, 01394 1859, 1859, 1860, 1860, 1860, 1860, 1861, 1861, 1861, 1862, 01395 1862, 1862, 1862, 1863, 1863, 1863, 1863, 1864, 1864, 1864, 01396 1864, 1865, 1865, 1865, 1865, 1866, 1866, 1866, 1866, 1867, 01397 1867, 1870, 1879, 1889, 1918, 1949, 1975, 1992, 2009, 2026, 01398 2037, 2048, 2059, 2073, 2087, 2095, 2103, 2111, 2119, 2127, 01399 2135, 2144, 2153, 2161, 2169, 2177, 2185, 2193, 2201, 2209, 01400 2217, 2225, 2233, 2241, 2249, 2257, 2268, 2276, 2284, 2292, 01401 2300, 2308, 2316, 2324, 2324, 2334, 2344, 2350, 2362, 2363, 01402 2367, 2375, 2385, 2395, 2396, 2399, 2400, 2403, 2412, 2420, 01403 2430, 2439, 2448, 2448, 2460, 2470, 2474, 2478, 2484, 2492, 01404 2500, 2514, 2530, 2544, 2559, 2569, 2570, 2571, 2572, 2573, 01405 2574, 2575, 2576, 2577, 2586, 2585, 2610, 2610, 2619, 2627, 01406 2635, 2643, 2656, 2664, 2672, 2680, 2688, 2696, 2696, 2706, 01407 2714, 2722, 2733, 2734, 2745, 2749, 2761, 2773, 2773, 2773, 01408 2784, 2784, 2784, 2795, 2806, 2815, 2817, 2814, 2881, 2880, 01409 2902, 2907, 2901, 2926, 2925, 2947, 2946, 2969, 2970, 2969, 01410 2990, 2998, 3006, 3014, 3024, 3036, 3042, 3048, 3054, 3060, 01411 3066, 3072, 3078, 3084, 3090, 3100, 3106, 3111, 3112, 3119, 01412 3124, 3127, 3128, 3141, 3142, 3152, 3153, 3156, 3164, 3174, 01413 3182, 3192, 3200, 3209, 3218, 3226, 3234, 3243, 3255, 3263, 01414 3273, 3281, 3289, 3297, 3305, 3313, 3322, 3330, 3338, 3346, 01415 3354, 3362, 3370, 3378, 3386, 3396, 3397, 3403, 3412, 3421, 01416 3432, 3433, 3443, 3450, 3459, 3467, 3473, 3476, 3473, 3494, 01417 3502, 3512, 3516, 3523, 3522, 3543, 3559, 3568, 3579, 3588, 01418 3598, 3608, 3616, 3627, 3638, 3646, 3654, 3669, 3668, 3688, 01419 3687, 3708, 3720, 3721, 3724, 3743, 3746, 3754, 3762, 3765, 01420 3769, 3772, 3780, 3783, 3784, 3792, 3795, 3812, 3813, 3814, 01421 3824, 3834, 3861, 3926, 3934, 3941, 3948, 3958, 3966, 3976, 01422 3984, 3991, 3998, 4009, 4016, 4027, 4034, 4045, 4052, 4081, 01423 4083, 4082, 4099, 4105, 4098, 4124, 4132, 4140, 4148, 4151, 01424 4162, 4163, 4164, 4165, 4168, 4198, 4199, 4200, 4208, 4218, 01425 4219, 4220, 4221, 4222, 4223, 4224, 4225, 4226, 4227, 4228, 01426 4229, 4232, 4242, 4252, 4253, 4256, 4265, 4264, 4272, 4284, 01427 4294, 4300, 4308, 4316, 4324, 4332, 4340, 4348, 4356, 4364, 01428 4372, 4380, 4388, 4396, 4404, 4413, 4422, 4431, 4440, 4449, 01429 4460, 4461, 4468, 4477, 4496, 4503, 4516, 4528, 4540, 4548, 01430 4564, 4572, 4588, 4589, 4592, 4605, 4616, 4617, 4620, 4637, 01431 4641, 4651, 4661, 4661, 4690, 4691, 4701, 4708, 4718, 4726, 01432 4736, 4737, 4738, 4741, 4742, 4743, 4744, 4747, 4748, 4749, 01433 4752, 4757, 4764, 4765, 4768, 4769, 4772, 4775, 4778, 4779, 01434 4780, 4783, 4784, 4787, 4788, 4792 01435 }; 01436 #endif 01437 01438 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE 01439 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 01440 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 01441 static const char *const yytname[] = 01442 { 01443 "$end", "error", "$undefined", "keyword_class", "keyword_module", 01444 "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue", 01445 "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless", 01446 "keyword_then", "keyword_elsif", "keyword_else", "keyword_case", 01447 "keyword_when", "keyword_while", "keyword_until", "keyword_for", 01448 "keyword_break", "keyword_next", "keyword_redo", "keyword_retry", 01449 "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block", 01450 "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super", 01451 "keyword_self", "keyword_nil", "keyword_true", "keyword_false", 01452 "keyword_and", "keyword_or", "keyword_not", "modifier_if", 01453 "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue", 01454 "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END", 01455 "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__", 01456 "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL", 01457 "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", 01458 "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ", 01459 "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", 01460 "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", 01461 "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN", 01462 "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA", 01463 "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", 01464 "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG", 01465 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", 01466 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL", 01467 "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias", 01468 "id_core_set_variable_alias", "id_core_undef_method", 01469 "id_core_define_method", "id_core_define_singleton_method", 01470 "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','", 01471 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program", 01472 "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt", 01473 "compstmt", "stmts", "stmt", "$@3", "expr", "expr_value", "command_call", 01474 "block_command", "cmd_brace_block", "@4", "command", "mlhs", 01475 "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post", 01476 "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem", 01477 "undef_list", "$@5", "op", "reswords", "arg", "$@6", "arg_value", 01478 "aref_args", "paren_args", "opt_paren_args", "opt_call_args", 01479 "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args", 01480 "mrhs", "primary", "@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14", 01481 "$@15", "$@16", "@17", "@18", "@19", "@20", "@21", "$@22", "$@23", 01482 "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until", 01483 "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do", 01484 "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs", 01485 "block_param", "opt_block_param", "block_param_def", "opt_bv_decl", 01486 "bv_decls", "bvar", "lambda", "@24", "@25", "f_larglist", "lambda_body", 01487 "do_block", "@26", "block_call", "method_call", "brace_block", "@27", 01488 "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var", 01489 "opt_ensure", "literal", "strings", "string", "string1", "xstring", 01490 "regexp", "words", "word_list", "word", "qwords", "qword_list", 01491 "string_contents", "xstring_contents", "regexp_contents", 01492 "string_content", "@29", "@30", "@31", "string_dvar", "symbol", "sym", 01493 "dsym", "numeric", "variable", "var_ref", "var_lhs", "backref", 01494 "superclass", "$@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg", 01495 "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg", 01496 "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg", 01497 "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", "assoc", 01498 "operation", "operation2", "operation3", "dot_or_colon", "opt_terms", 01499 "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0 01500 }; 01501 #endif 01502 01503 # ifdef YYPRINT 01504 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 01505 token YYLEX-NUM. */ 01506 static const yytype_uint16 yytoknum[] = 01507 { 01508 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 01509 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 01510 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 01511 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 01512 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 01513 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 01514 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 01515 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 01516 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 01517 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 01518 355, 356, 357, 358, 359, 360, 361, 362, 363, 61, 01519 63, 58, 62, 60, 124, 94, 38, 43, 45, 42, 01520 47, 37, 364, 33, 126, 365, 366, 367, 368, 369, 01521 370, 371, 372, 373, 374, 375, 123, 125, 91, 46, 01522 44, 96, 40, 41, 93, 59, 32, 10 01523 }; 01524 # endif 01525 01526 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 01527 static const yytype_uint16 yyr1[] = 01528 { 01529 0, 148, 150, 149, 151, 152, 152, 152, 152, 153, 01530 154, 153, 155, 156, 157, 157, 157, 157, 159, 158, 01531 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 01532 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 01533 158, 158, 158, 160, 160, 160, 160, 160, 160, 161, 01534 162, 162, 163, 163, 163, 165, 164, 166, 166, 166, 01535 166, 166, 166, 166, 166, 166, 166, 166, 167, 167, 01536 168, 168, 169, 169, 169, 169, 169, 169, 169, 169, 01537 169, 169, 170, 170, 171, 171, 172, 172, 173, 173, 01538 173, 173, 173, 173, 173, 173, 174, 174, 174, 174, 01539 174, 174, 174, 174, 175, 175, 176, 176, 176, 177, 01540 177, 177, 177, 177, 178, 178, 179, 179, 180, 181, 01541 180, 182, 182, 182, 182, 182, 182, 182, 182, 182, 01542 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 01543 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 01544 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 01545 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 01546 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 01547 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 01548 183, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01549 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01550 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01551 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01552 184, 184, 184, 185, 184, 184, 184, 186, 187, 187, 01553 187, 187, 188, 189, 189, 190, 190, 191, 191, 191, 01554 191, 191, 193, 192, 194, 195, 195, 195, 196, 196, 01555 196, 196, 197, 197, 197, 198, 198, 198, 198, 198, 01556 198, 198, 198, 198, 199, 198, 200, 198, 198, 198, 01557 198, 198, 198, 198, 198, 198, 198, 201, 198, 198, 01558 198, 198, 198, 198, 198, 198, 198, 202, 203, 198, 01559 204, 205, 198, 198, 198, 206, 207, 198, 208, 198, 01560 209, 210, 198, 211, 198, 212, 198, 213, 214, 198, 01561 198, 198, 198, 198, 215, 216, 217, 218, 219, 220, 01562 221, 222, 223, 224, 225, 226, 227, 227, 227, 228, 01563 228, 229, 229, 230, 230, 231, 231, 232, 232, 233, 01564 233, 234, 234, 234, 234, 234, 234, 234, 234, 234, 01565 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 01566 235, 235, 235, 235, 235, 236, 236, 237, 237, 237, 01567 238, 238, 239, 239, 240, 240, 242, 243, 241, 244, 01568 244, 245, 245, 247, 246, 248, 248, 248, 249, 249, 01569 249, 249, 249, 249, 249, 249, 249, 251, 250, 252, 01570 250, 253, 254, 254, 255, 255, 256, 256, 256, 257, 01571 257, 258, 258, 259, 259, 259, 260, 261, 261, 261, 01572 262, 263, 264, 265, 265, 266, 266, 267, 267, 268, 01573 268, 269, 269, 270, 270, 271, 271, 272, 272, 273, 01574 274, 273, 275, 276, 273, 277, 277, 277, 277, 278, 01575 279, 279, 279, 279, 280, 281, 281, 281, 281, 282, 01576 282, 282, 282, 282, 282, 282, 282, 282, 282, 282, 01577 282, 283, 284, 285, 285, 286, 287, 286, 286, 288, 01578 288, 289, 289, 289, 289, 289, 289, 289, 289, 289, 01579 289, 289, 289, 289, 289, 289, 290, 290, 290, 290, 01580 291, 291, 292, 292, 293, 293, 294, 295, 296, 296, 01581 297, 297, 298, 298, 299, 299, 300, 300, 301, 302, 01582 302, 303, 304, 303, 305, 305, 306, 306, 307, 307, 01583 308, 308, 308, 309, 309, 309, 309, 310, 310, 310, 01584 311, 311, 312, 312, 313, 313, 314, 315, 316, 316, 01585 316, 317, 317, 318, 318, 319 01586 }; 01587 01588 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 01589 static const yytype_uint8 yyr2[] = 01590 { 01591 0, 2, 0, 2, 2, 1, 1, 3, 2, 1, 01592 0, 5, 4, 2, 1, 1, 3, 2, 0, 4, 01593 3, 3, 3, 2, 3, 3, 3, 3, 3, 4, 01594 3, 3, 3, 6, 5, 5, 5, 5, 3, 3, 01595 3, 3, 1, 1, 3, 3, 3, 2, 1, 1, 01596 1, 1, 1, 4, 4, 0, 5, 2, 3, 4, 01597 5, 4, 5, 2, 2, 2, 2, 2, 1, 3, 01598 1, 3, 1, 2, 3, 5, 2, 4, 2, 4, 01599 1, 3, 1, 3, 2, 3, 1, 3, 1, 4, 01600 3, 3, 3, 3, 2, 1, 1, 4, 3, 3, 01601 3, 3, 2, 1, 1, 1, 2, 1, 3, 1, 01602 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 01603 4, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01604 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01605 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01606 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01607 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01608 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01609 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01610 1, 3, 5, 3, 5, 6, 5, 5, 5, 5, 01611 4, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01612 4, 4, 2, 2, 3, 3, 3, 3, 3, 3, 01613 3, 3, 3, 3, 3, 3, 3, 2, 2, 3, 01614 3, 3, 3, 0, 4, 6, 1, 1, 1, 2, 01615 4, 2, 3, 1, 1, 1, 1, 1, 2, 2, 01616 4, 1, 0, 2, 2, 2, 1, 1, 1, 2, 01617 3, 4, 3, 4, 2, 1, 1, 1, 1, 1, 01618 1, 1, 1, 1, 0, 4, 0, 4, 3, 3, 01619 2, 3, 3, 1, 4, 3, 1, 0, 6, 4, 01620 3, 2, 1, 2, 2, 6, 6, 0, 0, 7, 01621 0, 0, 7, 5, 4, 0, 0, 9, 0, 6, 01622 0, 0, 8, 0, 5, 0, 6, 0, 0, 9, 01623 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01624 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 01625 1, 1, 5, 1, 2, 1, 1, 1, 3, 1, 01626 3, 1, 4, 6, 3, 5, 2, 4, 1, 3, 01627 6, 8, 4, 6, 4, 2, 6, 2, 4, 6, 01628 2, 4, 2, 4, 1, 1, 1, 3, 1, 4, 01629 1, 2, 1, 3, 1, 1, 0, 0, 4, 4, 01630 1, 3, 3, 0, 5, 2, 4, 4, 2, 4, 01631 4, 3, 3, 3, 2, 1, 4, 0, 5, 0, 01632 5, 5, 1, 1, 6, 1, 1, 1, 1, 2, 01633 1, 2, 1, 1, 1, 1, 1, 1, 1, 2, 01634 3, 3, 3, 3, 3, 0, 3, 1, 2, 3, 01635 3, 0, 3, 0, 2, 0, 2, 0, 2, 1, 01636 0, 3, 0, 0, 5, 1, 1, 1, 1, 2, 01637 1, 1, 1, 1, 3, 1, 1, 2, 2, 1, 01638 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01639 1, 1, 1, 1, 1, 1, 0, 4, 2, 3, 01640 2, 6, 8, 4, 6, 4, 6, 2, 4, 6, 01641 2, 4, 2, 4, 1, 0, 1, 1, 1, 1, 01642 1, 1, 1, 3, 1, 3, 3, 3, 1, 3, 01643 1, 3, 1, 1, 2, 1, 1, 1, 2, 2, 01644 1, 1, 0, 4, 1, 2, 1, 3, 3, 2, 01645 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01646 1, 1, 0, 1, 0, 1, 2, 2, 0, 1, 01647 1, 1, 1, 1, 2, 0 01648 }; 01649 01650 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state 01651 STATE-NUM when YYTABLE doesn't specify something else to do. Zero 01652 means the default is an error. */ 01653 static const yytype_uint16 yydefact[] = 01654 { 01655 2, 0, 0, 1, 0, 332, 333, 334, 0, 325, 01656 326, 327, 330, 328, 329, 331, 320, 321, 322, 323, 01657 283, 252, 252, 475, 474, 476, 477, 554, 0, 554, 01658 10, 0, 479, 478, 480, 469, 542, 471, 470, 472, 01659 473, 465, 466, 427, 483, 484, 0, 0, 0, 0, 01660 0, 565, 565, 80, 386, 445, 443, 445, 447, 435, 01661 441, 0, 0, 0, 3, 552, 6, 9, 42, 43, 01662 51, 50, 0, 68, 0, 72, 82, 0, 48, 236, 01663 0, 274, 0, 0, 297, 300, 552, 0, 0, 0, 01664 0, 52, 292, 265, 266, 426, 428, 267, 268, 269, 01665 270, 424, 425, 423, 481, 271, 0, 272, 252, 5, 01666 8, 160, 171, 161, 184, 157, 177, 167, 166, 187, 01667 188, 182, 165, 164, 159, 185, 189, 190, 169, 158, 01668 172, 176, 178, 170, 163, 179, 186, 181, 180, 173, 01669 183, 168, 156, 175, 174, 155, 162, 153, 154, 150, 01670 151, 152, 109, 111, 110, 145, 146, 142, 124, 125, 01671 126, 133, 130, 132, 127, 128, 147, 148, 134, 135, 01672 139, 129, 131, 121, 122, 123, 136, 137, 138, 140, 01673 141, 143, 144, 149, 114, 116, 118, 23, 112, 113, 01674 115, 117, 0, 0, 0, 0, 0, 0, 0, 247, 01675 0, 237, 258, 66, 251, 565, 0, 481, 0, 272, 01676 565, 536, 67, 65, 554, 64, 0, 565, 404, 63, 01677 554, 555, 0, 0, 18, 233, 0, 0, 320, 321, 01678 283, 286, 405, 212, 0, 0, 213, 280, 0, 0, 01679 0, 552, 15, 554, 70, 14, 276, 0, 558, 558, 01680 238, 0, 0, 558, 534, 554, 0, 0, 0, 78, 01681 324, 0, 88, 95, 294, 387, 462, 461, 463, 460, 01682 0, 459, 0, 0, 0, 0, 0, 0, 0, 467, 01683 468, 47, 227, 228, 561, 562, 4, 563, 553, 0, 01684 0, 0, 0, 0, 0, 0, 393, 395, 0, 84, 01685 0, 76, 73, 0, 0, 0, 0, 0, 0, 0, 01686 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01687 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01688 0, 565, 0, 0, 49, 0, 0, 0, 0, 552, 01689 0, 553, 0, 346, 345, 0, 0, 481, 272, 104, 01690 105, 0, 0, 107, 0, 0, 481, 272, 313, 180, 01691 173, 183, 168, 150, 151, 152, 109, 110, 532, 315, 01692 531, 0, 0, 0, 409, 407, 293, 429, 0, 0, 01693 398, 57, 291, 119, 539, 280, 259, 254, 0, 0, 01694 256, 248, 257, 0, 565, 0, 0, 0, 256, 249, 01695 554, 0, 285, 253, 554, 246, 245, 554, 290, 46, 01696 20, 22, 21, 0, 287, 0, 0, 0, 0, 0, 01697 0, 17, 554, 278, 13, 553, 69, 554, 281, 560, 01698 559, 239, 560, 241, 282, 535, 0, 94, 467, 468, 01699 86, 81, 0, 0, 565, 0, 505, 449, 452, 450, 01700 464, 446, 430, 444, 431, 432, 448, 433, 434, 0, 01701 437, 439, 0, 440, 0, 0, 564, 7, 24, 25, 01702 26, 27, 28, 44, 45, 565, 0, 31, 40, 0, 01703 41, 554, 0, 74, 85, 30, 191, 258, 39, 209, 01704 217, 222, 223, 224, 219, 221, 231, 232, 225, 226, 01705 202, 203, 229, 230, 554, 218, 220, 214, 215, 216, 01706 204, 205, 206, 207, 208, 543, 548, 544, 549, 403, 01707 252, 401, 554, 543, 545, 544, 546, 402, 252, 0, 01708 565, 337, 0, 336, 0, 0, 0, 0, 0, 0, 01709 280, 0, 565, 0, 305, 310, 104, 105, 106, 0, 01710 486, 308, 485, 0, 565, 0, 0, 0, 505, 551, 01711 550, 317, 543, 544, 252, 252, 565, 565, 32, 193, 01712 38, 201, 55, 58, 0, 191, 538, 0, 260, 255, 01713 565, 547, 544, 554, 543, 544, 537, 284, 556, 242, 01714 289, 19, 0, 234, 0, 29, 0, 565, 200, 71, 01715 16, 277, 558, 0, 79, 91, 93, 554, 543, 544, 01716 511, 508, 507, 506, 509, 0, 523, 527, 526, 522, 01717 505, 0, 390, 510, 512, 514, 565, 520, 565, 525, 01718 565, 0, 504, 453, 0, 436, 438, 442, 210, 211, 01719 378, 565, 0, 376, 375, 264, 0, 83, 77, 0, 01720 0, 0, 0, 0, 400, 61, 0, 406, 0, 0, 01721 244, 399, 59, 243, 335, 275, 565, 565, 415, 565, 01722 338, 565, 340, 298, 339, 301, 0, 0, 304, 547, 01723 279, 554, 543, 544, 0, 0, 488, 0, 0, 104, 01724 105, 108, 554, 0, 554, 505, 0, 0, 0, 397, 01725 54, 396, 53, 0, 0, 0, 565, 120, 261, 250, 01726 0, 0, 406, 0, 0, 554, 11, 240, 87, 89, 01727 0, 511, 0, 358, 349, 351, 554, 347, 565, 0, 01728 0, 388, 0, 497, 530, 0, 500, 524, 0, 502, 01729 528, 0, 455, 456, 457, 451, 458, 511, 0, 565, 01730 0, 565, 518, 565, 565, 374, 380, 0, 0, 262, 01731 75, 192, 0, 37, 198, 36, 199, 62, 557, 0, 01732 34, 196, 35, 197, 60, 416, 417, 565, 418, 0, 01733 565, 343, 0, 0, 341, 0, 0, 0, 303, 0, 01734 0, 406, 0, 311, 0, 0, 406, 314, 533, 554, 01735 0, 490, 318, 0, 0, 194, 0, 0, 288, 516, 01736 554, 0, 356, 0, 513, 554, 0, 0, 515, 565, 01737 565, 529, 565, 521, 565, 565, 0, 0, 384, 381, 01738 382, 385, 0, 377, 365, 367, 0, 370, 0, 372, 01739 394, 263, 235, 33, 195, 0, 0, 420, 344, 0, 01740 12, 422, 0, 295, 296, 0, 0, 260, 565, 306, 01741 0, 487, 309, 489, 316, 505, 410, 408, 0, 348, 01742 359, 0, 354, 350, 389, 392, 391, 0, 493, 0, 01743 495, 0, 501, 0, 498, 503, 454, 0, 517, 0, 01744 379, 565, 565, 565, 519, 565, 565, 0, 419, 0, 01745 96, 103, 0, 421, 0, 299, 302, 412, 413, 411, 01746 0, 0, 0, 56, 0, 357, 0, 352, 565, 565, 01747 565, 565, 280, 0, 383, 0, 362, 0, 364, 371, 01748 0, 368, 373, 102, 0, 565, 0, 565, 565, 0, 01749 312, 0, 355, 0, 494, 0, 491, 496, 499, 547, 01750 279, 565, 565, 565, 565, 547, 101, 554, 543, 544, 01751 414, 342, 307, 319, 353, 565, 363, 0, 360, 366, 01752 369, 406, 492, 565, 361 01753 }; 01754 01755 /* YYDEFGOTO[NTERM-NUM]. */ 01756 static const yytype_int16 yydefgoto[] = 01757 { 01758 -1, 1, 2, 64, 65, 66, 226, 529, 530, 241, 01759 242, 413, 68, 335, 69, 70, 573, 706, 71, 72, 01760 243, 73, 74, 75, 441, 76, 200, 353, 354, 184, 01761 185, 186, 187, 574, 526, 189, 78, 415, 202, 247, 01762 519, 661, 404, 405, 215, 216, 204, 391, 205, 480, 01763 79, 333, 427, 592, 337, 786, 338, 787, 684, 910, 01764 688, 685, 860, 556, 558, 698, 865, 234, 81, 82, 01765 83, 84, 85, 86, 87, 88, 89, 90, 665, 532, 01766 673, 783, 784, 346, 724, 725, 726, 749, 642, 643, 01767 750, 829, 830, 264, 265, 446, 621, 731, 297, 475, 01768 91, 92, 382, 567, 566, 539, 909, 667, 777, 846, 01769 850, 93, 94, 95, 96, 97, 98, 99, 276, 459, 01770 100, 278, 272, 270, 274, 451, 634, 633, 741, 745, 01771 101, 271, 102, 103, 207, 105, 208, 209, 551, 687, 01772 696, 697, 623, 624, 625, 626, 627, 752, 753, 628, 01773 629, 630, 631, 821, 733, 371, 557, 252, 210, 211, 01774 108, 596, 521, 561, 286, 401, 402, 657, 431, 533, 01775 341, 245 01776 }; 01777 01778 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 01779 STATE-NUM. */ 01780 #define YYPACT_NINF -778 01781 static const yytype_int16 yypact[] = 01782 { 01783 -778, 133, 2394, -778, 7010, -778, -778, -778, 6523, -778, 01784 -778, -778, -778, -778, -778, -778, 7228, 7228, -778, -778, 01785 7228, 3145, 2722, -778, -778, -778, -778, 164, 6384, -11, 01786 -778, 69, -778, -778, -778, 5623, 2863, -778, -778, 5750, 01787 -778, -778, -778, -778, -778, -778, 8427, 8427, 96, 4342, 01788 8536, 7446, 7773, 6786, -778, 6245, -778, -778, -778, 74, 01789 93, 122, 8645, 8427, -778, 187, -778, 698, 288, -778, 01790 -778, 230, 167, -778, 180, 8754, -778, 234, 2846, 273, 01791 310, -778, 8536, 8536, -778, -778, 4986, 8859, 8964, 9069, 01792 5496, 16, 60, -778, -778, 174, -778, -778, -778, -778, 01793 -778, -778, -778, -778, 201, -778, 258, 282, 206, -778, 01794 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, 01795 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, 01796 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, 01797 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, 01798 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, 01799 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, 01800 -778, -778, -778, -778, -778, -778, -778, -778, -778, -778, 01801 -778, -778, -778, -778, -778, -778, -778, 212, -778, -778, 01802 -778, -778, 215, 8427, 303, 4472, 8427, 8427, 8427, -778, 01803 257, 2846, 285, -778, -778, 281, 343, 38, 337, 263, 01804 290, -778, -778, -778, 4877, -778, 7228, 7228, -778, -778, 01805 5116, -778, 8536, 599, -778, 296, 315, 4602, -778, -778, 01806 -778, 311, 328, -778, 347, 206, 396, 446, 7119, 4342, 01807 329, 187, 698, -11, 370, -778, 288, 339, -30, 30, 01808 -778, 285, 356, 30, -778, -11, 442, 375, 9174, 390, 01809 -778, 351, 373, 383, -778, -778, -778, -778, -778, -778, 01810 515, -778, 552, 587, 620, 397, 607, 407, 34, 473, 01811 474, -778, -778, -778, -778, -778, -778, -778, 5225, 8536, 01812 8536, 8536, 8536, 7119, 8536, 8536, -778, -778, 7882, -778, 01813 4342, 6898, 413, 7882, 8427, 8427, 8427, 8427, 8427, 8427, 01814 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 01815 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 8427, 01816 1712, 7228, 2060, 3517, 288, 80, 80, 8536, 8536, 187, 01817 534, 416, 516, -778, -778, 386, 568, 50, 72, 301, 01818 321, 8536, 363, -778, 66, 393, -778, -778, -778, 36, 01819 41, 103, 224, 259, 266, 322, 348, 369, -778, -778, 01820 -778, 377, 10211, 10211, -778, -778, -778, -778, 8645, 8645, 01821 -778, 483, -778, -778, -778, 268, -778, -778, 8427, 8427, 01822 7337, -778, -778, 2216, 7228, 9441, 8427, 8427, 7555, -778, 01823 -11, 454, -778, -778, -11, -778, -778, 70, -778, -778, 01824 -778, -778, -778, 6523, -778, 8427, 3937, 463, 2216, 9441, 01825 8427, 698, -11, -778, -778, 5353, 462, -11, -778, 7664, 01826 -778, -778, 7773, -778, -778, -778, 296, 411, -778, -778, 01827 -778, 467, 9174, 9518, 7228, 9595, 1033, -778, -778, -778, 01828 -778, -778, -778, -778, -778, -778, -778, -778, -778, 39, 01829 -778, -778, 472, -778, 8427, 8427, -778, -778, -778, -778, 01830 -778, -778, -778, -778, -778, 28, 8427, -778, 468, 487, 01831 -778, -11, 9174, 496, -778, -778, 1576, -778, -778, 396, 01832 1512, 1512, 1512, 1512, 1223, 1223, 1879, 2079, 1512, 1512, 01833 2146, 2146, 582, 582, 2705, 1223, 1223, 1098, 1098, 790, 01834 514, 514, 396, 396, 396, 3286, 5991, 3372, 6105, -778, 01835 328, -778, -11, 448, -778, 451, -778, -778, 3004, 639, 01836 644, -778, 3662, 646, 4082, 42, 42, 534, 7991, 639, 01837 109, 9672, 7228, 9749, -778, 288, -778, 411, -778, 187, 01838 -778, -778, -778, 9826, 7228, 9903, 3517, 8536, 1115, -778, 01839 -778, -778, -778, -778, 1235, 1235, 28, 28, -778, 10270, 01840 -778, 2846, -778, -778, 6523, 10289, -778, 8427, 285, -778, 01841 290, 5877, 2581, -11, 410, 529, -778, -778, -778, -778, 01842 -778, -778, 8536, 2846, 535, -778, 328, 328, 2846, 20, 01843 698, -778, 30, 9174, 467, 338, 271, -11, 228, 261, 01844 557, -778, -778, -778, -778, 666, -778, -778, -778, -778, 01845 923, 43, -778, -778, -778, -778, 543, -778, 544, 623, 01846 547, 642, -778, -778, 722, -778, -778, -778, 396, 396, 01847 -778, 904, 4747, -778, -778, 555, 8100, -778, 467, 9174, 01848 8427, 598, 8645, 8645, -778, 483, 570, 538, 8645, 8645, 01849 -778, -778, 483, -778, -778, -778, 8209, 701, -778, 441, 01850 -778, 701, -778, -778, -778, -778, 639, 31, -778, 110, 01851 132, -11, 126, 144, 8536, 187, -778, 8536, 3517, 338, 01852 271, -778, -11, 639, 70, 923, 3517, 187, 6662, -778, 01853 -778, -778, -778, 4747, 4602, 8427, 28, -778, -778, -778, 01854 8427, 8427, 536, 8427, 8427, 70, -778, -778, -778, 251, 01855 8427, -778, 666, 450, -778, 579, -11, -778, 583, 4747, 01856 4602, -778, 923, -778, -778, 923, -778, -778, 779, -778, 01857 -778, 4602, -778, -778, -778, -778, -778, 625, 809, 583, 01858 615, 595, -778, 604, 605, -778, -778, 740, 8427, 619, 01859 467, 2846, 8427, -778, 2846, -778, 2846, -778, -778, 8645, 01860 -778, 2846, -778, 2846, -778, 468, -778, 675, -778, 4212, 01861 757, -778, 8536, 639, -778, 639, 4747, 4747, -778, 8318, 01862 3807, 147, 42, -778, 187, 639, -778, -778, -778, -11, 01863 639, -778, -778, 759, 630, 2846, 4602, 8427, -778, -778, 01864 -11, 845, 632, 826, -778, -11, 760, 637, -778, 640, 01865 643, -778, 647, -778, 651, 647, 656, 9279, -778, 657, 01866 -778, -778, 682, -778, 1199, -778, 1199, -778, 779, -778, 01867 -778, 658, 2846, -778, 2846, 9384, 80, -778, -778, 4747, 01868 -778, -778, 80, -778, -778, 639, 639, -778, 115, -778, 01869 3517, -778, -778, -778, -778, 1115, -778, -778, 664, -778, 01870 662, 845, 491, -778, -778, -778, -778, 923, -778, 779, 01871 -778, 779, -778, 779, -778, -778, -778, 751, 429, 809, 01872 -778, 672, 673, 647, -778, 679, 647, 765, -778, 432, 01873 373, 383, 3517, -778, 3662, -778, -778, -778, -778, -778, 01874 4747, 639, 3517, -778, 845, 662, 845, 685, 647, 686, 01875 647, 647, -778, 9980, -778, 1199, -778, 779, -778, -778, 01876 779, -778, -778, 411, 10057, 7228, 10134, 644, 441, 639, 01877 -778, 639, 662, 845, -778, 779, -778, -778, -778, 688, 01878 690, 647, 687, 647, 647, 81, 271, -11, 86, 118, 01879 -778, -778, -778, -778, 662, 647, -778, 779, -778, -778, 01880 -778, 124, -778, 647, -778 01881 }; 01882 01883 /* YYPGOTO[NTERM-NUM]. */ 01884 static const yytype_int16 yypgoto[] = 01885 { 01886 -778, -778, -778, 399, -778, 33, -778, -530, -33, -778, 01887 159, -778, 23, -55, 21, -778, -462, -778, -15, 741, 01888 -136, -1, -66, -778, -403, -26, 1181, -306, 750, -52, 01889 -778, -20, -778, -778, 32, -778, 748, -778, 540, -778, 01890 46, -98, -298, 54, 76, -778, -278, -196, -44, -283, 01891 27, -778, -778, -778, -778, -778, -778, -778, -778, -778, 01892 -778, -778, -778, -778, -778, -778, -778, 2, -778, -778, 01893 -778, -778, -778, -778, -778, -778, -778, -778, 298, -323, 01894 -512, -97, -610, -778, -755, -748, 120, -778, -485, -778, 01895 -636, -778, -49, -778, -778, -778, -778, -778, -778, -778, 01896 -778, -778, 752, -778, -778, -520, -778, -92, -778, -778, 01897 -778, -778, -778, -778, 753, -778, -778, -778, -778, -778, 01898 -778, -778, -778, 792, -778, -229, -778, -778, -778, -778, 01899 7, -778, 13, -778, 1031, 762, 1198, 1109, -778, -778, 01900 -12, -416, -706, -549, -667, -121, -679, -777, 25, 128, 01901 -778, -579, -778, -434, 531, -778, -778, -778, -41, -287, 01902 1927, -254, -778, -778, -32, -4, 88, -554, -217, 63, 01903 -31, -2 01904 }; 01905 01906 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 01907 positive, shift that token. If negative, reduce the rule which 01908 number is the opposite. If zero, do what YYDEFACT says. 01909 If YYTABLE_NINF, syntax error. */ 01910 #define YYTABLE_NINF -566 01911 static const yytype_int16 yytable[] = 01912 { 01913 109, 199, 199, 269, 80, 199, 80, 248, 224, 302, 01914 249, 253, 632, 534, 399, 190, 240, 676, 206, 206, 01915 488, 191, 206, 222, 675, 225, 693, 259, 336, 712, 01916 622, 339, 433, 522, 288, 190, 435, 110, 369, 604, 01917 188, 191, 831, 453, 531, 456, 548, 460, 244, 250, 01918 254, 80, 206, 719, 340, 261, 823, 780, 873, 894, 01919 188, 785, 754, 870, 206, 818, 727, 549, 218, 672, 01920 203, 212, 729, 246, 213, -96, 520, 261, 528, 648, 01921 260, 703, 704, 281, 206, 206, 374, 188, 206, 345, 01922 355, 355, 815, 531, -99, 462, 583, -103, 219, -98, 01923 447, 372, 260, 422, 640, 334, 334, 294, 295, 334, 01924 429, 586, 579, 832, 260, 260, 260, 430, 564, 565, 01925 579, -475, 188, 915, 632, -482, -474, 791, 287, -69, 01926 779, -100, 538, 3, -102, -99, 221, -97, 796, 520, 01927 463, 528, 641, 448, 449, 586, 607, -96, 894, 287, 01928 730, -98, 237, 820, 380, 373, 824, -101, 795, 873, 01929 -83, 67, 240, 67, 481, 597, 800, 818, 942, -100, 01930 432, 789, -97, 727, 812, -475, 284, 430, 285, 550, 01931 -474, 279, 280, 831, 381, 635, 632, 284, -476, 285, 01932 -88, 597, 440, 767, 417, 964, 375, 80, 823, 199, 01933 774, 199, 199, 392, 728, 227, 240, 755, 392, 424, 01934 425, 284, -95, 285, 818, 406, 206, 221, 206, 206, 01935 275, 806, 206, -543, 206, 284, -99, 285, -99, 80, 01936 636, -98, 374, -98, 468, 469, 470, 471, 244, 277, 01937 80, 80, -476, 407, 681, 409, 760, 691, 907, -94, 01938 -91, 436, -543, -90, 479, 892, 692, 895, 296, 479, 01939 261, 632, 727, -100, 727, -100, -90, 240, 400, -97, 01940 403, -97, -93, 56, -544, 483, 298, -406, 218, 799, 01941 859, 380, 535, 536, -92, 260, -92, -89, -482, 597, 01942 80, 206, 206, 206, 206, 80, 206, 206, 919, 244, 01943 206, 597, 80, 261, 287, 206, 220, 537, 408, -477, 01944 -96, 221, 334, 334, 334, 334, 199, 473, 474, 477, 01945 299, 467, 727, 917, 485, 294, 295, -540, 260, 406, 01946 911, 426, 284, 206, 285, 80, -406, -90, 908, 206, 01947 206, -88, 375, 303, -479, 378, 952, -541, 217, 580, 01948 397, -478, 383, 206, 790, 420, -279, 220, -324, 385, 01949 334, 334, 518, -477, -547, 727, 388, 727, -90, 379, 01950 -92, -90, -103, 389, 545, -90, 440, -102, 527, 199, 01951 206, 206, 941, 776, 709, 717, -469, -406, 602, -406, 01952 -406, -103, 406, 591, 727, 330, 206, 421, -479, 568, 01953 570, -92, 287, 971, -92, -478, -472, -480, -92, -279, 01954 -279, -324, -324, -544, 109, 546, 440, 552, 80, 547, 01955 190, 390, -95, -547, 396, 518, 191, 80, 393, 199, 01956 398, 632, 418, -469, 438, 439, 443, -540, 414, -469, 01957 -469, 527, 406, -540, 261, 188, 206, 67, 331, 332, 01958 518, 416, 472, 214, -472, 782, 779, -541, -481, -472, 01959 -472, -480, 559, -541, 304, 527, 699, 701, -272, 260, 01960 217, 541, 423, 644, -547, 518, -547, -547, 553, -68, 01961 -543, 394, 395, 428, 261, 394, 419, -469, 587, 444, 01962 445, 527, 589, 434, 677, 590, -280, 713, 437, 669, 01963 651, 671, 721, 457, 611, 612, 613, 614, -472, 260, 01964 599, -481, -481, 461, 923, 601, 560, 934, 656, -98, 01965 751, -272, -272, 902, 542, 543, 663, 199, 668, 904, 01966 442, 554, 555, 420, 80, 658, 80, 718, 659, 199, 01967 406, 464, 465, 721, 206, 611, 612, 613, 614, -280, 01968 -280, 538, 406, 484, 707, -102, 206, -98, 80, 206, 01969 -100, 466, 663, 663, 644, 644, 654, 554, 555, 647, 01970 935, 936, 540, 518, 660, 67, 447, 572, 392, 656, 01971 694, 190, 304, 440, 600, 518, -94, 191, -90, 527, 01972 811, -92, 251, 544, 206, 663, 655, 588, 674, 674, 01973 595, 527, -83, 656, 662, 261, 188, 603, -258, 757, 01974 660, 660, 686, 447, 822, 715, 714, 825, 637, 448, 01975 449, 450, 479, 807, 734, 769, 734, 646, 734, 792, 01976 260, 916, 794, 327, 328, 329, 649, 957, -100, 756, 01977 700, 702, 654, 660, 80, -97, 802, -97, 447, 664, 01978 304, 261, 666, 410, 206, 206, 448, 449, 452, 670, 01979 206, 206, 411, 412, 778, 781, 720, 781, 447, 781, 01980 803, 804, 716, 763, 765, 737, 260, 656, -89, 770, 01981 772, 447, 597, 732, 735, 455, 206, 738, 656, 206, 01982 80, 448, 449, 454, 740, -259, 816, 817, 80, 325, 01983 326, 327, 328, 329, 644, 80, 80, 334, 826, 762, 01984 334, 448, 449, 458, 768, 893, 779, 896, 721, 813, 01985 611, 612, 613, 614, 448, 449, 756, 852, 748, 833, 01986 188, 80, 80, 384, 827, 834, 386, 387, 289, 290, 01987 291, 292, 293, 80, 836, 838, 848, 756, 793, 734, 01988 840, 734, 734, 855, 856, 722, 918, 858, 920, -260, 01989 801, 723, 921, 845, 201, 201, 849, 867, 201, 866, 01990 875, 206, 871, 868, 876, 847, 742, 743, 851, 744, 01991 877, 80, 798, 879, 206, 44, 45, 881, 80, 80, 01992 843, 883, 80, 886, 233, 236, 890, 889, -261, 201, 01993 201, 913, 914, 808, 951, 334, 953, 922, 80, 954, 01994 282, 283, 925, 927, 814, 594, 903, 734, 734, 930, 01995 734, 933, 734, 734, 965, 943, 945, 967, 343, 888, 01996 -543, 721, -544, 611, 612, 613, 614, 678, 478, 358, 01997 924, 961, 810, 487, 376, 960, 973, 899, 377, 273, 01998 0, 80, 370, 912, 260, 674, 781, 861, 304, 891, 01999 819, 828, 80, 611, 612, 613, 614, 0, 615, 937, 02000 0, 938, 260, 317, 318, 617, 0, 939, 721, 0, 02001 611, 612, 613, 614, 0, 0, 0, 863, 0, 734, 02002 734, 734, 0, 734, 734, 618, 0, 721, 869, 611, 02003 612, 613, 614, 874, 80, 0, 80, 325, 326, 327, 02004 328, 329, 80, 0, 80, 722, 734, 734, 734, 734, 02005 199, 872, 0, 0, 0, 0, 0, 0, 0, 576, 02006 578, 0, 0, 406, 722, 668, 781, 206, 251, 0, 02007 0, 201, 0, 0, 201, 201, 282, 0, 0, 734, 02008 734, 734, 734, 656, 0, 518, 747, 0, 611, 612, 02009 613, 614, 201, 734, 201, 201, 518, 0, 0, 578, 02010 0, 734, 251, 0, 788, 610, 0, 611, 612, 613, 02011 614, 0, 527, 0, 0, 0, 0, 0, 0, 0, 02012 0, 797, 0, 615, 0, 0, 0, 0, 0, 616, 02013 617, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02014 0, 0, 615, 0, 0, 0, 645, 0, 616, 617, 02015 618, 0, 0, 619, 0, 0, 0, 0, 0, 0, 02016 0, 0, 0, 104, 0, 104, 0, 0, 0, 618, 02017 0, 0, 619, 0, 0, 0, 201, 0, 0, 748, 02018 0, 486, 489, 490, 491, 492, 493, 494, 495, 496, 02019 497, 498, 499, 500, 501, 502, 503, 504, 505, 506, 02020 507, 508, 509, 510, 511, 512, 513, 514, 487, 201, 02021 104, 853, 0, 854, 262, 610, 0, 611, 612, 613, 02022 614, 0, 0, 862, 0, 0, 0, 0, 864, 0, 02023 0, 0, 0, 0, 0, 0, 262, 0, 0, 0, 02024 0, 107, 0, 107, 0, 0, 0, 708, 347, 356, 02025 356, 356, 615, 0, 0, 0, 569, 571, 616, 617, 02026 0, 0, 0, 0, 0, 0, 575, 201, 201, 0, 02027 0, 0, 201, 0, 569, 571, 201, 0, 0, 618, 02028 0, 0, 619, 905, 906, 0, 0, 0, 107, 736, 02029 0, 739, 263, 593, 0, 0, 304, 610, 598, 611, 02030 612, 613, 614, 0, 0, 620, 0, 201, 0, 0, 02031 201, 317, 318, 77, 263, 77, 759, 0, 0, 0, 02032 0, 0, 201, 0, 0, 0, 348, 357, 357, 0, 02033 106, 0, 106, 0, 615, 0, 775, 0, 0, 940, 02034 616, 617, 638, 639, 324, 325, 326, 327, 328, 329, 02035 0, 0, 0, 0, 201, 0, 104, 0, 0, 0, 02036 77, 618, 0, 0, 619, -565, 0, 962, 0, 963, 02037 0, 0, 0, -565, -565, -565, 0, 106, -565, -565, 02038 -565, 747, -565, 611, 612, 613, 614, 695, 104, 0, 02039 809, 0, -565, 0, 0, 0, 0, 0, 344, 104, 02040 104, 0, -565, -565, 0, -565, -565, -565, -565, -565, 02041 0, 0, 835, 0, 837, 839, 201, 0, 615, 262, 02042 201, 304, 0, 0, 616, 617, 0, 0, 841, 0, 02043 0, 0, 201, 0, 107, 0, 317, 318, 0, 0, 02044 0, 0, 0, 0, 0, 618, 0, 0, 619, 104, 02045 -565, 0, 0, 0, 104, 201, 0, 0, 0, 857, 02046 0, 104, 262, 0, 0, 0, 107, 322, 323, 324, 02047 325, 326, 327, 328, 329, 0, 0, 107, 107, 0, 02048 878, 880, 0, 882, 0, 884, 885, 0, 0, 0, 02049 0, 0, 0, 0, 104, 0, 0, 263, 0, 0, 02050 0, 0, -565, 0, -565, 0, 77, 217, -565, 0, 02051 -565, 0, -565, 0, 0, 0, 0, 0, 0, 0, 02052 0, 0, 0, 106, 201, 0, 0, 107, 761, 0, 02053 764, 766, 107, 0, 0, 0, 771, 773, 77, 107, 02054 263, 0, 0, 0, 201, 0, 0, 0, 0, 77, 02055 77, 0, 926, 928, 929, 106, 931, 932, 0, 0, 02056 0, 0, 0, 0, 0, 0, 106, 106, 0, 0, 02057 0, 0, 107, 0, 0, 0, 0, 104, 0, 944, 02058 946, 947, 948, 805, 0, 0, 104, 0, 764, 766, 02059 0, 771, 773, 0, 0, 0, 0, 0, 201, 77, 02060 0, 0, 0, 262, 77, 0, 0, 0, 0, 0, 02061 0, 77, 966, 968, 969, 970, 106, 0, 0, 0, 02062 0, 106, 0, 0, 0, 0, 972, 0, 106, 0, 02063 0, 0, 0, 0, 974, 0, 201, 0, 0, 0, 02064 842, 0, 0, 262, 77, 0, 0, 844, 0, 0, 02065 0, 0, 0, 0, 0, 107, 0, 0, 0, 0, 02066 0, 106, 0, 0, 107, 0, 0, 201, 0, 0, 02067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02068 0, 263, 0, 0, 0, 844, 0, 0, 0, 0, 02069 0, 0, 0, 104, 0, 104, 0, 0, 0, 0, 02070 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02071 304, -566, -566, -566, -566, 309, 310, 104, 0, -566, 02072 -566, 263, 0, 0, 0, 317, 318, 77, 0, 0, 02073 0, 0, 0, 0, 0, 0, 77, 0, 0, 0, 02074 0, 0, 0, 0, 106, 0, 0, 0, 0, 0, 02075 650, 0, 0, 106, 320, 321, 322, 323, 324, 325, 02076 326, 327, 328, 329, 262, 0, 0, 0, 0, 0, 02077 0, 107, 0, 107, 304, 305, 306, 307, 308, 309, 02078 310, 311, 312, 313, 314, 315, 316, 0, 0, 317, 02079 318, 0, 0, 0, 0, 107, 0, 0, 0, 0, 02080 0, 0, 0, 104, 0, 0, 0, 0, 0, 0, 02081 262, 0, 0, 201, 0, 0, 319, 0, 320, 321, 02082 322, 323, 324, 325, 326, 327, 328, 329, 0, 0, 02083 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02084 0, 0, 263, 77, 0, 77, -237, 0, 0, 104, 02085 0, 0, 0, 0, 0, 0, 0, 104, 0, 0, 02086 106, 0, 106, 0, 104, 104, 0, 77, 0, 0, 02087 0, 0, 0, 746, 0, 0, 0, 0, 0, 0, 02088 0, 107, 0, 0, 106, 0, 0, 0, 263, 0, 02089 104, 104, 0, 0, 515, 516, 0, 0, 517, 0, 02090 0, 0, 104, 0, 0, 0, 0, 0, 155, 156, 02091 157, 158, 159, 160, 161, 162, 163, 0, 0, 164, 02092 165, 0, 0, 166, 167, 168, 169, 107, 0, 0, 02093 0, 0, 0, 0, 0, 107, 0, 170, 0, 0, 02094 104, 0, 107, 107, 0, 0, 0, 104, 104, 0, 02095 0, 104, 0, 77, 171, 172, 173, 174, 175, 176, 02096 177, 178, 179, 180, 0, 181, 182, 104, 107, 107, 02097 106, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02098 107, 0, 0, 183, 217, 0, 0, 0, 356, 0, 02099 0, 0, 0, 0, 0, 0, 0, 0, 0, 77, 02100 0, 0, 0, 0, 0, 0, 900, 77, 0, 0, 02101 104, 0, 0, 0, 77, 77, 106, 0, 107, 0, 02102 0, 104, 0, 0, 106, 107, 107, 0, 0, 107, 02103 0, 106, 106, 0, 0, 0, 0, 0, 0, 0, 02104 77, 77, 0, 0, 0, 107, 0, 0, 0, 0, 02105 0, 0, 77, 0, 0, 0, 0, 106, 106, 0, 02106 0, 0, 0, 104, 0, 104, 357, 0, 0, 106, 02107 0, 104, 0, 104, 0, 0, 0, 304, 305, 306, 02108 307, 308, 309, 310, 901, 0, 313, 314, 107, 0, 02109 77, 0, 317, 318, 0, 0, 0, 77, 77, 107, 02110 0, 77, 0, 235, 235, 0, 0, 106, 235, 235, 02111 235, 0, 0, 0, 106, 106, 0, 77, 106, 0, 02112 235, 320, 321, 322, 323, 324, 325, 326, 327, 328, 02113 329, 0, 235, 0, 106, 0, 0, 0, 0, 0, 02114 0, 107, 0, 107, 235, 235, 235, 0, 0, 107, 02115 0, 107, 0, 0, 0, 0, 898, 0, 0, 0, 02116 77, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02117 0, 77, 0, 0, 0, 0, 0, 106, 0, 0, 02118 0, 0, 0, 0, 0, 0, 0, 0, 106, 0, 02119 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02120 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02121 0, 0, 0, 77, 0, 77, 0, 0, 0, 0, 02122 0, 77, 0, 77, 0, 0, 0, 0, 0, 0, 02123 106, 0, 106, 0, 0, 0, 0, 0, 106, 0, 02124 106, 0, 523, 524, 0, 0, 525, 0, 0, 0, 02125 235, 0, 0, 235, 235, 235, 155, 156, 157, 158, 02126 159, 160, 161, 162, 163, 0, 0, 164, 165, 0, 02127 0, 166, 167, 168, 169, 0, 0, 304, 305, 306, 02128 307, 308, 309, 310, 311, 170, 313, 314, 0, 0, 02129 0, 0, 317, 318, 0, 0, 0, 0, 0, 0, 02130 0, 0, 171, 172, 173, 174, 175, 176, 177, 178, 02131 179, 180, 0, 181, 182, 235, 0, 0, 0, 0, 02132 0, 320, 321, 322, 323, 324, 325, 326, 327, 328, 02133 329, 183, 217, 0, 0, 0, 0, 0, 0, 0, 02134 0, 0, 0, 0, 304, 305, 306, 307, 308, 309, 02135 310, 311, 312, 313, 314, -566, -566, 0, 235, 317, 02136 318, 235, 235, 235, 235, 235, 235, 235, 235, 235, 02137 235, 235, 235, 235, 235, 235, 235, 235, 235, 235, 02138 235, 235, 235, 235, 235, 235, 235, 0, 320, 321, 02139 322, 323, 324, 325, 326, 327, 328, 329, 581, 516, 02140 0, 0, 582, 0, 0, 0, 0, 0, 0, 0, 02141 0, 0, 155, 156, 157, 158, 159, 160, 161, 162, 02142 163, 0, 0, 164, 165, 0, 0, 166, 167, 168, 02143 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02144 0, 170, 0, 0, 0, 235, 235, 235, 0, 0, 02145 0, 0, 0, 235, 235, 235, 0, 0, 171, 172, 02146 173, 174, 175, 176, 177, 178, 179, 180, 0, 181, 02147 182, 0, 235, 0, 0, 0, 0, 235, 0, 0, 02148 0, 0, 0, 0, 0, 0, 235, 183, 217, 235, 02149 0, 0, 0, 0, 0, 0, 0, 0, 0, 235, 02150 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02151 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02152 0, 235, 235, 0, -565, 4, 0, 5, 6, 7, 02153 8, 9, 0, 235, 0, 10, 11, 0, 0, 235, 02154 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02155 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02156 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02157 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 02158 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02159 46, 47, 0, 0, 0, 235, 0, 0, 0, 0, 02160 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02161 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02162 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02163 0, 0, 0, 0, 235, 0, 0, 0, 0, 0, 02164 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02165 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02166 235, 0, 0, 0, 0, 0, 0, 0, 0, -565, 02167 0, -565, 0, 0, 0, 0, 0, 0, 0, 0, 02168 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02169 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02170 0, 0, 0, 235, 0, 0, 235, 235, 0, 0, 02171 0, -279, 0, 0, 0, 0, 0, 0, 0, -279, 02172 -279, -279, 0, 235, -279, -279, -279, 0, -279, 0, 02173 0, 0, 0, 0, 0, 0, 0, 0, -279, -279, 02174 -279, 0, 0, 0, 0, 0, 0, 0, -279, -279, 02175 0, -279, -279, -279, -279, -279, 0, 0, 0, 0, 02176 0, 0, 235, 0, 0, 0, 0, 235, 235, 0, 02177 235, 235, 0, 0, 0, 0, 0, 235, 0, -279, 02178 -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 02179 -279, -279, 0, 0, -279, -279, -279, 0, 711, -279, 02180 0, 0, 0, 0, 0, -279, 0, 0, 0, 0, 02181 0, 0, 0, 0, 0, 235, 0, 0, -279, 235, 02182 -101, -279, -279, -279, -279, -279, -279, -279, -279, -279, 02183 -279, -279, -279, 0, 0, 0, 0, 0, 0, 0, 02184 0, 0, 0, 0, 0, 0, 235, 0, -279, -279, 02185 -279, -279, -405, 0, -279, -279, -279, 0, -279, 0, 02186 -405, -405, -405, 0, 235, -405, -405, -405, 0, -405, 02187 0, 0, 0, 0, 0, 0, 0, 0, -405, -405, 02188 -405, 0, 0, 0, 235, 0, 0, 0, 0, -405, 02189 -405, 0, -405, -405, -405, -405, -405, 0, 0, 0, 02190 0, 0, 235, 304, 305, 306, 307, 308, 309, 310, 02191 311, 312, 313, 314, 315, 316, 0, 0, 317, 318, 02192 -405, -405, -405, -405, -405, -405, -405, -405, -405, -405, 02193 -405, -405, -405, 0, 0, -405, -405, -405, 0, 0, 02194 -405, 0, 0, 0, 0, 319, -405, 320, 321, 322, 02195 323, 324, 325, 326, 327, 328, 329, 0, 0, 0, 02196 0, 0, -405, 0, -405, -405, -405, -405, -405, -405, 02197 -405, -405, -405, -405, 0, 0, 0, 0, 0, 0, 02198 0, 0, 221, 0, 0, 0, 0, 0, -405, -405, 02199 -405, -405, -405, -273, 217, -405, -405, -405, 0, -405, 02200 0, -273, -273, -273, 0, 0, -273, -273, -273, 0, 02201 -273, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02202 -273, -273, -273, 0, 0, 0, 0, 0, 0, 0, 02203 -273, -273, 0, -273, -273, -273, -273, -273, 0, 0, 02204 0, 0, 0, 0, 304, 305, 306, 307, 308, 309, 02205 310, 311, 312, 313, 314, 315, 316, 0, 0, 317, 02206 318, -273, -273, -273, -273, -273, -273, -273, -273, -273, 02207 -273, -273, -273, -273, 0, 0, -273, -273, -273, 0, 02208 0, -273, 0, 0, 0, 0, 319, -273, 320, 321, 02209 322, 323, 324, 325, 326, 327, 328, 329, 0, 0, 02210 -273, 0, 0, -273, -273, -273, -273, -273, -273, -273, 02211 -273, -273, -273, -273, -273, 0, 0, 0, 0, 0, 02212 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02213 -273, -273, -273, -273, -565, 0, -273, -273, -273, 0, 02214 -273, 0, -565, -565, -565, 0, 0, -565, -565, -565, 02215 0, -565, 0, 0, 0, 0, 0, 0, 0, 0, 02216 -565, -565, -565, 0, 0, 0, 0, 0, 0, 0, 02217 0, -565, -565, 0, -565, -565, -565, -565, -565, 0, 02218 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02219 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02220 0, 0, -565, -565, -565, -565, -565, -565, -565, -565, 02221 -565, -565, -565, -565, -565, 0, 0, -565, -565, -565, 02222 0, 0, -565, 0, 0, 0, 0, 0, -565, 0, 02223 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02224 0, 0, 0, 0, -565, 0, -565, -565, -565, -565, 02225 -565, -565, -565, -565, -565, -565, 0, 0, 0, 0, 02226 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02227 -565, -565, -565, -565, -565, -286, 217, -565, -565, -565, 02228 0, -565, 0, -286, -286, -286, 0, 0, -286, -286, 02229 -286, 0, -286, 0, 0, 0, 0, 0, 0, 0, 02230 0, 0, -286, -286, 0, 0, 0, 0, 0, 0, 02231 0, 0, -286, -286, 0, -286, -286, -286, -286, -286, 02232 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02233 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02234 0, 0, 0, -286, -286, -286, -286, -286, -286, -286, 02235 -286, -286, -286, -286, -286, -286, 0, 0, -286, -286, 02236 -286, 0, 0, -286, 0, 0, 0, 0, 0, -286, 02237 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02238 0, 0, 0, 0, 0, -286, 0, -286, -286, -286, 02239 -286, -286, -286, -286, -286, -286, -286, 0, 0, 0, 02240 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02241 0, 0, -286, -286, -286, -286, -547, 214, -286, -286, 02242 -286, 0, -286, 0, -547, -547, -547, 0, 0, 0, 02243 -547, -547, 0, -547, 0, 0, 0, 0, 0, 0, 02244 0, 0, -547, 0, 0, 0, 0, 0, 0, 0, 02245 0, 0, 0, -547, -547, 0, -547, -547, -547, -547, 02246 -547, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02247 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02248 0, 0, 0, 0, -547, -547, -547, -547, -547, -547, 02249 -547, -547, -547, -547, -547, -547, -547, 0, 0, -547, 02250 -547, -547, -279, 652, 0, 0, 0, 0, 0, 0, 02251 -279, -279, -279, 0, 0, 0, -279, -279, 0, -279, 02252 0, 0, 0, 0, 0, -99, -547, 0, -547, -547, 02253 -547, -547, -547, -547, -547, -547, -547, -547, 0, -279, 02254 -279, 0, -279, -279, -279, -279, -279, 0, 0, 0, 02255 0, 0, -547, -547, -547, -547, -91, 0, 0, -547, 02256 0, -547, 0, -547, 0, 0, 0, 0, 0, 0, 02257 -279, -279, -279, -279, -279, -279, -279, -279, -279, -279, 02258 -279, -279, -279, 0, 0, -279, -279, -279, 0, 653, 02259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02261 0, -101, -279, 0, -279, -279, -279, -279, -279, -279, 02262 -279, -279, -279, -279, 0, 0, 0, 0, 0, 0, 02263 0, 0, 0, 0, 0, 0, 0, 0, 0, -279, 02264 -279, -279, -93, 0, 0, -279, 0, -279, 238, -279, 02265 5, 6, 7, 8, 9, -565, -565, -565, 10, 11, 02266 0, 0, -565, 12, 0, 13, 14, 15, 16, 17, 02267 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02268 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 02269 0, 0, 28, 29, 0, 31, 32, 33, 34, 35, 02270 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02271 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02273 0, 0, 0, 48, 0, 0, 49, 50, 0, 51, 02274 52, 0, 53, 0, 54, 55, 56, 57, 58, 59, 02275 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02276 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 02277 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 02278 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02279 0, 0, -565, 238, -565, 5, 6, 7, 8, 9, 02280 0, 0, -565, 10, 11, 0, -565, -565, 12, 0, 02281 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02282 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02283 0, 27, 0, 0, 0, 0, 0, 28, 29, 0, 02284 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02285 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02286 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02287 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02288 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02289 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02290 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02291 0, 0, 0, 0, 61, 62, 63, 0, 0, 0, 02292 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02293 0, 0, 0, 0, 0, 0, 0, -565, 238, -565, 02294 5, 6, 7, 8, 9, 0, 0, -565, 10, 11, 02295 0, 0, -565, 12, -565, 13, 14, 15, 16, 17, 02296 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02297 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 02298 0, 0, 28, 29, 0, 31, 32, 33, 34, 35, 02299 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02300 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02301 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02302 0, 0, 0, 48, 0, 0, 49, 50, 0, 51, 02303 52, 0, 53, 0, 54, 55, 56, 57, 58, 59, 02304 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02305 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 02306 62, 63, 0, 0, 0, 0, 0, 0, 4, 0, 02307 5, 6, 7, 8, 9, 0, 0, 0, 10, 11, 02308 0, 0, -565, 12, -565, 13, 14, 15, 16, 17, 02309 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02310 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 02311 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, 02312 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02313 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02314 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02315 0, 0, 0, 48, 0, 0, 49, 50, 0, 51, 02316 52, 0, 53, 0, 54, 55, 56, 57, 58, 59, 02317 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02318 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 02319 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 02320 0, 0, 0, 0, -565, 0, 0, 0, 0, 0, 02321 0, 0, -565, 238, -565, 5, 6, 7, 8, 9, 02322 0, 0, -565, 10, 11, 0, 0, -565, 12, 0, 02323 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02324 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02325 0, 27, 0, 0, 0, 0, 0, 28, 29, 0, 02326 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02327 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02328 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02329 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02330 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02331 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02332 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02333 0, 0, 0, 0, 61, 62, 63, 0, 0, 0, 02334 0, 0, 0, 238, 0, 5, 6, 7, 8, 9, 02335 0, -565, -565, 10, 11, 0, 0, -565, 12, -565, 02336 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02337 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02338 0, 27, 0, 0, 0, 0, 0, 28, 29, 0, 02339 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02340 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02341 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02342 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02343 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02344 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02345 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02346 0, 0, 0, 0, 61, 62, 63, 0, 0, 0, 02347 0, 0, 0, 238, 0, 5, 6, 7, 8, 9, 02348 0, 0, 0, 10, 11, 0, 0, -565, 12, -565, 02349 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02350 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02351 0, 27, 0, 0, 0, 0, 0, 28, 29, 0, 02352 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02353 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02354 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02355 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02356 0, 239, 50, 0, 51, 52, 0, 53, 0, 54, 02357 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02358 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02359 0, 0, 0, 0, 61, 62, 63, 0, 0, 0, 02360 0, 0, 0, 238, 0, 5, 6, 7, 8, 9, 02361 0, 0, 0, 10, 11, -565, 0, -565, 12, -565, 02362 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02363 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02364 0, 27, 0, 0, 0, 0, 0, 28, 29, 0, 02365 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02366 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02367 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02368 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02369 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02370 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02371 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02372 0, 0, 0, 0, 61, 62, 63, 0, 0, 0, 02373 0, 0, 0, 238, 0, 5, 6, 7, 8, 9, 02374 0, 0, 0, 10, 11, -565, 0, -565, 12, -565, 02375 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02376 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02377 0, 27, 0, 0, 0, 0, 0, 28, 29, 0, 02378 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02379 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02380 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02381 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02382 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02383 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02384 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02385 0, 0, 0, 0, 61, 62, 63, 0, 0, 0, 02386 0, 0, 0, 0, 0, 0, 0, 0, 0, -565, 02387 0, 0, 0, 0, 0, 0, 0, -565, 238, -565, 02388 5, 6, 7, 8, 9, 0, 0, -565, 10, 11, 02389 0, 0, 0, 12, 0, 13, 14, 15, 16, 17, 02390 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02391 23, 24, 25, 26, 0, 0, 27, 0, 0, 0, 02392 0, 0, 28, 29, 0, 31, 32, 33, 34, 35, 02393 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02394 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02395 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02396 0, 0, 0, 48, 0, 0, 49, 50, 0, 51, 02397 52, 0, 53, 0, 54, 55, 56, 57, 58, 59, 02398 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02399 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 02400 62, 63, 0, 0, 0, 0, 0, 0, 0, 0, 02401 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02402 0, 0, -565, 12, -565, 13, 14, 15, 16, 17, 02403 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02404 23, 24, 25, 26, 0, 0, 192, 0, 0, 0, 02405 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02406 36, 37, 38, 39, 40, 193, 41, 42, 0, 43, 02407 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02408 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02409 0, 0, 0, 194, 0, 0, 195, 50, 0, 51, 02410 52, 0, 196, 197, 54, 55, 56, 57, 58, 59, 02411 60, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02412 6, 7, 0, 9, 0, 0, 0, 10, 11, 61, 02413 198, 63, 12, 0, 13, 14, 15, 16, 17, 18, 02414 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 02415 24, 25, 26, 0, 221, 27, 0, 0, 0, 0, 02416 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 02417 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02418 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 02419 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02420 0, 0, 194, 0, 0, 195, 50, 0, 51, 52, 02421 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02423 0, 0, 0, 0, 0, 0, 0, 0, 61, 62, 02424 63, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02425 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02426 0, 284, 12, 285, 13, 14, 15, 16, 17, 18, 02427 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 02428 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 02429 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 02430 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02431 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 02432 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02433 0, 0, 194, 0, 0, 195, 50, 0, 51, 52, 02434 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02435 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 02436 7, 8, 9, 0, 0, 0, 10, 11, 61, 62, 02437 63, 12, 0, 13, 14, 15, 16, 17, 18, 19, 02438 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 02439 25, 26, 0, 221, 27, 0, 0, 0, 0, 0, 02440 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 02441 38, 39, 40, 0, 41, 42, 0, 43, 44, 45, 02442 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02443 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02444 0, 48, 0, 0, 49, 50, 0, 51, 52, 0, 02445 53, 0, 54, 55, 56, 57, 58, 59, 60, 0, 02446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02447 0, 0, 0, 0, 0, 0, 0, 61, 62, 63, 02448 0, 0, 0, 0, 0, 0, 5, 6, 7, 8, 02449 9, 0, 0, 0, 10, 11, 0, 0, 0, 12, 02450 466, 13, 14, 15, 16, 17, 18, 19, 0, 0, 02451 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 02452 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, 02453 0, 31, 32, 33, 34, 35, 36, 37, 38, 39, 02454 40, 0, 41, 42, 0, 43, 44, 45, 0, 46, 02455 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02456 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 02457 0, 0, 49, 50, 0, 51, 52, 0, 53, 0, 02458 54, 55, 56, 57, 58, 59, 60, 0, 0, 0, 02459 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02460 0, 0, 0, 0, 0, 61, 62, 63, 0, 0, 02461 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02462 0, 0, 0, 0, 0, 0, 0, 0, 466, 111, 02463 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 02464 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 02465 132, 133, 134, 0, 0, 0, 135, 136, 137, 359, 02466 360, 361, 362, 142, 143, 144, 0, 0, 0, 0, 02467 0, 145, 146, 147, 148, 363, 364, 365, 366, 153, 02468 37, 38, 367, 40, 0, 0, 0, 0, 0, 0, 02469 0, 0, 155, 156, 157, 158, 159, 160, 161, 162, 02470 163, 0, 0, 164, 165, 0, 0, 166, 167, 168, 02471 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02472 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 02473 0, 0, 0, 0, 0, 0, 0, 0, 171, 172, 02474 173, 174, 175, 176, 177, 178, 179, 180, 0, 181, 02475 182, 0, 0, 0, 0, 0, -540, -540, -540, 0, 02476 -540, 0, 0, 0, -540, -540, 0, 183, 368, -540, 02477 0, -540, -540, -540, -540, -540, -540, -540, 0, -540, 02478 0, 0, 0, -540, -540, -540, -540, -540, -540, -540, 02479 0, 0, -540, 0, 0, 0, 0, 0, 0, -540, 02480 0, 0, -540, -540, -540, -540, -540, -540, -540, -540, 02481 -540, -540, -540, -540, 0, -540, -540, -540, 0, -540, 02482 -540, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02483 0, 0, 0, 0, 0, 0, 0, 0, 0, -540, 02484 0, 0, -540, -540, 0, -540, -540, 0, -540, -540, 02485 -540, -540, -540, -540, -540, -540, -540, 0, 0, 0, 02486 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02487 0, 0, 0, 0, 0, -540, -540, -540, 0, 0, 02488 0, 0, 0, -541, -541, -541, 0, -541, 0, -540, 02489 0, -541, -541, 0, 0, -540, -541, 0, -541, -541, 02490 -541, -541, -541, -541, -541, 0, -541, 0, 0, 0, 02491 -541, -541, -541, -541, -541, -541, -541, 0, 0, -541, 02492 0, 0, 0, 0, 0, 0, -541, 0, 0, -541, 02493 -541, -541, -541, -541, -541, -541, -541, -541, -541, -541, 02494 -541, 0, -541, -541, -541, 0, -541, -541, 0, 0, 02495 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02496 0, 0, 0, 0, 0, 0, -541, 0, 0, -541, 02497 -541, 0, -541, -541, 0, -541, -541, -541, -541, -541, 02498 -541, -541, -541, -541, 0, 0, 0, 0, 0, 0, 02499 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02500 0, 0, -541, -541, -541, 0, 0, 0, 0, 0, 02501 -543, -543, -543, 0, -543, 0, -541, 0, -543, -543, 02502 0, 0, -541, -543, 0, -543, -543, -543, -543, -543, 02503 -543, -543, 0, 0, 0, 0, 0, -543, -543, -543, 02504 -543, -543, -543, -543, 0, 0, -543, 0, 0, 0, 02505 0, 0, 0, -543, 0, 0, -543, -543, -543, -543, 02506 -543, -543, -543, -543, -543, -543, -543, -543, 0, -543, 02507 -543, -543, 0, -543, -543, 0, 0, 0, 0, 0, 02508 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02509 0, 0, 0, -543, 710, 0, -543, -543, 0, -543, 02510 -543, 0, -543, -543, -543, -543, -543, -543, -543, -543, 02511 -543, 0, 0, 0, 0, 0, -99, 0, 0, 0, 02512 0, 0, 0, 0, -545, -545, -545, 0, -545, -543, 02513 -543, -543, -545, -545, 0, 0, 0, -545, 0, -545, 02514 -545, -545, -545, -545, -545, -545, 0, 0, 0, -543, 02515 0, -545, -545, -545, -545, -545, -545, -545, 0, 0, 02516 -545, 0, 0, 0, 0, 0, 0, -545, 0, 0, 02517 -545, -545, -545, -545, -545, -545, -545, -545, -545, -545, 02518 -545, -545, 0, -545, -545, -545, 0, -545, -545, 0, 02519 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02520 0, 0, 0, 0, 0, 0, 0, -545, 0, 0, 02521 -545, -545, 0, -545, -545, 0, -545, -545, -545, -545, 02522 -545, -545, -545, -545, -545, 0, 0, 0, 0, 0, 02523 0, 0, 0, 0, 0, 0, 0, 0, -546, -546, 02524 -546, 0, -546, -545, -545, -545, -546, -546, 0, 0, 02525 0, -546, 0, -546, -546, -546, -546, -546, -546, -546, 02526 0, 0, 0, -545, 0, -546, -546, -546, -546, -546, 02527 -546, -546, 0, 0, -546, 0, 0, 0, 0, 0, 02528 0, -546, 0, 0, -546, -546, -546, -546, -546, -546, 02529 -546, -546, -546, -546, -546, -546, 0, -546, -546, -546, 02530 0, -546, -546, 0, 0, 0, 0, 0, 0, 0, 02531 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02532 0, -546, 0, 0, -546, -546, 0, -546, -546, 0, 02533 -546, -546, -546, -546, -546, -546, -546, -546, -546, 0, 02534 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02535 0, 0, 0, 0, 0, 0, 0, -546, -546, -546, 02536 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02537 0, 0, 0, 0, 0, 0, 0, -546, 111, 112, 02538 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 02539 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 02540 133, 134, 0, 0, 0, 135, 136, 137, 138, 139, 02541 140, 141, 142, 143, 144, 0, 0, 0, 0, 0, 02542 145, 146, 147, 148, 149, 150, 151, 152, 153, 266, 02543 267, 154, 268, 0, 0, 0, 0, 0, 0, 0, 02544 0, 155, 156, 157, 158, 159, 160, 161, 162, 163, 02545 0, 0, 164, 165, 0, 0, 166, 167, 168, 169, 02546 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02547 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02548 0, 0, 0, 0, 0, 0, 0, 171, 172, 173, 02549 174, 175, 176, 177, 178, 179, 180, 0, 181, 182, 02550 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02551 0, 0, 0, 0, 0, 0, 183, 111, 112, 113, 02552 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 02553 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 02554 134, 0, 0, 0, 135, 136, 137, 138, 139, 140, 02555 141, 142, 143, 144, 0, 0, 0, 0, 0, 145, 02556 146, 147, 148, 149, 150, 151, 152, 153, 223, 0, 02557 154, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02558 155, 156, 157, 158, 159, 160, 161, 162, 163, 0, 02559 0, 164, 165, 0, 0, 166, 167, 168, 169, 0, 02560 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 02561 0, 0, 55, 0, 0, 0, 0, 0, 0, 0, 02562 0, 0, 0, 0, 0, 0, 171, 172, 173, 174, 02563 175, 176, 177, 178, 179, 180, 0, 181, 182, 0, 02564 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02565 0, 0, 0, 0, 0, 183, 111, 112, 113, 114, 02566 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 02567 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 02568 0, 0, 0, 135, 136, 137, 138, 139, 140, 141, 02569 142, 143, 144, 0, 0, 0, 0, 0, 145, 146, 02570 147, 148, 149, 150, 151, 152, 153, 0, 0, 154, 02571 0, 0, 0, 0, 0, 0, 0, 0, 0, 155, 02572 156, 157, 158, 159, 160, 161, 162, 163, 0, 0, 02573 164, 165, 0, 0, 166, 167, 168, 169, 0, 0, 02574 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 02575 0, 55, 0, 0, 0, 0, 0, 0, 0, 0, 02576 0, 0, 0, 0, 0, 171, 172, 173, 174, 175, 02577 176, 177, 178, 179, 180, 0, 181, 182, 0, 0, 02578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02579 0, 0, 0, 0, 183, 111, 112, 113, 114, 115, 02580 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 02581 126, 127, 128, 129, 130, 131, 132, 133, 134, 0, 02582 0, 0, 135, 136, 137, 138, 139, 140, 141, 142, 02583 143, 144, 0, 0, 0, 0, 0, 145, 146, 147, 02584 148, 149, 150, 151, 152, 153, 0, 0, 154, 0, 02585 0, 0, 0, 0, 0, 0, 0, 0, 155, 156, 02586 157, 158, 159, 160, 161, 162, 163, 0, 0, 164, 02587 165, 0, 0, 166, 167, 168, 169, 0, 0, 0, 02588 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 02589 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02590 0, 0, 0, 0, 171, 172, 173, 174, 175, 176, 02591 177, 178, 179, 180, 0, 181, 182, 0, 0, 5, 02592 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02593 0, 0, 12, 183, 13, 14, 15, 228, 229, 18, 02594 19, 0, 0, 0, 0, 0, 230, 231, 232, 23, 02595 24, 25, 26, 0, 0, 192, 0, 0, 0, 0, 02596 0, 0, 255, 0, 0, 32, 33, 34, 35, 36, 02597 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02598 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02599 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02600 0, 0, 256, 0, 0, 195, 50, 0, 51, 52, 02601 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02602 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02603 0, 5, 6, 7, 0, 9, 0, 0, 257, 10, 02604 11, 0, 0, 0, 12, 0, 13, 14, 15, 228, 02605 229, 18, 19, 0, 0, 0, 258, 0, 230, 231, 02606 232, 23, 24, 25, 26, 0, 0, 192, 0, 0, 02607 0, 0, 0, 0, 255, 0, 0, 32, 33, 34, 02608 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02609 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 02610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02611 0, 0, 0, 0, 256, 0, 0, 195, 50, 0, 02612 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02613 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02614 0, 0, 0, 5, 6, 7, 8, 9, 0, 0, 02615 257, 10, 11, 0, 0, 0, 12, 0, 13, 14, 02616 15, 16, 17, 18, 19, 0, 0, 0, 482, 0, 02617 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 02618 0, 0, 0, 0, 0, 28, 29, 30, 31, 32, 02619 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 02620 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02621 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02622 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 02623 50, 0, 51, 52, 0, 53, 0, 54, 55, 56, 02624 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 02625 0, 0, 5, 6, 7, 8, 9, 0, 0, 0, 02626 10, 11, 61, 62, 63, 12, 0, 13, 14, 15, 02627 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02628 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02629 0, 0, 0, 0, 28, 29, 0, 31, 32, 33, 02630 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02631 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02633 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02634 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02635 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02636 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02637 11, 61, 62, 63, 12, 0, 13, 14, 15, 16, 02638 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 02639 22, 23, 24, 25, 26, 0, 0, 192, 0, 0, 02640 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02641 35, 36, 37, 38, 39, 40, 193, 41, 42, 0, 02642 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02643 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02644 0, 0, 0, 0, 194, 0, 0, 195, 50, 0, 02645 51, 52, 0, 196, 197, 54, 55, 56, 57, 58, 02646 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02647 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02648 61, 198, 63, 12, 0, 13, 14, 15, 228, 229, 02649 18, 19, 0, 0, 0, 0, 0, 230, 231, 232, 02650 23, 24, 25, 26, 0, 0, 192, 0, 0, 0, 02651 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02652 36, 37, 38, 39, 40, 193, 41, 42, 0, 43, 02653 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02654 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02655 0, 0, 0, 194, 0, 0, 195, 50, 0, 51, 02656 52, 0, 577, 197, 54, 55, 56, 57, 58, 59, 02657 60, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02658 6, 7, 0, 9, 0, 0, 0, 10, 11, 61, 02659 198, 63, 12, 0, 13, 14, 15, 228, 229, 18, 02660 19, 0, 0, 0, 0, 0, 230, 231, 232, 23, 02661 24, 25, 26, 0, 0, 192, 0, 0, 0, 0, 02662 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 02663 37, 38, 39, 40, 193, 41, 42, 0, 43, 44, 02664 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 02665 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02666 0, 0, 194, 0, 0, 195, 50, 0, 51, 52, 02667 0, 196, 0, 54, 55, 56, 57, 58, 59, 60, 02668 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 02669 7, 0, 9, 0, 0, 0, 10, 11, 61, 198, 02670 63, 12, 0, 13, 14, 15, 228, 229, 18, 19, 02671 0, 0, 0, 0, 0, 230, 231, 232, 23, 24, 02672 25, 26, 0, 0, 192, 0, 0, 0, 0, 0, 02673 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 02674 38, 39, 40, 193, 41, 42, 0, 43, 44, 45, 02675 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02676 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02677 0, 194, 0, 0, 195, 50, 0, 51, 52, 0, 02678 0, 197, 54, 55, 56, 57, 58, 59, 60, 0, 02679 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 02680 0, 9, 0, 0, 0, 10, 11, 61, 198, 63, 02681 12, 0, 13, 14, 15, 228, 229, 18, 19, 0, 02682 0, 0, 0, 0, 230, 231, 232, 23, 24, 25, 02683 26, 0, 0, 192, 0, 0, 0, 0, 0, 0, 02684 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 02685 39, 40, 193, 41, 42, 0, 43, 44, 45, 0, 02686 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02687 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02688 194, 0, 0, 195, 50, 0, 51, 52, 0, 577, 02689 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02690 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 02691 9, 0, 0, 0, 10, 11, 61, 198, 63, 12, 02692 0, 13, 14, 15, 228, 229, 18, 19, 0, 0, 02693 0, 0, 0, 230, 231, 232, 23, 24, 25, 26, 02694 0, 0, 192, 0, 0, 0, 0, 0, 0, 29, 02695 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 02696 40, 193, 41, 42, 0, 43, 44, 45, 0, 46, 02697 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02698 0, 0, 0, 0, 0, 0, 0, 0, 0, 194, 02699 0, 0, 195, 50, 0, 51, 52, 0, 0, 0, 02700 54, 55, 56, 57, 58, 59, 60, 0, 0, 0, 02701 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 02702 0, 0, 0, 10, 11, 61, 198, 63, 12, 0, 02703 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02704 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02705 0, 192, 0, 0, 0, 0, 0, 0, 29, 0, 02706 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02707 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02708 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02709 0, 0, 0, 0, 0, 0, 0, 0, 194, 0, 02710 0, 195, 50, 0, 51, 52, 0, 476, 0, 54, 02711 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02712 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02713 0, 0, 10, 11, 61, 198, 63, 12, 0, 13, 02714 14, 15, 228, 229, 18, 19, 0, 0, 0, 0, 02715 0, 230, 231, 232, 23, 24, 25, 26, 0, 0, 02716 192, 0, 0, 0, 0, 0, 0, 29, 0, 0, 02717 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02718 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02719 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02720 0, 0, 0, 0, 0, 0, 0, 194, 0, 0, 02721 195, 50, 0, 51, 52, 0, 196, 0, 54, 55, 02722 56, 57, 58, 59, 60, 0, 0, 0, 0, 0, 02723 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02724 0, 10, 11, 61, 198, 63, 12, 0, 13, 14, 02725 15, 228, 229, 18, 19, 0, 0, 0, 0, 0, 02726 230, 231, 232, 23, 24, 25, 26, 0, 0, 192, 02727 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 02728 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 02729 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02730 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02731 0, 0, 0, 0, 0, 0, 194, 0, 0, 195, 02732 50, 0, 51, 52, 0, 758, 0, 54, 55, 56, 02733 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 02734 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02735 10, 11, 61, 198, 63, 12, 0, 13, 14, 15, 02736 228, 229, 18, 19, 0, 0, 0, 0, 0, 230, 02737 231, 232, 23, 24, 25, 26, 0, 0, 192, 0, 02738 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02739 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02740 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02741 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02742 0, 0, 0, 0, 0, 194, 0, 0, 195, 50, 02743 0, 51, 52, 0, 476, 0, 54, 55, 56, 57, 02744 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02745 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02746 11, 61, 198, 63, 12, 0, 13, 14, 15, 228, 02747 229, 18, 19, 0, 0, 0, 0, 0, 230, 231, 02748 232, 23, 24, 25, 26, 0, 0, 192, 0, 0, 02749 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02750 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02751 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02752 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02753 0, 0, 0, 0, 194, 0, 0, 195, 50, 0, 02754 51, 52, 0, 577, 0, 54, 55, 56, 57, 58, 02755 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02756 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02757 61, 198, 63, 12, 0, 13, 14, 15, 228, 229, 02758 18, 19, 0, 0, 0, 0, 0, 230, 231, 232, 02759 23, 24, 25, 26, 0, 0, 192, 0, 0, 0, 02760 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02761 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02762 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02763 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02764 0, 0, 0, 194, 0, 0, 195, 50, 0, 51, 02765 52, 0, 0, 0, 54, 55, 56, 57, 58, 59, 02766 60, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02767 6, 7, 0, 9, 0, 0, 0, 10, 11, 61, 02768 198, 63, 12, 0, 13, 14, 15, 16, 17, 18, 02769 19, 0, 0, 0, 0, 0, 20, 21, 22, 23, 02770 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 02771 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 02772 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02773 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 02774 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02775 0, 0, 194, 0, 0, 195, 50, 0, 51, 52, 02776 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02777 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 02778 7, 0, 9, 0, 0, 0, 10, 11, 61, 62, 02779 63, 12, 0, 13, 14, 15, 16, 17, 18, 19, 02780 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 02781 25, 26, 0, 0, 192, 0, 0, 0, 0, 0, 02782 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 02783 38, 39, 40, 0, 41, 42, 0, 43, 44, 45, 02784 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02785 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02786 0, 194, 0, 0, 195, 50, 0, 51, 52, 0, 02787 0, 0, 54, 55, 56, 57, 58, 59, 60, 0, 02788 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 02789 0, 9, 0, 0, 0, 10, 11, 61, 198, 63, 02790 12, 0, 13, 14, 15, 228, 229, 18, 19, 0, 02791 0, 0, 0, 0, 230, 231, 232, 23, 24, 25, 02792 26, 0, 0, 192, 0, 0, 0, 0, 0, 0, 02793 255, 0, 0, 32, 33, 34, 35, 36, 37, 38, 02794 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02796 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02797 256, 0, 0, 300, 50, 0, 51, 52, 0, 301, 02798 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02799 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02800 10, 11, 0, 0, 0, 12, 257, 13, 14, 15, 02801 228, 229, 18, 19, 0, 0, 0, 0, 0, 230, 02802 231, 232, 23, 24, 25, 26, 0, 0, 192, 0, 02803 0, 0, 0, 0, 0, 255, 0, 0, 32, 33, 02804 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02805 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 02806 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02807 0, 0, 0, 0, 0, 342, 0, 0, 49, 50, 02808 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02809 58, 59, 60, 0, 0, 0, 0, 5, 6, 7, 02810 0, 9, 0, 0, 0, 10, 11, 0, 0, 0, 02811 12, 257, 13, 14, 15, 228, 229, 18, 19, 0, 02812 0, 0, 0, 0, 230, 231, 232, 23, 24, 25, 02813 26, 0, 0, 192, 0, 0, 0, 0, 0, 0, 02814 255, 0, 0, 32, 33, 34, 349, 36, 37, 38, 02815 350, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02816 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02817 0, 0, 0, 0, 0, 0, 0, 351, 0, 0, 02818 352, 0, 0, 195, 50, 0, 51, 52, 0, 0, 02819 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02820 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02821 10, 11, 0, 0, 0, 12, 257, 13, 14, 15, 02822 228, 229, 18, 19, 0, 0, 0, 0, 0, 230, 02823 231, 232, 23, 24, 25, 26, 0, 0, 192, 0, 02824 0, 0, 0, 0, 0, 255, 0, 0, 32, 33, 02825 34, 349, 36, 37, 38, 350, 40, 0, 41, 42, 02826 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 02827 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02828 0, 0, 0, 0, 0, 352, 0, 0, 195, 50, 02829 0, 51, 52, 0, 0, 0, 54, 55, 56, 57, 02830 58, 59, 60, 0, 0, 0, 0, 5, 6, 7, 02831 0, 9, 0, 0, 0, 10, 11, 0, 0, 0, 02832 12, 257, 13, 14, 15, 228, 229, 18, 19, 0, 02833 0, 0, 0, 0, 230, 231, 232, 23, 24, 25, 02834 26, 0, 0, 192, 0, 0, 0, 0, 0, 0, 02835 255, 0, 0, 32, 33, 34, 35, 36, 37, 38, 02836 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02837 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02838 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02839 256, 0, 0, 300, 50, 0, 51, 52, 0, 0, 02840 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02841 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02842 10, 11, 0, 0, 0, 12, 257, 13, 14, 15, 02843 228, 229, 18, 19, 0, 0, 0, 0, 0, 230, 02844 231, 232, 23, 24, 25, 26, 0, 0, 192, 0, 02845 0, 0, 0, 0, 0, 255, 0, 0, 32, 33, 02846 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02847 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 02848 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02849 0, 0, 0, 0, 0, 887, 0, 0, 195, 50, 02850 0, 51, 52, 0, 0, 0, 54, 55, 56, 57, 02851 58, 59, 60, 0, 0, 0, 0, 5, 6, 7, 02852 0, 9, 0, 0, 0, 10, 11, 0, 0, 0, 02853 12, 257, 13, 14, 15, 228, 229, 18, 19, 0, 02854 0, 0, 0, 0, 230, 231, 232, 23, 24, 25, 02855 26, 0, 0, 192, 0, 0, 0, 0, 0, 0, 02856 255, 0, 0, 32, 33, 34, 35, 36, 37, 38, 02857 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02859 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02860 897, 0, 0, 195, 50, 0, 51, 52, 0, 0, 02861 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02862 0, 0, 0, 584, 524, 0, 0, 585, 0, 0, 02863 0, 0, 0, 0, 0, 0, 257, 155, 156, 157, 02864 158, 159, 160, 161, 162, 163, 0, 0, 164, 165, 02865 0, 0, 166, 167, 168, 169, 0, 0, 0, 0, 02866 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 02867 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02868 0, 0, 0, 171, 172, 173, 174, 175, 176, 177, 02869 178, 179, 180, 0, 181, 182, 0, 0, 0, 0, 02870 605, 516, 0, 0, 606, 0, 0, 0, 0, 0, 02871 0, 0, 183, 217, 155, 156, 157, 158, 159, 160, 02872 161, 162, 163, 0, 0, 164, 165, 0, 0, 166, 02873 167, 168, 169, 0, 0, 0, 0, 0, 0, 0, 02874 0, 0, 0, 170, 0, 0, 0, 0, 0, 0, 02875 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02876 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 02877 0, 181, 182, 0, 0, 0, 0, 608, 524, 0, 02878 0, 609, 0, 0, 0, 0, 0, 0, 0, 183, 02879 217, 155, 156, 157, 158, 159, 160, 161, 162, 163, 02880 0, 0, 164, 165, 0, 0, 166, 167, 168, 169, 02881 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02882 170, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02883 0, 0, 0, 0, 0, 0, 0, 171, 172, 173, 02884 174, 175, 176, 177, 178, 179, 180, 0, 181, 182, 02885 0, 0, 0, 0, 679, 516, 0, 0, 680, 0, 02886 0, 0, 0, 0, 0, 0, 183, 217, 155, 156, 02887 157, 158, 159, 160, 161, 162, 163, 0, 0, 164, 02888 165, 0, 0, 166, 167, 168, 169, 0, 0, 0, 02889 0, 0, 0, 0, 0, 0, 0, 170, 0, 0, 02890 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02891 0, 0, 0, 0, 171, 172, 173, 174, 175, 176, 02892 177, 178, 179, 180, 0, 181, 182, 0, 0, 0, 02893 0, 682, 524, 0, 0, 683, 0, 0, 0, 0, 02894 0, 0, 0, 183, 217, 155, 156, 157, 158, 159, 02895 160, 161, 162, 163, 0, 0, 164, 165, 0, 0, 02896 166, 167, 168, 169, 0, 0, 0, 0, 0, 0, 02897 0, 0, 0, 0, 170, 0, 0, 0, 0, 0, 02898 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02899 0, 171, 172, 173, 174, 175, 176, 177, 178, 179, 02900 180, 0, 181, 182, 0, 0, 0, 0, 689, 516, 02901 0, 0, 690, 0, 0, 0, 0, 0, 0, 0, 02902 183, 217, 155, 156, 157, 158, 159, 160, 161, 162, 02903 163, 0, 0, 164, 165, 0, 0, 166, 167, 168, 02904 169, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02905 0, 170, 0, 0, 0, 0, 0, 0, 0, 0, 02906 0, 0, 0, 0, 0, 0, 0, 0, 171, 172, 02907 173, 174, 175, 176, 177, 178, 179, 180, 0, 181, 02908 182, 0, 0, 0, 0, 562, 524, 0, 0, 563, 02909 0, 0, 0, 0, 0, 0, 0, 183, 217, 155, 02910 156, 157, 158, 159, 160, 161, 162, 163, 0, 0, 02911 164, 165, 0, 0, 166, 167, 168, 169, 0, 0, 02912 0, 0, 0, 0, 0, 0, 0, 0, 170, 0, 02913 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02914 0, 0, 0, 0, 0, 171, 172, 173, 174, 175, 02915 176, 177, 178, 179, 180, 0, 181, 182, 0, 0, 02916 0, 0, 949, 516, 0, 0, 950, 0, 0, 0, 02917 0, 0, 0, 0, 183, 217, 155, 156, 157, 158, 02918 159, 160, 161, 162, 163, 0, 0, 164, 165, 0, 02919 0, 166, 167, 168, 169, 0, 0, 0, 0, 0, 02920 0, 0, 0, 0, 0, 170, 0, 0, 0, 0, 02921 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02922 0, 0, 171, 172, 173, 174, 175, 176, 177, 178, 02923 179, 180, 0, 181, 182, 0, 0, 0, 0, 955, 02924 516, 0, 0, 956, 0, 0, 0, 0, 0, 0, 02925 0, 183, 217, 155, 156, 157, 158, 159, 160, 161, 02926 162, 163, 0, 0, 164, 165, 0, 0, 166, 167, 02927 168, 169, 0, 0, 0, 0, 0, 0, 0, 0, 02928 0, 0, 170, 0, 0, 0, 0, 0, 0, 0, 02929 0, 0, 0, 0, 0, 0, 0, 0, 0, 171, 02930 172, 173, 174, 175, 176, 177, 178, 179, 180, 0, 02931 181, 182, 0, 0, 0, 0, 958, 524, 0, 0, 02932 959, 0, 0, 0, 0, 0, 0, 0, 183, 217, 02933 155, 156, 157, 158, 159, 160, 161, 162, 163, 0, 02934 0, 164, 165, 0, 0, 166, 167, 168, 169, 0, 02935 0, 0, 0, 0, 0, 0, 0, 0, 0, 170, 02936 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02937 0, 0, 0, 0, 0, 0, 171, 172, 173, 174, 02938 175, 176, 177, 178, 179, 180, 0, 181, 182, 0, 02939 0, 0, 0, 562, 524, 0, 0, 563, 0, 0, 02940 0, 0, 0, 0, 0, 183, 217, 155, 156, 157, 02941 158, 159, 160, 161, 162, 163, 0, 0, 164, 165, 02942 0, 0, 166, 167, 168, 169, 0, 0, 0, 0, 02943 0, 0, 0, 0, 0, 0, 170, 0, 0, 0, 02944 0, 0, 0, 0, 705, 0, 0, 0, 0, 0, 02945 0, 0, 0, 171, 172, 173, 174, 175, 176, 177, 02946 178, 179, 180, 650, 181, 182, 0, 0, 304, 305, 02947 306, 307, 308, 309, 310, 311, 312, 313, 314, 315, 02948 316, 0, 183, 317, 318, 0, 0, 304, 305, 306, 02949 307, 308, 309, 310, 311, 312, 313, 314, 315, 316, 02950 0, 0, 317, 318, 0, 0, 0, 0, 0, 0, 02951 319, 0, 320, 321, 322, 323, 324, 325, 326, 327, 02952 328, 329, 0, 0, 0, 0, 0, 0, 0, 319, 02953 0, 320, 321, 322, 323, 324, 325, 326, 327, 328, 02954 329 02955 }; 02956 02957 static const yytype_int16 yycheck[] = 02958 { 02959 2, 16, 17, 55, 2, 20, 4, 51, 28, 75, 02960 51, 52, 446, 336, 210, 8, 49, 537, 16, 17, 02961 303, 8, 20, 27, 536, 29, 556, 53, 83, 583, 02962 446, 86, 249, 331, 65, 28, 253, 4, 90, 442, 02963 8, 28, 748, 272, 13, 274, 352, 276, 49, 51, 02964 52, 49, 50, 607, 86, 53, 735, 667, 813, 836, 02965 28, 671, 641, 811, 62, 732, 615, 1, 22, 27, 02966 16, 17, 29, 50, 20, 25, 330, 75, 332, 482, 02967 53, 566, 567, 62, 82, 83, 26, 55, 86, 87, 02968 88, 89, 728, 13, 13, 61, 394, 25, 22, 13, 02969 61, 85, 75, 239, 76, 82, 83, 37, 38, 86, 02970 140, 398, 390, 749, 87, 88, 89, 147, 372, 373, 02971 398, 85, 90, 871, 558, 87, 85, 681, 65, 109, 02972 15, 13, 17, 0, 25, 25, 147, 13, 692, 393, 02973 106, 395, 114, 104, 105, 432, 444, 109, 925, 86, 02974 107, 25, 56, 732, 108, 139, 735, 25, 688, 914, 02975 140, 2, 195, 4, 300, 419, 696, 834, 916, 25, 02976 140, 140, 25, 722, 723, 139, 145, 147, 147, 113, 02977 139, 59, 60, 889, 108, 146, 620, 145, 85, 147, 02978 140, 445, 258, 655, 227, 943, 136, 195, 877, 214, 02979 662, 216, 217, 205, 620, 136, 239, 641, 210, 241, 02980 241, 145, 140, 147, 881, 217, 214, 147, 216, 217, 02981 146, 706, 220, 142, 222, 145, 145, 147, 147, 227, 02982 459, 145, 26, 147, 289, 290, 291, 292, 239, 146, 02983 238, 239, 139, 220, 542, 222, 649, 553, 858, 140, 02984 140, 255, 142, 25, 298, 834, 554, 836, 28, 303, 02985 258, 695, 811, 145, 813, 147, 140, 300, 214, 145, 02986 216, 147, 140, 99, 142, 301, 109, 26, 232, 695, 02987 792, 235, 337, 338, 140, 258, 25, 140, 87, 543, 02988 288, 289, 290, 291, 292, 293, 294, 295, 877, 300, 02989 298, 555, 300, 301, 241, 303, 142, 339, 220, 85, 02990 109, 147, 289, 290, 291, 292, 331, 294, 295, 298, 02991 140, 288, 871, 872, 303, 37, 38, 26, 301, 331, 02992 860, 243, 145, 331, 147, 333, 85, 109, 858, 337, 02993 338, 140, 136, 109, 85, 87, 925, 26, 142, 390, 02994 87, 85, 140, 351, 677, 87, 85, 142, 85, 56, 02995 337, 338, 330, 139, 26, 914, 109, 916, 140, 87, 02996 109, 143, 109, 88, 351, 147, 442, 109, 332, 394, 02997 378, 379, 912, 666, 580, 602, 85, 136, 429, 138, 02998 139, 109, 394, 413, 943, 85, 394, 238, 139, 378, 02999 379, 140, 339, 957, 143, 139, 85, 85, 147, 138, 03000 139, 138, 139, 142, 416, 52, 482, 354, 416, 56, 03001 413, 140, 140, 85, 87, 393, 413, 425, 85, 444, 03002 140, 865, 85, 85, 59, 60, 85, 136, 142, 138, 03003 139, 395, 444, 142, 442, 413, 444, 288, 138, 139, 03004 418, 136, 293, 142, 85, 14, 15, 136, 85, 138, 03005 139, 139, 85, 142, 68, 419, 564, 565, 85, 442, 03006 142, 85, 143, 475, 136, 443, 138, 139, 85, 109, 03007 142, 138, 139, 144, 482, 138, 139, 139, 400, 138, 03008 139, 445, 404, 137, 538, 407, 85, 87, 56, 532, 03009 504, 534, 52, 106, 54, 55, 56, 57, 139, 482, 03010 422, 138, 139, 106, 85, 427, 139, 85, 522, 109, 03011 641, 138, 139, 846, 138, 139, 528, 542, 530, 852, 03012 140, 138, 139, 87, 532, 87, 534, 603, 87, 554, 03013 542, 68, 68, 52, 542, 54, 55, 56, 57, 138, 03014 139, 17, 554, 140, 574, 109, 554, 109, 556, 557, 03015 109, 145, 564, 565, 566, 567, 520, 138, 139, 481, 03016 138, 139, 56, 541, 528, 416, 61, 94, 580, 583, 03017 557, 574, 68, 649, 425, 553, 140, 574, 140, 543, 03018 140, 140, 52, 25, 592, 597, 520, 143, 535, 536, 03019 137, 555, 140, 607, 528, 603, 574, 140, 140, 642, 03020 564, 565, 549, 61, 735, 592, 87, 738, 146, 104, 03021 105, 106, 666, 87, 626, 87, 628, 140, 630, 684, 03022 603, 140, 687, 119, 120, 121, 140, 935, 109, 641, 03023 564, 565, 596, 597, 642, 109, 698, 109, 61, 10, 03024 68, 649, 8, 54, 652, 653, 104, 105, 106, 13, 03025 658, 659, 63, 64, 666, 667, 109, 669, 61, 671, 03026 703, 704, 137, 652, 653, 52, 649, 681, 140, 658, 03027 659, 61, 936, 140, 140, 65, 684, 140, 692, 687, 03028 688, 104, 105, 106, 52, 140, 729, 730, 696, 117, 03029 118, 119, 120, 121, 706, 703, 704, 684, 741, 111, 03030 687, 104, 105, 106, 144, 836, 15, 838, 52, 140, 03031 54, 55, 56, 57, 104, 105, 728, 782, 145, 114, 03032 698, 729, 730, 193, 109, 140, 196, 197, 40, 41, 03033 42, 43, 44, 741, 140, 140, 779, 749, 685, 751, 03034 10, 753, 754, 786, 787, 89, 877, 790, 879, 140, 03035 697, 95, 883, 88, 16, 17, 9, 137, 20, 10, 03036 10, 769, 140, 806, 137, 777, 54, 55, 780, 57, 03037 140, 779, 694, 140, 782, 63, 64, 140, 786, 787, 03038 769, 140, 790, 137, 46, 47, 114, 140, 140, 51, 03039 52, 137, 140, 715, 925, 782, 927, 56, 806, 930, 03040 62, 63, 140, 140, 726, 416, 849, 819, 820, 140, 03041 822, 56, 824, 825, 945, 140, 140, 140, 87, 827, 03042 142, 52, 142, 54, 55, 56, 57, 539, 298, 89, 03043 889, 938, 722, 303, 92, 937, 967, 845, 95, 57, 03044 -1, 849, 90, 865, 827, 792, 858, 794, 68, 834, 03045 732, 52, 860, 54, 55, 56, 57, -1, 89, 902, 03046 -1, 904, 845, 83, 84, 96, -1, 910, 52, -1, 03047 54, 55, 56, 57, -1, -1, -1, 799, -1, 891, 03048 892, 893, -1, 895, 896, 116, -1, 52, 810, 54, 03049 55, 56, 57, 815, 902, -1, 904, 117, 118, 119, 03050 120, 121, 910, -1, 912, 89, 918, 919, 920, 921, 03051 935, 95, -1, -1, -1, -1, -1, -1, -1, 389, 03052 390, -1, -1, 935, 89, 937, 938, 935, 398, -1, 03053 -1, 193, -1, -1, 196, 197, 198, -1, -1, 951, 03054 952, 953, 954, 957, -1, 923, 52, -1, 54, 55, 03055 56, 57, 214, 965, 216, 217, 934, -1, -1, 429, 03056 -1, 973, 432, -1, 676, 52, -1, 54, 55, 56, 03057 57, -1, 936, -1, -1, -1, -1, -1, -1, -1, 03058 -1, 693, -1, 89, -1, -1, -1, -1, -1, 95, 03059 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03060 -1, -1, 89, -1, -1, -1, 476, -1, 95, 96, 03061 116, -1, -1, 119, -1, -1, -1, -1, -1, -1, 03062 -1, -1, -1, 2, -1, 4, -1, -1, -1, 116, 03063 -1, -1, 119, -1, -1, -1, 298, -1, -1, 145, 03064 -1, 303, 304, 305, 306, 307, 308, 309, 310, 311, 03065 312, 313, 314, 315, 316, 317, 318, 319, 320, 321, 03066 322, 323, 324, 325, 326, 327, 328, 329, 538, 331, 03067 49, 783, -1, 785, 53, 52, -1, 54, 55, 56, 03068 57, -1, -1, 795, -1, -1, -1, -1, 800, -1, 03069 -1, -1, -1, -1, -1, -1, 75, -1, -1, -1, 03070 -1, 2, -1, 4, -1, -1, -1, 577, 87, 88, 03071 89, 90, 89, -1, -1, -1, 378, 379, 95, 96, 03072 -1, -1, -1, -1, -1, -1, 388, 389, 390, -1, 03073 -1, -1, 394, -1, 396, 397, 398, -1, -1, 116, 03074 -1, -1, 119, 855, 856, -1, -1, -1, 49, 628, 03075 -1, 630, 53, 415, -1, -1, 68, 52, 420, 54, 03076 55, 56, 57, -1, -1, 142, -1, 429, -1, -1, 03077 432, 83, 84, 2, 75, 4, 646, -1, -1, -1, 03078 -1, -1, 444, -1, -1, -1, 87, 88, 89, -1, 03079 2, -1, 4, -1, 89, -1, 666, -1, -1, 911, 03080 95, 96, 464, 465, 116, 117, 118, 119, 120, 121, 03081 -1, -1, -1, -1, 476, -1, 195, -1, -1, -1, 03082 49, 116, -1, -1, 119, 0, -1, 939, -1, 941, 03083 -1, -1, -1, 8, 9, 10, -1, 49, 13, 14, 03084 15, 52, 17, 54, 55, 56, 57, 142, 227, -1, 03085 720, -1, 27, -1, -1, -1, -1, -1, 87, 238, 03086 239, -1, 37, 38, -1, 40, 41, 42, 43, 44, 03087 -1, -1, 751, -1, 753, 754, 538, -1, 89, 258, 03088 542, 68, -1, -1, 95, 96, -1, -1, 758, -1, 03089 -1, -1, 554, -1, 195, -1, 83, 84, -1, -1, 03090 -1, -1, -1, -1, -1, 116, -1, -1, 119, 288, 03091 85, -1, -1, -1, 293, 577, -1, -1, -1, 789, 03092 -1, 300, 301, -1, -1, -1, 227, 114, 115, 116, 03093 117, 118, 119, 120, 121, -1, -1, 238, 239, -1, 03094 819, 820, -1, 822, -1, 824, 825, -1, -1, -1, 03095 -1, -1, -1, -1, 333, -1, -1, 258, -1, -1, 03096 -1, -1, 137, -1, 139, -1, 195, 142, 143, -1, 03097 145, -1, 147, -1, -1, -1, -1, -1, -1, -1, 03098 -1, -1, -1, 195, 646, -1, -1, 288, 650, -1, 03099 652, 653, 293, -1, -1, -1, 658, 659, 227, 300, 03100 301, -1, -1, -1, 666, -1, -1, -1, -1, 238, 03101 239, -1, 891, 892, 893, 227, 895, 896, -1, -1, 03102 -1, -1, -1, -1, -1, -1, 238, 239, -1, -1, 03103 -1, -1, 333, -1, -1, -1, -1, 416, -1, 918, 03104 919, 920, 921, 705, -1, -1, 425, -1, 710, 711, 03105 -1, 713, 714, -1, -1, -1, -1, -1, 720, 288, 03106 -1, -1, -1, 442, 293, -1, -1, -1, -1, -1, 03107 -1, 300, 951, 952, 953, 954, 288, -1, -1, -1, 03108 -1, 293, -1, -1, -1, -1, 965, -1, 300, -1, 03109 -1, -1, -1, -1, 973, -1, 758, -1, -1, -1, 03110 762, -1, -1, 482, 333, -1, -1, 769, -1, -1, 03111 -1, -1, -1, -1, -1, 416, -1, -1, -1, -1, 03112 -1, 333, -1, -1, 425, -1, -1, 789, -1, -1, 03113 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03114 -1, 442, -1, -1, -1, 807, -1, -1, -1, -1, 03115 -1, -1, -1, 532, -1, 534, -1, -1, -1, -1, 03116 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03117 68, 69, 70, 71, 72, 73, 74, 556, -1, 77, 03118 78, 482, -1, -1, -1, 83, 84, 416, -1, -1, 03119 -1, -1, -1, -1, -1, -1, 425, -1, -1, -1, 03120 -1, -1, -1, -1, 416, -1, -1, -1, -1, -1, 03121 44, -1, -1, 425, 112, 113, 114, 115, 116, 117, 03122 118, 119, 120, 121, 603, -1, -1, -1, -1, -1, 03123 -1, 532, -1, 534, 68, 69, 70, 71, 72, 73, 03124 74, 75, 76, 77, 78, 79, 80, -1, -1, 83, 03125 84, -1, -1, -1, -1, 556, -1, -1, -1, -1, 03126 -1, -1, -1, 642, -1, -1, -1, -1, -1, -1, 03127 649, -1, -1, 935, -1, -1, 110, -1, 112, 113, 03128 114, 115, 116, 117, 118, 119, 120, 121, -1, -1, 03129 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03130 -1, -1, 603, 532, -1, 534, 140, -1, -1, 688, 03131 -1, -1, -1, -1, -1, -1, -1, 696, -1, -1, 03132 532, -1, 534, -1, 703, 704, -1, 556, -1, -1, 03133 -1, -1, -1, 634, -1, -1, -1, -1, -1, -1, 03134 -1, 642, -1, -1, 556, -1, -1, -1, 649, -1, 03135 729, 730, -1, -1, 52, 53, -1, -1, 56, -1, 03136 -1, -1, 741, -1, -1, -1, -1, -1, 66, 67, 03137 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 03138 78, -1, -1, 81, 82, 83, 84, 688, -1, -1, 03139 -1, -1, -1, -1, -1, 696, -1, 95, -1, -1, 03140 779, -1, 703, 704, -1, -1, -1, 786, 787, -1, 03141 -1, 790, -1, 642, 112, 113, 114, 115, 116, 117, 03142 118, 119, 120, 121, -1, 123, 124, 806, 729, 730, 03143 642, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03144 741, -1, -1, 141, 142, -1, -1, -1, 827, -1, 03145 -1, -1, -1, -1, -1, -1, -1, -1, -1, 688, 03146 -1, -1, -1, -1, -1, -1, 845, 696, -1, -1, 03147 849, -1, -1, -1, 703, 704, 688, -1, 779, -1, 03148 -1, 860, -1, -1, 696, 786, 787, -1, -1, 790, 03149 -1, 703, 704, -1, -1, -1, -1, -1, -1, -1, 03150 729, 730, -1, -1, -1, 806, -1, -1, -1, -1, 03151 -1, -1, 741, -1, -1, -1, -1, 729, 730, -1, 03152 -1, -1, -1, 902, -1, 904, 827, -1, -1, 741, 03153 -1, 910, -1, 912, -1, -1, -1, 68, 69, 70, 03154 71, 72, 73, 74, 845, -1, 77, 78, 849, -1, 03155 779, -1, 83, 84, -1, -1, -1, 786, 787, 860, 03156 -1, 790, -1, 46, 47, -1, -1, 779, 51, 52, 03157 53, -1, -1, -1, 786, 787, -1, 806, 790, -1, 03158 63, 112, 113, 114, 115, 116, 117, 118, 119, 120, 03159 121, -1, 75, -1, 806, -1, -1, -1, -1, -1, 03160 -1, 902, -1, 904, 87, 88, 89, -1, -1, 910, 03161 -1, 912, -1, -1, -1, -1, 845, -1, -1, -1, 03162 849, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03163 -1, 860, -1, -1, -1, -1, -1, 849, -1, -1, 03164 -1, -1, -1, -1, -1, -1, -1, -1, 860, -1, 03165 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03166 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03167 -1, -1, -1, 902, -1, 904, -1, -1, -1, -1, 03168 -1, 910, -1, 912, -1, -1, -1, -1, -1, -1, 03169 902, -1, 904, -1, -1, -1, -1, -1, 910, -1, 03170 912, -1, 52, 53, -1, -1, 56, -1, -1, -1, 03171 193, -1, -1, 196, 197, 198, 66, 67, 68, 69, 03172 70, 71, 72, 73, 74, -1, -1, 77, 78, -1, 03173 -1, 81, 82, 83, 84, -1, -1, 68, 69, 70, 03174 71, 72, 73, 74, 75, 95, 77, 78, -1, -1, 03175 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1, 03176 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, 03177 120, 121, -1, 123, 124, 258, -1, -1, -1, -1, 03178 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, 03179 121, 141, 142, -1, -1, -1, -1, -1, -1, -1, 03180 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73, 03181 74, 75, 76, 77, 78, 79, 80, -1, 301, 83, 03182 84, 304, 305, 306, 307, 308, 309, 310, 311, 312, 03183 313, 314, 315, 316, 317, 318, 319, 320, 321, 322, 03184 323, 324, 325, 326, 327, 328, 329, -1, 112, 113, 03185 114, 115, 116, 117, 118, 119, 120, 121, 52, 53, 03186 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, 03187 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, 03188 74, -1, -1, 77, 78, -1, -1, 81, 82, 83, 03189 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03190 -1, 95, -1, -1, -1, 388, 389, 390, -1, -1, 03191 -1, -1, -1, 396, 397, 398, -1, -1, 112, 113, 03192 114, 115, 116, 117, 118, 119, 120, 121, -1, 123, 03193 124, -1, 415, -1, -1, -1, -1, 420, -1, -1, 03194 -1, -1, -1, -1, -1, -1, 429, 141, 142, 432, 03195 -1, -1, -1, -1, -1, -1, -1, -1, -1, 442, 03196 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03197 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03198 -1, 464, 465, -1, 0, 1, -1, 3, 4, 5, 03199 6, 7, -1, 476, -1, 11, 12, -1, -1, 482, 03200 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03201 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03202 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03203 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 03204 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03205 66, 67, -1, -1, -1, 538, -1, -1, -1, -1, 03206 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03207 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03208 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03209 -1, -1, -1, -1, 577, -1, -1, -1, -1, -1, 03210 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03211 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03212 603, -1, -1, -1, -1, -1, -1, -1, -1, 145, 03213 -1, 147, -1, -1, -1, -1, -1, -1, -1, -1, 03214 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03215 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03216 -1, -1, -1, 646, -1, -1, 649, 650, -1, -1, 03217 -1, 0, -1, -1, -1, -1, -1, -1, -1, 8, 03218 9, 10, -1, 666, 13, 14, 15, -1, 17, -1, 03219 -1, -1, -1, -1, -1, -1, -1, -1, 27, 28, 03220 29, -1, -1, -1, -1, -1, -1, -1, 37, 38, 03221 -1, 40, 41, 42, 43, 44, -1, -1, -1, -1, 03222 -1, -1, 705, -1, -1, -1, -1, 710, 711, -1, 03223 713, 714, -1, -1, -1, -1, -1, 720, -1, 68, 03224 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 03225 79, 80, -1, -1, 83, 84, 85, -1, 87, 88, 03226 -1, -1, -1, -1, -1, 94, -1, -1, -1, -1, 03227 -1, -1, -1, -1, -1, 758, -1, -1, 107, 762, 03228 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 03229 119, 120, 121, -1, -1, -1, -1, -1, -1, -1, 03230 -1, -1, -1, -1, -1, -1, 789, -1, 137, 138, 03231 139, 140, 0, -1, 143, 144, 145, -1, 147, -1, 03232 8, 9, 10, -1, 807, 13, 14, 15, -1, 17, 03233 -1, -1, -1, -1, -1, -1, -1, -1, 26, 27, 03234 28, -1, -1, -1, 827, -1, -1, -1, -1, 37, 03235 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, 03236 -1, -1, 845, 68, 69, 70, 71, 72, 73, 74, 03237 75, 76, 77, 78, 79, 80, -1, -1, 83, 84, 03238 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 03239 78, 79, 80, -1, -1, 83, 84, 85, -1, -1, 03240 88, -1, -1, -1, -1, 110, 94, 112, 113, 114, 03241 115, 116, 117, 118, 119, 120, 121, -1, -1, -1, 03242 -1, -1, 110, -1, 112, 113, 114, 115, 116, 117, 03243 118, 119, 120, 121, -1, -1, -1, -1, -1, -1, 03244 -1, -1, 147, -1, -1, -1, -1, -1, 136, 137, 03245 138, 139, 140, 0, 142, 143, 144, 145, -1, 147, 03246 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 03247 17, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03248 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 03249 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, 03250 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73, 03251 74, 75, 76, 77, 78, 79, 80, -1, -1, 83, 03252 84, 68, 69, 70, 71, 72, 73, 74, 75, 76, 03253 77, 78, 79, 80, -1, -1, 83, 84, 85, -1, 03254 -1, 88, -1, -1, -1, -1, 110, 94, 112, 113, 03255 114, 115, 116, 117, 118, 119, 120, 121, -1, -1, 03256 107, -1, -1, 110, 111, 112, 113, 114, 115, 116, 03257 117, 118, 119, 120, 121, -1, -1, -1, -1, -1, 03258 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03259 137, 138, 139, 140, 0, -1, 143, 144, 145, -1, 03260 147, -1, 8, 9, 10, -1, -1, 13, 14, 15, 03261 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, 03262 26, 27, 28, -1, -1, -1, -1, -1, -1, -1, 03263 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03264 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03265 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03266 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03267 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03268 -1, -1, 88, -1, -1, -1, -1, -1, 94, -1, 03269 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03270 -1, -1, -1, -1, 110, -1, 112, 113, 114, 115, 03271 116, 117, 118, 119, 120, 121, -1, -1, -1, -1, 03272 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03273 136, 137, 138, 139, 140, 0, 142, 143, 144, 145, 03274 -1, 147, -1, 8, 9, 10, -1, -1, 13, 14, 03275 15, -1, 17, -1, -1, -1, -1, -1, -1, -1, 03276 -1, -1, 27, 28, -1, -1, -1, -1, -1, -1, 03277 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, 03278 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03279 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03280 -1, -1, -1, 68, 69, 70, 71, 72, 73, 74, 03281 75, 76, 77, 78, 79, 80, -1, -1, 83, 84, 03282 85, -1, -1, 88, -1, -1, -1, -1, -1, 94, 03283 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03284 -1, -1, -1, -1, -1, 110, -1, 112, 113, 114, 03285 115, 116, 117, 118, 119, 120, 121, -1, -1, -1, 03286 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03287 -1, -1, 137, 138, 139, 140, 0, 142, 143, 144, 03288 145, -1, 147, -1, 8, 9, 10, -1, -1, -1, 03289 14, 15, -1, 17, -1, -1, -1, -1, -1, -1, 03290 -1, -1, 26, -1, -1, -1, -1, -1, -1, -1, 03291 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 03292 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03293 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03294 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73, 03295 74, 75, 76, 77, 78, 79, 80, -1, -1, 83, 03296 84, 85, 0, 87, -1, -1, -1, -1, -1, -1, 03297 8, 9, 10, -1, -1, -1, 14, 15, -1, 17, 03298 -1, -1, -1, -1, -1, 109, 110, -1, 112, 113, 03299 114, 115, 116, 117, 118, 119, 120, 121, -1, 37, 03300 38, -1, 40, 41, 42, 43, 44, -1, -1, -1, 03301 -1, -1, 136, 137, 138, 139, 140, -1, -1, 143, 03302 -1, 145, -1, 147, -1, -1, -1, -1, -1, -1, 03303 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 03304 78, 79, 80, -1, -1, 83, 84, 85, -1, 87, 03305 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03306 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03307 -1, 109, 110, -1, 112, 113, 114, 115, 116, 117, 03308 118, 119, 120, 121, -1, -1, -1, -1, -1, -1, 03309 -1, -1, -1, -1, -1, -1, -1, -1, -1, 137, 03310 138, 139, 140, -1, -1, 143, -1, 145, 1, 147, 03311 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 03312 -1, -1, 15, 16, -1, 18, 19, 20, 21, 22, 03313 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03314 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03315 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52, 03316 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03317 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03318 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03319 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03320 93, -1, 95, -1, 97, 98, 99, 100, 101, 102, 03321 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03322 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 03323 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, 03324 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03325 -1, -1, 145, 1, 147, 3, 4, 5, 6, 7, 03326 -1, -1, 10, 11, 12, -1, 14, 15, 16, -1, 03327 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03328 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03329 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1, 03330 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03331 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03332 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03333 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03334 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03335 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03336 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03337 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1, 03338 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03339 -1, -1, -1, -1, -1, -1, -1, 145, 1, 147, 03340 3, 4, 5, 6, 7, -1, -1, 10, 11, 12, 03341 -1, -1, 15, 16, 17, 18, 19, 20, 21, 22, 03342 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03343 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03344 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52, 03345 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03346 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03347 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03348 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03349 93, -1, 95, -1, 97, 98, 99, 100, 101, 102, 03350 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03351 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 03352 123, 124, -1, -1, -1, -1, -1, -1, 1, -1, 03353 3, 4, 5, 6, 7, -1, -1, -1, 11, 12, 03354 -1, -1, 145, 16, 147, 18, 19, 20, 21, 22, 03355 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03356 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03357 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 03358 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03359 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03360 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03361 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03362 93, -1, 95, -1, 97, 98, 99, 100, 101, 102, 03363 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03364 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 03365 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, 03366 -1, -1, -1, -1, 137, -1, -1, -1, -1, -1, 03367 -1, -1, 145, 1, 147, 3, 4, 5, 6, 7, 03368 -1, -1, 10, 11, 12, -1, -1, 15, 16, -1, 03369 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03370 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03371 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1, 03372 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03373 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03374 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03375 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03376 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03377 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03378 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03379 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1, 03380 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, 03381 -1, 9, 10, 11, 12, -1, -1, 145, 16, 147, 03382 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03383 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03384 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1, 03385 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03386 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03387 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03388 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03389 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03390 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03391 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03392 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1, 03393 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, 03394 -1, -1, -1, 11, 12, -1, -1, 145, 16, 147, 03395 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03396 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03397 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1, 03398 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03399 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03400 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03401 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03402 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03403 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03404 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03405 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1, 03406 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, 03407 -1, -1, -1, 11, 12, 143, -1, 145, 16, 147, 03408 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03409 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03410 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1, 03411 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03412 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03413 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03414 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03415 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03416 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03417 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03418 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1, 03419 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, 03420 -1, -1, -1, 11, 12, 143, -1, 145, 16, 147, 03421 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03422 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03423 -1, 39, -1, -1, -1, -1, -1, 45, 46, -1, 03424 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03425 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03426 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03427 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03428 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03429 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03430 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03431 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1, 03432 -1, -1, -1, -1, -1, -1, -1, -1, -1, 137, 03433 -1, -1, -1, -1, -1, -1, -1, 145, 1, 147, 03434 3, 4, 5, 6, 7, -1, -1, 10, 11, 12, 03435 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22, 03436 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03437 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03438 -1, -1, 45, 46, -1, 48, 49, 50, 51, 52, 03439 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03440 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03441 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03442 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03443 93, -1, 95, -1, 97, 98, 99, 100, 101, 102, 03444 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03445 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 03446 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, 03447 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 03448 -1, -1, 145, 16, 147, 18, 19, 20, 21, 22, 03449 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03450 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03451 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03452 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 03453 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03454 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03455 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03456 93, -1, 95, 96, 97, 98, 99, 100, 101, 102, 03457 103, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03458 4, 5, -1, 7, -1, -1, -1, 11, 12, 122, 03459 123, 124, 16, -1, 18, 19, 20, 21, 22, 23, 03460 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03461 34, 35, 36, -1, 147, 39, -1, -1, -1, -1, 03462 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03463 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03464 64, -1, 66, 67, -1, -1, -1, -1, -1, -1, 03465 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03466 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03467 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 03468 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03469 -1, -1, -1, -1, -1, -1, -1, -1, 122, 123, 03470 124, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03471 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 03472 -1, 145, 16, 147, 18, 19, 20, 21, 22, 23, 03473 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03474 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03475 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03476 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03477 64, -1, 66, 67, -1, -1, -1, -1, -1, -1, 03478 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03479 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03480 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 03481 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 03482 5, 6, 7, -1, -1, -1, 11, 12, 122, 123, 03483 124, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03484 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03485 35, 36, -1, 147, 39, -1, -1, -1, -1, -1, 03486 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 03487 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, 03488 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03489 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03490 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03491 95, -1, 97, 98, 99, 100, 101, 102, 103, -1, 03492 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03493 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 03494 -1, -1, -1, -1, -1, -1, 3, 4, 5, 6, 03495 7, -1, -1, -1, 11, 12, -1, -1, -1, 16, 03496 145, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03497 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03498 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, 03499 -1, 48, 49, 50, 51, 52, 53, 54, 55, 56, 03500 57, -1, 59, 60, -1, 62, 63, 64, -1, 66, 03501 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03502 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03503 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1, 03504 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, 03505 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03506 -1, -1, -1, -1, -1, 122, 123, 124, -1, -1, 03507 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03508 -1, -1, -1, -1, -1, -1, -1, -1, 145, 3, 03509 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 03510 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 03511 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, 03512 34, 35, 36, 37, 38, 39, -1, -1, -1, -1, 03513 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 03514 54, 55, 56, 57, -1, -1, -1, -1, -1, -1, 03515 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, 03516 74, -1, -1, 77, 78, -1, -1, 81, 82, 83, 03517 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03518 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, 03519 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113, 03520 114, 115, 116, 117, 118, 119, 120, 121, -1, 123, 03521 124, -1, -1, -1, -1, -1, 3, 4, 5, -1, 03522 7, -1, -1, -1, 11, 12, -1, 141, 142, 16, 03523 -1, 18, 19, 20, 21, 22, 23, 24, -1, 26, 03524 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03525 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, 03526 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 03527 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, 03528 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03529 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03530 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96, 03531 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, 03532 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03533 -1, -1, -1, -1, -1, 122, 123, 124, -1, -1, 03534 -1, -1, -1, 3, 4, 5, -1, 7, -1, 136, 03535 -1, 11, 12, -1, -1, 142, 16, -1, 18, 19, 03536 20, 21, 22, 23, 24, -1, 26, -1, -1, -1, 03537 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03538 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03539 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 03540 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03541 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03542 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03543 90, -1, 92, 93, -1, 95, 96, 97, 98, 99, 03544 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03545 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03546 -1, -1, 122, 123, 124, -1, -1, -1, -1, -1, 03547 3, 4, 5, -1, 7, -1, 136, -1, 11, 12, 03548 -1, -1, 142, 16, -1, 18, 19, 20, 21, 22, 03549 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03550 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03551 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03552 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 03553 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03554 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03555 -1, -1, -1, 86, 87, -1, 89, 90, -1, 92, 03556 93, -1, 95, 96, 97, 98, 99, 100, 101, 102, 03557 103, -1, -1, -1, -1, -1, 109, -1, -1, -1, 03558 -1, -1, -1, -1, 3, 4, 5, -1, 7, 122, 03559 123, 124, 11, 12, -1, -1, -1, 16, -1, 18, 03560 19, 20, 21, 22, 23, 24, -1, -1, -1, 142, 03561 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03562 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 03563 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 03564 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03565 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03566 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03567 89, 90, -1, 92, 93, -1, 95, 96, 97, 98, 03568 99, 100, 101, 102, 103, -1, -1, -1, -1, -1, 03569 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 03570 5, -1, 7, 122, 123, 124, 11, 12, -1, -1, 03571 -1, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03572 -1, -1, -1, 142, -1, 30, 31, 32, 33, 34, 03573 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03574 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03575 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 03576 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03577 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03578 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03579 95, 96, 97, 98, 99, 100, 101, 102, 103, -1, 03580 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03581 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 03582 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03583 -1, -1, -1, -1, -1, -1, -1, 142, 3, 4, 03584 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 03585 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 03586 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, 03587 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, 03588 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 03589 55, 56, 57, -1, -1, -1, -1, -1, -1, -1, 03590 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 03591 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 03592 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03593 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03594 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, 03595 115, 116, 117, 118, 119, 120, 121, -1, 123, 124, 03596 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03597 -1, -1, -1, -1, -1, -1, 141, 3, 4, 5, 03598 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 03599 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 03600 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03601 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, 03602 46, 47, 48, 49, 50, 51, 52, 53, 54, -1, 03603 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03604 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 03605 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1, 03606 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, 03607 -1, -1, 98, -1, -1, -1, -1, -1, -1, -1, 03608 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, 03609 116, 117, 118, 119, 120, 121, -1, 123, 124, -1, 03610 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03611 -1, -1, -1, -1, -1, 141, 3, 4, 5, 6, 03612 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 03613 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 03614 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03615 37, 38, 39, -1, -1, -1, -1, -1, 45, 46, 03616 47, 48, 49, 50, 51, 52, 53, -1, -1, 56, 03617 -1, -1, -1, -1, -1, -1, -1, -1, -1, 66, 03618 67, 68, 69, 70, 71, 72, 73, 74, -1, -1, 03619 77, 78, -1, -1, 81, 82, 83, 84, -1, -1, 03620 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1, 03621 -1, 98, -1, -1, -1, -1, -1, -1, -1, -1, 03622 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, 03623 117, 118, 119, 120, 121, -1, 123, 124, -1, -1, 03624 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03625 -1, -1, -1, -1, 141, 3, 4, 5, 6, 7, 03626 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 03627 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 03628 -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, 03629 38, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03630 48, 49, 50, 51, 52, 53, -1, -1, 56, -1, 03631 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 03632 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 03633 78, -1, -1, 81, 82, 83, 84, -1, -1, -1, 03634 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, 03635 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03636 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117, 03637 118, 119, 120, 121, -1, 123, 124, -1, -1, 3, 03638 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 03639 -1, -1, 16, 141, 18, 19, 20, 21, 22, 23, 03640 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03641 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03642 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03643 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03644 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03645 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03646 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03647 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 03648 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03649 -1, 3, 4, 5, -1, 7, -1, -1, 122, 11, 03650 12, -1, -1, -1, 16, -1, 18, 19, 20, 21, 03651 22, 23, 24, -1, -1, -1, 140, -1, 30, 31, 03652 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03653 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03654 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03655 62, 63, 64, -1, -1, -1, -1, -1, -1, -1, 03656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03657 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03658 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03659 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03660 -1, -1, -1, 3, 4, 5, 6, 7, -1, -1, 03661 122, 11, 12, -1, -1, -1, 16, -1, 18, 19, 03662 20, 21, 22, 23, 24, -1, -1, -1, 140, -1, 03663 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03664 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, 03665 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 03666 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03667 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03668 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03669 90, -1, 92, 93, -1, 95, -1, 97, 98, 99, 03670 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03671 -1, -1, 3, 4, 5, 6, 7, -1, -1, -1, 03672 11, 12, 122, 123, 124, 16, -1, 18, 19, 20, 03673 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03674 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03675 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50, 03676 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03677 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03678 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03679 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03680 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03681 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03682 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03683 12, 122, 123, 124, 16, -1, 18, 19, 20, 21, 03684 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03685 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03686 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03687 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 03688 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03689 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03690 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03691 92, 93, -1, 95, 96, 97, 98, 99, 100, 101, 03692 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03693 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 03694 122, 123, 124, 16, -1, 18, 19, 20, 21, 22, 03695 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03696 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03697 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03698 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 03699 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03700 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03701 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03702 93, -1, 95, 96, 97, 98, 99, 100, 101, 102, 03703 103, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03704 4, 5, -1, 7, -1, -1, -1, 11, 12, 122, 03705 123, 124, 16, -1, 18, 19, 20, 21, 22, 23, 03706 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03707 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03708 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03709 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 03710 64, -1, 66, 67, -1, -1, -1, -1, -1, -1, 03711 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03712 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03713 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103, 03714 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 03715 5, -1, 7, -1, -1, -1, 11, 12, 122, 123, 03716 124, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03717 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03718 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03719 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03720 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 03721 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03722 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03723 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03724 -1, 96, 97, 98, 99, 100, 101, 102, 103, -1, 03725 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 03726 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124, 03727 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03728 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03729 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03730 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03731 56, 57, 58, 59, 60, -1, 62, 63, 64, -1, 03732 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03733 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03734 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03735 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03736 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 03737 7, -1, -1, -1, 11, 12, 122, 123, 124, 16, 03738 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03739 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03740 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, 03741 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 03742 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, 03743 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03744 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03745 -1, -1, 89, 90, -1, 92, 93, -1, -1, -1, 03746 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, 03747 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, 03748 -1, -1, -1, 11, 12, 122, 123, 124, 16, -1, 03749 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03750 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03751 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, 03752 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03753 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03754 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03755 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03756 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03757 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03758 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 03759 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18, 03760 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03761 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03762 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 03763 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03764 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03765 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03766 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03767 89, 90, -1, 92, 93, -1, 95, -1, 97, 98, 03768 99, 100, 101, 102, 103, -1, -1, -1, -1, -1, 03769 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 03770 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19, 03771 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 03772 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03773 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03774 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 03775 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03776 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03777 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03778 90, -1, 92, 93, -1, 95, -1, 97, 98, 99, 03779 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03780 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03781 11, 12, 122, 123, 124, 16, -1, 18, 19, 20, 03782 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03783 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03784 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03785 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03786 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03787 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03788 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03789 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03790 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03791 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03792 12, 122, 123, 124, 16, -1, 18, 19, 20, 21, 03793 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03794 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03795 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03796 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03797 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03798 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03799 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03800 92, 93, -1, 95, -1, 97, 98, 99, 100, 101, 03801 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03802 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 03803 122, 123, 124, 16, -1, 18, 19, 20, 21, 22, 03804 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03805 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03806 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03807 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03808 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03809 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03810 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03811 93, -1, -1, -1, 97, 98, 99, 100, 101, 102, 03812 103, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03813 4, 5, -1, 7, -1, -1, -1, 11, 12, 122, 03814 123, 124, 16, -1, 18, 19, 20, 21, 22, 23, 03815 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03816 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03817 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03818 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03819 64, -1, 66, 67, -1, -1, -1, -1, -1, -1, 03820 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03821 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03822 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 03823 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 03824 5, -1, 7, -1, -1, -1, 11, 12, 122, 123, 03825 124, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03826 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03827 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03828 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03829 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, 03830 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03831 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03832 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03833 -1, -1, 97, 98, 99, 100, 101, 102, 103, -1, 03834 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 03835 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124, 03836 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03837 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03838 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03839 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03840 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03841 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03842 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03843 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03844 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03845 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03846 11, 12, -1, -1, -1, 16, 122, 18, 19, 20, 03847 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03848 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03849 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03850 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03851 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1, 03852 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03853 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03854 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03855 101, 102, 103, -1, -1, -1, -1, 3, 4, 5, 03856 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1, 03857 16, 122, 18, 19, 20, 21, 22, 23, 24, -1, 03858 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03859 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03860 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03861 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03862 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03863 -1, -1, -1, -1, -1, -1, -1, 83, -1, -1, 03864 86, -1, -1, 89, 90, -1, 92, 93, -1, -1, 03865 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03866 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03867 11, 12, -1, -1, -1, 16, 122, 18, 19, 20, 03868 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03869 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03870 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03871 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03872 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1, 03873 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03874 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03875 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100, 03876 101, 102, 103, -1, -1, -1, -1, 3, 4, 5, 03877 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1, 03878 16, 122, 18, 19, 20, 21, 22, 23, 24, -1, 03879 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03880 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03881 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03882 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03883 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03884 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03885 86, -1, -1, 89, 90, -1, 92, 93, -1, -1, 03886 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03887 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03888 11, 12, -1, -1, -1, 16, 122, 18, 19, 20, 03889 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03890 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03891 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03892 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03893 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1, 03894 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03895 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03896 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100, 03897 101, 102, 103, -1, -1, -1, -1, 3, 4, 5, 03898 -1, 7, -1, -1, -1, 11, 12, -1, -1, -1, 03899 16, 122, 18, 19, 20, 21, 22, 23, 24, -1, 03900 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03901 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03902 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03903 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03904 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03905 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03906 86, -1, -1, 89, 90, -1, 92, 93, -1, -1, 03907 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03908 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1, 03909 -1, -1, -1, -1, -1, -1, 122, 66, 67, 68, 03910 69, 70, 71, 72, 73, 74, -1, -1, 77, 78, 03911 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1, 03912 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, 03913 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03914 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118, 03915 119, 120, 121, -1, 123, 124, -1, -1, -1, -1, 03916 52, 53, -1, -1, 56, -1, -1, -1, -1, -1, 03917 -1, -1, 141, 142, 66, 67, 68, 69, 70, 71, 03918 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 03919 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 03920 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, 03921 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03922 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 03923 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1, 03924 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141, 03925 142, 66, 67, 68, 69, 70, 71, 72, 73, 74, 03926 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 03927 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03928 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03929 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, 03930 115, 116, 117, 118, 119, 120, 121, -1, 123, 124, 03931 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1, 03932 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67, 03933 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 03934 78, -1, -1, 81, 82, 83, 84, -1, -1, -1, 03935 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, 03936 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03937 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117, 03938 118, 119, 120, 121, -1, 123, 124, -1, -1, -1, 03939 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1, 03940 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70, 03941 71, 72, 73, 74, -1, -1, 77, 78, -1, -1, 03942 81, 82, 83, 84, -1, -1, -1, -1, -1, -1, 03943 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, 03944 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03945 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, 03946 121, -1, 123, 124, -1, -1, -1, -1, 52, 53, 03947 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, 03948 141, 142, 66, 67, 68, 69, 70, 71, 72, 73, 03949 74, -1, -1, 77, 78, -1, -1, 81, 82, 83, 03950 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03951 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, 03952 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113, 03953 114, 115, 116, 117, 118, 119, 120, 121, -1, 123, 03954 124, -1, -1, -1, -1, 52, 53, -1, -1, 56, 03955 -1, -1, -1, -1, -1, -1, -1, 141, 142, 66, 03956 67, 68, 69, 70, 71, 72, 73, 74, -1, -1, 03957 77, 78, -1, -1, 81, 82, 83, 84, -1, -1, 03958 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1, 03959 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03960 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, 03961 117, 118, 119, 120, 121, -1, 123, 124, -1, -1, 03962 -1, -1, 52, 53, -1, -1, 56, -1, -1, -1, 03963 -1, -1, -1, -1, 141, 142, 66, 67, 68, 69, 03964 70, 71, 72, 73, 74, -1, -1, 77, 78, -1, 03965 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1, 03966 -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, 03967 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03968 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, 03969 120, 121, -1, 123, 124, -1, -1, -1, -1, 52, 03970 53, -1, -1, 56, -1, -1, -1, -1, -1, -1, 03971 -1, 141, 142, 66, 67, 68, 69, 70, 71, 72, 03972 73, 74, -1, -1, 77, 78, -1, -1, 81, 82, 03973 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, 03974 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, 03975 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, 03976 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 03977 123, 124, -1, -1, -1, -1, 52, 53, -1, -1, 03978 56, -1, -1, -1, -1, -1, -1, -1, 141, 142, 03979 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 03980 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1, 03981 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, 03982 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03983 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, 03984 116, 117, 118, 119, 120, 121, -1, 123, 124, -1, 03985 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1, 03986 -1, -1, -1, -1, -1, 141, 142, 66, 67, 68, 03987 69, 70, 71, 72, 73, 74, -1, -1, 77, 78, 03988 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1, 03989 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, 03990 -1, -1, -1, -1, 44, -1, -1, -1, -1, -1, 03991 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118, 03992 119, 120, 121, 44, 123, 124, -1, -1, 68, 69, 03993 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 03994 80, -1, 141, 83, 84, -1, -1, 68, 69, 70, 03995 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 03996 -1, -1, 83, 84, -1, -1, -1, -1, -1, -1, 03997 110, -1, 112, 113, 114, 115, 116, 117, 118, 119, 03998 120, 121, -1, -1, -1, -1, -1, -1, -1, 110, 03999 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, 04000 121 04001 }; 04002 04003 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 04004 symbol of state STATE-NUM. */ 04005 static const yytype_uint16 yystos[] = 04006 { 04007 0, 149, 150, 0, 1, 3, 4, 5, 6, 7, 04008 11, 12, 16, 18, 19, 20, 21, 22, 23, 24, 04009 30, 31, 32, 33, 34, 35, 36, 39, 45, 46, 04010 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 04011 57, 59, 60, 62, 63, 64, 66, 67, 86, 89, 04012 90, 92, 93, 95, 97, 98, 99, 100, 101, 102, 04013 103, 122, 123, 124, 151, 152, 153, 158, 160, 162, 04014 163, 166, 167, 169, 170, 171, 173, 174, 184, 198, 04015 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 04016 225, 248, 249, 259, 260, 261, 262, 263, 264, 265, 04017 268, 278, 280, 281, 282, 283, 284, 285, 308, 319, 04018 153, 3, 4, 5, 6, 7, 8, 9, 10, 11, 04019 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 04020 22, 23, 24, 25, 26, 30, 31, 32, 33, 34, 04021 35, 36, 37, 38, 39, 45, 46, 47, 48, 49, 04022 50, 51, 52, 53, 56, 66, 67, 68, 69, 70, 04023 71, 72, 73, 74, 77, 78, 81, 82, 83, 84, 04024 95, 112, 113, 114, 115, 116, 117, 118, 119, 120, 04025 121, 123, 124, 141, 177, 178, 179, 180, 182, 183, 04026 278, 280, 39, 58, 86, 89, 95, 96, 123, 166, 04027 174, 184, 186, 191, 194, 196, 215, 282, 284, 285, 04028 306, 307, 191, 191, 142, 192, 193, 142, 188, 192, 04029 142, 147, 313, 54, 179, 313, 154, 136, 21, 22, 04030 30, 31, 32, 184, 215, 308, 184, 56, 1, 89, 04031 156, 157, 158, 168, 169, 319, 160, 187, 196, 306, 04032 319, 186, 305, 306, 319, 46, 86, 122, 140, 173, 04033 198, 215, 282, 285, 241, 242, 54, 55, 57, 177, 04034 271, 279, 270, 271, 272, 146, 266, 146, 269, 59, 04035 60, 162, 184, 184, 145, 147, 312, 317, 318, 40, 04036 41, 42, 43, 44, 37, 38, 28, 246, 109, 140, 04037 89, 95, 170, 109, 68, 69, 70, 71, 72, 73, 04038 74, 75, 76, 77, 78, 79, 80, 83, 84, 110, 04039 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 04040 85, 138, 139, 199, 160, 161, 161, 202, 204, 161, 04041 312, 318, 86, 167, 174, 215, 231, 282, 285, 52, 04042 56, 83, 86, 175, 176, 215, 282, 285, 176, 33, 04043 34, 35, 36, 49, 50, 51, 52, 56, 142, 177, 04044 283, 303, 85, 139, 26, 136, 250, 262, 87, 87, 04045 188, 192, 250, 140, 186, 56, 186, 186, 109, 88, 04046 140, 195, 319, 85, 138, 139, 87, 87, 140, 195, 04047 191, 313, 314, 191, 190, 191, 319, 160, 314, 160, 04048 54, 63, 64, 159, 142, 185, 136, 156, 85, 139, 04049 87, 158, 168, 143, 312, 318, 314, 200, 144, 140, 04050 147, 316, 140, 316, 137, 316, 313, 56, 59, 60, 04051 170, 172, 140, 85, 138, 139, 243, 61, 104, 105, 04052 106, 273, 106, 273, 106, 65, 273, 106, 106, 267, 04053 273, 106, 61, 106, 68, 68, 145, 153, 161, 161, 04054 161, 161, 158, 160, 160, 247, 95, 162, 186, 196, 04055 197, 168, 140, 173, 140, 162, 184, 186, 197, 184, 04056 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 04057 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 04058 184, 184, 184, 184, 184, 52, 53, 56, 182, 188, 04059 309, 310, 190, 52, 53, 56, 182, 188, 309, 155, 04060 156, 13, 227, 317, 227, 161, 161, 312, 17, 253, 04061 56, 85, 138, 139, 25, 160, 52, 56, 175, 1, 04062 113, 286, 317, 85, 138, 139, 211, 304, 212, 85, 04063 139, 311, 52, 56, 309, 309, 252, 251, 162, 184, 04064 162, 184, 94, 164, 181, 184, 186, 95, 186, 194, 04065 306, 52, 56, 190, 52, 56, 307, 314, 143, 314, 04066 314, 179, 201, 184, 151, 137, 309, 309, 184, 314, 04067 158, 314, 306, 140, 172, 52, 56, 190, 52, 56, 04068 52, 54, 55, 56, 57, 89, 95, 96, 116, 119, 04069 142, 244, 289, 290, 291, 292, 293, 294, 297, 298, 04070 299, 300, 301, 275, 274, 146, 273, 146, 184, 184, 04071 76, 114, 236, 237, 319, 186, 140, 314, 172, 140, 04072 44, 313, 87, 87, 188, 192, 313, 315, 87, 87, 04073 188, 189, 192, 319, 10, 226, 8, 255, 319, 156, 04074 13, 156, 27, 228, 317, 228, 253, 196, 226, 52, 04075 56, 190, 52, 56, 206, 209, 317, 287, 208, 52, 04076 56, 175, 190, 155, 160, 142, 288, 289, 213, 189, 04077 192, 189, 192, 236, 236, 44, 165, 179, 186, 195, 04078 87, 87, 315, 87, 87, 160, 137, 316, 170, 315, 04079 109, 52, 89, 95, 232, 233, 234, 291, 289, 29, 04080 107, 245, 140, 302, 319, 140, 302, 52, 140, 302, 04081 52, 276, 54, 55, 57, 277, 285, 52, 145, 235, 04082 238, 293, 295, 296, 299, 301, 319, 156, 95, 186, 04083 172, 184, 111, 162, 184, 162, 184, 164, 144, 87, 04084 162, 184, 162, 184, 164, 186, 197, 256, 319, 15, 04085 230, 319, 14, 229, 230, 230, 203, 205, 226, 140, 04086 227, 315, 161, 317, 161, 155, 315, 226, 314, 289, 04087 155, 317, 177, 156, 156, 184, 236, 87, 314, 186, 04088 234, 140, 291, 140, 314, 238, 156, 156, 292, 297, 04089 299, 301, 293, 294, 299, 293, 156, 109, 52, 239, 04090 240, 290, 238, 114, 140, 302, 140, 302, 140, 302, 04091 10, 186, 184, 162, 184, 88, 257, 319, 156, 9, 04092 258, 319, 161, 226, 226, 156, 156, 186, 156, 228, 04093 210, 317, 226, 314, 226, 214, 10, 137, 156, 314, 04094 233, 140, 95, 232, 314, 10, 137, 140, 302, 140, 04095 302, 140, 302, 140, 302, 302, 137, 86, 215, 140, 04096 114, 296, 299, 293, 295, 299, 293, 86, 174, 215, 04097 282, 285, 227, 156, 227, 226, 226, 230, 253, 254, 04098 207, 155, 288, 137, 140, 233, 140, 291, 293, 299, 04099 293, 293, 56, 85, 240, 140, 302, 140, 302, 302, 04100 140, 302, 302, 56, 85, 138, 139, 156, 156, 156, 04101 226, 155, 233, 140, 302, 140, 302, 302, 302, 52, 04102 56, 293, 299, 293, 293, 52, 56, 190, 52, 56, 04103 255, 229, 226, 226, 233, 293, 302, 140, 302, 302, 04104 302, 315, 302, 293, 302 04105 }; 04106 04107 #define yyerrok (yyerrstatus = 0) 04108 #define yyclearin (yychar = YYEMPTY) 04109 #define YYEMPTY (-2) 04110 #define YYEOF 0 04111 04112 #define YYACCEPT goto yyacceptlab 04113 #define YYABORT goto yyabortlab 04114 #define YYERROR goto yyerrorlab 04115 04116 04117 /* Like YYERROR except do call yyerror. This remains here temporarily 04118 to ease the transition to the new meaning of YYERROR, for GCC. 04119 Once GCC version 2 has supplanted version 1, this can go. However, 04120 YYFAIL appears to be in use. Nevertheless, it is formally deprecated 04121 in Bison 2.4.2's NEWS entry, where a plan to phase it out is 04122 discussed. */ 04123 04124 #define YYFAIL goto yyerrlab 04125 #if defined YYFAIL 04126 /* This is here to suppress warnings from the GCC cpp's 04127 -Wunused-macros. Normally we don't worry about that warning, but 04128 some users do, and we want to make it easy for users to remove 04129 YYFAIL uses, which will produce warnings from Bison 2.5. */ 04130 #endif 04131 04132 #define YYRECOVERING() (!!yyerrstatus) 04133 04134 #define YYBACKUP(Token, Value) \ 04135 do \ 04136 if (yychar == YYEMPTY && yylen == 1) \ 04137 { \ 04138 yychar = (Token); \ 04139 yylval = (Value); \ 04140 yytoken = YYTRANSLATE (yychar); \ 04141 YYPOPSTACK (1); \ 04142 goto yybackup; \ 04143 } \ 04144 else \ 04145 { \ 04146 parser_yyerror (parser, YY_("syntax error: cannot back up")); \ 04147 YYERROR; \ 04148 } \ 04149 while (YYID (0)) 04150 04151 04152 #define YYTERROR 1 04153 #define YYERRCODE 256 04154 04155 04156 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. 04157 If N is 0, then set CURRENT to the empty location which ends 04158 the previous symbol: RHS[0] (always defined). */ 04159 04160 #define YYRHSLOC(Rhs, K) ((Rhs)[K]) 04161 #ifndef YYLLOC_DEFAULT 04162 # define YYLLOC_DEFAULT(Current, Rhs, N) \ 04163 do \ 04164 if (YYID (N)) \ 04165 { \ 04166 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ 04167 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ 04168 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ 04169 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ 04170 } \ 04171 else \ 04172 { \ 04173 (Current).first_line = (Current).last_line = \ 04174 YYRHSLOC (Rhs, 0).last_line; \ 04175 (Current).first_column = (Current).last_column = \ 04176 YYRHSLOC (Rhs, 0).last_column; \ 04177 } \ 04178 while (YYID (0)) 04179 #endif 04180 04181 04182 /* YY_LOCATION_PRINT -- Print the location on the stream. 04183 This macro was not mandated originally: define only if we know 04184 we won't break user code: when these are the locations we know. */ 04185 04186 #ifndef YY_LOCATION_PRINT 04187 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL 04188 # define YY_LOCATION_PRINT(File, Loc) \ 04189 fprintf (File, "%d.%d-%d.%d", \ 04190 (Loc).first_line, (Loc).first_column, \ 04191 (Loc).last_line, (Loc).last_column) 04192 # else 04193 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 04194 # endif 04195 #endif 04196 04197 04198 /* YYLEX -- calling `yylex' with the right arguments. */ 04199 04200 #ifdef YYLEX_PARAM 04201 # define YYLEX yylex (&yylval, YYLEX_PARAM) 04202 #else 04203 # define YYLEX yylex (&yylval) 04204 #endif 04205 04206 /* Enable debugging if requested. */ 04207 #if YYDEBUG 04208 04209 # ifndef YYFPRINTF 04210 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 04211 # define YYFPRINTF fprintf 04212 # endif 04213 04214 # define YYDPRINTF(Args) \ 04215 do { \ 04216 if (yydebug) \ 04217 YYFPRINTF Args; \ 04218 } while (YYID (0)) 04219 04220 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 04221 do { \ 04222 if (yydebug) \ 04223 { \ 04224 YYFPRINTF (stderr, "%s ", Title); \ 04225 yy_symbol_print (stderr, \ 04226 Type, Value, parser); \ 04227 YYFPRINTF (stderr, "\n"); \ 04228 } \ 04229 } while (YYID (0)) 04230 04231 04232 /*--------------------------------. 04233 | Print this symbol on YYOUTPUT. | 04234 `--------------------------------*/ 04235 04236 /*ARGSUSED*/ 04237 #if (defined __STDC__ || defined __C99__FUNC__ \ 04238 || defined __cplusplus || defined _MSC_VER) 04239 static void 04240 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser) 04241 #else 04242 static void 04243 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser) 04244 FILE *yyoutput; 04245 int yytype; 04246 YYSTYPE const * const yyvaluep; 04247 struct parser_params *parser; 04248 #endif 04249 { 04250 if (!yyvaluep) 04251 return; 04252 YYUSE (parser); 04253 # ifdef YYPRINT 04254 if (yytype < YYNTOKENS) 04255 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 04256 # else 04257 YYUSE (yyoutput); 04258 # endif 04259 switch (yytype) 04260 { 04261 default: 04262 break; 04263 } 04264 } 04265 04266 04267 /*--------------------------------. 04268 | Print this symbol on YYOUTPUT. | 04269 `--------------------------------*/ 04270 04271 #if (defined __STDC__ || defined __C99__FUNC__ \ 04272 || defined __cplusplus || defined _MSC_VER) 04273 static void 04274 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser) 04275 #else 04276 static void 04277 yy_symbol_print (yyoutput, yytype, yyvaluep, parser) 04278 FILE *yyoutput; 04279 int yytype; 04280 YYSTYPE const * const yyvaluep; 04281 struct parser_params *parser; 04282 #endif 04283 { 04284 if (yytype < YYNTOKENS) 04285 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 04286 else 04287 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 04288 04289 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser); 04290 YYFPRINTF (yyoutput, ")"); 04291 } 04292 04293 /*------------------------------------------------------------------. 04294 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 04295 | TOP (included). | 04296 `------------------------------------------------------------------*/ 04297 04298 #if (defined __STDC__ || defined __C99__FUNC__ \ 04299 || defined __cplusplus || defined _MSC_VER) 04300 static void 04301 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 04302 #else 04303 static void 04304 yy_stack_print (yybottom, yytop) 04305 yytype_int16 *yybottom; 04306 yytype_int16 *yytop; 04307 #endif 04308 { 04309 YYFPRINTF (stderr, "Stack now"); 04310 for (; yybottom <= yytop; yybottom++) 04311 { 04312 int yybot = *yybottom; 04313 YYFPRINTF (stderr, " %d", yybot); 04314 } 04315 YYFPRINTF (stderr, "\n"); 04316 } 04317 04318 # define YY_STACK_PRINT(Bottom, Top) \ 04319 do { \ 04320 if (yydebug) \ 04321 yy_stack_print ((Bottom), (Top)); \ 04322 } while (YYID (0)) 04323 04324 04325 /*------------------------------------------------. 04326 | Report that the YYRULE is going to be reduced. | 04327 `------------------------------------------------*/ 04328 04329 #if (defined __STDC__ || defined __C99__FUNC__ \ 04330 || defined __cplusplus || defined _MSC_VER) 04331 static void 04332 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser) 04333 #else 04334 static void 04335 yy_reduce_print (yyvsp, yyrule, parser) 04336 YYSTYPE *yyvsp; 04337 int yyrule; 04338 struct parser_params *parser; 04339 #endif 04340 { 04341 int yynrhs = yyr2[yyrule]; 04342 int yyi; 04343 unsigned long int yylno = yyrline[yyrule]; 04344 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 04345 yyrule - 1, yylno); 04346 /* The symbols being reduced. */ 04347 for (yyi = 0; yyi < yynrhs; yyi++) 04348 { 04349 YYFPRINTF (stderr, " $%d = ", yyi + 1); 04350 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 04351 &(yyvsp[(yyi + 1) - (yynrhs)]) 04352 , parser); 04353 YYFPRINTF (stderr, "\n"); 04354 } 04355 } 04356 04357 # define YY_REDUCE_PRINT(Rule) \ 04358 do { \ 04359 if (yydebug) \ 04360 yy_reduce_print (yyvsp, Rule, parser); \ 04361 } while (YYID (0)) 04362 04363 /* Nonzero means print parse trace. It is left uninitialized so that 04364 multiple parsers can coexist. */ 04365 #ifndef yydebug 04366 int yydebug; 04367 #endif 04368 #else /* !YYDEBUG */ 04369 # define YYDPRINTF(Args) 04370 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) 04371 # define YY_STACK_PRINT(Bottom, Top) 04372 # define YY_REDUCE_PRINT(Rule) 04373 #endif /* !YYDEBUG */ 04374 04375 04376 /* YYINITDEPTH -- initial size of the parser's stacks. */ 04377 #ifndef YYINITDEPTH 04378 # define YYINITDEPTH 200 04379 #endif 04380 04381 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 04382 if the built-in stack extension method is used). 04383 04384 Do not make this value too large; the results are undefined if 04385 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 04386 evaluated with infinite-precision integer arithmetic. */ 04387 04388 #ifndef YYMAXDEPTH 04389 # define YYMAXDEPTH 10000 04390 #endif 04391 04392 04393 04394 #if YYERROR_VERBOSE 04395 04396 # ifndef yystrlen 04397 # if defined __GLIBC__ && defined _STRING_H 04398 # define yystrlen strlen 04399 # else 04400 /* Return the length of YYSTR. */ 04401 #if (defined __STDC__ || defined __C99__FUNC__ \ 04402 || defined __cplusplus || defined _MSC_VER) 04403 static YYSIZE_T 04404 yystrlen (const char *yystr) 04405 #else 04406 static YYSIZE_T 04407 yystrlen (yystr) 04408 const char *yystr; 04409 #endif 04410 { 04411 YYSIZE_T yylen; 04412 for (yylen = 0; yystr[yylen]; yylen++) 04413 continue; 04414 return yylen; 04415 } 04416 # endif 04417 # endif 04418 04419 # ifndef yystpcpy 04420 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 04421 # define yystpcpy stpcpy 04422 # else 04423 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 04424 YYDEST. */ 04425 #if (defined __STDC__ || defined __C99__FUNC__ \ 04426 || defined __cplusplus || defined _MSC_VER) 04427 static char * 04428 yystpcpy (char *yydest, const char *yysrc) 04429 #else 04430 static char * 04431 yystpcpy (yydest, yysrc) 04432 char *yydest; 04433 const char *yysrc; 04434 #endif 04435 { 04436 char *yyd = yydest; 04437 const char *yys = yysrc; 04438 04439 while ((*yyd++ = *yys++) != '\0') 04440 continue; 04441 04442 return yyd - 1; 04443 } 04444 # endif 04445 # endif 04446 04447 # ifndef yytnamerr 04448 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary 04449 quotes and backslashes, so that it's suitable for yyerror. The 04450 heuristic is that double-quoting is unnecessary unless the string 04451 contains an apostrophe, a comma, or backslash (other than 04452 backslash-backslash). YYSTR is taken from yytname. If YYRES is 04453 null, do not copy; instead, return the length of what the result 04454 would have been. */ 04455 static YYSIZE_T 04456 yytnamerr (char *yyres, const char *yystr) 04457 { 04458 if (*yystr == '"') 04459 { 04460 YYSIZE_T yyn = 0; 04461 char const *yyp = yystr; 04462 04463 for (;;) 04464 switch (*++yyp) 04465 { 04466 case '\'': 04467 case ',': 04468 goto do_not_strip_quotes; 04469 04470 case '\\': 04471 if (*++yyp != '\\') 04472 goto do_not_strip_quotes; 04473 /* Fall through. */ 04474 default: 04475 if (yyres) 04476 yyres[yyn] = *yyp; 04477 yyn++; 04478 break; 04479 04480 case '"': 04481 if (yyres) 04482 yyres[yyn] = '\0'; 04483 return yyn; 04484 } 04485 do_not_strip_quotes: ; 04486 } 04487 04488 if (! yyres) 04489 return yystrlen (yystr); 04490 04491 return yystpcpy (yyres, yystr) - yyres; 04492 } 04493 # endif 04494 04495 /* Copy into YYRESULT an error message about the unexpected token 04496 YYCHAR while in state YYSTATE. Return the number of bytes copied, 04497 including the terminating null byte. If YYRESULT is null, do not 04498 copy anything; just return the number of bytes that would be 04499 copied. As a special case, return 0 if an ordinary "syntax error" 04500 message will do. Return YYSIZE_MAXIMUM if overflow occurs during 04501 size calculation. */ 04502 static YYSIZE_T 04503 yysyntax_error (char *yyresult, int yystate, int yychar) 04504 { 04505 int yyn = yypact[yystate]; 04506 04507 if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) 04508 return 0; 04509 else 04510 { 04511 int yytype = YYTRANSLATE (yychar); 04512 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); 04513 YYSIZE_T yysize = yysize0; 04514 YYSIZE_T yysize1; 04515 int yysize_overflow = 0; 04516 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 04517 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 04518 int yyx; 04519 04520 # if 0 04521 /* This is so xgettext sees the translatable formats that are 04522 constructed on the fly. */ 04523 YY_("syntax error, unexpected %s"); 04524 YY_("syntax error, unexpected %s, expecting %s"); 04525 YY_("syntax error, unexpected %s, expecting %s or %s"); 04526 YY_("syntax error, unexpected %s, expecting %s or %s or %s"); 04527 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); 04528 # endif 04529 char *yyfmt; 04530 char const *yyf; 04531 static char const yyunexpected[] = "syntax error, unexpected %s"; 04532 static char const yyexpecting[] = ", expecting %s"; 04533 static char const yyor[] = " or %s"; 04534 char yyformat[sizeof yyunexpected 04535 + sizeof yyexpecting - 1 04536 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) 04537 * (sizeof yyor - 1))]; 04538 char const *yyprefix = yyexpecting; 04539 04540 /* Start YYX at -YYN if negative to avoid negative indexes in 04541 YYCHECK. */ 04542 int yyxbegin = yyn < 0 ? -yyn : 0; 04543 04544 /* Stay within bounds of both yycheck and yytname. */ 04545 int yychecklim = YYLAST - yyn + 1; 04546 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 04547 int yycount = 1; 04548 04549 yyarg[0] = yytname[yytype]; 04550 yyfmt = yystpcpy (yyformat, yyunexpected); 04551 04552 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 04553 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) 04554 { 04555 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 04556 { 04557 yycount = 1; 04558 yysize = yysize0; 04559 yyformat[sizeof yyunexpected - 1] = '\0'; 04560 break; 04561 } 04562 yyarg[yycount++] = yytname[yyx]; 04563 yysize1 = yysize + yytnamerr (0, yytname[yyx]); 04564 yysize_overflow |= (yysize1 < yysize); 04565 yysize = yysize1; 04566 yyfmt = yystpcpy (yyfmt, yyprefix); 04567 yyprefix = yyor; 04568 } 04569 04570 yyf = YY_(yyformat); 04571 yysize1 = yysize + yystrlen (yyf); 04572 yysize_overflow |= (yysize1 < yysize); 04573 yysize = yysize1; 04574 04575 if (yysize_overflow) 04576 return YYSIZE_MAXIMUM; 04577 04578 if (yyresult) 04579 { 04580 /* Avoid sprintf, as that infringes on the user's name space. 04581 Don't have undefined behavior even if the translation 04582 produced a string with the wrong number of "%s"s. */ 04583 char *yyp = yyresult; 04584 int yyi = 0; 04585 while ((*yyp = *yyf) != '\0') 04586 { 04587 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) 04588 { 04589 yyp += yytnamerr (yyp, yyarg[yyi++]); 04590 yyf += 2; 04591 } 04592 else 04593 { 04594 yyp++; 04595 yyf++; 04596 } 04597 } 04598 } 04599 return yysize; 04600 } 04601 } 04602 #endif /* YYERROR_VERBOSE */ 04603 04604 04605 /*-----------------------------------------------. 04606 | Release the memory associated to this symbol. | 04607 `-----------------------------------------------*/ 04608 04609 /*ARGSUSED*/ 04610 #if (defined __STDC__ || defined __C99__FUNC__ \ 04611 || defined __cplusplus || defined _MSC_VER) 04612 static void 04613 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser) 04614 #else 04615 static void 04616 yydestruct (yymsg, yytype, yyvaluep, parser) 04617 const char *yymsg; 04618 int yytype; 04619 YYSTYPE *yyvaluep; 04620 struct parser_params *parser; 04621 #endif 04622 { 04623 YYUSE (yyvaluep); 04624 YYUSE (parser); 04625 04626 if (!yymsg) 04627 yymsg = "Deleting"; 04628 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 04629 04630 switch (yytype) 04631 { 04632 04633 default: 04634 break; 04635 } 04636 } 04637 04638 /* Prevent warnings from -Wmissing-prototypes. */ 04639 #ifdef YYPARSE_PARAM 04640 #if defined __STDC__ || defined __cplusplus 04641 int yyparse (void *YYPARSE_PARAM); 04642 #else 04643 int yyparse (); 04644 #endif 04645 #else /* ! YYPARSE_PARAM */ 04646 #if defined __STDC__ || defined __cplusplus 04647 int yyparse (struct parser_params *parser); 04648 #else 04649 int yyparse (); 04650 #endif 04651 #endif /* ! YYPARSE_PARAM */ 04652 04653 04654 04655 04656 04657 /*-------------------------. 04658 | yyparse or yypush_parse. | 04659 `-------------------------*/ 04660 04661 #ifdef YYPARSE_PARAM 04662 #if (defined __STDC__ || defined __C99__FUNC__ \ 04663 || defined __cplusplus || defined _MSC_VER) 04664 int 04665 yyparse (void *YYPARSE_PARAM) 04666 #else 04667 int 04668 yyparse (YYPARSE_PARAM) 04669 void *YYPARSE_PARAM; 04670 #endif 04671 #else /* ! YYPARSE_PARAM */ 04672 #if (defined __STDC__ || defined __C99__FUNC__ \ 04673 || defined __cplusplus || defined _MSC_VER) 04674 int 04675 yyparse (struct parser_params *parser) 04676 #else 04677 int 04678 yyparse (parser) 04679 struct parser_params *parser; 04680 #endif 04681 #endif 04682 { 04683 /* The lookahead symbol. */ 04684 int yychar; 04685 04686 /* The semantic value of the lookahead symbol. */ 04687 YYSTYPE yylval; 04688 04689 /* Number of syntax errors so far. */ 04690 int yynerrs; 04691 04692 int yystate; 04693 /* Number of tokens to shift before error messages enabled. */ 04694 int yyerrstatus; 04695 04696 /* The stacks and their tools: 04697 `yyss': related to states. 04698 `yyvs': related to semantic values. 04699 04700 Refer to the stacks thru separate pointers, to allow yyoverflow 04701 to reallocate them elsewhere. */ 04702 04703 /* The state stack. */ 04704 yytype_int16 yyssa[YYINITDEPTH]; 04705 yytype_int16 *yyss; 04706 yytype_int16 *yyssp; 04707 04708 /* The semantic value stack. */ 04709 YYSTYPE yyvsa[YYINITDEPTH]; 04710 YYSTYPE *yyvs; 04711 YYSTYPE *yyvsp; 04712 04713 YYSIZE_T yystacksize; 04714 04715 int yyn; 04716 int yyresult; 04717 /* Lookahead token as an internal (translated) token number. */ 04718 int yytoken; 04719 /* The variables used to return semantic value and location from the 04720 action routines. */ 04721 YYSTYPE yyval; 04722 04723 #if YYERROR_VERBOSE 04724 /* Buffer for error messages, and its allocated size. */ 04725 char yymsgbuf[128]; 04726 char *yymsg = yymsgbuf; 04727 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 04728 #endif 04729 04730 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 04731 04732 /* The number of symbols on the RHS of the reduced rule. 04733 Keep to zero when no symbol should be popped. */ 04734 int yylen = 0; 04735 04736 yytoken = 0; 04737 yyss = yyssa; 04738 yyvs = yyvsa; 04739 yystacksize = YYINITDEPTH; 04740 04741 YYDPRINTF ((stderr, "Starting parse\n")); 04742 04743 yystate = 0; 04744 yyerrstatus = 0; 04745 yynerrs = 0; 04746 yychar = YYEMPTY; /* Cause a token to be read. */ 04747 04748 /* Initialize stack pointers. 04749 Waste one element of value and location stack 04750 so that they stay on the same level as the state stack. 04751 The wasted elements are never initialized. */ 04752 yyssp = yyss; 04753 yyvsp = yyvs; 04754 04755 goto yysetstate; 04756 04757 /*------------------------------------------------------------. 04758 | yynewstate -- Push a new state, which is found in yystate. | 04759 `------------------------------------------------------------*/ 04760 yynewstate: 04761 /* In all cases, when you get here, the value and location stacks 04762 have just been pushed. So pushing a state here evens the stacks. */ 04763 yyssp++; 04764 04765 yysetstate: 04766 *yyssp = yystate; 04767 04768 if (yyss + yystacksize - 1 <= yyssp) 04769 { 04770 /* Get the current used size of the three stacks, in elements. */ 04771 YYSIZE_T yysize = yyssp - yyss + 1; 04772 04773 #ifdef yyoverflow 04774 { 04775 /* Give user a chance to reallocate the stack. Use copies of 04776 these so that the &'s don't force the real ones into 04777 memory. */ 04778 YYSTYPE *yyvs1 = yyvs; 04779 yytype_int16 *yyss1 = yyss; 04780 04781 /* Each stack pointer address is followed by the size of the 04782 data in use in that stack, in bytes. This used to be a 04783 conditional around just the two extra args, but that might 04784 be undefined if yyoverflow is a macro. */ 04785 yyoverflow (YY_("memory exhausted"), 04786 &yyss1, yysize * sizeof (*yyssp), 04787 &yyvs1, yysize * sizeof (*yyvsp), 04788 &yystacksize); 04789 04790 yyss = yyss1; 04791 yyvs = yyvs1; 04792 } 04793 #else /* no yyoverflow */ 04794 # ifndef YYSTACK_RELOCATE 04795 goto yyexhaustedlab; 04796 # else 04797 /* Extend the stack our own way. */ 04798 if (YYMAXDEPTH <= yystacksize) 04799 goto yyexhaustedlab; 04800 yystacksize *= 2; 04801 if (YYMAXDEPTH < yystacksize) 04802 yystacksize = YYMAXDEPTH; 04803 04804 { 04805 yytype_int16 *yyss1 = yyss; 04806 union yyalloc *yyptr = 04807 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 04808 if (! yyptr) 04809 goto yyexhaustedlab; 04810 YYSTACK_RELOCATE (yyss_alloc, yyss); 04811 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 04812 # undef YYSTACK_RELOCATE 04813 if (yyss1 != yyssa) 04814 YYSTACK_FREE (yyss1); 04815 } 04816 # endif 04817 #endif /* no yyoverflow */ 04818 04819 yyssp = yyss + yysize - 1; 04820 yyvsp = yyvs + yysize - 1; 04821 04822 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 04823 (unsigned long int) yystacksize)); 04824 04825 if (yyss + yystacksize - 1 <= yyssp) 04826 YYABORT; 04827 } 04828 04829 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 04830 04831 if (yystate == YYFINAL) 04832 YYACCEPT; 04833 04834 goto yybackup; 04835 04836 /*-----------. 04837 | yybackup. | 04838 `-----------*/ 04839 yybackup: 04840 04841 /* Do appropriate processing given the current state. Read a 04842 lookahead token if we need one and don't already have one. */ 04843 04844 /* First try to decide what to do without reference to lookahead token. */ 04845 yyn = yypact[yystate]; 04846 if (yyn == YYPACT_NINF) 04847 goto yydefault; 04848 04849 /* Not known => get a lookahead token if don't already have one. */ 04850 04851 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 04852 if (yychar == YYEMPTY) 04853 { 04854 YYDPRINTF ((stderr, "Reading a token: ")); 04855 yychar = YYLEX; 04856 } 04857 04858 if (yychar <= YYEOF) 04859 { 04860 yychar = yytoken = YYEOF; 04861 YYDPRINTF ((stderr, "Now at end of input.\n")); 04862 } 04863 else 04864 { 04865 yytoken = YYTRANSLATE (yychar); 04866 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 04867 } 04868 04869 /* If the proper action on seeing token YYTOKEN is to reduce or to 04870 detect an error, take that action. */ 04871 yyn += yytoken; 04872 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 04873 goto yydefault; 04874 yyn = yytable[yyn]; 04875 if (yyn <= 0) 04876 { 04877 if (yyn == 0 || yyn == YYTABLE_NINF) 04878 goto yyerrlab; 04879 yyn = -yyn; 04880 goto yyreduce; 04881 } 04882 04883 /* Count tokens shifted since error; after three, turn off error 04884 status. */ 04885 if (yyerrstatus) 04886 yyerrstatus--; 04887 04888 /* Shift the lookahead token. */ 04889 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 04890 04891 /* Discard the shifted token. */ 04892 yychar = YYEMPTY; 04893 04894 yystate = yyn; 04895 *++yyvsp = yylval; 04896 04897 goto yynewstate; 04898 04899 04900 /*-----------------------------------------------------------. 04901 | yydefault -- do the default action for the current state. | 04902 `-----------------------------------------------------------*/ 04903 yydefault: 04904 yyn = yydefact[yystate]; 04905 if (yyn == 0) 04906 goto yyerrlab; 04907 goto yyreduce; 04908 04909 04910 /*-----------------------------. 04911 | yyreduce -- Do a reduction. | 04912 `-----------------------------*/ 04913 yyreduce: 04914 /* yyn is the number of a rule to reduce with. */ 04915 yylen = yyr2[yyn]; 04916 04917 /* If YYLEN is nonzero, implement the default value of the action: 04918 `$$ = $1'. 04919 04920 Otherwise, the following line sets YYVAL to garbage. 04921 This behavior is undocumented and Bison 04922 users should not rely upon it. Assigning to YYVAL 04923 unconditionally makes the parser a bit smaller, and it avoids a 04924 GCC warning that YYVAL may be used uninitialized. */ 04925 yyval = yyvsp[1-yylen]; 04926 04927 04928 YY_REDUCE_PRINT (yyn); 04929 switch (yyn) 04930 { 04931 case 2: 04932 04933 /* Line 1464 of yacc.c */ 04934 #line 786 "parse.y" 04935 { 04936 lex_state = EXPR_BEG; 04937 /*%%%*/ 04938 local_push(compile_for_eval || rb_parse_in_main()); 04939 /*% 04940 local_push(0); 04941 %*/ 04942 ;} 04943 break; 04944 04945 case 3: 04946 04947 /* Line 1464 of yacc.c */ 04948 #line 795 "parse.y" 04949 { 04950 /*%%%*/ 04951 if ((yyvsp[(2) - (2)].node) && !compile_for_eval) { 04952 /* last expression should not be void */ 04953 if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node)); 04954 else { 04955 NODE *node = (yyvsp[(2) - (2)].node); 04956 while (node->nd_next) { 04957 node = node->nd_next; 04958 } 04959 void_expr(node->nd_head); 04960 } 04961 } 04962 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node))); 04963 /*% 04964 $$ = $2; 04965 parser->result = dispatch1(program, $$); 04966 %*/ 04967 local_pop(); 04968 ;} 04969 break; 04970 04971 case 4: 04972 04973 /* Line 1464 of yacc.c */ 04974 #line 818 "parse.y" 04975 { 04976 /*%%%*/ 04977 void_stmts((yyvsp[(1) - (2)].node)); 04978 fixup_nodes(&deferred_nodes); 04979 /*% 04980 %*/ 04981 (yyval.node) = (yyvsp[(1) - (2)].node); 04982 ;} 04983 break; 04984 04985 case 5: 04986 04987 /* Line 1464 of yacc.c */ 04988 #line 829 "parse.y" 04989 { 04990 /*%%%*/ 04991 (yyval.node) = NEW_BEGIN(0); 04992 /*% 04993 $$ = dispatch2(stmts_add, dispatch0(stmts_new), 04994 dispatch0(void_stmt)); 04995 %*/ 04996 ;} 04997 break; 04998 04999 case 6: 05000 05001 /* Line 1464 of yacc.c */ 05002 #line 838 "parse.y" 05003 { 05004 /*%%%*/ 05005 (yyval.node) = newline_node((yyvsp[(1) - (1)].node)); 05006 /*% 05007 $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1); 05008 %*/ 05009 ;} 05010 break; 05011 05012 case 7: 05013 05014 /* Line 1464 of yacc.c */ 05015 #line 846 "parse.y" 05016 { 05017 /*%%%*/ 05018 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node))); 05019 /*% 05020 $$ = dispatch2(stmts_add, $1, $3); 05021 %*/ 05022 ;} 05023 break; 05024 05025 case 8: 05026 05027 /* Line 1464 of yacc.c */ 05028 #line 854 "parse.y" 05029 { 05030 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node)); 05031 ;} 05032 break; 05033 05034 case 10: 05035 05036 /* Line 1464 of yacc.c */ 05037 #line 861 "parse.y" 05038 { 05039 if (in_def || in_single) { 05040 yyerror("BEGIN in method"); 05041 } 05042 /*%%%*/ 05043 /* local_push(0); */ 05044 /*% 05045 %*/ 05046 ;} 05047 break; 05048 05049 case 11: 05050 05051 /* Line 1464 of yacc.c */ 05052 #line 871 "parse.y" 05053 { 05054 /*%%%*/ 05055 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin, 05056 (yyvsp[(4) - (5)].node)); 05057 /* NEW_PREEXE($4)); */ 05058 /* local_pop(); */ 05059 (yyval.node) = NEW_BEGIN(0); 05060 /*% 05061 $$ = dispatch1(BEGIN, $4); 05062 %*/ 05063 ;} 05064 break; 05065 05066 case 12: 05067 05068 /* Line 1464 of yacc.c */ 05069 #line 888 "parse.y" 05070 { 05071 /*%%%*/ 05072 (yyval.node) = (yyvsp[(1) - (4)].node); 05073 if ((yyvsp[(2) - (4)].node)) { 05074 (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node)); 05075 } 05076 else if ((yyvsp[(3) - (4)].node)) { 05077 rb_warn0("else without rescue is useless"); 05078 (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node)); 05079 } 05080 if ((yyvsp[(4) - (4)].node)) { 05081 if ((yyval.node)) { 05082 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node)); 05083 } 05084 else { 05085 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL()); 05086 } 05087 } 05088 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 05089 /*% 05090 $$ = dispatch4(bodystmt, 05091 escape_Qundef($1), 05092 escape_Qundef($2), 05093 escape_Qundef($3), 05094 escape_Qundef($4)); 05095 %*/ 05096 ;} 05097 break; 05098 05099 case 13: 05100 05101 /* Line 1464 of yacc.c */ 05102 #line 918 "parse.y" 05103 { 05104 /*%%%*/ 05105 void_stmts((yyvsp[(1) - (2)].node)); 05106 fixup_nodes(&deferred_nodes); 05107 /*% 05108 %*/ 05109 (yyval.node) = (yyvsp[(1) - (2)].node); 05110 ;} 05111 break; 05112 05113 case 14: 05114 05115 /* Line 1464 of yacc.c */ 05116 #line 929 "parse.y" 05117 { 05118 /*%%%*/ 05119 (yyval.node) = NEW_BEGIN(0); 05120 /*% 05121 $$ = dispatch2(stmts_add, dispatch0(stmts_new), 05122 dispatch0(void_stmt)); 05123 %*/ 05124 ;} 05125 break; 05126 05127 case 15: 05128 05129 /* Line 1464 of yacc.c */ 05130 #line 938 "parse.y" 05131 { 05132 /*%%%*/ 05133 (yyval.node) = newline_node((yyvsp[(1) - (1)].node)); 05134 /*% 05135 $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1); 05136 %*/ 05137 ;} 05138 break; 05139 05140 case 16: 05141 05142 /* Line 1464 of yacc.c */ 05143 #line 946 "parse.y" 05144 { 05145 /*%%%*/ 05146 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node))); 05147 /*% 05148 $$ = dispatch2(stmts_add, $1, $3); 05149 %*/ 05150 ;} 05151 break; 05152 05153 case 17: 05154 05155 /* Line 1464 of yacc.c */ 05156 #line 954 "parse.y" 05157 { 05158 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node)); 05159 ;} 05160 break; 05161 05162 case 18: 05163 05164 /* Line 1464 of yacc.c */ 05165 #line 959 "parse.y" 05166 {lex_state = EXPR_FNAME;;} 05167 break; 05168 05169 case 19: 05170 05171 /* Line 1464 of yacc.c */ 05172 #line 960 "parse.y" 05173 { 05174 /*%%%*/ 05175 (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node)); 05176 /*% 05177 $$ = dispatch2(alias, $2, $4); 05178 %*/ 05179 ;} 05180 break; 05181 05182 case 20: 05183 05184 /* Line 1464 of yacc.c */ 05185 #line 968 "parse.y" 05186 { 05187 /*%%%*/ 05188 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id)); 05189 /*% 05190 $$ = dispatch2(var_alias, $2, $3); 05191 %*/ 05192 ;} 05193 break; 05194 05195 case 21: 05196 05197 /* Line 1464 of yacc.c */ 05198 #line 976 "parse.y" 05199 { 05200 /*%%%*/ 05201 char buf[2]; 05202 buf[0] = '$'; 05203 buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth; 05204 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2)); 05205 /*% 05206 $$ = dispatch2(var_alias, $2, $3); 05207 %*/ 05208 ;} 05209 break; 05210 05211 case 22: 05212 05213 /* Line 1464 of yacc.c */ 05214 #line 987 "parse.y" 05215 { 05216 /*%%%*/ 05217 yyerror("can't make alias for the number variables"); 05218 (yyval.node) = NEW_BEGIN(0); 05219 /*% 05220 $$ = dispatch2(var_alias, $2, $3); 05221 $$ = dispatch1(alias_error, $$); 05222 %*/ 05223 ;} 05224 break; 05225 05226 case 23: 05227 05228 /* Line 1464 of yacc.c */ 05229 #line 997 "parse.y" 05230 { 05231 /*%%%*/ 05232 (yyval.node) = (yyvsp[(2) - (2)].node); 05233 /*% 05234 $$ = dispatch1(undef, $2); 05235 %*/ 05236 ;} 05237 break; 05238 05239 case 24: 05240 05241 /* Line 1464 of yacc.c */ 05242 #line 1005 "parse.y" 05243 { 05244 /*%%%*/ 05245 (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0); 05246 fixpos((yyval.node), (yyvsp[(3) - (3)].node)); 05247 /*% 05248 $$ = dispatch2(if_mod, $3, $1); 05249 %*/ 05250 ;} 05251 break; 05252 05253 case 25: 05254 05255 /* Line 1464 of yacc.c */ 05256 #line 1014 "parse.y" 05257 { 05258 /*%%%*/ 05259 (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0); 05260 fixpos((yyval.node), (yyvsp[(3) - (3)].node)); 05261 /*% 05262 $$ = dispatch2(unless_mod, $3, $1); 05263 %*/ 05264 ;} 05265 break; 05266 05267 case 26: 05268 05269 /* Line 1464 of yacc.c */ 05270 #line 1023 "parse.y" 05271 { 05272 /*%%%*/ 05273 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) { 05274 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0); 05275 } 05276 else { 05277 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1); 05278 } 05279 /*% 05280 $$ = dispatch2(while_mod, $3, $1); 05281 %*/ 05282 ;} 05283 break; 05284 05285 case 27: 05286 05287 /* Line 1464 of yacc.c */ 05288 #line 1036 "parse.y" 05289 { 05290 /*%%%*/ 05291 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) { 05292 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0); 05293 } 05294 else { 05295 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1); 05296 } 05297 /*% 05298 $$ = dispatch2(until_mod, $3, $1); 05299 %*/ 05300 ;} 05301 break; 05302 05303 case 28: 05304 05305 /* Line 1464 of yacc.c */ 05306 #line 1049 "parse.y" 05307 { 05308 /*%%%*/ 05309 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0); 05310 (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0); 05311 /*% 05312 $$ = dispatch2(rescue_mod, $3, $1); 05313 %*/ 05314 ;} 05315 break; 05316 05317 case 29: 05318 05319 /* Line 1464 of yacc.c */ 05320 #line 1058 "parse.y" 05321 { 05322 if (in_def || in_single) { 05323 rb_warn0("END in method; use at_exit"); 05324 } 05325 /*%%%*/ 05326 (yyval.node) = NEW_POSTEXE(NEW_NODE( 05327 NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */)); 05328 /*% 05329 $$ = dispatch1(END, $3); 05330 %*/ 05331 ;} 05332 break; 05333 05334 case 30: 05335 05336 /* Line 1464 of yacc.c */ 05337 #line 1070 "parse.y" 05338 { 05339 /*%%%*/ 05340 value_expr((yyvsp[(3) - (3)].node)); 05341 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05342 /*% 05343 $$ = dispatch2(assign, $1, $3); 05344 %*/ 05345 ;} 05346 break; 05347 05348 case 31: 05349 05350 /* Line 1464 of yacc.c */ 05351 #line 1079 "parse.y" 05352 { 05353 /*%%%*/ 05354 value_expr((yyvsp[(3) - (3)].node)); 05355 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05356 (yyval.node) = (yyvsp[(1) - (3)].node); 05357 /*% 05358 $$ = dispatch2(massign, $1, $3); 05359 %*/ 05360 ;} 05361 break; 05362 05363 case 32: 05364 05365 /* Line 1464 of yacc.c */ 05366 #line 1089 "parse.y" 05367 { 05368 /*%%%*/ 05369 value_expr((yyvsp[(3) - (3)].node)); 05370 if ((yyvsp[(1) - (3)].node)) { 05371 ID vid = (yyvsp[(1) - (3)].node)->nd_vid; 05372 if ((yyvsp[(2) - (3)].id) == tOROP) { 05373 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05374 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node)); 05375 if (is_asgn_or_id(vid)) { 05376 (yyval.node)->nd_aid = vid; 05377 } 05378 } 05379 else if ((yyvsp[(2) - (3)].id) == tANDOP) { 05380 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05381 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node)); 05382 } 05383 else { 05384 (yyval.node) = (yyvsp[(1) - (3)].node); 05385 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node))); 05386 } 05387 } 05388 else { 05389 (yyval.node) = NEW_BEGIN(0); 05390 } 05391 /*% 05392 $$ = dispatch3(opassign, $1, $2, $3); 05393 %*/ 05394 ;} 05395 break; 05396 05397 case 33: 05398 05399 /* Line 1464 of yacc.c */ 05400 #line 1118 "parse.y" 05401 { 05402 /*%%%*/ 05403 NODE *args; 05404 05405 value_expr((yyvsp[(6) - (6)].node)); 05406 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY(); 05407 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 05408 if ((yyvsp[(5) - (6)].id) == tOROP) { 05409 (yyvsp[(5) - (6)].id) = 0; 05410 } 05411 else if ((yyvsp[(5) - (6)].id) == tANDOP) { 05412 (yyvsp[(5) - (6)].id) = 1; 05413 } 05414 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args); 05415 fixpos((yyval.node), (yyvsp[(1) - (6)].node)); 05416 /*% 05417 $$ = dispatch2(aref_field, $1, escape_Qundef($3)); 05418 $$ = dispatch3(opassign, $$, $5, $6); 05419 %*/ 05420 ;} 05421 break; 05422 05423 case 34: 05424 05425 /* Line 1464 of yacc.c */ 05426 #line 1139 "parse.y" 05427 { 05428 /*%%%*/ 05429 value_expr((yyvsp[(5) - (5)].node)); 05430 if ((yyvsp[(4) - (5)].id) == tOROP) { 05431 (yyvsp[(4) - (5)].id) = 0; 05432 } 05433 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 05434 (yyvsp[(4) - (5)].id) = 1; 05435 } 05436 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 05437 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05438 /*% 05439 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 05440 $$ = dispatch3(opassign, $$, $4, $5); 05441 %*/ 05442 ;} 05443 break; 05444 05445 case 35: 05446 05447 /* Line 1464 of yacc.c */ 05448 #line 1156 "parse.y" 05449 { 05450 /*%%%*/ 05451 value_expr((yyvsp[(5) - (5)].node)); 05452 if ((yyvsp[(4) - (5)].id) == tOROP) { 05453 (yyvsp[(4) - (5)].id) = 0; 05454 } 05455 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 05456 (yyvsp[(4) - (5)].id) = 1; 05457 } 05458 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 05459 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05460 /*% 05461 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 05462 $$ = dispatch3(opassign, $$, $4, $5); 05463 %*/ 05464 ;} 05465 break; 05466 05467 case 36: 05468 05469 /* Line 1464 of yacc.c */ 05470 #line 1173 "parse.y" 05471 { 05472 yyerror("constant re-assignment"); 05473 (yyval.node) = 0; 05474 ;} 05475 break; 05476 05477 case 37: 05478 05479 /* Line 1464 of yacc.c */ 05480 #line 1178 "parse.y" 05481 { 05482 /*%%%*/ 05483 value_expr((yyvsp[(5) - (5)].node)); 05484 if ((yyvsp[(4) - (5)].id) == tOROP) { 05485 (yyvsp[(4) - (5)].id) = 0; 05486 } 05487 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 05488 (yyvsp[(4) - (5)].id) = 1; 05489 } 05490 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 05491 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05492 /*% 05493 $$ = dispatch3(field, $1, ripper_intern("::"), $3); 05494 $$ = dispatch3(opassign, $$, $4, $5); 05495 %*/ 05496 ;} 05497 break; 05498 05499 case 38: 05500 05501 /* Line 1464 of yacc.c */ 05502 #line 1195 "parse.y" 05503 { 05504 /*%%%*/ 05505 rb_backref_error((yyvsp[(1) - (3)].node)); 05506 (yyval.node) = NEW_BEGIN(0); 05507 /*% 05508 $$ = dispatch2(assign, dispatch1(var_field, $1), $3); 05509 $$ = dispatch1(assign_error, $$); 05510 %*/ 05511 ;} 05512 break; 05513 05514 case 39: 05515 05516 /* Line 1464 of yacc.c */ 05517 #line 1205 "parse.y" 05518 { 05519 /*%%%*/ 05520 value_expr((yyvsp[(3) - (3)].node)); 05521 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05522 /*% 05523 $$ = dispatch2(assign, $1, $3); 05524 %*/ 05525 ;} 05526 break; 05527 05528 case 40: 05529 05530 /* Line 1464 of yacc.c */ 05531 #line 1214 "parse.y" 05532 { 05533 /*%%%*/ 05534 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05535 (yyval.node) = (yyvsp[(1) - (3)].node); 05536 /*% 05537 $$ = dispatch2(massign, $1, $3); 05538 %*/ 05539 ;} 05540 break; 05541 05542 case 41: 05543 05544 /* Line 1464 of yacc.c */ 05545 #line 1223 "parse.y" 05546 { 05547 /*%%%*/ 05548 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05549 (yyval.node) = (yyvsp[(1) - (3)].node); 05550 /*% 05551 $$ = dispatch2(massign, $1, $3); 05552 %*/ 05553 ;} 05554 break; 05555 05556 case 44: 05557 05558 /* Line 1464 of yacc.c */ 05559 #line 1236 "parse.y" 05560 { 05561 /*%%%*/ 05562 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05563 /*% 05564 $$ = dispatch3(binary, $1, ripper_intern("and"), $3); 05565 %*/ 05566 ;} 05567 break; 05568 05569 case 45: 05570 05571 /* Line 1464 of yacc.c */ 05572 #line 1244 "parse.y" 05573 { 05574 /*%%%*/ 05575 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05576 /*% 05577 $$ = dispatch3(binary, $1, ripper_intern("or"), $3); 05578 %*/ 05579 ;} 05580 break; 05581 05582 case 46: 05583 05584 /* Line 1464 of yacc.c */ 05585 #line 1252 "parse.y" 05586 { 05587 /*%%%*/ 05588 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!'); 05589 /*% 05590 $$ = dispatch2(unary, ripper_intern("not"), $3); 05591 %*/ 05592 ;} 05593 break; 05594 05595 case 47: 05596 05597 /* Line 1464 of yacc.c */ 05598 #line 1260 "parse.y" 05599 { 05600 /*%%%*/ 05601 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!'); 05602 /*% 05603 $$ = dispatch2(unary, ripper_id2sym('!'), $2); 05604 %*/ 05605 ;} 05606 break; 05607 05608 case 49: 05609 05610 /* Line 1464 of yacc.c */ 05611 #line 1271 "parse.y" 05612 { 05613 /*%%%*/ 05614 value_expr((yyvsp[(1) - (1)].node)); 05615 (yyval.node) = (yyvsp[(1) - (1)].node); 05616 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 05617 /*% 05618 $$ = $1; 05619 %*/ 05620 ;} 05621 break; 05622 05623 case 53: 05624 05625 /* Line 1464 of yacc.c */ 05626 #line 1288 "parse.y" 05627 { 05628 /*%%%*/ 05629 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05630 /*% 05631 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 05632 $$ = method_arg($$, $4); 05633 %*/ 05634 ;} 05635 break; 05636 05637 case 54: 05638 05639 /* Line 1464 of yacc.c */ 05640 #line 1297 "parse.y" 05641 { 05642 /*%%%*/ 05643 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05644 /*% 05645 $$ = dispatch3(call, $1, ripper_intern("::"), $3); 05646 $$ = method_arg($$, $4); 05647 %*/ 05648 ;} 05649 break; 05650 05651 case 55: 05652 05653 /* Line 1464 of yacc.c */ 05654 #line 1308 "parse.y" 05655 { 05656 (yyvsp[(1) - (1)].vars) = dyna_push(); 05657 /*%%%*/ 05658 (yyval.num) = ruby_sourceline; 05659 /*% 05660 %*/ 05661 ;} 05662 break; 05663 05664 case 56: 05665 05666 /* Line 1464 of yacc.c */ 05667 #line 1318 "parse.y" 05668 { 05669 /*%%%*/ 05670 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 05671 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 05672 /*% 05673 $$ = dispatch2(brace_block, escape_Qundef($3), $4); 05674 %*/ 05675 dyna_pop((yyvsp[(1) - (5)].vars)); 05676 ;} 05677 break; 05678 05679 case 57: 05680 05681 /* Line 1464 of yacc.c */ 05682 #line 1330 "parse.y" 05683 { 05684 /*%%%*/ 05685 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node)); 05686 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 05687 /*% 05688 $$ = dispatch2(command, $1, $2); 05689 %*/ 05690 ;} 05691 break; 05692 05693 case 58: 05694 05695 /* Line 1464 of yacc.c */ 05696 #line 1339 "parse.y" 05697 { 05698 /*%%%*/ 05699 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node)); 05700 (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node)); 05701 (yyval.node) = (yyvsp[(3) - (3)].node); 05702 fixpos((yyval.node), (yyvsp[(2) - (3)].node)); 05703 /*% 05704 $$ = dispatch2(command, $1, $2); 05705 $$ = method_add_block($$, $3); 05706 %*/ 05707 ;} 05708 break; 05709 05710 case 59: 05711 05712 /* Line 1464 of yacc.c */ 05713 #line 1351 "parse.y" 05714 { 05715 /*%%%*/ 05716 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05717 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 05718 /*% 05719 $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4); 05720 %*/ 05721 ;} 05722 break; 05723 05724 case 60: 05725 05726 /* Line 1464 of yacc.c */ 05727 #line 1360 "parse.y" 05728 { 05729 /*%%%*/ 05730 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node)); 05731 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node)); 05732 (yyval.node) = (yyvsp[(5) - (5)].node); 05733 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05734 /*% 05735 $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4); 05736 $$ = method_add_block($$, $5); 05737 %*/ 05738 ;} 05739 break; 05740 05741 case 61: 05742 05743 /* Line 1464 of yacc.c */ 05744 #line 1372 "parse.y" 05745 { 05746 /*%%%*/ 05747 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05748 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 05749 /*% 05750 $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4); 05751 %*/ 05752 ;} 05753 break; 05754 05755 case 62: 05756 05757 /* Line 1464 of yacc.c */ 05758 #line 1381 "parse.y" 05759 { 05760 /*%%%*/ 05761 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node)); 05762 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node)); 05763 (yyval.node) = (yyvsp[(5) - (5)].node); 05764 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05765 /*% 05766 $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4); 05767 $$ = method_add_block($$, $5); 05768 %*/ 05769 ;} 05770 break; 05771 05772 case 63: 05773 05774 /* Line 1464 of yacc.c */ 05775 #line 1393 "parse.y" 05776 { 05777 /*%%%*/ 05778 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node)); 05779 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 05780 /*% 05781 $$ = dispatch1(super, $2); 05782 %*/ 05783 ;} 05784 break; 05785 05786 case 64: 05787 05788 /* Line 1464 of yacc.c */ 05789 #line 1402 "parse.y" 05790 { 05791 /*%%%*/ 05792 (yyval.node) = new_yield((yyvsp[(2) - (2)].node)); 05793 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 05794 /*% 05795 $$ = dispatch1(yield, $2); 05796 %*/ 05797 ;} 05798 break; 05799 05800 case 65: 05801 05802 /* Line 1464 of yacc.c */ 05803 #line 1411 "parse.y" 05804 { 05805 /*%%%*/ 05806 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node))); 05807 /*% 05808 $$ = dispatch1(return, $2); 05809 %*/ 05810 ;} 05811 break; 05812 05813 case 66: 05814 05815 /* Line 1464 of yacc.c */ 05816 #line 1419 "parse.y" 05817 { 05818 /*%%%*/ 05819 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node))); 05820 /*% 05821 $$ = dispatch1(break, $2); 05822 %*/ 05823 ;} 05824 break; 05825 05826 case 67: 05827 05828 /* Line 1464 of yacc.c */ 05829 #line 1427 "parse.y" 05830 { 05831 /*%%%*/ 05832 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node))); 05833 /*% 05834 $$ = dispatch1(next, $2); 05835 %*/ 05836 ;} 05837 break; 05838 05839 case 69: 05840 05841 /* Line 1464 of yacc.c */ 05842 #line 1438 "parse.y" 05843 { 05844 /*%%%*/ 05845 (yyval.node) = (yyvsp[(2) - (3)].node); 05846 /*% 05847 $$ = dispatch1(mlhs_paren, $2); 05848 %*/ 05849 ;} 05850 break; 05851 05852 case 71: 05853 05854 /* Line 1464 of yacc.c */ 05855 #line 1449 "parse.y" 05856 { 05857 /*%%%*/ 05858 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0); 05859 /*% 05860 $$ = dispatch1(mlhs_paren, $2); 05861 %*/ 05862 ;} 05863 break; 05864 05865 case 72: 05866 05867 /* Line 1464 of yacc.c */ 05868 #line 1459 "parse.y" 05869 { 05870 /*%%%*/ 05871 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0); 05872 /*% 05873 $$ = $1; 05874 %*/ 05875 ;} 05876 break; 05877 05878 case 73: 05879 05880 /* Line 1464 of yacc.c */ 05881 #line 1467 "parse.y" 05882 { 05883 /*%%%*/ 05884 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0); 05885 /*% 05886 $$ = mlhs_add($1, $2); 05887 %*/ 05888 ;} 05889 break; 05890 05891 case 74: 05892 05893 /* Line 1464 of yacc.c */ 05894 #line 1475 "parse.y" 05895 { 05896 /*%%%*/ 05897 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05898 /*% 05899 $$ = mlhs_add_star($1, $3); 05900 %*/ 05901 ;} 05902 break; 05903 05904 case 75: 05905 05906 /* Line 1464 of yacc.c */ 05907 #line 1483 "parse.y" 05908 { 05909 /*%%%*/ 05910 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node))); 05911 /*% 05912 $1 = mlhs_add_star($1, $3); 05913 $$ = mlhs_add($1, $5); 05914 %*/ 05915 ;} 05916 break; 05917 05918 case 76: 05919 05920 /* Line 1464 of yacc.c */ 05921 #line 1492 "parse.y" 05922 { 05923 /*%%%*/ 05924 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1); 05925 /*% 05926 $$ = mlhs_add_star($1, Qnil); 05927 %*/ 05928 ;} 05929 break; 05930 05931 case 77: 05932 05933 /* Line 1464 of yacc.c */ 05934 #line 1500 "parse.y" 05935 { 05936 /*%%%*/ 05937 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node))); 05938 /*% 05939 $$ = mlhs_add_star($1, Qnil); 05940 %*/ 05941 ;} 05942 break; 05943 05944 case 78: 05945 05946 /* Line 1464 of yacc.c */ 05947 #line 1508 "parse.y" 05948 { 05949 /*%%%*/ 05950 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node)); 05951 /*% 05952 $$ = mlhs_add_star(mlhs_new(), $2); 05953 %*/ 05954 ;} 05955 break; 05956 05957 case 79: 05958 05959 /* Line 1464 of yacc.c */ 05960 #line 1516 "parse.y" 05961 { 05962 /*%%%*/ 05963 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node))); 05964 /*% 05965 $$ = mlhs_add_star(mlhs_new(), $2); 05966 %*/ 05967 ;} 05968 break; 05969 05970 case 80: 05971 05972 /* Line 1464 of yacc.c */ 05973 #line 1524 "parse.y" 05974 { 05975 /*%%%*/ 05976 (yyval.node) = NEW_MASGN(0, -1); 05977 /*% 05978 $$ = mlhs_add_star(mlhs_new(), Qnil); 05979 %*/ 05980 ;} 05981 break; 05982 05983 case 81: 05984 05985 /* Line 1464 of yacc.c */ 05986 #line 1532 "parse.y" 05987 { 05988 /*%%%*/ 05989 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node))); 05990 /*% 05991 $$ = mlhs_add_star(mlhs_new(), Qnil); 05992 %*/ 05993 ;} 05994 break; 05995 05996 case 83: 05997 05998 /* Line 1464 of yacc.c */ 05999 #line 1543 "parse.y" 06000 { 06001 /*%%%*/ 06002 (yyval.node) = (yyvsp[(2) - (3)].node); 06003 /*% 06004 $$ = dispatch1(mlhs_paren, $2); 06005 %*/ 06006 ;} 06007 break; 06008 06009 case 84: 06010 06011 /* Line 1464 of yacc.c */ 06012 #line 1553 "parse.y" 06013 { 06014 /*%%%*/ 06015 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node)); 06016 /*% 06017 $$ = mlhs_add(mlhs_new(), $1); 06018 %*/ 06019 ;} 06020 break; 06021 06022 case 85: 06023 06024 /* Line 1464 of yacc.c */ 06025 #line 1561 "parse.y" 06026 { 06027 /*%%%*/ 06028 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node)); 06029 /*% 06030 $$ = mlhs_add($1, $2); 06031 %*/ 06032 ;} 06033 break; 06034 06035 case 86: 06036 06037 /* Line 1464 of yacc.c */ 06038 #line 1571 "parse.y" 06039 { 06040 /*%%%*/ 06041 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 06042 /*% 06043 $$ = mlhs_add(mlhs_new(), $1); 06044 %*/ 06045 ;} 06046 break; 06047 06048 case 87: 06049 06050 /* Line 1464 of yacc.c */ 06051 #line 1579 "parse.y" 06052 { 06053 /*%%%*/ 06054 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06055 /*% 06056 $$ = mlhs_add($1, $3); 06057 %*/ 06058 ;} 06059 break; 06060 06061 case 88: 06062 06063 /* Line 1464 of yacc.c */ 06064 #line 1589 "parse.y" 06065 { 06066 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 06067 ;} 06068 break; 06069 06070 case 89: 06071 06072 /* Line 1464 of yacc.c */ 06073 #line 1593 "parse.y" 06074 { 06075 /*%%%*/ 06076 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)); 06077 /*% 06078 $$ = dispatch2(aref_field, $1, escape_Qundef($3)); 06079 %*/ 06080 ;} 06081 break; 06082 06083 case 90: 06084 06085 /* Line 1464 of yacc.c */ 06086 #line 1601 "parse.y" 06087 { 06088 /*%%%*/ 06089 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06090 /*% 06091 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06092 %*/ 06093 ;} 06094 break; 06095 06096 case 91: 06097 06098 /* Line 1464 of yacc.c */ 06099 #line 1609 "parse.y" 06100 { 06101 /*%%%*/ 06102 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06103 /*% 06104 $$ = dispatch2(const_path_field, $1, $3); 06105 %*/ 06106 ;} 06107 break; 06108 06109 case 92: 06110 06111 /* Line 1464 of yacc.c */ 06112 #line 1617 "parse.y" 06113 { 06114 /*%%%*/ 06115 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06116 /*% 06117 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06118 %*/ 06119 ;} 06120 break; 06121 06122 case 93: 06123 06124 /* Line 1464 of yacc.c */ 06125 #line 1625 "parse.y" 06126 { 06127 /*%%%*/ 06128 if (in_def || in_single) 06129 yyerror("dynamic constant assignment"); 06130 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id))); 06131 /*% 06132 if (in_def || in_single) 06133 yyerror("dynamic constant assignment"); 06134 $$ = dispatch2(const_path_field, $1, $3); 06135 %*/ 06136 ;} 06137 break; 06138 06139 case 94: 06140 06141 /* Line 1464 of yacc.c */ 06142 #line 1637 "parse.y" 06143 { 06144 /*%%%*/ 06145 if (in_def || in_single) 06146 yyerror("dynamic constant assignment"); 06147 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id))); 06148 /*% 06149 $$ = dispatch1(top_const_field, $2); 06150 %*/ 06151 ;} 06152 break; 06153 06154 case 95: 06155 06156 /* Line 1464 of yacc.c */ 06157 #line 1647 "parse.y" 06158 { 06159 /*%%%*/ 06160 rb_backref_error((yyvsp[(1) - (1)].node)); 06161 (yyval.node) = NEW_BEGIN(0); 06162 /*% 06163 $$ = dispatch1(var_field, $1); 06164 $$ = dispatch1(assign_error, $$); 06165 %*/ 06166 ;} 06167 break; 06168 06169 case 96: 06170 06171 /* Line 1464 of yacc.c */ 06172 #line 1659 "parse.y" 06173 { 06174 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 06175 /*%%%*/ 06176 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0); 06177 /*% 06178 $$ = dispatch1(var_field, $$); 06179 %*/ 06180 ;} 06181 break; 06182 06183 case 97: 06184 06185 /* Line 1464 of yacc.c */ 06186 #line 1668 "parse.y" 06187 { 06188 /*%%%*/ 06189 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)); 06190 /*% 06191 $$ = dispatch2(aref_field, $1, escape_Qundef($3)); 06192 %*/ 06193 ;} 06194 break; 06195 06196 case 98: 06197 06198 /* Line 1464 of yacc.c */ 06199 #line 1676 "parse.y" 06200 { 06201 /*%%%*/ 06202 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06203 /*% 06204 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06205 %*/ 06206 ;} 06207 break; 06208 06209 case 99: 06210 06211 /* Line 1464 of yacc.c */ 06212 #line 1684 "parse.y" 06213 { 06214 /*%%%*/ 06215 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06216 /*% 06217 $$ = dispatch3(field, $1, ripper_intern("::"), $3); 06218 %*/ 06219 ;} 06220 break; 06221 06222 case 100: 06223 06224 /* Line 1464 of yacc.c */ 06225 #line 1692 "parse.y" 06226 { 06227 /*%%%*/ 06228 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06229 /*% 06230 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06231 %*/ 06232 ;} 06233 break; 06234 06235 case 101: 06236 06237 /* Line 1464 of yacc.c */ 06238 #line 1700 "parse.y" 06239 { 06240 /*%%%*/ 06241 if (in_def || in_single) 06242 yyerror("dynamic constant assignment"); 06243 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id))); 06244 /*% 06245 $$ = dispatch2(const_path_field, $1, $3); 06246 if (in_def || in_single) { 06247 $$ = dispatch1(assign_error, $$); 06248 } 06249 %*/ 06250 ;} 06251 break; 06252 06253 case 102: 06254 06255 /* Line 1464 of yacc.c */ 06256 #line 1713 "parse.y" 06257 { 06258 /*%%%*/ 06259 if (in_def || in_single) 06260 yyerror("dynamic constant assignment"); 06261 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id))); 06262 /*% 06263 $$ = dispatch1(top_const_field, $2); 06264 if (in_def || in_single) { 06265 $$ = dispatch1(assign_error, $$); 06266 } 06267 %*/ 06268 ;} 06269 break; 06270 06271 case 103: 06272 06273 /* Line 1464 of yacc.c */ 06274 #line 1726 "parse.y" 06275 { 06276 /*%%%*/ 06277 rb_backref_error((yyvsp[(1) - (1)].node)); 06278 (yyval.node) = NEW_BEGIN(0); 06279 /*% 06280 $$ = dispatch1(assign_error, $1); 06281 %*/ 06282 ;} 06283 break; 06284 06285 case 104: 06286 06287 /* Line 1464 of yacc.c */ 06288 #line 1737 "parse.y" 06289 { 06290 /*%%%*/ 06291 yyerror("class/module name must be CONSTANT"); 06292 /*% 06293 $$ = dispatch1(class_name_error, $1); 06294 %*/ 06295 ;} 06296 break; 06297 06298 case 106: 06299 06300 /* Line 1464 of yacc.c */ 06301 #line 1748 "parse.y" 06302 { 06303 /*%%%*/ 06304 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id)); 06305 /*% 06306 $$ = dispatch1(top_const_ref, $2); 06307 %*/ 06308 ;} 06309 break; 06310 06311 case 107: 06312 06313 /* Line 1464 of yacc.c */ 06314 #line 1756 "parse.y" 06315 { 06316 /*%%%*/ 06317 (yyval.node) = NEW_COLON2(0, (yyval.node)); 06318 /*% 06319 $$ = dispatch1(const_ref, $1); 06320 %*/ 06321 ;} 06322 break; 06323 06324 case 108: 06325 06326 /* Line 1464 of yacc.c */ 06327 #line 1764 "parse.y" 06328 { 06329 /*%%%*/ 06330 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06331 /*% 06332 $$ = dispatch2(const_path_ref, $1, $3); 06333 %*/ 06334 ;} 06335 break; 06336 06337 case 112: 06338 06339 /* Line 1464 of yacc.c */ 06340 #line 1777 "parse.y" 06341 { 06342 lex_state = EXPR_ENDFN; 06343 (yyval.id) = (yyvsp[(1) - (1)].id); 06344 ;} 06345 break; 06346 06347 case 113: 06348 06349 /* Line 1464 of yacc.c */ 06350 #line 1782 "parse.y" 06351 { 06352 lex_state = EXPR_ENDFN; 06353 /*%%%*/ 06354 (yyval.id) = (yyvsp[(1) - (1)].id); 06355 /*% 06356 $$ = $1; 06357 %*/ 06358 ;} 06359 break; 06360 06361 case 116: 06362 06363 /* Line 1464 of yacc.c */ 06364 #line 1797 "parse.y" 06365 { 06366 /*%%%*/ 06367 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id))); 06368 /*% 06369 $$ = dispatch1(symbol_literal, $1); 06370 %*/ 06371 ;} 06372 break; 06373 06374 case 118: 06375 06376 /* Line 1464 of yacc.c */ 06377 #line 1808 "parse.y" 06378 { 06379 /*%%%*/ 06380 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node)); 06381 /*% 06382 $$ = rb_ary_new3(1, $1); 06383 %*/ 06384 ;} 06385 break; 06386 06387 case 119: 06388 06389 /* Line 1464 of yacc.c */ 06390 #line 1815 "parse.y" 06391 {lex_state = EXPR_FNAME;;} 06392 break; 06393 06394 case 120: 06395 06396 /* Line 1464 of yacc.c */ 06397 #line 1816 "parse.y" 06398 { 06399 /*%%%*/ 06400 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node))); 06401 /*% 06402 rb_ary_push($1, $4); 06403 %*/ 06404 ;} 06405 break; 06406 06407 case 121: 06408 06409 /* Line 1464 of yacc.c */ 06410 #line 1825 "parse.y" 06411 { ifndef_ripper((yyval.id) = '|'); ;} 06412 break; 06413 06414 case 122: 06415 06416 /* Line 1464 of yacc.c */ 06417 #line 1826 "parse.y" 06418 { ifndef_ripper((yyval.id) = '^'); ;} 06419 break; 06420 06421 case 123: 06422 06423 /* Line 1464 of yacc.c */ 06424 #line 1827 "parse.y" 06425 { ifndef_ripper((yyval.id) = '&'); ;} 06426 break; 06427 06428 case 124: 06429 06430 /* Line 1464 of yacc.c */ 06431 #line 1828 "parse.y" 06432 { ifndef_ripper((yyval.id) = tCMP); ;} 06433 break; 06434 06435 case 125: 06436 06437 /* Line 1464 of yacc.c */ 06438 #line 1829 "parse.y" 06439 { ifndef_ripper((yyval.id) = tEQ); ;} 06440 break; 06441 06442 case 126: 06443 06444 /* Line 1464 of yacc.c */ 06445 #line 1830 "parse.y" 06446 { ifndef_ripper((yyval.id) = tEQQ); ;} 06447 break; 06448 06449 case 127: 06450 06451 /* Line 1464 of yacc.c */ 06452 #line 1831 "parse.y" 06453 { ifndef_ripper((yyval.id) = tMATCH); ;} 06454 break; 06455 06456 case 128: 06457 06458 /* Line 1464 of yacc.c */ 06459 #line 1832 "parse.y" 06460 { ifndef_ripper((yyval.id) = tNMATCH); ;} 06461 break; 06462 06463 case 129: 06464 06465 /* Line 1464 of yacc.c */ 06466 #line 1833 "parse.y" 06467 { ifndef_ripper((yyval.id) = '>'); ;} 06468 break; 06469 06470 case 130: 06471 06472 /* Line 1464 of yacc.c */ 06473 #line 1834 "parse.y" 06474 { ifndef_ripper((yyval.id) = tGEQ); ;} 06475 break; 06476 06477 case 131: 06478 06479 /* Line 1464 of yacc.c */ 06480 #line 1835 "parse.y" 06481 { ifndef_ripper((yyval.id) = '<'); ;} 06482 break; 06483 06484 case 132: 06485 06486 /* Line 1464 of yacc.c */ 06487 #line 1836 "parse.y" 06488 { ifndef_ripper((yyval.id) = tLEQ); ;} 06489 break; 06490 06491 case 133: 06492 06493 /* Line 1464 of yacc.c */ 06494 #line 1837 "parse.y" 06495 { ifndef_ripper((yyval.id) = tNEQ); ;} 06496 break; 06497 06498 case 134: 06499 06500 /* Line 1464 of yacc.c */ 06501 #line 1838 "parse.y" 06502 { ifndef_ripper((yyval.id) = tLSHFT); ;} 06503 break; 06504 06505 case 135: 06506 06507 /* Line 1464 of yacc.c */ 06508 #line 1839 "parse.y" 06509 { ifndef_ripper((yyval.id) = tRSHFT); ;} 06510 break; 06511 06512 case 136: 06513 06514 /* Line 1464 of yacc.c */ 06515 #line 1840 "parse.y" 06516 { ifndef_ripper((yyval.id) = '+'); ;} 06517 break; 06518 06519 case 137: 06520 06521 /* Line 1464 of yacc.c */ 06522 #line 1841 "parse.y" 06523 { ifndef_ripper((yyval.id) = '-'); ;} 06524 break; 06525 06526 case 138: 06527 06528 /* Line 1464 of yacc.c */ 06529 #line 1842 "parse.y" 06530 { ifndef_ripper((yyval.id) = '*'); ;} 06531 break; 06532 06533 case 139: 06534 06535 /* Line 1464 of yacc.c */ 06536 #line 1843 "parse.y" 06537 { ifndef_ripper((yyval.id) = '*'); ;} 06538 break; 06539 06540 case 140: 06541 06542 /* Line 1464 of yacc.c */ 06543 #line 1844 "parse.y" 06544 { ifndef_ripper((yyval.id) = '/'); ;} 06545 break; 06546 06547 case 141: 06548 06549 /* Line 1464 of yacc.c */ 06550 #line 1845 "parse.y" 06551 { ifndef_ripper((yyval.id) = '%'); ;} 06552 break; 06553 06554 case 142: 06555 06556 /* Line 1464 of yacc.c */ 06557 #line 1846 "parse.y" 06558 { ifndef_ripper((yyval.id) = tPOW); ;} 06559 break; 06560 06561 case 143: 06562 06563 /* Line 1464 of yacc.c */ 06564 #line 1847 "parse.y" 06565 { ifndef_ripper((yyval.id) = '!'); ;} 06566 break; 06567 06568 case 144: 06569 06570 /* Line 1464 of yacc.c */ 06571 #line 1848 "parse.y" 06572 { ifndef_ripper((yyval.id) = '~'); ;} 06573 break; 06574 06575 case 145: 06576 06577 /* Line 1464 of yacc.c */ 06578 #line 1849 "parse.y" 06579 { ifndef_ripper((yyval.id) = tUPLUS); ;} 06580 break; 06581 06582 case 146: 06583 06584 /* Line 1464 of yacc.c */ 06585 #line 1850 "parse.y" 06586 { ifndef_ripper((yyval.id) = tUMINUS); ;} 06587 break; 06588 06589 case 147: 06590 06591 /* Line 1464 of yacc.c */ 06592 #line 1851 "parse.y" 06593 { ifndef_ripper((yyval.id) = tAREF); ;} 06594 break; 06595 06596 case 148: 06597 06598 /* Line 1464 of yacc.c */ 06599 #line 1852 "parse.y" 06600 { ifndef_ripper((yyval.id) = tASET); ;} 06601 break; 06602 06603 case 149: 06604 06605 /* Line 1464 of yacc.c */ 06606 #line 1853 "parse.y" 06607 { ifndef_ripper((yyval.id) = '`'); ;} 06608 break; 06609 06610 case 191: 06611 06612 /* Line 1464 of yacc.c */ 06613 #line 1871 "parse.y" 06614 { 06615 /*%%%*/ 06616 value_expr((yyvsp[(3) - (3)].node)); 06617 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06618 /*% 06619 $$ = dispatch2(assign, $1, $3); 06620 %*/ 06621 ;} 06622 break; 06623 06624 case 192: 06625 06626 /* Line 1464 of yacc.c */ 06627 #line 1880 "parse.y" 06628 { 06629 /*%%%*/ 06630 value_expr((yyvsp[(3) - (5)].node)); 06631 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0); 06632 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node)); 06633 /*% 06634 $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5)); 06635 %*/ 06636 ;} 06637 break; 06638 06639 case 193: 06640 06641 /* Line 1464 of yacc.c */ 06642 #line 1890 "parse.y" 06643 { 06644 /*%%%*/ 06645 value_expr((yyvsp[(3) - (3)].node)); 06646 if ((yyvsp[(1) - (3)].node)) { 06647 ID vid = (yyvsp[(1) - (3)].node)->nd_vid; 06648 if ((yyvsp[(2) - (3)].id) == tOROP) { 06649 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 06650 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node)); 06651 if (is_asgn_or_id(vid)) { 06652 (yyval.node)->nd_aid = vid; 06653 } 06654 } 06655 else if ((yyvsp[(2) - (3)].id) == tANDOP) { 06656 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 06657 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node)); 06658 } 06659 else { 06660 (yyval.node) = (yyvsp[(1) - (3)].node); 06661 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node))); 06662 } 06663 } 06664 else { 06665 (yyval.node) = NEW_BEGIN(0); 06666 } 06667 /*% 06668 $$ = dispatch3(opassign, $1, $2, $3); 06669 %*/ 06670 ;} 06671 break; 06672 06673 case 194: 06674 06675 /* Line 1464 of yacc.c */ 06676 #line 1919 "parse.y" 06677 { 06678 /*%%%*/ 06679 value_expr((yyvsp[(3) - (5)].node)); 06680 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0); 06681 if ((yyvsp[(1) - (5)].node)) { 06682 ID vid = (yyvsp[(1) - (5)].node)->nd_vid; 06683 if ((yyvsp[(2) - (5)].id) == tOROP) { 06684 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node); 06685 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node)); 06686 if (is_asgn_or_id(vid)) { 06687 (yyval.node)->nd_aid = vid; 06688 } 06689 } 06690 else if ((yyvsp[(2) - (5)].id) == tANDOP) { 06691 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node); 06692 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node)); 06693 } 06694 else { 06695 (yyval.node) = (yyvsp[(1) - (5)].node); 06696 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node))); 06697 } 06698 } 06699 else { 06700 (yyval.node) = NEW_BEGIN(0); 06701 } 06702 /*% 06703 $3 = dispatch2(rescue_mod, $3, $5); 06704 $$ = dispatch3(opassign, $1, $2, $3); 06705 %*/ 06706 ;} 06707 break; 06708 06709 case 195: 06710 06711 /* Line 1464 of yacc.c */ 06712 #line 1950 "parse.y" 06713 { 06714 /*%%%*/ 06715 NODE *args; 06716 06717 value_expr((yyvsp[(6) - (6)].node)); 06718 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY(); 06719 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) { 06720 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 06721 } 06722 else { 06723 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 06724 } 06725 if ((yyvsp[(5) - (6)].id) == tOROP) { 06726 (yyvsp[(5) - (6)].id) = 0; 06727 } 06728 else if ((yyvsp[(5) - (6)].id) == tANDOP) { 06729 (yyvsp[(5) - (6)].id) = 1; 06730 } 06731 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args); 06732 fixpos((yyval.node), (yyvsp[(1) - (6)].node)); 06733 /*% 06734 $1 = dispatch2(aref_field, $1, escape_Qundef($3)); 06735 $$ = dispatch3(opassign, $1, $5, $6); 06736 %*/ 06737 ;} 06738 break; 06739 06740 case 196: 06741 06742 /* Line 1464 of yacc.c */ 06743 #line 1976 "parse.y" 06744 { 06745 /*%%%*/ 06746 value_expr((yyvsp[(5) - (5)].node)); 06747 if ((yyvsp[(4) - (5)].id) == tOROP) { 06748 (yyvsp[(4) - (5)].id) = 0; 06749 } 06750 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 06751 (yyvsp[(4) - (5)].id) = 1; 06752 } 06753 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06754 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 06755 /*% 06756 $1 = dispatch3(field, $1, ripper_id2sym('.'), $3); 06757 $$ = dispatch3(opassign, $1, $4, $5); 06758 %*/ 06759 ;} 06760 break; 06761 06762 case 197: 06763 06764 /* Line 1464 of yacc.c */ 06765 #line 1993 "parse.y" 06766 { 06767 /*%%%*/ 06768 value_expr((yyvsp[(5) - (5)].node)); 06769 if ((yyvsp[(4) - (5)].id) == tOROP) { 06770 (yyvsp[(4) - (5)].id) = 0; 06771 } 06772 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 06773 (yyvsp[(4) - (5)].id) = 1; 06774 } 06775 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06776 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 06777 /*% 06778 $1 = dispatch3(field, $1, ripper_id2sym('.'), $3); 06779 $$ = dispatch3(opassign, $1, $4, $5); 06780 %*/ 06781 ;} 06782 break; 06783 06784 case 198: 06785 06786 /* Line 1464 of yacc.c */ 06787 #line 2010 "parse.y" 06788 { 06789 /*%%%*/ 06790 value_expr((yyvsp[(5) - (5)].node)); 06791 if ((yyvsp[(4) - (5)].id) == tOROP) { 06792 (yyvsp[(4) - (5)].id) = 0; 06793 } 06794 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 06795 (yyvsp[(4) - (5)].id) = 1; 06796 } 06797 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06798 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 06799 /*% 06800 $1 = dispatch3(field, $1, ripper_intern("::"), $3); 06801 $$ = dispatch3(opassign, $1, $4, $5); 06802 %*/ 06803 ;} 06804 break; 06805 06806 case 199: 06807 06808 /* Line 1464 of yacc.c */ 06809 #line 2027 "parse.y" 06810 { 06811 /*%%%*/ 06812 yyerror("constant re-assignment"); 06813 (yyval.node) = NEW_BEGIN(0); 06814 /*% 06815 $$ = dispatch2(const_path_field, $1, $3); 06816 $$ = dispatch3(opassign, $$, $4, $5); 06817 $$ = dispatch1(assign_error, $$); 06818 %*/ 06819 ;} 06820 break; 06821 06822 case 200: 06823 06824 /* Line 1464 of yacc.c */ 06825 #line 2038 "parse.y" 06826 { 06827 /*%%%*/ 06828 yyerror("constant re-assignment"); 06829 (yyval.node) = NEW_BEGIN(0); 06830 /*% 06831 $$ = dispatch1(top_const_field, $2); 06832 $$ = dispatch3(opassign, $$, $3, $4); 06833 $$ = dispatch1(assign_error, $$); 06834 %*/ 06835 ;} 06836 break; 06837 06838 case 201: 06839 06840 /* Line 1464 of yacc.c */ 06841 #line 2049 "parse.y" 06842 { 06843 /*%%%*/ 06844 rb_backref_error((yyvsp[(1) - (3)].node)); 06845 (yyval.node) = NEW_BEGIN(0); 06846 /*% 06847 $$ = dispatch1(var_field, $1); 06848 $$ = dispatch3(opassign, $$, $2, $3); 06849 $$ = dispatch1(assign_error, $$); 06850 %*/ 06851 ;} 06852 break; 06853 06854 case 202: 06855 06856 /* Line 1464 of yacc.c */ 06857 #line 2060 "parse.y" 06858 { 06859 /*%%%*/ 06860 value_expr((yyvsp[(1) - (3)].node)); 06861 value_expr((yyvsp[(3) - (3)].node)); 06862 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06863 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) && 06864 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) { 06865 deferred_nodes = list_append(deferred_nodes, (yyval.node)); 06866 } 06867 /*% 06868 $$ = dispatch2(dot2, $1, $3); 06869 %*/ 06870 ;} 06871 break; 06872 06873 case 203: 06874 06875 /* Line 1464 of yacc.c */ 06876 #line 2074 "parse.y" 06877 { 06878 /*%%%*/ 06879 value_expr((yyvsp[(1) - (3)].node)); 06880 value_expr((yyvsp[(3) - (3)].node)); 06881 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06882 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) && 06883 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) { 06884 deferred_nodes = list_append(deferred_nodes, (yyval.node)); 06885 } 06886 /*% 06887 $$ = dispatch2(dot3, $1, $3); 06888 %*/ 06889 ;} 06890 break; 06891 06892 case 204: 06893 06894 /* Line 1464 of yacc.c */ 06895 #line 2088 "parse.y" 06896 { 06897 /*%%%*/ 06898 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node)); 06899 /*% 06900 $$ = dispatch3(binary, $1, ID2SYM('+'), $3); 06901 %*/ 06902 ;} 06903 break; 06904 06905 case 205: 06906 06907 /* Line 1464 of yacc.c */ 06908 #line 2096 "parse.y" 06909 { 06910 /*%%%*/ 06911 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node)); 06912 /*% 06913 $$ = dispatch3(binary, $1, ID2SYM('-'), $3); 06914 %*/ 06915 ;} 06916 break; 06917 06918 case 206: 06919 06920 /* Line 1464 of yacc.c */ 06921 #line 2104 "parse.y" 06922 { 06923 /*%%%*/ 06924 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node)); 06925 /*% 06926 $$ = dispatch3(binary, $1, ID2SYM('*'), $3); 06927 %*/ 06928 ;} 06929 break; 06930 06931 case 207: 06932 06933 /* Line 1464 of yacc.c */ 06934 #line 2112 "parse.y" 06935 { 06936 /*%%%*/ 06937 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node)); 06938 /*% 06939 $$ = dispatch3(binary, $1, ID2SYM('/'), $3); 06940 %*/ 06941 ;} 06942 break; 06943 06944 case 208: 06945 06946 /* Line 1464 of yacc.c */ 06947 #line 2120 "parse.y" 06948 { 06949 /*%%%*/ 06950 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node)); 06951 /*% 06952 $$ = dispatch3(binary, $1, ID2SYM('%'), $3); 06953 %*/ 06954 ;} 06955 break; 06956 06957 case 209: 06958 06959 /* Line 1464 of yacc.c */ 06960 #line 2128 "parse.y" 06961 { 06962 /*%%%*/ 06963 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node)); 06964 /*% 06965 $$ = dispatch3(binary, $1, ripper_intern("**"), $3); 06966 %*/ 06967 ;} 06968 break; 06969 06970 case 210: 06971 06972 /* Line 1464 of yacc.c */ 06973 #line 2136 "parse.y" 06974 { 06975 /*%%%*/ 06976 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0); 06977 /*% 06978 $$ = dispatch3(binary, $2, ripper_intern("**"), $4); 06979 $$ = dispatch2(unary, ripper_intern("-@"), $$); 06980 %*/ 06981 ;} 06982 break; 06983 06984 case 211: 06985 06986 /* Line 1464 of yacc.c */ 06987 #line 2145 "parse.y" 06988 { 06989 /*%%%*/ 06990 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0); 06991 /*% 06992 $$ = dispatch3(binary, $2, ripper_intern("**"), $4); 06993 $$ = dispatch2(unary, ripper_intern("-@"), $$); 06994 %*/ 06995 ;} 06996 break; 06997 06998 case 212: 06999 07000 /* Line 1464 of yacc.c */ 07001 #line 2154 "parse.y" 07002 { 07003 /*%%%*/ 07004 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS); 07005 /*% 07006 $$ = dispatch2(unary, ripper_intern("+@"), $2); 07007 %*/ 07008 ;} 07009 break; 07010 07011 case 213: 07012 07013 /* Line 1464 of yacc.c */ 07014 #line 2162 "parse.y" 07015 { 07016 /*%%%*/ 07017 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS); 07018 /*% 07019 $$ = dispatch2(unary, ripper_intern("-@"), $2); 07020 %*/ 07021 ;} 07022 break; 07023 07024 case 214: 07025 07026 /* Line 1464 of yacc.c */ 07027 #line 2170 "parse.y" 07028 { 07029 /*%%%*/ 07030 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node)); 07031 /*% 07032 $$ = dispatch3(binary, $1, ID2SYM('|'), $3); 07033 %*/ 07034 ;} 07035 break; 07036 07037 case 215: 07038 07039 /* Line 1464 of yacc.c */ 07040 #line 2178 "parse.y" 07041 { 07042 /*%%%*/ 07043 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node)); 07044 /*% 07045 $$ = dispatch3(binary, $1, ID2SYM('^'), $3); 07046 %*/ 07047 ;} 07048 break; 07049 07050 case 216: 07051 07052 /* Line 1464 of yacc.c */ 07053 #line 2186 "parse.y" 07054 { 07055 /*%%%*/ 07056 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node)); 07057 /*% 07058 $$ = dispatch3(binary, $1, ID2SYM('&'), $3); 07059 %*/ 07060 ;} 07061 break; 07062 07063 case 217: 07064 07065 /* Line 1464 of yacc.c */ 07066 #line 2194 "parse.y" 07067 { 07068 /*%%%*/ 07069 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node)); 07070 /*% 07071 $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3); 07072 %*/ 07073 ;} 07074 break; 07075 07076 case 218: 07077 07078 /* Line 1464 of yacc.c */ 07079 #line 2202 "parse.y" 07080 { 07081 /*%%%*/ 07082 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node)); 07083 /*% 07084 $$ = dispatch3(binary, $1, ID2SYM('>'), $3); 07085 %*/ 07086 ;} 07087 break; 07088 07089 case 219: 07090 07091 /* Line 1464 of yacc.c */ 07092 #line 2210 "parse.y" 07093 { 07094 /*%%%*/ 07095 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node)); 07096 /*% 07097 $$ = dispatch3(binary, $1, ripper_intern(">="), $3); 07098 %*/ 07099 ;} 07100 break; 07101 07102 case 220: 07103 07104 /* Line 1464 of yacc.c */ 07105 #line 2218 "parse.y" 07106 { 07107 /*%%%*/ 07108 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node)); 07109 /*% 07110 $$ = dispatch3(binary, $1, ID2SYM('<'), $3); 07111 %*/ 07112 ;} 07113 break; 07114 07115 case 221: 07116 07117 /* Line 1464 of yacc.c */ 07118 #line 2226 "parse.y" 07119 { 07120 /*%%%*/ 07121 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node)); 07122 /*% 07123 $$ = dispatch3(binary, $1, ripper_intern("<="), $3); 07124 %*/ 07125 ;} 07126 break; 07127 07128 case 222: 07129 07130 /* Line 1464 of yacc.c */ 07131 #line 2234 "parse.y" 07132 { 07133 /*%%%*/ 07134 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node)); 07135 /*% 07136 $$ = dispatch3(binary, $1, ripper_intern("=="), $3); 07137 %*/ 07138 ;} 07139 break; 07140 07141 case 223: 07142 07143 /* Line 1464 of yacc.c */ 07144 #line 2242 "parse.y" 07145 { 07146 /*%%%*/ 07147 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node)); 07148 /*% 07149 $$ = dispatch3(binary, $1, ripper_intern("==="), $3); 07150 %*/ 07151 ;} 07152 break; 07153 07154 case 224: 07155 07156 /* Line 1464 of yacc.c */ 07157 #line 2250 "parse.y" 07158 { 07159 /*%%%*/ 07160 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node)); 07161 /*% 07162 $$ = dispatch3(binary, $1, ripper_intern("!="), $3); 07163 %*/ 07164 ;} 07165 break; 07166 07167 case 225: 07168 07169 /* Line 1464 of yacc.c */ 07170 #line 2258 "parse.y" 07171 { 07172 /*%%%*/ 07173 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07174 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) { 07175 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node)); 07176 } 07177 /*% 07178 $$ = dispatch3(binary, $1, ripper_intern("=~"), $3); 07179 %*/ 07180 ;} 07181 break; 07182 07183 case 226: 07184 07185 /* Line 1464 of yacc.c */ 07186 #line 2269 "parse.y" 07187 { 07188 /*%%%*/ 07189 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node)); 07190 /*% 07191 $$ = dispatch3(binary, $1, ripper_intern("!~"), $3); 07192 %*/ 07193 ;} 07194 break; 07195 07196 case 227: 07197 07198 /* Line 1464 of yacc.c */ 07199 #line 2277 "parse.y" 07200 { 07201 /*%%%*/ 07202 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!'); 07203 /*% 07204 $$ = dispatch2(unary, ID2SYM('!'), $2); 07205 %*/ 07206 ;} 07207 break; 07208 07209 case 228: 07210 07211 /* Line 1464 of yacc.c */ 07212 #line 2285 "parse.y" 07213 { 07214 /*%%%*/ 07215 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~'); 07216 /*% 07217 $$ = dispatch2(unary, ID2SYM('~'), $2); 07218 %*/ 07219 ;} 07220 break; 07221 07222 case 229: 07223 07224 /* Line 1464 of yacc.c */ 07225 #line 2293 "parse.y" 07226 { 07227 /*%%%*/ 07228 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node)); 07229 /*% 07230 $$ = dispatch3(binary, $1, ripper_intern("<<"), $3); 07231 %*/ 07232 ;} 07233 break; 07234 07235 case 230: 07236 07237 /* Line 1464 of yacc.c */ 07238 #line 2301 "parse.y" 07239 { 07240 /*%%%*/ 07241 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node)); 07242 /*% 07243 $$ = dispatch3(binary, $1, ripper_intern(">>"), $3); 07244 %*/ 07245 ;} 07246 break; 07247 07248 case 231: 07249 07250 /* Line 1464 of yacc.c */ 07251 #line 2309 "parse.y" 07252 { 07253 /*%%%*/ 07254 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07255 /*% 07256 $$ = dispatch3(binary, $1, ripper_intern("&&"), $3); 07257 %*/ 07258 ;} 07259 break; 07260 07261 case 232: 07262 07263 /* Line 1464 of yacc.c */ 07264 #line 2317 "parse.y" 07265 { 07266 /*%%%*/ 07267 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07268 /*% 07269 $$ = dispatch3(binary, $1, ripper_intern("||"), $3); 07270 %*/ 07271 ;} 07272 break; 07273 07274 case 233: 07275 07276 /* Line 1464 of yacc.c */ 07277 #line 2324 "parse.y" 07278 {in_defined = 1;;} 07279 break; 07280 07281 case 234: 07282 07283 /* Line 1464 of yacc.c */ 07284 #line 2325 "parse.y" 07285 { 07286 /*%%%*/ 07287 in_defined = 0; 07288 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node)); 07289 /*% 07290 in_defined = 0; 07291 $$ = dispatch1(defined, $4); 07292 %*/ 07293 ;} 07294 break; 07295 07296 case 235: 07297 07298 /* Line 1464 of yacc.c */ 07299 #line 2335 "parse.y" 07300 { 07301 /*%%%*/ 07302 value_expr((yyvsp[(1) - (6)].node)); 07303 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 07304 fixpos((yyval.node), (yyvsp[(1) - (6)].node)); 07305 /*% 07306 $$ = dispatch3(ifop, $1, $3, $6); 07307 %*/ 07308 ;} 07309 break; 07310 07311 case 236: 07312 07313 /* Line 1464 of yacc.c */ 07314 #line 2345 "parse.y" 07315 { 07316 (yyval.node) = (yyvsp[(1) - (1)].node); 07317 ;} 07318 break; 07319 07320 case 237: 07321 07322 /* Line 1464 of yacc.c */ 07323 #line 2351 "parse.y" 07324 { 07325 /*%%%*/ 07326 value_expr((yyvsp[(1) - (1)].node)); 07327 (yyval.node) = (yyvsp[(1) - (1)].node); 07328 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 07329 /*% 07330 $$ = $1; 07331 %*/ 07332 ;} 07333 break; 07334 07335 case 239: 07336 07337 /* Line 1464 of yacc.c */ 07338 #line 2364 "parse.y" 07339 { 07340 (yyval.node) = (yyvsp[(1) - (2)].node); 07341 ;} 07342 break; 07343 07344 case 240: 07345 07346 /* Line 1464 of yacc.c */ 07347 #line 2368 "parse.y" 07348 { 07349 /*%%%*/ 07350 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node))); 07351 /*% 07352 $$ = arg_add_assocs($1, $3); 07353 %*/ 07354 ;} 07355 break; 07356 07357 case 241: 07358 07359 /* Line 1464 of yacc.c */ 07360 #line 2376 "parse.y" 07361 { 07362 /*%%%*/ 07363 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node))); 07364 /*% 07365 $$ = arg_add_assocs(arg_new(), $1); 07366 %*/ 07367 ;} 07368 break; 07369 07370 case 242: 07371 07372 /* Line 1464 of yacc.c */ 07373 #line 2386 "parse.y" 07374 { 07375 /*%%%*/ 07376 (yyval.node) = (yyvsp[(2) - (3)].node); 07377 /*% 07378 $$ = dispatch1(arg_paren, escape_Qundef($2)); 07379 %*/ 07380 ;} 07381 break; 07382 07383 case 247: 07384 07385 /* Line 1464 of yacc.c */ 07386 #line 2404 "parse.y" 07387 { 07388 /*%%%*/ 07389 value_expr((yyvsp[(1) - (1)].node)); 07390 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 07391 /*% 07392 $$ = arg_add(arg_new(), $1); 07393 %*/ 07394 ;} 07395 break; 07396 07397 case 248: 07398 07399 /* Line 1464 of yacc.c */ 07400 #line 2413 "parse.y" 07401 { 07402 /*%%%*/ 07403 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 07404 /*% 07405 $$ = arg_add_optblock($1, $2); 07406 %*/ 07407 ;} 07408 break; 07409 07410 case 249: 07411 07412 /* Line 1464 of yacc.c */ 07413 #line 2421 "parse.y" 07414 { 07415 /*%%%*/ 07416 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node))); 07417 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node)); 07418 /*% 07419 $$ = arg_add_assocs(arg_new(), $1); 07420 $$ = arg_add_optblock($$, $2); 07421 %*/ 07422 ;} 07423 break; 07424 07425 case 250: 07426 07427 /* Line 1464 of yacc.c */ 07428 #line 2431 "parse.y" 07429 { 07430 /*%%%*/ 07431 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node))); 07432 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node)); 07433 /*% 07434 $$ = arg_add_optblock(arg_add_assocs($1, $3), $4); 07435 %*/ 07436 ;} 07437 break; 07438 07439 case 252: 07440 07441 /* Line 1464 of yacc.c */ 07442 #line 2448 "parse.y" 07443 { 07444 (yyval.val) = cmdarg_stack; 07445 CMDARG_PUSH(1); 07446 ;} 07447 break; 07448 07449 case 253: 07450 07451 /* Line 1464 of yacc.c */ 07452 #line 2453 "parse.y" 07453 { 07454 /* CMDARG_POP() */ 07455 cmdarg_stack = (yyvsp[(1) - (2)].val); 07456 (yyval.node) = (yyvsp[(2) - (2)].node); 07457 ;} 07458 break; 07459 07460 case 254: 07461 07462 /* Line 1464 of yacc.c */ 07463 #line 2461 "parse.y" 07464 { 07465 /*%%%*/ 07466 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node)); 07467 /*% 07468 $$ = $2; 07469 %*/ 07470 ;} 07471 break; 07472 07473 case 255: 07474 07475 /* Line 1464 of yacc.c */ 07476 #line 2471 "parse.y" 07477 { 07478 (yyval.node) = (yyvsp[(2) - (2)].node); 07479 ;} 07480 break; 07481 07482 case 256: 07483 07484 /* Line 1464 of yacc.c */ 07485 #line 2475 "parse.y" 07486 { 07487 (yyval.node) = 0; 07488 ;} 07489 break; 07490 07491 case 257: 07492 07493 /* Line 1464 of yacc.c */ 07494 #line 2479 "parse.y" 07495 { 07496 (yyval.node) = 0; 07497 ;} 07498 break; 07499 07500 case 258: 07501 07502 /* Line 1464 of yacc.c */ 07503 #line 2485 "parse.y" 07504 { 07505 /*%%%*/ 07506 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 07507 /*% 07508 $$ = arg_add(arg_new(), $1); 07509 %*/ 07510 ;} 07511 break; 07512 07513 case 259: 07514 07515 /* Line 1464 of yacc.c */ 07516 #line 2493 "parse.y" 07517 { 07518 /*%%%*/ 07519 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node)); 07520 /*% 07521 $$ = arg_add_star(arg_new(), $2); 07522 %*/ 07523 ;} 07524 break; 07525 07526 case 260: 07527 07528 /* Line 1464 of yacc.c */ 07529 #line 2501 "parse.y" 07530 { 07531 /*%%%*/ 07532 NODE *n1; 07533 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) { 07534 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node)); 07535 } 07536 else { 07537 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07538 } 07539 /*% 07540 $$ = arg_add($1, $3); 07541 %*/ 07542 ;} 07543 break; 07544 07545 case 261: 07546 07547 /* Line 1464 of yacc.c */ 07548 #line 2515 "parse.y" 07549 { 07550 /*%%%*/ 07551 NODE *n1; 07552 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) { 07553 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node)); 07554 } 07555 else { 07556 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); 07557 } 07558 /*% 07559 $$ = arg_add_star($1, $4); 07560 %*/ 07561 ;} 07562 break; 07563 07564 case 262: 07565 07566 /* Line 1464 of yacc.c */ 07567 #line 2531 "parse.y" 07568 { 07569 /*%%%*/ 07570 NODE *n1; 07571 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) { 07572 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node)); 07573 } 07574 else { 07575 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07576 } 07577 /*% 07578 $$ = mrhs_add(args2mrhs($1), $3); 07579 %*/ 07580 ;} 07581 break; 07582 07583 case 263: 07584 07585 /* Line 1464 of yacc.c */ 07586 #line 2545 "parse.y" 07587 { 07588 /*%%%*/ 07589 NODE *n1; 07590 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY && 07591 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) { 07592 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node)); 07593 } 07594 else { 07595 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); 07596 } 07597 /*% 07598 $$ = mrhs_add_star(args2mrhs($1), $4); 07599 %*/ 07600 ;} 07601 break; 07602 07603 case 264: 07604 07605 /* Line 1464 of yacc.c */ 07606 #line 2560 "parse.y" 07607 { 07608 /*%%%*/ 07609 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node)); 07610 /*% 07611 $$ = mrhs_add_star(mrhs_new(), $2); 07612 %*/ 07613 ;} 07614 break; 07615 07616 case 273: 07617 07618 /* Line 1464 of yacc.c */ 07619 #line 2578 "parse.y" 07620 { 07621 /*%%%*/ 07622 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0); 07623 /*% 07624 $$ = method_arg(dispatch1(fcall, $1), arg_new()); 07625 %*/ 07626 ;} 07627 break; 07628 07629 case 274: 07630 07631 /* Line 1464 of yacc.c */ 07632 #line 2586 "parse.y" 07633 { 07634 /*%%%*/ 07635 (yyval.num) = ruby_sourceline; 07636 /*% 07637 %*/ 07638 ;} 07639 break; 07640 07641 case 275: 07642 07643 /* Line 1464 of yacc.c */ 07644 #line 2594 "parse.y" 07645 { 07646 /*%%%*/ 07647 if ((yyvsp[(3) - (4)].node) == NULL) { 07648 (yyval.node) = NEW_NIL(); 07649 } 07650 else { 07651 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE || 07652 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE) 07653 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num)); 07654 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node)); 07655 } 07656 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num)); 07657 /*% 07658 $$ = dispatch1(begin, $3); 07659 %*/ 07660 ;} 07661 break; 07662 07663 case 276: 07664 07665 /* Line 1464 of yacc.c */ 07666 #line 2610 "parse.y" 07667 {lex_state = EXPR_ENDARG;;} 07668 break; 07669 07670 case 277: 07671 07672 /* Line 1464 of yacc.c */ 07673 #line 2611 "parse.y" 07674 { 07675 rb_warning0("(...) interpreted as grouped expression"); 07676 /*%%%*/ 07677 (yyval.node) = (yyvsp[(2) - (4)].node); 07678 /*% 07679 $$ = dispatch1(paren, $2); 07680 %*/ 07681 ;} 07682 break; 07683 07684 case 278: 07685 07686 /* Line 1464 of yacc.c */ 07687 #line 2620 "parse.y" 07688 { 07689 /*%%%*/ 07690 (yyval.node) = (yyvsp[(2) - (3)].node); 07691 /*% 07692 $$ = dispatch1(paren, $2); 07693 %*/ 07694 ;} 07695 break; 07696 07697 case 279: 07698 07699 /* Line 1464 of yacc.c */ 07700 #line 2628 "parse.y" 07701 { 07702 /*%%%*/ 07703 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 07704 /*% 07705 $$ = dispatch2(const_path_ref, $1, $3); 07706 %*/ 07707 ;} 07708 break; 07709 07710 case 280: 07711 07712 /* Line 1464 of yacc.c */ 07713 #line 2636 "parse.y" 07714 { 07715 /*%%%*/ 07716 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id)); 07717 /*% 07718 $$ = dispatch1(top_const_ref, $2); 07719 %*/ 07720 ;} 07721 break; 07722 07723 case 281: 07724 07725 /* Line 1464 of yacc.c */ 07726 #line 2644 "parse.y" 07727 { 07728 /*%%%*/ 07729 if ((yyvsp[(2) - (3)].node) == 0) { 07730 (yyval.node) = NEW_ZARRAY(); /* zero length array*/ 07731 } 07732 else { 07733 (yyval.node) = (yyvsp[(2) - (3)].node); 07734 } 07735 /*% 07736 $$ = dispatch1(array, escape_Qundef($2)); 07737 %*/ 07738 ;} 07739 break; 07740 07741 case 282: 07742 07743 /* Line 1464 of yacc.c */ 07744 #line 2657 "parse.y" 07745 { 07746 /*%%%*/ 07747 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node)); 07748 /*% 07749 $$ = dispatch1(hash, escape_Qundef($2)); 07750 %*/ 07751 ;} 07752 break; 07753 07754 case 283: 07755 07756 /* Line 1464 of yacc.c */ 07757 #line 2665 "parse.y" 07758 { 07759 /*%%%*/ 07760 (yyval.node) = NEW_RETURN(0); 07761 /*% 07762 $$ = dispatch0(return0); 07763 %*/ 07764 ;} 07765 break; 07766 07767 case 284: 07768 07769 /* Line 1464 of yacc.c */ 07770 #line 2673 "parse.y" 07771 { 07772 /*%%%*/ 07773 (yyval.node) = new_yield((yyvsp[(3) - (4)].node)); 07774 /*% 07775 $$ = dispatch1(yield, dispatch1(paren, $3)); 07776 %*/ 07777 ;} 07778 break; 07779 07780 case 285: 07781 07782 /* Line 1464 of yacc.c */ 07783 #line 2681 "parse.y" 07784 { 07785 /*%%%*/ 07786 (yyval.node) = NEW_YIELD(0, Qfalse); 07787 /*% 07788 $$ = dispatch1(yield, dispatch1(paren, arg_new())); 07789 %*/ 07790 ;} 07791 break; 07792 07793 case 286: 07794 07795 /* Line 1464 of yacc.c */ 07796 #line 2689 "parse.y" 07797 { 07798 /*%%%*/ 07799 (yyval.node) = NEW_YIELD(0, Qfalse); 07800 /*% 07801 $$ = dispatch0(yield0); 07802 %*/ 07803 ;} 07804 break; 07805 07806 case 287: 07807 07808 /* Line 1464 of yacc.c */ 07809 #line 2696 "parse.y" 07810 {in_defined = 1;;} 07811 break; 07812 07813 case 288: 07814 07815 /* Line 1464 of yacc.c */ 07816 #line 2697 "parse.y" 07817 { 07818 /*%%%*/ 07819 in_defined = 0; 07820 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node)); 07821 /*% 07822 in_defined = 0; 07823 $$ = dispatch1(defined, $5); 07824 %*/ 07825 ;} 07826 break; 07827 07828 case 289: 07829 07830 /* Line 1464 of yacc.c */ 07831 #line 2707 "parse.y" 07832 { 07833 /*%%%*/ 07834 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!'); 07835 /*% 07836 $$ = dispatch2(unary, ripper_intern("not"), $3); 07837 %*/ 07838 ;} 07839 break; 07840 07841 case 290: 07842 07843 /* Line 1464 of yacc.c */ 07844 #line 2715 "parse.y" 07845 { 07846 /*%%%*/ 07847 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!'); 07848 /*% 07849 $$ = dispatch2(unary, ripper_intern("not"), Qnil); 07850 %*/ 07851 ;} 07852 break; 07853 07854 case 291: 07855 07856 /* Line 1464 of yacc.c */ 07857 #line 2723 "parse.y" 07858 { 07859 /*%%%*/ 07860 (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0); 07861 (yyval.node) = (yyvsp[(2) - (2)].node); 07862 fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node)); 07863 /*% 07864 $$ = method_arg(dispatch1(fcall, $1), arg_new()); 07865 $$ = method_add_block($$, $2); 07866 %*/ 07867 ;} 07868 break; 07869 07870 case 293: 07871 07872 /* Line 1464 of yacc.c */ 07873 #line 2735 "parse.y" 07874 { 07875 /*%%%*/ 07876 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node)); 07877 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node); 07878 (yyval.node) = (yyvsp[(2) - (2)].node); 07879 fixpos((yyval.node), (yyvsp[(1) - (2)].node)); 07880 /*% 07881 $$ = method_add_block($1, $2); 07882 %*/ 07883 ;} 07884 break; 07885 07886 case 294: 07887 07888 /* Line 1464 of yacc.c */ 07889 #line 2746 "parse.y" 07890 { 07891 (yyval.node) = (yyvsp[(2) - (2)].node); 07892 ;} 07893 break; 07894 07895 case 295: 07896 07897 /* Line 1464 of yacc.c */ 07898 #line 2753 "parse.y" 07899 { 07900 /*%%%*/ 07901 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node)); 07902 fixpos((yyval.node), (yyvsp[(2) - (6)].node)); 07903 /*% 07904 $$ = dispatch3(if, $2, $4, escape_Qundef($5)); 07905 %*/ 07906 ;} 07907 break; 07908 07909 case 296: 07910 07911 /* Line 1464 of yacc.c */ 07912 #line 2765 "parse.y" 07913 { 07914 /*%%%*/ 07915 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node)); 07916 fixpos((yyval.node), (yyvsp[(2) - (6)].node)); 07917 /*% 07918 $$ = dispatch3(unless, $2, $4, escape_Qundef($5)); 07919 %*/ 07920 ;} 07921 break; 07922 07923 case 297: 07924 07925 /* Line 1464 of yacc.c */ 07926 #line 2773 "parse.y" 07927 {COND_PUSH(1);;} 07928 break; 07929 07930 case 298: 07931 07932 /* Line 1464 of yacc.c */ 07933 #line 2773 "parse.y" 07934 {COND_POP();;} 07935 break; 07936 07937 case 299: 07938 07939 /* Line 1464 of yacc.c */ 07940 #line 2776 "parse.y" 07941 { 07942 /*%%%*/ 07943 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1); 07944 fixpos((yyval.node), (yyvsp[(3) - (7)].node)); 07945 /*% 07946 $$ = dispatch2(while, $3, $6); 07947 %*/ 07948 ;} 07949 break; 07950 07951 case 300: 07952 07953 /* Line 1464 of yacc.c */ 07954 #line 2784 "parse.y" 07955 {COND_PUSH(1);;} 07956 break; 07957 07958 case 301: 07959 07960 /* Line 1464 of yacc.c */ 07961 #line 2784 "parse.y" 07962 {COND_POP();;} 07963 break; 07964 07965 case 302: 07966 07967 /* Line 1464 of yacc.c */ 07968 #line 2787 "parse.y" 07969 { 07970 /*%%%*/ 07971 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1); 07972 fixpos((yyval.node), (yyvsp[(3) - (7)].node)); 07973 /*% 07974 $$ = dispatch2(until, $3, $6); 07975 %*/ 07976 ;} 07977 break; 07978 07979 case 303: 07980 07981 /* Line 1464 of yacc.c */ 07982 #line 2798 "parse.y" 07983 { 07984 /*%%%*/ 07985 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node)); 07986 fixpos((yyval.node), (yyvsp[(2) - (5)].node)); 07987 /*% 07988 $$ = dispatch2(case, $2, $4); 07989 %*/ 07990 ;} 07991 break; 07992 07993 case 304: 07994 07995 /* Line 1464 of yacc.c */ 07996 #line 2807 "parse.y" 07997 { 07998 /*%%%*/ 07999 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node)); 08000 /*% 08001 $$ = dispatch2(case, Qnil, $3); 08002 %*/ 08003 ;} 08004 break; 08005 08006 case 305: 08007 08008 /* Line 1464 of yacc.c */ 08009 #line 2815 "parse.y" 08010 {COND_PUSH(1);;} 08011 break; 08012 08013 case 306: 08014 08015 /* Line 1464 of yacc.c */ 08016 #line 2817 "parse.y" 08017 {COND_POP();;} 08018 break; 08019 08020 case 307: 08021 08022 /* Line 1464 of yacc.c */ 08023 #line 2820 "parse.y" 08024 { 08025 /*%%%*/ 08026 /* 08027 * for a, b, c in e 08028 * #=> 08029 * e.each{|*x| a, b, c = x 08030 * 08031 * for a in e 08032 * #=> 08033 * e.each{|x| a, = x} 08034 */ 08035 ID id = internal_id(); 08036 ID *tbl = ALLOC_N(ID, 2); 08037 NODE *m = NEW_ARGS_AUX(0, 0); 08038 NODE *args, *scope; 08039 08040 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) { 08041 /* if args.length == 1 && args[0].kind_of?(Array) 08042 * args = args[0] 08043 * end 08044 */ 08045 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1))); 08046 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0))); 08047 m->nd_next = block_append( 08048 NEW_IF( 08049 NEW_NODE(NODE_AND, 08050 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0), 08051 rb_intern("=="), one), 08052 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero), 08053 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))), 08054 0), 08055 NEW_DASGN_CURR(id, 08056 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)), 08057 0), 08058 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id))); 08059 08060 args = new_args(m, 0, id, 0, 0); 08061 } 08062 else { 08063 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN || 08064 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN || 08065 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) { 08066 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id); 08067 m->nd_plen = 1; 08068 m->nd_next = (yyvsp[(2) - (9)].node); 08069 args = new_args(m, 0, 0, 0, 0); 08070 } 08071 else { 08072 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id)); 08073 args = new_args(m, 0, id, 0, 0); 08074 } 08075 } 08076 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args); 08077 tbl[0] = 1; tbl[1] = id; 08078 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope); 08079 fixpos((yyval.node), (yyvsp[(2) - (9)].node)); 08080 /*% 08081 $$ = dispatch3(for, $2, $5, $8); 08082 %*/ 08083 ;} 08084 break; 08085 08086 case 308: 08087 08088 /* Line 1464 of yacc.c */ 08089 #line 2881 "parse.y" 08090 { 08091 if (in_def || in_single) 08092 yyerror("class definition in method body"); 08093 local_push(0); 08094 /*%%%*/ 08095 (yyval.num) = ruby_sourceline; 08096 /*% 08097 %*/ 08098 ;} 08099 break; 08100 08101 case 309: 08102 08103 /* Line 1464 of yacc.c */ 08104 #line 2892 "parse.y" 08105 { 08106 /*%%%*/ 08107 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node)); 08108 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num)); 08109 /*% 08110 $$ = dispatch3(class, $2, $3, $5); 08111 %*/ 08112 local_pop(); 08113 ;} 08114 break; 08115 08116 case 310: 08117 08118 /* Line 1464 of yacc.c */ 08119 #line 2902 "parse.y" 08120 { 08121 (yyval.num) = in_def; 08122 in_def = 0; 08123 ;} 08124 break; 08125 08126 case 311: 08127 08128 /* Line 1464 of yacc.c */ 08129 #line 2907 "parse.y" 08130 { 08131 (yyval.num) = in_single; 08132 in_single = 0; 08133 local_push(0); 08134 ;} 08135 break; 08136 08137 case 312: 08138 08139 /* Line 1464 of yacc.c */ 08140 #line 2914 "parse.y" 08141 { 08142 /*%%%*/ 08143 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node)); 08144 fixpos((yyval.node), (yyvsp[(3) - (8)].node)); 08145 /*% 08146 $$ = dispatch2(sclass, $3, $7); 08147 %*/ 08148 local_pop(); 08149 in_def = (yyvsp[(4) - (8)].num); 08150 in_single = (yyvsp[(6) - (8)].num); 08151 ;} 08152 break; 08153 08154 case 313: 08155 08156 /* Line 1464 of yacc.c */ 08157 #line 2926 "parse.y" 08158 { 08159 if (in_def || in_single) 08160 yyerror("module definition in method body"); 08161 local_push(0); 08162 /*%%%*/ 08163 (yyval.num) = ruby_sourceline; 08164 /*% 08165 %*/ 08166 ;} 08167 break; 08168 08169 case 314: 08170 08171 /* Line 1464 of yacc.c */ 08172 #line 2937 "parse.y" 08173 { 08174 /*%%%*/ 08175 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node)); 08176 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num)); 08177 /*% 08178 $$ = dispatch2(module, $2, $4); 08179 %*/ 08180 local_pop(); 08181 ;} 08182 break; 08183 08184 case 315: 08185 08186 /* Line 1464 of yacc.c */ 08187 #line 2947 "parse.y" 08188 { 08189 (yyval.id) = cur_mid; 08190 cur_mid = (yyvsp[(2) - (2)].id); 08191 in_def++; 08192 local_push(0); 08193 ;} 08194 break; 08195 08196 case 316: 08197 08198 /* Line 1464 of yacc.c */ 08199 #line 2956 "parse.y" 08200 { 08201 /*%%%*/ 08202 NODE *body = remove_begin((yyvsp[(5) - (6)].node)); 08203 reduce_nodes(&body); 08204 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE); 08205 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num)); 08206 /*% 08207 $$ = dispatch3(def, $2, $4, $5); 08208 %*/ 08209 local_pop(); 08210 in_def--; 08211 cur_mid = (yyvsp[(3) - (6)].id); 08212 ;} 08213 break; 08214 08215 case 317: 08216 08217 /* Line 1464 of yacc.c */ 08218 #line 2969 "parse.y" 08219 {lex_state = EXPR_FNAME;;} 08220 break; 08221 08222 case 318: 08223 08224 /* Line 1464 of yacc.c */ 08225 #line 2970 "parse.y" 08226 { 08227 in_single++; 08228 lex_state = EXPR_ENDFN; /* force for args */ 08229 local_push(0); 08230 ;} 08231 break; 08232 08233 case 319: 08234 08235 /* Line 1464 of yacc.c */ 08236 #line 2978 "parse.y" 08237 { 08238 /*%%%*/ 08239 NODE *body = remove_begin((yyvsp[(8) - (9)].node)); 08240 reduce_nodes(&body); 08241 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body); 08242 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num)); 08243 /*% 08244 $$ = dispatch5(defs, $2, $3, $5, $7, $8); 08245 %*/ 08246 local_pop(); 08247 in_single--; 08248 ;} 08249 break; 08250 08251 case 320: 08252 08253 /* Line 1464 of yacc.c */ 08254 #line 2991 "parse.y" 08255 { 08256 /*%%%*/ 08257 (yyval.node) = NEW_BREAK(0); 08258 /*% 08259 $$ = dispatch1(break, arg_new()); 08260 %*/ 08261 ;} 08262 break; 08263 08264 case 321: 08265 08266 /* Line 1464 of yacc.c */ 08267 #line 2999 "parse.y" 08268 { 08269 /*%%%*/ 08270 (yyval.node) = NEW_NEXT(0); 08271 /*% 08272 $$ = dispatch1(next, arg_new()); 08273 %*/ 08274 ;} 08275 break; 08276 08277 case 322: 08278 08279 /* Line 1464 of yacc.c */ 08280 #line 3007 "parse.y" 08281 { 08282 /*%%%*/ 08283 (yyval.node) = NEW_REDO(); 08284 /*% 08285 $$ = dispatch0(redo); 08286 %*/ 08287 ;} 08288 break; 08289 08290 case 323: 08291 08292 /* Line 1464 of yacc.c */ 08293 #line 3015 "parse.y" 08294 { 08295 /*%%%*/ 08296 (yyval.node) = NEW_RETRY(); 08297 /*% 08298 $$ = dispatch0(retry); 08299 %*/ 08300 ;} 08301 break; 08302 08303 case 324: 08304 08305 /* Line 1464 of yacc.c */ 08306 #line 3025 "parse.y" 08307 { 08308 /*%%%*/ 08309 value_expr((yyvsp[(1) - (1)].node)); 08310 (yyval.node) = (yyvsp[(1) - (1)].node); 08311 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 08312 /*% 08313 $$ = $1; 08314 %*/ 08315 ;} 08316 break; 08317 08318 case 325: 08319 08320 /* Line 1464 of yacc.c */ 08321 #line 3037 "parse.y" 08322 { 08323 token_info_push("begin"); 08324 ;} 08325 break; 08326 08327 case 326: 08328 08329 /* Line 1464 of yacc.c */ 08330 #line 3043 "parse.y" 08331 { 08332 token_info_push("if"); 08333 ;} 08334 break; 08335 08336 case 327: 08337 08338 /* Line 1464 of yacc.c */ 08339 #line 3049 "parse.y" 08340 { 08341 token_info_push("unless"); 08342 ;} 08343 break; 08344 08345 case 328: 08346 08347 /* Line 1464 of yacc.c */ 08348 #line 3055 "parse.y" 08349 { 08350 token_info_push("while"); 08351 ;} 08352 break; 08353 08354 case 329: 08355 08356 /* Line 1464 of yacc.c */ 08357 #line 3061 "parse.y" 08358 { 08359 token_info_push("until"); 08360 ;} 08361 break; 08362 08363 case 330: 08364 08365 /* Line 1464 of yacc.c */ 08366 #line 3067 "parse.y" 08367 { 08368 token_info_push("case"); 08369 ;} 08370 break; 08371 08372 case 331: 08373 08374 /* Line 1464 of yacc.c */ 08375 #line 3073 "parse.y" 08376 { 08377 token_info_push("for"); 08378 ;} 08379 break; 08380 08381 case 332: 08382 08383 /* Line 1464 of yacc.c */ 08384 #line 3079 "parse.y" 08385 { 08386 token_info_push("class"); 08387 ;} 08388 break; 08389 08390 case 333: 08391 08392 /* Line 1464 of yacc.c */ 08393 #line 3085 "parse.y" 08394 { 08395 token_info_push("module"); 08396 ;} 08397 break; 08398 08399 case 334: 08400 08401 /* Line 1464 of yacc.c */ 08402 #line 3091 "parse.y" 08403 { 08404 token_info_push("def"); 08405 /*%%%*/ 08406 (yyval.num) = ruby_sourceline; 08407 /*% 08408 %*/ 08409 ;} 08410 break; 08411 08412 case 335: 08413 08414 /* Line 1464 of yacc.c */ 08415 #line 3101 "parse.y" 08416 { 08417 token_info_pop("end"); 08418 ;} 08419 break; 08420 08421 case 342: 08422 08423 /* Line 1464 of yacc.c */ 08424 #line 3131 "parse.y" 08425 { 08426 /*%%%*/ 08427 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node)); 08428 fixpos((yyval.node), (yyvsp[(2) - (5)].node)); 08429 /*% 08430 $$ = dispatch3(elsif, $2, $4, escape_Qundef($5)); 08431 %*/ 08432 ;} 08433 break; 08434 08435 case 344: 08436 08437 /* Line 1464 of yacc.c */ 08438 #line 3143 "parse.y" 08439 { 08440 /*%%%*/ 08441 (yyval.node) = (yyvsp[(2) - (2)].node); 08442 /*% 08443 $$ = dispatch1(else, $2); 08444 %*/ 08445 ;} 08446 break; 08447 08448 case 347: 08449 08450 /* Line 1464 of yacc.c */ 08451 #line 3157 "parse.y" 08452 { 08453 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 08454 /*%%%*/ 08455 /*% 08456 $$ = dispatch1(mlhs_paren, $$); 08457 %*/ 08458 ;} 08459 break; 08460 08461 case 348: 08462 08463 /* Line 1464 of yacc.c */ 08464 #line 3165 "parse.y" 08465 { 08466 /*%%%*/ 08467 (yyval.node) = (yyvsp[(2) - (3)].node); 08468 /*% 08469 $$ = dispatch1(mlhs_paren, $2); 08470 %*/ 08471 ;} 08472 break; 08473 08474 case 349: 08475 08476 /* Line 1464 of yacc.c */ 08477 #line 3175 "parse.y" 08478 { 08479 /*%%%*/ 08480 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 08481 /*% 08482 $$ = mlhs_add(mlhs_new(), $1); 08483 %*/ 08484 ;} 08485 break; 08486 08487 case 350: 08488 08489 /* Line 1464 of yacc.c */ 08490 #line 3183 "parse.y" 08491 { 08492 /*%%%*/ 08493 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 08494 /*% 08495 $$ = mlhs_add($1, $3); 08496 %*/ 08497 ;} 08498 break; 08499 08500 case 351: 08501 08502 /* Line 1464 of yacc.c */ 08503 #line 3193 "parse.y" 08504 { 08505 /*%%%*/ 08506 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0); 08507 /*% 08508 $$ = $1; 08509 %*/ 08510 ;} 08511 break; 08512 08513 case 352: 08514 08515 /* Line 1464 of yacc.c */ 08516 #line 3201 "parse.y" 08517 { 08518 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0); 08519 /*%%%*/ 08520 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node)); 08521 /*% 08522 $$ = mlhs_add_star($1, $$); 08523 %*/ 08524 ;} 08525 break; 08526 08527 case 353: 08528 08529 /* Line 1464 of yacc.c */ 08530 #line 3210 "parse.y" 08531 { 08532 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0); 08533 /*%%%*/ 08534 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node))); 08535 /*% 08536 $$ = mlhs_add_star($1, $$); 08537 %*/ 08538 ;} 08539 break; 08540 08541 case 354: 08542 08543 /* Line 1464 of yacc.c */ 08544 #line 3219 "parse.y" 08545 { 08546 /*%%%*/ 08547 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1); 08548 /*% 08549 $$ = mlhs_add_star($1, Qnil); 08550 %*/ 08551 ;} 08552 break; 08553 08554 case 355: 08555 08556 /* Line 1464 of yacc.c */ 08557 #line 3227 "parse.y" 08558 { 08559 /*%%%*/ 08560 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node))); 08561 /*% 08562 $$ = mlhs_add_star($1, $5); 08563 %*/ 08564 ;} 08565 break; 08566 08567 case 356: 08568 08569 /* Line 1464 of yacc.c */ 08570 #line 3235 "parse.y" 08571 { 08572 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0); 08573 /*%%%*/ 08574 (yyval.node) = NEW_MASGN(0, (yyval.node)); 08575 /*% 08576 $$ = mlhs_add_star(mlhs_new(), $$); 08577 %*/ 08578 ;} 08579 break; 08580 08581 case 357: 08582 08583 /* Line 1464 of yacc.c */ 08584 #line 3244 "parse.y" 08585 { 08586 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0); 08587 /*%%%*/ 08588 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node))); 08589 /*% 08590 #if 0 08591 TODO: Check me 08592 #endif 08593 $$ = mlhs_add_star($$, $4); 08594 %*/ 08595 ;} 08596 break; 08597 08598 case 358: 08599 08600 /* Line 1464 of yacc.c */ 08601 #line 3256 "parse.y" 08602 { 08603 /*%%%*/ 08604 (yyval.node) = NEW_MASGN(0, -1); 08605 /*% 08606 $$ = mlhs_add_star(mlhs_new(), Qnil); 08607 %*/ 08608 ;} 08609 break; 08610 08611 case 359: 08612 08613 /* Line 1464 of yacc.c */ 08614 #line 3264 "parse.y" 08615 { 08616 /*%%%*/ 08617 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node))); 08618 /*% 08619 $$ = mlhs_add_star(mlhs_new(), Qnil); 08620 %*/ 08621 ;} 08622 break; 08623 08624 case 360: 08625 08626 /* Line 1464 of yacc.c */ 08627 #line 3274 "parse.y" 08628 { 08629 /*%%%*/ 08630 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id)); 08631 /*% 08632 $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6)); 08633 %*/ 08634 ;} 08635 break; 08636 08637 case 361: 08638 08639 /* Line 1464 of yacc.c */ 08640 #line 3282 "parse.y" 08641 { 08642 /*%%%*/ 08643 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id)); 08644 /*% 08645 $$ = params_new($1, $3, $5, $7, escape_Qundef($8)); 08646 %*/ 08647 ;} 08648 break; 08649 08650 case 362: 08651 08652 /* Line 1464 of yacc.c */ 08653 #line 3290 "parse.y" 08654 { 08655 /*%%%*/ 08656 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id)); 08657 /*% 08658 $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4)); 08659 %*/ 08660 ;} 08661 break; 08662 08663 case 363: 08664 08665 /* Line 1464 of yacc.c */ 08666 #line 3298 "parse.y" 08667 { 08668 /*%%%*/ 08669 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 08670 /*% 08671 $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6)); 08672 %*/ 08673 ;} 08674 break; 08675 08676 case 364: 08677 08678 /* Line 1464 of yacc.c */ 08679 #line 3306 "parse.y" 08680 { 08681 /*%%%*/ 08682 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id)); 08683 /*% 08684 $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4)); 08685 %*/ 08686 ;} 08687 break; 08688 08689 case 365: 08690 08691 /* Line 1464 of yacc.c */ 08692 #line 3314 "parse.y" 08693 { 08694 /*%%%*/ 08695 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0); 08696 /*% 08697 $$ = params_new($1, Qnil, Qnil, Qnil, Qnil); 08698 dispatch1(excessed_comma, $$); 08699 %*/ 08700 ;} 08701 break; 08702 08703 case 366: 08704 08705 /* Line 1464 of yacc.c */ 08706 #line 3323 "parse.y" 08707 { 08708 /*%%%*/ 08709 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 08710 /*% 08711 $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6)); 08712 %*/ 08713 ;} 08714 break; 08715 08716 case 367: 08717 08718 /* Line 1464 of yacc.c */ 08719 #line 3331 "parse.y" 08720 { 08721 /*%%%*/ 08722 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id)); 08723 /*% 08724 $$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2)); 08725 %*/ 08726 ;} 08727 break; 08728 08729 case 368: 08730 08731 /* Line 1464 of yacc.c */ 08732 #line 3339 "parse.y" 08733 { 08734 /*%%%*/ 08735 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id)); 08736 /*% 08737 $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4)); 08738 %*/ 08739 ;} 08740 break; 08741 08742 case 369: 08743 08744 /* Line 1464 of yacc.c */ 08745 #line 3347 "parse.y" 08746 { 08747 /*%%%*/ 08748 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 08749 /*% 08750 $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6)); 08751 %*/ 08752 ;} 08753 break; 08754 08755 case 370: 08756 08757 /* Line 1464 of yacc.c */ 08758 #line 3355 "parse.y" 08759 { 08760 /*%%%*/ 08761 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id)); 08762 /*% 08763 $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2)); 08764 %*/ 08765 ;} 08766 break; 08767 08768 case 371: 08769 08770 /* Line 1464 of yacc.c */ 08771 #line 3363 "parse.y" 08772 { 08773 /*%%%*/ 08774 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id)); 08775 /*% 08776 $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4)); 08777 %*/ 08778 ;} 08779 break; 08780 08781 case 372: 08782 08783 /* Line 1464 of yacc.c */ 08784 #line 3371 "parse.y" 08785 { 08786 /*%%%*/ 08787 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id)); 08788 /*% 08789 $$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2)); 08790 %*/ 08791 ;} 08792 break; 08793 08794 case 373: 08795 08796 /* Line 1464 of yacc.c */ 08797 #line 3379 "parse.y" 08798 { 08799 /*%%%*/ 08800 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id)); 08801 /*% 08802 $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4)); 08803 %*/ 08804 ;} 08805 break; 08806 08807 case 374: 08808 08809 /* Line 1464 of yacc.c */ 08810 #line 3387 "parse.y" 08811 { 08812 /*%%%*/ 08813 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id)); 08814 /*% 08815 $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1); 08816 %*/ 08817 ;} 08818 break; 08819 08820 case 376: 08821 08822 /* Line 1464 of yacc.c */ 08823 #line 3398 "parse.y" 08824 { 08825 command_start = TRUE; 08826 ;} 08827 break; 08828 08829 case 377: 08830 08831 /* Line 1464 of yacc.c */ 08832 #line 3404 "parse.y" 08833 { 08834 /*%%%*/ 08835 (yyval.node) = 0; 08836 /*% 08837 $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil), 08838 escape_Qundef($2)); 08839 %*/ 08840 ;} 08841 break; 08842 08843 case 378: 08844 08845 /* Line 1464 of yacc.c */ 08846 #line 3413 "parse.y" 08847 { 08848 /*%%%*/ 08849 (yyval.node) = 0; 08850 /*% 08851 $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil), 08852 Qnil); 08853 %*/ 08854 ;} 08855 break; 08856 08857 case 379: 08858 08859 /* Line 1464 of yacc.c */ 08860 #line 3422 "parse.y" 08861 { 08862 /*%%%*/ 08863 (yyval.node) = (yyvsp[(2) - (4)].node); 08864 /*% 08865 $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3)); 08866 %*/ 08867 ;} 08868 break; 08869 08870 case 381: 08871 08872 /* Line 1464 of yacc.c */ 08873 #line 3434 "parse.y" 08874 { 08875 /*%%%*/ 08876 (yyval.node) = 0; 08877 /*% 08878 $$ = $2; 08879 %*/ 08880 ;} 08881 break; 08882 08883 case 384: 08884 08885 /* Line 1464 of yacc.c */ 08886 #line 3460 "parse.y" 08887 { 08888 new_bv(get_id((yyvsp[(1) - (1)].id))); 08889 /*%%%*/ 08890 /*% 08891 $$ = get_value($1); 08892 %*/ 08893 ;} 08894 break; 08895 08896 case 385: 08897 08898 /* Line 1464 of yacc.c */ 08899 #line 3468 "parse.y" 08900 { 08901 (yyval.node) = 0; 08902 ;} 08903 break; 08904 08905 case 386: 08906 08907 /* Line 1464 of yacc.c */ 08908 #line 3473 "parse.y" 08909 { 08910 (yyval.vars) = dyna_push(); 08911 ;} 08912 break; 08913 08914 case 387: 08915 08916 /* Line 1464 of yacc.c */ 08917 #line 3476 "parse.y" 08918 { 08919 (yyval.num) = lpar_beg; 08920 lpar_beg = ++paren_nest; 08921 ;} 08922 break; 08923 08924 case 388: 08925 08926 /* Line 1464 of yacc.c */ 08927 #line 3482 "parse.y" 08928 { 08929 lpar_beg = (yyvsp[(2) - (4)].num); 08930 /*%%%*/ 08931 (yyval.node) = (yyvsp[(3) - (4)].node); 08932 (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node)); 08933 /*% 08934 $$ = dispatch2(lambda, $3, $4); 08935 %*/ 08936 dyna_pop((yyvsp[(1) - (4)].vars)); 08937 ;} 08938 break; 08939 08940 case 389: 08941 08942 /* Line 1464 of yacc.c */ 08943 #line 3495 "parse.y" 08944 { 08945 /*%%%*/ 08946 (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node)); 08947 /*% 08948 $$ = dispatch1(paren, $2); 08949 %*/ 08950 ;} 08951 break; 08952 08953 case 390: 08954 08955 /* Line 1464 of yacc.c */ 08956 #line 3503 "parse.y" 08957 { 08958 /*%%%*/ 08959 (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node)); 08960 /*% 08961 $$ = $1; 08962 %*/ 08963 ;} 08964 break; 08965 08966 case 391: 08967 08968 /* Line 1464 of yacc.c */ 08969 #line 3513 "parse.y" 08970 { 08971 (yyval.node) = (yyvsp[(2) - (3)].node); 08972 ;} 08973 break; 08974 08975 case 392: 08976 08977 /* Line 1464 of yacc.c */ 08978 #line 3517 "parse.y" 08979 { 08980 (yyval.node) = (yyvsp[(2) - (3)].node); 08981 ;} 08982 break; 08983 08984 case 393: 08985 08986 /* Line 1464 of yacc.c */ 08987 #line 3523 "parse.y" 08988 { 08989 (yyvsp[(1) - (1)].vars) = dyna_push(); 08990 /*%%%*/ 08991 (yyval.num) = ruby_sourceline; 08992 /*% %*/ 08993 ;} 08994 break; 08995 08996 case 394: 08997 08998 /* Line 1464 of yacc.c */ 08999 #line 3532 "parse.y" 09000 { 09001 /*%%%*/ 09002 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09003 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09004 /*% 09005 $$ = dispatch2(do_block, escape_Qundef($3), $4); 09006 %*/ 09007 dyna_pop((yyvsp[(1) - (5)].vars)); 09008 ;} 09009 break; 09010 09011 case 395: 09012 09013 /* Line 1464 of yacc.c */ 09014 #line 3544 "parse.y" 09015 { 09016 /*%%%*/ 09017 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) { 09018 compile_error(PARSER_ARG "block given to yield"); 09019 } 09020 else { 09021 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node)); 09022 } 09023 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node); 09024 (yyval.node) = (yyvsp[(2) - (2)].node); 09025 fixpos((yyval.node), (yyvsp[(1) - (2)].node)); 09026 /*% 09027 $$ = method_add_block($1, $2); 09028 %*/ 09029 ;} 09030 break; 09031 09032 case 396: 09033 09034 /* Line 1464 of yacc.c */ 09035 #line 3560 "parse.y" 09036 { 09037 /*%%%*/ 09038 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09039 /*% 09040 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 09041 $$ = method_optarg($$, $4); 09042 %*/ 09043 ;} 09044 break; 09045 09046 case 397: 09047 09048 /* Line 1464 of yacc.c */ 09049 #line 3569 "parse.y" 09050 { 09051 /*%%%*/ 09052 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09053 /*% 09054 $$ = dispatch3(call, $1, ripper_intern("::"), $3); 09055 $$ = method_optarg($$, $4); 09056 %*/ 09057 ;} 09058 break; 09059 09060 case 398: 09061 09062 /* Line 1464 of yacc.c */ 09063 #line 3580 "parse.y" 09064 { 09065 /*%%%*/ 09066 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node)); 09067 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 09068 /*% 09069 $$ = method_arg(dispatch1(fcall, $1), $2); 09070 %*/ 09071 ;} 09072 break; 09073 09074 case 399: 09075 09076 /* Line 1464 of yacc.c */ 09077 #line 3589 "parse.y" 09078 { 09079 /*%%%*/ 09080 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09081 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 09082 /*% 09083 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 09084 $$ = method_optarg($$, $4); 09085 %*/ 09086 ;} 09087 break; 09088 09089 case 400: 09090 09091 /* Line 1464 of yacc.c */ 09092 #line 3599 "parse.y" 09093 { 09094 /*%%%*/ 09095 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09096 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 09097 /*% 09098 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 09099 $$ = method_optarg($$, $4); 09100 %*/ 09101 ;} 09102 break; 09103 09104 case 401: 09105 09106 /* Line 1464 of yacc.c */ 09107 #line 3609 "parse.y" 09108 { 09109 /*%%%*/ 09110 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0); 09111 /*% 09112 $$ = dispatch3(call, $1, ripper_intern("::"), $3); 09113 %*/ 09114 ;} 09115 break; 09116 09117 case 402: 09118 09119 /* Line 1464 of yacc.c */ 09120 #line 3617 "parse.y" 09121 { 09122 /*%%%*/ 09123 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node)); 09124 fixpos((yyval.node), (yyvsp[(1) - (3)].node)); 09125 /*% 09126 $$ = dispatch3(call, $1, ripper_id2sym('.'), 09127 ripper_intern("call")); 09128 $$ = method_optarg($$, $3); 09129 %*/ 09130 ;} 09131 break; 09132 09133 case 403: 09134 09135 /* Line 1464 of yacc.c */ 09136 #line 3628 "parse.y" 09137 { 09138 /*%%%*/ 09139 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node)); 09140 fixpos((yyval.node), (yyvsp[(1) - (3)].node)); 09141 /*% 09142 $$ = dispatch3(call, $1, ripper_intern("::"), 09143 ripper_intern("call")); 09144 $$ = method_optarg($$, $3); 09145 %*/ 09146 ;} 09147 break; 09148 09149 case 404: 09150 09151 /* Line 1464 of yacc.c */ 09152 #line 3639 "parse.y" 09153 { 09154 /*%%%*/ 09155 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node)); 09156 /*% 09157 $$ = dispatch1(super, $2); 09158 %*/ 09159 ;} 09160 break; 09161 09162 case 405: 09163 09164 /* Line 1464 of yacc.c */ 09165 #line 3647 "parse.y" 09166 { 09167 /*%%%*/ 09168 (yyval.node) = NEW_ZSUPER(); 09169 /*% 09170 $$ = dispatch0(zsuper); 09171 %*/ 09172 ;} 09173 break; 09174 09175 case 406: 09176 09177 /* Line 1464 of yacc.c */ 09178 #line 3655 "parse.y" 09179 { 09180 /*%%%*/ 09181 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF) 09182 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node)); 09183 else 09184 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node)); 09185 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 09186 /*% 09187 $$ = dispatch2(aref, $1, escape_Qundef($3)); 09188 %*/ 09189 ;} 09190 break; 09191 09192 case 407: 09193 09194 /* Line 1464 of yacc.c */ 09195 #line 3669 "parse.y" 09196 { 09197 (yyvsp[(1) - (1)].vars) = dyna_push(); 09198 /*%%%*/ 09199 (yyval.num) = ruby_sourceline; 09200 /*% 09201 %*/ 09202 ;} 09203 break; 09204 09205 case 408: 09206 09207 /* Line 1464 of yacc.c */ 09208 #line 3678 "parse.y" 09209 { 09210 /*%%%*/ 09211 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09212 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09213 /*% 09214 $$ = dispatch2(brace_block, escape_Qundef($3), $4); 09215 %*/ 09216 dyna_pop((yyvsp[(1) - (5)].vars)); 09217 ;} 09218 break; 09219 09220 case 409: 09221 09222 /* Line 1464 of yacc.c */ 09223 #line 3688 "parse.y" 09224 { 09225 (yyvsp[(1) - (1)].vars) = dyna_push(); 09226 /*%%%*/ 09227 (yyval.num) = ruby_sourceline; 09228 /*% 09229 %*/ 09230 ;} 09231 break; 09232 09233 case 410: 09234 09235 /* Line 1464 of yacc.c */ 09236 #line 3697 "parse.y" 09237 { 09238 /*%%%*/ 09239 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09240 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09241 /*% 09242 $$ = dispatch2(do_block, escape_Qundef($3), $4); 09243 %*/ 09244 dyna_pop((yyvsp[(1) - (5)].vars)); 09245 ;} 09246 break; 09247 09248 case 411: 09249 09250 /* Line 1464 of yacc.c */ 09251 #line 3711 "parse.y" 09252 { 09253 /*%%%*/ 09254 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node)); 09255 /*% 09256 $$ = dispatch3(when, $2, $4, escape_Qundef($5)); 09257 %*/ 09258 ;} 09259 break; 09260 09261 case 414: 09262 09263 /* Line 1464 of yacc.c */ 09264 #line 3727 "parse.y" 09265 { 09266 /*%%%*/ 09267 if ((yyvsp[(3) - (6)].node)) { 09268 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO()); 09269 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node)); 09270 } 09271 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 09272 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node)); 09273 /*% 09274 $$ = dispatch4(rescue, 09275 escape_Qundef($2), 09276 escape_Qundef($3), 09277 escape_Qundef($5), 09278 escape_Qundef($6)); 09279 %*/ 09280 ;} 09281 break; 09282 09283 case 416: 09284 09285 /* Line 1464 of yacc.c */ 09286 #line 3747 "parse.y" 09287 { 09288 /*%%%*/ 09289 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 09290 /*% 09291 $$ = rb_ary_new3(1, $1); 09292 %*/ 09293 ;} 09294 break; 09295 09296 case 417: 09297 09298 /* Line 1464 of yacc.c */ 09299 #line 3755 "parse.y" 09300 { 09301 /*%%%*/ 09302 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node); 09303 /*% 09304 $$ = $1; 09305 %*/ 09306 ;} 09307 break; 09308 09309 case 419: 09310 09311 /* Line 1464 of yacc.c */ 09312 #line 3766 "parse.y" 09313 { 09314 (yyval.node) = (yyvsp[(2) - (2)].node); 09315 ;} 09316 break; 09317 09318 case 421: 09319 09320 /* Line 1464 of yacc.c */ 09321 #line 3773 "parse.y" 09322 { 09323 /*%%%*/ 09324 (yyval.node) = (yyvsp[(2) - (2)].node); 09325 /*% 09326 $$ = dispatch1(ensure, $2); 09327 %*/ 09328 ;} 09329 break; 09330 09331 case 424: 09332 09333 /* Line 1464 of yacc.c */ 09334 #line 3785 "parse.y" 09335 { 09336 /*%%%*/ 09337 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id))); 09338 /*% 09339 $$ = dispatch1(symbol_literal, $1); 09340 %*/ 09341 ;} 09342 break; 09343 09344 case 426: 09345 09346 /* Line 1464 of yacc.c */ 09347 #line 3796 "parse.y" 09348 { 09349 /*%%%*/ 09350 NODE *node = (yyvsp[(1) - (1)].node); 09351 if (!node) { 09352 node = NEW_STR(STR_NEW0()); 09353 } 09354 else { 09355 node = evstr2dstr(node); 09356 } 09357 (yyval.node) = node; 09358 /*% 09359 $$ = $1; 09360 %*/ 09361 ;} 09362 break; 09363 09364 case 429: 09365 09366 /* Line 1464 of yacc.c */ 09367 #line 3815 "parse.y" 09368 { 09369 /*%%%*/ 09370 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09371 /*% 09372 $$ = dispatch2(string_concat, $1, $2); 09373 %*/ 09374 ;} 09375 break; 09376 09377 case 430: 09378 09379 /* Line 1464 of yacc.c */ 09380 #line 3825 "parse.y" 09381 { 09382 /*%%%*/ 09383 (yyval.node) = (yyvsp[(2) - (3)].node); 09384 /*% 09385 $$ = dispatch1(string_literal, $2); 09386 %*/ 09387 ;} 09388 break; 09389 09390 case 431: 09391 09392 /* Line 1464 of yacc.c */ 09393 #line 3835 "parse.y" 09394 { 09395 /*%%%*/ 09396 NODE *node = (yyvsp[(2) - (3)].node); 09397 if (!node) { 09398 node = NEW_XSTR(STR_NEW0()); 09399 } 09400 else { 09401 switch (nd_type(node)) { 09402 case NODE_STR: 09403 nd_set_type(node, NODE_XSTR); 09404 break; 09405 case NODE_DSTR: 09406 nd_set_type(node, NODE_DXSTR); 09407 break; 09408 default: 09409 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node)); 09410 break; 09411 } 09412 } 09413 (yyval.node) = node; 09414 /*% 09415 $$ = dispatch1(xstring_literal, $2); 09416 %*/ 09417 ;} 09418 break; 09419 09420 case 432: 09421 09422 /* Line 1464 of yacc.c */ 09423 #line 3862 "parse.y" 09424 { 09425 /*%%%*/ 09426 int options = (yyvsp[(3) - (3)].num); 09427 NODE *node = (yyvsp[(2) - (3)].node); 09428 NODE *list, *prev; 09429 if (!node) { 09430 node = NEW_LIT(reg_compile(STR_NEW0(), options)); 09431 } 09432 else switch (nd_type(node)) { 09433 case NODE_STR: 09434 { 09435 VALUE src = node->nd_lit; 09436 nd_set_type(node, NODE_LIT); 09437 node->nd_lit = reg_compile(src, options); 09438 } 09439 break; 09440 default: 09441 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node)); 09442 case NODE_DSTR: 09443 if (options & RE_OPTION_ONCE) { 09444 nd_set_type(node, NODE_DREGX_ONCE); 09445 } 09446 else { 09447 nd_set_type(node, NODE_DREGX); 09448 } 09449 node->nd_cflag = options & RE_OPTION_MASK; 09450 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options); 09451 for (list = (prev = node)->nd_next; list; list = list->nd_next) { 09452 if (nd_type(list->nd_head) == NODE_STR) { 09453 VALUE tail = list->nd_head->nd_lit; 09454 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) { 09455 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit; 09456 if (!literal_concat0(parser, lit, tail)) { 09457 node = 0; 09458 break; 09459 } 09460 rb_str_resize(tail, 0); 09461 prev->nd_next = list->nd_next; 09462 rb_gc_force_recycle((VALUE)list->nd_head); 09463 rb_gc_force_recycle((VALUE)list); 09464 list = prev; 09465 } 09466 else { 09467 prev = list; 09468 } 09469 } 09470 else { 09471 prev = 0; 09472 } 09473 } 09474 if (!node->nd_next) { 09475 VALUE src = node->nd_lit; 09476 nd_set_type(node, NODE_LIT); 09477 node->nd_lit = reg_compile(src, options); 09478 } 09479 break; 09480 } 09481 (yyval.node) = node; 09482 /*% 09483 $$ = dispatch2(regexp_literal, $2, $3); 09484 %*/ 09485 ;} 09486 break; 09487 09488 case 433: 09489 09490 /* Line 1464 of yacc.c */ 09491 #line 3927 "parse.y" 09492 { 09493 /*%%%*/ 09494 (yyval.node) = NEW_ZARRAY(); 09495 /*% 09496 $$ = dispatch0(words_new); 09497 %*/ 09498 ;} 09499 break; 09500 09501 case 434: 09502 09503 /* Line 1464 of yacc.c */ 09504 #line 3935 "parse.y" 09505 { 09506 (yyval.node) = (yyvsp[(2) - (3)].node); 09507 ;} 09508 break; 09509 09510 case 435: 09511 09512 /* Line 1464 of yacc.c */ 09513 #line 3941 "parse.y" 09514 { 09515 /*%%%*/ 09516 (yyval.node) = 0; 09517 /*% 09518 $$ = dispatch0(words_new); 09519 %*/ 09520 ;} 09521 break; 09522 09523 case 436: 09524 09525 /* Line 1464 of yacc.c */ 09526 #line 3949 "parse.y" 09527 { 09528 /*%%%*/ 09529 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node))); 09530 /*% 09531 $$ = dispatch2(words_add, $1, $2); 09532 %*/ 09533 ;} 09534 break; 09535 09536 case 438: 09537 09538 /* Line 1464 of yacc.c */ 09539 #line 3967 "parse.y" 09540 { 09541 /*%%%*/ 09542 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09543 /*% 09544 $$ = dispatch2(word_add, $1, $2); 09545 %*/ 09546 ;} 09547 break; 09548 09549 case 439: 09550 09551 /* Line 1464 of yacc.c */ 09552 #line 3977 "parse.y" 09553 { 09554 /*%%%*/ 09555 (yyval.node) = NEW_ZARRAY(); 09556 /*% 09557 $$ = dispatch0(qwords_new); 09558 %*/ 09559 ;} 09560 break; 09561 09562 case 440: 09563 09564 /* Line 1464 of yacc.c */ 09565 #line 3985 "parse.y" 09566 { 09567 (yyval.node) = (yyvsp[(2) - (3)].node); 09568 ;} 09569 break; 09570 09571 case 441: 09572 09573 /* Line 1464 of yacc.c */ 09574 #line 3991 "parse.y" 09575 { 09576 /*%%%*/ 09577 (yyval.node) = 0; 09578 /*% 09579 $$ = dispatch0(qwords_new); 09580 %*/ 09581 ;} 09582 break; 09583 09584 case 442: 09585 09586 /* Line 1464 of yacc.c */ 09587 #line 3999 "parse.y" 09588 { 09589 /*%%%*/ 09590 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node)); 09591 /*% 09592 $$ = dispatch2(qwords_add, $1, $2); 09593 %*/ 09594 ;} 09595 break; 09596 09597 case 443: 09598 09599 /* Line 1464 of yacc.c */ 09600 #line 4009 "parse.y" 09601 { 09602 /*%%%*/ 09603 (yyval.node) = 0; 09604 /*% 09605 $$ = dispatch0(string_content); 09606 %*/ 09607 ;} 09608 break; 09609 09610 case 444: 09611 09612 /* Line 1464 of yacc.c */ 09613 #line 4017 "parse.y" 09614 { 09615 /*%%%*/ 09616 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09617 /*% 09618 $$ = dispatch2(string_add, $1, $2); 09619 %*/ 09620 ;} 09621 break; 09622 09623 case 445: 09624 09625 /* Line 1464 of yacc.c */ 09626 #line 4027 "parse.y" 09627 { 09628 /*%%%*/ 09629 (yyval.node) = 0; 09630 /*% 09631 $$ = dispatch0(xstring_new); 09632 %*/ 09633 ;} 09634 break; 09635 09636 case 446: 09637 09638 /* Line 1464 of yacc.c */ 09639 #line 4035 "parse.y" 09640 { 09641 /*%%%*/ 09642 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09643 /*% 09644 $$ = dispatch2(xstring_add, $1, $2); 09645 %*/ 09646 ;} 09647 break; 09648 09649 case 447: 09650 09651 /* Line 1464 of yacc.c */ 09652 #line 4045 "parse.y" 09653 { 09654 /*%%%*/ 09655 (yyval.node) = 0; 09656 /*% 09657 $$ = dispatch0(regexp_new); 09658 %*/ 09659 ;} 09660 break; 09661 09662 case 448: 09663 09664 /* Line 1464 of yacc.c */ 09665 #line 4053 "parse.y" 09666 { 09667 /*%%%*/ 09668 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node); 09669 if (!head) { 09670 (yyval.node) = tail; 09671 } 09672 else if (!tail) { 09673 (yyval.node) = head; 09674 } 09675 else { 09676 switch (nd_type(head)) { 09677 case NODE_STR: 09678 nd_set_type(head, NODE_DSTR); 09679 break; 09680 case NODE_DSTR: 09681 break; 09682 default: 09683 head = list_append(NEW_DSTR(Qnil), head); 09684 break; 09685 } 09686 (yyval.node) = list_append(head, tail); 09687 } 09688 /*% 09689 $$ = dispatch2(regexp_add, $1, $2); 09690 %*/ 09691 ;} 09692 break; 09693 09694 case 450: 09695 09696 /* Line 1464 of yacc.c */ 09697 #line 4083 "parse.y" 09698 { 09699 (yyval.node) = lex_strterm; 09700 lex_strterm = 0; 09701 lex_state = EXPR_BEG; 09702 ;} 09703 break; 09704 09705 case 451: 09706 09707 /* Line 1464 of yacc.c */ 09708 #line 4089 "parse.y" 09709 { 09710 /*%%%*/ 09711 lex_strterm = (yyvsp[(2) - (3)].node); 09712 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node)); 09713 /*% 09714 lex_strterm = $<node>2; 09715 $$ = dispatch1(string_dvar, $3); 09716 %*/ 09717 ;} 09718 break; 09719 09720 case 452: 09721 09722 /* Line 1464 of yacc.c */ 09723 #line 4099 "parse.y" 09724 { 09725 (yyvsp[(1) - (1)].val) = cond_stack; 09726 (yyval.val) = cmdarg_stack; 09727 cond_stack = 0; 09728 cmdarg_stack = 0; 09729 ;} 09730 break; 09731 09732 case 453: 09733 09734 /* Line 1464 of yacc.c */ 09735 #line 4105 "parse.y" 09736 { 09737 (yyval.node) = lex_strterm; 09738 lex_strterm = 0; 09739 lex_state = EXPR_BEG; 09740 ;} 09741 break; 09742 09743 case 454: 09744 09745 /* Line 1464 of yacc.c */ 09746 #line 4111 "parse.y" 09747 { 09748 cond_stack = (yyvsp[(1) - (5)].val); 09749 cmdarg_stack = (yyvsp[(2) - (5)].val); 09750 lex_strterm = (yyvsp[(3) - (5)].node); 09751 /*%%%*/ 09752 if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE; 09753 (yyval.node) = new_evstr((yyvsp[(4) - (5)].node)); 09754 /*% 09755 $$ = dispatch1(string_embexpr, $4); 09756 %*/ 09757 ;} 09758 break; 09759 09760 case 455: 09761 09762 /* Line 1464 of yacc.c */ 09763 #line 4125 "parse.y" 09764 { 09765 /*%%%*/ 09766 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id)); 09767 /*% 09768 $$ = dispatch1(var_ref, $1); 09769 %*/ 09770 ;} 09771 break; 09772 09773 case 456: 09774 09775 /* Line 1464 of yacc.c */ 09776 #line 4133 "parse.y" 09777 { 09778 /*%%%*/ 09779 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id)); 09780 /*% 09781 $$ = dispatch1(var_ref, $1); 09782 %*/ 09783 ;} 09784 break; 09785 09786 case 457: 09787 09788 /* Line 1464 of yacc.c */ 09789 #line 4141 "parse.y" 09790 { 09791 /*%%%*/ 09792 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id)); 09793 /*% 09794 $$ = dispatch1(var_ref, $1); 09795 %*/ 09796 ;} 09797 break; 09798 09799 case 459: 09800 09801 /* Line 1464 of yacc.c */ 09802 #line 4152 "parse.y" 09803 { 09804 lex_state = EXPR_END; 09805 /*%%%*/ 09806 (yyval.id) = (yyvsp[(2) - (2)].id); 09807 /*% 09808 $$ = dispatch1(symbol, $2); 09809 %*/ 09810 ;} 09811 break; 09812 09813 case 464: 09814 09815 /* Line 1464 of yacc.c */ 09816 #line 4169 "parse.y" 09817 { 09818 lex_state = EXPR_END; 09819 /*%%%*/ 09820 if (!((yyval.node) = (yyvsp[(2) - (3)].node))) { 09821 (yyval.node) = NEW_LIT(ID2SYM(rb_intern(""))); 09822 } 09823 else { 09824 VALUE lit; 09825 09826 switch (nd_type((yyval.node))) { 09827 case NODE_DSTR: 09828 nd_set_type((yyval.node), NODE_DSYM); 09829 break; 09830 case NODE_STR: 09831 lit = (yyval.node)->nd_lit; 09832 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit)); 09833 nd_set_type((yyval.node), NODE_LIT); 09834 break; 09835 default: 09836 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node))); 09837 break; 09838 } 09839 } 09840 /*% 09841 $$ = dispatch1(dyna_symbol, $2); 09842 %*/ 09843 ;} 09844 break; 09845 09846 case 467: 09847 09848 /* Line 1464 of yacc.c */ 09849 #line 4201 "parse.y" 09850 { 09851 /*%%%*/ 09852 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node)); 09853 /*% 09854 $$ = dispatch2(unary, ripper_intern("-@"), $2); 09855 %*/ 09856 ;} 09857 break; 09858 09859 case 468: 09860 09861 /* Line 1464 of yacc.c */ 09862 #line 4209 "parse.y" 09863 { 09864 /*%%%*/ 09865 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node)); 09866 /*% 09867 $$ = dispatch2(unary, ripper_intern("-@"), $2); 09868 %*/ 09869 ;} 09870 break; 09871 09872 case 474: 09873 09874 /* Line 1464 of yacc.c */ 09875 #line 4223 "parse.y" 09876 {ifndef_ripper((yyval.id) = keyword_nil);;} 09877 break; 09878 09879 case 475: 09880 09881 /* Line 1464 of yacc.c */ 09882 #line 4224 "parse.y" 09883 {ifndef_ripper((yyval.id) = keyword_self);;} 09884 break; 09885 09886 case 476: 09887 09888 /* Line 1464 of yacc.c */ 09889 #line 4225 "parse.y" 09890 {ifndef_ripper((yyval.id) = keyword_true);;} 09891 break; 09892 09893 case 477: 09894 09895 /* Line 1464 of yacc.c */ 09896 #line 4226 "parse.y" 09897 {ifndef_ripper((yyval.id) = keyword_false);;} 09898 break; 09899 09900 case 478: 09901 09902 /* Line 1464 of yacc.c */ 09903 #line 4227 "parse.y" 09904 {ifndef_ripper((yyval.id) = keyword__FILE__);;} 09905 break; 09906 09907 case 479: 09908 09909 /* Line 1464 of yacc.c */ 09910 #line 4228 "parse.y" 09911 {ifndef_ripper((yyval.id) = keyword__LINE__);;} 09912 break; 09913 09914 case 480: 09915 09916 /* Line 1464 of yacc.c */ 09917 #line 4229 "parse.y" 09918 {ifndef_ripper((yyval.id) = keyword__ENCODING__);;} 09919 break; 09920 09921 case 481: 09922 09923 /* Line 1464 of yacc.c */ 09924 #line 4233 "parse.y" 09925 { 09926 /*%%%*/ 09927 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0); 09928 /*% 09929 $$ = dispatch1(var_ref, $1); 09930 %*/ 09931 ;} 09932 break; 09933 09934 case 482: 09935 09936 /* Line 1464 of yacc.c */ 09937 #line 4243 "parse.y" 09938 { 09939 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 09940 /*%%%*/ 09941 /*% 09942 $$ = dispatch1(var_field, $$); 09943 %*/ 09944 ;} 09945 break; 09946 09947 case 485: 09948 09949 /* Line 1464 of yacc.c */ 09950 #line 4257 "parse.y" 09951 { 09952 /*%%%*/ 09953 (yyval.node) = 0; 09954 /*% 09955 $$ = Qnil; 09956 %*/ 09957 ;} 09958 break; 09959 09960 case 486: 09961 09962 /* Line 1464 of yacc.c */ 09963 #line 4265 "parse.y" 09964 { 09965 lex_state = EXPR_BEG; 09966 ;} 09967 break; 09968 09969 case 487: 09970 09971 /* Line 1464 of yacc.c */ 09972 #line 4269 "parse.y" 09973 { 09974 (yyval.node) = (yyvsp[(3) - (4)].node); 09975 ;} 09976 break; 09977 09978 case 488: 09979 09980 /* Line 1464 of yacc.c */ 09981 #line 4273 "parse.y" 09982 { 09983 /*%%%*/ 09984 yyerrok; 09985 (yyval.node) = 0; 09986 /*% 09987 yyerrok; 09988 $$ = Qnil; 09989 %*/ 09990 ;} 09991 break; 09992 09993 case 489: 09994 09995 /* Line 1464 of yacc.c */ 09996 #line 4285 "parse.y" 09997 { 09998 /*%%%*/ 09999 (yyval.node) = (yyvsp[(2) - (3)].node); 10000 /*% 10001 $$ = dispatch1(paren, $2); 10002 %*/ 10003 lex_state = EXPR_BEG; 10004 command_start = TRUE; 10005 ;} 10006 break; 10007 10008 case 490: 10009 10010 /* Line 1464 of yacc.c */ 10011 #line 4295 "parse.y" 10012 { 10013 (yyval.node) = (yyvsp[(1) - (2)].node); 10014 ;} 10015 break; 10016 10017 case 491: 10018 10019 /* Line 1464 of yacc.c */ 10020 #line 4301 "parse.y" 10021 { 10022 /*%%%*/ 10023 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id)); 10024 /*% 10025 $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6)); 10026 %*/ 10027 ;} 10028 break; 10029 10030 case 492: 10031 10032 /* Line 1464 of yacc.c */ 10033 #line 4309 "parse.y" 10034 { 10035 /*%%%*/ 10036 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id)); 10037 /*% 10038 $$ = params_new($1, $3, $5, $7, escape_Qundef($8)); 10039 %*/ 10040 ;} 10041 break; 10042 10043 case 493: 10044 10045 /* Line 1464 of yacc.c */ 10046 #line 4317 "parse.y" 10047 { 10048 /*%%%*/ 10049 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id)); 10050 /*% 10051 $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4)); 10052 %*/ 10053 ;} 10054 break; 10055 10056 case 494: 10057 10058 /* Line 1464 of yacc.c */ 10059 #line 4325 "parse.y" 10060 { 10061 /*%%%*/ 10062 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 10063 /*% 10064 $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6)); 10065 %*/ 10066 ;} 10067 break; 10068 10069 case 495: 10070 10071 /* Line 1464 of yacc.c */ 10072 #line 4333 "parse.y" 10073 { 10074 /*%%%*/ 10075 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id)); 10076 /*% 10077 $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4)); 10078 %*/ 10079 ;} 10080 break; 10081 10082 case 496: 10083 10084 /* Line 1464 of yacc.c */ 10085 #line 4341 "parse.y" 10086 { 10087 /*%%%*/ 10088 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 10089 /*% 10090 $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6)); 10091 %*/ 10092 ;} 10093 break; 10094 10095 case 497: 10096 10097 /* Line 1464 of yacc.c */ 10098 #line 4349 "parse.y" 10099 { 10100 /*%%%*/ 10101 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id)); 10102 /*% 10103 $$ = params_new($1, Qnil, Qnil, Qnil,escape_Qundef($2)); 10104 %*/ 10105 ;} 10106 break; 10107 10108 case 498: 10109 10110 /* Line 1464 of yacc.c */ 10111 #line 4357 "parse.y" 10112 { 10113 /*%%%*/ 10114 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id)); 10115 /*% 10116 $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4)); 10117 %*/ 10118 ;} 10119 break; 10120 10121 case 499: 10122 10123 /* Line 1464 of yacc.c */ 10124 #line 4365 "parse.y" 10125 { 10126 /*%%%*/ 10127 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 10128 /*% 10129 $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6)); 10130 %*/ 10131 ;} 10132 break; 10133 10134 case 500: 10135 10136 /* Line 1464 of yacc.c */ 10137 #line 4373 "parse.y" 10138 { 10139 /*%%%*/ 10140 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id)); 10141 /*% 10142 $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2)); 10143 %*/ 10144 ;} 10145 break; 10146 10147 case 501: 10148 10149 /* Line 1464 of yacc.c */ 10150 #line 4381 "parse.y" 10151 { 10152 /*%%%*/ 10153 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id)); 10154 /*% 10155 $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4)); 10156 %*/ 10157 ;} 10158 break; 10159 10160 case 502: 10161 10162 /* Line 1464 of yacc.c */ 10163 #line 4389 "parse.y" 10164 { 10165 /*%%%*/ 10166 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id)); 10167 /*% 10168 $$ = params_new(Qnil, Qnil, $1, Qnil,escape_Qundef($2)); 10169 %*/ 10170 ;} 10171 break; 10172 10173 case 503: 10174 10175 /* Line 1464 of yacc.c */ 10176 #line 4397 "parse.y" 10177 { 10178 /*%%%*/ 10179 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id)); 10180 /*% 10181 $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4)); 10182 %*/ 10183 ;} 10184 break; 10185 10186 case 504: 10187 10188 /* Line 1464 of yacc.c */ 10189 #line 4405 "parse.y" 10190 { 10191 /*%%%*/ 10192 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id)); 10193 /*% 10194 $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1); 10195 %*/ 10196 ;} 10197 break; 10198 10199 case 505: 10200 10201 /* Line 1464 of yacc.c */ 10202 #line 4413 "parse.y" 10203 { 10204 /*%%%*/ 10205 (yyval.node) = new_args(0, 0, 0, 0, 0); 10206 /*% 10207 $$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil); 10208 %*/ 10209 ;} 10210 break; 10211 10212 case 506: 10213 10214 /* Line 1464 of yacc.c */ 10215 #line 4423 "parse.y" 10216 { 10217 /*%%%*/ 10218 yyerror("formal argument cannot be a constant"); 10219 (yyval.id) = 0; 10220 /*% 10221 $$ = dispatch1(param_error, $1); 10222 %*/ 10223 ;} 10224 break; 10225 10226 case 507: 10227 10228 /* Line 1464 of yacc.c */ 10229 #line 4432 "parse.y" 10230 { 10231 /*%%%*/ 10232 yyerror("formal argument cannot be an instance variable"); 10233 (yyval.id) = 0; 10234 /*% 10235 $$ = dispatch1(param_error, $1); 10236 %*/ 10237 ;} 10238 break; 10239 10240 case 508: 10241 10242 /* Line 1464 of yacc.c */ 10243 #line 4441 "parse.y" 10244 { 10245 /*%%%*/ 10246 yyerror("formal argument cannot be a global variable"); 10247 (yyval.id) = 0; 10248 /*% 10249 $$ = dispatch1(param_error, $1); 10250 %*/ 10251 ;} 10252 break; 10253 10254 case 509: 10255 10256 /* Line 1464 of yacc.c */ 10257 #line 4450 "parse.y" 10258 { 10259 /*%%%*/ 10260 yyerror("formal argument cannot be a class variable"); 10261 (yyval.id) = 0; 10262 /*% 10263 $$ = dispatch1(param_error, $1); 10264 %*/ 10265 ;} 10266 break; 10267 10268 case 511: 10269 10270 /* Line 1464 of yacc.c */ 10271 #line 4462 "parse.y" 10272 { 10273 formal_argument(get_id((yyvsp[(1) - (1)].id))); 10274 (yyval.id) = (yyvsp[(1) - (1)].id); 10275 ;} 10276 break; 10277 10278 case 512: 10279 10280 /* Line 1464 of yacc.c */ 10281 #line 4469 "parse.y" 10282 { 10283 arg_var(get_id((yyvsp[(1) - (1)].id))); 10284 /*%%%*/ 10285 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1); 10286 /*% 10287 $$ = get_value($1); 10288 %*/ 10289 ;} 10290 break; 10291 10292 case 513: 10293 10294 /* Line 1464 of yacc.c */ 10295 #line 4478 "parse.y" 10296 { 10297 ID tid = internal_id(); 10298 arg_var(tid); 10299 /*%%%*/ 10300 if (dyna_in_block()) { 10301 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid); 10302 } 10303 else { 10304 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid); 10305 } 10306 (yyval.node) = NEW_ARGS_AUX(tid, 1); 10307 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node); 10308 /*% 10309 $$ = dispatch1(mlhs_paren, $2); 10310 %*/ 10311 ;} 10312 break; 10313 10314 case 515: 10315 10316 /* Line 1464 of yacc.c */ 10317 #line 4504 "parse.y" 10318 { 10319 /*%%%*/ 10320 (yyval.node) = (yyvsp[(1) - (3)].node); 10321 (yyval.node)->nd_plen++; 10322 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next); 10323 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node)); 10324 /*% 10325 $$ = rb_ary_push($1, $3); 10326 %*/ 10327 ;} 10328 break; 10329 10330 case 516: 10331 10332 /* Line 1464 of yacc.c */ 10333 #line 4517 "parse.y" 10334 { 10335 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id)))); 10336 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node)); 10337 /*%%%*/ 10338 (yyval.node) = NEW_OPT_ARG(0, (yyval.node)); 10339 /*% 10340 $$ = rb_assoc_new($$, $3); 10341 %*/ 10342 ;} 10343 break; 10344 10345 case 517: 10346 10347 /* Line 1464 of yacc.c */ 10348 #line 4529 "parse.y" 10349 { 10350 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id)))); 10351 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node)); 10352 /*%%%*/ 10353 (yyval.node) = NEW_OPT_ARG(0, (yyval.node)); 10354 /*% 10355 $$ = rb_assoc_new($$, $3); 10356 %*/ 10357 ;} 10358 break; 10359 10360 case 518: 10361 10362 /* Line 1464 of yacc.c */ 10363 #line 4541 "parse.y" 10364 { 10365 /*%%%*/ 10366 (yyval.node) = (yyvsp[(1) - (1)].node); 10367 /*% 10368 $$ = rb_ary_new3(1, $1); 10369 %*/ 10370 ;} 10371 break; 10372 10373 case 519: 10374 10375 /* Line 1464 of yacc.c */ 10376 #line 4549 "parse.y" 10377 { 10378 /*%%%*/ 10379 NODE *opts = (yyvsp[(1) - (3)].node); 10380 10381 while (opts->nd_next) { 10382 opts = opts->nd_next; 10383 } 10384 opts->nd_next = (yyvsp[(3) - (3)].node); 10385 (yyval.node) = (yyvsp[(1) - (3)].node); 10386 /*% 10387 $$ = rb_ary_push($1, $3); 10388 %*/ 10389 ;} 10390 break; 10391 10392 case 520: 10393 10394 /* Line 1464 of yacc.c */ 10395 #line 4565 "parse.y" 10396 { 10397 /*%%%*/ 10398 (yyval.node) = (yyvsp[(1) - (1)].node); 10399 /*% 10400 $$ = rb_ary_new3(1, $1); 10401 %*/ 10402 ;} 10403 break; 10404 10405 case 521: 10406 10407 /* Line 1464 of yacc.c */ 10408 #line 4573 "parse.y" 10409 { 10410 /*%%%*/ 10411 NODE *opts = (yyvsp[(1) - (3)].node); 10412 10413 while (opts->nd_next) { 10414 opts = opts->nd_next; 10415 } 10416 opts->nd_next = (yyvsp[(3) - (3)].node); 10417 (yyval.node) = (yyvsp[(1) - (3)].node); 10418 /*% 10419 $$ = rb_ary_push($1, $3); 10420 %*/ 10421 ;} 10422 break; 10423 10424 case 524: 10425 10426 /* Line 1464 of yacc.c */ 10427 #line 4593 "parse.y" 10428 { 10429 /*%%%*/ 10430 if (!is_local_id((yyvsp[(2) - (2)].id))) 10431 yyerror("rest argument must be local variable"); 10432 /*% %*/ 10433 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id)))); 10434 /*%%%*/ 10435 (yyval.id) = (yyvsp[(2) - (2)].id); 10436 /*% 10437 $$ = dispatch1(rest_param, $2); 10438 %*/ 10439 ;} 10440 break; 10441 10442 case 525: 10443 10444 /* Line 1464 of yacc.c */ 10445 #line 4606 "parse.y" 10446 { 10447 /*%%%*/ 10448 (yyval.id) = internal_id(); 10449 arg_var((yyval.id)); 10450 /*% 10451 $$ = dispatch1(rest_param, Qnil); 10452 %*/ 10453 ;} 10454 break; 10455 10456 case 528: 10457 10458 /* Line 1464 of yacc.c */ 10459 #line 4621 "parse.y" 10460 { 10461 /*%%%*/ 10462 if (!is_local_id((yyvsp[(2) - (2)].id))) 10463 yyerror("block argument must be local variable"); 10464 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id))) 10465 yyerror("duplicated block argument name"); 10466 /*% %*/ 10467 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id)))); 10468 /*%%%*/ 10469 (yyval.id) = (yyvsp[(2) - (2)].id); 10470 /*% 10471 $$ = dispatch1(blockarg, $2); 10472 %*/ 10473 ;} 10474 break; 10475 10476 case 529: 10477 10478 /* Line 1464 of yacc.c */ 10479 #line 4638 "parse.y" 10480 { 10481 (yyval.id) = (yyvsp[(2) - (2)].id); 10482 ;} 10483 break; 10484 10485 case 530: 10486 10487 /* Line 1464 of yacc.c */ 10488 #line 4642 "parse.y" 10489 { 10490 /*%%%*/ 10491 (yyval.id) = 0; 10492 /*% 10493 $$ = Qundef; 10494 %*/ 10495 ;} 10496 break; 10497 10498 case 531: 10499 10500 /* Line 1464 of yacc.c */ 10501 #line 4652 "parse.y" 10502 { 10503 /*%%%*/ 10504 value_expr((yyvsp[(1) - (1)].node)); 10505 (yyval.node) = (yyvsp[(1) - (1)].node); 10506 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 10507 /*% 10508 $$ = $1; 10509 %*/ 10510 ;} 10511 break; 10512 10513 case 532: 10514 10515 /* Line 1464 of yacc.c */ 10516 #line 4661 "parse.y" 10517 {lex_state = EXPR_BEG;;} 10518 break; 10519 10520 case 533: 10521 10522 /* Line 1464 of yacc.c */ 10523 #line 4662 "parse.y" 10524 { 10525 /*%%%*/ 10526 if ((yyvsp[(3) - (4)].node) == 0) { 10527 yyerror("can't define singleton method for ()."); 10528 } 10529 else { 10530 switch (nd_type((yyvsp[(3) - (4)].node))) { 10531 case NODE_STR: 10532 case NODE_DSTR: 10533 case NODE_XSTR: 10534 case NODE_DXSTR: 10535 case NODE_DREGX: 10536 case NODE_LIT: 10537 case NODE_ARRAY: 10538 case NODE_ZARRAY: 10539 yyerror("can't define singleton method for literals"); 10540 default: 10541 value_expr((yyvsp[(3) - (4)].node)); 10542 break; 10543 } 10544 } 10545 (yyval.node) = (yyvsp[(3) - (4)].node); 10546 /*% 10547 $$ = dispatch1(paren, $3); 10548 %*/ 10549 ;} 10550 break; 10551 10552 case 535: 10553 10554 /* Line 1464 of yacc.c */ 10555 #line 4692 "parse.y" 10556 { 10557 /*%%%*/ 10558 (yyval.node) = (yyvsp[(1) - (2)].node); 10559 /*% 10560 $$ = dispatch1(assoclist_from_args, $1); 10561 %*/ 10562 ;} 10563 break; 10564 10565 case 537: 10566 10567 /* Line 1464 of yacc.c */ 10568 #line 4709 "parse.y" 10569 { 10570 /*%%%*/ 10571 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 10572 /*% 10573 $$ = rb_ary_push($1, $3); 10574 %*/ 10575 ;} 10576 break; 10577 10578 case 538: 10579 10580 /* Line 1464 of yacc.c */ 10581 #line 4719 "parse.y" 10582 { 10583 /*%%%*/ 10584 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node)); 10585 /*% 10586 $$ = dispatch2(assoc_new, $1, $3); 10587 %*/ 10588 ;} 10589 break; 10590 10591 case 539: 10592 10593 /* Line 1464 of yacc.c */ 10594 #line 4727 "parse.y" 10595 { 10596 /*%%%*/ 10597 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node)); 10598 /*% 10599 $$ = dispatch2(assoc_new, $1, $2); 10600 %*/ 10601 ;} 10602 break; 10603 10604 case 561: 10605 10606 /* Line 1464 of yacc.c */ 10607 #line 4783 "parse.y" 10608 {yyerrok;;} 10609 break; 10610 10611 case 564: 10612 10613 /* Line 1464 of yacc.c */ 10614 #line 4788 "parse.y" 10615 {yyerrok;;} 10616 break; 10617 10618 case 565: 10619 10620 /* Line 1464 of yacc.c */ 10621 #line 4792 "parse.y" 10622 { 10623 /*%%%*/ 10624 (yyval.node) = 0; 10625 /*% 10626 $$ = Qundef; 10627 %*/ 10628 ;} 10629 break; 10630 10631 10632 10633 /* Line 1464 of yacc.c */ 10634 #line 10633 "parse.c" 10635 default: break; 10636 } 10637 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 10638 10639 YYPOPSTACK (yylen); 10640 yylen = 0; 10641 YY_STACK_PRINT (yyss, yyssp); 10642 10643 *++yyvsp = yyval; 10644 10645 /* Now `shift' the result of the reduction. Determine what state 10646 that goes to, based on the state we popped back to and the rule 10647 number reduced by. */ 10648 10649 yyn = yyr1[yyn]; 10650 10651 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 10652 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 10653 yystate = yytable[yystate]; 10654 else 10655 yystate = yydefgoto[yyn - YYNTOKENS]; 10656 10657 goto yynewstate; 10658 10659 10660 /*------------------------------------. 10661 | yyerrlab -- here on detecting error | 10662 `------------------------------------*/ 10663 yyerrlab: 10664 /* If not already recovering from an error, report this error. */ 10665 if (!yyerrstatus) 10666 { 10667 ++yynerrs; 10668 #if ! YYERROR_VERBOSE 10669 parser_yyerror (parser, YY_("syntax error")); 10670 #else 10671 { 10672 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); 10673 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) 10674 { 10675 YYSIZE_T yyalloc = 2 * yysize; 10676 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) 10677 yyalloc = YYSTACK_ALLOC_MAXIMUM; 10678 if (yymsg != yymsgbuf) 10679 YYSTACK_FREE (yymsg); 10680 yymsg = (char *) YYSTACK_ALLOC (yyalloc); 10681 if (yymsg) 10682 yymsg_alloc = yyalloc; 10683 else 10684 { 10685 yymsg = yymsgbuf; 10686 yymsg_alloc = sizeof yymsgbuf; 10687 } 10688 } 10689 10690 if (0 < yysize && yysize <= yymsg_alloc) 10691 { 10692 (void) yysyntax_error (yymsg, yystate, yychar); 10693 parser_yyerror (parser, yymsg); 10694 } 10695 else 10696 { 10697 parser_yyerror (parser, YY_("syntax error")); 10698 if (yysize != 0) 10699 goto yyexhaustedlab; 10700 } 10701 } 10702 #endif 10703 } 10704 10705 10706 10707 if (yyerrstatus == 3) 10708 { 10709 /* If just tried and failed to reuse lookahead token after an 10710 error, discard it. */ 10711 10712 if (yychar <= YYEOF) 10713 { 10714 /* Return failure if at end of input. */ 10715 if (yychar == YYEOF) 10716 YYABORT; 10717 } 10718 else 10719 { 10720 yydestruct ("Error: discarding", 10721 yytoken, &yylval, parser); 10722 yychar = YYEMPTY; 10723 } 10724 } 10725 10726 /* Else will try to reuse lookahead token after shifting the error 10727 token. */ 10728 goto yyerrlab1; 10729 10730 10731 /*---------------------------------------------------. 10732 | yyerrorlab -- error raised explicitly by YYERROR. | 10733 `---------------------------------------------------*/ 10734 yyerrorlab: 10735 10736 /* Pacify compilers like GCC when the user code never invokes 10737 YYERROR and the label yyerrorlab therefore never appears in user 10738 code. */ 10739 if (/*CONSTCOND*/ 0) 10740 goto yyerrorlab; 10741 10742 /* Do not reclaim the symbols of the rule which action triggered 10743 this YYERROR. */ 10744 YYPOPSTACK (yylen); 10745 yylen = 0; 10746 YY_STACK_PRINT (yyss, yyssp); 10747 yystate = *yyssp; 10748 goto yyerrlab1; 10749 10750 10751 /*-------------------------------------------------------------. 10752 | yyerrlab1 -- common code for both syntax error and YYERROR. | 10753 `-------------------------------------------------------------*/ 10754 yyerrlab1: 10755 yyerrstatus = 3; /* Each real token shifted decrements this. */ 10756 10757 for (;;) 10758 { 10759 yyn = yypact[yystate]; 10760 if (yyn != YYPACT_NINF) 10761 { 10762 yyn += YYTERROR; 10763 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 10764 { 10765 yyn = yytable[yyn]; 10766 if (0 < yyn) 10767 break; 10768 } 10769 } 10770 10771 /* Pop the current state because it cannot handle the error token. */ 10772 if (yyssp == yyss) 10773 YYABORT; 10774 10775 10776 yydestruct ("Error: popping", 10777 yystos[yystate], yyvsp, parser); 10778 YYPOPSTACK (1); 10779 yystate = *yyssp; 10780 YY_STACK_PRINT (yyss, yyssp); 10781 } 10782 10783 *++yyvsp = yylval; 10784 10785 10786 /* Shift the error token. */ 10787 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 10788 10789 yystate = yyn; 10790 goto yynewstate; 10791 10792 10793 /*-------------------------------------. 10794 | yyacceptlab -- YYACCEPT comes here. | 10795 `-------------------------------------*/ 10796 yyacceptlab: 10797 yyresult = 0; 10798 goto yyreturn; 10799 10800 /*-----------------------------------. 10801 | yyabortlab -- YYABORT comes here. | 10802 `-----------------------------------*/ 10803 yyabortlab: 10804 yyresult = 1; 10805 goto yyreturn; 10806 10807 #if !defined(yyoverflow) || YYERROR_VERBOSE 10808 /*-------------------------------------------------. 10809 | yyexhaustedlab -- memory exhaustion comes here. | 10810 `-------------------------------------------------*/ 10811 yyexhaustedlab: 10812 parser_yyerror (parser, YY_("memory exhausted")); 10813 yyresult = 2; 10814 /* Fall through. */ 10815 #endif 10816 10817 yyreturn: 10818 if (yychar != YYEMPTY) 10819 yydestruct ("Cleanup: discarding lookahead", 10820 yytoken, &yylval, parser); 10821 /* Do not reclaim the symbols of the rule which action triggered 10822 this YYABORT or YYACCEPT. */ 10823 YYPOPSTACK (yylen); 10824 YY_STACK_PRINT (yyss, yyssp); 10825 while (yyssp != yyss) 10826 { 10827 yydestruct ("Cleanup: popping", 10828 yystos[*yyssp], yyvsp, parser); 10829 YYPOPSTACK (1); 10830 } 10831 #ifndef yyoverflow 10832 if (yyss != yyssa) 10833 YYSTACK_FREE (yyss); 10834 #endif 10835 #if YYERROR_VERBOSE 10836 if (yymsg != yymsgbuf) 10837 YYSTACK_FREE (yymsg); 10838 #endif 10839 /* Make sure YYID is used. */ 10840 return YYID (yyresult); 10841 } 10842 10843 10844 10845 /* Line 1684 of yacc.c */ 10846 #line 4800 "parse.y" 10847 10848 # undef parser 10849 # undef yylex 10850 # undef yylval 10851 # define yylval (*((YYSTYPE*)(parser->parser_yylval))) 10852 10853 static int parser_regx_options(struct parser_params*); 10854 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**); 10855 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc); 10856 static int parser_parse_string(struct parser_params*,NODE*); 10857 static int parser_here_document(struct parser_params*,NODE*); 10858 10859 10860 # define nextc() parser_nextc(parser) 10861 # define pushback(c) parser_pushback(parser, c) 10862 # define newtok() parser_newtok(parser) 10863 # define tokspace(n) parser_tokspace(parser, n) 10864 # define tokadd(c) parser_tokadd(parser, c) 10865 # define tok_hex(numlen) parser_tok_hex(parser, numlen) 10866 # define read_escape(flags,e) parser_read_escape(parser, flags, e) 10867 # define tokadd_escape(e) parser_tokadd_escape(parser, e) 10868 # define regx_options() parser_regx_options(parser) 10869 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,f,t,p,n,e) 10870 # define parse_string(n) parser_parse_string(parser,n) 10871 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, c, enc) 10872 # define here_document(n) parser_here_document(parser,n) 10873 # define heredoc_identifier() parser_heredoc_identifier(parser) 10874 # define heredoc_restore(n) parser_heredoc_restore(parser,n) 10875 # define whole_match_p(e,l,i) parser_whole_match_p(parser,e,l,i) 10876 10877 #ifndef RIPPER 10878 # define set_yylval_str(x) yylval.node = NEW_STR(x) 10879 # define set_yylval_num(x) yylval.num = x 10880 # define set_yylval_id(x) yylval.id = x 10881 # define set_yylval_name(x) yylval.id = x 10882 # define set_yylval_literal(x) yylval.node = NEW_LIT(x) 10883 # define set_yylval_node(x) yylval.node = x 10884 # define yylval_id() yylval.id 10885 #else 10886 static inline VALUE 10887 ripper_yylval_id(ID x) 10888 { 10889 return (VALUE)NEW_LASGN(x, ID2SYM(x)); 10890 } 10891 # define set_yylval_str(x) (void)(x) 10892 # define set_yylval_num(x) (void)(x) 10893 # define set_yylval_id(x) (void)(x) 10894 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x)) 10895 # define set_yylval_literal(x) (void)(x) 10896 # define set_yylval_node(x) (void)(x) 10897 # define yylval_id() yylval.id 10898 #endif 10899 10900 #ifndef RIPPER 10901 #define ripper_flush(p) (void)(p) 10902 #else 10903 #define ripper_flush(p) (p->tokp = p->parser_lex_p) 10904 10905 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val) 10906 10907 static int 10908 ripper_has_scan_event(struct parser_params *parser) 10909 { 10910 10911 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp"); 10912 return lex_p > parser->tokp; 10913 } 10914 10915 static VALUE 10916 ripper_scan_event_val(struct parser_params *parser, int t) 10917 { 10918 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp); 10919 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str); 10920 ripper_flush(parser); 10921 return rval; 10922 } 10923 10924 static void 10925 ripper_dispatch_scan_event(struct parser_params *parser, int t) 10926 { 10927 if (!ripper_has_scan_event(parser)) return; 10928 yylval_rval = ripper_scan_event_val(parser, t); 10929 } 10930 10931 static void 10932 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t) 10933 { 10934 if (!ripper_has_scan_event(parser)) return; 10935 (void)ripper_scan_event_val(parser, t); 10936 } 10937 10938 static void 10939 ripper_dispatch_delayed_token(struct parser_params *parser, int t) 10940 { 10941 int saved_line = ruby_sourceline; 10942 const char *saved_tokp = parser->tokp; 10943 10944 ruby_sourceline = parser->delayed_line; 10945 parser->tokp = lex_pbeg + parser->delayed_col; 10946 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed); 10947 parser->delayed = Qnil; 10948 ruby_sourceline = saved_line; 10949 parser->tokp = saved_tokp; 10950 } 10951 #endif /* RIPPER */ 10952 10953 #include "ruby/regex.h" 10954 #include "ruby/util.h" 10955 10956 /* We remove any previous definition of `SIGN_EXTEND_CHAR', 10957 since ours (we hope) works properly with all combinations of 10958 machines, compilers, `char' and `unsigned char' argument types. 10959 (Per Bothner suggested the basic approach.) */ 10960 #undef SIGN_EXTEND_CHAR 10961 #if __STDC__ 10962 # define SIGN_EXTEND_CHAR(c) ((signed char)(c)) 10963 #else /* not __STDC__ */ 10964 /* As in Harbison and Steele. */ 10965 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128) 10966 #endif 10967 10968 #define parser_encoding_name() (parser->enc->name) 10969 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc) 10970 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc) 10971 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p)) 10972 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc)) 10973 10974 #define parser_isascii() ISASCII(*(lex_p-1)) 10975 10976 #ifndef RIPPER 10977 static int 10978 token_info_get_column(struct parser_params *parser, const char *token) 10979 { 10980 int column = 1; 10981 const char *p, *pend = lex_p - strlen(token); 10982 for (p = lex_pbeg; p < pend; p++) { 10983 if (*p == '\t') { 10984 column = (((column - 1) / 8) + 1) * 8; 10985 } 10986 column++; 10987 } 10988 return column; 10989 } 10990 10991 static int 10992 token_info_has_nonspaces(struct parser_params *parser, const char *token) 10993 { 10994 const char *p, *pend = lex_p - strlen(token); 10995 for (p = lex_pbeg; p < pend; p++) { 10996 if (*p != ' ' && *p != '\t') { 10997 return 1; 10998 } 10999 } 11000 return 0; 11001 } 11002 11003 #undef token_info_push 11004 static void 11005 token_info_push(struct parser_params *parser, const char *token) 11006 { 11007 token_info *ptinfo; 11008 11009 if (compile_for_eval) return; 11010 ptinfo = ALLOC(token_info); 11011 ptinfo->token = token; 11012 ptinfo->linenum = ruby_sourceline; 11013 ptinfo->column = token_info_get_column(parser, token); 11014 ptinfo->nonspc = token_info_has_nonspaces(parser, token); 11015 ptinfo->next = parser->parser_token_info; 11016 11017 parser->parser_token_info = ptinfo; 11018 } 11019 11020 #undef token_info_pop 11021 static void 11022 token_info_pop(struct parser_params *parser, const char *token) 11023 { 11024 int linenum; 11025 token_info *ptinfo = parser->parser_token_info; 11026 11027 if (!ptinfo) return; 11028 parser->parser_token_info = ptinfo->next; 11029 if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */ 11030 goto finish; 11031 } 11032 linenum = ruby_sourceline; 11033 if (linenum == ptinfo->linenum) { /* SKIP */ 11034 goto finish; 11035 } 11036 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */ 11037 goto finish; 11038 } 11039 rb_compile_warning(ruby_sourcefile, linenum, 11040 "mismatched indentations at '%s' with '%s' at %d", 11041 token, ptinfo->token, ptinfo->linenum); 11042 11043 finish: 11044 xfree(ptinfo); 11045 } 11046 #endif /* RIPPER */ 11047 11048 static int 11049 parser_yyerror(struct parser_params *parser, const char *msg) 11050 { 11051 #ifndef RIPPER 11052 const int max_line_margin = 30; 11053 const char *p, *pe; 11054 char *buf; 11055 long len; 11056 int i; 11057 11058 compile_error(PARSER_ARG "%s", msg); 11059 p = lex_p; 11060 while (lex_pbeg <= p) { 11061 if (*p == '\n') break; 11062 p--; 11063 } 11064 p++; 11065 11066 pe = lex_p; 11067 while (pe < lex_pend) { 11068 if (*pe == '\n') break; 11069 pe++; 11070 } 11071 11072 len = pe - p; 11073 if (len > 4) { 11074 char *p2; 11075 const char *pre = "", *post = ""; 11076 11077 if (len > max_line_margin * 2 + 10) { 11078 if (lex_p - p > max_line_margin) { 11079 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline)); 11080 pre = "..."; 11081 } 11082 if (pe - lex_p > max_line_margin) { 11083 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline)); 11084 post = "..."; 11085 } 11086 len = pe - p; 11087 } 11088 buf = ALLOCA_N(char, len+2); 11089 MEMCPY(buf, p, char, len); 11090 buf[len] = '\0'; 11091 rb_compile_error_append("%s%s%s", pre, buf, post); 11092 11093 i = (int)(lex_p - p); 11094 p2 = buf; pe = buf + len; 11095 11096 while (p2 < pe) { 11097 if (*p2 != '\t') *p2 = ' '; 11098 p2++; 11099 } 11100 buf[i] = '^'; 11101 buf[i+1] = '\0'; 11102 rb_compile_error_append("%s%s", pre, buf); 11103 } 11104 #else 11105 dispatch1(parse_error, STR_NEW2(msg)); 11106 #endif /* !RIPPER */ 11107 return 0; 11108 } 11109 11110 static void parser_prepare(struct parser_params *parser); 11111 11112 #ifndef RIPPER 11113 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always); 11114 11115 static VALUE 11116 debug_lines(const char *f) 11117 { 11118 ID script_lines; 11119 CONST_ID(script_lines, "SCRIPT_LINES__"); 11120 if (rb_const_defined_at(rb_cObject, script_lines)) { 11121 VALUE hash = rb_const_get_at(rb_cObject, script_lines); 11122 if (TYPE(hash) == T_HASH) { 11123 VALUE fname = rb_str_new2(f); 11124 VALUE lines = rb_ary_new(); 11125 rb_hash_aset(hash, fname, lines); 11126 return lines; 11127 } 11128 } 11129 return 0; 11130 } 11131 11132 static VALUE 11133 coverage(const char *f, int n) 11134 { 11135 extern VALUE rb_get_coverages(void); 11136 VALUE coverages = rb_get_coverages(); 11137 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) { 11138 VALUE fname = rb_str_new2(f); 11139 VALUE lines = rb_ary_new2(n); 11140 int i; 11141 RBASIC(lines)->klass = 0; 11142 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil; 11143 RARRAY(lines)->as.heap.len = n; 11144 rb_hash_aset(coverages, fname, lines); 11145 return lines; 11146 } 11147 return 0; 11148 } 11149 11150 static int 11151 e_option_supplied(struct parser_params *parser) 11152 { 11153 return strcmp(ruby_sourcefile, "-e") == 0; 11154 } 11155 11156 static VALUE 11157 yycompile0(VALUE arg, int tracing) 11158 { 11159 int n; 11160 NODE *tree; 11161 struct parser_params *parser = (struct parser_params *)arg; 11162 11163 if (!compile_for_eval && rb_safe_level() == 0) { 11164 ruby_debug_lines = debug_lines(ruby_sourcefile); 11165 if (ruby_debug_lines && ruby_sourceline > 0) { 11166 VALUE str = STR_NEW0(); 11167 n = ruby_sourceline; 11168 do { 11169 rb_ary_push(ruby_debug_lines, str); 11170 } while (--n); 11171 } 11172 11173 if (!e_option_supplied(parser)) { 11174 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline); 11175 } 11176 } 11177 11178 parser_prepare(parser); 11179 deferred_nodes = 0; 11180 n = yyparse((void*)parser); 11181 ruby_debug_lines = 0; 11182 ruby_coverage = 0; 11183 compile_for_eval = 0; 11184 11185 lex_strterm = 0; 11186 lex_p = lex_pbeg = lex_pend = 0; 11187 lex_lastline = lex_nextline = 0; 11188 if (parser->nerr) { 11189 return 0; 11190 } 11191 tree = ruby_eval_tree; 11192 if (!tree) { 11193 tree = NEW_NIL(); 11194 } 11195 else if (ruby_eval_tree_begin) { 11196 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body); 11197 } 11198 return (VALUE)tree; 11199 } 11200 11201 static NODE* 11202 yycompile(struct parser_params *parser, const char *f, int line) 11203 { 11204 ruby_sourcefile = ruby_strdup(f); 11205 ruby_sourceline = line - 1; 11206 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE); 11207 } 11208 #endif /* !RIPPER */ 11209 11210 static rb_encoding * 11211 must_be_ascii_compatible(VALUE s) 11212 { 11213 rb_encoding *enc = rb_enc_get(s); 11214 if (!rb_enc_asciicompat(enc)) { 11215 rb_raise(rb_eArgError, "invalid source encoding"); 11216 } 11217 return enc; 11218 } 11219 11220 static VALUE 11221 lex_get_str(struct parser_params *parser, VALUE s) 11222 { 11223 char *beg, *end, *pend; 11224 rb_encoding *enc = must_be_ascii_compatible(s); 11225 11226 beg = RSTRING_PTR(s); 11227 if (lex_gets_ptr) { 11228 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil; 11229 beg += lex_gets_ptr; 11230 } 11231 pend = RSTRING_PTR(s) + RSTRING_LEN(s); 11232 end = beg; 11233 while (end < pend) { 11234 if (*end++ == '\n') break; 11235 } 11236 lex_gets_ptr = end - RSTRING_PTR(s); 11237 return rb_enc_str_new(beg, end - beg, enc); 11238 } 11239 11240 static VALUE 11241 lex_getline(struct parser_params *parser) 11242 { 11243 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input); 11244 if (NIL_P(line)) return line; 11245 must_be_ascii_compatible(line); 11246 #ifndef RIPPER 11247 if (ruby_debug_lines) { 11248 rb_ary_push(ruby_debug_lines, line); 11249 } 11250 if (ruby_coverage) { 11251 rb_ary_push(ruby_coverage, Qnil); 11252 } 11253 #endif 11254 return line; 11255 } 11256 11257 static const rb_data_type_t parser_data_type; 11258 11259 #ifndef RIPPER 11260 static NODE* 11261 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 11262 { 11263 struct parser_params *parser; 11264 NODE *node; 11265 volatile VALUE tmp; 11266 11267 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 11268 lex_gets = lex_get_str; 11269 lex_gets_ptr = 0; 11270 lex_input = s; 11271 lex_pbeg = lex_p = lex_pend = 0; 11272 compile_for_eval = rb_parse_in_eval(); 11273 11274 node = yycompile(parser, f, line); 11275 tmp = vparser; /* prohibit tail call optimization */ 11276 11277 return node; 11278 } 11279 11280 NODE* 11281 rb_compile_string(const char *f, VALUE s, int line) 11282 { 11283 must_be_ascii_compatible(s); 11284 return parser_compile_string(rb_parser_new(), f, s, line); 11285 } 11286 11287 NODE* 11288 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 11289 { 11290 must_be_ascii_compatible(s); 11291 return parser_compile_string(vparser, f, s, line); 11292 } 11293 11294 NODE* 11295 rb_compile_cstr(const char *f, const char *s, int len, int line) 11296 { 11297 VALUE str = rb_str_new(s, len); 11298 return parser_compile_string(rb_parser_new(), f, str, line); 11299 } 11300 11301 NODE* 11302 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line) 11303 { 11304 VALUE str = rb_str_new(s, len); 11305 return parser_compile_string(vparser, f, str, line); 11306 } 11307 11308 static VALUE 11309 lex_io_gets(struct parser_params *parser, VALUE io) 11310 { 11311 return rb_io_gets(io); 11312 } 11313 11314 NODE* 11315 rb_compile_file(const char *f, VALUE file, int start) 11316 { 11317 VALUE volatile vparser = rb_parser_new(); 11318 11319 return rb_parser_compile_file(vparser, f, file, start); 11320 } 11321 11322 NODE* 11323 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start) 11324 { 11325 struct parser_params *parser; 11326 volatile VALUE tmp; 11327 NODE *node; 11328 11329 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 11330 lex_gets = lex_io_gets; 11331 lex_input = file; 11332 lex_pbeg = lex_p = lex_pend = 0; 11333 compile_for_eval = rb_parse_in_eval(); 11334 11335 node = yycompile(parser, f, start); 11336 tmp = vparser; /* prohibit tail call optimization */ 11337 11338 return node; 11339 } 11340 #endif /* !RIPPER */ 11341 11342 #define STR_FUNC_ESCAPE 0x01 11343 #define STR_FUNC_EXPAND 0x02 11344 #define STR_FUNC_REGEXP 0x04 11345 #define STR_FUNC_QWORDS 0x08 11346 #define STR_FUNC_SYMBOL 0x10 11347 #define STR_FUNC_INDENT 0x20 11348 11349 enum string_type { 11350 str_squote = (0), 11351 str_dquote = (STR_FUNC_EXPAND), 11352 str_xquote = (STR_FUNC_EXPAND), 11353 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND), 11354 str_sword = (STR_FUNC_QWORDS), 11355 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND), 11356 str_ssym = (STR_FUNC_SYMBOL), 11357 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND) 11358 }; 11359 11360 static VALUE 11361 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0) 11362 { 11363 VALUE str; 11364 11365 str = rb_enc_str_new(p, n, enc); 11366 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { 11367 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 11368 } 11369 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) { 11370 rb_enc_associate(str, rb_ascii8bit_encoding()); 11371 } 11372 } 11373 11374 return str; 11375 } 11376 11377 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend) 11378 #define peek(c) (lex_p < lex_pend && (c) == *lex_p) 11379 11380 static inline int 11381 parser_nextc(struct parser_params *parser) 11382 { 11383 int c; 11384 11385 if (lex_p == lex_pend) { 11386 VALUE v = lex_nextline; 11387 lex_nextline = 0; 11388 if (!v) { 11389 if (parser->eofp) 11390 return -1; 11391 11392 if (!lex_input || NIL_P(v = lex_getline(parser))) { 11393 parser->eofp = Qtrue; 11394 lex_goto_eol(parser); 11395 return -1; 11396 } 11397 } 11398 { 11399 #ifdef RIPPER 11400 if (parser->tokp < lex_pend) { 11401 if (NIL_P(parser->delayed)) { 11402 parser->delayed = rb_str_buf_new(1024); 11403 rb_str_buf_cat(parser->delayed, 11404 parser->tokp, lex_pend - parser->tokp); 11405 parser->delayed_line = ruby_sourceline; 11406 parser->delayed_col = (int)(parser->tokp - lex_pbeg); 11407 } 11408 else { 11409 rb_str_buf_cat(parser->delayed, 11410 parser->tokp, lex_pend - parser->tokp); 11411 } 11412 } 11413 #endif 11414 if (heredoc_end > 0) { 11415 ruby_sourceline = heredoc_end; 11416 heredoc_end = 0; 11417 } 11418 ruby_sourceline++; 11419 parser->line_count++; 11420 lex_pbeg = lex_p = RSTRING_PTR(v); 11421 lex_pend = lex_p + RSTRING_LEN(v); 11422 ripper_flush(parser); 11423 lex_lastline = v; 11424 } 11425 } 11426 c = (unsigned char)*lex_p++; 11427 if (c == '\r' && peek('\n')) { 11428 lex_p++; 11429 c = '\n'; 11430 } 11431 11432 return c; 11433 } 11434 11435 static void 11436 parser_pushback(struct parser_params *parser, int c) 11437 { 11438 if (c == -1) return; 11439 lex_p--; 11440 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') { 11441 lex_p--; 11442 } 11443 } 11444 11445 #define was_bol() (lex_p == lex_pbeg + 1) 11446 11447 #define tokfix() (tokenbuf[tokidx]='\0') 11448 #define tok() tokenbuf 11449 #define toklen() tokidx 11450 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0) 11451 11452 static char* 11453 parser_newtok(struct parser_params *parser) 11454 { 11455 tokidx = 0; 11456 if (!tokenbuf) { 11457 toksiz = 60; 11458 tokenbuf = ALLOC_N(char, 60); 11459 } 11460 if (toksiz > 4096) { 11461 toksiz = 60; 11462 REALLOC_N(tokenbuf, char, 60); 11463 } 11464 return tokenbuf; 11465 } 11466 11467 static char * 11468 parser_tokspace(struct parser_params *parser, int n) 11469 { 11470 tokidx += n; 11471 11472 if (tokidx >= toksiz) { 11473 do {toksiz *= 2;} while (toksiz < tokidx); 11474 REALLOC_N(tokenbuf, char, toksiz); 11475 } 11476 return &tokenbuf[tokidx-n]; 11477 } 11478 11479 static void 11480 parser_tokadd(struct parser_params *parser, int c) 11481 { 11482 tokenbuf[tokidx++] = (char)c; 11483 if (tokidx >= toksiz) { 11484 toksiz *= 2; 11485 REALLOC_N(tokenbuf, char, toksiz); 11486 } 11487 } 11488 11489 static int 11490 parser_tok_hex(struct parser_params *parser, size_t *numlen) 11491 { 11492 int c; 11493 11494 c = scan_hex(lex_p, 2, numlen); 11495 if (!*numlen) { 11496 yyerror("invalid hex escape"); 11497 return 0; 11498 } 11499 lex_p += *numlen; 11500 return c; 11501 } 11502 11503 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n)) 11504 11505 static int 11506 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, 11507 int string_literal, int symbol_literal, int regexp_literal) 11508 { 11509 /* 11510 * If string_literal is true, then we allow multiple codepoints 11511 * in \u{}, and add the codepoints to the current token. 11512 * Otherwise we're parsing a character literal and return a single 11513 * codepoint without adding it 11514 */ 11515 11516 int codepoint; 11517 size_t numlen; 11518 11519 if (regexp_literal) { tokadd('\\'); tokadd('u'); } 11520 11521 if (peek('{')) { /* handle \u{...} form */ 11522 do { 11523 if (regexp_literal) { tokadd(*lex_p); } 11524 nextc(); 11525 codepoint = scan_hex(lex_p, 6, &numlen); 11526 if (numlen == 0) { 11527 yyerror("invalid Unicode escape"); 11528 return 0; 11529 } 11530 if (codepoint > 0x10ffff) { 11531 yyerror("invalid Unicode codepoint (too large)"); 11532 return 0; 11533 } 11534 lex_p += numlen; 11535 if (regexp_literal) { 11536 tokcopy((int)numlen); 11537 } 11538 else if (codepoint >= 0x80) { 11539 *encp = UTF8_ENC(); 11540 if (string_literal) tokaddmbc(codepoint, *encp); 11541 } 11542 else if (string_literal) { 11543 tokadd(codepoint); 11544 } 11545 } while (string_literal && (peek(' ') || peek('\t'))); 11546 11547 if (!peek('}')) { 11548 yyerror("unterminated Unicode escape"); 11549 return 0; 11550 } 11551 11552 if (regexp_literal) { tokadd('}'); } 11553 nextc(); 11554 } 11555 else { /* handle \uxxxx form */ 11556 codepoint = scan_hex(lex_p, 4, &numlen); 11557 if (numlen < 4) { 11558 yyerror("invalid Unicode escape"); 11559 return 0; 11560 } 11561 lex_p += 4; 11562 if (regexp_literal) { 11563 tokcopy(4); 11564 } 11565 else if (codepoint >= 0x80) { 11566 *encp = UTF8_ENC(); 11567 if (string_literal) tokaddmbc(codepoint, *encp); 11568 } 11569 else if (string_literal) { 11570 tokadd(codepoint); 11571 } 11572 } 11573 11574 return codepoint; 11575 } 11576 11577 #define ESCAPE_CONTROL 1 11578 #define ESCAPE_META 2 11579 11580 static int 11581 parser_read_escape(struct parser_params *parser, int flags, 11582 rb_encoding **encp) 11583 { 11584 int c; 11585 size_t numlen; 11586 11587 switch (c = nextc()) { 11588 case '\\': /* Backslash */ 11589 return c; 11590 11591 case 'n': /* newline */ 11592 return '\n'; 11593 11594 case 't': /* horizontal tab */ 11595 return '\t'; 11596 11597 case 'r': /* carriage-return */ 11598 return '\r'; 11599 11600 case 'f': /* form-feed */ 11601 return '\f'; 11602 11603 case 'v': /* vertical tab */ 11604 return '\13'; 11605 11606 case 'a': /* alarm(bell) */ 11607 return '\007'; 11608 11609 case 'e': /* escape */ 11610 return 033; 11611 11612 case '0': case '1': case '2': case '3': /* octal constant */ 11613 case '4': case '5': case '6': case '7': 11614 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; 11615 pushback(c); 11616 c = scan_oct(lex_p, 3, &numlen); 11617 lex_p += numlen; 11618 return c; 11619 11620 case 'x': /* hex constant */ 11621 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; 11622 c = tok_hex(&numlen); 11623 if (numlen == 0) return 0; 11624 return c; 11625 11626 case 'b': /* backspace */ 11627 return '\010'; 11628 11629 case 's': /* space */ 11630 return ' '; 11631 11632 case 'M': 11633 if (flags & ESCAPE_META) goto eof; 11634 if ((c = nextc()) != '-') { 11635 pushback(c); 11636 goto eof; 11637 } 11638 if ((c = nextc()) == '\\') { 11639 if (peek('u')) goto eof; 11640 return read_escape(flags|ESCAPE_META, encp) | 0x80; 11641 } 11642 else if (c == -1 || !ISASCII(c)) goto eof; 11643 else { 11644 return ((c & 0xff) | 0x80); 11645 } 11646 11647 case 'C': 11648 if ((c = nextc()) != '-') { 11649 pushback(c); 11650 goto eof; 11651 } 11652 case 'c': 11653 if (flags & ESCAPE_CONTROL) goto eof; 11654 if ((c = nextc())== '\\') { 11655 if (peek('u')) goto eof; 11656 c = read_escape(flags|ESCAPE_CONTROL, encp); 11657 } 11658 else if (c == '?') 11659 return 0177; 11660 else if (c == -1 || !ISASCII(c)) goto eof; 11661 return c & 0x9f; 11662 11663 eof: 11664 case -1: 11665 yyerror("Invalid escape character syntax"); 11666 return '\0'; 11667 11668 default: 11669 return c; 11670 } 11671 } 11672 11673 static void 11674 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc) 11675 { 11676 int len = rb_enc_codelen(c, enc); 11677 rb_enc_mbcput(c, tokspace(len), enc); 11678 } 11679 11680 static int 11681 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp) 11682 { 11683 int c; 11684 int flags = 0; 11685 size_t numlen; 11686 11687 first: 11688 switch (c = nextc()) { 11689 case '\n': 11690 return 0; /* just ignore */ 11691 11692 case '0': case '1': case '2': case '3': /* octal constant */ 11693 case '4': case '5': case '6': case '7': 11694 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; 11695 { 11696 ruby_scan_oct(--lex_p, 3, &numlen); 11697 if (numlen == 0) goto eof; 11698 lex_p += numlen; 11699 tokcopy((int)numlen + 1); 11700 } 11701 return 0; 11702 11703 case 'x': /* hex constant */ 11704 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; 11705 { 11706 tok_hex(&numlen); 11707 if (numlen == 0) goto eof; 11708 tokcopy((int)numlen + 2); 11709 } 11710 return 0; 11711 11712 case 'M': 11713 if (flags & ESCAPE_META) goto eof; 11714 if ((c = nextc()) != '-') { 11715 pushback(c); 11716 goto eof; 11717 } 11718 tokcopy(3); 11719 flags |= ESCAPE_META; 11720 goto escaped; 11721 11722 case 'C': 11723 if (flags & ESCAPE_CONTROL) goto eof; 11724 if ((c = nextc()) != '-') { 11725 pushback(c); 11726 goto eof; 11727 } 11728 tokcopy(3); 11729 goto escaped; 11730 11731 case 'c': 11732 if (flags & ESCAPE_CONTROL) goto eof; 11733 tokcopy(2); 11734 flags |= ESCAPE_CONTROL; 11735 escaped: 11736 if ((c = nextc()) == '\\') { 11737 goto first; 11738 } 11739 else if (c == -1) goto eof; 11740 tokadd(c); 11741 return 0; 11742 11743 eof: 11744 case -1: 11745 yyerror("Invalid escape character syntax"); 11746 return -1; 11747 11748 default: 11749 tokadd('\\'); 11750 tokadd(c); 11751 } 11752 return 0; 11753 } 11754 11755 extern int rb_char_to_option_kcode(int c, int *option, int *kcode); 11756 11757 static int 11758 parser_regx_options(struct parser_params *parser) 11759 { 11760 int kcode = 0; 11761 int kopt = 0; 11762 int options = 0; 11763 int c, opt, kc; 11764 11765 newtok(); 11766 while (c = nextc(), ISALPHA(c)) { 11767 if (c == 'o') { 11768 options |= RE_OPTION_ONCE; 11769 } 11770 else if (rb_char_to_option_kcode(c, &opt, &kc)) { 11771 if (kc >= 0) { 11772 if (kc != rb_ascii8bit_encindex()) kcode = c; 11773 kopt = opt; 11774 } 11775 else { 11776 options |= opt; 11777 } 11778 } 11779 else { 11780 tokadd(c); 11781 } 11782 } 11783 options |= kopt; 11784 pushback(c); 11785 if (toklen()) { 11786 tokfix(); 11787 compile_error(PARSER_ARG "unknown regexp option%s - %s", 11788 toklen() > 1 ? "s" : "", tok()); 11789 } 11790 return options | RE_OPTION_ENCODING(kcode); 11791 } 11792 11793 static void 11794 dispose_string(VALUE str) 11795 { 11796 /* TODO: should use another API? */ 11797 if (RBASIC(str)->flags & RSTRING_NOEMBED) 11798 xfree(RSTRING_PTR(str)); 11799 rb_gc_force_recycle(str); 11800 } 11801 11802 static int 11803 parser_tokadd_mbchar(struct parser_params *parser, int c) 11804 { 11805 int len = parser_precise_mbclen(); 11806 if (!MBCLEN_CHARFOUND_P(len)) { 11807 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name()); 11808 return -1; 11809 } 11810 tokadd(c); 11811 lex_p += --len; 11812 if (len > 0) tokcopy(len); 11813 return c; 11814 } 11815 11816 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c) 11817 11818 static int 11819 parser_tokadd_string(struct parser_params *parser, 11820 int func, int term, int paren, long *nest, 11821 rb_encoding **encp) 11822 { 11823 int c; 11824 int has_nonascii = 0; 11825 rb_encoding *enc = *encp; 11826 char *errbuf = 0; 11827 static const char mixed_msg[] = "%s mixed within %s source"; 11828 11829 #define mixed_error(enc1, enc2) if (!errbuf) { \ 11830 size_t len = sizeof(mixed_msg) - 4; \ 11831 len += strlen(rb_enc_name(enc1)); \ 11832 len += strlen(rb_enc_name(enc2)); \ 11833 errbuf = ALLOCA_N(char, len); \ 11834 snprintf(errbuf, len, mixed_msg, \ 11835 rb_enc_name(enc1), \ 11836 rb_enc_name(enc2)); \ 11837 yyerror(errbuf); \ 11838 } 11839 #define mixed_escape(beg, enc1, enc2) do { \ 11840 const char *pos = lex_p; \ 11841 lex_p = beg; \ 11842 mixed_error(enc1, enc2); \ 11843 lex_p = pos; \ 11844 } while (0) 11845 11846 while ((c = nextc()) != -1) { 11847 if (paren && c == paren) { 11848 ++*nest; 11849 } 11850 else if (c == term) { 11851 if (!nest || !*nest) { 11852 pushback(c); 11853 break; 11854 } 11855 --*nest; 11856 } 11857 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) { 11858 int c2 = *lex_p; 11859 if (c2 == '$' || c2 == '@' || c2 == '{') { 11860 pushback(c); 11861 break; 11862 } 11863 } 11864 else if (c == '\\') { 11865 const char *beg = lex_p - 1; 11866 c = nextc(); 11867 switch (c) { 11868 case '\n': 11869 if (func & STR_FUNC_QWORDS) break; 11870 if (func & STR_FUNC_EXPAND) continue; 11871 tokadd('\\'); 11872 break; 11873 11874 case '\\': 11875 if (func & STR_FUNC_ESCAPE) tokadd(c); 11876 break; 11877 11878 case 'u': 11879 if ((func & STR_FUNC_EXPAND) == 0) { 11880 tokadd('\\'); 11881 break; 11882 } 11883 parser_tokadd_utf8(parser, &enc, 1, 11884 func & STR_FUNC_SYMBOL, 11885 func & STR_FUNC_REGEXP); 11886 if (has_nonascii && enc != *encp) { 11887 mixed_escape(beg, enc, *encp); 11888 } 11889 continue; 11890 11891 default: 11892 if (func & STR_FUNC_REGEXP) { 11893 pushback(c); 11894 if ((c = tokadd_escape(&enc)) < 0) 11895 return -1; 11896 if (has_nonascii && enc != *encp) { 11897 mixed_escape(beg, enc, *encp); 11898 } 11899 continue; 11900 } 11901 else if (func & STR_FUNC_EXPAND) { 11902 pushback(c); 11903 if (func & STR_FUNC_ESCAPE) tokadd('\\'); 11904 c = read_escape(0, &enc); 11905 } 11906 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11907 /* ignore backslashed spaces in %w */ 11908 } 11909 else if (c != term && !(paren && c == paren)) { 11910 tokadd('\\'); 11911 pushback(c); 11912 continue; 11913 } 11914 } 11915 } 11916 else if (!parser_isascii()) { 11917 has_nonascii = 1; 11918 if (enc != *encp) { 11919 mixed_error(enc, *encp); 11920 continue; 11921 } 11922 if (tokadd_mbchar(c) == -1) return -1; 11923 continue; 11924 } 11925 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11926 pushback(c); 11927 break; 11928 } 11929 if (c & 0x80) { 11930 has_nonascii = 1; 11931 if (enc != *encp) { 11932 mixed_error(enc, *encp); 11933 continue; 11934 } 11935 } 11936 tokadd(c); 11937 } 11938 *encp = enc; 11939 return c; 11940 } 11941 11942 #define NEW_STRTERM(func, term, paren) \ 11943 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0) 11944 11945 static int 11946 parser_parse_string(struct parser_params *parser, NODE *quote) 11947 { 11948 int func = (int)quote->nd_func; 11949 int term = nd_term(quote); 11950 int paren = nd_paren(quote); 11951 int c, space = 0; 11952 rb_encoding *enc = parser->enc; 11953 11954 if (func == -1) return tSTRING_END; 11955 c = nextc(); 11956 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11957 do {c = nextc();} while (ISSPACE(c)); 11958 space = 1; 11959 } 11960 if (c == term && !quote->nd_nest) { 11961 if (func & STR_FUNC_QWORDS) { 11962 quote->nd_func = -1; 11963 return ' '; 11964 } 11965 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END; 11966 set_yylval_num(regx_options()); 11967 return tREGEXP_END; 11968 } 11969 if (space) { 11970 pushback(c); 11971 return ' '; 11972 } 11973 newtok(); 11974 if ((func & STR_FUNC_EXPAND) && c == '#') { 11975 switch (c = nextc()) { 11976 case '$': 11977 case '@': 11978 pushback(c); 11979 return tSTRING_DVAR; 11980 case '{': 11981 return tSTRING_DBEG; 11982 } 11983 tokadd('#'); 11984 } 11985 pushback(c); 11986 if (tokadd_string(func, term, paren, "e->nd_nest, 11987 &enc) == -1) { 11988 ruby_sourceline = nd_line(quote); 11989 if (func & STR_FUNC_REGEXP) { 11990 if (parser->eofp) 11991 compile_error(PARSER_ARG "unterminated regexp meets end of file"); 11992 return tREGEXP_END; 11993 } 11994 else { 11995 if (parser->eofp) 11996 compile_error(PARSER_ARG "unterminated string meets end of file"); 11997 return tSTRING_END; 11998 } 11999 } 12000 12001 tokfix(); 12002 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 12003 return tSTRING_CONTENT; 12004 } 12005 12006 static int 12007 parser_heredoc_identifier(struct parser_params *parser) 12008 { 12009 int c = nextc(), term, func = 0; 12010 long len; 12011 12012 if (c == '-') { 12013 c = nextc(); 12014 func = STR_FUNC_INDENT; 12015 } 12016 switch (c) { 12017 case '\'': 12018 func |= str_squote; goto quoted; 12019 case '"': 12020 func |= str_dquote; goto quoted; 12021 case '`': 12022 func |= str_xquote; 12023 quoted: 12024 newtok(); 12025 tokadd(func); 12026 term = c; 12027 while ((c = nextc()) != -1 && c != term) { 12028 if (tokadd_mbchar(c) == -1) return 0; 12029 } 12030 if (c == -1) { 12031 compile_error(PARSER_ARG "unterminated here document identifier"); 12032 return 0; 12033 } 12034 break; 12035 12036 default: 12037 if (!parser_is_identchar()) { 12038 pushback(c); 12039 if (func & STR_FUNC_INDENT) { 12040 pushback('-'); 12041 } 12042 return 0; 12043 } 12044 newtok(); 12045 term = '"'; 12046 tokadd(func |= str_dquote); 12047 do { 12048 if (tokadd_mbchar(c) == -1) return 0; 12049 } while ((c = nextc()) != -1 && parser_is_identchar()); 12050 pushback(c); 12051 break; 12052 } 12053 12054 tokfix(); 12055 #ifdef RIPPER 12056 ripper_dispatch_scan_event(parser, tHEREDOC_BEG); 12057 #endif 12058 len = lex_p - lex_pbeg; 12059 lex_goto_eol(parser); 12060 lex_strterm = rb_node_newnode(NODE_HEREDOC, 12061 STR_NEW(tok(), toklen()), /* nd_lit */ 12062 len, /* nd_nth */ 12063 lex_lastline); /* nd_orig */ 12064 nd_set_line(lex_strterm, ruby_sourceline); 12065 ripper_flush(parser); 12066 return term == '`' ? tXSTRING_BEG : tSTRING_BEG; 12067 } 12068 12069 static void 12070 parser_heredoc_restore(struct parser_params *parser, NODE *here) 12071 { 12072 VALUE line; 12073 12074 line = here->nd_orig; 12075 lex_lastline = line; 12076 lex_pbeg = RSTRING_PTR(line); 12077 lex_pend = lex_pbeg + RSTRING_LEN(line); 12078 lex_p = lex_pbeg + here->nd_nth; 12079 heredoc_end = ruby_sourceline; 12080 ruby_sourceline = nd_line(here); 12081 dispose_string(here->nd_lit); 12082 rb_gc_force_recycle((VALUE)here); 12083 ripper_flush(parser); 12084 } 12085 12086 static int 12087 parser_whole_match_p(struct parser_params *parser, 12088 const char *eos, long len, int indent) 12089 { 12090 const char *p = lex_pbeg; 12091 long n; 12092 12093 if (indent) { 12094 while (*p && ISSPACE(*p)) p++; 12095 } 12096 n = lex_pend - (p + len); 12097 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE; 12098 return strncmp(eos, p, len) == 0; 12099 } 12100 12101 static int 12102 parser_here_document(struct parser_params *parser, NODE *here) 12103 { 12104 int c, func, indent = 0; 12105 const char *eos, *p, *pend; 12106 long len; 12107 VALUE str = 0; 12108 rb_encoding *enc = parser->enc; 12109 12110 eos = RSTRING_PTR(here->nd_lit); 12111 len = RSTRING_LEN(here->nd_lit) - 1; 12112 indent = (func = *eos++) & STR_FUNC_INDENT; 12113 12114 if ((c = nextc()) == -1) { 12115 error: 12116 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos); 12117 #ifdef RIPPER 12118 if (NIL_P(parser->delayed)) { 12119 ripper_dispatch_scan_event(parser, tSTRING_CONTENT); 12120 } 12121 else { 12122 if (str || 12123 ((len = lex_p - parser->tokp) > 0 && 12124 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) { 12125 rb_str_append(parser->delayed, str); 12126 } 12127 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12128 } 12129 lex_goto_eol(parser); 12130 #endif 12131 restore: 12132 heredoc_restore(lex_strterm); 12133 lex_strterm = 0; 12134 return 0; 12135 } 12136 if (was_bol() && whole_match_p(eos, len, indent)) { 12137 heredoc_restore(lex_strterm); 12138 return tSTRING_END; 12139 } 12140 12141 if (!(func & STR_FUNC_EXPAND)) { 12142 do { 12143 p = RSTRING_PTR(lex_lastline); 12144 pend = lex_pend; 12145 if (pend > p) { 12146 switch (pend[-1]) { 12147 case '\n': 12148 if (--pend == p || pend[-1] != '\r') { 12149 pend++; 12150 break; 12151 } 12152 case '\r': 12153 --pend; 12154 } 12155 } 12156 if (str) 12157 rb_str_cat(str, p, pend - p); 12158 else 12159 str = STR_NEW(p, pend - p); 12160 if (pend < lex_pend) rb_str_cat(str, "\n", 1); 12161 lex_goto_eol(parser); 12162 if (nextc() == -1) { 12163 if (str) dispose_string(str); 12164 goto error; 12165 } 12166 } while (!whole_match_p(eos, len, indent)); 12167 } 12168 else { 12169 /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/ 12170 newtok(); 12171 if (c == '#') { 12172 switch (c = nextc()) { 12173 case '$': 12174 case '@': 12175 pushback(c); 12176 return tSTRING_DVAR; 12177 case '{': 12178 return tSTRING_DBEG; 12179 } 12180 tokadd('#'); 12181 } 12182 do { 12183 pushback(c); 12184 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) { 12185 if (parser->eofp) goto error; 12186 goto restore; 12187 } 12188 if (c != '\n') { 12189 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 12190 return tSTRING_CONTENT; 12191 } 12192 tokadd(nextc()); 12193 /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/ 12194 if ((c = nextc()) == -1) goto error; 12195 } while (!whole_match_p(eos, len, indent)); 12196 str = STR_NEW3(tok(), toklen(), enc, func); 12197 } 12198 #ifdef RIPPER 12199 if (!NIL_P(parser->delayed)) 12200 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12201 lex_goto_eol(parser); 12202 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END); 12203 #endif 12204 heredoc_restore(lex_strterm); 12205 lex_strterm = NEW_STRTERM(-1, 0, 0); 12206 set_yylval_str(str); 12207 return tSTRING_CONTENT; 12208 } 12209 12210 #include "lex.c" 12211 12212 static void 12213 arg_ambiguous_gen(struct parser_params *parser) 12214 { 12215 #ifndef RIPPER 12216 rb_warning0("ambiguous first argument; put parentheses or even spaces"); 12217 #else 12218 dispatch0(arg_ambiguous); 12219 #endif 12220 } 12221 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1) 12222 12223 static ID 12224 formal_argument_gen(struct parser_params *parser, ID lhs) 12225 { 12226 #ifndef RIPPER 12227 if (!is_local_id(lhs)) 12228 yyerror("formal argument must be local variable"); 12229 #endif 12230 shadowing_lvar(lhs); 12231 return lhs; 12232 } 12233 12234 static int 12235 lvar_defined_gen(struct parser_params *parser, ID id) 12236 { 12237 return (dyna_in_block() && dvar_defined(id)) || local_id(id); 12238 } 12239 12240 /* emacsen -*- hack */ 12241 static long 12242 parser_encode_length(struct parser_params *parser, const char *name, long len) 12243 { 12244 long nlen; 12245 12246 if (len > 5 && name[nlen = len - 5] == '-') { 12247 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0) 12248 return nlen; 12249 } 12250 if (len > 4 && name[nlen = len - 5] == '-') { 12251 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0) 12252 return nlen; 12253 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0) 12254 return nlen; 12255 } 12256 return len; 12257 } 12258 12259 static void 12260 parser_set_encode(struct parser_params *parser, const char *name) 12261 { 12262 int idx = rb_enc_find_index(name); 12263 rb_encoding *enc; 12264 VALUE excargs[3]; 12265 12266 if (idx < 0) { 12267 VALUE rb_make_backtrace(void); 12268 VALUE rb_make_exception(int, VALUE*); 12269 12270 excargs[1] = rb_sprintf("unknown encoding name: %s", name); 12271 error: 12272 excargs[0] = rb_eArgError; 12273 excargs[2] = rb_make_backtrace(); 12274 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline)); 12275 rb_exc_raise(rb_make_exception(3, excargs)); 12276 } 12277 enc = rb_enc_from_index(idx); 12278 if (!rb_enc_asciicompat(enc)) { 12279 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc)); 12280 goto error; 12281 } 12282 parser->enc = enc; 12283 } 12284 12285 static int 12286 comment_at_top(struct parser_params *parser) 12287 { 12288 const char *p = lex_pbeg, *pend = lex_p - 1; 12289 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0; 12290 while (p < pend) { 12291 if (!ISSPACE(*p)) return 0; 12292 p++; 12293 } 12294 return 1; 12295 } 12296 12297 #ifndef RIPPER 12298 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len); 12299 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val); 12300 12301 static void 12302 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val) 12303 { 12304 if (!comment_at_top(parser)) { 12305 return; 12306 } 12307 parser_set_encode(parser, val); 12308 } 12309 12310 struct magic_comment { 12311 const char *name; 12312 rb_magic_comment_setter_t func; 12313 rb_magic_comment_length_t length; 12314 }; 12315 12316 static const struct magic_comment magic_comments[] = { 12317 {"coding", magic_comment_encoding, parser_encode_length}, 12318 {"encoding", magic_comment_encoding, parser_encode_length}, 12319 }; 12320 #endif 12321 12322 static const char * 12323 magic_comment_marker(const char *str, long len) 12324 { 12325 long i = 2; 12326 12327 while (i < len) { 12328 switch (str[i]) { 12329 case '-': 12330 if (str[i-1] == '*' && str[i-2] == '-') { 12331 return str + i + 1; 12332 } 12333 i += 2; 12334 break; 12335 case '*': 12336 if (i + 1 >= len) return 0; 12337 if (str[i+1] != '-') { 12338 i += 4; 12339 } 12340 else if (str[i-1] != '-') { 12341 i += 2; 12342 } 12343 else { 12344 return str + i + 2; 12345 } 12346 break; 12347 default: 12348 i += 3; 12349 break; 12350 } 12351 } 12352 return 0; 12353 } 12354 12355 static int 12356 parser_magic_comment(struct parser_params *parser, const char *str, long len) 12357 { 12358 VALUE name = 0, val = 0; 12359 const char *beg, *end, *vbeg, *vend; 12360 #define str_copy(_s, _p, _n) ((_s) \ 12361 ? (rb_str_resize((_s), (_n)), \ 12362 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \ 12363 : ((_s) = STR_NEW((_p), (_n)))) 12364 12365 if (len <= 7) return FALSE; 12366 if (!(beg = magic_comment_marker(str, len))) return FALSE; 12367 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE; 12368 str = beg; 12369 len = end - beg - 3; 12370 12371 /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */ 12372 while (len > 0) { 12373 #ifndef RIPPER 12374 const struct magic_comment *p = magic_comments; 12375 #endif 12376 char *s; 12377 int i; 12378 long n = 0; 12379 12380 for (; len > 0 && *str; str++, --len) { 12381 switch (*str) { 12382 case '\'': case '"': case ':': case ';': 12383 continue; 12384 } 12385 if (!ISSPACE(*str)) break; 12386 } 12387 for (beg = str; len > 0; str++, --len) { 12388 switch (*str) { 12389 case '\'': case '"': case ':': case ';': 12390 break; 12391 default: 12392 if (ISSPACE(*str)) break; 12393 continue; 12394 } 12395 break; 12396 } 12397 for (end = str; len > 0 && ISSPACE(*str); str++, --len); 12398 if (!len) break; 12399 if (*str != ':') continue; 12400 12401 do str++; while (--len > 0 && ISSPACE(*str)); 12402 if (!len) break; 12403 if (*str == '"') { 12404 for (vbeg = ++str; --len > 0 && *str != '"'; str++) { 12405 if (*str == '\\') { 12406 --len; 12407 ++str; 12408 } 12409 } 12410 vend = str; 12411 if (len) { 12412 --len; 12413 ++str; 12414 } 12415 } 12416 else { 12417 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++); 12418 vend = str; 12419 } 12420 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++; 12421 12422 n = end - beg; 12423 str_copy(name, beg, n); 12424 s = RSTRING_PTR(name); 12425 for (i = 0; i < n; ++i) { 12426 if (s[i] == '-') s[i] = '_'; 12427 } 12428 #ifndef RIPPER 12429 do { 12430 if (STRNCASECMP(p->name, s, n) == 0) { 12431 n = vend - vbeg; 12432 if (p->length) { 12433 n = (*p->length)(parser, vbeg, n); 12434 } 12435 str_copy(val, vbeg, n); 12436 (*p->func)(parser, s, RSTRING_PTR(val)); 12437 break; 12438 } 12439 } while (++p < magic_comments + numberof(magic_comments)); 12440 #else 12441 dispatch2(magic_comment, name, val); 12442 #endif 12443 } 12444 12445 return TRUE; 12446 } 12447 12448 static void 12449 set_file_encoding(struct parser_params *parser, const char *str, const char *send) 12450 { 12451 int sep = 0; 12452 const char *beg = str; 12453 VALUE s; 12454 12455 for (;;) { 12456 if (send - str <= 6) return; 12457 switch (str[6]) { 12458 case 'C': case 'c': str += 6; continue; 12459 case 'O': case 'o': str += 5; continue; 12460 case 'D': case 'd': str += 4; continue; 12461 case 'I': case 'i': str += 3; continue; 12462 case 'N': case 'n': str += 2; continue; 12463 case 'G': case 'g': str += 1; continue; 12464 case '=': case ':': 12465 sep = 1; 12466 str += 6; 12467 break; 12468 default: 12469 str += 6; 12470 if (ISSPACE(*str)) break; 12471 continue; 12472 } 12473 if (STRNCASECMP(str-6, "coding", 6) == 0) break; 12474 } 12475 for (;;) { 12476 do { 12477 if (++str >= send) return; 12478 } while (ISSPACE(*str)); 12479 if (sep) break; 12480 if (*str != '=' && *str != ':') return; 12481 sep = 1; 12482 str++; 12483 } 12484 beg = str; 12485 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send); 12486 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg)); 12487 parser_set_encode(parser, RSTRING_PTR(s)); 12488 rb_str_resize(s, 0); 12489 } 12490 12491 static void 12492 parser_prepare(struct parser_params *parser) 12493 { 12494 int c = nextc(); 12495 switch (c) { 12496 case '#': 12497 if (peek('!')) parser->has_shebang = 1; 12498 break; 12499 case 0xef: /* UTF-8 BOM marker */ 12500 if (lex_pend - lex_p >= 2 && 12501 (unsigned char)lex_p[0] == 0xbb && 12502 (unsigned char)lex_p[1] == 0xbf) { 12503 parser->enc = rb_utf8_encoding(); 12504 lex_p += 2; 12505 lex_pbeg = lex_p; 12506 return; 12507 } 12508 break; 12509 case EOF: 12510 return; 12511 } 12512 pushback(c); 12513 parser->enc = rb_enc_get(lex_lastline); 12514 } 12515 12516 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG) 12517 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN) 12518 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS) 12519 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c)) 12520 12521 #ifndef RIPPER 12522 #define ambiguous_operator(op, syn) ( \ 12523 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \ 12524 rb_warning0("even though it seems like "syn"")) 12525 #else 12526 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn)) 12527 #endif 12528 #define warn_balanced(op, syn) \ 12529 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \ 12530 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \ 12531 last_state != EXPR_ENDARG && \ 12532 space_seen && !ISSPACE(c) && \ 12533 (ambiguous_operator(op, syn), 0)) 12534 12535 static int 12536 parser_yylex(struct parser_params *parser) 12537 { 12538 register int c; 12539 int space_seen = 0; 12540 int cmd_state; 12541 enum lex_state_e last_state; 12542 rb_encoding *enc; 12543 int mb; 12544 #ifdef RIPPER 12545 int fallthru = FALSE; 12546 #endif 12547 12548 if (lex_strterm) { 12549 int token; 12550 if (nd_type(lex_strterm) == NODE_HEREDOC) { 12551 token = here_document(lex_strterm); 12552 if (token == tSTRING_END) { 12553 lex_strterm = 0; 12554 lex_state = EXPR_END; 12555 } 12556 } 12557 else { 12558 token = parse_string(lex_strterm); 12559 if (token == tSTRING_END || token == tREGEXP_END) { 12560 rb_gc_force_recycle((VALUE)lex_strterm); 12561 lex_strterm = 0; 12562 lex_state = EXPR_END; 12563 } 12564 } 12565 return token; 12566 } 12567 cmd_state = command_start; 12568 command_start = FALSE; 12569 retry: 12570 last_state = lex_state; 12571 switch (c = nextc()) { 12572 case '\0': /* NUL */ 12573 case '\004': /* ^D */ 12574 case '\032': /* ^Z */ 12575 case -1: /* end of script. */ 12576 return 0; 12577 12578 /* white spaces */ 12579 case ' ': case '\t': case '\f': case '\r': 12580 case '\13': /* '\v' */ 12581 space_seen = 1; 12582 #ifdef RIPPER 12583 while ((c = nextc())) { 12584 switch (c) { 12585 case ' ': case '\t': case '\f': case '\r': 12586 case '\13': /* '\v' */ 12587 break; 12588 default: 12589 goto outofloop; 12590 } 12591 } 12592 outofloop: 12593 pushback(c); 12594 ripper_dispatch_scan_event(parser, tSP); 12595 #endif 12596 goto retry; 12597 12598 case '#': /* it's a comment */ 12599 /* no magic_comment in shebang line */ 12600 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) { 12601 if (comment_at_top(parser)) { 12602 set_file_encoding(parser, lex_p, lex_pend); 12603 } 12604 } 12605 lex_p = lex_pend; 12606 #ifdef RIPPER 12607 ripper_dispatch_scan_event(parser, tCOMMENT); 12608 fallthru = TRUE; 12609 #endif 12610 /* fall through */ 12611 case '\n': 12612 switch (lex_state) { 12613 case EXPR_BEG: 12614 case EXPR_FNAME: 12615 case EXPR_DOT: 12616 case EXPR_CLASS: 12617 case EXPR_VALUE: 12618 #ifdef RIPPER 12619 if (!fallthru) { 12620 ripper_dispatch_scan_event(parser, tIGNORED_NL); 12621 } 12622 fallthru = FALSE; 12623 #endif 12624 goto retry; 12625 default: 12626 break; 12627 } 12628 while ((c = nextc())) { 12629 switch (c) { 12630 case ' ': case '\t': case '\f': case '\r': 12631 case '\13': /* '\v' */ 12632 space_seen = 1; 12633 break; 12634 case '.': { 12635 if ((c = nextc()) != '.') { 12636 pushback(c); 12637 pushback('.'); 12638 goto retry; 12639 } 12640 } 12641 default: 12642 --ruby_sourceline; 12643 lex_nextline = lex_lastline; 12644 case -1: /* EOF no decrement*/ 12645 lex_goto_eol(parser); 12646 #ifdef RIPPER 12647 if (c != -1) { 12648 parser->tokp = lex_p; 12649 } 12650 #endif 12651 goto normal_newline; 12652 } 12653 } 12654 normal_newline: 12655 command_start = TRUE; 12656 lex_state = EXPR_BEG; 12657 return '\n'; 12658 12659 case '*': 12660 if ((c = nextc()) == '*') { 12661 if ((c = nextc()) == '=') { 12662 set_yylval_id(tPOW); 12663 lex_state = EXPR_BEG; 12664 return tOP_ASGN; 12665 } 12666 pushback(c); 12667 c = tPOW; 12668 } 12669 else { 12670 if (c == '=') { 12671 set_yylval_id('*'); 12672 lex_state = EXPR_BEG; 12673 return tOP_ASGN; 12674 } 12675 pushback(c); 12676 if (IS_SPCARG(c)) { 12677 rb_warning0("`*' interpreted as argument prefix"); 12678 c = tSTAR; 12679 } 12680 else if (IS_BEG()) { 12681 c = tSTAR; 12682 } 12683 else { 12684 warn_balanced("*", "argument prefix"); 12685 c = '*'; 12686 } 12687 } 12688 switch (lex_state) { 12689 case EXPR_FNAME: case EXPR_DOT: 12690 lex_state = EXPR_ARG; break; 12691 default: 12692 lex_state = EXPR_BEG; break; 12693 } 12694 return c; 12695 12696 case '!': 12697 c = nextc(); 12698 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12699 lex_state = EXPR_ARG; 12700 if (c == '@') { 12701 return '!'; 12702 } 12703 } 12704 else { 12705 lex_state = EXPR_BEG; 12706 } 12707 if (c == '=') { 12708 return tNEQ; 12709 } 12710 if (c == '~') { 12711 return tNMATCH; 12712 } 12713 pushback(c); 12714 return '!'; 12715 12716 case '=': 12717 if (was_bol()) { 12718 /* skip embedded rd document */ 12719 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) { 12720 #ifdef RIPPER 12721 int first_p = TRUE; 12722 12723 lex_goto_eol(parser); 12724 ripper_dispatch_scan_event(parser, tEMBDOC_BEG); 12725 #endif 12726 for (;;) { 12727 lex_goto_eol(parser); 12728 #ifdef RIPPER 12729 if (!first_p) { 12730 ripper_dispatch_scan_event(parser, tEMBDOC); 12731 } 12732 first_p = FALSE; 12733 #endif 12734 c = nextc(); 12735 if (c == -1) { 12736 compile_error(PARSER_ARG "embedded document meets end of file"); 12737 return 0; 12738 } 12739 if (c != '=') continue; 12740 if (strncmp(lex_p, "end", 3) == 0 && 12741 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) { 12742 break; 12743 } 12744 } 12745 lex_goto_eol(parser); 12746 #ifdef RIPPER 12747 ripper_dispatch_scan_event(parser, tEMBDOC_END); 12748 #endif 12749 goto retry; 12750 } 12751 } 12752 12753 switch (lex_state) { 12754 case EXPR_FNAME: case EXPR_DOT: 12755 lex_state = EXPR_ARG; break; 12756 default: 12757 lex_state = EXPR_BEG; break; 12758 } 12759 if ((c = nextc()) == '=') { 12760 if ((c = nextc()) == '=') { 12761 return tEQQ; 12762 } 12763 pushback(c); 12764 return tEQ; 12765 } 12766 if (c == '~') { 12767 return tMATCH; 12768 } 12769 else if (c == '>') { 12770 return tASSOC; 12771 } 12772 pushback(c); 12773 return '='; 12774 12775 case '<': 12776 last_state = lex_state; 12777 c = nextc(); 12778 if (c == '<' && 12779 lex_state != EXPR_DOT && 12780 lex_state != EXPR_CLASS && 12781 !IS_END() && 12782 (!IS_ARG() || space_seen)) { 12783 int token = heredoc_identifier(); 12784 if (token) return token; 12785 } 12786 switch (lex_state) { 12787 case EXPR_FNAME: case EXPR_DOT: 12788 lex_state = EXPR_ARG; break; 12789 default: 12790 lex_state = EXPR_BEG; break; 12791 } 12792 if (c == '=') { 12793 if ((c = nextc()) == '>') { 12794 return tCMP; 12795 } 12796 pushback(c); 12797 return tLEQ; 12798 } 12799 if (c == '<') { 12800 if ((c = nextc()) == '=') { 12801 set_yylval_id(tLSHFT); 12802 lex_state = EXPR_BEG; 12803 return tOP_ASGN; 12804 } 12805 pushback(c); 12806 warn_balanced("<<", "here document"); 12807 return tLSHFT; 12808 } 12809 pushback(c); 12810 return '<'; 12811 12812 case '>': 12813 switch (lex_state) { 12814 case EXPR_FNAME: case EXPR_DOT: 12815 lex_state = EXPR_ARG; break; 12816 default: 12817 lex_state = EXPR_BEG; break; 12818 } 12819 if ((c = nextc()) == '=') { 12820 return tGEQ; 12821 } 12822 if (c == '>') { 12823 if ((c = nextc()) == '=') { 12824 set_yylval_id(tRSHFT); 12825 lex_state = EXPR_BEG; 12826 return tOP_ASGN; 12827 } 12828 pushback(c); 12829 return tRSHFT; 12830 } 12831 pushback(c); 12832 return '>'; 12833 12834 case '"': 12835 lex_strterm = NEW_STRTERM(str_dquote, '"', 0); 12836 return tSTRING_BEG; 12837 12838 case '`': 12839 if (lex_state == EXPR_FNAME) { 12840 lex_state = EXPR_ENDFN; 12841 return c; 12842 } 12843 if (lex_state == EXPR_DOT) { 12844 if (cmd_state) 12845 lex_state = EXPR_CMDARG; 12846 else 12847 lex_state = EXPR_ARG; 12848 return c; 12849 } 12850 lex_strterm = NEW_STRTERM(str_xquote, '`', 0); 12851 return tXSTRING_BEG; 12852 12853 case '\'': 12854 lex_strterm = NEW_STRTERM(str_squote, '\'', 0); 12855 return tSTRING_BEG; 12856 12857 case '?': 12858 if (IS_END()) { 12859 lex_state = EXPR_VALUE; 12860 return '?'; 12861 } 12862 c = nextc(); 12863 if (c == -1) { 12864 compile_error(PARSER_ARG "incomplete character syntax"); 12865 return 0; 12866 } 12867 if (rb_enc_isspace(c, parser->enc)) { 12868 if (!IS_ARG()) { 12869 int c2 = 0; 12870 switch (c) { 12871 case ' ': 12872 c2 = 's'; 12873 break; 12874 case '\n': 12875 c2 = 'n'; 12876 break; 12877 case '\t': 12878 c2 = 't'; 12879 break; 12880 case '\v': 12881 c2 = 'v'; 12882 break; 12883 case '\r': 12884 c2 = 'r'; 12885 break; 12886 case '\f': 12887 c2 = 'f'; 12888 break; 12889 } 12890 if (c2) { 12891 rb_warnI("invalid character syntax; use ?\\%c", c2); 12892 } 12893 } 12894 ternary: 12895 pushback(c); 12896 lex_state = EXPR_VALUE; 12897 return '?'; 12898 } 12899 newtok(); 12900 enc = parser->enc; 12901 if (!parser_isascii()) { 12902 if (tokadd_mbchar(c) == -1) return 0; 12903 } 12904 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') && 12905 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) { 12906 goto ternary; 12907 } 12908 else if (c == '\\') { 12909 if (peek('u')) { 12910 nextc(); 12911 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0); 12912 if (0x80 <= c) { 12913 tokaddmbc(c, enc); 12914 } 12915 else { 12916 tokadd(c); 12917 } 12918 } 12919 else { 12920 c = read_escape(0, &enc); 12921 tokadd(c); 12922 } 12923 } 12924 else { 12925 tokadd(c); 12926 } 12927 tokfix(); 12928 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0)); 12929 lex_state = EXPR_END; 12930 return tCHAR; 12931 12932 case '&': 12933 if ((c = nextc()) == '&') { 12934 lex_state = EXPR_BEG; 12935 if ((c = nextc()) == '=') { 12936 set_yylval_id(tANDOP); 12937 lex_state = EXPR_BEG; 12938 return tOP_ASGN; 12939 } 12940 pushback(c); 12941 return tANDOP; 12942 } 12943 else if (c == '=') { 12944 set_yylval_id('&'); 12945 lex_state = EXPR_BEG; 12946 return tOP_ASGN; 12947 } 12948 pushback(c); 12949 if (IS_SPCARG(c)) { 12950 rb_warning0("`&' interpreted as argument prefix"); 12951 c = tAMPER; 12952 } 12953 else if (IS_BEG()) { 12954 c = tAMPER; 12955 } 12956 else { 12957 warn_balanced("&", "argument prefix"); 12958 c = '&'; 12959 } 12960 switch (lex_state) { 12961 case EXPR_FNAME: case EXPR_DOT: 12962 lex_state = EXPR_ARG; break; 12963 default: 12964 lex_state = EXPR_BEG; 12965 } 12966 return c; 12967 12968 case '|': 12969 if ((c = nextc()) == '|') { 12970 lex_state = EXPR_BEG; 12971 if ((c = nextc()) == '=') { 12972 set_yylval_id(tOROP); 12973 lex_state = EXPR_BEG; 12974 return tOP_ASGN; 12975 } 12976 pushback(c); 12977 return tOROP; 12978 } 12979 if (c == '=') { 12980 set_yylval_id('|'); 12981 lex_state = EXPR_BEG; 12982 return tOP_ASGN; 12983 } 12984 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12985 lex_state = EXPR_ARG; 12986 } 12987 else { 12988 lex_state = EXPR_BEG; 12989 } 12990 pushback(c); 12991 return '|'; 12992 12993 case '+': 12994 c = nextc(); 12995 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12996 lex_state = EXPR_ARG; 12997 if (c == '@') { 12998 return tUPLUS; 12999 } 13000 pushback(c); 13001 return '+'; 13002 } 13003 if (c == '=') { 13004 set_yylval_id('+'); 13005 lex_state = EXPR_BEG; 13006 return tOP_ASGN; 13007 } 13008 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 13009 lex_state = EXPR_BEG; 13010 pushback(c); 13011 if (c != -1 && ISDIGIT(c)) { 13012 c = '+'; 13013 goto start_num; 13014 } 13015 return tUPLUS; 13016 } 13017 lex_state = EXPR_BEG; 13018 pushback(c); 13019 warn_balanced("+", "unary operator"); 13020 return '+'; 13021 13022 case '-': 13023 c = nextc(); 13024 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13025 lex_state = EXPR_ARG; 13026 if (c == '@') { 13027 return tUMINUS; 13028 } 13029 pushback(c); 13030 return '-'; 13031 } 13032 if (c == '=') { 13033 set_yylval_id('-'); 13034 lex_state = EXPR_BEG; 13035 return tOP_ASGN; 13036 } 13037 if (c == '>') { 13038 lex_state = EXPR_ARG; 13039 return tLAMBDA; 13040 } 13041 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 13042 lex_state = EXPR_BEG; 13043 pushback(c); 13044 if (c != -1 && ISDIGIT(c)) { 13045 return tUMINUS_NUM; 13046 } 13047 return tUMINUS; 13048 } 13049 lex_state = EXPR_BEG; 13050 pushback(c); 13051 warn_balanced("-", "unary operator"); 13052 return '-'; 13053 13054 case '.': 13055 lex_state = EXPR_BEG; 13056 if ((c = nextc()) == '.') { 13057 if ((c = nextc()) == '.') { 13058 return tDOT3; 13059 } 13060 pushback(c); 13061 return tDOT2; 13062 } 13063 pushback(c); 13064 if (c != -1 && ISDIGIT(c)) { 13065 yyerror("no .<digit> floating literal anymore; put 0 before dot"); 13066 } 13067 lex_state = EXPR_DOT; 13068 return '.'; 13069 13070 start_num: 13071 case '0': case '1': case '2': case '3': case '4': 13072 case '5': case '6': case '7': case '8': case '9': 13073 { 13074 int is_float, seen_point, seen_e, nondigit; 13075 13076 is_float = seen_point = seen_e = nondigit = 0; 13077 lex_state = EXPR_END; 13078 newtok(); 13079 if (c == '-' || c == '+') { 13080 tokadd(c); 13081 c = nextc(); 13082 } 13083 if (c == '0') { 13084 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0) 13085 int start = toklen(); 13086 c = nextc(); 13087 if (c == 'x' || c == 'X') { 13088 /* hexadecimal */ 13089 c = nextc(); 13090 if (c != -1 && ISXDIGIT(c)) { 13091 do { 13092 if (c == '_') { 13093 if (nondigit) break; 13094 nondigit = c; 13095 continue; 13096 } 13097 if (!ISXDIGIT(c)) break; 13098 nondigit = 0; 13099 tokadd(c); 13100 } while ((c = nextc()) != -1); 13101 } 13102 pushback(c); 13103 tokfix(); 13104 if (toklen() == start) { 13105 no_digits(); 13106 } 13107 else if (nondigit) goto trailing_uc; 13108 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE)); 13109 return tINTEGER; 13110 } 13111 if (c == 'b' || c == 'B') { 13112 /* binary */ 13113 c = nextc(); 13114 if (c == '0' || c == '1') { 13115 do { 13116 if (c == '_') { 13117 if (nondigit) break; 13118 nondigit = c; 13119 continue; 13120 } 13121 if (c != '0' && c != '1') break; 13122 nondigit = 0; 13123 tokadd(c); 13124 } while ((c = nextc()) != -1); 13125 } 13126 pushback(c); 13127 tokfix(); 13128 if (toklen() == start) { 13129 no_digits(); 13130 } 13131 else if (nondigit) goto trailing_uc; 13132 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE)); 13133 return tINTEGER; 13134 } 13135 if (c == 'd' || c == 'D') { 13136 /* decimal */ 13137 c = nextc(); 13138 if (c != -1 && ISDIGIT(c)) { 13139 do { 13140 if (c == '_') { 13141 if (nondigit) break; 13142 nondigit = c; 13143 continue; 13144 } 13145 if (!ISDIGIT(c)) break; 13146 nondigit = 0; 13147 tokadd(c); 13148 } while ((c = nextc()) != -1); 13149 } 13150 pushback(c); 13151 tokfix(); 13152 if (toklen() == start) { 13153 no_digits(); 13154 } 13155 else if (nondigit) goto trailing_uc; 13156 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 13157 return tINTEGER; 13158 } 13159 if (c == '_') { 13160 /* 0_0 */ 13161 goto octal_number; 13162 } 13163 if (c == 'o' || c == 'O') { 13164 /* prefixed octal */ 13165 c = nextc(); 13166 if (c == -1 || c == '_' || !ISDIGIT(c)) { 13167 no_digits(); 13168 } 13169 } 13170 if (c >= '0' && c <= '7') { 13171 /* octal */ 13172 octal_number: 13173 do { 13174 if (c == '_') { 13175 if (nondigit) break; 13176 nondigit = c; 13177 continue; 13178 } 13179 if (c < '0' || c > '9') break; 13180 if (c > '7') goto invalid_octal; 13181 nondigit = 0; 13182 tokadd(c); 13183 } while ((c = nextc()) != -1); 13184 if (toklen() > start) { 13185 pushback(c); 13186 tokfix(); 13187 if (nondigit) goto trailing_uc; 13188 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE)); 13189 return tINTEGER; 13190 } 13191 if (nondigit) { 13192 pushback(c); 13193 goto trailing_uc; 13194 } 13195 } 13196 if (c > '7' && c <= '9') { 13197 invalid_octal: 13198 yyerror("Invalid octal digit"); 13199 } 13200 else if (c == '.' || c == 'e' || c == 'E') { 13201 tokadd('0'); 13202 } 13203 else { 13204 pushback(c); 13205 set_yylval_literal(INT2FIX(0)); 13206 return tINTEGER; 13207 } 13208 } 13209 13210 for (;;) { 13211 switch (c) { 13212 case '0': case '1': case '2': case '3': case '4': 13213 case '5': case '6': case '7': case '8': case '9': 13214 nondigit = 0; 13215 tokadd(c); 13216 break; 13217 13218 case '.': 13219 if (nondigit) goto trailing_uc; 13220 if (seen_point || seen_e) { 13221 goto decode_num; 13222 } 13223 else { 13224 int c0 = nextc(); 13225 if (c0 == -1 || !ISDIGIT(c0)) { 13226 pushback(c0); 13227 goto decode_num; 13228 } 13229 c = c0; 13230 } 13231 tokadd('.'); 13232 tokadd(c); 13233 is_float++; 13234 seen_point++; 13235 nondigit = 0; 13236 break; 13237 13238 case 'e': 13239 case 'E': 13240 if (nondigit) { 13241 pushback(c); 13242 c = nondigit; 13243 goto decode_num; 13244 } 13245 if (seen_e) { 13246 goto decode_num; 13247 } 13248 tokadd(c); 13249 seen_e++; 13250 is_float++; 13251 nondigit = c; 13252 c = nextc(); 13253 if (c != '-' && c != '+') continue; 13254 tokadd(c); 13255 nondigit = c; 13256 break; 13257 13258 case '_': /* `_' in number just ignored */ 13259 if (nondigit) goto decode_num; 13260 nondigit = c; 13261 break; 13262 13263 default: 13264 goto decode_num; 13265 } 13266 c = nextc(); 13267 } 13268 13269 decode_num: 13270 pushback(c); 13271 if (nondigit) { 13272 char tmp[30]; 13273 trailing_uc: 13274 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit); 13275 yyerror(tmp); 13276 } 13277 tokfix(); 13278 if (is_float) { 13279 double d = strtod(tok(), 0); 13280 if (errno == ERANGE) { 13281 rb_warningS("Float %s out of range", tok()); 13282 errno = 0; 13283 } 13284 set_yylval_literal(DBL2NUM(d)); 13285 return tFLOAT; 13286 } 13287 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 13288 return tINTEGER; 13289 } 13290 13291 case ')': 13292 case ']': 13293 paren_nest--; 13294 case '}': 13295 COND_LEXPOP(); 13296 CMDARG_LEXPOP(); 13297 if (c == ')') 13298 lex_state = EXPR_ENDFN; 13299 else 13300 lex_state = EXPR_ENDARG; 13301 return c; 13302 13303 case ':': 13304 c = nextc(); 13305 if (c == ':') { 13306 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) { 13307 lex_state = EXPR_BEG; 13308 return tCOLON3; 13309 } 13310 lex_state = EXPR_DOT; 13311 return tCOLON2; 13312 } 13313 if (IS_END() || ISSPACE(c)) { 13314 pushback(c); 13315 warn_balanced(":", "symbol literal"); 13316 lex_state = EXPR_BEG; 13317 return ':'; 13318 } 13319 switch (c) { 13320 case '\'': 13321 lex_strterm = NEW_STRTERM(str_ssym, c, 0); 13322 break; 13323 case '"': 13324 lex_strterm = NEW_STRTERM(str_dsym, c, 0); 13325 break; 13326 default: 13327 pushback(c); 13328 break; 13329 } 13330 lex_state = EXPR_FNAME; 13331 return tSYMBEG; 13332 13333 case '/': 13334 if (IS_BEG()) { 13335 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 13336 return tREGEXP_BEG; 13337 } 13338 if ((c = nextc()) == '=') { 13339 set_yylval_id('/'); 13340 lex_state = EXPR_BEG; 13341 return tOP_ASGN; 13342 } 13343 pushback(c); 13344 if (IS_SPCARG(c)) { 13345 arg_ambiguous(); 13346 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 13347 return tREGEXP_BEG; 13348 } 13349 switch (lex_state) { 13350 case EXPR_FNAME: case EXPR_DOT: 13351 lex_state = EXPR_ARG; break; 13352 default: 13353 lex_state = EXPR_BEG; break; 13354 } 13355 warn_balanced("/", "regexp literal"); 13356 return '/'; 13357 13358 case '^': 13359 if ((c = nextc()) == '=') { 13360 set_yylval_id('^'); 13361 lex_state = EXPR_BEG; 13362 return tOP_ASGN; 13363 } 13364 switch (lex_state) { 13365 case EXPR_FNAME: case EXPR_DOT: 13366 lex_state = EXPR_ARG; break; 13367 default: 13368 lex_state = EXPR_BEG; break; 13369 } 13370 pushback(c); 13371 return '^'; 13372 13373 case ';': 13374 lex_state = EXPR_BEG; 13375 command_start = TRUE; 13376 return ';'; 13377 13378 case ',': 13379 lex_state = EXPR_BEG; 13380 return ','; 13381 13382 case '~': 13383 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13384 if ((c = nextc()) != '@') { 13385 pushback(c); 13386 } 13387 lex_state = EXPR_ARG; 13388 } 13389 else { 13390 lex_state = EXPR_BEG; 13391 } 13392 return '~'; 13393 13394 case '(': 13395 if (IS_BEG()) { 13396 c = tLPAREN; 13397 } 13398 else if (IS_SPCARG(-1)) { 13399 c = tLPAREN_ARG; 13400 } 13401 paren_nest++; 13402 COND_PUSH(0); 13403 CMDARG_PUSH(0); 13404 lex_state = EXPR_BEG; 13405 return c; 13406 13407 case '[': 13408 paren_nest++; 13409 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13410 lex_state = EXPR_ARG; 13411 if ((c = nextc()) == ']') { 13412 if ((c = nextc()) == '=') { 13413 return tASET; 13414 } 13415 pushback(c); 13416 return tAREF; 13417 } 13418 pushback(c); 13419 return '['; 13420 } 13421 else if (IS_BEG()) { 13422 c = tLBRACK; 13423 } 13424 else if (IS_ARG() && space_seen) { 13425 c = tLBRACK; 13426 } 13427 lex_state = EXPR_BEG; 13428 COND_PUSH(0); 13429 CMDARG_PUSH(0); 13430 return c; 13431 13432 case '{': 13433 if (lpar_beg && lpar_beg == paren_nest) { 13434 lex_state = EXPR_BEG; 13435 lpar_beg = 0; 13436 --paren_nest; 13437 COND_PUSH(0); 13438 CMDARG_PUSH(0); 13439 return tLAMBEG; 13440 } 13441 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN) 13442 c = '{'; /* block (primary) */ 13443 else if (lex_state == EXPR_ENDARG) 13444 c = tLBRACE_ARG; /* block (expr) */ 13445 else 13446 c = tLBRACE; /* hash */ 13447 COND_PUSH(0); 13448 CMDARG_PUSH(0); 13449 lex_state = EXPR_BEG; 13450 if (c != tLBRACE) command_start = TRUE; 13451 return c; 13452 13453 case '\\': 13454 c = nextc(); 13455 if (c == '\n') { 13456 space_seen = 1; 13457 #ifdef RIPPER 13458 ripper_dispatch_scan_event(parser, tSP); 13459 #endif 13460 goto retry; /* skip \\n */ 13461 } 13462 pushback(c); 13463 return '\\'; 13464 13465 case '%': 13466 if (IS_BEG()) { 13467 int term; 13468 int paren; 13469 13470 c = nextc(); 13471 quotation: 13472 if (c == -1 || !ISALNUM(c)) { 13473 term = c; 13474 c = 'Q'; 13475 } 13476 else { 13477 term = nextc(); 13478 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) { 13479 yyerror("unknown type of %string"); 13480 return 0; 13481 } 13482 } 13483 if (c == -1 || term == -1) { 13484 compile_error(PARSER_ARG "unterminated quoted string meets end of file"); 13485 return 0; 13486 } 13487 paren = term; 13488 if (term == '(') term = ')'; 13489 else if (term == '[') term = ']'; 13490 else if (term == '{') term = '}'; 13491 else if (term == '<') term = '>'; 13492 else paren = 0; 13493 13494 switch (c) { 13495 case 'Q': 13496 lex_strterm = NEW_STRTERM(str_dquote, term, paren); 13497 return tSTRING_BEG; 13498 13499 case 'q': 13500 lex_strterm = NEW_STRTERM(str_squote, term, paren); 13501 return tSTRING_BEG; 13502 13503 case 'W': 13504 lex_strterm = NEW_STRTERM(str_dword, term, paren); 13505 do {c = nextc();} while (ISSPACE(c)); 13506 pushback(c); 13507 return tWORDS_BEG; 13508 13509 case 'w': 13510 lex_strterm = NEW_STRTERM(str_sword, term, paren); 13511 do {c = nextc();} while (ISSPACE(c)); 13512 pushback(c); 13513 return tQWORDS_BEG; 13514 13515 case 'x': 13516 lex_strterm = NEW_STRTERM(str_xquote, term, paren); 13517 return tXSTRING_BEG; 13518 13519 case 'r': 13520 lex_strterm = NEW_STRTERM(str_regexp, term, paren); 13521 return tREGEXP_BEG; 13522 13523 case 's': 13524 lex_strterm = NEW_STRTERM(str_ssym, term, paren); 13525 lex_state = EXPR_FNAME; 13526 return tSYMBEG; 13527 13528 default: 13529 yyerror("unknown type of %string"); 13530 return 0; 13531 } 13532 } 13533 if ((c = nextc()) == '=') { 13534 set_yylval_id('%'); 13535 lex_state = EXPR_BEG; 13536 return tOP_ASGN; 13537 } 13538 if (IS_SPCARG(c)) { 13539 goto quotation; 13540 } 13541 switch (lex_state) { 13542 case EXPR_FNAME: case EXPR_DOT: 13543 lex_state = EXPR_ARG; break; 13544 default: 13545 lex_state = EXPR_BEG; break; 13546 } 13547 pushback(c); 13548 warn_balanced("%%", "string literal"); 13549 return '%'; 13550 13551 case '$': 13552 lex_state = EXPR_END; 13553 newtok(); 13554 c = nextc(); 13555 switch (c) { 13556 case '_': /* $_: last read line string */ 13557 c = nextc(); 13558 if (parser_is_identchar()) { 13559 tokadd('$'); 13560 tokadd('_'); 13561 break; 13562 } 13563 pushback(c); 13564 c = '_'; 13565 /* fall through */ 13566 case '~': /* $~: match-data */ 13567 case '*': /* $*: argv */ 13568 case '$': /* $$: pid */ 13569 case '?': /* $?: last status */ 13570 case '!': /* $!: error string */ 13571 case '@': /* $@: error position */ 13572 case '/': /* $/: input record separator */ 13573 case '\\': /* $\: output record separator */ 13574 case ';': /* $;: field separator */ 13575 case ',': /* $,: output field separator */ 13576 case '.': /* $.: last read line number */ 13577 case '=': /* $=: ignorecase */ 13578 case ':': /* $:: load path */ 13579 case '<': /* $<: reading filename */ 13580 case '>': /* $>: default output handle */ 13581 case '\"': /* $": already loaded files */ 13582 tokadd('$'); 13583 tokadd(c); 13584 tokfix(); 13585 set_yylval_name(rb_intern(tok())); 13586 return tGVAR; 13587 13588 case '-': 13589 tokadd('$'); 13590 tokadd(c); 13591 c = nextc(); 13592 if (parser_is_identchar()) { 13593 if (tokadd_mbchar(c) == -1) return 0; 13594 } 13595 else { 13596 pushback(c); 13597 } 13598 gvar: 13599 tokfix(); 13600 set_yylval_name(rb_intern(tok())); 13601 return tGVAR; 13602 13603 case '&': /* $&: last match */ 13604 case '`': /* $`: string before last match */ 13605 case '\'': /* $': string after last match */ 13606 case '+': /* $+: string matches last paren. */ 13607 if (last_state == EXPR_FNAME) { 13608 tokadd('$'); 13609 tokadd(c); 13610 goto gvar; 13611 } 13612 set_yylval_node(NEW_BACK_REF(c)); 13613 return tBACK_REF; 13614 13615 case '1': case '2': case '3': 13616 case '4': case '5': case '6': 13617 case '7': case '8': case '9': 13618 tokadd('$'); 13619 do { 13620 tokadd(c); 13621 c = nextc(); 13622 } while (c != -1 && ISDIGIT(c)); 13623 pushback(c); 13624 if (last_state == EXPR_FNAME) goto gvar; 13625 tokfix(); 13626 set_yylval_node(NEW_NTH_REF(atoi(tok()+1))); 13627 return tNTH_REF; 13628 13629 default: 13630 if (!parser_is_identchar()) { 13631 pushback(c); 13632 return '$'; 13633 } 13634 case '0': 13635 tokadd('$'); 13636 } 13637 break; 13638 13639 case '@': 13640 c = nextc(); 13641 newtok(); 13642 tokadd('@'); 13643 if (c == '@') { 13644 tokadd('@'); 13645 c = nextc(); 13646 } 13647 if (c != -1 && ISDIGIT(c)) { 13648 if (tokidx == 1) { 13649 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c); 13650 } 13651 else { 13652 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c); 13653 } 13654 return 0; 13655 } 13656 if (!parser_is_identchar()) { 13657 pushback(c); 13658 return '@'; 13659 } 13660 break; 13661 13662 case '_': 13663 if (was_bol() && whole_match_p("__END__", 7, 0)) { 13664 ruby__end__seen = 1; 13665 parser->eofp = Qtrue; 13666 #ifndef RIPPER 13667 return -1; 13668 #else 13669 lex_goto_eol(parser); 13670 ripper_dispatch_scan_event(parser, k__END__); 13671 return 0; 13672 #endif 13673 } 13674 newtok(); 13675 break; 13676 13677 default: 13678 if (!parser_is_identchar()) { 13679 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c); 13680 goto retry; 13681 } 13682 13683 newtok(); 13684 break; 13685 } 13686 13687 mb = ENC_CODERANGE_7BIT; 13688 do { 13689 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN; 13690 if (tokadd_mbchar(c) == -1) return 0; 13691 c = nextc(); 13692 } while (parser_is_identchar()); 13693 switch (tok()[0]) { 13694 case '@': case '$': 13695 pushback(c); 13696 break; 13697 default: 13698 if ((c == '!' || c == '?') && !peek('=')) { 13699 tokadd(c); 13700 } 13701 else { 13702 pushback(c); 13703 } 13704 } 13705 tokfix(); 13706 13707 { 13708 int result = 0; 13709 13710 last_state = lex_state; 13711 switch (tok()[0]) { 13712 case '$': 13713 lex_state = EXPR_END; 13714 result = tGVAR; 13715 break; 13716 case '@': 13717 lex_state = EXPR_END; 13718 if (tok()[1] == '@') 13719 result = tCVAR; 13720 else 13721 result = tIVAR; 13722 break; 13723 13724 default: 13725 if (toklast() == '!' || toklast() == '?') { 13726 result = tFID; 13727 } 13728 else { 13729 if (lex_state == EXPR_FNAME) { 13730 if ((c = nextc()) == '=' && !peek('~') && !peek('>') && 13731 (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) { 13732 result = tIDENTIFIER; 13733 tokadd(c); 13734 tokfix(); 13735 } 13736 else { 13737 pushback(c); 13738 } 13739 } 13740 if (result == 0 && ISUPPER(tok()[0])) { 13741 result = tCONSTANT; 13742 } 13743 else { 13744 result = tIDENTIFIER; 13745 } 13746 } 13747 13748 if ((lex_state == EXPR_BEG && !cmd_state) || 13749 IS_ARG()) { 13750 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) { 13751 lex_state = EXPR_BEG; 13752 nextc(); 13753 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb))); 13754 return tLABEL; 13755 } 13756 } 13757 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) { 13758 const struct kwtable *kw; 13759 13760 /* See if it is a reserved word. */ 13761 kw = rb_reserved_word(tok(), toklen()); 13762 if (kw) { 13763 enum lex_state_e state = lex_state; 13764 lex_state = kw->state; 13765 if (state == EXPR_FNAME) { 13766 set_yylval_name(rb_intern(kw->name)); 13767 return kw->id[0]; 13768 } 13769 if (kw->id[0] == keyword_do) { 13770 command_start = TRUE; 13771 if (lpar_beg && lpar_beg == paren_nest) { 13772 lpar_beg = 0; 13773 --paren_nest; 13774 return keyword_do_LAMBDA; 13775 } 13776 if (COND_P()) return keyword_do_cond; 13777 if (CMDARG_P() && state != EXPR_CMDARG) 13778 return keyword_do_block; 13779 if (state == EXPR_ENDARG || state == EXPR_BEG) 13780 return keyword_do_block; 13781 return keyword_do; 13782 } 13783 if (state == EXPR_BEG || state == EXPR_VALUE) 13784 return kw->id[0]; 13785 else { 13786 if (kw->id[0] != kw->id[1]) 13787 lex_state = EXPR_BEG; 13788 return kw->id[1]; 13789 } 13790 } 13791 } 13792 13793 if (IS_BEG() || 13794 lex_state == EXPR_DOT || 13795 IS_ARG()) { 13796 if (cmd_state) { 13797 lex_state = EXPR_CMDARG; 13798 } 13799 else { 13800 lex_state = EXPR_ARG; 13801 } 13802 } 13803 else if (lex_state == EXPR_FNAME) { 13804 lex_state = EXPR_ENDFN; 13805 } 13806 else { 13807 lex_state = EXPR_END; 13808 } 13809 } 13810 { 13811 ID ident = TOK_INTERN(!ENC_SINGLE(mb)); 13812 13813 set_yylval_name(ident); 13814 if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) { 13815 lex_state = EXPR_END; 13816 } 13817 } 13818 return result; 13819 } 13820 } 13821 13822 #if YYPURE 13823 static int 13824 yylex(void *lval, void *p) 13825 #else 13826 yylex(void *p) 13827 #endif 13828 { 13829 struct parser_params *parser = (struct parser_params*)p; 13830 int t; 13831 13832 #if YYPURE 13833 parser->parser_yylval = lval; 13834 parser->parser_yylval->val = Qundef; 13835 #endif 13836 t = parser_yylex(parser); 13837 #ifdef RIPPER 13838 if (!NIL_P(parser->delayed)) { 13839 ripper_dispatch_delayed_token(parser, t); 13840 } 13841 if (t != 0) 13842 ripper_dispatch_scan_event(parser, t); 13843 #endif 13844 13845 return t; 13846 } 13847 13848 #ifndef RIPPER 13849 static NODE* 13850 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2) 13851 { 13852 NODE *n = (rb_node_newnode)(type, a0, a1, a2); 13853 nd_set_line(n, ruby_sourceline); 13854 return n; 13855 } 13856 13857 enum node_type 13858 nodetype(NODE *node) /* for debug */ 13859 { 13860 return (enum node_type)nd_type(node); 13861 } 13862 13863 int 13864 nodeline(NODE *node) 13865 { 13866 return nd_line(node); 13867 } 13868 13869 static NODE* 13870 newline_node(NODE *node) 13871 { 13872 if (node) { 13873 node = remove_begin(node); 13874 node->flags |= NODE_FL_NEWLINE; 13875 } 13876 return node; 13877 } 13878 13879 static void 13880 fixpos(NODE *node, NODE *orig) 13881 { 13882 if (!node) return; 13883 if (!orig) return; 13884 if (orig == (NODE*)1) return; 13885 nd_set_line(node, nd_line(orig)); 13886 } 13887 13888 static void 13889 parser_warning(struct parser_params *parser, NODE *node, const char *mesg) 13890 { 13891 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg); 13892 } 13893 #define parser_warning(node, mesg) parser_warning(parser, node, mesg) 13894 13895 static void 13896 parser_warn(struct parser_params *parser, NODE *node, const char *mesg) 13897 { 13898 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg); 13899 } 13900 #define parser_warn(node, mesg) parser_warn(parser, node, mesg) 13901 13902 static NODE* 13903 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail) 13904 { 13905 NODE *end, *h = head, *nd; 13906 13907 if (tail == 0) return head; 13908 13909 if (h == 0) return tail; 13910 switch (nd_type(h)) { 13911 case NODE_LIT: 13912 case NODE_STR: 13913 case NODE_SELF: 13914 case NODE_TRUE: 13915 case NODE_FALSE: 13916 case NODE_NIL: 13917 parser_warning(h, "unused literal ignored"); 13918 return tail; 13919 default: 13920 h = end = NEW_BLOCK(head); 13921 end->nd_end = end; 13922 fixpos(end, head); 13923 head = end; 13924 break; 13925 case NODE_BLOCK: 13926 end = h->nd_end; 13927 break; 13928 } 13929 13930 nd = end->nd_head; 13931 switch (nd_type(nd)) { 13932 case NODE_RETURN: 13933 case NODE_BREAK: 13934 case NODE_NEXT: 13935 case NODE_REDO: 13936 case NODE_RETRY: 13937 if (RTEST(ruby_verbose)) { 13938 parser_warning(nd, "statement not reached"); 13939 } 13940 break; 13941 13942 default: 13943 break; 13944 } 13945 13946 if (nd_type(tail) != NODE_BLOCK) { 13947 tail = NEW_BLOCK(tail); 13948 tail->nd_end = tail; 13949 } 13950 end->nd_next = tail; 13951 h->nd_end = tail->nd_end; 13952 return head; 13953 } 13954 13955 /* append item to the list */ 13956 static NODE* 13957 list_append_gen(struct parser_params *parser, NODE *list, NODE *item) 13958 { 13959 NODE *last; 13960 13961 if (list == 0) return NEW_LIST(item); 13962 if (list->nd_next) { 13963 last = list->nd_next->nd_end; 13964 } 13965 else { 13966 last = list; 13967 } 13968 13969 list->nd_alen += 1; 13970 last->nd_next = NEW_LIST(item); 13971 list->nd_next->nd_end = last->nd_next; 13972 return list; 13973 } 13974 13975 /* concat two lists */ 13976 static NODE* 13977 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 13978 { 13979 NODE *last; 13980 13981 if (head->nd_next) { 13982 last = head->nd_next->nd_end; 13983 } 13984 else { 13985 last = head; 13986 } 13987 13988 head->nd_alen += tail->nd_alen; 13989 last->nd_next = tail; 13990 if (tail->nd_next) { 13991 head->nd_next->nd_end = tail->nd_next->nd_end; 13992 } 13993 else { 13994 head->nd_next->nd_end = tail; 13995 } 13996 13997 return head; 13998 } 13999 14000 static int 14001 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail) 14002 { 14003 if (NIL_P(tail)) return 1; 14004 if (!rb_enc_compatible(head, tail)) { 14005 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)", 14006 rb_enc_name(rb_enc_get(head)), 14007 rb_enc_name(rb_enc_get(tail))); 14008 rb_str_resize(head, 0); 14009 rb_str_resize(tail, 0); 14010 return 0; 14011 } 14012 rb_str_buf_append(head, tail); 14013 return 1; 14014 } 14015 14016 /* concat two string literals */ 14017 static NODE * 14018 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 14019 { 14020 enum node_type htype; 14021 14022 if (!head) return tail; 14023 if (!tail) return head; 14024 14025 htype = nd_type(head); 14026 if (htype == NODE_EVSTR) { 14027 NODE *node = NEW_DSTR(Qnil); 14028 head = list_append(node, head); 14029 } 14030 switch (nd_type(tail)) { 14031 case NODE_STR: 14032 if (htype == NODE_STR) { 14033 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) { 14034 error: 14035 rb_gc_force_recycle((VALUE)head); 14036 rb_gc_force_recycle((VALUE)tail); 14037 return 0; 14038 } 14039 rb_gc_force_recycle((VALUE)tail); 14040 } 14041 else { 14042 list_append(head, tail); 14043 } 14044 break; 14045 14046 case NODE_DSTR: 14047 if (htype == NODE_STR) { 14048 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) 14049 goto error; 14050 tail->nd_lit = head->nd_lit; 14051 rb_gc_force_recycle((VALUE)head); 14052 head = tail; 14053 } 14054 else if (NIL_P(tail->nd_lit)) { 14055 head->nd_alen += tail->nd_alen - 1; 14056 head->nd_next->nd_end->nd_next = tail->nd_next; 14057 head->nd_next->nd_end = tail->nd_next->nd_end; 14058 rb_gc_force_recycle((VALUE)tail); 14059 } 14060 else { 14061 nd_set_type(tail, NODE_ARRAY); 14062 tail->nd_head = NEW_STR(tail->nd_lit); 14063 list_concat(head, tail); 14064 } 14065 break; 14066 14067 case NODE_EVSTR: 14068 if (htype == NODE_STR) { 14069 nd_set_type(head, NODE_DSTR); 14070 head->nd_alen = 1; 14071 } 14072 list_append(head, tail); 14073 break; 14074 } 14075 return head; 14076 } 14077 14078 static NODE * 14079 evstr2dstr_gen(struct parser_params *parser, NODE *node) 14080 { 14081 if (nd_type(node) == NODE_EVSTR) { 14082 node = list_append(NEW_DSTR(Qnil), node); 14083 } 14084 return node; 14085 } 14086 14087 static NODE * 14088 new_evstr_gen(struct parser_params *parser, NODE *node) 14089 { 14090 NODE *head = node; 14091 14092 if (node) { 14093 switch (nd_type(node)) { 14094 case NODE_STR: case NODE_DSTR: case NODE_EVSTR: 14095 return node; 14096 } 14097 } 14098 return NEW_EVSTR(head); 14099 } 14100 14101 static NODE * 14102 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1) 14103 { 14104 value_expr(recv); 14105 value_expr(arg1); 14106 return NEW_CALL(recv, id, NEW_LIST(arg1)); 14107 } 14108 14109 static NODE * 14110 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id) 14111 { 14112 value_expr(recv); 14113 return NEW_CALL(recv, id, 0); 14114 } 14115 14116 static NODE* 14117 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14118 { 14119 value_expr(node1); 14120 value_expr(node2); 14121 if (node1) { 14122 switch (nd_type(node1)) { 14123 case NODE_DREGX: 14124 case NODE_DREGX_ONCE: 14125 return NEW_MATCH2(node1, node2); 14126 14127 case NODE_LIT: 14128 if (TYPE(node1->nd_lit) == T_REGEXP) { 14129 return NEW_MATCH2(node1, node2); 14130 } 14131 } 14132 } 14133 14134 if (node2) { 14135 switch (nd_type(node2)) { 14136 case NODE_DREGX: 14137 case NODE_DREGX_ONCE: 14138 return NEW_MATCH3(node2, node1); 14139 14140 case NODE_LIT: 14141 if (TYPE(node2->nd_lit) == T_REGEXP) { 14142 return NEW_MATCH3(node2, node1); 14143 } 14144 } 14145 } 14146 14147 return NEW_CALL(node1, tMATCH, NEW_LIST(node2)); 14148 } 14149 14150 static NODE* 14151 gettable_gen(struct parser_params *parser, ID id) 14152 { 14153 if (id == keyword_self) { 14154 return NEW_SELF(); 14155 } 14156 else if (id == keyword_nil) { 14157 return NEW_NIL(); 14158 } 14159 else if (id == keyword_true) { 14160 return NEW_TRUE(); 14161 } 14162 else if (id == keyword_false) { 14163 return NEW_FALSE(); 14164 } 14165 else if (id == keyword__FILE__) { 14166 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile), 14167 rb_filesystem_encoding())); 14168 } 14169 else if (id == keyword__LINE__) { 14170 return NEW_LIT(INT2FIX(ruby_sourceline)); 14171 } 14172 else if (id == keyword__ENCODING__) { 14173 return NEW_LIT(rb_enc_from_encoding(parser->enc)); 14174 } 14175 else if (is_local_id(id)) { 14176 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id); 14177 if (local_id(id)) return NEW_LVAR(id); 14178 /* method call without arguments */ 14179 return NEW_VCALL(id); 14180 } 14181 else if (is_global_id(id)) { 14182 return NEW_GVAR(id); 14183 } 14184 else if (is_instance_id(id)) { 14185 return NEW_IVAR(id); 14186 } 14187 else if (is_const_id(id)) { 14188 return NEW_CONST(id); 14189 } 14190 else if (is_class_id(id)) { 14191 return NEW_CVAR(id); 14192 } 14193 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); 14194 return 0; 14195 } 14196 #endif /* !RIPPER */ 14197 14198 #ifdef RIPPER 14199 static VALUE 14200 assignable_gen(struct parser_params *parser, VALUE lhs) 14201 #else 14202 static NODE* 14203 assignable_gen(struct parser_params *parser, ID id, NODE *val) 14204 #endif 14205 { 14206 #ifdef RIPPER 14207 ID id = get_id(lhs); 14208 # define assignable_result(x) get_value(lhs) 14209 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs) 14210 #else 14211 # define assignable_result(x) x 14212 #endif 14213 if (!id) return assignable_result(0); 14214 if (id == keyword_self) { 14215 yyerror("Can't change the value of self"); 14216 } 14217 else if (id == keyword_nil) { 14218 yyerror("Can't assign to nil"); 14219 } 14220 else if (id == keyword_true) { 14221 yyerror("Can't assign to true"); 14222 } 14223 else if (id == keyword_false) { 14224 yyerror("Can't assign to false"); 14225 } 14226 else if (id == keyword__FILE__) { 14227 yyerror("Can't assign to __FILE__"); 14228 } 14229 else if (id == keyword__LINE__) { 14230 yyerror("Can't assign to __LINE__"); 14231 } 14232 else if (id == keyword__ENCODING__) { 14233 yyerror("Can't assign to __ENCODING__"); 14234 } 14235 else if (is_local_id(id)) { 14236 if (dyna_in_block()) { 14237 if (dvar_curr(id)) { 14238 return assignable_result(NEW_DASGN_CURR(id, val)); 14239 } 14240 else if (dvar_defined(id)) { 14241 return assignable_result(NEW_DASGN(id, val)); 14242 } 14243 else if (local_id(id)) { 14244 return assignable_result(NEW_LASGN(id, val)); 14245 } 14246 else { 14247 dyna_var(id); 14248 return assignable_result(NEW_DASGN_CURR(id, val)); 14249 } 14250 } 14251 else { 14252 if (!local_id(id)) { 14253 local_var(id); 14254 } 14255 return assignable_result(NEW_LASGN(id, val)); 14256 } 14257 } 14258 else if (is_global_id(id)) { 14259 return assignable_result(NEW_GASGN(id, val)); 14260 } 14261 else if (is_instance_id(id)) { 14262 return assignable_result(NEW_IASGN(id, val)); 14263 } 14264 else if (is_const_id(id)) { 14265 if (!in_def && !in_single) 14266 return assignable_result(NEW_CDECL(id, val, 0)); 14267 yyerror("dynamic constant assignment"); 14268 } 14269 else if (is_class_id(id)) { 14270 return assignable_result(NEW_CVASGN(id, val)); 14271 } 14272 else { 14273 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id)); 14274 } 14275 return assignable_result(0); 14276 #undef assignable_result 14277 #undef parser_yyerror 14278 } 14279 14280 static ID 14281 shadowing_lvar_gen(struct parser_params *parser, ID name) 14282 { 14283 ID uscore; 14284 14285 CONST_ID(uscore, "_"); 14286 if (uscore == name) return name; 14287 if (dyna_in_block()) { 14288 if (dvar_curr(name)) { 14289 yyerror("duplicated argument name"); 14290 } 14291 else if (dvar_defined(name) || local_id(name)) { 14292 rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); 14293 vtable_add(lvtbl->vars, name); 14294 } 14295 } 14296 else { 14297 if (local_id(name)) { 14298 yyerror("duplicated argument name"); 14299 } 14300 } 14301 return name; 14302 } 14303 14304 static void 14305 new_bv_gen(struct parser_params *parser, ID name) 14306 { 14307 if (!name) return; 14308 if (!is_local_id(name)) { 14309 compile_error(PARSER_ARG "invalid local variable - %s", 14310 rb_id2name(name)); 14311 return; 14312 } 14313 shadowing_lvar(name); 14314 dyna_var(name); 14315 } 14316 14317 #ifndef RIPPER 14318 static NODE * 14319 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx) 14320 { 14321 if (recv && nd_type(recv) == NODE_SELF) 14322 recv = (NODE *)1; 14323 return NEW_ATTRASGN(recv, tASET, idx); 14324 } 14325 14326 static void 14327 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14328 { 14329 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) { 14330 compile_error(PARSER_ARG "both block arg and actual block given"); 14331 } 14332 } 14333 14334 ID 14335 rb_id_attrset(ID id) 14336 { 14337 id &= ~ID_SCOPE_MASK; 14338 id |= ID_ATTRSET; 14339 return id; 14340 } 14341 14342 static NODE * 14343 attrset_gen(struct parser_params *parser, NODE *recv, ID id) 14344 { 14345 if (recv && nd_type(recv) == NODE_SELF) 14346 recv = (NODE *)1; 14347 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0); 14348 } 14349 14350 static void 14351 rb_backref_error_gen(struct parser_params *parser, NODE *node) 14352 { 14353 switch (nd_type(node)) { 14354 case NODE_NTH_REF: 14355 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth); 14356 break; 14357 case NODE_BACK_REF: 14358 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth); 14359 break; 14360 } 14361 } 14362 14363 static NODE * 14364 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14365 { 14366 if (!node2) return node1; 14367 switch (nd_type(node1)) { 14368 case NODE_BLOCK_PASS: 14369 if (node1->nd_head) 14370 node1->nd_head = arg_concat(node1->nd_head, node2); 14371 else 14372 node1->nd_head = NEW_LIST(node2); 14373 return node1; 14374 case NODE_ARGSPUSH: 14375 if (nd_type(node2) != NODE_ARRAY) break; 14376 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2); 14377 nd_set_type(node1, NODE_ARGSCAT); 14378 return node1; 14379 case NODE_ARGSCAT: 14380 if (nd_type(node2) != NODE_ARRAY || 14381 nd_type(node1->nd_body) != NODE_ARRAY) break; 14382 node1->nd_body = list_concat(node1->nd_body, node2); 14383 return node1; 14384 } 14385 return NEW_ARGSCAT(node1, node2); 14386 } 14387 14388 static NODE * 14389 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14390 { 14391 if (!node1) return NEW_LIST(node2); 14392 switch (nd_type(node1)) { 14393 case NODE_ARRAY: 14394 return list_append(node1, node2); 14395 case NODE_BLOCK_PASS: 14396 node1->nd_head = arg_append(node1->nd_head, node2); 14397 return node1; 14398 case NODE_ARGSPUSH: 14399 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2); 14400 nd_set_type(node1, NODE_ARGSCAT); 14401 return node1; 14402 } 14403 return NEW_ARGSPUSH(node1, node2); 14404 } 14405 14406 static NODE * 14407 splat_array(NODE* node) 14408 { 14409 if (nd_type(node) == NODE_SPLAT) node = node->nd_head; 14410 if (nd_type(node) == NODE_ARRAY) return node; 14411 return 0; 14412 } 14413 14414 static NODE * 14415 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs) 14416 { 14417 if (!lhs) return 0; 14418 14419 switch (nd_type(lhs)) { 14420 case NODE_GASGN: 14421 case NODE_IASGN: 14422 case NODE_IASGN2: 14423 case NODE_LASGN: 14424 case NODE_DASGN: 14425 case NODE_DASGN_CURR: 14426 case NODE_MASGN: 14427 case NODE_CDECL: 14428 case NODE_CVASGN: 14429 lhs->nd_value = rhs; 14430 break; 14431 14432 case NODE_ATTRASGN: 14433 case NODE_CALL: 14434 lhs->nd_args = arg_append(lhs->nd_args, rhs); 14435 break; 14436 14437 default: 14438 /* should not happen */ 14439 break; 14440 } 14441 14442 return lhs; 14443 } 14444 14445 static int 14446 value_expr_gen(struct parser_params *parser, NODE *node) 14447 { 14448 int cond = 0; 14449 14450 if (!node) { 14451 rb_warning0("empty expression"); 14452 } 14453 while (node) { 14454 switch (nd_type(node)) { 14455 case NODE_DEFN: 14456 case NODE_DEFS: 14457 parser_warning(node, "void value expression"); 14458 return FALSE; 14459 14460 case NODE_RETURN: 14461 case NODE_BREAK: 14462 case NODE_NEXT: 14463 case NODE_REDO: 14464 case NODE_RETRY: 14465 if (!cond) yyerror("void value expression"); 14466 /* or "control never reach"? */ 14467 return FALSE; 14468 14469 case NODE_BLOCK: 14470 while (node->nd_next) { 14471 node = node->nd_next; 14472 } 14473 node = node->nd_head; 14474 break; 14475 14476 case NODE_BEGIN: 14477 node = node->nd_body; 14478 break; 14479 14480 case NODE_IF: 14481 if (!node->nd_body) { 14482 node = node->nd_else; 14483 break; 14484 } 14485 else if (!node->nd_else) { 14486 node = node->nd_body; 14487 break; 14488 } 14489 if (!value_expr(node->nd_body)) return FALSE; 14490 node = node->nd_else; 14491 break; 14492 14493 case NODE_AND: 14494 case NODE_OR: 14495 cond = 1; 14496 node = node->nd_2nd; 14497 break; 14498 14499 default: 14500 return TRUE; 14501 } 14502 } 14503 14504 return TRUE; 14505 } 14506 14507 static void 14508 void_expr_gen(struct parser_params *parser, NODE *node) 14509 { 14510 const char *useless = 0; 14511 14512 if (!RTEST(ruby_verbose)) return; 14513 14514 if (!node) return; 14515 switch (nd_type(node)) { 14516 case NODE_CALL: 14517 switch (node->nd_mid) { 14518 case '+': 14519 case '-': 14520 case '*': 14521 case '/': 14522 case '%': 14523 case tPOW: 14524 case tUPLUS: 14525 case tUMINUS: 14526 case '|': 14527 case '^': 14528 case '&': 14529 case tCMP: 14530 case '>': 14531 case tGEQ: 14532 case '<': 14533 case tLEQ: 14534 case tEQ: 14535 case tNEQ: 14536 useless = rb_id2name(node->nd_mid); 14537 break; 14538 } 14539 break; 14540 14541 case NODE_LVAR: 14542 case NODE_DVAR: 14543 case NODE_GVAR: 14544 case NODE_IVAR: 14545 case NODE_CVAR: 14546 case NODE_NTH_REF: 14547 case NODE_BACK_REF: 14548 useless = "a variable"; 14549 break; 14550 case NODE_CONST: 14551 useless = "a constant"; 14552 break; 14553 case NODE_LIT: 14554 case NODE_STR: 14555 case NODE_DSTR: 14556 case NODE_DREGX: 14557 case NODE_DREGX_ONCE: 14558 useless = "a literal"; 14559 break; 14560 case NODE_COLON2: 14561 case NODE_COLON3: 14562 useless = "::"; 14563 break; 14564 case NODE_DOT2: 14565 useless = ".."; 14566 break; 14567 case NODE_DOT3: 14568 useless = "..."; 14569 break; 14570 case NODE_SELF: 14571 useless = "self"; 14572 break; 14573 case NODE_NIL: 14574 useless = "nil"; 14575 break; 14576 case NODE_TRUE: 14577 useless = "true"; 14578 break; 14579 case NODE_FALSE: 14580 useless = "false"; 14581 break; 14582 case NODE_DEFINED: 14583 useless = "defined?"; 14584 break; 14585 } 14586 14587 if (useless) { 14588 int line = ruby_sourceline; 14589 14590 ruby_sourceline = nd_line(node); 14591 rb_warnS("useless use of %s in void context", useless); 14592 ruby_sourceline = line; 14593 } 14594 } 14595 14596 static void 14597 void_stmts_gen(struct parser_params *parser, NODE *node) 14598 { 14599 if (!RTEST(ruby_verbose)) return; 14600 if (!node) return; 14601 if (nd_type(node) != NODE_BLOCK) return; 14602 14603 for (;;) { 14604 if (!node->nd_next) return; 14605 void_expr0(node->nd_head); 14606 node = node->nd_next; 14607 } 14608 } 14609 14610 static NODE * 14611 remove_begin(NODE *node) 14612 { 14613 NODE **n = &node, *n1 = node; 14614 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) { 14615 *n = n1 = n1->nd_body; 14616 } 14617 return node; 14618 } 14619 14620 static void 14621 reduce_nodes_gen(struct parser_params *parser, NODE **body) 14622 { 14623 NODE *node = *body; 14624 14625 if (!node) { 14626 *body = NEW_NIL(); 14627 return; 14628 } 14629 #define subnodes(n1, n2) \ 14630 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \ 14631 (!node->n2) ? (body = &node->n1, 1) : \ 14632 (reduce_nodes(&node->n1), body = &node->n2, 1)) 14633 14634 while (node) { 14635 int newline = (int)(node->flags & NODE_FL_NEWLINE); 14636 switch (nd_type(node)) { 14637 end: 14638 case NODE_NIL: 14639 *body = 0; 14640 return; 14641 case NODE_RETURN: 14642 *body = node = node->nd_stts; 14643 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14644 continue; 14645 case NODE_BEGIN: 14646 *body = node = node->nd_body; 14647 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14648 continue; 14649 case NODE_BLOCK: 14650 body = &node->nd_end->nd_head; 14651 break; 14652 case NODE_IF: 14653 if (subnodes(nd_body, nd_else)) break; 14654 return; 14655 case NODE_CASE: 14656 body = &node->nd_body; 14657 break; 14658 case NODE_WHEN: 14659 if (!subnodes(nd_body, nd_next)) goto end; 14660 break; 14661 case NODE_ENSURE: 14662 if (!subnodes(nd_head, nd_resq)) goto end; 14663 break; 14664 case NODE_RESCUE: 14665 if (!subnodes(nd_head, nd_resq)) goto end; 14666 break; 14667 default: 14668 return; 14669 } 14670 node = *body; 14671 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14672 } 14673 14674 #undef subnodes 14675 } 14676 14677 static int 14678 assign_in_cond(struct parser_params *parser, NODE *node) 14679 { 14680 switch (nd_type(node)) { 14681 case NODE_MASGN: 14682 yyerror("multiple assignment in conditional"); 14683 return 1; 14684 14685 case NODE_LASGN: 14686 case NODE_DASGN: 14687 case NODE_DASGN_CURR: 14688 case NODE_GASGN: 14689 case NODE_IASGN: 14690 break; 14691 14692 default: 14693 return 0; 14694 } 14695 14696 switch (nd_type(node->nd_value)) { 14697 case NODE_LIT: 14698 case NODE_STR: 14699 case NODE_NIL: 14700 case NODE_TRUE: 14701 case NODE_FALSE: 14702 /* reports always */ 14703 parser_warn(node->nd_value, "found = in conditional, should be =="); 14704 return 1; 14705 14706 case NODE_DSTR: 14707 case NODE_XSTR: 14708 case NODE_DXSTR: 14709 case NODE_EVSTR: 14710 case NODE_DREGX: 14711 default: 14712 break; 14713 } 14714 return 1; 14715 } 14716 14717 static void 14718 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 14719 { 14720 if (!e_option_supplied(parser)) parser_warn(node, str); 14721 } 14722 14723 static void 14724 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 14725 { 14726 if (!e_option_supplied(parser)) parser_warning(node, str); 14727 } 14728 14729 static void 14730 fixup_nodes(NODE **rootnode) 14731 { 14732 NODE *node, *next, *head; 14733 14734 for (node = *rootnode; node; node = next) { 14735 enum node_type type; 14736 VALUE val; 14737 14738 next = node->nd_next; 14739 head = node->nd_head; 14740 rb_gc_force_recycle((VALUE)node); 14741 *rootnode = next; 14742 switch (type = nd_type(head)) { 14743 case NODE_DOT2: 14744 case NODE_DOT3: 14745 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit, 14746 type == NODE_DOT3); 14747 rb_gc_force_recycle((VALUE)head->nd_beg); 14748 rb_gc_force_recycle((VALUE)head->nd_end); 14749 nd_set_type(head, NODE_LIT); 14750 head->nd_lit = val; 14751 break; 14752 default: 14753 break; 14754 } 14755 } 14756 } 14757 14758 static NODE *cond0(struct parser_params*,NODE*); 14759 14760 static NODE* 14761 range_op(struct parser_params *parser, NODE *node) 14762 { 14763 enum node_type type; 14764 14765 if (node == 0) return 0; 14766 14767 type = nd_type(node); 14768 value_expr(node); 14769 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) { 14770 warn_unless_e_option(parser, node, "integer literal in conditional range"); 14771 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$.")))); 14772 } 14773 return cond0(parser, node); 14774 } 14775 14776 static int 14777 literal_node(NODE *node) 14778 { 14779 if (!node) return 1; /* same as NODE_NIL */ 14780 switch (nd_type(node)) { 14781 case NODE_LIT: 14782 case NODE_STR: 14783 case NODE_DSTR: 14784 case NODE_EVSTR: 14785 case NODE_DREGX: 14786 case NODE_DREGX_ONCE: 14787 case NODE_DSYM: 14788 return 2; 14789 case NODE_TRUE: 14790 case NODE_FALSE: 14791 case NODE_NIL: 14792 return 1; 14793 } 14794 return 0; 14795 } 14796 14797 static NODE* 14798 cond0(struct parser_params *parser, NODE *node) 14799 { 14800 if (node == 0) return 0; 14801 assign_in_cond(parser, node); 14802 14803 switch (nd_type(node)) { 14804 case NODE_DSTR: 14805 case NODE_EVSTR: 14806 case NODE_STR: 14807 rb_warn0("string literal in condition"); 14808 break; 14809 14810 case NODE_DREGX: 14811 case NODE_DREGX_ONCE: 14812 warning_unless_e_option(parser, node, "regex literal in condition"); 14813 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_"))); 14814 14815 case NODE_AND: 14816 case NODE_OR: 14817 node->nd_1st = cond0(parser, node->nd_1st); 14818 node->nd_2nd = cond0(parser, node->nd_2nd); 14819 break; 14820 14821 case NODE_DOT2: 14822 case NODE_DOT3: 14823 node->nd_beg = range_op(parser, node->nd_beg); 14824 node->nd_end = range_op(parser, node->nd_end); 14825 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2); 14826 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3); 14827 if (!e_option_supplied(parser)) { 14828 int b = literal_node(node->nd_beg); 14829 int e = literal_node(node->nd_end); 14830 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) { 14831 parser_warn(node, "range literal in condition"); 14832 } 14833 } 14834 break; 14835 14836 case NODE_DSYM: 14837 parser_warning(node, "literal in condition"); 14838 break; 14839 14840 case NODE_LIT: 14841 if (TYPE(node->nd_lit) == T_REGEXP) { 14842 warn_unless_e_option(parser, node, "regex literal in condition"); 14843 nd_set_type(node, NODE_MATCH); 14844 } 14845 else { 14846 parser_warning(node, "literal in condition"); 14847 } 14848 default: 14849 break; 14850 } 14851 return node; 14852 } 14853 14854 static NODE* 14855 cond_gen(struct parser_params *parser, NODE *node) 14856 { 14857 if (node == 0) return 0; 14858 return cond0(parser, node); 14859 } 14860 14861 static NODE* 14862 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right) 14863 { 14864 value_expr(left); 14865 if (left && (enum node_type)nd_type(left) == type) { 14866 NODE *node = left, *second; 14867 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) { 14868 node = second; 14869 } 14870 node->nd_2nd = NEW_NODE(type, second, right, 0); 14871 return left; 14872 } 14873 return NEW_NODE(type, left, right, 0); 14874 } 14875 14876 static void 14877 no_blockarg(struct parser_params *parser, NODE *node) 14878 { 14879 if (node && nd_type(node) == NODE_BLOCK_PASS) { 14880 compile_error(PARSER_ARG "block argument should not be given"); 14881 } 14882 } 14883 14884 static NODE * 14885 ret_args_gen(struct parser_params *parser, NODE *node) 14886 { 14887 if (node) { 14888 no_blockarg(parser, node); 14889 if (nd_type(node) == NODE_ARRAY) { 14890 if (node->nd_next == 0) { 14891 node = node->nd_head; 14892 } 14893 else { 14894 nd_set_type(node, NODE_VALUES); 14895 } 14896 } 14897 } 14898 return node; 14899 } 14900 14901 static NODE * 14902 new_yield_gen(struct parser_params *parser, NODE *node) 14903 { 14904 long state = Qtrue; 14905 14906 if (node) { 14907 no_blockarg(parser, node); 14908 if (node && nd_type(node) == NODE_SPLAT) { 14909 state = Qtrue; 14910 } 14911 } 14912 else { 14913 state = Qfalse; 14914 } 14915 return NEW_YIELD(node, state); 14916 } 14917 14918 static NODE* 14919 negate_lit(NODE *node) 14920 { 14921 switch (TYPE(node->nd_lit)) { 14922 case T_FIXNUM: 14923 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit)); 14924 break; 14925 case T_BIGNUM: 14926 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0); 14927 break; 14928 case T_FLOAT: 14929 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit); 14930 break; 14931 default: 14932 break; 14933 } 14934 return node; 14935 } 14936 14937 static NODE * 14938 arg_blk_pass(NODE *node1, NODE *node2) 14939 { 14940 if (node2) { 14941 node2->nd_head = node1; 14942 return node2; 14943 } 14944 return node1; 14945 } 14946 14947 static NODE* 14948 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b) 14949 { 14950 int saved_line = ruby_sourceline; 14951 NODE *node; 14952 NODE *i1, *i2 = 0; 14953 14954 node = NEW_ARGS(m ? m->nd_plen : 0, o); 14955 i1 = m ? m->nd_next : 0; 14956 node->nd_next = NEW_ARGS_AUX(r, b); 14957 14958 if (p) { 14959 i2 = p->nd_next; 14960 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen); 14961 } 14962 else if (i1) { 14963 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0); 14964 } 14965 if (i1 || i2) { 14966 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0); 14967 } 14968 ruby_sourceline = saved_line; 14969 return node; 14970 } 14971 #endif /* !RIPPER */ 14972 14973 static void 14974 local_push_gen(struct parser_params *parser, int inherit_dvars) 14975 { 14976 struct local_vars *local; 14977 14978 local = ALLOC(struct local_vars); 14979 local->prev = lvtbl; 14980 local->args = vtable_alloc(0); 14981 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE); 14982 lvtbl = local; 14983 } 14984 14985 static void 14986 local_pop_gen(struct parser_params *parser) 14987 { 14988 struct local_vars *local = lvtbl->prev; 14989 vtable_free(lvtbl->args); 14990 vtable_free(lvtbl->vars); 14991 xfree(lvtbl); 14992 lvtbl = local; 14993 } 14994 14995 #ifndef RIPPER 14996 static ID* 14997 vtable_tblcpy(ID *buf, const struct vtable *src) 14998 { 14999 int i, cnt = vtable_size(src); 15000 15001 if (cnt > 0) { 15002 buf[0] = cnt; 15003 for (i = 0; i < cnt; i++) { 15004 buf[i] = src->tbl[i]; 15005 } 15006 return buf; 15007 } 15008 return 0; 15009 } 15010 15011 static ID* 15012 local_tbl_gen(struct parser_params *parser) 15013 { 15014 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars); 15015 ID *buf; 15016 15017 if (cnt <= 0) return 0; 15018 buf = ALLOC_N(ID, cnt + 1); 15019 vtable_tblcpy(buf+1, lvtbl->args); 15020 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars); 15021 buf[0] = cnt; 15022 return buf; 15023 } 15024 #endif 15025 15026 static int 15027 arg_var_gen(struct parser_params *parser, ID id) 15028 { 15029 vtable_add(lvtbl->args, id); 15030 return vtable_size(lvtbl->args) - 1; 15031 } 15032 15033 static int 15034 local_var_gen(struct parser_params *parser, ID id) 15035 { 15036 vtable_add(lvtbl->vars, id); 15037 return vtable_size(lvtbl->vars) - 1; 15038 } 15039 15040 static int 15041 local_id_gen(struct parser_params *parser, ID id) 15042 { 15043 struct vtable *vars, *args; 15044 15045 vars = lvtbl->vars; 15046 args = lvtbl->args; 15047 15048 while (vars && POINTER_P(vars->prev)) { 15049 vars = vars->prev; 15050 args = args->prev; 15051 } 15052 15053 if (vars && vars->prev == DVARS_INHERIT) { 15054 return rb_local_defined(id); 15055 } 15056 else { 15057 return (vtable_included(args, id) || 15058 vtable_included(vars, id)); 15059 } 15060 } 15061 15062 static const struct vtable * 15063 dyna_push_gen(struct parser_params *parser) 15064 { 15065 lvtbl->args = vtable_alloc(lvtbl->args); 15066 lvtbl->vars = vtable_alloc(lvtbl->vars); 15067 return lvtbl->args; 15068 } 15069 15070 static void 15071 dyna_pop_1(struct parser_params *parser) 15072 { 15073 struct vtable *tmp; 15074 15075 tmp = lvtbl->args; 15076 lvtbl->args = lvtbl->args->prev; 15077 vtable_free(tmp); 15078 tmp = lvtbl->vars; 15079 lvtbl->vars = lvtbl->vars->prev; 15080 vtable_free(tmp); 15081 } 15082 15083 static void 15084 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs) 15085 { 15086 while (lvtbl->args != lvargs) { 15087 dyna_pop_1(parser); 15088 if (!lvtbl->args) { 15089 struct local_vars *local = lvtbl->prev; 15090 xfree(lvtbl); 15091 lvtbl = local; 15092 } 15093 } 15094 dyna_pop_1(parser); 15095 } 15096 15097 static int 15098 dyna_in_block_gen(struct parser_params *parser) 15099 { 15100 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE; 15101 } 15102 15103 static int 15104 dvar_defined_gen(struct parser_params *parser, ID id) 15105 { 15106 struct vtable *vars, *args; 15107 15108 args = lvtbl->args; 15109 vars = lvtbl->vars; 15110 15111 while (POINTER_P(vars)) { 15112 if (vtable_included(args, id)) { 15113 return 1; 15114 } 15115 if (vtable_included(vars, id)) { 15116 return 1; 15117 } 15118 args = args->prev; 15119 vars = vars->prev; 15120 } 15121 15122 if (vars == DVARS_INHERIT) { 15123 return rb_dvar_defined(id); 15124 } 15125 15126 return 0; 15127 } 15128 15129 static int 15130 dvar_curr_gen(struct parser_params *parser, ID id) 15131 { 15132 return (vtable_included(lvtbl->args, id) || 15133 vtable_included(lvtbl->vars, id)); 15134 } 15135 15136 #ifndef RIPPER 15137 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline); 15138 VALUE rb_reg_check_preprocess(VALUE); 15139 15140 static void 15141 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options) 15142 { 15143 int c = RE_OPTION_ENCODING_IDX(options); 15144 15145 if (c) { 15146 int opt, idx; 15147 rb_char_to_option_kcode(c, &opt, &idx); 15148 if (idx != ENCODING_GET(str) && 15149 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15150 goto error; 15151 } 15152 ENCODING_SET(str, idx); 15153 } 15154 else if (RE_OPTION_ENCODING_NONE(options)) { 15155 if (!ENCODING_IS_ASCII8BIT(str) && 15156 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15157 c = 'n'; 15158 goto error; 15159 } 15160 rb_enc_associate(str, rb_ascii8bit_encoding()); 15161 } 15162 else if (parser->enc == rb_usascii_encoding()) { 15163 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15164 /* raise in re.c */ 15165 rb_enc_associate(str, rb_usascii_encoding()); 15166 } 15167 else { 15168 rb_enc_associate(str, rb_ascii8bit_encoding()); 15169 } 15170 } 15171 return; 15172 15173 error: 15174 compile_error(PARSER_ARG 15175 "regexp encoding option '%c' differs from source encoding '%s'", 15176 c, rb_enc_name(rb_enc_get(str))); 15177 } 15178 15179 static int 15180 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options) 15181 { 15182 VALUE err; 15183 reg_fragment_setenc(str, options); 15184 err = rb_reg_check_preprocess(str); 15185 if (err != Qnil) { 15186 err = rb_obj_as_string(err); 15187 compile_error(PARSER_ARG "%s", RSTRING_PTR(err)); 15188 RB_GC_GUARD(err); 15189 return 0; 15190 } 15191 return 1; 15192 } 15193 15194 typedef struct { 15195 struct parser_params* parser; 15196 rb_encoding *enc; 15197 NODE *succ_block; 15198 NODE *fail_block; 15199 int num; 15200 } reg_named_capture_assign_t; 15201 15202 static int 15203 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, 15204 int back_num, int *back_refs, OnigRegex regex, void *arg0) 15205 { 15206 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0; 15207 struct parser_params* parser = arg->parser; 15208 rb_encoding *enc = arg->enc; 15209 long len = name_end - name; 15210 const char *s = (const char *)name; 15211 ID var; 15212 15213 arg->num++; 15214 15215 if (arg->succ_block == 0) { 15216 arg->succ_block = NEW_BEGIN(0); 15217 arg->fail_block = NEW_BEGIN(0); 15218 } 15219 15220 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) || 15221 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) || 15222 !rb_enc_symname2_p(s, len, enc)) { 15223 return ST_CONTINUE; 15224 } 15225 var = rb_intern3(s, len, enc); 15226 if (dvar_defined(var) || local_id(var)) { 15227 rb_warningS("named capture conflicts a local variable - %s", 15228 rb_id2name(var)); 15229 } 15230 arg->succ_block = block_append(arg->succ_block, 15231 newline_node(node_assign(assignable(var,0), 15232 NEW_CALL( 15233 gettable(rb_intern("$~")), 15234 idAREF, 15235 NEW_LIST(NEW_LIT(ID2SYM(var)))) 15236 ))); 15237 arg->fail_block = block_append(arg->fail_block, 15238 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil)))); 15239 return ST_CONTINUE; 15240 } 15241 15242 static NODE * 15243 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match) 15244 { 15245 reg_named_capture_assign_t arg; 15246 15247 arg.parser = parser; 15248 arg.enc = rb_enc_get(regexp); 15249 arg.succ_block = 0; 15250 arg.fail_block = 0; 15251 arg.num = 0; 15252 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg); 15253 15254 if (arg.num == 0) 15255 return match; 15256 15257 return 15258 block_append( 15259 newline_node(match), 15260 NEW_IF(gettable(rb_intern("$~")), 15261 block_append( 15262 newline_node(arg.succ_block), 15263 newline_node( 15264 NEW_CALL( 15265 gettable(rb_intern("$~")), 15266 rb_intern("begin"), 15267 NEW_LIST(NEW_LIT(INT2FIX(0)))))), 15268 block_append( 15269 newline_node(arg.fail_block), 15270 newline_node( 15271 NEW_LIT(Qnil))))); 15272 } 15273 15274 static VALUE 15275 reg_compile_gen(struct parser_params* parser, VALUE str, int options) 15276 { 15277 VALUE re; 15278 VALUE err; 15279 15280 reg_fragment_setenc(str, options); 15281 err = rb_errinfo(); 15282 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline); 15283 if (NIL_P(re)) { 15284 ID mesg = rb_intern("mesg"); 15285 VALUE m = rb_attr_get(rb_errinfo(), mesg); 15286 rb_set_errinfo(err); 15287 if (!NIL_P(err)) { 15288 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m); 15289 } 15290 else { 15291 compile_error(PARSER_ARG "%s", RSTRING_PTR(m)); 15292 } 15293 return Qnil; 15294 } 15295 return re; 15296 } 15297 15298 void 15299 rb_gc_mark_parser(void) 15300 { 15301 } 15302 15303 NODE* 15304 rb_parser_append_print(VALUE vparser, NODE *node) 15305 { 15306 NODE *prelude = 0; 15307 NODE *scope = node; 15308 struct parser_params *parser; 15309 15310 if (!node) return node; 15311 15312 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 15313 15314 node = node->nd_body; 15315 15316 if (nd_type(node) == NODE_PRELUDE) { 15317 prelude = node; 15318 node = node->nd_body; 15319 } 15320 15321 node = block_append(node, 15322 NEW_FCALL(rb_intern("print"), 15323 NEW_ARRAY(NEW_GVAR(rb_intern("$_"))))); 15324 if (prelude) { 15325 prelude->nd_body = node; 15326 scope->nd_body = prelude; 15327 } 15328 else { 15329 scope->nd_body = node; 15330 } 15331 15332 return scope; 15333 } 15334 15335 NODE * 15336 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split) 15337 { 15338 NODE *prelude = 0; 15339 NODE *scope = node; 15340 struct parser_params *parser; 15341 15342 if (!node) return node; 15343 15344 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 15345 15346 node = node->nd_body; 15347 15348 if (nd_type(node) == NODE_PRELUDE) { 15349 prelude = node; 15350 node = node->nd_body; 15351 } 15352 if (split) { 15353 node = block_append(NEW_GASGN(rb_intern("$F"), 15354 NEW_CALL(NEW_GVAR(rb_intern("$_")), 15355 rb_intern("split"), 0)), 15356 node); 15357 } 15358 if (chop) { 15359 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")), 15360 rb_intern("chop!"), 0), node); 15361 } 15362 15363 node = NEW_OPT_N(node); 15364 15365 if (prelude) { 15366 prelude->nd_body = node; 15367 scope->nd_body = prelude; 15368 } 15369 else { 15370 scope->nd_body = node; 15371 } 15372 15373 return scope; 15374 } 15375 15376 static const struct { 15377 ID token; 15378 const char *name; 15379 } op_tbl[] = { 15380 {tDOT2, ".."}, 15381 {tDOT3, "..."}, 15382 {'+', "+(binary)"}, 15383 {'-', "-(binary)"}, 15384 {tPOW, "**"}, 15385 {tUPLUS, "+@"}, 15386 {tUMINUS, "-@"}, 15387 {tCMP, "<=>"}, 15388 {tGEQ, ">="}, 15389 {tLEQ, "<="}, 15390 {tEQ, "=="}, 15391 {tEQQ, "==="}, 15392 {tNEQ, "!="}, 15393 {tMATCH, "=~"}, 15394 {tNMATCH, "!~"}, 15395 {tAREF, "[]"}, 15396 {tASET, "[]="}, 15397 {tLSHFT, "<<"}, 15398 {tRSHFT, ">>"}, 15399 {tCOLON2, "::"}, 15400 }; 15401 15402 #define op_tbl_count numberof(op_tbl) 15403 15404 #ifndef ENABLE_SELECTOR_NAMESPACE 15405 #define ENABLE_SELECTOR_NAMESPACE 0 15406 #endif 15407 15408 static struct symbols { 15409 ID last_id; 15410 st_table *sym_id; 15411 st_table *id_str; 15412 #if ENABLE_SELECTOR_NAMESPACE 15413 st_table *ivar2_id; 15414 st_table *id_ivar2; 15415 #endif 15416 VALUE op_sym[tLAST_TOKEN]; 15417 } global_symbols = {tLAST_ID}; 15418 15419 static const struct st_hash_type symhash = { 15420 rb_str_hash_cmp, 15421 rb_str_hash, 15422 }; 15423 15424 #if ENABLE_SELECTOR_NAMESPACE 15425 struct ivar2_key { 15426 ID id; 15427 VALUE klass; 15428 }; 15429 15430 static int 15431 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2) 15432 { 15433 if (key1->id == key2->id && key1->klass == key2->klass) { 15434 return 0; 15435 } 15436 return 1; 15437 } 15438 15439 static int 15440 ivar2_hash(struct ivar2_key *key) 15441 { 15442 return (key->id << 8) ^ (key->klass >> 2); 15443 } 15444 15445 static const struct st_hash_type ivar2_hash_type = { 15446 ivar2_cmp, 15447 ivar2_hash, 15448 }; 15449 #endif 15450 15451 void 15452 Init_sym(void) 15453 { 15454 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000); 15455 global_symbols.id_str = st_init_numtable_with_size(1000); 15456 #if ENABLE_SELECTOR_NAMESPACE 15457 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000); 15458 global_symbols.id_ivar2 = st_init_numtable_with_size(1000); 15459 #endif 15460 15461 Init_id(); 15462 } 15463 15464 void 15465 rb_gc_mark_symbols(void) 15466 { 15467 rb_mark_tbl(global_symbols.id_str); 15468 rb_gc_mark_locations(global_symbols.op_sym, 15469 global_symbols.op_sym + tLAST_TOKEN); 15470 } 15471 #endif /* !RIPPER */ 15472 15473 static ID 15474 internal_id_gen(struct parser_params *parser) 15475 { 15476 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars); 15477 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1; 15478 return ID_INTERNAL | (id << ID_SCOPE_SHIFT); 15479 } 15480 15481 #ifndef RIPPER 15482 static int 15483 is_special_global_name(const char *m, const char *e, rb_encoding *enc) 15484 { 15485 int mb = 0; 15486 15487 if (m >= e) return 0; 15488 switch (*m) { 15489 case '~': case '*': case '$': case '?': case '!': case '@': 15490 case '/': case '\\': case ';': case ',': case '.': case '=': 15491 case ':': case '<': case '>': case '\"': 15492 case '&': case '`': case '\'': case '+': 15493 case '0': 15494 ++m; 15495 break; 15496 case '-': 15497 ++m; 15498 if (m < e && is_identchar(m, e, enc)) { 15499 if (!ISASCII(*m)) mb = 1; 15500 m += rb_enc_mbclen(m, e, enc); 15501 } 15502 break; 15503 default: 15504 if (!rb_enc_isdigit(*m, enc)) return 0; 15505 do { 15506 if (!ISASCII(*m)) mb = 1; 15507 ++m; 15508 } while (m < e && rb_enc_isdigit(*m, enc)); 15509 } 15510 return m == e ? mb + 1 : 0; 15511 } 15512 15513 int 15514 rb_symname_p(const char *name) 15515 { 15516 return rb_enc_symname_p(name, rb_ascii8bit_encoding()); 15517 } 15518 15519 int 15520 rb_enc_symname_p(const char *name, rb_encoding *enc) 15521 { 15522 return rb_enc_symname2_p(name, strlen(name), enc); 15523 } 15524 15525 int 15526 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc) 15527 { 15528 const char *m = name; 15529 const char *e = m + len; 15530 int localid = FALSE; 15531 15532 if (!m) return FALSE; 15533 switch (*m) { 15534 case '\0': 15535 return FALSE; 15536 15537 case '$': 15538 if (is_special_global_name(++m, e, enc)) return TRUE; 15539 goto id; 15540 15541 case '@': 15542 if (*++m == '@') ++m; 15543 goto id; 15544 15545 case '<': 15546 switch (*++m) { 15547 case '<': ++m; break; 15548 case '=': if (*++m == '>') ++m; break; 15549 default: break; 15550 } 15551 break; 15552 15553 case '>': 15554 switch (*++m) { 15555 case '>': case '=': ++m; break; 15556 } 15557 break; 15558 15559 case '=': 15560 switch (*++m) { 15561 case '~': ++m; break; 15562 case '=': if (*++m == '=') ++m; break; 15563 default: return FALSE; 15564 } 15565 break; 15566 15567 case '*': 15568 if (*++m == '*') ++m; 15569 break; 15570 15571 case '+': case '-': 15572 if (*++m == '@') ++m; 15573 break; 15574 15575 case '|': case '^': case '&': case '/': case '%': case '~': case '`': 15576 ++m; 15577 break; 15578 15579 case '[': 15580 if (*++m != ']') return FALSE; 15581 if (*++m == '=') ++m; 15582 break; 15583 15584 case '!': 15585 switch (*++m) { 15586 case '\0': return TRUE; 15587 case '=': case '~': ++m; break; 15588 default: return FALSE; 15589 } 15590 break; 15591 15592 default: 15593 localid = !rb_enc_isupper(*m, enc); 15594 id: 15595 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m))) 15596 return FALSE; 15597 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc); 15598 if (localid) { 15599 switch (*m) { 15600 case '!': case '?': case '=': ++m; 15601 } 15602 } 15603 break; 15604 } 15605 return m == e; 15606 } 15607 15608 static ID 15609 register_symid(ID id, const char *name, long len, rb_encoding *enc) 15610 { 15611 VALUE str = rb_enc_str_new(name, len, enc); 15612 OBJ_FREEZE(str); 15613 st_add_direct(global_symbols.sym_id, (st_data_t)str, id); 15614 st_add_direct(global_symbols.id_str, id, (st_data_t)str); 15615 return id; 15616 } 15617 15618 ID 15619 rb_intern3(const char *name, long len, rb_encoding *enc) 15620 { 15621 const char *m = name; 15622 const char *e = m + len; 15623 unsigned char c; 15624 VALUE str; 15625 ID id; 15626 long last; 15627 int mb; 15628 st_data_t data; 15629 struct RString fake_str; 15630 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE; 15631 fake_str.basic.klass = rb_cString; 15632 fake_str.as.heap.len = len; 15633 fake_str.as.heap.ptr = (char *)name; 15634 fake_str.as.heap.aux.capa = len; 15635 str = (VALUE)&fake_str; 15636 rb_enc_associate(str, enc); 15637 15638 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) { 15639 rb_raise(rb_eEncodingError, "invalid encoding symbol"); 15640 } 15641 15642 if (st_lookup(global_symbols.sym_id, str, &data)) 15643 return (ID)data; 15644 15645 if (rb_cString && !rb_enc_asciicompat(enc)) { 15646 id = ID_JUNK; 15647 goto new_id; 15648 } 15649 last = len-1; 15650 id = 0; 15651 switch (*m) { 15652 case '$': 15653 id |= ID_GLOBAL; 15654 if ((mb = is_special_global_name(++m, e, enc)) != 0) { 15655 if (!--mb) enc = rb_ascii8bit_encoding(); 15656 goto new_id; 15657 } 15658 break; 15659 case '@': 15660 if (m[1] == '@') { 15661 m++; 15662 id |= ID_CLASS; 15663 } 15664 else { 15665 id |= ID_INSTANCE; 15666 } 15667 m++; 15668 break; 15669 default: 15670 c = m[0]; 15671 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) { 15672 /* operators */ 15673 int i; 15674 15675 if (len == 1) { 15676 id = c; 15677 goto id_register; 15678 } 15679 for (i = 0; i < op_tbl_count; i++) { 15680 if (*op_tbl[i].name == *m && 15681 strcmp(op_tbl[i].name, m) == 0) { 15682 id = op_tbl[i].token; 15683 goto id_register; 15684 } 15685 } 15686 } 15687 15688 if (m[last] == '=') { 15689 /* attribute assignment */ 15690 id = rb_intern3(name, last, enc); 15691 if (id > tLAST_TOKEN && !is_attrset_id(id)) { 15692 enc = rb_enc_get(rb_id2str(id)); 15693 id = rb_id_attrset(id); 15694 goto id_register; 15695 } 15696 id = ID_ATTRSET; 15697 } 15698 else if (rb_enc_isupper(m[0], enc)) { 15699 id = ID_CONST; 15700 } 15701 else { 15702 id = ID_LOCAL; 15703 } 15704 break; 15705 } 15706 mb = 0; 15707 if (!rb_enc_isdigit(*m, enc)) { 15708 while (m <= name + last && is_identchar(m, e, enc)) { 15709 if (ISASCII(*m)) { 15710 m++; 15711 } 15712 else { 15713 mb = 1; 15714 m += rb_enc_mbclen(m, e, enc); 15715 } 15716 } 15717 } 15718 if (m - name < len) id = ID_JUNK; 15719 if (enc != rb_usascii_encoding()) { 15720 /* 15721 * this clause makes sense only when called from other than 15722 * rb_intern_str() taking care of code-range. 15723 */ 15724 if (!mb) { 15725 for (; m <= name + len; ++m) { 15726 if (!ISASCII(*m)) goto mbstr; 15727 } 15728 enc = rb_usascii_encoding(); 15729 } 15730 mbstr:; 15731 } 15732 new_id: 15733 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) { 15734 if (len > 20) { 15735 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)", 15736 name); 15737 } 15738 else { 15739 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)", 15740 (int)len, name); 15741 } 15742 } 15743 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT; 15744 id_register: 15745 return register_symid(id, name, len, enc); 15746 } 15747 15748 ID 15749 rb_intern2(const char *name, long len) 15750 { 15751 return rb_intern3(name, len, rb_usascii_encoding()); 15752 } 15753 15754 #undef rb_intern 15755 ID 15756 rb_intern(const char *name) 15757 { 15758 return rb_intern2(name, strlen(name)); 15759 } 15760 15761 ID 15762 rb_intern_str(VALUE str) 15763 { 15764 rb_encoding *enc; 15765 ID id; 15766 15767 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 15768 enc = rb_usascii_encoding(); 15769 } 15770 else { 15771 enc = rb_enc_get(str); 15772 } 15773 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc); 15774 RB_GC_GUARD(str); 15775 return id; 15776 } 15777 15778 VALUE 15779 rb_id2str(ID id) 15780 { 15781 st_data_t data; 15782 15783 if (id < tLAST_TOKEN) { 15784 int i = 0; 15785 15786 if (id < INT_MAX && rb_ispunct((int)id)) { 15787 VALUE str = global_symbols.op_sym[i = (int)id]; 15788 if (!str) { 15789 char name[2]; 15790 name[0] = (char)id; 15791 name[1] = 0; 15792 str = rb_usascii_str_new(name, 1); 15793 OBJ_FREEZE(str); 15794 global_symbols.op_sym[i] = str; 15795 } 15796 return str; 15797 } 15798 for (i = 0; i < op_tbl_count; i++) { 15799 if (op_tbl[i].token == id) { 15800 VALUE str = global_symbols.op_sym[i]; 15801 if (!str) { 15802 str = rb_usascii_str_new2(op_tbl[i].name); 15803 OBJ_FREEZE(str); 15804 global_symbols.op_sym[i] = str; 15805 } 15806 return str; 15807 } 15808 } 15809 } 15810 15811 if (st_lookup(global_symbols.id_str, id, &data)) { 15812 VALUE str = (VALUE)data; 15813 if (RBASIC(str)->klass == 0) 15814 RBASIC(str)->klass = rb_cString; 15815 return str; 15816 } 15817 15818 if (is_attrset_id(id)) { 15819 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL; 15820 VALUE str; 15821 15822 while (!(str = rb_id2str(id2))) { 15823 if (!is_local_id(id2)) return 0; 15824 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST; 15825 } 15826 str = rb_str_dup(str); 15827 rb_str_cat(str, "=", 1); 15828 rb_intern_str(str); 15829 if (st_lookup(global_symbols.id_str, id, &data)) { 15830 VALUE str = (VALUE)data; 15831 if (RBASIC(str)->klass == 0) 15832 RBASIC(str)->klass = rb_cString; 15833 return str; 15834 } 15835 } 15836 return 0; 15837 } 15838 15839 const char * 15840 rb_id2name(ID id) 15841 { 15842 VALUE str = rb_id2str(id); 15843 15844 if (!str) return 0; 15845 return RSTRING_PTR(str); 15846 } 15847 15848 static int 15849 symbols_i(VALUE sym, ID value, VALUE ary) 15850 { 15851 rb_ary_push(ary, ID2SYM(value)); 15852 return ST_CONTINUE; 15853 } 15854 15855 /* 15856 * call-seq: 15857 * Symbol.all_symbols => array 15858 * 15859 * Returns an array of all the symbols currently in Ruby's symbol 15860 * table. 15861 * 15862 * Symbol.all_symbols.size #=> 903 15863 * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink, 15864 * :chown, :EOFError, :$;, :String, 15865 * :LOCK_SH, :"setuid?", :$<, 15866 * :default_proc, :compact, :extend, 15867 * :Tms, :getwd, :$=, :ThreadGroup, 15868 * :wait2, :$>] 15869 */ 15870 15871 VALUE 15872 rb_sym_all_symbols(void) 15873 { 15874 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries); 15875 15876 st_foreach(global_symbols.sym_id, symbols_i, ary); 15877 return ary; 15878 } 15879 15880 int 15881 rb_is_const_id(ID id) 15882 { 15883 return is_const_id(id); 15884 } 15885 15886 int 15887 rb_is_class_id(ID id) 15888 { 15889 return is_class_id(id); 15890 } 15891 15892 int 15893 rb_is_instance_id(ID id) 15894 { 15895 return is_instance_id(id); 15896 } 15897 15898 int 15899 rb_is_local_id(ID id) 15900 { 15901 return is_local_id(id); 15902 } 15903 15904 int 15905 rb_is_junk_id(ID id) 15906 { 15907 return is_junk_id(id); 15908 } 15909 15910 #endif /* !RIPPER */ 15911 15912 static void 15913 parser_initialize(struct parser_params *parser) 15914 { 15915 parser->eofp = Qfalse; 15916 15917 parser->parser_lex_strterm = 0; 15918 parser->parser_cond_stack = 0; 15919 parser->parser_cmdarg_stack = 0; 15920 parser->parser_class_nest = 0; 15921 parser->parser_paren_nest = 0; 15922 parser->parser_lpar_beg = 0; 15923 parser->parser_in_single = 0; 15924 parser->parser_in_def = 0; 15925 parser->parser_in_defined = 0; 15926 parser->parser_compile_for_eval = 0; 15927 parser->parser_cur_mid = 0; 15928 parser->parser_tokenbuf = NULL; 15929 parser->parser_tokidx = 0; 15930 parser->parser_toksiz = 0; 15931 parser->parser_heredoc_end = 0; 15932 parser->parser_command_start = TRUE; 15933 parser->parser_deferred_nodes = 0; 15934 parser->parser_lex_pbeg = 0; 15935 parser->parser_lex_p = 0; 15936 parser->parser_lex_pend = 0; 15937 parser->parser_lvtbl = 0; 15938 parser->parser_ruby__end__seen = 0; 15939 parser->parser_ruby_sourcefile = 0; 15940 #ifndef RIPPER 15941 parser->is_ripper = 0; 15942 parser->parser_eval_tree_begin = 0; 15943 parser->parser_eval_tree = 0; 15944 #else 15945 parser->is_ripper = 1; 15946 parser->parser_ruby_sourcefile_string = Qnil; 15947 parser->delayed = Qnil; 15948 15949 parser->result = Qnil; 15950 parser->parsing_thread = Qnil; 15951 parser->toplevel_p = TRUE; 15952 #endif 15953 #ifdef YYMALLOC 15954 parser->heap = NULL; 15955 #endif 15956 parser->enc = rb_usascii_encoding(); 15957 } 15958 15959 #ifdef RIPPER 15960 #define parser_mark ripper_parser_mark 15961 #define parser_free ripper_parser_free 15962 #endif 15963 15964 static void 15965 parser_mark(void *ptr) 15966 { 15967 struct parser_params *p = (struct parser_params*)ptr; 15968 15969 rb_gc_mark((VALUE)p->parser_lex_strterm); 15970 rb_gc_mark((VALUE)p->parser_deferred_nodes); 15971 rb_gc_mark(p->parser_lex_input); 15972 rb_gc_mark(p->parser_lex_lastline); 15973 rb_gc_mark(p->parser_lex_nextline); 15974 #ifndef RIPPER 15975 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ; 15976 rb_gc_mark((VALUE)p->parser_eval_tree) ; 15977 rb_gc_mark(p->debug_lines); 15978 #else 15979 rb_gc_mark(p->parser_ruby_sourcefile_string); 15980 rb_gc_mark(p->delayed); 15981 rb_gc_mark(p->value); 15982 rb_gc_mark(p->result); 15983 rb_gc_mark(p->parsing_thread); 15984 #endif 15985 #ifdef YYMALLOC 15986 rb_gc_mark((VALUE)p->heap); 15987 #endif 15988 } 15989 15990 static void 15991 parser_free(void *ptr) 15992 { 15993 struct parser_params *p = (struct parser_params*)ptr; 15994 struct local_vars *local, *prev; 15995 15996 if (p->parser_tokenbuf) { 15997 xfree(p->parser_tokenbuf); 15998 } 15999 for (local = p->parser_lvtbl; local; local = prev) { 16000 if (local->vars) xfree(local->vars); 16001 prev = local->prev; 16002 xfree(local); 16003 } 16004 #ifndef RIPPER 16005 xfree(p->parser_ruby_sourcefile); 16006 #endif 16007 xfree(p); 16008 } 16009 16010 static size_t 16011 parser_memsize(const void *ptr) 16012 { 16013 struct parser_params *p = (struct parser_params*)ptr; 16014 struct local_vars *local; 16015 size_t size = sizeof(*p); 16016 16017 if (!ptr) return 0; 16018 size += p->parser_toksiz; 16019 for (local = p->parser_lvtbl; local; local = local->prev) { 16020 size += sizeof(*local); 16021 if (local->vars) size += local->vars->capa * sizeof(ID); 16022 } 16023 #ifndef RIPPER 16024 if (p->parser_ruby_sourcefile) { 16025 size += strlen(p->parser_ruby_sourcefile) + 1; 16026 } 16027 #endif 16028 return size; 16029 } 16030 16031 static const rb_data_type_t parser_data_type = { 16032 "parser", 16033 parser_mark, 16034 parser_free, 16035 parser_memsize, 16036 }; 16037 16038 VALUE rb_parser_get_yydebug(VALUE); 16039 VALUE rb_parser_set_yydebug(VALUE, VALUE); 16040 16041 #ifndef RIPPER 16042 #undef rb_reserved_word 16043 16044 const struct kwtable * 16045 rb_reserved_word(const char *str, unsigned int len) 16046 { 16047 return reserved_word(str, len); 16048 } 16049 16050 static struct parser_params * 16051 parser_new(void) 16052 { 16053 struct parser_params *p; 16054 16055 p = ALLOC_N(struct parser_params, 1); 16056 MEMZERO(p, struct parser_params, 1); 16057 parser_initialize(p); 16058 return p; 16059 } 16060 16061 VALUE 16062 rb_parser_new(void) 16063 { 16064 struct parser_params *p = parser_new(); 16065 16066 return TypedData_Wrap_Struct(0, &parser_data_type, p); 16067 } 16068 16069 /* 16070 * call-seq: 16071 * ripper#end_seen? -> Boolean 16072 * 16073 * Return if parsed source ended by +\_\_END\_\_+. 16074 * This number starts from 1. 16075 */ 16076 VALUE 16077 rb_parser_end_seen_p(VALUE vparser) 16078 { 16079 struct parser_params *parser; 16080 16081 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 16082 return ruby__end__seen ? Qtrue : Qfalse; 16083 } 16084 16085 /* 16086 * call-seq: 16087 * ripper#encoding -> encoding 16088 * 16089 * Return encoding of the source. 16090 */ 16091 VALUE 16092 rb_parser_encoding(VALUE vparser) 16093 { 16094 struct parser_params *parser; 16095 16096 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 16097 return rb_enc_from_encoding(parser->enc); 16098 } 16099 16100 /* 16101 * call-seq: 16102 * ripper.yydebug -> true or false 16103 * 16104 * Get yydebug. 16105 */ 16106 VALUE 16107 rb_parser_get_yydebug(VALUE self) 16108 { 16109 struct parser_params *parser; 16110 16111 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16112 return yydebug ? Qtrue : Qfalse; 16113 } 16114 16115 /* 16116 * call-seq: 16117 * ripper.yydebug = flag 16118 * 16119 * Set yydebug. 16120 */ 16121 VALUE 16122 rb_parser_set_yydebug(VALUE self, VALUE flag) 16123 { 16124 struct parser_params *parser; 16125 16126 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16127 yydebug = RTEST(flag); 16128 return flag; 16129 } 16130 16131 #ifdef YYMALLOC 16132 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE)) 16133 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0) 16134 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \ 16135 (n)->u3.cnt = (c), (p)) 16136 16137 void * 16138 rb_parser_malloc(struct parser_params *parser, size_t size) 16139 { 16140 size_t cnt = HEAPCNT(1, size); 16141 NODE *n = NEWHEAP(); 16142 void *ptr = xmalloc(size); 16143 16144 return ADD2HEAP(n, cnt, ptr); 16145 } 16146 16147 void * 16148 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size) 16149 { 16150 size_t cnt = HEAPCNT(nelem, size); 16151 NODE *n = NEWHEAP(); 16152 void *ptr = xcalloc(nelem, size); 16153 16154 return ADD2HEAP(n, cnt, ptr); 16155 } 16156 16157 void * 16158 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size) 16159 { 16160 NODE *n; 16161 size_t cnt = HEAPCNT(1, size); 16162 16163 if (ptr && (n = parser->heap) != NULL) { 16164 do { 16165 if (n->u1.node == ptr) { 16166 n->u1.node = ptr = xrealloc(ptr, size); 16167 if (n->u3.cnt) n->u3.cnt = cnt; 16168 return ptr; 16169 } 16170 } while ((n = n->u2.node) != NULL); 16171 } 16172 n = NEWHEAP(); 16173 ptr = xrealloc(ptr, size); 16174 return ADD2HEAP(n, cnt, ptr); 16175 } 16176 16177 void 16178 rb_parser_free(struct parser_params *parser, void *ptr) 16179 { 16180 NODE **prev = &parser->heap, *n; 16181 16182 while ((n = *prev) != NULL) { 16183 if (n->u1.node == ptr) { 16184 *prev = n->u2.node; 16185 rb_gc_force_recycle((VALUE)n); 16186 break; 16187 } 16188 prev = &n->u2.node; 16189 } 16190 xfree(ptr); 16191 } 16192 #endif 16193 #endif 16194 16195 #ifdef RIPPER 16196 #ifdef RIPPER_DEBUG 16197 extern int rb_is_pointer_to_heap(VALUE); 16198 16199 /* :nodoc: */ 16200 static VALUE 16201 ripper_validate_object(VALUE self, VALUE x) 16202 { 16203 if (x == Qfalse) return x; 16204 if (x == Qtrue) return x; 16205 if (x == Qnil) return x; 16206 if (x == Qundef) 16207 rb_raise(rb_eArgError, "Qundef given"); 16208 if (FIXNUM_P(x)) return x; 16209 if (SYMBOL_P(x)) return x; 16210 if (!rb_is_pointer_to_heap(x)) 16211 rb_raise(rb_eArgError, "invalid pointer: %p", x); 16212 switch (TYPE(x)) { 16213 case T_STRING: 16214 case T_OBJECT: 16215 case T_ARRAY: 16216 case T_BIGNUM: 16217 case T_FLOAT: 16218 return x; 16219 case T_NODE: 16220 if (nd_type(x) != NODE_LASGN) { 16221 rb_raise(rb_eArgError, "NODE given: %p", x); 16222 } 16223 return ((NODE *)x)->nd_rval; 16224 default: 16225 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)", 16226 x, rb_obj_classname(x)); 16227 } 16228 return x; 16229 } 16230 #endif 16231 16232 #define validate(x) (x = get_value(x)) 16233 16234 static VALUE 16235 ripper_dispatch0(struct parser_params *parser, ID mid) 16236 { 16237 return rb_funcall(parser->value, mid, 0); 16238 } 16239 16240 static VALUE 16241 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a) 16242 { 16243 validate(a); 16244 return rb_funcall(parser->value, mid, 1, a); 16245 } 16246 16247 static VALUE 16248 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b) 16249 { 16250 validate(a); 16251 validate(b); 16252 return rb_funcall(parser->value, mid, 2, a, b); 16253 } 16254 16255 static VALUE 16256 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c) 16257 { 16258 validate(a); 16259 validate(b); 16260 validate(c); 16261 return rb_funcall(parser->value, mid, 3, a, b, c); 16262 } 16263 16264 static VALUE 16265 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d) 16266 { 16267 validate(a); 16268 validate(b); 16269 validate(c); 16270 validate(d); 16271 return rb_funcall(parser->value, mid, 4, a, b, c, d); 16272 } 16273 16274 static VALUE 16275 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e) 16276 { 16277 validate(a); 16278 validate(b); 16279 validate(c); 16280 validate(d); 16281 validate(e); 16282 return rb_funcall(parser->value, mid, 5, a, b, c, d, e); 16283 } 16284 16285 static const struct kw_assoc { 16286 ID id; 16287 const char *name; 16288 } keyword_to_name[] = { 16289 {keyword_class, "class"}, 16290 {keyword_module, "module"}, 16291 {keyword_def, "def"}, 16292 {keyword_undef, "undef"}, 16293 {keyword_begin, "begin"}, 16294 {keyword_rescue, "rescue"}, 16295 {keyword_ensure, "ensure"}, 16296 {keyword_end, "end"}, 16297 {keyword_if, "if"}, 16298 {keyword_unless, "unless"}, 16299 {keyword_then, "then"}, 16300 {keyword_elsif, "elsif"}, 16301 {keyword_else, "else"}, 16302 {keyword_case, "case"}, 16303 {keyword_when, "when"}, 16304 {keyword_while, "while"}, 16305 {keyword_until, "until"}, 16306 {keyword_for, "for"}, 16307 {keyword_break, "break"}, 16308 {keyword_next, "next"}, 16309 {keyword_redo, "redo"}, 16310 {keyword_retry, "retry"}, 16311 {keyword_in, "in"}, 16312 {keyword_do, "do"}, 16313 {keyword_do_cond, "do"}, 16314 {keyword_do_block, "do"}, 16315 {keyword_return, "return"}, 16316 {keyword_yield, "yield"}, 16317 {keyword_super, "super"}, 16318 {keyword_self, "self"}, 16319 {keyword_nil, "nil"}, 16320 {keyword_true, "true"}, 16321 {keyword_false, "false"}, 16322 {keyword_and, "and"}, 16323 {keyword_or, "or"}, 16324 {keyword_not, "not"}, 16325 {modifier_if, "if"}, 16326 {modifier_unless, "unless"}, 16327 {modifier_while, "while"}, 16328 {modifier_until, "until"}, 16329 {modifier_rescue, "rescue"}, 16330 {keyword_alias, "alias"}, 16331 {keyword_defined, "defined?"}, 16332 {keyword_BEGIN, "BEGIN"}, 16333 {keyword_END, "END"}, 16334 {keyword__LINE__, "__LINE__"}, 16335 {keyword__FILE__, "__FILE__"}, 16336 {keyword__ENCODING__, "__ENCODING__"}, 16337 {0, NULL} 16338 }; 16339 16340 static const char* 16341 keyword_id_to_str(ID id) 16342 { 16343 const struct kw_assoc *a; 16344 16345 for (a = keyword_to_name; a->id; a++) { 16346 if (a->id == id) 16347 return a->name; 16348 } 16349 return NULL; 16350 } 16351 16352 #undef ripper_id2sym 16353 static VALUE 16354 ripper_id2sym(ID id) 16355 { 16356 const char *name; 16357 char buf[8]; 16358 16359 if (id <= 256) { 16360 buf[0] = (char)id; 16361 buf[1] = '\0'; 16362 return ID2SYM(rb_intern2(buf, 1)); 16363 } 16364 if ((name = keyword_id_to_str(id))) { 16365 return ID2SYM(rb_intern(name)); 16366 } 16367 switch (id) { 16368 case tOROP: 16369 name = "||"; 16370 break; 16371 case tANDOP: 16372 name = "&&"; 16373 break; 16374 default: 16375 name = rb_id2name(id); 16376 if (!name) { 16377 rb_bug("cannot convert ID to string: %ld", (unsigned long)id); 16378 } 16379 return ID2SYM(id); 16380 } 16381 return ID2SYM(rb_intern(name)); 16382 } 16383 16384 static ID 16385 ripper_get_id(VALUE v) 16386 { 16387 NODE *nd; 16388 if (!RB_TYPE_P(v, T_NODE)) return 0; 16389 nd = (NODE *)v; 16390 if (nd_type(nd) != NODE_LASGN) return 0; 16391 return nd->nd_vid; 16392 } 16393 16394 static VALUE 16395 ripper_get_value(VALUE v) 16396 { 16397 NODE *nd; 16398 if (v == Qundef) return Qnil; 16399 if (!RB_TYPE_P(v, T_NODE)) return v; 16400 nd = (NODE *)v; 16401 if (nd_type(nd) != NODE_LASGN) return Qnil; 16402 return nd->nd_rval; 16403 } 16404 16405 static void 16406 ripper_compile_error(struct parser_params *parser, const char *fmt, ...) 16407 { 16408 VALUE str; 16409 va_list args; 16410 16411 va_start(args, fmt); 16412 str = rb_vsprintf(fmt, args); 16413 va_end(args); 16414 rb_funcall(parser->value, rb_intern("compile_error"), 1, str); 16415 } 16416 16417 static void 16418 ripper_warn0(struct parser_params *parser, const char *fmt) 16419 { 16420 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt)); 16421 } 16422 16423 static void 16424 ripper_warnI(struct parser_params *parser, const char *fmt, int a) 16425 { 16426 rb_funcall(parser->value, rb_intern("warn"), 2, 16427 STR_NEW2(fmt), INT2NUM(a)); 16428 } 16429 16430 #if 0 16431 static void 16432 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str) 16433 { 16434 rb_funcall(parser->value, rb_intern("warn"), 2, 16435 STR_NEW2(fmt), STR_NEW2(str)); 16436 } 16437 #endif 16438 16439 static void 16440 ripper_warning0(struct parser_params *parser, const char *fmt) 16441 { 16442 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt)); 16443 } 16444 16445 static void 16446 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str) 16447 { 16448 rb_funcall(parser->value, rb_intern("warning"), 2, 16449 STR_NEW2(fmt), STR_NEW2(str)); 16450 } 16451 16452 static VALUE 16453 ripper_lex_get_generic(struct parser_params *parser, VALUE src) 16454 { 16455 return rb_funcall(src, ripper_id_gets, 0); 16456 } 16457 16458 static VALUE 16459 ripper_s_allocate(VALUE klass) 16460 { 16461 struct parser_params *p; 16462 VALUE self; 16463 16464 p = ALLOC_N(struct parser_params, 1); 16465 MEMZERO(p, struct parser_params, 1); 16466 self = TypedData_Wrap_Struct(klass, &parser_data_type, p); 16467 p->value = self; 16468 return self; 16469 } 16470 16471 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0) 16472 16473 /* 16474 * call-seq: 16475 * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper 16476 * 16477 * Create a new Ripper object. 16478 * _src_ must be a String, an IO, or an Object which has #gets method. 16479 * 16480 * This method does not starts parsing. 16481 * See also Ripper#parse and Ripper.parse. 16482 */ 16483 static VALUE 16484 ripper_initialize(int argc, VALUE *argv, VALUE self) 16485 { 16486 struct parser_params *parser; 16487 VALUE src, fname, lineno; 16488 16489 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16490 rb_scan_args(argc, argv, "12", &src, &fname, &lineno); 16491 if (rb_obj_respond_to(src, ripper_id_gets, 0)) { 16492 parser->parser_lex_gets = ripper_lex_get_generic; 16493 } 16494 else { 16495 StringValue(src); 16496 parser->parser_lex_gets = lex_get_str; 16497 } 16498 parser->parser_lex_input = src; 16499 parser->eofp = Qfalse; 16500 if (NIL_P(fname)) { 16501 fname = STR_NEW2("(ripper)"); 16502 } 16503 else { 16504 StringValue(fname); 16505 } 16506 parser_initialize(parser); 16507 16508 parser->parser_ruby_sourcefile_string = fname; 16509 parser->parser_ruby_sourcefile = RSTRING_PTR(fname); 16510 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1; 16511 16512 return Qnil; 16513 } 16514 16515 extern VALUE rb_thread_pass(void); 16516 16517 struct ripper_args { 16518 struct parser_params *parser; 16519 int argc; 16520 VALUE *argv; 16521 }; 16522 16523 static VALUE 16524 ripper_parse0(VALUE parser_v) 16525 { 16526 struct parser_params *parser; 16527 16528 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 16529 parser_prepare(parser); 16530 ripper_yyparse((void*)parser); 16531 return parser->result; 16532 } 16533 16534 static VALUE 16535 ripper_ensure(VALUE parser_v) 16536 { 16537 struct parser_params *parser; 16538 16539 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 16540 parser->parsing_thread = Qnil; 16541 return Qnil; 16542 } 16543 16544 /* 16545 * call-seq: 16546 * ripper#parse 16547 * 16548 * Start parsing and returns the value of the root action. 16549 */ 16550 static VALUE 16551 ripper_parse(VALUE self) 16552 { 16553 struct parser_params *parser; 16554 16555 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16556 if (!ripper_initialized_p(parser)) { 16557 rb_raise(rb_eArgError, "method called for uninitialized object"); 16558 } 16559 if (!NIL_P(parser->parsing_thread)) { 16560 if (parser->parsing_thread == rb_thread_current()) 16561 rb_raise(rb_eArgError, "Ripper#parse is not reentrant"); 16562 else 16563 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe"); 16564 } 16565 parser->parsing_thread = rb_thread_current(); 16566 rb_ensure(ripper_parse0, self, ripper_ensure, self); 16567 16568 return parser->result; 16569 } 16570 16571 /* 16572 * call-seq: 16573 * ripper#column -> Integer 16574 * 16575 * Return column number of current parsing line. 16576 * This number starts from 0. 16577 */ 16578 static VALUE 16579 ripper_column(VALUE self) 16580 { 16581 struct parser_params *parser; 16582 long col; 16583 16584 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16585 if (!ripper_initialized_p(parser)) { 16586 rb_raise(rb_eArgError, "method called for uninitialized object"); 16587 } 16588 if (NIL_P(parser->parsing_thread)) return Qnil; 16589 col = parser->tokp - parser->parser_lex_pbeg; 16590 return LONG2NUM(col); 16591 } 16592 16593 /* 16594 * call-seq: 16595 * ripper#filename -> String 16596 * 16597 * Return current parsing filename. 16598 */ 16599 static VALUE 16600 ripper_filename(VALUE self) 16601 { 16602 struct parser_params *parser; 16603 16604 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16605 if (!ripper_initialized_p(parser)) { 16606 rb_raise(rb_eArgError, "method called for uninitialized object"); 16607 } 16608 return parser->parser_ruby_sourcefile_string; 16609 } 16610 16611 /* 16612 * call-seq: 16613 * ripper#lineno -> Integer 16614 * 16615 * Return line number of current parsing line. 16616 * This number starts from 1. 16617 */ 16618 static VALUE 16619 ripper_lineno(VALUE self) 16620 { 16621 struct parser_params *parser; 16622 16623 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16624 if (!ripper_initialized_p(parser)) { 16625 rb_raise(rb_eArgError, "method called for uninitialized object"); 16626 } 16627 if (NIL_P(parser->parsing_thread)) return Qnil; 16628 return INT2NUM(parser->parser_ruby_sourceline); 16629 } 16630 16631 #ifdef RIPPER_DEBUG 16632 /* :nodoc: */ 16633 static VALUE 16634 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg) 16635 { 16636 StringValue(msg); 16637 if (obj == Qundef) { 16638 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg)); 16639 } 16640 return Qnil; 16641 } 16642 16643 /* :nodoc: */ 16644 static VALUE 16645 ripper_value(VALUE self, VALUE obj) 16646 { 16647 return ULONG2NUM(obj); 16648 } 16649 #endif 16650 16651 void 16652 Init_ripper(void) 16653 { 16654 VALUE Ripper; 16655 16656 Ripper = rb_define_class("Ripper", rb_cObject); 16657 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION)); 16658 rb_define_alloc_func(Ripper, ripper_s_allocate); 16659 rb_define_method(Ripper, "initialize", ripper_initialize, -1); 16660 rb_define_method(Ripper, "parse", ripper_parse, 0); 16661 rb_define_method(Ripper, "column", ripper_column, 0); 16662 rb_define_method(Ripper, "filename", ripper_filename, 0); 16663 rb_define_method(Ripper, "lineno", ripper_lineno, 0); 16664 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0); 16665 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0); 16666 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0); 16667 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1); 16668 #ifdef RIPPER_DEBUG 16669 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2); 16670 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1); 16671 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1); 16672 #endif 16673 16674 ripper_id_gets = rb_intern("gets"); 16675 ripper_init_eventids1(Ripper); 16676 ripper_init_eventids2(Ripper); 16677 /* ensure existing in symbol table */ 16678 rb_intern("||"); 16679 rb_intern("&&"); 16680 } 16681 #endif /* RIPPER */ 16682 16683
1.7.3