|
Ruby 1.9.2p180(2011-02-18revision30909)
|
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, 1183, 1200, 1210, 01382 1219, 1228, 1237, 1240, 1241, 1249, 1257, 1265, 1273, 1276, 01383 1288, 1289, 1292, 1293, 1302, 1314, 1313, 1335, 1344, 1356, 01384 1365, 1377, 1386, 1398, 1407, 1416, 1424, 1432, 1442, 1443, 01385 1453, 1454, 1464, 1472, 1480, 1488, 1497, 1505, 1513, 1521, 01386 1529, 1537, 1547, 1548, 1558, 1566, 1576, 1584, 1594, 1598, 01387 1606, 1614, 1622, 1630, 1642, 1652, 1664, 1673, 1681, 1689, 01388 1697, 1705, 1718, 1731, 1742, 1750, 1753, 1761, 1769, 1779, 01389 1780, 1781, 1782, 1787, 1798, 1799, 1802, 1810, 1813, 1821, 01390 1821, 1831, 1832, 1833, 1834, 1835, 1836, 1837, 1838, 1839, 01391 1840, 1841, 1842, 1843, 1844, 1845, 1846, 1847, 1848, 1849, 01392 1850, 1851, 1852, 1853, 1854, 1855, 1856, 1857, 1858, 1859, 01393 1862, 1862, 1862, 1863, 1863, 1864, 1864, 1864, 1865, 1865, 01394 1865, 1865, 1866, 1866, 1866, 1866, 1867, 1867, 1867, 1868, 01395 1868, 1868, 1868, 1869, 1869, 1869, 1869, 1870, 1870, 1870, 01396 1870, 1871, 1871, 1871, 1871, 1872, 1872, 1872, 1872, 1873, 01397 1873, 1876, 1885, 1895, 1924, 1955, 1981, 1998, 2015, 2032, 01398 2043, 2054, 2065, 2079, 2093, 2101, 2109, 2117, 2125, 2133, 01399 2141, 2150, 2159, 2167, 2175, 2183, 2191, 2199, 2207, 2215, 01400 2223, 2231, 2239, 2247, 2255, 2263, 2274, 2282, 2290, 2298, 01401 2306, 2314, 2322, 2330, 2330, 2340, 2350, 2356, 2368, 2369, 01402 2373, 2381, 2391, 2401, 2402, 2405, 2406, 2409, 2418, 2426, 01403 2436, 2445, 2454, 2454, 2466, 2476, 2480, 2484, 2490, 2498, 01404 2506, 2520, 2536, 2550, 2565, 2575, 2576, 2577, 2578, 2579, 01405 2580, 2581, 2582, 2583, 2592, 2591, 2616, 2616, 2625, 2633, 01406 2641, 2649, 2662, 2670, 2678, 2686, 2694, 2702, 2702, 2712, 01407 2720, 2728, 2739, 2740, 2751, 2755, 2767, 2779, 2779, 2779, 01408 2790, 2790, 2790, 2801, 2812, 2821, 2823, 2820, 2887, 2886, 01409 2908, 2913, 2907, 2932, 2931, 2953, 2952, 2975, 2976, 2975, 01410 2996, 3004, 3012, 3020, 3030, 3042, 3048, 3054, 3060, 3066, 01411 3072, 3078, 3084, 3090, 3096, 3106, 3112, 3117, 3118, 3125, 01412 3130, 3133, 3134, 3147, 3148, 3158, 3159, 3162, 3170, 3180, 01413 3188, 3198, 3206, 3215, 3224, 3232, 3240, 3249, 3261, 3269, 01414 3279, 3287, 3295, 3303, 3311, 3319, 3328, 3336, 3344, 3352, 01415 3360, 3368, 3376, 3384, 3392, 3402, 3403, 3409, 3418, 3427, 01416 3438, 3439, 3449, 3456, 3465, 3473, 3479, 3482, 3479, 3500, 01417 3508, 3518, 3522, 3529, 3528, 3549, 3565, 3574, 3585, 3594, 01418 3604, 3614, 3622, 3633, 3644, 3652, 3660, 3675, 3674, 3694, 01419 3693, 3714, 3726, 3727, 3730, 3749, 3752, 3760, 3768, 3771, 01420 3775, 3778, 3786, 3789, 3790, 3798, 3801, 3818, 3819, 3820, 01421 3830, 3840, 3867, 3932, 3940, 3947, 3954, 3964, 3972, 3982, 01422 3990, 3997, 4004, 4015, 4022, 4033, 4040, 4051, 4058, 4087, 01423 4089, 4088, 4105, 4111, 4104, 4130, 4138, 4146, 4154, 4157, 01424 4168, 4169, 4170, 4171, 4174, 4204, 4205, 4206, 4214, 4224, 01425 4225, 4226, 4227, 4228, 4229, 4230, 4231, 4232, 4233, 4234, 01426 4235, 4238, 4248, 4258, 4259, 4262, 4271, 4270, 4278, 4290, 01427 4300, 4306, 4314, 4322, 4330, 4338, 4346, 4354, 4362, 4370, 01428 4378, 4386, 4394, 4402, 4410, 4419, 4428, 4437, 4446, 4455, 01429 4466, 4467, 4474, 4483, 4502, 4509, 4522, 4534, 4546, 4554, 01430 4570, 4578, 4594, 4595, 4598, 4611, 4622, 4623, 4626, 4643, 01431 4647, 4657, 4667, 4667, 4696, 4697, 4707, 4714, 4724, 4732, 01432 4742, 4743, 4744, 4747, 4748, 4749, 4750, 4753, 4754, 4755, 01433 4758, 4763, 4770, 4771, 4774, 4775, 4778, 4781, 4784, 4785, 01434 4786, 4789, 4790, 4793, 4794, 4798 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 /*%%%*/ 05473 yyerror("constant re-assignment"); 05474 (yyval.node) = 0; 05475 /*% 05476 $$ = dispatch2(const_path_field, $1, $3); 05477 $$ = dispatch3(opassign, $$, $4, $5); 05478 $$ = dispatch1(assign_error, $$); 05479 %*/ 05480 ;} 05481 break; 05482 05483 case 37: 05484 05485 /* Line 1464 of yacc.c */ 05486 #line 1184 "parse.y" 05487 { 05488 /*%%%*/ 05489 value_expr((yyvsp[(5) - (5)].node)); 05490 if ((yyvsp[(4) - (5)].id) == tOROP) { 05491 (yyvsp[(4) - (5)].id) = 0; 05492 } 05493 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 05494 (yyvsp[(4) - (5)].id) = 1; 05495 } 05496 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 05497 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05498 /*% 05499 $$ = dispatch3(field, $1, ripper_intern("::"), $3); 05500 $$ = dispatch3(opassign, $$, $4, $5); 05501 %*/ 05502 ;} 05503 break; 05504 05505 case 38: 05506 05507 /* Line 1464 of yacc.c */ 05508 #line 1201 "parse.y" 05509 { 05510 /*%%%*/ 05511 rb_backref_error((yyvsp[(1) - (3)].node)); 05512 (yyval.node) = NEW_BEGIN(0); 05513 /*% 05514 $$ = dispatch2(assign, dispatch1(var_field, $1), $3); 05515 $$ = dispatch1(assign_error, $$); 05516 %*/ 05517 ;} 05518 break; 05519 05520 case 39: 05521 05522 /* Line 1464 of yacc.c */ 05523 #line 1211 "parse.y" 05524 { 05525 /*%%%*/ 05526 value_expr((yyvsp[(3) - (3)].node)); 05527 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05528 /*% 05529 $$ = dispatch2(assign, $1, $3); 05530 %*/ 05531 ;} 05532 break; 05533 05534 case 40: 05535 05536 /* Line 1464 of yacc.c */ 05537 #line 1220 "parse.y" 05538 { 05539 /*%%%*/ 05540 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05541 (yyval.node) = (yyvsp[(1) - (3)].node); 05542 /*% 05543 $$ = dispatch2(massign, $1, $3); 05544 %*/ 05545 ;} 05546 break; 05547 05548 case 41: 05549 05550 /* Line 1464 of yacc.c */ 05551 #line 1229 "parse.y" 05552 { 05553 /*%%%*/ 05554 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05555 (yyval.node) = (yyvsp[(1) - (3)].node); 05556 /*% 05557 $$ = dispatch2(massign, $1, $3); 05558 %*/ 05559 ;} 05560 break; 05561 05562 case 44: 05563 05564 /* Line 1464 of yacc.c */ 05565 #line 1242 "parse.y" 05566 { 05567 /*%%%*/ 05568 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05569 /*% 05570 $$ = dispatch3(binary, $1, ripper_intern("and"), $3); 05571 %*/ 05572 ;} 05573 break; 05574 05575 case 45: 05576 05577 /* Line 1464 of yacc.c */ 05578 #line 1250 "parse.y" 05579 { 05580 /*%%%*/ 05581 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05582 /*% 05583 $$ = dispatch3(binary, $1, ripper_intern("or"), $3); 05584 %*/ 05585 ;} 05586 break; 05587 05588 case 46: 05589 05590 /* Line 1464 of yacc.c */ 05591 #line 1258 "parse.y" 05592 { 05593 /*%%%*/ 05594 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!'); 05595 /*% 05596 $$ = dispatch2(unary, ripper_intern("not"), $3); 05597 %*/ 05598 ;} 05599 break; 05600 05601 case 47: 05602 05603 /* Line 1464 of yacc.c */ 05604 #line 1266 "parse.y" 05605 { 05606 /*%%%*/ 05607 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!'); 05608 /*% 05609 $$ = dispatch2(unary, ripper_id2sym('!'), $2); 05610 %*/ 05611 ;} 05612 break; 05613 05614 case 49: 05615 05616 /* Line 1464 of yacc.c */ 05617 #line 1277 "parse.y" 05618 { 05619 /*%%%*/ 05620 value_expr((yyvsp[(1) - (1)].node)); 05621 (yyval.node) = (yyvsp[(1) - (1)].node); 05622 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 05623 /*% 05624 $$ = $1; 05625 %*/ 05626 ;} 05627 break; 05628 05629 case 53: 05630 05631 /* Line 1464 of yacc.c */ 05632 #line 1294 "parse.y" 05633 { 05634 /*%%%*/ 05635 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05636 /*% 05637 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 05638 $$ = method_arg($$, $4); 05639 %*/ 05640 ;} 05641 break; 05642 05643 case 54: 05644 05645 /* Line 1464 of yacc.c */ 05646 #line 1303 "parse.y" 05647 { 05648 /*%%%*/ 05649 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05650 /*% 05651 $$ = dispatch3(call, $1, ripper_intern("::"), $3); 05652 $$ = method_arg($$, $4); 05653 %*/ 05654 ;} 05655 break; 05656 05657 case 55: 05658 05659 /* Line 1464 of yacc.c */ 05660 #line 1314 "parse.y" 05661 { 05662 (yyvsp[(1) - (1)].vars) = dyna_push(); 05663 /*%%%*/ 05664 (yyval.num) = ruby_sourceline; 05665 /*% 05666 %*/ 05667 ;} 05668 break; 05669 05670 case 56: 05671 05672 /* Line 1464 of yacc.c */ 05673 #line 1324 "parse.y" 05674 { 05675 /*%%%*/ 05676 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 05677 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 05678 /*% 05679 $$ = dispatch2(brace_block, escape_Qundef($3), $4); 05680 %*/ 05681 dyna_pop((yyvsp[(1) - (5)].vars)); 05682 ;} 05683 break; 05684 05685 case 57: 05686 05687 /* Line 1464 of yacc.c */ 05688 #line 1336 "parse.y" 05689 { 05690 /*%%%*/ 05691 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node)); 05692 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 05693 /*% 05694 $$ = dispatch2(command, $1, $2); 05695 %*/ 05696 ;} 05697 break; 05698 05699 case 58: 05700 05701 /* Line 1464 of yacc.c */ 05702 #line 1345 "parse.y" 05703 { 05704 /*%%%*/ 05705 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node)); 05706 (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node)); 05707 (yyval.node) = (yyvsp[(3) - (3)].node); 05708 fixpos((yyval.node), (yyvsp[(2) - (3)].node)); 05709 /*% 05710 $$ = dispatch2(command, $1, $2); 05711 $$ = method_add_block($$, $3); 05712 %*/ 05713 ;} 05714 break; 05715 05716 case 59: 05717 05718 /* Line 1464 of yacc.c */ 05719 #line 1357 "parse.y" 05720 { 05721 /*%%%*/ 05722 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05723 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 05724 /*% 05725 $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4); 05726 %*/ 05727 ;} 05728 break; 05729 05730 case 60: 05731 05732 /* Line 1464 of yacc.c */ 05733 #line 1366 "parse.y" 05734 { 05735 /*%%%*/ 05736 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node)); 05737 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node)); 05738 (yyval.node) = (yyvsp[(5) - (5)].node); 05739 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05740 /*% 05741 $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4); 05742 $$ = method_add_block($$, $5); 05743 %*/ 05744 ;} 05745 break; 05746 05747 case 61: 05748 05749 /* Line 1464 of yacc.c */ 05750 #line 1378 "parse.y" 05751 { 05752 /*%%%*/ 05753 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05754 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 05755 /*% 05756 $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4); 05757 %*/ 05758 ;} 05759 break; 05760 05761 case 62: 05762 05763 /* Line 1464 of yacc.c */ 05764 #line 1387 "parse.y" 05765 { 05766 /*%%%*/ 05767 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node)); 05768 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node)); 05769 (yyval.node) = (yyvsp[(5) - (5)].node); 05770 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05771 /*% 05772 $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4); 05773 $$ = method_add_block($$, $5); 05774 %*/ 05775 ;} 05776 break; 05777 05778 case 63: 05779 05780 /* Line 1464 of yacc.c */ 05781 #line 1399 "parse.y" 05782 { 05783 /*%%%*/ 05784 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node)); 05785 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 05786 /*% 05787 $$ = dispatch1(super, $2); 05788 %*/ 05789 ;} 05790 break; 05791 05792 case 64: 05793 05794 /* Line 1464 of yacc.c */ 05795 #line 1408 "parse.y" 05796 { 05797 /*%%%*/ 05798 (yyval.node) = new_yield((yyvsp[(2) - (2)].node)); 05799 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 05800 /*% 05801 $$ = dispatch1(yield, $2); 05802 %*/ 05803 ;} 05804 break; 05805 05806 case 65: 05807 05808 /* Line 1464 of yacc.c */ 05809 #line 1417 "parse.y" 05810 { 05811 /*%%%*/ 05812 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node))); 05813 /*% 05814 $$ = dispatch1(return, $2); 05815 %*/ 05816 ;} 05817 break; 05818 05819 case 66: 05820 05821 /* Line 1464 of yacc.c */ 05822 #line 1425 "parse.y" 05823 { 05824 /*%%%*/ 05825 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node))); 05826 /*% 05827 $$ = dispatch1(break, $2); 05828 %*/ 05829 ;} 05830 break; 05831 05832 case 67: 05833 05834 /* Line 1464 of yacc.c */ 05835 #line 1433 "parse.y" 05836 { 05837 /*%%%*/ 05838 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node))); 05839 /*% 05840 $$ = dispatch1(next, $2); 05841 %*/ 05842 ;} 05843 break; 05844 05845 case 69: 05846 05847 /* Line 1464 of yacc.c */ 05848 #line 1444 "parse.y" 05849 { 05850 /*%%%*/ 05851 (yyval.node) = (yyvsp[(2) - (3)].node); 05852 /*% 05853 $$ = dispatch1(mlhs_paren, $2); 05854 %*/ 05855 ;} 05856 break; 05857 05858 case 71: 05859 05860 /* Line 1464 of yacc.c */ 05861 #line 1455 "parse.y" 05862 { 05863 /*%%%*/ 05864 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0); 05865 /*% 05866 $$ = dispatch1(mlhs_paren, $2); 05867 %*/ 05868 ;} 05869 break; 05870 05871 case 72: 05872 05873 /* Line 1464 of yacc.c */ 05874 #line 1465 "parse.y" 05875 { 05876 /*%%%*/ 05877 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0); 05878 /*% 05879 $$ = $1; 05880 %*/ 05881 ;} 05882 break; 05883 05884 case 73: 05885 05886 /* Line 1464 of yacc.c */ 05887 #line 1473 "parse.y" 05888 { 05889 /*%%%*/ 05890 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0); 05891 /*% 05892 $$ = mlhs_add($1, $2); 05893 %*/ 05894 ;} 05895 break; 05896 05897 case 74: 05898 05899 /* Line 1464 of yacc.c */ 05900 #line 1481 "parse.y" 05901 { 05902 /*%%%*/ 05903 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05904 /*% 05905 $$ = mlhs_add_star($1, $3); 05906 %*/ 05907 ;} 05908 break; 05909 05910 case 75: 05911 05912 /* Line 1464 of yacc.c */ 05913 #line 1489 "parse.y" 05914 { 05915 /*%%%*/ 05916 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node))); 05917 /*% 05918 $1 = mlhs_add_star($1, $3); 05919 $$ = mlhs_add($1, $5); 05920 %*/ 05921 ;} 05922 break; 05923 05924 case 76: 05925 05926 /* Line 1464 of yacc.c */ 05927 #line 1498 "parse.y" 05928 { 05929 /*%%%*/ 05930 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1); 05931 /*% 05932 $$ = mlhs_add_star($1, Qnil); 05933 %*/ 05934 ;} 05935 break; 05936 05937 case 77: 05938 05939 /* Line 1464 of yacc.c */ 05940 #line 1506 "parse.y" 05941 { 05942 /*%%%*/ 05943 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node))); 05944 /*% 05945 $$ = mlhs_add_star($1, Qnil); 05946 %*/ 05947 ;} 05948 break; 05949 05950 case 78: 05951 05952 /* Line 1464 of yacc.c */ 05953 #line 1514 "parse.y" 05954 { 05955 /*%%%*/ 05956 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node)); 05957 /*% 05958 $$ = mlhs_add_star(mlhs_new(), $2); 05959 %*/ 05960 ;} 05961 break; 05962 05963 case 79: 05964 05965 /* Line 1464 of yacc.c */ 05966 #line 1522 "parse.y" 05967 { 05968 /*%%%*/ 05969 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node))); 05970 /*% 05971 $$ = mlhs_add_star(mlhs_new(), $2); 05972 %*/ 05973 ;} 05974 break; 05975 05976 case 80: 05977 05978 /* Line 1464 of yacc.c */ 05979 #line 1530 "parse.y" 05980 { 05981 /*%%%*/ 05982 (yyval.node) = NEW_MASGN(0, -1); 05983 /*% 05984 $$ = mlhs_add_star(mlhs_new(), Qnil); 05985 %*/ 05986 ;} 05987 break; 05988 05989 case 81: 05990 05991 /* Line 1464 of yacc.c */ 05992 #line 1538 "parse.y" 05993 { 05994 /*%%%*/ 05995 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node))); 05996 /*% 05997 $$ = mlhs_add_star(mlhs_new(), Qnil); 05998 %*/ 05999 ;} 06000 break; 06001 06002 case 83: 06003 06004 /* Line 1464 of yacc.c */ 06005 #line 1549 "parse.y" 06006 { 06007 /*%%%*/ 06008 (yyval.node) = (yyvsp[(2) - (3)].node); 06009 /*% 06010 $$ = dispatch1(mlhs_paren, $2); 06011 %*/ 06012 ;} 06013 break; 06014 06015 case 84: 06016 06017 /* Line 1464 of yacc.c */ 06018 #line 1559 "parse.y" 06019 { 06020 /*%%%*/ 06021 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node)); 06022 /*% 06023 $$ = mlhs_add(mlhs_new(), $1); 06024 %*/ 06025 ;} 06026 break; 06027 06028 case 85: 06029 06030 /* Line 1464 of yacc.c */ 06031 #line 1567 "parse.y" 06032 { 06033 /*%%%*/ 06034 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node)); 06035 /*% 06036 $$ = mlhs_add($1, $2); 06037 %*/ 06038 ;} 06039 break; 06040 06041 case 86: 06042 06043 /* Line 1464 of yacc.c */ 06044 #line 1577 "parse.y" 06045 { 06046 /*%%%*/ 06047 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 06048 /*% 06049 $$ = mlhs_add(mlhs_new(), $1); 06050 %*/ 06051 ;} 06052 break; 06053 06054 case 87: 06055 06056 /* Line 1464 of yacc.c */ 06057 #line 1585 "parse.y" 06058 { 06059 /*%%%*/ 06060 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06061 /*% 06062 $$ = mlhs_add($1, $3); 06063 %*/ 06064 ;} 06065 break; 06066 06067 case 88: 06068 06069 /* Line 1464 of yacc.c */ 06070 #line 1595 "parse.y" 06071 { 06072 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 06073 ;} 06074 break; 06075 06076 case 89: 06077 06078 /* Line 1464 of yacc.c */ 06079 #line 1599 "parse.y" 06080 { 06081 /*%%%*/ 06082 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)); 06083 /*% 06084 $$ = dispatch2(aref_field, $1, escape_Qundef($3)); 06085 %*/ 06086 ;} 06087 break; 06088 06089 case 90: 06090 06091 /* Line 1464 of yacc.c */ 06092 #line 1607 "parse.y" 06093 { 06094 /*%%%*/ 06095 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06096 /*% 06097 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06098 %*/ 06099 ;} 06100 break; 06101 06102 case 91: 06103 06104 /* Line 1464 of yacc.c */ 06105 #line 1615 "parse.y" 06106 { 06107 /*%%%*/ 06108 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06109 /*% 06110 $$ = dispatch2(const_path_field, $1, $3); 06111 %*/ 06112 ;} 06113 break; 06114 06115 case 92: 06116 06117 /* Line 1464 of yacc.c */ 06118 #line 1623 "parse.y" 06119 { 06120 /*%%%*/ 06121 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06122 /*% 06123 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06124 %*/ 06125 ;} 06126 break; 06127 06128 case 93: 06129 06130 /* Line 1464 of yacc.c */ 06131 #line 1631 "parse.y" 06132 { 06133 /*%%%*/ 06134 if (in_def || in_single) 06135 yyerror("dynamic constant assignment"); 06136 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id))); 06137 /*% 06138 if (in_def || in_single) 06139 yyerror("dynamic constant assignment"); 06140 $$ = dispatch2(const_path_field, $1, $3); 06141 %*/ 06142 ;} 06143 break; 06144 06145 case 94: 06146 06147 /* Line 1464 of yacc.c */ 06148 #line 1643 "parse.y" 06149 { 06150 /*%%%*/ 06151 if (in_def || in_single) 06152 yyerror("dynamic constant assignment"); 06153 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id))); 06154 /*% 06155 $$ = dispatch1(top_const_field, $2); 06156 %*/ 06157 ;} 06158 break; 06159 06160 case 95: 06161 06162 /* Line 1464 of yacc.c */ 06163 #line 1653 "parse.y" 06164 { 06165 /*%%%*/ 06166 rb_backref_error((yyvsp[(1) - (1)].node)); 06167 (yyval.node) = NEW_BEGIN(0); 06168 /*% 06169 $$ = dispatch1(var_field, $1); 06170 $$ = dispatch1(assign_error, $$); 06171 %*/ 06172 ;} 06173 break; 06174 06175 case 96: 06176 06177 /* Line 1464 of yacc.c */ 06178 #line 1665 "parse.y" 06179 { 06180 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 06181 /*%%%*/ 06182 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0); 06183 /*% 06184 $$ = dispatch1(var_field, $$); 06185 %*/ 06186 ;} 06187 break; 06188 06189 case 97: 06190 06191 /* Line 1464 of yacc.c */ 06192 #line 1674 "parse.y" 06193 { 06194 /*%%%*/ 06195 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)); 06196 /*% 06197 $$ = dispatch2(aref_field, $1, escape_Qundef($3)); 06198 %*/ 06199 ;} 06200 break; 06201 06202 case 98: 06203 06204 /* Line 1464 of yacc.c */ 06205 #line 1682 "parse.y" 06206 { 06207 /*%%%*/ 06208 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06209 /*% 06210 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06211 %*/ 06212 ;} 06213 break; 06214 06215 case 99: 06216 06217 /* Line 1464 of yacc.c */ 06218 #line 1690 "parse.y" 06219 { 06220 /*%%%*/ 06221 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06222 /*% 06223 $$ = dispatch3(field, $1, ripper_intern("::"), $3); 06224 %*/ 06225 ;} 06226 break; 06227 06228 case 100: 06229 06230 /* Line 1464 of yacc.c */ 06231 #line 1698 "parse.y" 06232 { 06233 /*%%%*/ 06234 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06235 /*% 06236 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06237 %*/ 06238 ;} 06239 break; 06240 06241 case 101: 06242 06243 /* Line 1464 of yacc.c */ 06244 #line 1706 "parse.y" 06245 { 06246 /*%%%*/ 06247 if (in_def || in_single) 06248 yyerror("dynamic constant assignment"); 06249 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id))); 06250 /*% 06251 $$ = dispatch2(const_path_field, $1, $3); 06252 if (in_def || in_single) { 06253 $$ = dispatch1(assign_error, $$); 06254 } 06255 %*/ 06256 ;} 06257 break; 06258 06259 case 102: 06260 06261 /* Line 1464 of yacc.c */ 06262 #line 1719 "parse.y" 06263 { 06264 /*%%%*/ 06265 if (in_def || in_single) 06266 yyerror("dynamic constant assignment"); 06267 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id))); 06268 /*% 06269 $$ = dispatch1(top_const_field, $2); 06270 if (in_def || in_single) { 06271 $$ = dispatch1(assign_error, $$); 06272 } 06273 %*/ 06274 ;} 06275 break; 06276 06277 case 103: 06278 06279 /* Line 1464 of yacc.c */ 06280 #line 1732 "parse.y" 06281 { 06282 /*%%%*/ 06283 rb_backref_error((yyvsp[(1) - (1)].node)); 06284 (yyval.node) = NEW_BEGIN(0); 06285 /*% 06286 $$ = dispatch1(assign_error, $1); 06287 %*/ 06288 ;} 06289 break; 06290 06291 case 104: 06292 06293 /* Line 1464 of yacc.c */ 06294 #line 1743 "parse.y" 06295 { 06296 /*%%%*/ 06297 yyerror("class/module name must be CONSTANT"); 06298 /*% 06299 $$ = dispatch1(class_name_error, $1); 06300 %*/ 06301 ;} 06302 break; 06303 06304 case 106: 06305 06306 /* Line 1464 of yacc.c */ 06307 #line 1754 "parse.y" 06308 { 06309 /*%%%*/ 06310 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id)); 06311 /*% 06312 $$ = dispatch1(top_const_ref, $2); 06313 %*/ 06314 ;} 06315 break; 06316 06317 case 107: 06318 06319 /* Line 1464 of yacc.c */ 06320 #line 1762 "parse.y" 06321 { 06322 /*%%%*/ 06323 (yyval.node) = NEW_COLON2(0, (yyval.node)); 06324 /*% 06325 $$ = dispatch1(const_ref, $1); 06326 %*/ 06327 ;} 06328 break; 06329 06330 case 108: 06331 06332 /* Line 1464 of yacc.c */ 06333 #line 1770 "parse.y" 06334 { 06335 /*%%%*/ 06336 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06337 /*% 06338 $$ = dispatch2(const_path_ref, $1, $3); 06339 %*/ 06340 ;} 06341 break; 06342 06343 case 112: 06344 06345 /* Line 1464 of yacc.c */ 06346 #line 1783 "parse.y" 06347 { 06348 lex_state = EXPR_ENDFN; 06349 (yyval.id) = (yyvsp[(1) - (1)].id); 06350 ;} 06351 break; 06352 06353 case 113: 06354 06355 /* Line 1464 of yacc.c */ 06356 #line 1788 "parse.y" 06357 { 06358 lex_state = EXPR_ENDFN; 06359 /*%%%*/ 06360 (yyval.id) = (yyvsp[(1) - (1)].id); 06361 /*% 06362 $$ = $1; 06363 %*/ 06364 ;} 06365 break; 06366 06367 case 116: 06368 06369 /* Line 1464 of yacc.c */ 06370 #line 1803 "parse.y" 06371 { 06372 /*%%%*/ 06373 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id))); 06374 /*% 06375 $$ = dispatch1(symbol_literal, $1); 06376 %*/ 06377 ;} 06378 break; 06379 06380 case 118: 06381 06382 /* Line 1464 of yacc.c */ 06383 #line 1814 "parse.y" 06384 { 06385 /*%%%*/ 06386 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node)); 06387 /*% 06388 $$ = rb_ary_new3(1, $1); 06389 %*/ 06390 ;} 06391 break; 06392 06393 case 119: 06394 06395 /* Line 1464 of yacc.c */ 06396 #line 1821 "parse.y" 06397 {lex_state = EXPR_FNAME;;} 06398 break; 06399 06400 case 120: 06401 06402 /* Line 1464 of yacc.c */ 06403 #line 1822 "parse.y" 06404 { 06405 /*%%%*/ 06406 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node))); 06407 /*% 06408 rb_ary_push($1, $4); 06409 %*/ 06410 ;} 06411 break; 06412 06413 case 121: 06414 06415 /* Line 1464 of yacc.c */ 06416 #line 1831 "parse.y" 06417 { ifndef_ripper((yyval.id) = '|'); ;} 06418 break; 06419 06420 case 122: 06421 06422 /* Line 1464 of yacc.c */ 06423 #line 1832 "parse.y" 06424 { ifndef_ripper((yyval.id) = '^'); ;} 06425 break; 06426 06427 case 123: 06428 06429 /* Line 1464 of yacc.c */ 06430 #line 1833 "parse.y" 06431 { ifndef_ripper((yyval.id) = '&'); ;} 06432 break; 06433 06434 case 124: 06435 06436 /* Line 1464 of yacc.c */ 06437 #line 1834 "parse.y" 06438 { ifndef_ripper((yyval.id) = tCMP); ;} 06439 break; 06440 06441 case 125: 06442 06443 /* Line 1464 of yacc.c */ 06444 #line 1835 "parse.y" 06445 { ifndef_ripper((yyval.id) = tEQ); ;} 06446 break; 06447 06448 case 126: 06449 06450 /* Line 1464 of yacc.c */ 06451 #line 1836 "parse.y" 06452 { ifndef_ripper((yyval.id) = tEQQ); ;} 06453 break; 06454 06455 case 127: 06456 06457 /* Line 1464 of yacc.c */ 06458 #line 1837 "parse.y" 06459 { ifndef_ripper((yyval.id) = tMATCH); ;} 06460 break; 06461 06462 case 128: 06463 06464 /* Line 1464 of yacc.c */ 06465 #line 1838 "parse.y" 06466 { ifndef_ripper((yyval.id) = tNMATCH); ;} 06467 break; 06468 06469 case 129: 06470 06471 /* Line 1464 of yacc.c */ 06472 #line 1839 "parse.y" 06473 { ifndef_ripper((yyval.id) = '>'); ;} 06474 break; 06475 06476 case 130: 06477 06478 /* Line 1464 of yacc.c */ 06479 #line 1840 "parse.y" 06480 { ifndef_ripper((yyval.id) = tGEQ); ;} 06481 break; 06482 06483 case 131: 06484 06485 /* Line 1464 of yacc.c */ 06486 #line 1841 "parse.y" 06487 { ifndef_ripper((yyval.id) = '<'); ;} 06488 break; 06489 06490 case 132: 06491 06492 /* Line 1464 of yacc.c */ 06493 #line 1842 "parse.y" 06494 { ifndef_ripper((yyval.id) = tLEQ); ;} 06495 break; 06496 06497 case 133: 06498 06499 /* Line 1464 of yacc.c */ 06500 #line 1843 "parse.y" 06501 { ifndef_ripper((yyval.id) = tNEQ); ;} 06502 break; 06503 06504 case 134: 06505 06506 /* Line 1464 of yacc.c */ 06507 #line 1844 "parse.y" 06508 { ifndef_ripper((yyval.id) = tLSHFT); ;} 06509 break; 06510 06511 case 135: 06512 06513 /* Line 1464 of yacc.c */ 06514 #line 1845 "parse.y" 06515 { ifndef_ripper((yyval.id) = tRSHFT); ;} 06516 break; 06517 06518 case 136: 06519 06520 /* Line 1464 of yacc.c */ 06521 #line 1846 "parse.y" 06522 { ifndef_ripper((yyval.id) = '+'); ;} 06523 break; 06524 06525 case 137: 06526 06527 /* Line 1464 of yacc.c */ 06528 #line 1847 "parse.y" 06529 { ifndef_ripper((yyval.id) = '-'); ;} 06530 break; 06531 06532 case 138: 06533 06534 /* Line 1464 of yacc.c */ 06535 #line 1848 "parse.y" 06536 { ifndef_ripper((yyval.id) = '*'); ;} 06537 break; 06538 06539 case 139: 06540 06541 /* Line 1464 of yacc.c */ 06542 #line 1849 "parse.y" 06543 { ifndef_ripper((yyval.id) = '*'); ;} 06544 break; 06545 06546 case 140: 06547 06548 /* Line 1464 of yacc.c */ 06549 #line 1850 "parse.y" 06550 { ifndef_ripper((yyval.id) = '/'); ;} 06551 break; 06552 06553 case 141: 06554 06555 /* Line 1464 of yacc.c */ 06556 #line 1851 "parse.y" 06557 { ifndef_ripper((yyval.id) = '%'); ;} 06558 break; 06559 06560 case 142: 06561 06562 /* Line 1464 of yacc.c */ 06563 #line 1852 "parse.y" 06564 { ifndef_ripper((yyval.id) = tPOW); ;} 06565 break; 06566 06567 case 143: 06568 06569 /* Line 1464 of yacc.c */ 06570 #line 1853 "parse.y" 06571 { ifndef_ripper((yyval.id) = '!'); ;} 06572 break; 06573 06574 case 144: 06575 06576 /* Line 1464 of yacc.c */ 06577 #line 1854 "parse.y" 06578 { ifndef_ripper((yyval.id) = '~'); ;} 06579 break; 06580 06581 case 145: 06582 06583 /* Line 1464 of yacc.c */ 06584 #line 1855 "parse.y" 06585 { ifndef_ripper((yyval.id) = tUPLUS); ;} 06586 break; 06587 06588 case 146: 06589 06590 /* Line 1464 of yacc.c */ 06591 #line 1856 "parse.y" 06592 { ifndef_ripper((yyval.id) = tUMINUS); ;} 06593 break; 06594 06595 case 147: 06596 06597 /* Line 1464 of yacc.c */ 06598 #line 1857 "parse.y" 06599 { ifndef_ripper((yyval.id) = tAREF); ;} 06600 break; 06601 06602 case 148: 06603 06604 /* Line 1464 of yacc.c */ 06605 #line 1858 "parse.y" 06606 { ifndef_ripper((yyval.id) = tASET); ;} 06607 break; 06608 06609 case 149: 06610 06611 /* Line 1464 of yacc.c */ 06612 #line 1859 "parse.y" 06613 { ifndef_ripper((yyval.id) = '`'); ;} 06614 break; 06615 06616 case 191: 06617 06618 /* Line 1464 of yacc.c */ 06619 #line 1877 "parse.y" 06620 { 06621 /*%%%*/ 06622 value_expr((yyvsp[(3) - (3)].node)); 06623 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06624 /*% 06625 $$ = dispatch2(assign, $1, $3); 06626 %*/ 06627 ;} 06628 break; 06629 06630 case 192: 06631 06632 /* Line 1464 of yacc.c */ 06633 #line 1886 "parse.y" 06634 { 06635 /*%%%*/ 06636 value_expr((yyvsp[(3) - (5)].node)); 06637 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0); 06638 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node)); 06639 /*% 06640 $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5)); 06641 %*/ 06642 ;} 06643 break; 06644 06645 case 193: 06646 06647 /* Line 1464 of yacc.c */ 06648 #line 1896 "parse.y" 06649 { 06650 /*%%%*/ 06651 value_expr((yyvsp[(3) - (3)].node)); 06652 if ((yyvsp[(1) - (3)].node)) { 06653 ID vid = (yyvsp[(1) - (3)].node)->nd_vid; 06654 if ((yyvsp[(2) - (3)].id) == tOROP) { 06655 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 06656 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node)); 06657 if (is_asgn_or_id(vid)) { 06658 (yyval.node)->nd_aid = vid; 06659 } 06660 } 06661 else if ((yyvsp[(2) - (3)].id) == tANDOP) { 06662 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 06663 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node)); 06664 } 06665 else { 06666 (yyval.node) = (yyvsp[(1) - (3)].node); 06667 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node))); 06668 } 06669 } 06670 else { 06671 (yyval.node) = NEW_BEGIN(0); 06672 } 06673 /*% 06674 $$ = dispatch3(opassign, $1, $2, $3); 06675 %*/ 06676 ;} 06677 break; 06678 06679 case 194: 06680 06681 /* Line 1464 of yacc.c */ 06682 #line 1925 "parse.y" 06683 { 06684 /*%%%*/ 06685 value_expr((yyvsp[(3) - (5)].node)); 06686 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0); 06687 if ((yyvsp[(1) - (5)].node)) { 06688 ID vid = (yyvsp[(1) - (5)].node)->nd_vid; 06689 if ((yyvsp[(2) - (5)].id) == tOROP) { 06690 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node); 06691 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node)); 06692 if (is_asgn_or_id(vid)) { 06693 (yyval.node)->nd_aid = vid; 06694 } 06695 } 06696 else if ((yyvsp[(2) - (5)].id) == tANDOP) { 06697 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node); 06698 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node)); 06699 } 06700 else { 06701 (yyval.node) = (yyvsp[(1) - (5)].node); 06702 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node))); 06703 } 06704 } 06705 else { 06706 (yyval.node) = NEW_BEGIN(0); 06707 } 06708 /*% 06709 $3 = dispatch2(rescue_mod, $3, $5); 06710 $$ = dispatch3(opassign, $1, $2, $3); 06711 %*/ 06712 ;} 06713 break; 06714 06715 case 195: 06716 06717 /* Line 1464 of yacc.c */ 06718 #line 1956 "parse.y" 06719 { 06720 /*%%%*/ 06721 NODE *args; 06722 06723 value_expr((yyvsp[(6) - (6)].node)); 06724 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY(); 06725 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) { 06726 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 06727 } 06728 else { 06729 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 06730 } 06731 if ((yyvsp[(5) - (6)].id) == tOROP) { 06732 (yyvsp[(5) - (6)].id) = 0; 06733 } 06734 else if ((yyvsp[(5) - (6)].id) == tANDOP) { 06735 (yyvsp[(5) - (6)].id) = 1; 06736 } 06737 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args); 06738 fixpos((yyval.node), (yyvsp[(1) - (6)].node)); 06739 /*% 06740 $1 = dispatch2(aref_field, $1, escape_Qundef($3)); 06741 $$ = dispatch3(opassign, $1, $5, $6); 06742 %*/ 06743 ;} 06744 break; 06745 06746 case 196: 06747 06748 /* Line 1464 of yacc.c */ 06749 #line 1982 "parse.y" 06750 { 06751 /*%%%*/ 06752 value_expr((yyvsp[(5) - (5)].node)); 06753 if ((yyvsp[(4) - (5)].id) == tOROP) { 06754 (yyvsp[(4) - (5)].id) = 0; 06755 } 06756 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 06757 (yyvsp[(4) - (5)].id) = 1; 06758 } 06759 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06760 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 06761 /*% 06762 $1 = dispatch3(field, $1, ripper_id2sym('.'), $3); 06763 $$ = dispatch3(opassign, $1, $4, $5); 06764 %*/ 06765 ;} 06766 break; 06767 06768 case 197: 06769 06770 /* Line 1464 of yacc.c */ 06771 #line 1999 "parse.y" 06772 { 06773 /*%%%*/ 06774 value_expr((yyvsp[(5) - (5)].node)); 06775 if ((yyvsp[(4) - (5)].id) == tOROP) { 06776 (yyvsp[(4) - (5)].id) = 0; 06777 } 06778 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 06779 (yyvsp[(4) - (5)].id) = 1; 06780 } 06781 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06782 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 06783 /*% 06784 $1 = dispatch3(field, $1, ripper_id2sym('.'), $3); 06785 $$ = dispatch3(opassign, $1, $4, $5); 06786 %*/ 06787 ;} 06788 break; 06789 06790 case 198: 06791 06792 /* Line 1464 of yacc.c */ 06793 #line 2016 "parse.y" 06794 { 06795 /*%%%*/ 06796 value_expr((yyvsp[(5) - (5)].node)); 06797 if ((yyvsp[(4) - (5)].id) == tOROP) { 06798 (yyvsp[(4) - (5)].id) = 0; 06799 } 06800 else if ((yyvsp[(4) - (5)].id) == tANDOP) { 06801 (yyvsp[(4) - (5)].id) = 1; 06802 } 06803 (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06804 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 06805 /*% 06806 $1 = dispatch3(field, $1, ripper_intern("::"), $3); 06807 $$ = dispatch3(opassign, $1, $4, $5); 06808 %*/ 06809 ;} 06810 break; 06811 06812 case 199: 06813 06814 /* Line 1464 of yacc.c */ 06815 #line 2033 "parse.y" 06816 { 06817 /*%%%*/ 06818 yyerror("constant re-assignment"); 06819 (yyval.node) = NEW_BEGIN(0); 06820 /*% 06821 $$ = dispatch2(const_path_field, $1, $3); 06822 $$ = dispatch3(opassign, $$, $4, $5); 06823 $$ = dispatch1(assign_error, $$); 06824 %*/ 06825 ;} 06826 break; 06827 06828 case 200: 06829 06830 /* Line 1464 of yacc.c */ 06831 #line 2044 "parse.y" 06832 { 06833 /*%%%*/ 06834 yyerror("constant re-assignment"); 06835 (yyval.node) = NEW_BEGIN(0); 06836 /*% 06837 $$ = dispatch1(top_const_field, $2); 06838 $$ = dispatch3(opassign, $$, $3, $4); 06839 $$ = dispatch1(assign_error, $$); 06840 %*/ 06841 ;} 06842 break; 06843 06844 case 201: 06845 06846 /* Line 1464 of yacc.c */ 06847 #line 2055 "parse.y" 06848 { 06849 /*%%%*/ 06850 rb_backref_error((yyvsp[(1) - (3)].node)); 06851 (yyval.node) = NEW_BEGIN(0); 06852 /*% 06853 $$ = dispatch1(var_field, $1); 06854 $$ = dispatch3(opassign, $$, $2, $3); 06855 $$ = dispatch1(assign_error, $$); 06856 %*/ 06857 ;} 06858 break; 06859 06860 case 202: 06861 06862 /* Line 1464 of yacc.c */ 06863 #line 2066 "parse.y" 06864 { 06865 /*%%%*/ 06866 value_expr((yyvsp[(1) - (3)].node)); 06867 value_expr((yyvsp[(3) - (3)].node)); 06868 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06869 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) && 06870 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) { 06871 deferred_nodes = list_append(deferred_nodes, (yyval.node)); 06872 } 06873 /*% 06874 $$ = dispatch2(dot2, $1, $3); 06875 %*/ 06876 ;} 06877 break; 06878 06879 case 203: 06880 06881 /* Line 1464 of yacc.c */ 06882 #line 2080 "parse.y" 06883 { 06884 /*%%%*/ 06885 value_expr((yyvsp[(1) - (3)].node)); 06886 value_expr((yyvsp[(3) - (3)].node)); 06887 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06888 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) && 06889 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) { 06890 deferred_nodes = list_append(deferred_nodes, (yyval.node)); 06891 } 06892 /*% 06893 $$ = dispatch2(dot3, $1, $3); 06894 %*/ 06895 ;} 06896 break; 06897 06898 case 204: 06899 06900 /* Line 1464 of yacc.c */ 06901 #line 2094 "parse.y" 06902 { 06903 /*%%%*/ 06904 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node)); 06905 /*% 06906 $$ = dispatch3(binary, $1, ID2SYM('+'), $3); 06907 %*/ 06908 ;} 06909 break; 06910 06911 case 205: 06912 06913 /* Line 1464 of yacc.c */ 06914 #line 2102 "parse.y" 06915 { 06916 /*%%%*/ 06917 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node)); 06918 /*% 06919 $$ = dispatch3(binary, $1, ID2SYM('-'), $3); 06920 %*/ 06921 ;} 06922 break; 06923 06924 case 206: 06925 06926 /* Line 1464 of yacc.c */ 06927 #line 2110 "parse.y" 06928 { 06929 /*%%%*/ 06930 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node)); 06931 /*% 06932 $$ = dispatch3(binary, $1, ID2SYM('*'), $3); 06933 %*/ 06934 ;} 06935 break; 06936 06937 case 207: 06938 06939 /* Line 1464 of yacc.c */ 06940 #line 2118 "parse.y" 06941 { 06942 /*%%%*/ 06943 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node)); 06944 /*% 06945 $$ = dispatch3(binary, $1, ID2SYM('/'), $3); 06946 %*/ 06947 ;} 06948 break; 06949 06950 case 208: 06951 06952 /* Line 1464 of yacc.c */ 06953 #line 2126 "parse.y" 06954 { 06955 /*%%%*/ 06956 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node)); 06957 /*% 06958 $$ = dispatch3(binary, $1, ID2SYM('%'), $3); 06959 %*/ 06960 ;} 06961 break; 06962 06963 case 209: 06964 06965 /* Line 1464 of yacc.c */ 06966 #line 2134 "parse.y" 06967 { 06968 /*%%%*/ 06969 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node)); 06970 /*% 06971 $$ = dispatch3(binary, $1, ripper_intern("**"), $3); 06972 %*/ 06973 ;} 06974 break; 06975 06976 case 210: 06977 06978 /* Line 1464 of yacc.c */ 06979 #line 2142 "parse.y" 06980 { 06981 /*%%%*/ 06982 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0); 06983 /*% 06984 $$ = dispatch3(binary, $2, ripper_intern("**"), $4); 06985 $$ = dispatch2(unary, ripper_intern("-@"), $$); 06986 %*/ 06987 ;} 06988 break; 06989 06990 case 211: 06991 06992 /* Line 1464 of yacc.c */ 06993 #line 2151 "parse.y" 06994 { 06995 /*%%%*/ 06996 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0); 06997 /*% 06998 $$ = dispatch3(binary, $2, ripper_intern("**"), $4); 06999 $$ = dispatch2(unary, ripper_intern("-@"), $$); 07000 %*/ 07001 ;} 07002 break; 07003 07004 case 212: 07005 07006 /* Line 1464 of yacc.c */ 07007 #line 2160 "parse.y" 07008 { 07009 /*%%%*/ 07010 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS); 07011 /*% 07012 $$ = dispatch2(unary, ripper_intern("+@"), $2); 07013 %*/ 07014 ;} 07015 break; 07016 07017 case 213: 07018 07019 /* Line 1464 of yacc.c */ 07020 #line 2168 "parse.y" 07021 { 07022 /*%%%*/ 07023 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS); 07024 /*% 07025 $$ = dispatch2(unary, ripper_intern("-@"), $2); 07026 %*/ 07027 ;} 07028 break; 07029 07030 case 214: 07031 07032 /* Line 1464 of yacc.c */ 07033 #line 2176 "parse.y" 07034 { 07035 /*%%%*/ 07036 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node)); 07037 /*% 07038 $$ = dispatch3(binary, $1, ID2SYM('|'), $3); 07039 %*/ 07040 ;} 07041 break; 07042 07043 case 215: 07044 07045 /* Line 1464 of yacc.c */ 07046 #line 2184 "parse.y" 07047 { 07048 /*%%%*/ 07049 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node)); 07050 /*% 07051 $$ = dispatch3(binary, $1, ID2SYM('^'), $3); 07052 %*/ 07053 ;} 07054 break; 07055 07056 case 216: 07057 07058 /* Line 1464 of yacc.c */ 07059 #line 2192 "parse.y" 07060 { 07061 /*%%%*/ 07062 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node)); 07063 /*% 07064 $$ = dispatch3(binary, $1, ID2SYM('&'), $3); 07065 %*/ 07066 ;} 07067 break; 07068 07069 case 217: 07070 07071 /* Line 1464 of yacc.c */ 07072 #line 2200 "parse.y" 07073 { 07074 /*%%%*/ 07075 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node)); 07076 /*% 07077 $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3); 07078 %*/ 07079 ;} 07080 break; 07081 07082 case 218: 07083 07084 /* Line 1464 of yacc.c */ 07085 #line 2208 "parse.y" 07086 { 07087 /*%%%*/ 07088 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node)); 07089 /*% 07090 $$ = dispatch3(binary, $1, ID2SYM('>'), $3); 07091 %*/ 07092 ;} 07093 break; 07094 07095 case 219: 07096 07097 /* Line 1464 of yacc.c */ 07098 #line 2216 "parse.y" 07099 { 07100 /*%%%*/ 07101 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node)); 07102 /*% 07103 $$ = dispatch3(binary, $1, ripper_intern(">="), $3); 07104 %*/ 07105 ;} 07106 break; 07107 07108 case 220: 07109 07110 /* Line 1464 of yacc.c */ 07111 #line 2224 "parse.y" 07112 { 07113 /*%%%*/ 07114 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node)); 07115 /*% 07116 $$ = dispatch3(binary, $1, ID2SYM('<'), $3); 07117 %*/ 07118 ;} 07119 break; 07120 07121 case 221: 07122 07123 /* Line 1464 of yacc.c */ 07124 #line 2232 "parse.y" 07125 { 07126 /*%%%*/ 07127 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node)); 07128 /*% 07129 $$ = dispatch3(binary, $1, ripper_intern("<="), $3); 07130 %*/ 07131 ;} 07132 break; 07133 07134 case 222: 07135 07136 /* Line 1464 of yacc.c */ 07137 #line 2240 "parse.y" 07138 { 07139 /*%%%*/ 07140 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node)); 07141 /*% 07142 $$ = dispatch3(binary, $1, ripper_intern("=="), $3); 07143 %*/ 07144 ;} 07145 break; 07146 07147 case 223: 07148 07149 /* Line 1464 of yacc.c */ 07150 #line 2248 "parse.y" 07151 { 07152 /*%%%*/ 07153 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node)); 07154 /*% 07155 $$ = dispatch3(binary, $1, ripper_intern("==="), $3); 07156 %*/ 07157 ;} 07158 break; 07159 07160 case 224: 07161 07162 /* Line 1464 of yacc.c */ 07163 #line 2256 "parse.y" 07164 { 07165 /*%%%*/ 07166 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node)); 07167 /*% 07168 $$ = dispatch3(binary, $1, ripper_intern("!="), $3); 07169 %*/ 07170 ;} 07171 break; 07172 07173 case 225: 07174 07175 /* Line 1464 of yacc.c */ 07176 #line 2264 "parse.y" 07177 { 07178 /*%%%*/ 07179 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07180 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) { 07181 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node)); 07182 } 07183 /*% 07184 $$ = dispatch3(binary, $1, ripper_intern("=~"), $3); 07185 %*/ 07186 ;} 07187 break; 07188 07189 case 226: 07190 07191 /* Line 1464 of yacc.c */ 07192 #line 2275 "parse.y" 07193 { 07194 /*%%%*/ 07195 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node)); 07196 /*% 07197 $$ = dispatch3(binary, $1, ripper_intern("!~"), $3); 07198 %*/ 07199 ;} 07200 break; 07201 07202 case 227: 07203 07204 /* Line 1464 of yacc.c */ 07205 #line 2283 "parse.y" 07206 { 07207 /*%%%*/ 07208 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!'); 07209 /*% 07210 $$ = dispatch2(unary, ID2SYM('!'), $2); 07211 %*/ 07212 ;} 07213 break; 07214 07215 case 228: 07216 07217 /* Line 1464 of yacc.c */ 07218 #line 2291 "parse.y" 07219 { 07220 /*%%%*/ 07221 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~'); 07222 /*% 07223 $$ = dispatch2(unary, ID2SYM('~'), $2); 07224 %*/ 07225 ;} 07226 break; 07227 07228 case 229: 07229 07230 /* Line 1464 of yacc.c */ 07231 #line 2299 "parse.y" 07232 { 07233 /*%%%*/ 07234 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node)); 07235 /*% 07236 $$ = dispatch3(binary, $1, ripper_intern("<<"), $3); 07237 %*/ 07238 ;} 07239 break; 07240 07241 case 230: 07242 07243 /* Line 1464 of yacc.c */ 07244 #line 2307 "parse.y" 07245 { 07246 /*%%%*/ 07247 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node)); 07248 /*% 07249 $$ = dispatch3(binary, $1, ripper_intern(">>"), $3); 07250 %*/ 07251 ;} 07252 break; 07253 07254 case 231: 07255 07256 /* Line 1464 of yacc.c */ 07257 #line 2315 "parse.y" 07258 { 07259 /*%%%*/ 07260 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07261 /*% 07262 $$ = dispatch3(binary, $1, ripper_intern("&&"), $3); 07263 %*/ 07264 ;} 07265 break; 07266 07267 case 232: 07268 07269 /* Line 1464 of yacc.c */ 07270 #line 2323 "parse.y" 07271 { 07272 /*%%%*/ 07273 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07274 /*% 07275 $$ = dispatch3(binary, $1, ripper_intern("||"), $3); 07276 %*/ 07277 ;} 07278 break; 07279 07280 case 233: 07281 07282 /* Line 1464 of yacc.c */ 07283 #line 2330 "parse.y" 07284 {in_defined = 1;;} 07285 break; 07286 07287 case 234: 07288 07289 /* Line 1464 of yacc.c */ 07290 #line 2331 "parse.y" 07291 { 07292 /*%%%*/ 07293 in_defined = 0; 07294 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node)); 07295 /*% 07296 in_defined = 0; 07297 $$ = dispatch1(defined, $4); 07298 %*/ 07299 ;} 07300 break; 07301 07302 case 235: 07303 07304 /* Line 1464 of yacc.c */ 07305 #line 2341 "parse.y" 07306 { 07307 /*%%%*/ 07308 value_expr((yyvsp[(1) - (6)].node)); 07309 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 07310 fixpos((yyval.node), (yyvsp[(1) - (6)].node)); 07311 /*% 07312 $$ = dispatch3(ifop, $1, $3, $6); 07313 %*/ 07314 ;} 07315 break; 07316 07317 case 236: 07318 07319 /* Line 1464 of yacc.c */ 07320 #line 2351 "parse.y" 07321 { 07322 (yyval.node) = (yyvsp[(1) - (1)].node); 07323 ;} 07324 break; 07325 07326 case 237: 07327 07328 /* Line 1464 of yacc.c */ 07329 #line 2357 "parse.y" 07330 { 07331 /*%%%*/ 07332 value_expr((yyvsp[(1) - (1)].node)); 07333 (yyval.node) = (yyvsp[(1) - (1)].node); 07334 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 07335 /*% 07336 $$ = $1; 07337 %*/ 07338 ;} 07339 break; 07340 07341 case 239: 07342 07343 /* Line 1464 of yacc.c */ 07344 #line 2370 "parse.y" 07345 { 07346 (yyval.node) = (yyvsp[(1) - (2)].node); 07347 ;} 07348 break; 07349 07350 case 240: 07351 07352 /* Line 1464 of yacc.c */ 07353 #line 2374 "parse.y" 07354 { 07355 /*%%%*/ 07356 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node))); 07357 /*% 07358 $$ = arg_add_assocs($1, $3); 07359 %*/ 07360 ;} 07361 break; 07362 07363 case 241: 07364 07365 /* Line 1464 of yacc.c */ 07366 #line 2382 "parse.y" 07367 { 07368 /*%%%*/ 07369 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node))); 07370 /*% 07371 $$ = arg_add_assocs(arg_new(), $1); 07372 %*/ 07373 ;} 07374 break; 07375 07376 case 242: 07377 07378 /* Line 1464 of yacc.c */ 07379 #line 2392 "parse.y" 07380 { 07381 /*%%%*/ 07382 (yyval.node) = (yyvsp[(2) - (3)].node); 07383 /*% 07384 $$ = dispatch1(arg_paren, escape_Qundef($2)); 07385 %*/ 07386 ;} 07387 break; 07388 07389 case 247: 07390 07391 /* Line 1464 of yacc.c */ 07392 #line 2410 "parse.y" 07393 { 07394 /*%%%*/ 07395 value_expr((yyvsp[(1) - (1)].node)); 07396 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 07397 /*% 07398 $$ = arg_add(arg_new(), $1); 07399 %*/ 07400 ;} 07401 break; 07402 07403 case 248: 07404 07405 /* Line 1464 of yacc.c */ 07406 #line 2419 "parse.y" 07407 { 07408 /*%%%*/ 07409 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 07410 /*% 07411 $$ = arg_add_optblock($1, $2); 07412 %*/ 07413 ;} 07414 break; 07415 07416 case 249: 07417 07418 /* Line 1464 of yacc.c */ 07419 #line 2427 "parse.y" 07420 { 07421 /*%%%*/ 07422 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node))); 07423 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node)); 07424 /*% 07425 $$ = arg_add_assocs(arg_new(), $1); 07426 $$ = arg_add_optblock($$, $2); 07427 %*/ 07428 ;} 07429 break; 07430 07431 case 250: 07432 07433 /* Line 1464 of yacc.c */ 07434 #line 2437 "parse.y" 07435 { 07436 /*%%%*/ 07437 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node))); 07438 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node)); 07439 /*% 07440 $$ = arg_add_optblock(arg_add_assocs($1, $3), $4); 07441 %*/ 07442 ;} 07443 break; 07444 07445 case 252: 07446 07447 /* Line 1464 of yacc.c */ 07448 #line 2454 "parse.y" 07449 { 07450 (yyval.val) = cmdarg_stack; 07451 CMDARG_PUSH(1); 07452 ;} 07453 break; 07454 07455 case 253: 07456 07457 /* Line 1464 of yacc.c */ 07458 #line 2459 "parse.y" 07459 { 07460 /* CMDARG_POP() */ 07461 cmdarg_stack = (yyvsp[(1) - (2)].val); 07462 (yyval.node) = (yyvsp[(2) - (2)].node); 07463 ;} 07464 break; 07465 07466 case 254: 07467 07468 /* Line 1464 of yacc.c */ 07469 #line 2467 "parse.y" 07470 { 07471 /*%%%*/ 07472 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node)); 07473 /*% 07474 $$ = $2; 07475 %*/ 07476 ;} 07477 break; 07478 07479 case 255: 07480 07481 /* Line 1464 of yacc.c */ 07482 #line 2477 "parse.y" 07483 { 07484 (yyval.node) = (yyvsp[(2) - (2)].node); 07485 ;} 07486 break; 07487 07488 case 256: 07489 07490 /* Line 1464 of yacc.c */ 07491 #line 2481 "parse.y" 07492 { 07493 (yyval.node) = 0; 07494 ;} 07495 break; 07496 07497 case 257: 07498 07499 /* Line 1464 of yacc.c */ 07500 #line 2485 "parse.y" 07501 { 07502 (yyval.node) = 0; 07503 ;} 07504 break; 07505 07506 case 258: 07507 07508 /* Line 1464 of yacc.c */ 07509 #line 2491 "parse.y" 07510 { 07511 /*%%%*/ 07512 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 07513 /*% 07514 $$ = arg_add(arg_new(), $1); 07515 %*/ 07516 ;} 07517 break; 07518 07519 case 259: 07520 07521 /* Line 1464 of yacc.c */ 07522 #line 2499 "parse.y" 07523 { 07524 /*%%%*/ 07525 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node)); 07526 /*% 07527 $$ = arg_add_star(arg_new(), $2); 07528 %*/ 07529 ;} 07530 break; 07531 07532 case 260: 07533 07534 /* Line 1464 of yacc.c */ 07535 #line 2507 "parse.y" 07536 { 07537 /*%%%*/ 07538 NODE *n1; 07539 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) { 07540 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node)); 07541 } 07542 else { 07543 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07544 } 07545 /*% 07546 $$ = arg_add($1, $3); 07547 %*/ 07548 ;} 07549 break; 07550 07551 case 261: 07552 07553 /* Line 1464 of yacc.c */ 07554 #line 2521 "parse.y" 07555 { 07556 /*%%%*/ 07557 NODE *n1; 07558 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) { 07559 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node)); 07560 } 07561 else { 07562 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); 07563 } 07564 /*% 07565 $$ = arg_add_star($1, $4); 07566 %*/ 07567 ;} 07568 break; 07569 07570 case 262: 07571 07572 /* Line 1464 of yacc.c */ 07573 #line 2537 "parse.y" 07574 { 07575 /*%%%*/ 07576 NODE *n1; 07577 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) { 07578 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node)); 07579 } 07580 else { 07581 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07582 } 07583 /*% 07584 $$ = mrhs_add(args2mrhs($1), $3); 07585 %*/ 07586 ;} 07587 break; 07588 07589 case 263: 07590 07591 /* Line 1464 of yacc.c */ 07592 #line 2551 "parse.y" 07593 { 07594 /*%%%*/ 07595 NODE *n1; 07596 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY && 07597 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) { 07598 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node)); 07599 } 07600 else { 07601 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); 07602 } 07603 /*% 07604 $$ = mrhs_add_star(args2mrhs($1), $4); 07605 %*/ 07606 ;} 07607 break; 07608 07609 case 264: 07610 07611 /* Line 1464 of yacc.c */ 07612 #line 2566 "parse.y" 07613 { 07614 /*%%%*/ 07615 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node)); 07616 /*% 07617 $$ = mrhs_add_star(mrhs_new(), $2); 07618 %*/ 07619 ;} 07620 break; 07621 07622 case 273: 07623 07624 /* Line 1464 of yacc.c */ 07625 #line 2584 "parse.y" 07626 { 07627 /*%%%*/ 07628 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0); 07629 /*% 07630 $$ = method_arg(dispatch1(fcall, $1), arg_new()); 07631 %*/ 07632 ;} 07633 break; 07634 07635 case 274: 07636 07637 /* Line 1464 of yacc.c */ 07638 #line 2592 "parse.y" 07639 { 07640 /*%%%*/ 07641 (yyval.num) = ruby_sourceline; 07642 /*% 07643 %*/ 07644 ;} 07645 break; 07646 07647 case 275: 07648 07649 /* Line 1464 of yacc.c */ 07650 #line 2600 "parse.y" 07651 { 07652 /*%%%*/ 07653 if ((yyvsp[(3) - (4)].node) == NULL) { 07654 (yyval.node) = NEW_NIL(); 07655 } 07656 else { 07657 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE || 07658 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE) 07659 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num)); 07660 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node)); 07661 } 07662 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num)); 07663 /*% 07664 $$ = dispatch1(begin, $3); 07665 %*/ 07666 ;} 07667 break; 07668 07669 case 276: 07670 07671 /* Line 1464 of yacc.c */ 07672 #line 2616 "parse.y" 07673 {lex_state = EXPR_ENDARG;;} 07674 break; 07675 07676 case 277: 07677 07678 /* Line 1464 of yacc.c */ 07679 #line 2617 "parse.y" 07680 { 07681 rb_warning0("(...) interpreted as grouped expression"); 07682 /*%%%*/ 07683 (yyval.node) = (yyvsp[(2) - (4)].node); 07684 /*% 07685 $$ = dispatch1(paren, $2); 07686 %*/ 07687 ;} 07688 break; 07689 07690 case 278: 07691 07692 /* Line 1464 of yacc.c */ 07693 #line 2626 "parse.y" 07694 { 07695 /*%%%*/ 07696 (yyval.node) = (yyvsp[(2) - (3)].node); 07697 /*% 07698 $$ = dispatch1(paren, $2); 07699 %*/ 07700 ;} 07701 break; 07702 07703 case 279: 07704 07705 /* Line 1464 of yacc.c */ 07706 #line 2634 "parse.y" 07707 { 07708 /*%%%*/ 07709 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 07710 /*% 07711 $$ = dispatch2(const_path_ref, $1, $3); 07712 %*/ 07713 ;} 07714 break; 07715 07716 case 280: 07717 07718 /* Line 1464 of yacc.c */ 07719 #line 2642 "parse.y" 07720 { 07721 /*%%%*/ 07722 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id)); 07723 /*% 07724 $$ = dispatch1(top_const_ref, $2); 07725 %*/ 07726 ;} 07727 break; 07728 07729 case 281: 07730 07731 /* Line 1464 of yacc.c */ 07732 #line 2650 "parse.y" 07733 { 07734 /*%%%*/ 07735 if ((yyvsp[(2) - (3)].node) == 0) { 07736 (yyval.node) = NEW_ZARRAY(); /* zero length array*/ 07737 } 07738 else { 07739 (yyval.node) = (yyvsp[(2) - (3)].node); 07740 } 07741 /*% 07742 $$ = dispatch1(array, escape_Qundef($2)); 07743 %*/ 07744 ;} 07745 break; 07746 07747 case 282: 07748 07749 /* Line 1464 of yacc.c */ 07750 #line 2663 "parse.y" 07751 { 07752 /*%%%*/ 07753 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node)); 07754 /*% 07755 $$ = dispatch1(hash, escape_Qundef($2)); 07756 %*/ 07757 ;} 07758 break; 07759 07760 case 283: 07761 07762 /* Line 1464 of yacc.c */ 07763 #line 2671 "parse.y" 07764 { 07765 /*%%%*/ 07766 (yyval.node) = NEW_RETURN(0); 07767 /*% 07768 $$ = dispatch0(return0); 07769 %*/ 07770 ;} 07771 break; 07772 07773 case 284: 07774 07775 /* Line 1464 of yacc.c */ 07776 #line 2679 "parse.y" 07777 { 07778 /*%%%*/ 07779 (yyval.node) = new_yield((yyvsp[(3) - (4)].node)); 07780 /*% 07781 $$ = dispatch1(yield, dispatch1(paren, $3)); 07782 %*/ 07783 ;} 07784 break; 07785 07786 case 285: 07787 07788 /* Line 1464 of yacc.c */ 07789 #line 2687 "parse.y" 07790 { 07791 /*%%%*/ 07792 (yyval.node) = NEW_YIELD(0, Qfalse); 07793 /*% 07794 $$ = dispatch1(yield, dispatch1(paren, arg_new())); 07795 %*/ 07796 ;} 07797 break; 07798 07799 case 286: 07800 07801 /* Line 1464 of yacc.c */ 07802 #line 2695 "parse.y" 07803 { 07804 /*%%%*/ 07805 (yyval.node) = NEW_YIELD(0, Qfalse); 07806 /*% 07807 $$ = dispatch0(yield0); 07808 %*/ 07809 ;} 07810 break; 07811 07812 case 287: 07813 07814 /* Line 1464 of yacc.c */ 07815 #line 2702 "parse.y" 07816 {in_defined = 1;;} 07817 break; 07818 07819 case 288: 07820 07821 /* Line 1464 of yacc.c */ 07822 #line 2703 "parse.y" 07823 { 07824 /*%%%*/ 07825 in_defined = 0; 07826 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node)); 07827 /*% 07828 in_defined = 0; 07829 $$ = dispatch1(defined, $5); 07830 %*/ 07831 ;} 07832 break; 07833 07834 case 289: 07835 07836 /* Line 1464 of yacc.c */ 07837 #line 2713 "parse.y" 07838 { 07839 /*%%%*/ 07840 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!'); 07841 /*% 07842 $$ = dispatch2(unary, ripper_intern("not"), $3); 07843 %*/ 07844 ;} 07845 break; 07846 07847 case 290: 07848 07849 /* Line 1464 of yacc.c */ 07850 #line 2721 "parse.y" 07851 { 07852 /*%%%*/ 07853 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!'); 07854 /*% 07855 $$ = dispatch2(unary, ripper_intern("not"), Qnil); 07856 %*/ 07857 ;} 07858 break; 07859 07860 case 291: 07861 07862 /* Line 1464 of yacc.c */ 07863 #line 2729 "parse.y" 07864 { 07865 /*%%%*/ 07866 (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0); 07867 (yyval.node) = (yyvsp[(2) - (2)].node); 07868 fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node)); 07869 /*% 07870 $$ = method_arg(dispatch1(fcall, $1), arg_new()); 07871 $$ = method_add_block($$, $2); 07872 %*/ 07873 ;} 07874 break; 07875 07876 case 293: 07877 07878 /* Line 1464 of yacc.c */ 07879 #line 2741 "parse.y" 07880 { 07881 /*%%%*/ 07882 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node)); 07883 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node); 07884 (yyval.node) = (yyvsp[(2) - (2)].node); 07885 fixpos((yyval.node), (yyvsp[(1) - (2)].node)); 07886 /*% 07887 $$ = method_add_block($1, $2); 07888 %*/ 07889 ;} 07890 break; 07891 07892 case 294: 07893 07894 /* Line 1464 of yacc.c */ 07895 #line 2752 "parse.y" 07896 { 07897 (yyval.node) = (yyvsp[(2) - (2)].node); 07898 ;} 07899 break; 07900 07901 case 295: 07902 07903 /* Line 1464 of yacc.c */ 07904 #line 2759 "parse.y" 07905 { 07906 /*%%%*/ 07907 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node)); 07908 fixpos((yyval.node), (yyvsp[(2) - (6)].node)); 07909 /*% 07910 $$ = dispatch3(if, $2, $4, escape_Qundef($5)); 07911 %*/ 07912 ;} 07913 break; 07914 07915 case 296: 07916 07917 /* Line 1464 of yacc.c */ 07918 #line 2771 "parse.y" 07919 { 07920 /*%%%*/ 07921 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node)); 07922 fixpos((yyval.node), (yyvsp[(2) - (6)].node)); 07923 /*% 07924 $$ = dispatch3(unless, $2, $4, escape_Qundef($5)); 07925 %*/ 07926 ;} 07927 break; 07928 07929 case 297: 07930 07931 /* Line 1464 of yacc.c */ 07932 #line 2779 "parse.y" 07933 {COND_PUSH(1);;} 07934 break; 07935 07936 case 298: 07937 07938 /* Line 1464 of yacc.c */ 07939 #line 2779 "parse.y" 07940 {COND_POP();;} 07941 break; 07942 07943 case 299: 07944 07945 /* Line 1464 of yacc.c */ 07946 #line 2782 "parse.y" 07947 { 07948 /*%%%*/ 07949 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1); 07950 fixpos((yyval.node), (yyvsp[(3) - (7)].node)); 07951 /*% 07952 $$ = dispatch2(while, $3, $6); 07953 %*/ 07954 ;} 07955 break; 07956 07957 case 300: 07958 07959 /* Line 1464 of yacc.c */ 07960 #line 2790 "parse.y" 07961 {COND_PUSH(1);;} 07962 break; 07963 07964 case 301: 07965 07966 /* Line 1464 of yacc.c */ 07967 #line 2790 "parse.y" 07968 {COND_POP();;} 07969 break; 07970 07971 case 302: 07972 07973 /* Line 1464 of yacc.c */ 07974 #line 2793 "parse.y" 07975 { 07976 /*%%%*/ 07977 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1); 07978 fixpos((yyval.node), (yyvsp[(3) - (7)].node)); 07979 /*% 07980 $$ = dispatch2(until, $3, $6); 07981 %*/ 07982 ;} 07983 break; 07984 07985 case 303: 07986 07987 /* Line 1464 of yacc.c */ 07988 #line 2804 "parse.y" 07989 { 07990 /*%%%*/ 07991 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node)); 07992 fixpos((yyval.node), (yyvsp[(2) - (5)].node)); 07993 /*% 07994 $$ = dispatch2(case, $2, $4); 07995 %*/ 07996 ;} 07997 break; 07998 07999 case 304: 08000 08001 /* Line 1464 of yacc.c */ 08002 #line 2813 "parse.y" 08003 { 08004 /*%%%*/ 08005 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node)); 08006 /*% 08007 $$ = dispatch2(case, Qnil, $3); 08008 %*/ 08009 ;} 08010 break; 08011 08012 case 305: 08013 08014 /* Line 1464 of yacc.c */ 08015 #line 2821 "parse.y" 08016 {COND_PUSH(1);;} 08017 break; 08018 08019 case 306: 08020 08021 /* Line 1464 of yacc.c */ 08022 #line 2823 "parse.y" 08023 {COND_POP();;} 08024 break; 08025 08026 case 307: 08027 08028 /* Line 1464 of yacc.c */ 08029 #line 2826 "parse.y" 08030 { 08031 /*%%%*/ 08032 /* 08033 * for a, b, c in e 08034 * #=> 08035 * e.each{|*x| a, b, c = x 08036 * 08037 * for a in e 08038 * #=> 08039 * e.each{|x| a, = x} 08040 */ 08041 ID id = internal_id(); 08042 ID *tbl = ALLOC_N(ID, 2); 08043 NODE *m = NEW_ARGS_AUX(0, 0); 08044 NODE *args, *scope; 08045 08046 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) { 08047 /* if args.length == 1 && args[0].kind_of?(Array) 08048 * args = args[0] 08049 * end 08050 */ 08051 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1))); 08052 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0))); 08053 m->nd_next = block_append( 08054 NEW_IF( 08055 NEW_NODE(NODE_AND, 08056 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0), 08057 rb_intern("=="), one), 08058 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero), 08059 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))), 08060 0), 08061 NEW_DASGN_CURR(id, 08062 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)), 08063 0), 08064 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id))); 08065 08066 args = new_args(m, 0, id, 0, 0); 08067 } 08068 else { 08069 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN || 08070 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN || 08071 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) { 08072 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id); 08073 m->nd_plen = 1; 08074 m->nd_next = (yyvsp[(2) - (9)].node); 08075 args = new_args(m, 0, 0, 0, 0); 08076 } 08077 else { 08078 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id)); 08079 args = new_args(m, 0, id, 0, 0); 08080 } 08081 } 08082 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args); 08083 tbl[0] = 1; tbl[1] = id; 08084 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope); 08085 fixpos((yyval.node), (yyvsp[(2) - (9)].node)); 08086 /*% 08087 $$ = dispatch3(for, $2, $5, $8); 08088 %*/ 08089 ;} 08090 break; 08091 08092 case 308: 08093 08094 /* Line 1464 of yacc.c */ 08095 #line 2887 "parse.y" 08096 { 08097 if (in_def || in_single) 08098 yyerror("class definition in method body"); 08099 local_push(0); 08100 /*%%%*/ 08101 (yyval.num) = ruby_sourceline; 08102 /*% 08103 %*/ 08104 ;} 08105 break; 08106 08107 case 309: 08108 08109 /* Line 1464 of yacc.c */ 08110 #line 2898 "parse.y" 08111 { 08112 /*%%%*/ 08113 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node)); 08114 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num)); 08115 /*% 08116 $$ = dispatch3(class, $2, $3, $5); 08117 %*/ 08118 local_pop(); 08119 ;} 08120 break; 08121 08122 case 310: 08123 08124 /* Line 1464 of yacc.c */ 08125 #line 2908 "parse.y" 08126 { 08127 (yyval.num) = in_def; 08128 in_def = 0; 08129 ;} 08130 break; 08131 08132 case 311: 08133 08134 /* Line 1464 of yacc.c */ 08135 #line 2913 "parse.y" 08136 { 08137 (yyval.num) = in_single; 08138 in_single = 0; 08139 local_push(0); 08140 ;} 08141 break; 08142 08143 case 312: 08144 08145 /* Line 1464 of yacc.c */ 08146 #line 2920 "parse.y" 08147 { 08148 /*%%%*/ 08149 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node)); 08150 fixpos((yyval.node), (yyvsp[(3) - (8)].node)); 08151 /*% 08152 $$ = dispatch2(sclass, $3, $7); 08153 %*/ 08154 local_pop(); 08155 in_def = (yyvsp[(4) - (8)].num); 08156 in_single = (yyvsp[(6) - (8)].num); 08157 ;} 08158 break; 08159 08160 case 313: 08161 08162 /* Line 1464 of yacc.c */ 08163 #line 2932 "parse.y" 08164 { 08165 if (in_def || in_single) 08166 yyerror("module definition in method body"); 08167 local_push(0); 08168 /*%%%*/ 08169 (yyval.num) = ruby_sourceline; 08170 /*% 08171 %*/ 08172 ;} 08173 break; 08174 08175 case 314: 08176 08177 /* Line 1464 of yacc.c */ 08178 #line 2943 "parse.y" 08179 { 08180 /*%%%*/ 08181 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node)); 08182 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num)); 08183 /*% 08184 $$ = dispatch2(module, $2, $4); 08185 %*/ 08186 local_pop(); 08187 ;} 08188 break; 08189 08190 case 315: 08191 08192 /* Line 1464 of yacc.c */ 08193 #line 2953 "parse.y" 08194 { 08195 (yyval.id) = cur_mid; 08196 cur_mid = (yyvsp[(2) - (2)].id); 08197 in_def++; 08198 local_push(0); 08199 ;} 08200 break; 08201 08202 case 316: 08203 08204 /* Line 1464 of yacc.c */ 08205 #line 2962 "parse.y" 08206 { 08207 /*%%%*/ 08208 NODE *body = remove_begin((yyvsp[(5) - (6)].node)); 08209 reduce_nodes(&body); 08210 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE); 08211 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num)); 08212 /*% 08213 $$ = dispatch3(def, $2, $4, $5); 08214 %*/ 08215 local_pop(); 08216 in_def--; 08217 cur_mid = (yyvsp[(3) - (6)].id); 08218 ;} 08219 break; 08220 08221 case 317: 08222 08223 /* Line 1464 of yacc.c */ 08224 #line 2975 "parse.y" 08225 {lex_state = EXPR_FNAME;;} 08226 break; 08227 08228 case 318: 08229 08230 /* Line 1464 of yacc.c */ 08231 #line 2976 "parse.y" 08232 { 08233 in_single++; 08234 lex_state = EXPR_ENDFN; /* force for args */ 08235 local_push(0); 08236 ;} 08237 break; 08238 08239 case 319: 08240 08241 /* Line 1464 of yacc.c */ 08242 #line 2984 "parse.y" 08243 { 08244 /*%%%*/ 08245 NODE *body = remove_begin((yyvsp[(8) - (9)].node)); 08246 reduce_nodes(&body); 08247 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body); 08248 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num)); 08249 /*% 08250 $$ = dispatch5(defs, $2, $3, $5, $7, $8); 08251 %*/ 08252 local_pop(); 08253 in_single--; 08254 ;} 08255 break; 08256 08257 case 320: 08258 08259 /* Line 1464 of yacc.c */ 08260 #line 2997 "parse.y" 08261 { 08262 /*%%%*/ 08263 (yyval.node) = NEW_BREAK(0); 08264 /*% 08265 $$ = dispatch1(break, arg_new()); 08266 %*/ 08267 ;} 08268 break; 08269 08270 case 321: 08271 08272 /* Line 1464 of yacc.c */ 08273 #line 3005 "parse.y" 08274 { 08275 /*%%%*/ 08276 (yyval.node) = NEW_NEXT(0); 08277 /*% 08278 $$ = dispatch1(next, arg_new()); 08279 %*/ 08280 ;} 08281 break; 08282 08283 case 322: 08284 08285 /* Line 1464 of yacc.c */ 08286 #line 3013 "parse.y" 08287 { 08288 /*%%%*/ 08289 (yyval.node) = NEW_REDO(); 08290 /*% 08291 $$ = dispatch0(redo); 08292 %*/ 08293 ;} 08294 break; 08295 08296 case 323: 08297 08298 /* Line 1464 of yacc.c */ 08299 #line 3021 "parse.y" 08300 { 08301 /*%%%*/ 08302 (yyval.node) = NEW_RETRY(); 08303 /*% 08304 $$ = dispatch0(retry); 08305 %*/ 08306 ;} 08307 break; 08308 08309 case 324: 08310 08311 /* Line 1464 of yacc.c */ 08312 #line 3031 "parse.y" 08313 { 08314 /*%%%*/ 08315 value_expr((yyvsp[(1) - (1)].node)); 08316 (yyval.node) = (yyvsp[(1) - (1)].node); 08317 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 08318 /*% 08319 $$ = $1; 08320 %*/ 08321 ;} 08322 break; 08323 08324 case 325: 08325 08326 /* Line 1464 of yacc.c */ 08327 #line 3043 "parse.y" 08328 { 08329 token_info_push("begin"); 08330 ;} 08331 break; 08332 08333 case 326: 08334 08335 /* Line 1464 of yacc.c */ 08336 #line 3049 "parse.y" 08337 { 08338 token_info_push("if"); 08339 ;} 08340 break; 08341 08342 case 327: 08343 08344 /* Line 1464 of yacc.c */ 08345 #line 3055 "parse.y" 08346 { 08347 token_info_push("unless"); 08348 ;} 08349 break; 08350 08351 case 328: 08352 08353 /* Line 1464 of yacc.c */ 08354 #line 3061 "parse.y" 08355 { 08356 token_info_push("while"); 08357 ;} 08358 break; 08359 08360 case 329: 08361 08362 /* Line 1464 of yacc.c */ 08363 #line 3067 "parse.y" 08364 { 08365 token_info_push("until"); 08366 ;} 08367 break; 08368 08369 case 330: 08370 08371 /* Line 1464 of yacc.c */ 08372 #line 3073 "parse.y" 08373 { 08374 token_info_push("case"); 08375 ;} 08376 break; 08377 08378 case 331: 08379 08380 /* Line 1464 of yacc.c */ 08381 #line 3079 "parse.y" 08382 { 08383 token_info_push("for"); 08384 ;} 08385 break; 08386 08387 case 332: 08388 08389 /* Line 1464 of yacc.c */ 08390 #line 3085 "parse.y" 08391 { 08392 token_info_push("class"); 08393 ;} 08394 break; 08395 08396 case 333: 08397 08398 /* Line 1464 of yacc.c */ 08399 #line 3091 "parse.y" 08400 { 08401 token_info_push("module"); 08402 ;} 08403 break; 08404 08405 case 334: 08406 08407 /* Line 1464 of yacc.c */ 08408 #line 3097 "parse.y" 08409 { 08410 token_info_push("def"); 08411 /*%%%*/ 08412 (yyval.num) = ruby_sourceline; 08413 /*% 08414 %*/ 08415 ;} 08416 break; 08417 08418 case 335: 08419 08420 /* Line 1464 of yacc.c */ 08421 #line 3107 "parse.y" 08422 { 08423 token_info_pop("end"); 08424 ;} 08425 break; 08426 08427 case 342: 08428 08429 /* Line 1464 of yacc.c */ 08430 #line 3137 "parse.y" 08431 { 08432 /*%%%*/ 08433 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node)); 08434 fixpos((yyval.node), (yyvsp[(2) - (5)].node)); 08435 /*% 08436 $$ = dispatch3(elsif, $2, $4, escape_Qundef($5)); 08437 %*/ 08438 ;} 08439 break; 08440 08441 case 344: 08442 08443 /* Line 1464 of yacc.c */ 08444 #line 3149 "parse.y" 08445 { 08446 /*%%%*/ 08447 (yyval.node) = (yyvsp[(2) - (2)].node); 08448 /*% 08449 $$ = dispatch1(else, $2); 08450 %*/ 08451 ;} 08452 break; 08453 08454 case 347: 08455 08456 /* Line 1464 of yacc.c */ 08457 #line 3163 "parse.y" 08458 { 08459 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 08460 /*%%%*/ 08461 /*% 08462 $$ = dispatch1(mlhs_paren, $$); 08463 %*/ 08464 ;} 08465 break; 08466 08467 case 348: 08468 08469 /* Line 1464 of yacc.c */ 08470 #line 3171 "parse.y" 08471 { 08472 /*%%%*/ 08473 (yyval.node) = (yyvsp[(2) - (3)].node); 08474 /*% 08475 $$ = dispatch1(mlhs_paren, $2); 08476 %*/ 08477 ;} 08478 break; 08479 08480 case 349: 08481 08482 /* Line 1464 of yacc.c */ 08483 #line 3181 "parse.y" 08484 { 08485 /*%%%*/ 08486 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 08487 /*% 08488 $$ = mlhs_add(mlhs_new(), $1); 08489 %*/ 08490 ;} 08491 break; 08492 08493 case 350: 08494 08495 /* Line 1464 of yacc.c */ 08496 #line 3189 "parse.y" 08497 { 08498 /*%%%*/ 08499 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 08500 /*% 08501 $$ = mlhs_add($1, $3); 08502 %*/ 08503 ;} 08504 break; 08505 08506 case 351: 08507 08508 /* Line 1464 of yacc.c */ 08509 #line 3199 "parse.y" 08510 { 08511 /*%%%*/ 08512 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0); 08513 /*% 08514 $$ = $1; 08515 %*/ 08516 ;} 08517 break; 08518 08519 case 352: 08520 08521 /* Line 1464 of yacc.c */ 08522 #line 3207 "parse.y" 08523 { 08524 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0); 08525 /*%%%*/ 08526 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node)); 08527 /*% 08528 $$ = mlhs_add_star($1, $$); 08529 %*/ 08530 ;} 08531 break; 08532 08533 case 353: 08534 08535 /* Line 1464 of yacc.c */ 08536 #line 3216 "parse.y" 08537 { 08538 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0); 08539 /*%%%*/ 08540 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node))); 08541 /*% 08542 $$ = mlhs_add_star($1, $$); 08543 %*/ 08544 ;} 08545 break; 08546 08547 case 354: 08548 08549 /* Line 1464 of yacc.c */ 08550 #line 3225 "parse.y" 08551 { 08552 /*%%%*/ 08553 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1); 08554 /*% 08555 $$ = mlhs_add_star($1, Qnil); 08556 %*/ 08557 ;} 08558 break; 08559 08560 case 355: 08561 08562 /* Line 1464 of yacc.c */ 08563 #line 3233 "parse.y" 08564 { 08565 /*%%%*/ 08566 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node))); 08567 /*% 08568 $$ = mlhs_add_star($1, $5); 08569 %*/ 08570 ;} 08571 break; 08572 08573 case 356: 08574 08575 /* Line 1464 of yacc.c */ 08576 #line 3241 "parse.y" 08577 { 08578 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0); 08579 /*%%%*/ 08580 (yyval.node) = NEW_MASGN(0, (yyval.node)); 08581 /*% 08582 $$ = mlhs_add_star(mlhs_new(), $$); 08583 %*/ 08584 ;} 08585 break; 08586 08587 case 357: 08588 08589 /* Line 1464 of yacc.c */ 08590 #line 3250 "parse.y" 08591 { 08592 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0); 08593 /*%%%*/ 08594 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node))); 08595 /*% 08596 #if 0 08597 TODO: Check me 08598 #endif 08599 $$ = mlhs_add_star($$, $4); 08600 %*/ 08601 ;} 08602 break; 08603 08604 case 358: 08605 08606 /* Line 1464 of yacc.c */ 08607 #line 3262 "parse.y" 08608 { 08609 /*%%%*/ 08610 (yyval.node) = NEW_MASGN(0, -1); 08611 /*% 08612 $$ = mlhs_add_star(mlhs_new(), Qnil); 08613 %*/ 08614 ;} 08615 break; 08616 08617 case 359: 08618 08619 /* Line 1464 of yacc.c */ 08620 #line 3270 "parse.y" 08621 { 08622 /*%%%*/ 08623 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node))); 08624 /*% 08625 $$ = mlhs_add_star(mlhs_new(), Qnil); 08626 %*/ 08627 ;} 08628 break; 08629 08630 case 360: 08631 08632 /* Line 1464 of yacc.c */ 08633 #line 3280 "parse.y" 08634 { 08635 /*%%%*/ 08636 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id)); 08637 /*% 08638 $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6)); 08639 %*/ 08640 ;} 08641 break; 08642 08643 case 361: 08644 08645 /* Line 1464 of yacc.c */ 08646 #line 3288 "parse.y" 08647 { 08648 /*%%%*/ 08649 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id)); 08650 /*% 08651 $$ = params_new($1, $3, $5, $7, escape_Qundef($8)); 08652 %*/ 08653 ;} 08654 break; 08655 08656 case 362: 08657 08658 /* Line 1464 of yacc.c */ 08659 #line 3296 "parse.y" 08660 { 08661 /*%%%*/ 08662 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id)); 08663 /*% 08664 $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4)); 08665 %*/ 08666 ;} 08667 break; 08668 08669 case 363: 08670 08671 /* Line 1464 of yacc.c */ 08672 #line 3304 "parse.y" 08673 { 08674 /*%%%*/ 08675 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 08676 /*% 08677 $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6)); 08678 %*/ 08679 ;} 08680 break; 08681 08682 case 364: 08683 08684 /* Line 1464 of yacc.c */ 08685 #line 3312 "parse.y" 08686 { 08687 /*%%%*/ 08688 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id)); 08689 /*% 08690 $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4)); 08691 %*/ 08692 ;} 08693 break; 08694 08695 case 365: 08696 08697 /* Line 1464 of yacc.c */ 08698 #line 3320 "parse.y" 08699 { 08700 /*%%%*/ 08701 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0); 08702 /*% 08703 $$ = params_new($1, Qnil, Qnil, Qnil, Qnil); 08704 dispatch1(excessed_comma, $$); 08705 %*/ 08706 ;} 08707 break; 08708 08709 case 366: 08710 08711 /* Line 1464 of yacc.c */ 08712 #line 3329 "parse.y" 08713 { 08714 /*%%%*/ 08715 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 08716 /*% 08717 $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6)); 08718 %*/ 08719 ;} 08720 break; 08721 08722 case 367: 08723 08724 /* Line 1464 of yacc.c */ 08725 #line 3337 "parse.y" 08726 { 08727 /*%%%*/ 08728 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id)); 08729 /*% 08730 $$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2)); 08731 %*/ 08732 ;} 08733 break; 08734 08735 case 368: 08736 08737 /* Line 1464 of yacc.c */ 08738 #line 3345 "parse.y" 08739 { 08740 /*%%%*/ 08741 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id)); 08742 /*% 08743 $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4)); 08744 %*/ 08745 ;} 08746 break; 08747 08748 case 369: 08749 08750 /* Line 1464 of yacc.c */ 08751 #line 3353 "parse.y" 08752 { 08753 /*%%%*/ 08754 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 08755 /*% 08756 $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6)); 08757 %*/ 08758 ;} 08759 break; 08760 08761 case 370: 08762 08763 /* Line 1464 of yacc.c */ 08764 #line 3361 "parse.y" 08765 { 08766 /*%%%*/ 08767 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id)); 08768 /*% 08769 $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2)); 08770 %*/ 08771 ;} 08772 break; 08773 08774 case 371: 08775 08776 /* Line 1464 of yacc.c */ 08777 #line 3369 "parse.y" 08778 { 08779 /*%%%*/ 08780 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id)); 08781 /*% 08782 $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4)); 08783 %*/ 08784 ;} 08785 break; 08786 08787 case 372: 08788 08789 /* Line 1464 of yacc.c */ 08790 #line 3377 "parse.y" 08791 { 08792 /*%%%*/ 08793 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id)); 08794 /*% 08795 $$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2)); 08796 %*/ 08797 ;} 08798 break; 08799 08800 case 373: 08801 08802 /* Line 1464 of yacc.c */ 08803 #line 3385 "parse.y" 08804 { 08805 /*%%%*/ 08806 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id)); 08807 /*% 08808 $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4)); 08809 %*/ 08810 ;} 08811 break; 08812 08813 case 374: 08814 08815 /* Line 1464 of yacc.c */ 08816 #line 3393 "parse.y" 08817 { 08818 /*%%%*/ 08819 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id)); 08820 /*% 08821 $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1); 08822 %*/ 08823 ;} 08824 break; 08825 08826 case 376: 08827 08828 /* Line 1464 of yacc.c */ 08829 #line 3404 "parse.y" 08830 { 08831 command_start = TRUE; 08832 ;} 08833 break; 08834 08835 case 377: 08836 08837 /* Line 1464 of yacc.c */ 08838 #line 3410 "parse.y" 08839 { 08840 /*%%%*/ 08841 (yyval.node) = 0; 08842 /*% 08843 $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil), 08844 escape_Qundef($2)); 08845 %*/ 08846 ;} 08847 break; 08848 08849 case 378: 08850 08851 /* Line 1464 of yacc.c */ 08852 #line 3419 "parse.y" 08853 { 08854 /*%%%*/ 08855 (yyval.node) = 0; 08856 /*% 08857 $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil), 08858 Qnil); 08859 %*/ 08860 ;} 08861 break; 08862 08863 case 379: 08864 08865 /* Line 1464 of yacc.c */ 08866 #line 3428 "parse.y" 08867 { 08868 /*%%%*/ 08869 (yyval.node) = (yyvsp[(2) - (4)].node); 08870 /*% 08871 $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3)); 08872 %*/ 08873 ;} 08874 break; 08875 08876 case 381: 08877 08878 /* Line 1464 of yacc.c */ 08879 #line 3440 "parse.y" 08880 { 08881 /*%%%*/ 08882 (yyval.node) = 0; 08883 /*% 08884 $$ = $2; 08885 %*/ 08886 ;} 08887 break; 08888 08889 case 384: 08890 08891 /* Line 1464 of yacc.c */ 08892 #line 3466 "parse.y" 08893 { 08894 new_bv(get_id((yyvsp[(1) - (1)].id))); 08895 /*%%%*/ 08896 /*% 08897 $$ = get_value($1); 08898 %*/ 08899 ;} 08900 break; 08901 08902 case 385: 08903 08904 /* Line 1464 of yacc.c */ 08905 #line 3474 "parse.y" 08906 { 08907 (yyval.node) = 0; 08908 ;} 08909 break; 08910 08911 case 386: 08912 08913 /* Line 1464 of yacc.c */ 08914 #line 3479 "parse.y" 08915 { 08916 (yyval.vars) = dyna_push(); 08917 ;} 08918 break; 08919 08920 case 387: 08921 08922 /* Line 1464 of yacc.c */ 08923 #line 3482 "parse.y" 08924 { 08925 (yyval.num) = lpar_beg; 08926 lpar_beg = ++paren_nest; 08927 ;} 08928 break; 08929 08930 case 388: 08931 08932 /* Line 1464 of yacc.c */ 08933 #line 3488 "parse.y" 08934 { 08935 lpar_beg = (yyvsp[(2) - (4)].num); 08936 /*%%%*/ 08937 (yyval.node) = (yyvsp[(3) - (4)].node); 08938 (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node)); 08939 /*% 08940 $$ = dispatch2(lambda, $3, $4); 08941 %*/ 08942 dyna_pop((yyvsp[(1) - (4)].vars)); 08943 ;} 08944 break; 08945 08946 case 389: 08947 08948 /* Line 1464 of yacc.c */ 08949 #line 3501 "parse.y" 08950 { 08951 /*%%%*/ 08952 (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node)); 08953 /*% 08954 $$ = dispatch1(paren, $2); 08955 %*/ 08956 ;} 08957 break; 08958 08959 case 390: 08960 08961 /* Line 1464 of yacc.c */ 08962 #line 3509 "parse.y" 08963 { 08964 /*%%%*/ 08965 (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node)); 08966 /*% 08967 $$ = $1; 08968 %*/ 08969 ;} 08970 break; 08971 08972 case 391: 08973 08974 /* Line 1464 of yacc.c */ 08975 #line 3519 "parse.y" 08976 { 08977 (yyval.node) = (yyvsp[(2) - (3)].node); 08978 ;} 08979 break; 08980 08981 case 392: 08982 08983 /* Line 1464 of yacc.c */ 08984 #line 3523 "parse.y" 08985 { 08986 (yyval.node) = (yyvsp[(2) - (3)].node); 08987 ;} 08988 break; 08989 08990 case 393: 08991 08992 /* Line 1464 of yacc.c */ 08993 #line 3529 "parse.y" 08994 { 08995 (yyvsp[(1) - (1)].vars) = dyna_push(); 08996 /*%%%*/ 08997 (yyval.num) = ruby_sourceline; 08998 /*% %*/ 08999 ;} 09000 break; 09001 09002 case 394: 09003 09004 /* Line 1464 of yacc.c */ 09005 #line 3538 "parse.y" 09006 { 09007 /*%%%*/ 09008 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09009 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09010 /*% 09011 $$ = dispatch2(do_block, escape_Qundef($3), $4); 09012 %*/ 09013 dyna_pop((yyvsp[(1) - (5)].vars)); 09014 ;} 09015 break; 09016 09017 case 395: 09018 09019 /* Line 1464 of yacc.c */ 09020 #line 3550 "parse.y" 09021 { 09022 /*%%%*/ 09023 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) { 09024 compile_error(PARSER_ARG "block given to yield"); 09025 } 09026 else { 09027 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node)); 09028 } 09029 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node); 09030 (yyval.node) = (yyvsp[(2) - (2)].node); 09031 fixpos((yyval.node), (yyvsp[(1) - (2)].node)); 09032 /*% 09033 $$ = method_add_block($1, $2); 09034 %*/ 09035 ;} 09036 break; 09037 09038 case 396: 09039 09040 /* Line 1464 of yacc.c */ 09041 #line 3566 "parse.y" 09042 { 09043 /*%%%*/ 09044 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09045 /*% 09046 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 09047 $$ = method_optarg($$, $4); 09048 %*/ 09049 ;} 09050 break; 09051 09052 case 397: 09053 09054 /* Line 1464 of yacc.c */ 09055 #line 3575 "parse.y" 09056 { 09057 /*%%%*/ 09058 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09059 /*% 09060 $$ = dispatch3(call, $1, ripper_intern("::"), $3); 09061 $$ = method_optarg($$, $4); 09062 %*/ 09063 ;} 09064 break; 09065 09066 case 398: 09067 09068 /* Line 1464 of yacc.c */ 09069 #line 3586 "parse.y" 09070 { 09071 /*%%%*/ 09072 (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node)); 09073 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 09074 /*% 09075 $$ = method_arg(dispatch1(fcall, $1), $2); 09076 %*/ 09077 ;} 09078 break; 09079 09080 case 399: 09081 09082 /* Line 1464 of yacc.c */ 09083 #line 3595 "parse.y" 09084 { 09085 /*%%%*/ 09086 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09087 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 09088 /*% 09089 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 09090 $$ = method_optarg($$, $4); 09091 %*/ 09092 ;} 09093 break; 09094 09095 case 400: 09096 09097 /* Line 1464 of yacc.c */ 09098 #line 3605 "parse.y" 09099 { 09100 /*%%%*/ 09101 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09102 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 09103 /*% 09104 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 09105 $$ = method_optarg($$, $4); 09106 %*/ 09107 ;} 09108 break; 09109 09110 case 401: 09111 09112 /* Line 1464 of yacc.c */ 09113 #line 3615 "parse.y" 09114 { 09115 /*%%%*/ 09116 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0); 09117 /*% 09118 $$ = dispatch3(call, $1, ripper_intern("::"), $3); 09119 %*/ 09120 ;} 09121 break; 09122 09123 case 402: 09124 09125 /* Line 1464 of yacc.c */ 09126 #line 3623 "parse.y" 09127 { 09128 /*%%%*/ 09129 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node)); 09130 fixpos((yyval.node), (yyvsp[(1) - (3)].node)); 09131 /*% 09132 $$ = dispatch3(call, $1, ripper_id2sym('.'), 09133 ripper_intern("call")); 09134 $$ = method_optarg($$, $3); 09135 %*/ 09136 ;} 09137 break; 09138 09139 case 403: 09140 09141 /* Line 1464 of yacc.c */ 09142 #line 3634 "parse.y" 09143 { 09144 /*%%%*/ 09145 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node)); 09146 fixpos((yyval.node), (yyvsp[(1) - (3)].node)); 09147 /*% 09148 $$ = dispatch3(call, $1, ripper_intern("::"), 09149 ripper_intern("call")); 09150 $$ = method_optarg($$, $3); 09151 %*/ 09152 ;} 09153 break; 09154 09155 case 404: 09156 09157 /* Line 1464 of yacc.c */ 09158 #line 3645 "parse.y" 09159 { 09160 /*%%%*/ 09161 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node)); 09162 /*% 09163 $$ = dispatch1(super, $2); 09164 %*/ 09165 ;} 09166 break; 09167 09168 case 405: 09169 09170 /* Line 1464 of yacc.c */ 09171 #line 3653 "parse.y" 09172 { 09173 /*%%%*/ 09174 (yyval.node) = NEW_ZSUPER(); 09175 /*% 09176 $$ = dispatch0(zsuper); 09177 %*/ 09178 ;} 09179 break; 09180 09181 case 406: 09182 09183 /* Line 1464 of yacc.c */ 09184 #line 3661 "parse.y" 09185 { 09186 /*%%%*/ 09187 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF) 09188 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node)); 09189 else 09190 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node)); 09191 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 09192 /*% 09193 $$ = dispatch2(aref, $1, escape_Qundef($3)); 09194 %*/ 09195 ;} 09196 break; 09197 09198 case 407: 09199 09200 /* Line 1464 of yacc.c */ 09201 #line 3675 "parse.y" 09202 { 09203 (yyvsp[(1) - (1)].vars) = dyna_push(); 09204 /*%%%*/ 09205 (yyval.num) = ruby_sourceline; 09206 /*% 09207 %*/ 09208 ;} 09209 break; 09210 09211 case 408: 09212 09213 /* Line 1464 of yacc.c */ 09214 #line 3684 "parse.y" 09215 { 09216 /*%%%*/ 09217 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09218 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09219 /*% 09220 $$ = dispatch2(brace_block, escape_Qundef($3), $4); 09221 %*/ 09222 dyna_pop((yyvsp[(1) - (5)].vars)); 09223 ;} 09224 break; 09225 09226 case 409: 09227 09228 /* Line 1464 of yacc.c */ 09229 #line 3694 "parse.y" 09230 { 09231 (yyvsp[(1) - (1)].vars) = dyna_push(); 09232 /*%%%*/ 09233 (yyval.num) = ruby_sourceline; 09234 /*% 09235 %*/ 09236 ;} 09237 break; 09238 09239 case 410: 09240 09241 /* Line 1464 of yacc.c */ 09242 #line 3703 "parse.y" 09243 { 09244 /*%%%*/ 09245 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09246 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09247 /*% 09248 $$ = dispatch2(do_block, escape_Qundef($3), $4); 09249 %*/ 09250 dyna_pop((yyvsp[(1) - (5)].vars)); 09251 ;} 09252 break; 09253 09254 case 411: 09255 09256 /* Line 1464 of yacc.c */ 09257 #line 3717 "parse.y" 09258 { 09259 /*%%%*/ 09260 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node)); 09261 /*% 09262 $$ = dispatch3(when, $2, $4, escape_Qundef($5)); 09263 %*/ 09264 ;} 09265 break; 09266 09267 case 414: 09268 09269 /* Line 1464 of yacc.c */ 09270 #line 3733 "parse.y" 09271 { 09272 /*%%%*/ 09273 if ((yyvsp[(3) - (6)].node)) { 09274 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO()); 09275 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node)); 09276 } 09277 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 09278 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node)); 09279 /*% 09280 $$ = dispatch4(rescue, 09281 escape_Qundef($2), 09282 escape_Qundef($3), 09283 escape_Qundef($5), 09284 escape_Qundef($6)); 09285 %*/ 09286 ;} 09287 break; 09288 09289 case 416: 09290 09291 /* Line 1464 of yacc.c */ 09292 #line 3753 "parse.y" 09293 { 09294 /*%%%*/ 09295 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 09296 /*% 09297 $$ = rb_ary_new3(1, $1); 09298 %*/ 09299 ;} 09300 break; 09301 09302 case 417: 09303 09304 /* Line 1464 of yacc.c */ 09305 #line 3761 "parse.y" 09306 { 09307 /*%%%*/ 09308 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node); 09309 /*% 09310 $$ = $1; 09311 %*/ 09312 ;} 09313 break; 09314 09315 case 419: 09316 09317 /* Line 1464 of yacc.c */ 09318 #line 3772 "parse.y" 09319 { 09320 (yyval.node) = (yyvsp[(2) - (2)].node); 09321 ;} 09322 break; 09323 09324 case 421: 09325 09326 /* Line 1464 of yacc.c */ 09327 #line 3779 "parse.y" 09328 { 09329 /*%%%*/ 09330 (yyval.node) = (yyvsp[(2) - (2)].node); 09331 /*% 09332 $$ = dispatch1(ensure, $2); 09333 %*/ 09334 ;} 09335 break; 09336 09337 case 424: 09338 09339 /* Line 1464 of yacc.c */ 09340 #line 3791 "parse.y" 09341 { 09342 /*%%%*/ 09343 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id))); 09344 /*% 09345 $$ = dispatch1(symbol_literal, $1); 09346 %*/ 09347 ;} 09348 break; 09349 09350 case 426: 09351 09352 /* Line 1464 of yacc.c */ 09353 #line 3802 "parse.y" 09354 { 09355 /*%%%*/ 09356 NODE *node = (yyvsp[(1) - (1)].node); 09357 if (!node) { 09358 node = NEW_STR(STR_NEW0()); 09359 } 09360 else { 09361 node = evstr2dstr(node); 09362 } 09363 (yyval.node) = node; 09364 /*% 09365 $$ = $1; 09366 %*/ 09367 ;} 09368 break; 09369 09370 case 429: 09371 09372 /* Line 1464 of yacc.c */ 09373 #line 3821 "parse.y" 09374 { 09375 /*%%%*/ 09376 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09377 /*% 09378 $$ = dispatch2(string_concat, $1, $2); 09379 %*/ 09380 ;} 09381 break; 09382 09383 case 430: 09384 09385 /* Line 1464 of yacc.c */ 09386 #line 3831 "parse.y" 09387 { 09388 /*%%%*/ 09389 (yyval.node) = (yyvsp[(2) - (3)].node); 09390 /*% 09391 $$ = dispatch1(string_literal, $2); 09392 %*/ 09393 ;} 09394 break; 09395 09396 case 431: 09397 09398 /* Line 1464 of yacc.c */ 09399 #line 3841 "parse.y" 09400 { 09401 /*%%%*/ 09402 NODE *node = (yyvsp[(2) - (3)].node); 09403 if (!node) { 09404 node = NEW_XSTR(STR_NEW0()); 09405 } 09406 else { 09407 switch (nd_type(node)) { 09408 case NODE_STR: 09409 nd_set_type(node, NODE_XSTR); 09410 break; 09411 case NODE_DSTR: 09412 nd_set_type(node, NODE_DXSTR); 09413 break; 09414 default: 09415 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node)); 09416 break; 09417 } 09418 } 09419 (yyval.node) = node; 09420 /*% 09421 $$ = dispatch1(xstring_literal, $2); 09422 %*/ 09423 ;} 09424 break; 09425 09426 case 432: 09427 09428 /* Line 1464 of yacc.c */ 09429 #line 3868 "parse.y" 09430 { 09431 /*%%%*/ 09432 int options = (yyvsp[(3) - (3)].num); 09433 NODE *node = (yyvsp[(2) - (3)].node); 09434 NODE *list, *prev; 09435 if (!node) { 09436 node = NEW_LIT(reg_compile(STR_NEW0(), options)); 09437 } 09438 else switch (nd_type(node)) { 09439 case NODE_STR: 09440 { 09441 VALUE src = node->nd_lit; 09442 nd_set_type(node, NODE_LIT); 09443 node->nd_lit = reg_compile(src, options); 09444 } 09445 break; 09446 default: 09447 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node)); 09448 case NODE_DSTR: 09449 if (options & RE_OPTION_ONCE) { 09450 nd_set_type(node, NODE_DREGX_ONCE); 09451 } 09452 else { 09453 nd_set_type(node, NODE_DREGX); 09454 } 09455 node->nd_cflag = options & RE_OPTION_MASK; 09456 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options); 09457 for (list = (prev = node)->nd_next; list; list = list->nd_next) { 09458 if (nd_type(list->nd_head) == NODE_STR) { 09459 VALUE tail = list->nd_head->nd_lit; 09460 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) { 09461 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit; 09462 if (!literal_concat0(parser, lit, tail)) { 09463 node = 0; 09464 break; 09465 } 09466 rb_str_resize(tail, 0); 09467 prev->nd_next = list->nd_next; 09468 rb_gc_force_recycle((VALUE)list->nd_head); 09469 rb_gc_force_recycle((VALUE)list); 09470 list = prev; 09471 } 09472 else { 09473 prev = list; 09474 } 09475 } 09476 else { 09477 prev = 0; 09478 } 09479 } 09480 if (!node->nd_next) { 09481 VALUE src = node->nd_lit; 09482 nd_set_type(node, NODE_LIT); 09483 node->nd_lit = reg_compile(src, options); 09484 } 09485 break; 09486 } 09487 (yyval.node) = node; 09488 /*% 09489 $$ = dispatch2(regexp_literal, $2, $3); 09490 %*/ 09491 ;} 09492 break; 09493 09494 case 433: 09495 09496 /* Line 1464 of yacc.c */ 09497 #line 3933 "parse.y" 09498 { 09499 /*%%%*/ 09500 (yyval.node) = NEW_ZARRAY(); 09501 /*% 09502 $$ = dispatch0(words_new); 09503 %*/ 09504 ;} 09505 break; 09506 09507 case 434: 09508 09509 /* Line 1464 of yacc.c */ 09510 #line 3941 "parse.y" 09511 { 09512 (yyval.node) = (yyvsp[(2) - (3)].node); 09513 ;} 09514 break; 09515 09516 case 435: 09517 09518 /* Line 1464 of yacc.c */ 09519 #line 3947 "parse.y" 09520 { 09521 /*%%%*/ 09522 (yyval.node) = 0; 09523 /*% 09524 $$ = dispatch0(words_new); 09525 %*/ 09526 ;} 09527 break; 09528 09529 case 436: 09530 09531 /* Line 1464 of yacc.c */ 09532 #line 3955 "parse.y" 09533 { 09534 /*%%%*/ 09535 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node))); 09536 /*% 09537 $$ = dispatch2(words_add, $1, $2); 09538 %*/ 09539 ;} 09540 break; 09541 09542 case 438: 09543 09544 /* Line 1464 of yacc.c */ 09545 #line 3973 "parse.y" 09546 { 09547 /*%%%*/ 09548 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09549 /*% 09550 $$ = dispatch2(word_add, $1, $2); 09551 %*/ 09552 ;} 09553 break; 09554 09555 case 439: 09556 09557 /* Line 1464 of yacc.c */ 09558 #line 3983 "parse.y" 09559 { 09560 /*%%%*/ 09561 (yyval.node) = NEW_ZARRAY(); 09562 /*% 09563 $$ = dispatch0(qwords_new); 09564 %*/ 09565 ;} 09566 break; 09567 09568 case 440: 09569 09570 /* Line 1464 of yacc.c */ 09571 #line 3991 "parse.y" 09572 { 09573 (yyval.node) = (yyvsp[(2) - (3)].node); 09574 ;} 09575 break; 09576 09577 case 441: 09578 09579 /* Line 1464 of yacc.c */ 09580 #line 3997 "parse.y" 09581 { 09582 /*%%%*/ 09583 (yyval.node) = 0; 09584 /*% 09585 $$ = dispatch0(qwords_new); 09586 %*/ 09587 ;} 09588 break; 09589 09590 case 442: 09591 09592 /* Line 1464 of yacc.c */ 09593 #line 4005 "parse.y" 09594 { 09595 /*%%%*/ 09596 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node)); 09597 /*% 09598 $$ = dispatch2(qwords_add, $1, $2); 09599 %*/ 09600 ;} 09601 break; 09602 09603 case 443: 09604 09605 /* Line 1464 of yacc.c */ 09606 #line 4015 "parse.y" 09607 { 09608 /*%%%*/ 09609 (yyval.node) = 0; 09610 /*% 09611 $$ = dispatch0(string_content); 09612 %*/ 09613 ;} 09614 break; 09615 09616 case 444: 09617 09618 /* Line 1464 of yacc.c */ 09619 #line 4023 "parse.y" 09620 { 09621 /*%%%*/ 09622 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09623 /*% 09624 $$ = dispatch2(string_add, $1, $2); 09625 %*/ 09626 ;} 09627 break; 09628 09629 case 445: 09630 09631 /* Line 1464 of yacc.c */ 09632 #line 4033 "parse.y" 09633 { 09634 /*%%%*/ 09635 (yyval.node) = 0; 09636 /*% 09637 $$ = dispatch0(xstring_new); 09638 %*/ 09639 ;} 09640 break; 09641 09642 case 446: 09643 09644 /* Line 1464 of yacc.c */ 09645 #line 4041 "parse.y" 09646 { 09647 /*%%%*/ 09648 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09649 /*% 09650 $$ = dispatch2(xstring_add, $1, $2); 09651 %*/ 09652 ;} 09653 break; 09654 09655 case 447: 09656 09657 /* Line 1464 of yacc.c */ 09658 #line 4051 "parse.y" 09659 { 09660 /*%%%*/ 09661 (yyval.node) = 0; 09662 /*% 09663 $$ = dispatch0(regexp_new); 09664 %*/ 09665 ;} 09666 break; 09667 09668 case 448: 09669 09670 /* Line 1464 of yacc.c */ 09671 #line 4059 "parse.y" 09672 { 09673 /*%%%*/ 09674 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node); 09675 if (!head) { 09676 (yyval.node) = tail; 09677 } 09678 else if (!tail) { 09679 (yyval.node) = head; 09680 } 09681 else { 09682 switch (nd_type(head)) { 09683 case NODE_STR: 09684 nd_set_type(head, NODE_DSTR); 09685 break; 09686 case NODE_DSTR: 09687 break; 09688 default: 09689 head = list_append(NEW_DSTR(Qnil), head); 09690 break; 09691 } 09692 (yyval.node) = list_append(head, tail); 09693 } 09694 /*% 09695 $$ = dispatch2(regexp_add, $1, $2); 09696 %*/ 09697 ;} 09698 break; 09699 09700 case 450: 09701 09702 /* Line 1464 of yacc.c */ 09703 #line 4089 "parse.y" 09704 { 09705 (yyval.node) = lex_strterm; 09706 lex_strterm = 0; 09707 lex_state = EXPR_BEG; 09708 ;} 09709 break; 09710 09711 case 451: 09712 09713 /* Line 1464 of yacc.c */ 09714 #line 4095 "parse.y" 09715 { 09716 /*%%%*/ 09717 lex_strterm = (yyvsp[(2) - (3)].node); 09718 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node)); 09719 /*% 09720 lex_strterm = $<node>2; 09721 $$ = dispatch1(string_dvar, $3); 09722 %*/ 09723 ;} 09724 break; 09725 09726 case 452: 09727 09728 /* Line 1464 of yacc.c */ 09729 #line 4105 "parse.y" 09730 { 09731 (yyvsp[(1) - (1)].val) = cond_stack; 09732 (yyval.val) = cmdarg_stack; 09733 cond_stack = 0; 09734 cmdarg_stack = 0; 09735 ;} 09736 break; 09737 09738 case 453: 09739 09740 /* Line 1464 of yacc.c */ 09741 #line 4111 "parse.y" 09742 { 09743 (yyval.node) = lex_strterm; 09744 lex_strterm = 0; 09745 lex_state = EXPR_BEG; 09746 ;} 09747 break; 09748 09749 case 454: 09750 09751 /* Line 1464 of yacc.c */ 09752 #line 4117 "parse.y" 09753 { 09754 cond_stack = (yyvsp[(1) - (5)].val); 09755 cmdarg_stack = (yyvsp[(2) - (5)].val); 09756 lex_strterm = (yyvsp[(3) - (5)].node); 09757 /*%%%*/ 09758 if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE; 09759 (yyval.node) = new_evstr((yyvsp[(4) - (5)].node)); 09760 /*% 09761 $$ = dispatch1(string_embexpr, $4); 09762 %*/ 09763 ;} 09764 break; 09765 09766 case 455: 09767 09768 /* Line 1464 of yacc.c */ 09769 #line 4131 "parse.y" 09770 { 09771 /*%%%*/ 09772 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id)); 09773 /*% 09774 $$ = dispatch1(var_ref, $1); 09775 %*/ 09776 ;} 09777 break; 09778 09779 case 456: 09780 09781 /* Line 1464 of yacc.c */ 09782 #line 4139 "parse.y" 09783 { 09784 /*%%%*/ 09785 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id)); 09786 /*% 09787 $$ = dispatch1(var_ref, $1); 09788 %*/ 09789 ;} 09790 break; 09791 09792 case 457: 09793 09794 /* Line 1464 of yacc.c */ 09795 #line 4147 "parse.y" 09796 { 09797 /*%%%*/ 09798 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id)); 09799 /*% 09800 $$ = dispatch1(var_ref, $1); 09801 %*/ 09802 ;} 09803 break; 09804 09805 case 459: 09806 09807 /* Line 1464 of yacc.c */ 09808 #line 4158 "parse.y" 09809 { 09810 lex_state = EXPR_END; 09811 /*%%%*/ 09812 (yyval.id) = (yyvsp[(2) - (2)].id); 09813 /*% 09814 $$ = dispatch1(symbol, $2); 09815 %*/ 09816 ;} 09817 break; 09818 09819 case 464: 09820 09821 /* Line 1464 of yacc.c */ 09822 #line 4175 "parse.y" 09823 { 09824 lex_state = EXPR_END; 09825 /*%%%*/ 09826 if (!((yyval.node) = (yyvsp[(2) - (3)].node))) { 09827 (yyval.node) = NEW_LIT(ID2SYM(rb_intern(""))); 09828 } 09829 else { 09830 VALUE lit; 09831 09832 switch (nd_type((yyval.node))) { 09833 case NODE_DSTR: 09834 nd_set_type((yyval.node), NODE_DSYM); 09835 break; 09836 case NODE_STR: 09837 lit = (yyval.node)->nd_lit; 09838 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit)); 09839 nd_set_type((yyval.node), NODE_LIT); 09840 break; 09841 default: 09842 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node))); 09843 break; 09844 } 09845 } 09846 /*% 09847 $$ = dispatch1(dyna_symbol, $2); 09848 %*/ 09849 ;} 09850 break; 09851 09852 case 467: 09853 09854 /* Line 1464 of yacc.c */ 09855 #line 4207 "parse.y" 09856 { 09857 /*%%%*/ 09858 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node)); 09859 /*% 09860 $$ = dispatch2(unary, ripper_intern("-@"), $2); 09861 %*/ 09862 ;} 09863 break; 09864 09865 case 468: 09866 09867 /* Line 1464 of yacc.c */ 09868 #line 4215 "parse.y" 09869 { 09870 /*%%%*/ 09871 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node)); 09872 /*% 09873 $$ = dispatch2(unary, ripper_intern("-@"), $2); 09874 %*/ 09875 ;} 09876 break; 09877 09878 case 474: 09879 09880 /* Line 1464 of yacc.c */ 09881 #line 4229 "parse.y" 09882 {ifndef_ripper((yyval.id) = keyword_nil);;} 09883 break; 09884 09885 case 475: 09886 09887 /* Line 1464 of yacc.c */ 09888 #line 4230 "parse.y" 09889 {ifndef_ripper((yyval.id) = keyword_self);;} 09890 break; 09891 09892 case 476: 09893 09894 /* Line 1464 of yacc.c */ 09895 #line 4231 "parse.y" 09896 {ifndef_ripper((yyval.id) = keyword_true);;} 09897 break; 09898 09899 case 477: 09900 09901 /* Line 1464 of yacc.c */ 09902 #line 4232 "parse.y" 09903 {ifndef_ripper((yyval.id) = keyword_false);;} 09904 break; 09905 09906 case 478: 09907 09908 /* Line 1464 of yacc.c */ 09909 #line 4233 "parse.y" 09910 {ifndef_ripper((yyval.id) = keyword__FILE__);;} 09911 break; 09912 09913 case 479: 09914 09915 /* Line 1464 of yacc.c */ 09916 #line 4234 "parse.y" 09917 {ifndef_ripper((yyval.id) = keyword__LINE__);;} 09918 break; 09919 09920 case 480: 09921 09922 /* Line 1464 of yacc.c */ 09923 #line 4235 "parse.y" 09924 {ifndef_ripper((yyval.id) = keyword__ENCODING__);;} 09925 break; 09926 09927 case 481: 09928 09929 /* Line 1464 of yacc.c */ 09930 #line 4239 "parse.y" 09931 { 09932 /*%%%*/ 09933 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0); 09934 /*% 09935 $$ = dispatch1(var_ref, $1); 09936 %*/ 09937 ;} 09938 break; 09939 09940 case 482: 09941 09942 /* Line 1464 of yacc.c */ 09943 #line 4249 "parse.y" 09944 { 09945 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 09946 /*%%%*/ 09947 /*% 09948 $$ = dispatch1(var_field, $$); 09949 %*/ 09950 ;} 09951 break; 09952 09953 case 485: 09954 09955 /* Line 1464 of yacc.c */ 09956 #line 4263 "parse.y" 09957 { 09958 /*%%%*/ 09959 (yyval.node) = 0; 09960 /*% 09961 $$ = Qnil; 09962 %*/ 09963 ;} 09964 break; 09965 09966 case 486: 09967 09968 /* Line 1464 of yacc.c */ 09969 #line 4271 "parse.y" 09970 { 09971 lex_state = EXPR_BEG; 09972 ;} 09973 break; 09974 09975 case 487: 09976 09977 /* Line 1464 of yacc.c */ 09978 #line 4275 "parse.y" 09979 { 09980 (yyval.node) = (yyvsp[(3) - (4)].node); 09981 ;} 09982 break; 09983 09984 case 488: 09985 09986 /* Line 1464 of yacc.c */ 09987 #line 4279 "parse.y" 09988 { 09989 /*%%%*/ 09990 yyerrok; 09991 (yyval.node) = 0; 09992 /*% 09993 yyerrok; 09994 $$ = Qnil; 09995 %*/ 09996 ;} 09997 break; 09998 09999 case 489: 10000 10001 /* Line 1464 of yacc.c */ 10002 #line 4291 "parse.y" 10003 { 10004 /*%%%*/ 10005 (yyval.node) = (yyvsp[(2) - (3)].node); 10006 /*% 10007 $$ = dispatch1(paren, $2); 10008 %*/ 10009 lex_state = EXPR_BEG; 10010 command_start = TRUE; 10011 ;} 10012 break; 10013 10014 case 490: 10015 10016 /* Line 1464 of yacc.c */ 10017 #line 4301 "parse.y" 10018 { 10019 (yyval.node) = (yyvsp[(1) - (2)].node); 10020 ;} 10021 break; 10022 10023 case 491: 10024 10025 /* Line 1464 of yacc.c */ 10026 #line 4307 "parse.y" 10027 { 10028 /*%%%*/ 10029 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id)); 10030 /*% 10031 $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6)); 10032 %*/ 10033 ;} 10034 break; 10035 10036 case 492: 10037 10038 /* Line 1464 of yacc.c */ 10039 #line 4315 "parse.y" 10040 { 10041 /*%%%*/ 10042 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id)); 10043 /*% 10044 $$ = params_new($1, $3, $5, $7, escape_Qundef($8)); 10045 %*/ 10046 ;} 10047 break; 10048 10049 case 493: 10050 10051 /* Line 1464 of yacc.c */ 10052 #line 4323 "parse.y" 10053 { 10054 /*%%%*/ 10055 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id)); 10056 /*% 10057 $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4)); 10058 %*/ 10059 ;} 10060 break; 10061 10062 case 494: 10063 10064 /* Line 1464 of yacc.c */ 10065 #line 4331 "parse.y" 10066 { 10067 /*%%%*/ 10068 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 10069 /*% 10070 $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6)); 10071 %*/ 10072 ;} 10073 break; 10074 10075 case 495: 10076 10077 /* Line 1464 of yacc.c */ 10078 #line 4339 "parse.y" 10079 { 10080 /*%%%*/ 10081 (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id)); 10082 /*% 10083 $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4)); 10084 %*/ 10085 ;} 10086 break; 10087 10088 case 496: 10089 10090 /* Line 1464 of yacc.c */ 10091 #line 4347 "parse.y" 10092 { 10093 /*%%%*/ 10094 (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 10095 /*% 10096 $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6)); 10097 %*/ 10098 ;} 10099 break; 10100 10101 case 497: 10102 10103 /* Line 1464 of yacc.c */ 10104 #line 4355 "parse.y" 10105 { 10106 /*%%%*/ 10107 (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id)); 10108 /*% 10109 $$ = params_new($1, Qnil, Qnil, Qnil,escape_Qundef($2)); 10110 %*/ 10111 ;} 10112 break; 10113 10114 case 498: 10115 10116 /* Line 1464 of yacc.c */ 10117 #line 4363 "parse.y" 10118 { 10119 /*%%%*/ 10120 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id)); 10121 /*% 10122 $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4)); 10123 %*/ 10124 ;} 10125 break; 10126 10127 case 499: 10128 10129 /* Line 1464 of yacc.c */ 10130 #line 4371 "parse.y" 10131 { 10132 /*%%%*/ 10133 (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id)); 10134 /*% 10135 $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6)); 10136 %*/ 10137 ;} 10138 break; 10139 10140 case 500: 10141 10142 /* Line 1464 of yacc.c */ 10143 #line 4379 "parse.y" 10144 { 10145 /*%%%*/ 10146 (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id)); 10147 /*% 10148 $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2)); 10149 %*/ 10150 ;} 10151 break; 10152 10153 case 501: 10154 10155 /* Line 1464 of yacc.c */ 10156 #line 4387 "parse.y" 10157 { 10158 /*%%%*/ 10159 (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id)); 10160 /*% 10161 $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4)); 10162 %*/ 10163 ;} 10164 break; 10165 10166 case 502: 10167 10168 /* Line 1464 of yacc.c */ 10169 #line 4395 "parse.y" 10170 { 10171 /*%%%*/ 10172 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id)); 10173 /*% 10174 $$ = params_new(Qnil, Qnil, $1, Qnil,escape_Qundef($2)); 10175 %*/ 10176 ;} 10177 break; 10178 10179 case 503: 10180 10181 /* Line 1464 of yacc.c */ 10182 #line 4403 "parse.y" 10183 { 10184 /*%%%*/ 10185 (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id)); 10186 /*% 10187 $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4)); 10188 %*/ 10189 ;} 10190 break; 10191 10192 case 504: 10193 10194 /* Line 1464 of yacc.c */ 10195 #line 4411 "parse.y" 10196 { 10197 /*%%%*/ 10198 (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id)); 10199 /*% 10200 $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1); 10201 %*/ 10202 ;} 10203 break; 10204 10205 case 505: 10206 10207 /* Line 1464 of yacc.c */ 10208 #line 4419 "parse.y" 10209 { 10210 /*%%%*/ 10211 (yyval.node) = new_args(0, 0, 0, 0, 0); 10212 /*% 10213 $$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil); 10214 %*/ 10215 ;} 10216 break; 10217 10218 case 506: 10219 10220 /* Line 1464 of yacc.c */ 10221 #line 4429 "parse.y" 10222 { 10223 /*%%%*/ 10224 yyerror("formal argument cannot be a constant"); 10225 (yyval.id) = 0; 10226 /*% 10227 $$ = dispatch1(param_error, $1); 10228 %*/ 10229 ;} 10230 break; 10231 10232 case 507: 10233 10234 /* Line 1464 of yacc.c */ 10235 #line 4438 "parse.y" 10236 { 10237 /*%%%*/ 10238 yyerror("formal argument cannot be an instance variable"); 10239 (yyval.id) = 0; 10240 /*% 10241 $$ = dispatch1(param_error, $1); 10242 %*/ 10243 ;} 10244 break; 10245 10246 case 508: 10247 10248 /* Line 1464 of yacc.c */ 10249 #line 4447 "parse.y" 10250 { 10251 /*%%%*/ 10252 yyerror("formal argument cannot be a global variable"); 10253 (yyval.id) = 0; 10254 /*% 10255 $$ = dispatch1(param_error, $1); 10256 %*/ 10257 ;} 10258 break; 10259 10260 case 509: 10261 10262 /* Line 1464 of yacc.c */ 10263 #line 4456 "parse.y" 10264 { 10265 /*%%%*/ 10266 yyerror("formal argument cannot be a class variable"); 10267 (yyval.id) = 0; 10268 /*% 10269 $$ = dispatch1(param_error, $1); 10270 %*/ 10271 ;} 10272 break; 10273 10274 case 511: 10275 10276 /* Line 1464 of yacc.c */ 10277 #line 4468 "parse.y" 10278 { 10279 formal_argument(get_id((yyvsp[(1) - (1)].id))); 10280 (yyval.id) = (yyvsp[(1) - (1)].id); 10281 ;} 10282 break; 10283 10284 case 512: 10285 10286 /* Line 1464 of yacc.c */ 10287 #line 4475 "parse.y" 10288 { 10289 arg_var(get_id((yyvsp[(1) - (1)].id))); 10290 /*%%%*/ 10291 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1); 10292 /*% 10293 $$ = get_value($1); 10294 %*/ 10295 ;} 10296 break; 10297 10298 case 513: 10299 10300 /* Line 1464 of yacc.c */ 10301 #line 4484 "parse.y" 10302 { 10303 ID tid = internal_id(); 10304 arg_var(tid); 10305 /*%%%*/ 10306 if (dyna_in_block()) { 10307 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid); 10308 } 10309 else { 10310 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid); 10311 } 10312 (yyval.node) = NEW_ARGS_AUX(tid, 1); 10313 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node); 10314 /*% 10315 $$ = dispatch1(mlhs_paren, $2); 10316 %*/ 10317 ;} 10318 break; 10319 10320 case 515: 10321 10322 /* Line 1464 of yacc.c */ 10323 #line 4510 "parse.y" 10324 { 10325 /*%%%*/ 10326 (yyval.node) = (yyvsp[(1) - (3)].node); 10327 (yyval.node)->nd_plen++; 10328 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next); 10329 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node)); 10330 /*% 10331 $$ = rb_ary_push($1, $3); 10332 %*/ 10333 ;} 10334 break; 10335 10336 case 516: 10337 10338 /* Line 1464 of yacc.c */ 10339 #line 4523 "parse.y" 10340 { 10341 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id)))); 10342 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node)); 10343 /*%%%*/ 10344 (yyval.node) = NEW_OPT_ARG(0, (yyval.node)); 10345 /*% 10346 $$ = rb_assoc_new($$, $3); 10347 %*/ 10348 ;} 10349 break; 10350 10351 case 517: 10352 10353 /* Line 1464 of yacc.c */ 10354 #line 4535 "parse.y" 10355 { 10356 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id)))); 10357 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node)); 10358 /*%%%*/ 10359 (yyval.node) = NEW_OPT_ARG(0, (yyval.node)); 10360 /*% 10361 $$ = rb_assoc_new($$, $3); 10362 %*/ 10363 ;} 10364 break; 10365 10366 case 518: 10367 10368 /* Line 1464 of yacc.c */ 10369 #line 4547 "parse.y" 10370 { 10371 /*%%%*/ 10372 (yyval.node) = (yyvsp[(1) - (1)].node); 10373 /*% 10374 $$ = rb_ary_new3(1, $1); 10375 %*/ 10376 ;} 10377 break; 10378 10379 case 519: 10380 10381 /* Line 1464 of yacc.c */ 10382 #line 4555 "parse.y" 10383 { 10384 /*%%%*/ 10385 NODE *opts = (yyvsp[(1) - (3)].node); 10386 10387 while (opts->nd_next) { 10388 opts = opts->nd_next; 10389 } 10390 opts->nd_next = (yyvsp[(3) - (3)].node); 10391 (yyval.node) = (yyvsp[(1) - (3)].node); 10392 /*% 10393 $$ = rb_ary_push($1, $3); 10394 %*/ 10395 ;} 10396 break; 10397 10398 case 520: 10399 10400 /* Line 1464 of yacc.c */ 10401 #line 4571 "parse.y" 10402 { 10403 /*%%%*/ 10404 (yyval.node) = (yyvsp[(1) - (1)].node); 10405 /*% 10406 $$ = rb_ary_new3(1, $1); 10407 %*/ 10408 ;} 10409 break; 10410 10411 case 521: 10412 10413 /* Line 1464 of yacc.c */ 10414 #line 4579 "parse.y" 10415 { 10416 /*%%%*/ 10417 NODE *opts = (yyvsp[(1) - (3)].node); 10418 10419 while (opts->nd_next) { 10420 opts = opts->nd_next; 10421 } 10422 opts->nd_next = (yyvsp[(3) - (3)].node); 10423 (yyval.node) = (yyvsp[(1) - (3)].node); 10424 /*% 10425 $$ = rb_ary_push($1, $3); 10426 %*/ 10427 ;} 10428 break; 10429 10430 case 524: 10431 10432 /* Line 1464 of yacc.c */ 10433 #line 4599 "parse.y" 10434 { 10435 /*%%%*/ 10436 if (!is_local_id((yyvsp[(2) - (2)].id))) 10437 yyerror("rest argument must be local variable"); 10438 /*% %*/ 10439 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id)))); 10440 /*%%%*/ 10441 (yyval.id) = (yyvsp[(2) - (2)].id); 10442 /*% 10443 $$ = dispatch1(rest_param, $2); 10444 %*/ 10445 ;} 10446 break; 10447 10448 case 525: 10449 10450 /* Line 1464 of yacc.c */ 10451 #line 4612 "parse.y" 10452 { 10453 /*%%%*/ 10454 (yyval.id) = internal_id(); 10455 arg_var((yyval.id)); 10456 /*% 10457 $$ = dispatch1(rest_param, Qnil); 10458 %*/ 10459 ;} 10460 break; 10461 10462 case 528: 10463 10464 /* Line 1464 of yacc.c */ 10465 #line 4627 "parse.y" 10466 { 10467 /*%%%*/ 10468 if (!is_local_id((yyvsp[(2) - (2)].id))) 10469 yyerror("block argument must be local variable"); 10470 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id))) 10471 yyerror("duplicated block argument name"); 10472 /*% %*/ 10473 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id)))); 10474 /*%%%*/ 10475 (yyval.id) = (yyvsp[(2) - (2)].id); 10476 /*% 10477 $$ = dispatch1(blockarg, $2); 10478 %*/ 10479 ;} 10480 break; 10481 10482 case 529: 10483 10484 /* Line 1464 of yacc.c */ 10485 #line 4644 "parse.y" 10486 { 10487 (yyval.id) = (yyvsp[(2) - (2)].id); 10488 ;} 10489 break; 10490 10491 case 530: 10492 10493 /* Line 1464 of yacc.c */ 10494 #line 4648 "parse.y" 10495 { 10496 /*%%%*/ 10497 (yyval.id) = 0; 10498 /*% 10499 $$ = Qundef; 10500 %*/ 10501 ;} 10502 break; 10503 10504 case 531: 10505 10506 /* Line 1464 of yacc.c */ 10507 #line 4658 "parse.y" 10508 { 10509 /*%%%*/ 10510 value_expr((yyvsp[(1) - (1)].node)); 10511 (yyval.node) = (yyvsp[(1) - (1)].node); 10512 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 10513 /*% 10514 $$ = $1; 10515 %*/ 10516 ;} 10517 break; 10518 10519 case 532: 10520 10521 /* Line 1464 of yacc.c */ 10522 #line 4667 "parse.y" 10523 {lex_state = EXPR_BEG;;} 10524 break; 10525 10526 case 533: 10527 10528 /* Line 1464 of yacc.c */ 10529 #line 4668 "parse.y" 10530 { 10531 /*%%%*/ 10532 if ((yyvsp[(3) - (4)].node) == 0) { 10533 yyerror("can't define singleton method for ()."); 10534 } 10535 else { 10536 switch (nd_type((yyvsp[(3) - (4)].node))) { 10537 case NODE_STR: 10538 case NODE_DSTR: 10539 case NODE_XSTR: 10540 case NODE_DXSTR: 10541 case NODE_DREGX: 10542 case NODE_LIT: 10543 case NODE_ARRAY: 10544 case NODE_ZARRAY: 10545 yyerror("can't define singleton method for literals"); 10546 default: 10547 value_expr((yyvsp[(3) - (4)].node)); 10548 break; 10549 } 10550 } 10551 (yyval.node) = (yyvsp[(3) - (4)].node); 10552 /*% 10553 $$ = dispatch1(paren, $3); 10554 %*/ 10555 ;} 10556 break; 10557 10558 case 535: 10559 10560 /* Line 1464 of yacc.c */ 10561 #line 4698 "parse.y" 10562 { 10563 /*%%%*/ 10564 (yyval.node) = (yyvsp[(1) - (2)].node); 10565 /*% 10566 $$ = dispatch1(assoclist_from_args, $1); 10567 %*/ 10568 ;} 10569 break; 10570 10571 case 537: 10572 10573 /* Line 1464 of yacc.c */ 10574 #line 4715 "parse.y" 10575 { 10576 /*%%%*/ 10577 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 10578 /*% 10579 $$ = rb_ary_push($1, $3); 10580 %*/ 10581 ;} 10582 break; 10583 10584 case 538: 10585 10586 /* Line 1464 of yacc.c */ 10587 #line 4725 "parse.y" 10588 { 10589 /*%%%*/ 10590 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node)); 10591 /*% 10592 $$ = dispatch2(assoc_new, $1, $3); 10593 %*/ 10594 ;} 10595 break; 10596 10597 case 539: 10598 10599 /* Line 1464 of yacc.c */ 10600 #line 4733 "parse.y" 10601 { 10602 /*%%%*/ 10603 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node)); 10604 /*% 10605 $$ = dispatch2(assoc_new, $1, $2); 10606 %*/ 10607 ;} 10608 break; 10609 10610 case 561: 10611 10612 /* Line 1464 of yacc.c */ 10613 #line 4789 "parse.y" 10614 {yyerrok;;} 10615 break; 10616 10617 case 564: 10618 10619 /* Line 1464 of yacc.c */ 10620 #line 4794 "parse.y" 10621 {yyerrok;;} 10622 break; 10623 10624 case 565: 10625 10626 /* Line 1464 of yacc.c */ 10627 #line 4798 "parse.y" 10628 { 10629 /*%%%*/ 10630 (yyval.node) = 0; 10631 /*% 10632 $$ = Qundef; 10633 %*/ 10634 ;} 10635 break; 10636 10637 10638 10639 /* Line 1464 of yacc.c */ 10640 #line 10639 "parse.c" 10641 default: break; 10642 } 10643 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 10644 10645 YYPOPSTACK (yylen); 10646 yylen = 0; 10647 YY_STACK_PRINT (yyss, yyssp); 10648 10649 *++yyvsp = yyval; 10650 10651 /* Now `shift' the result of the reduction. Determine what state 10652 that goes to, based on the state we popped back to and the rule 10653 number reduced by. */ 10654 10655 yyn = yyr1[yyn]; 10656 10657 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 10658 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 10659 yystate = yytable[yystate]; 10660 else 10661 yystate = yydefgoto[yyn - YYNTOKENS]; 10662 10663 goto yynewstate; 10664 10665 10666 /*------------------------------------. 10667 | yyerrlab -- here on detecting error | 10668 `------------------------------------*/ 10669 yyerrlab: 10670 /* If not already recovering from an error, report this error. */ 10671 if (!yyerrstatus) 10672 { 10673 ++yynerrs; 10674 #if ! YYERROR_VERBOSE 10675 parser_yyerror (parser, YY_("syntax error")); 10676 #else 10677 { 10678 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); 10679 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) 10680 { 10681 YYSIZE_T yyalloc = 2 * yysize; 10682 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) 10683 yyalloc = YYSTACK_ALLOC_MAXIMUM; 10684 if (yymsg != yymsgbuf) 10685 YYSTACK_FREE (yymsg); 10686 yymsg = (char *) YYSTACK_ALLOC (yyalloc); 10687 if (yymsg) 10688 yymsg_alloc = yyalloc; 10689 else 10690 { 10691 yymsg = yymsgbuf; 10692 yymsg_alloc = sizeof yymsgbuf; 10693 } 10694 } 10695 10696 if (0 < yysize && yysize <= yymsg_alloc) 10697 { 10698 (void) yysyntax_error (yymsg, yystate, yychar); 10699 parser_yyerror (parser, yymsg); 10700 } 10701 else 10702 { 10703 parser_yyerror (parser, YY_("syntax error")); 10704 if (yysize != 0) 10705 goto yyexhaustedlab; 10706 } 10707 } 10708 #endif 10709 } 10710 10711 10712 10713 if (yyerrstatus == 3) 10714 { 10715 /* If just tried and failed to reuse lookahead token after an 10716 error, discard it. */ 10717 10718 if (yychar <= YYEOF) 10719 { 10720 /* Return failure if at end of input. */ 10721 if (yychar == YYEOF) 10722 YYABORT; 10723 } 10724 else 10725 { 10726 yydestruct ("Error: discarding", 10727 yytoken, &yylval, parser); 10728 yychar = YYEMPTY; 10729 } 10730 } 10731 10732 /* Else will try to reuse lookahead token after shifting the error 10733 token. */ 10734 goto yyerrlab1; 10735 10736 10737 /*---------------------------------------------------. 10738 | yyerrorlab -- error raised explicitly by YYERROR. | 10739 `---------------------------------------------------*/ 10740 yyerrorlab: 10741 10742 /* Pacify compilers like GCC when the user code never invokes 10743 YYERROR and the label yyerrorlab therefore never appears in user 10744 code. */ 10745 if (/*CONSTCOND*/ 0) 10746 goto yyerrorlab; 10747 10748 /* Do not reclaim the symbols of the rule which action triggered 10749 this YYERROR. */ 10750 YYPOPSTACK (yylen); 10751 yylen = 0; 10752 YY_STACK_PRINT (yyss, yyssp); 10753 yystate = *yyssp; 10754 goto yyerrlab1; 10755 10756 10757 /*-------------------------------------------------------------. 10758 | yyerrlab1 -- common code for both syntax error and YYERROR. | 10759 `-------------------------------------------------------------*/ 10760 yyerrlab1: 10761 yyerrstatus = 3; /* Each real token shifted decrements this. */ 10762 10763 for (;;) 10764 { 10765 yyn = yypact[yystate]; 10766 if (yyn != YYPACT_NINF) 10767 { 10768 yyn += YYTERROR; 10769 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 10770 { 10771 yyn = yytable[yyn]; 10772 if (0 < yyn) 10773 break; 10774 } 10775 } 10776 10777 /* Pop the current state because it cannot handle the error token. */ 10778 if (yyssp == yyss) 10779 YYABORT; 10780 10781 10782 yydestruct ("Error: popping", 10783 yystos[yystate], yyvsp, parser); 10784 YYPOPSTACK (1); 10785 yystate = *yyssp; 10786 YY_STACK_PRINT (yyss, yyssp); 10787 } 10788 10789 *++yyvsp = yylval; 10790 10791 10792 /* Shift the error token. */ 10793 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 10794 10795 yystate = yyn; 10796 goto yynewstate; 10797 10798 10799 /*-------------------------------------. 10800 | yyacceptlab -- YYACCEPT comes here. | 10801 `-------------------------------------*/ 10802 yyacceptlab: 10803 yyresult = 0; 10804 goto yyreturn; 10805 10806 /*-----------------------------------. 10807 | yyabortlab -- YYABORT comes here. | 10808 `-----------------------------------*/ 10809 yyabortlab: 10810 yyresult = 1; 10811 goto yyreturn; 10812 10813 #if !defined(yyoverflow) || YYERROR_VERBOSE 10814 /*-------------------------------------------------. 10815 | yyexhaustedlab -- memory exhaustion comes here. | 10816 `-------------------------------------------------*/ 10817 yyexhaustedlab: 10818 parser_yyerror (parser, YY_("memory exhausted")); 10819 yyresult = 2; 10820 /* Fall through. */ 10821 #endif 10822 10823 yyreturn: 10824 if (yychar != YYEMPTY) 10825 yydestruct ("Cleanup: discarding lookahead", 10826 yytoken, &yylval, parser); 10827 /* Do not reclaim the symbols of the rule which action triggered 10828 this YYABORT or YYACCEPT. */ 10829 YYPOPSTACK (yylen); 10830 YY_STACK_PRINT (yyss, yyssp); 10831 while (yyssp != yyss) 10832 { 10833 yydestruct ("Cleanup: popping", 10834 yystos[*yyssp], yyvsp, parser); 10835 YYPOPSTACK (1); 10836 } 10837 #ifndef yyoverflow 10838 if (yyss != yyssa) 10839 YYSTACK_FREE (yyss); 10840 #endif 10841 #if YYERROR_VERBOSE 10842 if (yymsg != yymsgbuf) 10843 YYSTACK_FREE (yymsg); 10844 #endif 10845 /* Make sure YYID is used. */ 10846 return YYID (yyresult); 10847 } 10848 10849 10850 10851 /* Line 1684 of yacc.c */ 10852 #line 4806 "parse.y" 10853 10854 # undef parser 10855 # undef yylex 10856 # undef yylval 10857 # define yylval (*((YYSTYPE*)(parser->parser_yylval))) 10858 10859 static int parser_regx_options(struct parser_params*); 10860 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**); 10861 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc); 10862 static int parser_parse_string(struct parser_params*,NODE*); 10863 static int parser_here_document(struct parser_params*,NODE*); 10864 10865 10866 # define nextc() parser_nextc(parser) 10867 # define pushback(c) parser_pushback(parser, c) 10868 # define newtok() parser_newtok(parser) 10869 # define tokspace(n) parser_tokspace(parser, n) 10870 # define tokadd(c) parser_tokadd(parser, c) 10871 # define tok_hex(numlen) parser_tok_hex(parser, numlen) 10872 # define read_escape(flags,e) parser_read_escape(parser, flags, e) 10873 # define tokadd_escape(e) parser_tokadd_escape(parser, e) 10874 # define regx_options() parser_regx_options(parser) 10875 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,f,t,p,n,e) 10876 # define parse_string(n) parser_parse_string(parser,n) 10877 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, c, enc) 10878 # define here_document(n) parser_here_document(parser,n) 10879 # define heredoc_identifier() parser_heredoc_identifier(parser) 10880 # define heredoc_restore(n) parser_heredoc_restore(parser,n) 10881 # define whole_match_p(e,l,i) parser_whole_match_p(parser,e,l,i) 10882 10883 #ifndef RIPPER 10884 # define set_yylval_str(x) yylval.node = NEW_STR(x) 10885 # define set_yylval_num(x) yylval.num = x 10886 # define set_yylval_id(x) yylval.id = x 10887 # define set_yylval_name(x) yylval.id = x 10888 # define set_yylval_literal(x) yylval.node = NEW_LIT(x) 10889 # define set_yylval_node(x) yylval.node = x 10890 # define yylval_id() yylval.id 10891 #else 10892 static inline VALUE 10893 ripper_yylval_id(ID x) 10894 { 10895 return (VALUE)NEW_LASGN(x, ID2SYM(x)); 10896 } 10897 # define set_yylval_str(x) (void)(x) 10898 # define set_yylval_num(x) (void)(x) 10899 # define set_yylval_id(x) (void)(x) 10900 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x)) 10901 # define set_yylval_literal(x) (void)(x) 10902 # define set_yylval_node(x) (void)(x) 10903 # define yylval_id() yylval.id 10904 #endif 10905 10906 #ifndef RIPPER 10907 #define ripper_flush(p) (void)(p) 10908 #else 10909 #define ripper_flush(p) (p->tokp = p->parser_lex_p) 10910 10911 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val) 10912 10913 static int 10914 ripper_has_scan_event(struct parser_params *parser) 10915 { 10916 10917 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp"); 10918 return lex_p > parser->tokp; 10919 } 10920 10921 static VALUE 10922 ripper_scan_event_val(struct parser_params *parser, int t) 10923 { 10924 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp); 10925 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str); 10926 ripper_flush(parser); 10927 return rval; 10928 } 10929 10930 static void 10931 ripper_dispatch_scan_event(struct parser_params *parser, int t) 10932 { 10933 if (!ripper_has_scan_event(parser)) return; 10934 yylval_rval = ripper_scan_event_val(parser, t); 10935 } 10936 10937 static void 10938 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t) 10939 { 10940 if (!ripper_has_scan_event(parser)) return; 10941 (void)ripper_scan_event_val(parser, t); 10942 } 10943 10944 static void 10945 ripper_dispatch_delayed_token(struct parser_params *parser, int t) 10946 { 10947 int saved_line = ruby_sourceline; 10948 const char *saved_tokp = parser->tokp; 10949 10950 ruby_sourceline = parser->delayed_line; 10951 parser->tokp = lex_pbeg + parser->delayed_col; 10952 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed); 10953 parser->delayed = Qnil; 10954 ruby_sourceline = saved_line; 10955 parser->tokp = saved_tokp; 10956 } 10957 #endif /* RIPPER */ 10958 10959 #include "ruby/regex.h" 10960 #include "ruby/util.h" 10961 10962 /* We remove any previous definition of `SIGN_EXTEND_CHAR', 10963 since ours (we hope) works properly with all combinations of 10964 machines, compilers, `char' and `unsigned char' argument types. 10965 (Per Bothner suggested the basic approach.) */ 10966 #undef SIGN_EXTEND_CHAR 10967 #if __STDC__ 10968 # define SIGN_EXTEND_CHAR(c) ((signed char)(c)) 10969 #else /* not __STDC__ */ 10970 /* As in Harbison and Steele. */ 10971 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128) 10972 #endif 10973 10974 #define parser_encoding_name() (parser->enc->name) 10975 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc) 10976 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc) 10977 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p)) 10978 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc)) 10979 10980 #define parser_isascii() ISASCII(*(lex_p-1)) 10981 10982 #ifndef RIPPER 10983 static int 10984 token_info_get_column(struct parser_params *parser, const char *token) 10985 { 10986 int column = 1; 10987 const char *p, *pend = lex_p - strlen(token); 10988 for (p = lex_pbeg; p < pend; p++) { 10989 if (*p == '\t') { 10990 column = (((column - 1) / 8) + 1) * 8; 10991 } 10992 column++; 10993 } 10994 return column; 10995 } 10996 10997 static int 10998 token_info_has_nonspaces(struct parser_params *parser, const char *token) 10999 { 11000 const char *p, *pend = lex_p - strlen(token); 11001 for (p = lex_pbeg; p < pend; p++) { 11002 if (*p != ' ' && *p != '\t') { 11003 return 1; 11004 } 11005 } 11006 return 0; 11007 } 11008 11009 #undef token_info_push 11010 static void 11011 token_info_push(struct parser_params *parser, const char *token) 11012 { 11013 token_info *ptinfo; 11014 11015 if (compile_for_eval) return; 11016 ptinfo = ALLOC(token_info); 11017 ptinfo->token = token; 11018 ptinfo->linenum = ruby_sourceline; 11019 ptinfo->column = token_info_get_column(parser, token); 11020 ptinfo->nonspc = token_info_has_nonspaces(parser, token); 11021 ptinfo->next = parser->parser_token_info; 11022 11023 parser->parser_token_info = ptinfo; 11024 } 11025 11026 #undef token_info_pop 11027 static void 11028 token_info_pop(struct parser_params *parser, const char *token) 11029 { 11030 int linenum; 11031 token_info *ptinfo = parser->parser_token_info; 11032 11033 if (!ptinfo) return; 11034 parser->parser_token_info = ptinfo->next; 11035 if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */ 11036 goto finish; 11037 } 11038 linenum = ruby_sourceline; 11039 if (linenum == ptinfo->linenum) { /* SKIP */ 11040 goto finish; 11041 } 11042 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */ 11043 goto finish; 11044 } 11045 rb_compile_warning(ruby_sourcefile, linenum, 11046 "mismatched indentations at '%s' with '%s' at %d", 11047 token, ptinfo->token, ptinfo->linenum); 11048 11049 finish: 11050 xfree(ptinfo); 11051 } 11052 #endif /* RIPPER */ 11053 11054 static int 11055 parser_yyerror(struct parser_params *parser, const char *msg) 11056 { 11057 #ifndef RIPPER 11058 const int max_line_margin = 30; 11059 const char *p, *pe; 11060 char *buf; 11061 long len; 11062 int i; 11063 11064 compile_error(PARSER_ARG "%s", msg); 11065 p = lex_p; 11066 while (lex_pbeg <= p) { 11067 if (*p == '\n') break; 11068 p--; 11069 } 11070 p++; 11071 11072 pe = lex_p; 11073 while (pe < lex_pend) { 11074 if (*pe == '\n') break; 11075 pe++; 11076 } 11077 11078 len = pe - p; 11079 if (len > 4) { 11080 char *p2; 11081 const char *pre = "", *post = ""; 11082 11083 if (len > max_line_margin * 2 + 10) { 11084 if (lex_p - p > max_line_margin) { 11085 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline)); 11086 pre = "..."; 11087 } 11088 if (pe - lex_p > max_line_margin) { 11089 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline)); 11090 post = "..."; 11091 } 11092 len = pe - p; 11093 } 11094 buf = ALLOCA_N(char, len+2); 11095 MEMCPY(buf, p, char, len); 11096 buf[len] = '\0'; 11097 rb_compile_error_append("%s%s%s", pre, buf, post); 11098 11099 i = (int)(lex_p - p); 11100 p2 = buf; pe = buf + len; 11101 11102 while (p2 < pe) { 11103 if (*p2 != '\t') *p2 = ' '; 11104 p2++; 11105 } 11106 buf[i] = '^'; 11107 buf[i+1] = '\0'; 11108 rb_compile_error_append("%s%s", pre, buf); 11109 } 11110 #else 11111 dispatch1(parse_error, STR_NEW2(msg)); 11112 #endif /* !RIPPER */ 11113 return 0; 11114 } 11115 11116 static void parser_prepare(struct parser_params *parser); 11117 11118 #ifndef RIPPER 11119 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always); 11120 11121 static VALUE 11122 debug_lines(const char *f) 11123 { 11124 ID script_lines; 11125 CONST_ID(script_lines, "SCRIPT_LINES__"); 11126 if (rb_const_defined_at(rb_cObject, script_lines)) { 11127 VALUE hash = rb_const_get_at(rb_cObject, script_lines); 11128 if (TYPE(hash) == T_HASH) { 11129 VALUE fname = rb_str_new2(f); 11130 VALUE lines = rb_ary_new(); 11131 rb_hash_aset(hash, fname, lines); 11132 return lines; 11133 } 11134 } 11135 return 0; 11136 } 11137 11138 static VALUE 11139 coverage(const char *f, int n) 11140 { 11141 extern VALUE rb_get_coverages(void); 11142 VALUE coverages = rb_get_coverages(); 11143 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) { 11144 VALUE fname = rb_str_new2(f); 11145 VALUE lines = rb_ary_new2(n); 11146 int i; 11147 RBASIC(lines)->klass = 0; 11148 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil; 11149 RARRAY(lines)->as.heap.len = n; 11150 rb_hash_aset(coverages, fname, lines); 11151 return lines; 11152 } 11153 return 0; 11154 } 11155 11156 static int 11157 e_option_supplied(struct parser_params *parser) 11158 { 11159 return strcmp(ruby_sourcefile, "-e") == 0; 11160 } 11161 11162 static VALUE 11163 yycompile0(VALUE arg, int tracing) 11164 { 11165 int n; 11166 NODE *tree; 11167 struct parser_params *parser = (struct parser_params *)arg; 11168 11169 if (!compile_for_eval && rb_safe_level() == 0) { 11170 ruby_debug_lines = debug_lines(ruby_sourcefile); 11171 if (ruby_debug_lines && ruby_sourceline > 0) { 11172 VALUE str = STR_NEW0(); 11173 n = ruby_sourceline; 11174 do { 11175 rb_ary_push(ruby_debug_lines, str); 11176 } while (--n); 11177 } 11178 11179 if (!e_option_supplied(parser)) { 11180 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline); 11181 } 11182 } 11183 11184 parser_prepare(parser); 11185 deferred_nodes = 0; 11186 n = yyparse((void*)parser); 11187 ruby_debug_lines = 0; 11188 ruby_coverage = 0; 11189 compile_for_eval = 0; 11190 11191 lex_strterm = 0; 11192 lex_p = lex_pbeg = lex_pend = 0; 11193 lex_lastline = lex_nextline = 0; 11194 if (parser->nerr) { 11195 return 0; 11196 } 11197 tree = ruby_eval_tree; 11198 if (!tree) { 11199 tree = NEW_NIL(); 11200 } 11201 else if (ruby_eval_tree_begin) { 11202 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body); 11203 } 11204 return (VALUE)tree; 11205 } 11206 11207 static NODE* 11208 yycompile(struct parser_params *parser, const char *f, int line) 11209 { 11210 ruby_sourcefile = ruby_strdup(f); 11211 ruby_sourceline = line - 1; 11212 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE); 11213 } 11214 #endif /* !RIPPER */ 11215 11216 static rb_encoding * 11217 must_be_ascii_compatible(VALUE s) 11218 { 11219 rb_encoding *enc = rb_enc_get(s); 11220 if (!rb_enc_asciicompat(enc)) { 11221 rb_raise(rb_eArgError, "invalid source encoding"); 11222 } 11223 return enc; 11224 } 11225 11226 static VALUE 11227 lex_get_str(struct parser_params *parser, VALUE s) 11228 { 11229 char *beg, *end, *pend; 11230 rb_encoding *enc = must_be_ascii_compatible(s); 11231 11232 beg = RSTRING_PTR(s); 11233 if (lex_gets_ptr) { 11234 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil; 11235 beg += lex_gets_ptr; 11236 } 11237 pend = RSTRING_PTR(s) + RSTRING_LEN(s); 11238 end = beg; 11239 while (end < pend) { 11240 if (*end++ == '\n') break; 11241 } 11242 lex_gets_ptr = end - RSTRING_PTR(s); 11243 return rb_enc_str_new(beg, end - beg, enc); 11244 } 11245 11246 static VALUE 11247 lex_getline(struct parser_params *parser) 11248 { 11249 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input); 11250 if (NIL_P(line)) return line; 11251 must_be_ascii_compatible(line); 11252 #ifndef RIPPER 11253 if (ruby_debug_lines) { 11254 rb_ary_push(ruby_debug_lines, line); 11255 } 11256 if (ruby_coverage) { 11257 rb_ary_push(ruby_coverage, Qnil); 11258 } 11259 #endif 11260 return line; 11261 } 11262 11263 static const rb_data_type_t parser_data_type; 11264 11265 #ifndef RIPPER 11266 static NODE* 11267 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 11268 { 11269 struct parser_params *parser; 11270 NODE *node; 11271 volatile VALUE tmp; 11272 11273 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 11274 lex_gets = lex_get_str; 11275 lex_gets_ptr = 0; 11276 lex_input = s; 11277 lex_pbeg = lex_p = lex_pend = 0; 11278 compile_for_eval = rb_parse_in_eval(); 11279 11280 node = yycompile(parser, f, line); 11281 tmp = vparser; /* prohibit tail call optimization */ 11282 11283 return node; 11284 } 11285 11286 NODE* 11287 rb_compile_string(const char *f, VALUE s, int line) 11288 { 11289 must_be_ascii_compatible(s); 11290 return parser_compile_string(rb_parser_new(), f, s, line); 11291 } 11292 11293 NODE* 11294 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 11295 { 11296 must_be_ascii_compatible(s); 11297 return parser_compile_string(vparser, f, s, line); 11298 } 11299 11300 NODE* 11301 rb_compile_cstr(const char *f, const char *s, int len, int line) 11302 { 11303 VALUE str = rb_str_new(s, len); 11304 return parser_compile_string(rb_parser_new(), f, str, line); 11305 } 11306 11307 NODE* 11308 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line) 11309 { 11310 VALUE str = rb_str_new(s, len); 11311 return parser_compile_string(vparser, f, str, line); 11312 } 11313 11314 static VALUE 11315 lex_io_gets(struct parser_params *parser, VALUE io) 11316 { 11317 return rb_io_gets(io); 11318 } 11319 11320 NODE* 11321 rb_compile_file(const char *f, VALUE file, int start) 11322 { 11323 VALUE volatile vparser = rb_parser_new(); 11324 11325 return rb_parser_compile_file(vparser, f, file, start); 11326 } 11327 11328 NODE* 11329 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start) 11330 { 11331 struct parser_params *parser; 11332 volatile VALUE tmp; 11333 NODE *node; 11334 11335 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 11336 lex_gets = lex_io_gets; 11337 lex_input = file; 11338 lex_pbeg = lex_p = lex_pend = 0; 11339 compile_for_eval = rb_parse_in_eval(); 11340 11341 node = yycompile(parser, f, start); 11342 tmp = vparser; /* prohibit tail call optimization */ 11343 11344 return node; 11345 } 11346 #endif /* !RIPPER */ 11347 11348 #define STR_FUNC_ESCAPE 0x01 11349 #define STR_FUNC_EXPAND 0x02 11350 #define STR_FUNC_REGEXP 0x04 11351 #define STR_FUNC_QWORDS 0x08 11352 #define STR_FUNC_SYMBOL 0x10 11353 #define STR_FUNC_INDENT 0x20 11354 11355 enum string_type { 11356 str_squote = (0), 11357 str_dquote = (STR_FUNC_EXPAND), 11358 str_xquote = (STR_FUNC_EXPAND), 11359 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND), 11360 str_sword = (STR_FUNC_QWORDS), 11361 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND), 11362 str_ssym = (STR_FUNC_SYMBOL), 11363 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND) 11364 }; 11365 11366 static VALUE 11367 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0) 11368 { 11369 VALUE str; 11370 11371 str = rb_enc_str_new(p, n, enc); 11372 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { 11373 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 11374 } 11375 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) { 11376 rb_enc_associate(str, rb_ascii8bit_encoding()); 11377 } 11378 } 11379 11380 return str; 11381 } 11382 11383 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend) 11384 #define peek(c) (lex_p < lex_pend && (c) == *lex_p) 11385 11386 static inline int 11387 parser_nextc(struct parser_params *parser) 11388 { 11389 int c; 11390 11391 if (lex_p == lex_pend) { 11392 VALUE v = lex_nextline; 11393 lex_nextline = 0; 11394 if (!v) { 11395 if (parser->eofp) 11396 return -1; 11397 11398 if (!lex_input || NIL_P(v = lex_getline(parser))) { 11399 parser->eofp = Qtrue; 11400 lex_goto_eol(parser); 11401 return -1; 11402 } 11403 } 11404 { 11405 #ifdef RIPPER 11406 if (parser->tokp < lex_pend) { 11407 if (NIL_P(parser->delayed)) { 11408 parser->delayed = rb_str_buf_new(1024); 11409 rb_str_buf_cat(parser->delayed, 11410 parser->tokp, lex_pend - parser->tokp); 11411 parser->delayed_line = ruby_sourceline; 11412 parser->delayed_col = (int)(parser->tokp - lex_pbeg); 11413 } 11414 else { 11415 rb_str_buf_cat(parser->delayed, 11416 parser->tokp, lex_pend - parser->tokp); 11417 } 11418 } 11419 #endif 11420 if (heredoc_end > 0) { 11421 ruby_sourceline = heredoc_end; 11422 heredoc_end = 0; 11423 } 11424 ruby_sourceline++; 11425 parser->line_count++; 11426 lex_pbeg = lex_p = RSTRING_PTR(v); 11427 lex_pend = lex_p + RSTRING_LEN(v); 11428 ripper_flush(parser); 11429 lex_lastline = v; 11430 } 11431 } 11432 c = (unsigned char)*lex_p++; 11433 if (c == '\r' && peek('\n')) { 11434 lex_p++; 11435 c = '\n'; 11436 } 11437 11438 return c; 11439 } 11440 11441 static void 11442 parser_pushback(struct parser_params *parser, int c) 11443 { 11444 if (c == -1) return; 11445 lex_p--; 11446 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') { 11447 lex_p--; 11448 } 11449 } 11450 11451 #define was_bol() (lex_p == lex_pbeg + 1) 11452 11453 #define tokfix() (tokenbuf[tokidx]='\0') 11454 #define tok() tokenbuf 11455 #define toklen() tokidx 11456 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0) 11457 11458 static char* 11459 parser_newtok(struct parser_params *parser) 11460 { 11461 tokidx = 0; 11462 if (!tokenbuf) { 11463 toksiz = 60; 11464 tokenbuf = ALLOC_N(char, 60); 11465 } 11466 if (toksiz > 4096) { 11467 toksiz = 60; 11468 REALLOC_N(tokenbuf, char, 60); 11469 } 11470 return tokenbuf; 11471 } 11472 11473 static char * 11474 parser_tokspace(struct parser_params *parser, int n) 11475 { 11476 tokidx += n; 11477 11478 if (tokidx >= toksiz) { 11479 do {toksiz *= 2;} while (toksiz < tokidx); 11480 REALLOC_N(tokenbuf, char, toksiz); 11481 } 11482 return &tokenbuf[tokidx-n]; 11483 } 11484 11485 static void 11486 parser_tokadd(struct parser_params *parser, int c) 11487 { 11488 tokenbuf[tokidx++] = (char)c; 11489 if (tokidx >= toksiz) { 11490 toksiz *= 2; 11491 REALLOC_N(tokenbuf, char, toksiz); 11492 } 11493 } 11494 11495 static int 11496 parser_tok_hex(struct parser_params *parser, size_t *numlen) 11497 { 11498 int c; 11499 11500 c = scan_hex(lex_p, 2, numlen); 11501 if (!*numlen) { 11502 yyerror("invalid hex escape"); 11503 return 0; 11504 } 11505 lex_p += *numlen; 11506 return c; 11507 } 11508 11509 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n)) 11510 11511 static int 11512 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, 11513 int string_literal, int symbol_literal, int regexp_literal) 11514 { 11515 /* 11516 * If string_literal is true, then we allow multiple codepoints 11517 * in \u{}, and add the codepoints to the current token. 11518 * Otherwise we're parsing a character literal and return a single 11519 * codepoint without adding it 11520 */ 11521 11522 int codepoint; 11523 size_t numlen; 11524 11525 if (regexp_literal) { tokadd('\\'); tokadd('u'); } 11526 11527 if (peek('{')) { /* handle \u{...} form */ 11528 do { 11529 if (regexp_literal) { tokadd(*lex_p); } 11530 nextc(); 11531 codepoint = scan_hex(lex_p, 6, &numlen); 11532 if (numlen == 0) { 11533 yyerror("invalid Unicode escape"); 11534 return 0; 11535 } 11536 if (codepoint > 0x10ffff) { 11537 yyerror("invalid Unicode codepoint (too large)"); 11538 return 0; 11539 } 11540 lex_p += numlen; 11541 if (regexp_literal) { 11542 tokcopy((int)numlen); 11543 } 11544 else if (codepoint >= 0x80) { 11545 *encp = UTF8_ENC(); 11546 if (string_literal) tokaddmbc(codepoint, *encp); 11547 } 11548 else if (string_literal) { 11549 tokadd(codepoint); 11550 } 11551 } while (string_literal && (peek(' ') || peek('\t'))); 11552 11553 if (!peek('}')) { 11554 yyerror("unterminated Unicode escape"); 11555 return 0; 11556 } 11557 11558 if (regexp_literal) { tokadd('}'); } 11559 nextc(); 11560 } 11561 else { /* handle \uxxxx form */ 11562 codepoint = scan_hex(lex_p, 4, &numlen); 11563 if (numlen < 4) { 11564 yyerror("invalid Unicode escape"); 11565 return 0; 11566 } 11567 lex_p += 4; 11568 if (regexp_literal) { 11569 tokcopy(4); 11570 } 11571 else if (codepoint >= 0x80) { 11572 *encp = UTF8_ENC(); 11573 if (string_literal) tokaddmbc(codepoint, *encp); 11574 } 11575 else if (string_literal) { 11576 tokadd(codepoint); 11577 } 11578 } 11579 11580 return codepoint; 11581 } 11582 11583 #define ESCAPE_CONTROL 1 11584 #define ESCAPE_META 2 11585 11586 static int 11587 parser_read_escape(struct parser_params *parser, int flags, 11588 rb_encoding **encp) 11589 { 11590 int c; 11591 size_t numlen; 11592 11593 switch (c = nextc()) { 11594 case '\\': /* Backslash */ 11595 return c; 11596 11597 case 'n': /* newline */ 11598 return '\n'; 11599 11600 case 't': /* horizontal tab */ 11601 return '\t'; 11602 11603 case 'r': /* carriage-return */ 11604 return '\r'; 11605 11606 case 'f': /* form-feed */ 11607 return '\f'; 11608 11609 case 'v': /* vertical tab */ 11610 return '\13'; 11611 11612 case 'a': /* alarm(bell) */ 11613 return '\007'; 11614 11615 case 'e': /* escape */ 11616 return 033; 11617 11618 case '0': case '1': case '2': case '3': /* octal constant */ 11619 case '4': case '5': case '6': case '7': 11620 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; 11621 pushback(c); 11622 c = scan_oct(lex_p, 3, &numlen); 11623 lex_p += numlen; 11624 return c; 11625 11626 case 'x': /* hex constant */ 11627 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; 11628 c = tok_hex(&numlen); 11629 if (numlen == 0) return 0; 11630 return c; 11631 11632 case 'b': /* backspace */ 11633 return '\010'; 11634 11635 case 's': /* space */ 11636 return ' '; 11637 11638 case 'M': 11639 if (flags & ESCAPE_META) goto eof; 11640 if ((c = nextc()) != '-') { 11641 pushback(c); 11642 goto eof; 11643 } 11644 if ((c = nextc()) == '\\') { 11645 if (peek('u')) goto eof; 11646 return read_escape(flags|ESCAPE_META, encp) | 0x80; 11647 } 11648 else if (c == -1 || !ISASCII(c)) goto eof; 11649 else { 11650 return ((c & 0xff) | 0x80); 11651 } 11652 11653 case 'C': 11654 if ((c = nextc()) != '-') { 11655 pushback(c); 11656 goto eof; 11657 } 11658 case 'c': 11659 if (flags & ESCAPE_CONTROL) goto eof; 11660 if ((c = nextc())== '\\') { 11661 if (peek('u')) goto eof; 11662 c = read_escape(flags|ESCAPE_CONTROL, encp); 11663 } 11664 else if (c == '?') 11665 return 0177; 11666 else if (c == -1 || !ISASCII(c)) goto eof; 11667 return c & 0x9f; 11668 11669 eof: 11670 case -1: 11671 yyerror("Invalid escape character syntax"); 11672 return '\0'; 11673 11674 default: 11675 return c; 11676 } 11677 } 11678 11679 static void 11680 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc) 11681 { 11682 int len = rb_enc_codelen(c, enc); 11683 rb_enc_mbcput(c, tokspace(len), enc); 11684 } 11685 11686 static int 11687 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp) 11688 { 11689 int c; 11690 int flags = 0; 11691 size_t numlen; 11692 11693 first: 11694 switch (c = nextc()) { 11695 case '\n': 11696 return 0; /* just ignore */ 11697 11698 case '0': case '1': case '2': case '3': /* octal constant */ 11699 case '4': case '5': case '6': case '7': 11700 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; 11701 { 11702 ruby_scan_oct(--lex_p, 3, &numlen); 11703 if (numlen == 0) goto eof; 11704 lex_p += numlen; 11705 tokcopy((int)numlen + 1); 11706 } 11707 return 0; 11708 11709 case 'x': /* hex constant */ 11710 if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof; 11711 { 11712 tok_hex(&numlen); 11713 if (numlen == 0) goto eof; 11714 tokcopy((int)numlen + 2); 11715 } 11716 return 0; 11717 11718 case 'M': 11719 if (flags & ESCAPE_META) goto eof; 11720 if ((c = nextc()) != '-') { 11721 pushback(c); 11722 goto eof; 11723 } 11724 tokcopy(3); 11725 flags |= ESCAPE_META; 11726 goto escaped; 11727 11728 case 'C': 11729 if (flags & ESCAPE_CONTROL) goto eof; 11730 if ((c = nextc()) != '-') { 11731 pushback(c); 11732 goto eof; 11733 } 11734 tokcopy(3); 11735 goto escaped; 11736 11737 case 'c': 11738 if (flags & ESCAPE_CONTROL) goto eof; 11739 tokcopy(2); 11740 flags |= ESCAPE_CONTROL; 11741 escaped: 11742 if ((c = nextc()) == '\\') { 11743 goto first; 11744 } 11745 else if (c == -1) goto eof; 11746 tokadd(c); 11747 return 0; 11748 11749 eof: 11750 case -1: 11751 yyerror("Invalid escape character syntax"); 11752 return -1; 11753 11754 default: 11755 tokadd('\\'); 11756 tokadd(c); 11757 } 11758 return 0; 11759 } 11760 11761 extern int rb_char_to_option_kcode(int c, int *option, int *kcode); 11762 11763 static int 11764 parser_regx_options(struct parser_params *parser) 11765 { 11766 int kcode = 0; 11767 int kopt = 0; 11768 int options = 0; 11769 int c, opt, kc; 11770 11771 newtok(); 11772 while (c = nextc(), ISALPHA(c)) { 11773 if (c == 'o') { 11774 options |= RE_OPTION_ONCE; 11775 } 11776 else if (rb_char_to_option_kcode(c, &opt, &kc)) { 11777 if (kc >= 0) { 11778 if (kc != rb_ascii8bit_encindex()) kcode = c; 11779 kopt = opt; 11780 } 11781 else { 11782 options |= opt; 11783 } 11784 } 11785 else { 11786 tokadd(c); 11787 } 11788 } 11789 options |= kopt; 11790 pushback(c); 11791 if (toklen()) { 11792 tokfix(); 11793 compile_error(PARSER_ARG "unknown regexp option%s - %s", 11794 toklen() > 1 ? "s" : "", tok()); 11795 } 11796 return options | RE_OPTION_ENCODING(kcode); 11797 } 11798 11799 static void 11800 dispose_string(VALUE str) 11801 { 11802 /* TODO: should use another API? */ 11803 if (RBASIC(str)->flags & RSTRING_NOEMBED) 11804 xfree(RSTRING_PTR(str)); 11805 rb_gc_force_recycle(str); 11806 } 11807 11808 static int 11809 parser_tokadd_mbchar(struct parser_params *parser, int c) 11810 { 11811 int len = parser_precise_mbclen(); 11812 if (!MBCLEN_CHARFOUND_P(len)) { 11813 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name()); 11814 return -1; 11815 } 11816 tokadd(c); 11817 lex_p += --len; 11818 if (len > 0) tokcopy(len); 11819 return c; 11820 } 11821 11822 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c) 11823 11824 static int 11825 parser_tokadd_string(struct parser_params *parser, 11826 int func, int term, int paren, long *nest, 11827 rb_encoding **encp) 11828 { 11829 int c; 11830 int has_nonascii = 0; 11831 rb_encoding *enc = *encp; 11832 char *errbuf = 0; 11833 static const char mixed_msg[] = "%s mixed within %s source"; 11834 11835 #define mixed_error(enc1, enc2) if (!errbuf) { \ 11836 size_t len = sizeof(mixed_msg) - 4; \ 11837 len += strlen(rb_enc_name(enc1)); \ 11838 len += strlen(rb_enc_name(enc2)); \ 11839 errbuf = ALLOCA_N(char, len); \ 11840 snprintf(errbuf, len, mixed_msg, \ 11841 rb_enc_name(enc1), \ 11842 rb_enc_name(enc2)); \ 11843 yyerror(errbuf); \ 11844 } 11845 #define mixed_escape(beg, enc1, enc2) do { \ 11846 const char *pos = lex_p; \ 11847 lex_p = beg; \ 11848 mixed_error(enc1, enc2); \ 11849 lex_p = pos; \ 11850 } while (0) 11851 11852 while ((c = nextc()) != -1) { 11853 if (paren && c == paren) { 11854 ++*nest; 11855 } 11856 else if (c == term) { 11857 if (!nest || !*nest) { 11858 pushback(c); 11859 break; 11860 } 11861 --*nest; 11862 } 11863 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) { 11864 int c2 = *lex_p; 11865 if (c2 == '$' || c2 == '@' || c2 == '{') { 11866 pushback(c); 11867 break; 11868 } 11869 } 11870 else if (c == '\\') { 11871 const char *beg = lex_p - 1; 11872 c = nextc(); 11873 switch (c) { 11874 case '\n': 11875 if (func & STR_FUNC_QWORDS) break; 11876 if (func & STR_FUNC_EXPAND) continue; 11877 tokadd('\\'); 11878 break; 11879 11880 case '\\': 11881 if (func & STR_FUNC_ESCAPE) tokadd(c); 11882 break; 11883 11884 case 'u': 11885 if ((func & STR_FUNC_EXPAND) == 0) { 11886 tokadd('\\'); 11887 break; 11888 } 11889 parser_tokadd_utf8(parser, &enc, 1, 11890 func & STR_FUNC_SYMBOL, 11891 func & STR_FUNC_REGEXP); 11892 if (has_nonascii && enc != *encp) { 11893 mixed_escape(beg, enc, *encp); 11894 } 11895 continue; 11896 11897 default: 11898 if (func & STR_FUNC_REGEXP) { 11899 pushback(c); 11900 if ((c = tokadd_escape(&enc)) < 0) 11901 return -1; 11902 if (has_nonascii && enc != *encp) { 11903 mixed_escape(beg, enc, *encp); 11904 } 11905 continue; 11906 } 11907 else if (func & STR_FUNC_EXPAND) { 11908 pushback(c); 11909 if (func & STR_FUNC_ESCAPE) tokadd('\\'); 11910 c = read_escape(0, &enc); 11911 } 11912 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11913 /* ignore backslashed spaces in %w */ 11914 } 11915 else if (c != term && !(paren && c == paren)) { 11916 tokadd('\\'); 11917 pushback(c); 11918 continue; 11919 } 11920 } 11921 } 11922 else if (!parser_isascii()) { 11923 has_nonascii = 1; 11924 if (enc != *encp) { 11925 mixed_error(enc, *encp); 11926 continue; 11927 } 11928 if (tokadd_mbchar(c) == -1) return -1; 11929 continue; 11930 } 11931 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11932 pushback(c); 11933 break; 11934 } 11935 if (c & 0x80) { 11936 has_nonascii = 1; 11937 if (enc != *encp) { 11938 mixed_error(enc, *encp); 11939 continue; 11940 } 11941 } 11942 tokadd(c); 11943 } 11944 *encp = enc; 11945 return c; 11946 } 11947 11948 #define NEW_STRTERM(func, term, paren) \ 11949 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0) 11950 11951 static int 11952 parser_parse_string(struct parser_params *parser, NODE *quote) 11953 { 11954 int func = (int)quote->nd_func; 11955 int term = nd_term(quote); 11956 int paren = nd_paren(quote); 11957 int c, space = 0; 11958 rb_encoding *enc = parser->enc; 11959 11960 if (func == -1) return tSTRING_END; 11961 c = nextc(); 11962 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11963 do {c = nextc();} while (ISSPACE(c)); 11964 space = 1; 11965 } 11966 if (c == term && !quote->nd_nest) { 11967 if (func & STR_FUNC_QWORDS) { 11968 quote->nd_func = -1; 11969 return ' '; 11970 } 11971 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END; 11972 set_yylval_num(regx_options()); 11973 return tREGEXP_END; 11974 } 11975 if (space) { 11976 pushback(c); 11977 return ' '; 11978 } 11979 newtok(); 11980 if ((func & STR_FUNC_EXPAND) && c == '#') { 11981 switch (c = nextc()) { 11982 case '$': 11983 case '@': 11984 pushback(c); 11985 return tSTRING_DVAR; 11986 case '{': 11987 return tSTRING_DBEG; 11988 } 11989 tokadd('#'); 11990 } 11991 pushback(c); 11992 if (tokadd_string(func, term, paren, "e->nd_nest, 11993 &enc) == -1) { 11994 ruby_sourceline = nd_line(quote); 11995 if (func & STR_FUNC_REGEXP) { 11996 if (parser->eofp) 11997 compile_error(PARSER_ARG "unterminated regexp meets end of file"); 11998 return tREGEXP_END; 11999 } 12000 else { 12001 if (parser->eofp) 12002 compile_error(PARSER_ARG "unterminated string meets end of file"); 12003 return tSTRING_END; 12004 } 12005 } 12006 12007 tokfix(); 12008 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 12009 return tSTRING_CONTENT; 12010 } 12011 12012 static int 12013 parser_heredoc_identifier(struct parser_params *parser) 12014 { 12015 int c = nextc(), term, func = 0; 12016 long len; 12017 12018 if (c == '-') { 12019 c = nextc(); 12020 func = STR_FUNC_INDENT; 12021 } 12022 switch (c) { 12023 case '\'': 12024 func |= str_squote; goto quoted; 12025 case '"': 12026 func |= str_dquote; goto quoted; 12027 case '`': 12028 func |= str_xquote; 12029 quoted: 12030 newtok(); 12031 tokadd(func); 12032 term = c; 12033 while ((c = nextc()) != -1 && c != term) { 12034 if (tokadd_mbchar(c) == -1) return 0; 12035 } 12036 if (c == -1) { 12037 compile_error(PARSER_ARG "unterminated here document identifier"); 12038 return 0; 12039 } 12040 break; 12041 12042 default: 12043 if (!parser_is_identchar()) { 12044 pushback(c); 12045 if (func & STR_FUNC_INDENT) { 12046 pushback('-'); 12047 } 12048 return 0; 12049 } 12050 newtok(); 12051 term = '"'; 12052 tokadd(func |= str_dquote); 12053 do { 12054 if (tokadd_mbchar(c) == -1) return 0; 12055 } while ((c = nextc()) != -1 && parser_is_identchar()); 12056 pushback(c); 12057 break; 12058 } 12059 12060 tokfix(); 12061 #ifdef RIPPER 12062 ripper_dispatch_scan_event(parser, tHEREDOC_BEG); 12063 #endif 12064 len = lex_p - lex_pbeg; 12065 lex_goto_eol(parser); 12066 lex_strterm = rb_node_newnode(NODE_HEREDOC, 12067 STR_NEW(tok(), toklen()), /* nd_lit */ 12068 len, /* nd_nth */ 12069 lex_lastline); /* nd_orig */ 12070 nd_set_line(lex_strterm, ruby_sourceline); 12071 ripper_flush(parser); 12072 return term == '`' ? tXSTRING_BEG : tSTRING_BEG; 12073 } 12074 12075 static void 12076 parser_heredoc_restore(struct parser_params *parser, NODE *here) 12077 { 12078 VALUE line; 12079 12080 line = here->nd_orig; 12081 lex_lastline = line; 12082 lex_pbeg = RSTRING_PTR(line); 12083 lex_pend = lex_pbeg + RSTRING_LEN(line); 12084 lex_p = lex_pbeg + here->nd_nth; 12085 heredoc_end = ruby_sourceline; 12086 ruby_sourceline = nd_line(here); 12087 dispose_string(here->nd_lit); 12088 rb_gc_force_recycle((VALUE)here); 12089 ripper_flush(parser); 12090 } 12091 12092 static int 12093 parser_whole_match_p(struct parser_params *parser, 12094 const char *eos, long len, int indent) 12095 { 12096 const char *p = lex_pbeg; 12097 long n; 12098 12099 if (indent) { 12100 while (*p && ISSPACE(*p)) p++; 12101 } 12102 n = lex_pend - (p + len); 12103 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE; 12104 return strncmp(eos, p, len) == 0; 12105 } 12106 12107 static int 12108 parser_here_document(struct parser_params *parser, NODE *here) 12109 { 12110 int c, func, indent = 0; 12111 const char *eos, *p, *pend; 12112 long len; 12113 VALUE str = 0; 12114 rb_encoding *enc = parser->enc; 12115 12116 eos = RSTRING_PTR(here->nd_lit); 12117 len = RSTRING_LEN(here->nd_lit) - 1; 12118 indent = (func = *eos++) & STR_FUNC_INDENT; 12119 12120 if ((c = nextc()) == -1) { 12121 error: 12122 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos); 12123 #ifdef RIPPER 12124 if (NIL_P(parser->delayed)) { 12125 ripper_dispatch_scan_event(parser, tSTRING_CONTENT); 12126 } 12127 else { 12128 if (str || 12129 ((len = lex_p - parser->tokp) > 0 && 12130 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) { 12131 rb_str_append(parser->delayed, str); 12132 } 12133 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12134 } 12135 lex_goto_eol(parser); 12136 #endif 12137 restore: 12138 heredoc_restore(lex_strterm); 12139 lex_strterm = 0; 12140 return 0; 12141 } 12142 if (was_bol() && whole_match_p(eos, len, indent)) { 12143 heredoc_restore(lex_strterm); 12144 return tSTRING_END; 12145 } 12146 12147 if (!(func & STR_FUNC_EXPAND)) { 12148 do { 12149 p = RSTRING_PTR(lex_lastline); 12150 pend = lex_pend; 12151 if (pend > p) { 12152 switch (pend[-1]) { 12153 case '\n': 12154 if (--pend == p || pend[-1] != '\r') { 12155 pend++; 12156 break; 12157 } 12158 case '\r': 12159 --pend; 12160 } 12161 } 12162 if (str) 12163 rb_str_cat(str, p, pend - p); 12164 else 12165 str = STR_NEW(p, pend - p); 12166 if (pend < lex_pend) rb_str_cat(str, "\n", 1); 12167 lex_goto_eol(parser); 12168 if (nextc() == -1) { 12169 if (str) dispose_string(str); 12170 goto error; 12171 } 12172 } while (!whole_match_p(eos, len, indent)); 12173 } 12174 else { 12175 /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/ 12176 newtok(); 12177 if (c == '#') { 12178 switch (c = nextc()) { 12179 case '$': 12180 case '@': 12181 pushback(c); 12182 return tSTRING_DVAR; 12183 case '{': 12184 return tSTRING_DBEG; 12185 } 12186 tokadd('#'); 12187 } 12188 do { 12189 pushback(c); 12190 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) { 12191 if (parser->eofp) goto error; 12192 goto restore; 12193 } 12194 if (c != '\n') { 12195 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 12196 return tSTRING_CONTENT; 12197 } 12198 tokadd(nextc()); 12199 /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/ 12200 if ((c = nextc()) == -1) goto error; 12201 } while (!whole_match_p(eos, len, indent)); 12202 str = STR_NEW3(tok(), toklen(), enc, func); 12203 } 12204 #ifdef RIPPER 12205 if (!NIL_P(parser->delayed)) 12206 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12207 lex_goto_eol(parser); 12208 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END); 12209 #endif 12210 heredoc_restore(lex_strterm); 12211 lex_strterm = NEW_STRTERM(-1, 0, 0); 12212 set_yylval_str(str); 12213 return tSTRING_CONTENT; 12214 } 12215 12216 #include "lex.c" 12217 12218 static void 12219 arg_ambiguous_gen(struct parser_params *parser) 12220 { 12221 #ifndef RIPPER 12222 rb_warning0("ambiguous first argument; put parentheses or even spaces"); 12223 #else 12224 dispatch0(arg_ambiguous); 12225 #endif 12226 } 12227 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1) 12228 12229 static ID 12230 formal_argument_gen(struct parser_params *parser, ID lhs) 12231 { 12232 #ifndef RIPPER 12233 if (!is_local_id(lhs)) 12234 yyerror("formal argument must be local variable"); 12235 #endif 12236 shadowing_lvar(lhs); 12237 return lhs; 12238 } 12239 12240 static int 12241 lvar_defined_gen(struct parser_params *parser, ID id) 12242 { 12243 return (dyna_in_block() && dvar_defined(id)) || local_id(id); 12244 } 12245 12246 /* emacsen -*- hack */ 12247 static long 12248 parser_encode_length(struct parser_params *parser, const char *name, long len) 12249 { 12250 long nlen; 12251 12252 if (len > 5 && name[nlen = len - 5] == '-') { 12253 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0) 12254 return nlen; 12255 } 12256 if (len > 4 && name[nlen = len - 5] == '-') { 12257 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0) 12258 return nlen; 12259 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0) 12260 return nlen; 12261 } 12262 return len; 12263 } 12264 12265 static void 12266 parser_set_encode(struct parser_params *parser, const char *name) 12267 { 12268 int idx = rb_enc_find_index(name); 12269 rb_encoding *enc; 12270 VALUE excargs[3]; 12271 12272 if (idx < 0) { 12273 VALUE rb_make_backtrace(void); 12274 VALUE rb_make_exception(int, VALUE*); 12275 12276 excargs[1] = rb_sprintf("unknown encoding name: %s", name); 12277 error: 12278 excargs[0] = rb_eArgError; 12279 excargs[2] = rb_make_backtrace(); 12280 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline)); 12281 rb_exc_raise(rb_make_exception(3, excargs)); 12282 } 12283 enc = rb_enc_from_index(idx); 12284 if (!rb_enc_asciicompat(enc)) { 12285 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc)); 12286 goto error; 12287 } 12288 parser->enc = enc; 12289 } 12290 12291 static int 12292 comment_at_top(struct parser_params *parser) 12293 { 12294 const char *p = lex_pbeg, *pend = lex_p - 1; 12295 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0; 12296 while (p < pend) { 12297 if (!ISSPACE(*p)) return 0; 12298 p++; 12299 } 12300 return 1; 12301 } 12302 12303 #ifndef RIPPER 12304 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len); 12305 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val); 12306 12307 static void 12308 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val) 12309 { 12310 if (!comment_at_top(parser)) { 12311 return; 12312 } 12313 parser_set_encode(parser, val); 12314 } 12315 12316 struct magic_comment { 12317 const char *name; 12318 rb_magic_comment_setter_t func; 12319 rb_magic_comment_length_t length; 12320 }; 12321 12322 static const struct magic_comment magic_comments[] = { 12323 {"coding", magic_comment_encoding, parser_encode_length}, 12324 {"encoding", magic_comment_encoding, parser_encode_length}, 12325 }; 12326 #endif 12327 12328 static const char * 12329 magic_comment_marker(const char *str, long len) 12330 { 12331 long i = 2; 12332 12333 while (i < len) { 12334 switch (str[i]) { 12335 case '-': 12336 if (str[i-1] == '*' && str[i-2] == '-') { 12337 return str + i + 1; 12338 } 12339 i += 2; 12340 break; 12341 case '*': 12342 if (i + 1 >= len) return 0; 12343 if (str[i+1] != '-') { 12344 i += 4; 12345 } 12346 else if (str[i-1] != '-') { 12347 i += 2; 12348 } 12349 else { 12350 return str + i + 2; 12351 } 12352 break; 12353 default: 12354 i += 3; 12355 break; 12356 } 12357 } 12358 return 0; 12359 } 12360 12361 static int 12362 parser_magic_comment(struct parser_params *parser, const char *str, long len) 12363 { 12364 VALUE name = 0, val = 0; 12365 const char *beg, *end, *vbeg, *vend; 12366 #define str_copy(_s, _p, _n) ((_s) \ 12367 ? (rb_str_resize((_s), (_n)), \ 12368 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \ 12369 : ((_s) = STR_NEW((_p), (_n)))) 12370 12371 if (len <= 7) return FALSE; 12372 if (!(beg = magic_comment_marker(str, len))) return FALSE; 12373 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE; 12374 str = beg; 12375 len = end - beg - 3; 12376 12377 /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */ 12378 while (len > 0) { 12379 #ifndef RIPPER 12380 const struct magic_comment *p = magic_comments; 12381 #endif 12382 char *s; 12383 int i; 12384 long n = 0; 12385 12386 for (; len > 0 && *str; str++, --len) { 12387 switch (*str) { 12388 case '\'': case '"': case ':': case ';': 12389 continue; 12390 } 12391 if (!ISSPACE(*str)) break; 12392 } 12393 for (beg = str; len > 0; str++, --len) { 12394 switch (*str) { 12395 case '\'': case '"': case ':': case ';': 12396 break; 12397 default: 12398 if (ISSPACE(*str)) break; 12399 continue; 12400 } 12401 break; 12402 } 12403 for (end = str; len > 0 && ISSPACE(*str); str++, --len); 12404 if (!len) break; 12405 if (*str != ':') continue; 12406 12407 do str++; while (--len > 0 && ISSPACE(*str)); 12408 if (!len) break; 12409 if (*str == '"') { 12410 for (vbeg = ++str; --len > 0 && *str != '"'; str++) { 12411 if (*str == '\\') { 12412 --len; 12413 ++str; 12414 } 12415 } 12416 vend = str; 12417 if (len) { 12418 --len; 12419 ++str; 12420 } 12421 } 12422 else { 12423 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++); 12424 vend = str; 12425 } 12426 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++; 12427 12428 n = end - beg; 12429 str_copy(name, beg, n); 12430 s = RSTRING_PTR(name); 12431 for (i = 0; i < n; ++i) { 12432 if (s[i] == '-') s[i] = '_'; 12433 } 12434 #ifndef RIPPER 12435 do { 12436 if (STRNCASECMP(p->name, s, n) == 0) { 12437 n = vend - vbeg; 12438 if (p->length) { 12439 n = (*p->length)(parser, vbeg, n); 12440 } 12441 str_copy(val, vbeg, n); 12442 (*p->func)(parser, s, RSTRING_PTR(val)); 12443 break; 12444 } 12445 } while (++p < magic_comments + numberof(magic_comments)); 12446 #else 12447 dispatch2(magic_comment, name, val); 12448 #endif 12449 } 12450 12451 return TRUE; 12452 } 12453 12454 static void 12455 set_file_encoding(struct parser_params *parser, const char *str, const char *send) 12456 { 12457 int sep = 0; 12458 const char *beg = str; 12459 VALUE s; 12460 12461 for (;;) { 12462 if (send - str <= 6) return; 12463 switch (str[6]) { 12464 case 'C': case 'c': str += 6; continue; 12465 case 'O': case 'o': str += 5; continue; 12466 case 'D': case 'd': str += 4; continue; 12467 case 'I': case 'i': str += 3; continue; 12468 case 'N': case 'n': str += 2; continue; 12469 case 'G': case 'g': str += 1; continue; 12470 case '=': case ':': 12471 sep = 1; 12472 str += 6; 12473 break; 12474 default: 12475 str += 6; 12476 if (ISSPACE(*str)) break; 12477 continue; 12478 } 12479 if (STRNCASECMP(str-6, "coding", 6) == 0) break; 12480 } 12481 for (;;) { 12482 do { 12483 if (++str >= send) return; 12484 } while (ISSPACE(*str)); 12485 if (sep) break; 12486 if (*str != '=' && *str != ':') return; 12487 sep = 1; 12488 str++; 12489 } 12490 beg = str; 12491 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send); 12492 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg)); 12493 parser_set_encode(parser, RSTRING_PTR(s)); 12494 rb_str_resize(s, 0); 12495 } 12496 12497 static void 12498 parser_prepare(struct parser_params *parser) 12499 { 12500 int c = nextc(); 12501 switch (c) { 12502 case '#': 12503 if (peek('!')) parser->has_shebang = 1; 12504 break; 12505 case 0xef: /* UTF-8 BOM marker */ 12506 if (lex_pend - lex_p >= 2 && 12507 (unsigned char)lex_p[0] == 0xbb && 12508 (unsigned char)lex_p[1] == 0xbf) { 12509 parser->enc = rb_utf8_encoding(); 12510 lex_p += 2; 12511 lex_pbeg = lex_p; 12512 return; 12513 } 12514 break; 12515 case EOF: 12516 return; 12517 } 12518 pushback(c); 12519 parser->enc = rb_enc_get(lex_lastline); 12520 } 12521 12522 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG) 12523 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN) 12524 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS) 12525 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c)) 12526 12527 #ifndef RIPPER 12528 #define ambiguous_operator(op, syn) ( \ 12529 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \ 12530 rb_warning0("even though it seems like "syn"")) 12531 #else 12532 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn)) 12533 #endif 12534 #define warn_balanced(op, syn) \ 12535 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \ 12536 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \ 12537 last_state != EXPR_ENDARG && \ 12538 space_seen && !ISSPACE(c) && \ 12539 (ambiguous_operator(op, syn), 0)) 12540 12541 static int 12542 parser_yylex(struct parser_params *parser) 12543 { 12544 register int c; 12545 int space_seen = 0; 12546 int cmd_state; 12547 enum lex_state_e last_state; 12548 rb_encoding *enc; 12549 int mb; 12550 #ifdef RIPPER 12551 int fallthru = FALSE; 12552 #endif 12553 12554 if (lex_strterm) { 12555 int token; 12556 if (nd_type(lex_strterm) == NODE_HEREDOC) { 12557 token = here_document(lex_strterm); 12558 if (token == tSTRING_END) { 12559 lex_strterm = 0; 12560 lex_state = EXPR_END; 12561 } 12562 } 12563 else { 12564 token = parse_string(lex_strterm); 12565 if (token == tSTRING_END || token == tREGEXP_END) { 12566 rb_gc_force_recycle((VALUE)lex_strterm); 12567 lex_strterm = 0; 12568 lex_state = EXPR_END; 12569 } 12570 } 12571 return token; 12572 } 12573 cmd_state = command_start; 12574 command_start = FALSE; 12575 retry: 12576 last_state = lex_state; 12577 switch (c = nextc()) { 12578 case '\0': /* NUL */ 12579 case '\004': /* ^D */ 12580 case '\032': /* ^Z */ 12581 case -1: /* end of script. */ 12582 return 0; 12583 12584 /* white spaces */ 12585 case ' ': case '\t': case '\f': case '\r': 12586 case '\13': /* '\v' */ 12587 space_seen = 1; 12588 #ifdef RIPPER 12589 while ((c = nextc())) { 12590 switch (c) { 12591 case ' ': case '\t': case '\f': case '\r': 12592 case '\13': /* '\v' */ 12593 break; 12594 default: 12595 goto outofloop; 12596 } 12597 } 12598 outofloop: 12599 pushback(c); 12600 ripper_dispatch_scan_event(parser, tSP); 12601 #endif 12602 goto retry; 12603 12604 case '#': /* it's a comment */ 12605 /* no magic_comment in shebang line */ 12606 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) { 12607 if (comment_at_top(parser)) { 12608 set_file_encoding(parser, lex_p, lex_pend); 12609 } 12610 } 12611 lex_p = lex_pend; 12612 #ifdef RIPPER 12613 ripper_dispatch_scan_event(parser, tCOMMENT); 12614 fallthru = TRUE; 12615 #endif 12616 /* fall through */ 12617 case '\n': 12618 switch (lex_state) { 12619 case EXPR_BEG: 12620 case EXPR_FNAME: 12621 case EXPR_DOT: 12622 case EXPR_CLASS: 12623 case EXPR_VALUE: 12624 #ifdef RIPPER 12625 if (!fallthru) { 12626 ripper_dispatch_scan_event(parser, tIGNORED_NL); 12627 } 12628 fallthru = FALSE; 12629 #endif 12630 goto retry; 12631 default: 12632 break; 12633 } 12634 while ((c = nextc())) { 12635 switch (c) { 12636 case ' ': case '\t': case '\f': case '\r': 12637 case '\13': /* '\v' */ 12638 space_seen = 1; 12639 break; 12640 case '.': { 12641 if ((c = nextc()) != '.') { 12642 pushback(c); 12643 pushback('.'); 12644 goto retry; 12645 } 12646 } 12647 default: 12648 --ruby_sourceline; 12649 lex_nextline = lex_lastline; 12650 case -1: /* EOF no decrement*/ 12651 lex_goto_eol(parser); 12652 #ifdef RIPPER 12653 if (c != -1) { 12654 parser->tokp = lex_p; 12655 } 12656 #endif 12657 goto normal_newline; 12658 } 12659 } 12660 normal_newline: 12661 command_start = TRUE; 12662 lex_state = EXPR_BEG; 12663 return '\n'; 12664 12665 case '*': 12666 if ((c = nextc()) == '*') { 12667 if ((c = nextc()) == '=') { 12668 set_yylval_id(tPOW); 12669 lex_state = EXPR_BEG; 12670 return tOP_ASGN; 12671 } 12672 pushback(c); 12673 c = tPOW; 12674 } 12675 else { 12676 if (c == '=') { 12677 set_yylval_id('*'); 12678 lex_state = EXPR_BEG; 12679 return tOP_ASGN; 12680 } 12681 pushback(c); 12682 if (IS_SPCARG(c)) { 12683 rb_warning0("`*' interpreted as argument prefix"); 12684 c = tSTAR; 12685 } 12686 else if (IS_BEG()) { 12687 c = tSTAR; 12688 } 12689 else { 12690 warn_balanced("*", "argument prefix"); 12691 c = '*'; 12692 } 12693 } 12694 switch (lex_state) { 12695 case EXPR_FNAME: case EXPR_DOT: 12696 lex_state = EXPR_ARG; break; 12697 default: 12698 lex_state = EXPR_BEG; break; 12699 } 12700 return c; 12701 12702 case '!': 12703 c = nextc(); 12704 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12705 lex_state = EXPR_ARG; 12706 if (c == '@') { 12707 return '!'; 12708 } 12709 } 12710 else { 12711 lex_state = EXPR_BEG; 12712 } 12713 if (c == '=') { 12714 return tNEQ; 12715 } 12716 if (c == '~') { 12717 return tNMATCH; 12718 } 12719 pushback(c); 12720 return '!'; 12721 12722 case '=': 12723 if (was_bol()) { 12724 /* skip embedded rd document */ 12725 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) { 12726 #ifdef RIPPER 12727 int first_p = TRUE; 12728 12729 lex_goto_eol(parser); 12730 ripper_dispatch_scan_event(parser, tEMBDOC_BEG); 12731 #endif 12732 for (;;) { 12733 lex_goto_eol(parser); 12734 #ifdef RIPPER 12735 if (!first_p) { 12736 ripper_dispatch_scan_event(parser, tEMBDOC); 12737 } 12738 first_p = FALSE; 12739 #endif 12740 c = nextc(); 12741 if (c == -1) { 12742 compile_error(PARSER_ARG "embedded document meets end of file"); 12743 return 0; 12744 } 12745 if (c != '=') continue; 12746 if (strncmp(lex_p, "end", 3) == 0 && 12747 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) { 12748 break; 12749 } 12750 } 12751 lex_goto_eol(parser); 12752 #ifdef RIPPER 12753 ripper_dispatch_scan_event(parser, tEMBDOC_END); 12754 #endif 12755 goto retry; 12756 } 12757 } 12758 12759 switch (lex_state) { 12760 case EXPR_FNAME: case EXPR_DOT: 12761 lex_state = EXPR_ARG; break; 12762 default: 12763 lex_state = EXPR_BEG; break; 12764 } 12765 if ((c = nextc()) == '=') { 12766 if ((c = nextc()) == '=') { 12767 return tEQQ; 12768 } 12769 pushback(c); 12770 return tEQ; 12771 } 12772 if (c == '~') { 12773 return tMATCH; 12774 } 12775 else if (c == '>') { 12776 return tASSOC; 12777 } 12778 pushback(c); 12779 return '='; 12780 12781 case '<': 12782 last_state = lex_state; 12783 c = nextc(); 12784 if (c == '<' && 12785 lex_state != EXPR_DOT && 12786 lex_state != EXPR_CLASS && 12787 !IS_END() && 12788 (!IS_ARG() || space_seen)) { 12789 int token = heredoc_identifier(); 12790 if (token) return token; 12791 } 12792 switch (lex_state) { 12793 case EXPR_FNAME: case EXPR_DOT: 12794 lex_state = EXPR_ARG; break; 12795 default: 12796 lex_state = EXPR_BEG; break; 12797 } 12798 if (c == '=') { 12799 if ((c = nextc()) == '>') { 12800 return tCMP; 12801 } 12802 pushback(c); 12803 return tLEQ; 12804 } 12805 if (c == '<') { 12806 if ((c = nextc()) == '=') { 12807 set_yylval_id(tLSHFT); 12808 lex_state = EXPR_BEG; 12809 return tOP_ASGN; 12810 } 12811 pushback(c); 12812 warn_balanced("<<", "here document"); 12813 return tLSHFT; 12814 } 12815 pushback(c); 12816 return '<'; 12817 12818 case '>': 12819 switch (lex_state) { 12820 case EXPR_FNAME: case EXPR_DOT: 12821 lex_state = EXPR_ARG; break; 12822 default: 12823 lex_state = EXPR_BEG; break; 12824 } 12825 if ((c = nextc()) == '=') { 12826 return tGEQ; 12827 } 12828 if (c == '>') { 12829 if ((c = nextc()) == '=') { 12830 set_yylval_id(tRSHFT); 12831 lex_state = EXPR_BEG; 12832 return tOP_ASGN; 12833 } 12834 pushback(c); 12835 return tRSHFT; 12836 } 12837 pushback(c); 12838 return '>'; 12839 12840 case '"': 12841 lex_strterm = NEW_STRTERM(str_dquote, '"', 0); 12842 return tSTRING_BEG; 12843 12844 case '`': 12845 if (lex_state == EXPR_FNAME) { 12846 lex_state = EXPR_ENDFN; 12847 return c; 12848 } 12849 if (lex_state == EXPR_DOT) { 12850 if (cmd_state) 12851 lex_state = EXPR_CMDARG; 12852 else 12853 lex_state = EXPR_ARG; 12854 return c; 12855 } 12856 lex_strterm = NEW_STRTERM(str_xquote, '`', 0); 12857 return tXSTRING_BEG; 12858 12859 case '\'': 12860 lex_strterm = NEW_STRTERM(str_squote, '\'', 0); 12861 return tSTRING_BEG; 12862 12863 case '?': 12864 if (IS_END()) { 12865 lex_state = EXPR_VALUE; 12866 return '?'; 12867 } 12868 c = nextc(); 12869 if (c == -1) { 12870 compile_error(PARSER_ARG "incomplete character syntax"); 12871 return 0; 12872 } 12873 if (rb_enc_isspace(c, parser->enc)) { 12874 if (!IS_ARG()) { 12875 int c2 = 0; 12876 switch (c) { 12877 case ' ': 12878 c2 = 's'; 12879 break; 12880 case '\n': 12881 c2 = 'n'; 12882 break; 12883 case '\t': 12884 c2 = 't'; 12885 break; 12886 case '\v': 12887 c2 = 'v'; 12888 break; 12889 case '\r': 12890 c2 = 'r'; 12891 break; 12892 case '\f': 12893 c2 = 'f'; 12894 break; 12895 } 12896 if (c2) { 12897 rb_warnI("invalid character syntax; use ?\\%c", c2); 12898 } 12899 } 12900 ternary: 12901 pushback(c); 12902 lex_state = EXPR_VALUE; 12903 return '?'; 12904 } 12905 newtok(); 12906 enc = parser->enc; 12907 if (!parser_isascii()) { 12908 if (tokadd_mbchar(c) == -1) return 0; 12909 } 12910 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') && 12911 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) { 12912 goto ternary; 12913 } 12914 else if (c == '\\') { 12915 if (peek('u')) { 12916 nextc(); 12917 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0); 12918 if (0x80 <= c) { 12919 tokaddmbc(c, enc); 12920 } 12921 else { 12922 tokadd(c); 12923 } 12924 } 12925 else { 12926 c = read_escape(0, &enc); 12927 tokadd(c); 12928 } 12929 } 12930 else { 12931 tokadd(c); 12932 } 12933 tokfix(); 12934 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0)); 12935 lex_state = EXPR_END; 12936 return tCHAR; 12937 12938 case '&': 12939 if ((c = nextc()) == '&') { 12940 lex_state = EXPR_BEG; 12941 if ((c = nextc()) == '=') { 12942 set_yylval_id(tANDOP); 12943 lex_state = EXPR_BEG; 12944 return tOP_ASGN; 12945 } 12946 pushback(c); 12947 return tANDOP; 12948 } 12949 else if (c == '=') { 12950 set_yylval_id('&'); 12951 lex_state = EXPR_BEG; 12952 return tOP_ASGN; 12953 } 12954 pushback(c); 12955 if (IS_SPCARG(c)) { 12956 rb_warning0("`&' interpreted as argument prefix"); 12957 c = tAMPER; 12958 } 12959 else if (IS_BEG()) { 12960 c = tAMPER; 12961 } 12962 else { 12963 warn_balanced("&", "argument prefix"); 12964 c = '&'; 12965 } 12966 switch (lex_state) { 12967 case EXPR_FNAME: case EXPR_DOT: 12968 lex_state = EXPR_ARG; break; 12969 default: 12970 lex_state = EXPR_BEG; 12971 } 12972 return c; 12973 12974 case '|': 12975 if ((c = nextc()) == '|') { 12976 lex_state = EXPR_BEG; 12977 if ((c = nextc()) == '=') { 12978 set_yylval_id(tOROP); 12979 lex_state = EXPR_BEG; 12980 return tOP_ASGN; 12981 } 12982 pushback(c); 12983 return tOROP; 12984 } 12985 if (c == '=') { 12986 set_yylval_id('|'); 12987 lex_state = EXPR_BEG; 12988 return tOP_ASGN; 12989 } 12990 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12991 lex_state = EXPR_ARG; 12992 } 12993 else { 12994 lex_state = EXPR_BEG; 12995 } 12996 pushback(c); 12997 return '|'; 12998 12999 case '+': 13000 c = nextc(); 13001 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13002 lex_state = EXPR_ARG; 13003 if (c == '@') { 13004 return tUPLUS; 13005 } 13006 pushback(c); 13007 return '+'; 13008 } 13009 if (c == '=') { 13010 set_yylval_id('+'); 13011 lex_state = EXPR_BEG; 13012 return tOP_ASGN; 13013 } 13014 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 13015 lex_state = EXPR_BEG; 13016 pushback(c); 13017 if (c != -1 && ISDIGIT(c)) { 13018 c = '+'; 13019 goto start_num; 13020 } 13021 return tUPLUS; 13022 } 13023 lex_state = EXPR_BEG; 13024 pushback(c); 13025 warn_balanced("+", "unary operator"); 13026 return '+'; 13027 13028 case '-': 13029 c = nextc(); 13030 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13031 lex_state = EXPR_ARG; 13032 if (c == '@') { 13033 return tUMINUS; 13034 } 13035 pushback(c); 13036 return '-'; 13037 } 13038 if (c == '=') { 13039 set_yylval_id('-'); 13040 lex_state = EXPR_BEG; 13041 return tOP_ASGN; 13042 } 13043 if (c == '>') { 13044 lex_state = EXPR_ARG; 13045 return tLAMBDA; 13046 } 13047 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 13048 lex_state = EXPR_BEG; 13049 pushback(c); 13050 if (c != -1 && ISDIGIT(c)) { 13051 return tUMINUS_NUM; 13052 } 13053 return tUMINUS; 13054 } 13055 lex_state = EXPR_BEG; 13056 pushback(c); 13057 warn_balanced("-", "unary operator"); 13058 return '-'; 13059 13060 case '.': 13061 lex_state = EXPR_BEG; 13062 if ((c = nextc()) == '.') { 13063 if ((c = nextc()) == '.') { 13064 return tDOT3; 13065 } 13066 pushback(c); 13067 return tDOT2; 13068 } 13069 pushback(c); 13070 if (c != -1 && ISDIGIT(c)) { 13071 yyerror("no .<digit> floating literal anymore; put 0 before dot"); 13072 } 13073 lex_state = EXPR_DOT; 13074 return '.'; 13075 13076 start_num: 13077 case '0': case '1': case '2': case '3': case '4': 13078 case '5': case '6': case '7': case '8': case '9': 13079 { 13080 int is_float, seen_point, seen_e, nondigit; 13081 13082 is_float = seen_point = seen_e = nondigit = 0; 13083 lex_state = EXPR_END; 13084 newtok(); 13085 if (c == '-' || c == '+') { 13086 tokadd(c); 13087 c = nextc(); 13088 } 13089 if (c == '0') { 13090 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0) 13091 int start = toklen(); 13092 c = nextc(); 13093 if (c == 'x' || c == 'X') { 13094 /* hexadecimal */ 13095 c = nextc(); 13096 if (c != -1 && ISXDIGIT(c)) { 13097 do { 13098 if (c == '_') { 13099 if (nondigit) break; 13100 nondigit = c; 13101 continue; 13102 } 13103 if (!ISXDIGIT(c)) break; 13104 nondigit = 0; 13105 tokadd(c); 13106 } while ((c = nextc()) != -1); 13107 } 13108 pushback(c); 13109 tokfix(); 13110 if (toklen() == start) { 13111 no_digits(); 13112 } 13113 else if (nondigit) goto trailing_uc; 13114 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE)); 13115 return tINTEGER; 13116 } 13117 if (c == 'b' || c == 'B') { 13118 /* binary */ 13119 c = nextc(); 13120 if (c == '0' || c == '1') { 13121 do { 13122 if (c == '_') { 13123 if (nondigit) break; 13124 nondigit = c; 13125 continue; 13126 } 13127 if (c != '0' && c != '1') break; 13128 nondigit = 0; 13129 tokadd(c); 13130 } while ((c = nextc()) != -1); 13131 } 13132 pushback(c); 13133 tokfix(); 13134 if (toklen() == start) { 13135 no_digits(); 13136 } 13137 else if (nondigit) goto trailing_uc; 13138 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE)); 13139 return tINTEGER; 13140 } 13141 if (c == 'd' || c == 'D') { 13142 /* decimal */ 13143 c = nextc(); 13144 if (c != -1 && ISDIGIT(c)) { 13145 do { 13146 if (c == '_') { 13147 if (nondigit) break; 13148 nondigit = c; 13149 continue; 13150 } 13151 if (!ISDIGIT(c)) break; 13152 nondigit = 0; 13153 tokadd(c); 13154 } while ((c = nextc()) != -1); 13155 } 13156 pushback(c); 13157 tokfix(); 13158 if (toklen() == start) { 13159 no_digits(); 13160 } 13161 else if (nondigit) goto trailing_uc; 13162 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 13163 return tINTEGER; 13164 } 13165 if (c == '_') { 13166 /* 0_0 */ 13167 goto octal_number; 13168 } 13169 if (c == 'o' || c == 'O') { 13170 /* prefixed octal */ 13171 c = nextc(); 13172 if (c == -1 || c == '_' || !ISDIGIT(c)) { 13173 no_digits(); 13174 } 13175 } 13176 if (c >= '0' && c <= '7') { 13177 /* octal */ 13178 octal_number: 13179 do { 13180 if (c == '_') { 13181 if (nondigit) break; 13182 nondigit = c; 13183 continue; 13184 } 13185 if (c < '0' || c > '9') break; 13186 if (c > '7') goto invalid_octal; 13187 nondigit = 0; 13188 tokadd(c); 13189 } while ((c = nextc()) != -1); 13190 if (toklen() > start) { 13191 pushback(c); 13192 tokfix(); 13193 if (nondigit) goto trailing_uc; 13194 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE)); 13195 return tINTEGER; 13196 } 13197 if (nondigit) { 13198 pushback(c); 13199 goto trailing_uc; 13200 } 13201 } 13202 if (c > '7' && c <= '9') { 13203 invalid_octal: 13204 yyerror("Invalid octal digit"); 13205 } 13206 else if (c == '.' || c == 'e' || c == 'E') { 13207 tokadd('0'); 13208 } 13209 else { 13210 pushback(c); 13211 set_yylval_literal(INT2FIX(0)); 13212 return tINTEGER; 13213 } 13214 } 13215 13216 for (;;) { 13217 switch (c) { 13218 case '0': case '1': case '2': case '3': case '4': 13219 case '5': case '6': case '7': case '8': case '9': 13220 nondigit = 0; 13221 tokadd(c); 13222 break; 13223 13224 case '.': 13225 if (nondigit) goto trailing_uc; 13226 if (seen_point || seen_e) { 13227 goto decode_num; 13228 } 13229 else { 13230 int c0 = nextc(); 13231 if (c0 == -1 || !ISDIGIT(c0)) { 13232 pushback(c0); 13233 goto decode_num; 13234 } 13235 c = c0; 13236 } 13237 tokadd('.'); 13238 tokadd(c); 13239 is_float++; 13240 seen_point++; 13241 nondigit = 0; 13242 break; 13243 13244 case 'e': 13245 case 'E': 13246 if (nondigit) { 13247 pushback(c); 13248 c = nondigit; 13249 goto decode_num; 13250 } 13251 if (seen_e) { 13252 goto decode_num; 13253 } 13254 tokadd(c); 13255 seen_e++; 13256 is_float++; 13257 nondigit = c; 13258 c = nextc(); 13259 if (c != '-' && c != '+') continue; 13260 tokadd(c); 13261 nondigit = c; 13262 break; 13263 13264 case '_': /* `_' in number just ignored */ 13265 if (nondigit) goto decode_num; 13266 nondigit = c; 13267 break; 13268 13269 default: 13270 goto decode_num; 13271 } 13272 c = nextc(); 13273 } 13274 13275 decode_num: 13276 pushback(c); 13277 if (nondigit) { 13278 char tmp[30]; 13279 trailing_uc: 13280 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit); 13281 yyerror(tmp); 13282 } 13283 tokfix(); 13284 if (is_float) { 13285 double d = strtod(tok(), 0); 13286 if (errno == ERANGE) { 13287 rb_warningS("Float %s out of range", tok()); 13288 errno = 0; 13289 } 13290 set_yylval_literal(DBL2NUM(d)); 13291 return tFLOAT; 13292 } 13293 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 13294 return tINTEGER; 13295 } 13296 13297 case ')': 13298 case ']': 13299 paren_nest--; 13300 case '}': 13301 COND_LEXPOP(); 13302 CMDARG_LEXPOP(); 13303 if (c == ')') 13304 lex_state = EXPR_ENDFN; 13305 else 13306 lex_state = EXPR_ENDARG; 13307 return c; 13308 13309 case ':': 13310 c = nextc(); 13311 if (c == ':') { 13312 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) { 13313 lex_state = EXPR_BEG; 13314 return tCOLON3; 13315 } 13316 lex_state = EXPR_DOT; 13317 return tCOLON2; 13318 } 13319 if (IS_END() || ISSPACE(c)) { 13320 pushback(c); 13321 warn_balanced(":", "symbol literal"); 13322 lex_state = EXPR_BEG; 13323 return ':'; 13324 } 13325 switch (c) { 13326 case '\'': 13327 lex_strterm = NEW_STRTERM(str_ssym, c, 0); 13328 break; 13329 case '"': 13330 lex_strterm = NEW_STRTERM(str_dsym, c, 0); 13331 break; 13332 default: 13333 pushback(c); 13334 break; 13335 } 13336 lex_state = EXPR_FNAME; 13337 return tSYMBEG; 13338 13339 case '/': 13340 if (IS_BEG()) { 13341 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 13342 return tREGEXP_BEG; 13343 } 13344 if ((c = nextc()) == '=') { 13345 set_yylval_id('/'); 13346 lex_state = EXPR_BEG; 13347 return tOP_ASGN; 13348 } 13349 pushback(c); 13350 if (IS_SPCARG(c)) { 13351 arg_ambiguous(); 13352 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 13353 return tREGEXP_BEG; 13354 } 13355 switch (lex_state) { 13356 case EXPR_FNAME: case EXPR_DOT: 13357 lex_state = EXPR_ARG; break; 13358 default: 13359 lex_state = EXPR_BEG; break; 13360 } 13361 warn_balanced("/", "regexp literal"); 13362 return '/'; 13363 13364 case '^': 13365 if ((c = nextc()) == '=') { 13366 set_yylval_id('^'); 13367 lex_state = EXPR_BEG; 13368 return tOP_ASGN; 13369 } 13370 switch (lex_state) { 13371 case EXPR_FNAME: case EXPR_DOT: 13372 lex_state = EXPR_ARG; break; 13373 default: 13374 lex_state = EXPR_BEG; break; 13375 } 13376 pushback(c); 13377 return '^'; 13378 13379 case ';': 13380 lex_state = EXPR_BEG; 13381 command_start = TRUE; 13382 return ';'; 13383 13384 case ',': 13385 lex_state = EXPR_BEG; 13386 return ','; 13387 13388 case '~': 13389 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13390 if ((c = nextc()) != '@') { 13391 pushback(c); 13392 } 13393 lex_state = EXPR_ARG; 13394 } 13395 else { 13396 lex_state = EXPR_BEG; 13397 } 13398 return '~'; 13399 13400 case '(': 13401 if (IS_BEG()) { 13402 c = tLPAREN; 13403 } 13404 else if (IS_SPCARG(-1)) { 13405 c = tLPAREN_ARG; 13406 } 13407 paren_nest++; 13408 COND_PUSH(0); 13409 CMDARG_PUSH(0); 13410 lex_state = EXPR_BEG; 13411 return c; 13412 13413 case '[': 13414 paren_nest++; 13415 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13416 lex_state = EXPR_ARG; 13417 if ((c = nextc()) == ']') { 13418 if ((c = nextc()) == '=') { 13419 return tASET; 13420 } 13421 pushback(c); 13422 return tAREF; 13423 } 13424 pushback(c); 13425 return '['; 13426 } 13427 else if (IS_BEG()) { 13428 c = tLBRACK; 13429 } 13430 else if (IS_ARG() && space_seen) { 13431 c = tLBRACK; 13432 } 13433 lex_state = EXPR_BEG; 13434 COND_PUSH(0); 13435 CMDARG_PUSH(0); 13436 return c; 13437 13438 case '{': 13439 if (lpar_beg && lpar_beg == paren_nest) { 13440 lex_state = EXPR_BEG; 13441 lpar_beg = 0; 13442 --paren_nest; 13443 COND_PUSH(0); 13444 CMDARG_PUSH(0); 13445 return tLAMBEG; 13446 } 13447 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN) 13448 c = '{'; /* block (primary) */ 13449 else if (lex_state == EXPR_ENDARG) 13450 c = tLBRACE_ARG; /* block (expr) */ 13451 else 13452 c = tLBRACE; /* hash */ 13453 COND_PUSH(0); 13454 CMDARG_PUSH(0); 13455 lex_state = EXPR_BEG; 13456 if (c != tLBRACE) command_start = TRUE; 13457 return c; 13458 13459 case '\\': 13460 c = nextc(); 13461 if (c == '\n') { 13462 space_seen = 1; 13463 #ifdef RIPPER 13464 ripper_dispatch_scan_event(parser, tSP); 13465 #endif 13466 goto retry; /* skip \\n */ 13467 } 13468 pushback(c); 13469 return '\\'; 13470 13471 case '%': 13472 if (IS_BEG()) { 13473 int term; 13474 int paren; 13475 13476 c = nextc(); 13477 quotation: 13478 if (c == -1 || !ISALNUM(c)) { 13479 term = c; 13480 c = 'Q'; 13481 } 13482 else { 13483 term = nextc(); 13484 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) { 13485 yyerror("unknown type of %string"); 13486 return 0; 13487 } 13488 } 13489 if (c == -1 || term == -1) { 13490 compile_error(PARSER_ARG "unterminated quoted string meets end of file"); 13491 return 0; 13492 } 13493 paren = term; 13494 if (term == '(') term = ')'; 13495 else if (term == '[') term = ']'; 13496 else if (term == '{') term = '}'; 13497 else if (term == '<') term = '>'; 13498 else paren = 0; 13499 13500 switch (c) { 13501 case 'Q': 13502 lex_strterm = NEW_STRTERM(str_dquote, term, paren); 13503 return tSTRING_BEG; 13504 13505 case 'q': 13506 lex_strterm = NEW_STRTERM(str_squote, term, paren); 13507 return tSTRING_BEG; 13508 13509 case 'W': 13510 lex_strterm = NEW_STRTERM(str_dword, term, paren); 13511 do {c = nextc();} while (ISSPACE(c)); 13512 pushback(c); 13513 return tWORDS_BEG; 13514 13515 case 'w': 13516 lex_strterm = NEW_STRTERM(str_sword, term, paren); 13517 do {c = nextc();} while (ISSPACE(c)); 13518 pushback(c); 13519 return tQWORDS_BEG; 13520 13521 case 'x': 13522 lex_strterm = NEW_STRTERM(str_xquote, term, paren); 13523 return tXSTRING_BEG; 13524 13525 case 'r': 13526 lex_strterm = NEW_STRTERM(str_regexp, term, paren); 13527 return tREGEXP_BEG; 13528 13529 case 's': 13530 lex_strterm = NEW_STRTERM(str_ssym, term, paren); 13531 lex_state = EXPR_FNAME; 13532 return tSYMBEG; 13533 13534 default: 13535 yyerror("unknown type of %string"); 13536 return 0; 13537 } 13538 } 13539 if ((c = nextc()) == '=') { 13540 set_yylval_id('%'); 13541 lex_state = EXPR_BEG; 13542 return tOP_ASGN; 13543 } 13544 if (IS_SPCARG(c)) { 13545 goto quotation; 13546 } 13547 switch (lex_state) { 13548 case EXPR_FNAME: case EXPR_DOT: 13549 lex_state = EXPR_ARG; break; 13550 default: 13551 lex_state = EXPR_BEG; break; 13552 } 13553 pushback(c); 13554 warn_balanced("%%", "string literal"); 13555 return '%'; 13556 13557 case '$': 13558 lex_state = EXPR_END; 13559 newtok(); 13560 c = nextc(); 13561 switch (c) { 13562 case '_': /* $_: last read line string */ 13563 c = nextc(); 13564 if (parser_is_identchar()) { 13565 tokadd('$'); 13566 tokadd('_'); 13567 break; 13568 } 13569 pushback(c); 13570 c = '_'; 13571 /* fall through */ 13572 case '~': /* $~: match-data */ 13573 case '*': /* $*: argv */ 13574 case '$': /* $$: pid */ 13575 case '?': /* $?: last status */ 13576 case '!': /* $!: error string */ 13577 case '@': /* $@: error position */ 13578 case '/': /* $/: input record separator */ 13579 case '\\': /* $\: output record separator */ 13580 case ';': /* $;: field separator */ 13581 case ',': /* $,: output field separator */ 13582 case '.': /* $.: last read line number */ 13583 case '=': /* $=: ignorecase */ 13584 case ':': /* $:: load path */ 13585 case '<': /* $<: reading filename */ 13586 case '>': /* $>: default output handle */ 13587 case '\"': /* $": already loaded files */ 13588 tokadd('$'); 13589 tokadd(c); 13590 tokfix(); 13591 set_yylval_name(rb_intern(tok())); 13592 return tGVAR; 13593 13594 case '-': 13595 tokadd('$'); 13596 tokadd(c); 13597 c = nextc(); 13598 if (parser_is_identchar()) { 13599 if (tokadd_mbchar(c) == -1) return 0; 13600 } 13601 else { 13602 pushback(c); 13603 } 13604 gvar: 13605 tokfix(); 13606 set_yylval_name(rb_intern(tok())); 13607 return tGVAR; 13608 13609 case '&': /* $&: last match */ 13610 case '`': /* $`: string before last match */ 13611 case '\'': /* $': string after last match */ 13612 case '+': /* $+: string matches last paren. */ 13613 if (last_state == EXPR_FNAME) { 13614 tokadd('$'); 13615 tokadd(c); 13616 goto gvar; 13617 } 13618 set_yylval_node(NEW_BACK_REF(c)); 13619 return tBACK_REF; 13620 13621 case '1': case '2': case '3': 13622 case '4': case '5': case '6': 13623 case '7': case '8': case '9': 13624 tokadd('$'); 13625 do { 13626 tokadd(c); 13627 c = nextc(); 13628 } while (c != -1 && ISDIGIT(c)); 13629 pushback(c); 13630 if (last_state == EXPR_FNAME) goto gvar; 13631 tokfix(); 13632 set_yylval_node(NEW_NTH_REF(atoi(tok()+1))); 13633 return tNTH_REF; 13634 13635 default: 13636 if (!parser_is_identchar()) { 13637 pushback(c); 13638 return '$'; 13639 } 13640 case '0': 13641 tokadd('$'); 13642 } 13643 break; 13644 13645 case '@': 13646 c = nextc(); 13647 newtok(); 13648 tokadd('@'); 13649 if (c == '@') { 13650 tokadd('@'); 13651 c = nextc(); 13652 } 13653 if (c != -1 && ISDIGIT(c)) { 13654 if (tokidx == 1) { 13655 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c); 13656 } 13657 else { 13658 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c); 13659 } 13660 return 0; 13661 } 13662 if (!parser_is_identchar()) { 13663 pushback(c); 13664 return '@'; 13665 } 13666 break; 13667 13668 case '_': 13669 if (was_bol() && whole_match_p("__END__", 7, 0)) { 13670 ruby__end__seen = 1; 13671 parser->eofp = Qtrue; 13672 #ifndef RIPPER 13673 return -1; 13674 #else 13675 lex_goto_eol(parser); 13676 ripper_dispatch_scan_event(parser, k__END__); 13677 return 0; 13678 #endif 13679 } 13680 newtok(); 13681 break; 13682 13683 default: 13684 if (!parser_is_identchar()) { 13685 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c); 13686 goto retry; 13687 } 13688 13689 newtok(); 13690 break; 13691 } 13692 13693 mb = ENC_CODERANGE_7BIT; 13694 do { 13695 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN; 13696 if (tokadd_mbchar(c) == -1) return 0; 13697 c = nextc(); 13698 } while (parser_is_identchar()); 13699 switch (tok()[0]) { 13700 case '@': case '$': 13701 pushback(c); 13702 break; 13703 default: 13704 if ((c == '!' || c == '?') && !peek('=')) { 13705 tokadd(c); 13706 } 13707 else { 13708 pushback(c); 13709 } 13710 } 13711 tokfix(); 13712 13713 { 13714 int result = 0; 13715 13716 last_state = lex_state; 13717 switch (tok()[0]) { 13718 case '$': 13719 lex_state = EXPR_END; 13720 result = tGVAR; 13721 break; 13722 case '@': 13723 lex_state = EXPR_END; 13724 if (tok()[1] == '@') 13725 result = tCVAR; 13726 else 13727 result = tIVAR; 13728 break; 13729 13730 default: 13731 if (toklast() == '!' || toklast() == '?') { 13732 result = tFID; 13733 } 13734 else { 13735 if (lex_state == EXPR_FNAME) { 13736 if ((c = nextc()) == '=' && !peek('~') && !peek('>') && 13737 (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) { 13738 result = tIDENTIFIER; 13739 tokadd(c); 13740 tokfix(); 13741 } 13742 else { 13743 pushback(c); 13744 } 13745 } 13746 if (result == 0 && ISUPPER(tok()[0])) { 13747 result = tCONSTANT; 13748 } 13749 else { 13750 result = tIDENTIFIER; 13751 } 13752 } 13753 13754 if ((lex_state == EXPR_BEG && !cmd_state) || 13755 IS_ARG()) { 13756 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) { 13757 lex_state = EXPR_BEG; 13758 nextc(); 13759 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb))); 13760 return tLABEL; 13761 } 13762 } 13763 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) { 13764 const struct kwtable *kw; 13765 13766 /* See if it is a reserved word. */ 13767 kw = rb_reserved_word(tok(), toklen()); 13768 if (kw) { 13769 enum lex_state_e state = lex_state; 13770 lex_state = kw->state; 13771 if (state == EXPR_FNAME) { 13772 set_yylval_name(rb_intern(kw->name)); 13773 return kw->id[0]; 13774 } 13775 if (kw->id[0] == keyword_do) { 13776 command_start = TRUE; 13777 if (lpar_beg && lpar_beg == paren_nest) { 13778 lpar_beg = 0; 13779 --paren_nest; 13780 return keyword_do_LAMBDA; 13781 } 13782 if (COND_P()) return keyword_do_cond; 13783 if (CMDARG_P() && state != EXPR_CMDARG) 13784 return keyword_do_block; 13785 if (state == EXPR_ENDARG || state == EXPR_BEG) 13786 return keyword_do_block; 13787 return keyword_do; 13788 } 13789 if (state == EXPR_BEG || state == EXPR_VALUE) 13790 return kw->id[0]; 13791 else { 13792 if (kw->id[0] != kw->id[1]) 13793 lex_state = EXPR_BEG; 13794 return kw->id[1]; 13795 } 13796 } 13797 } 13798 13799 if (IS_BEG() || 13800 lex_state == EXPR_DOT || 13801 IS_ARG()) { 13802 if (cmd_state) { 13803 lex_state = EXPR_CMDARG; 13804 } 13805 else { 13806 lex_state = EXPR_ARG; 13807 } 13808 } 13809 else if (lex_state == EXPR_FNAME) { 13810 lex_state = EXPR_ENDFN; 13811 } 13812 else { 13813 lex_state = EXPR_END; 13814 } 13815 } 13816 { 13817 ID ident = TOK_INTERN(!ENC_SINGLE(mb)); 13818 13819 set_yylval_name(ident); 13820 if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) { 13821 lex_state = EXPR_END; 13822 } 13823 } 13824 return result; 13825 } 13826 } 13827 13828 #if YYPURE 13829 static int 13830 yylex(void *lval, void *p) 13831 #else 13832 yylex(void *p) 13833 #endif 13834 { 13835 struct parser_params *parser = (struct parser_params*)p; 13836 int t; 13837 13838 #if YYPURE 13839 parser->parser_yylval = lval; 13840 parser->parser_yylval->val = Qundef; 13841 #endif 13842 t = parser_yylex(parser); 13843 #ifdef RIPPER 13844 if (!NIL_P(parser->delayed)) { 13845 ripper_dispatch_delayed_token(parser, t); 13846 } 13847 if (t != 0) 13848 ripper_dispatch_scan_event(parser, t); 13849 #endif 13850 13851 return t; 13852 } 13853 13854 #ifndef RIPPER 13855 static NODE* 13856 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2) 13857 { 13858 NODE *n = (rb_node_newnode)(type, a0, a1, a2); 13859 nd_set_line(n, ruby_sourceline); 13860 return n; 13861 } 13862 13863 enum node_type 13864 nodetype(NODE *node) /* for debug */ 13865 { 13866 return (enum node_type)nd_type(node); 13867 } 13868 13869 int 13870 nodeline(NODE *node) 13871 { 13872 return nd_line(node); 13873 } 13874 13875 static NODE* 13876 newline_node(NODE *node) 13877 { 13878 if (node) { 13879 node = remove_begin(node); 13880 node->flags |= NODE_FL_NEWLINE; 13881 } 13882 return node; 13883 } 13884 13885 static void 13886 fixpos(NODE *node, NODE *orig) 13887 { 13888 if (!node) return; 13889 if (!orig) return; 13890 if (orig == (NODE*)1) return; 13891 nd_set_line(node, nd_line(orig)); 13892 } 13893 13894 static void 13895 parser_warning(struct parser_params *parser, NODE *node, const char *mesg) 13896 { 13897 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg); 13898 } 13899 #define parser_warning(node, mesg) parser_warning(parser, node, mesg) 13900 13901 static void 13902 parser_warn(struct parser_params *parser, NODE *node, const char *mesg) 13903 { 13904 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg); 13905 } 13906 #define parser_warn(node, mesg) parser_warn(parser, node, mesg) 13907 13908 static NODE* 13909 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail) 13910 { 13911 NODE *end, *h = head, *nd; 13912 13913 if (tail == 0) return head; 13914 13915 if (h == 0) return tail; 13916 switch (nd_type(h)) { 13917 case NODE_LIT: 13918 case NODE_STR: 13919 case NODE_SELF: 13920 case NODE_TRUE: 13921 case NODE_FALSE: 13922 case NODE_NIL: 13923 parser_warning(h, "unused literal ignored"); 13924 return tail; 13925 default: 13926 h = end = NEW_BLOCK(head); 13927 end->nd_end = end; 13928 fixpos(end, head); 13929 head = end; 13930 break; 13931 case NODE_BLOCK: 13932 end = h->nd_end; 13933 break; 13934 } 13935 13936 nd = end->nd_head; 13937 switch (nd_type(nd)) { 13938 case NODE_RETURN: 13939 case NODE_BREAK: 13940 case NODE_NEXT: 13941 case NODE_REDO: 13942 case NODE_RETRY: 13943 if (RTEST(ruby_verbose)) { 13944 parser_warning(nd, "statement not reached"); 13945 } 13946 break; 13947 13948 default: 13949 break; 13950 } 13951 13952 if (nd_type(tail) != NODE_BLOCK) { 13953 tail = NEW_BLOCK(tail); 13954 tail->nd_end = tail; 13955 } 13956 end->nd_next = tail; 13957 h->nd_end = tail->nd_end; 13958 return head; 13959 } 13960 13961 /* append item to the list */ 13962 static NODE* 13963 list_append_gen(struct parser_params *parser, NODE *list, NODE *item) 13964 { 13965 NODE *last; 13966 13967 if (list == 0) return NEW_LIST(item); 13968 if (list->nd_next) { 13969 last = list->nd_next->nd_end; 13970 } 13971 else { 13972 last = list; 13973 } 13974 13975 list->nd_alen += 1; 13976 last->nd_next = NEW_LIST(item); 13977 list->nd_next->nd_end = last->nd_next; 13978 return list; 13979 } 13980 13981 /* concat two lists */ 13982 static NODE* 13983 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 13984 { 13985 NODE *last; 13986 13987 if (head->nd_next) { 13988 last = head->nd_next->nd_end; 13989 } 13990 else { 13991 last = head; 13992 } 13993 13994 head->nd_alen += tail->nd_alen; 13995 last->nd_next = tail; 13996 if (tail->nd_next) { 13997 head->nd_next->nd_end = tail->nd_next->nd_end; 13998 } 13999 else { 14000 head->nd_next->nd_end = tail; 14001 } 14002 14003 return head; 14004 } 14005 14006 static int 14007 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail) 14008 { 14009 if (NIL_P(tail)) return 1; 14010 if (!rb_enc_compatible(head, tail)) { 14011 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)", 14012 rb_enc_name(rb_enc_get(head)), 14013 rb_enc_name(rb_enc_get(tail))); 14014 rb_str_resize(head, 0); 14015 rb_str_resize(tail, 0); 14016 return 0; 14017 } 14018 rb_str_buf_append(head, tail); 14019 return 1; 14020 } 14021 14022 /* concat two string literals */ 14023 static NODE * 14024 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 14025 { 14026 enum node_type htype; 14027 14028 if (!head) return tail; 14029 if (!tail) return head; 14030 14031 htype = nd_type(head); 14032 if (htype == NODE_EVSTR) { 14033 NODE *node = NEW_DSTR(Qnil); 14034 head = list_append(node, head); 14035 } 14036 switch (nd_type(tail)) { 14037 case NODE_STR: 14038 if (htype == NODE_STR) { 14039 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) { 14040 error: 14041 rb_gc_force_recycle((VALUE)head); 14042 rb_gc_force_recycle((VALUE)tail); 14043 return 0; 14044 } 14045 rb_gc_force_recycle((VALUE)tail); 14046 } 14047 else { 14048 list_append(head, tail); 14049 } 14050 break; 14051 14052 case NODE_DSTR: 14053 if (htype == NODE_STR) { 14054 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) 14055 goto error; 14056 tail->nd_lit = head->nd_lit; 14057 rb_gc_force_recycle((VALUE)head); 14058 head = tail; 14059 } 14060 else if (NIL_P(tail->nd_lit)) { 14061 head->nd_alen += tail->nd_alen - 1; 14062 head->nd_next->nd_end->nd_next = tail->nd_next; 14063 head->nd_next->nd_end = tail->nd_next->nd_end; 14064 rb_gc_force_recycle((VALUE)tail); 14065 } 14066 else { 14067 nd_set_type(tail, NODE_ARRAY); 14068 tail->nd_head = NEW_STR(tail->nd_lit); 14069 list_concat(head, tail); 14070 } 14071 break; 14072 14073 case NODE_EVSTR: 14074 if (htype == NODE_STR) { 14075 nd_set_type(head, NODE_DSTR); 14076 head->nd_alen = 1; 14077 } 14078 list_append(head, tail); 14079 break; 14080 } 14081 return head; 14082 } 14083 14084 static NODE * 14085 evstr2dstr_gen(struct parser_params *parser, NODE *node) 14086 { 14087 if (nd_type(node) == NODE_EVSTR) { 14088 node = list_append(NEW_DSTR(Qnil), node); 14089 } 14090 return node; 14091 } 14092 14093 static NODE * 14094 new_evstr_gen(struct parser_params *parser, NODE *node) 14095 { 14096 NODE *head = node; 14097 14098 if (node) { 14099 switch (nd_type(node)) { 14100 case NODE_STR: case NODE_DSTR: case NODE_EVSTR: 14101 return node; 14102 } 14103 } 14104 return NEW_EVSTR(head); 14105 } 14106 14107 static NODE * 14108 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1) 14109 { 14110 value_expr(recv); 14111 value_expr(arg1); 14112 return NEW_CALL(recv, id, NEW_LIST(arg1)); 14113 } 14114 14115 static NODE * 14116 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id) 14117 { 14118 value_expr(recv); 14119 return NEW_CALL(recv, id, 0); 14120 } 14121 14122 static NODE* 14123 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14124 { 14125 value_expr(node1); 14126 value_expr(node2); 14127 if (node1) { 14128 switch (nd_type(node1)) { 14129 case NODE_DREGX: 14130 case NODE_DREGX_ONCE: 14131 return NEW_MATCH2(node1, node2); 14132 14133 case NODE_LIT: 14134 if (TYPE(node1->nd_lit) == T_REGEXP) { 14135 return NEW_MATCH2(node1, node2); 14136 } 14137 } 14138 } 14139 14140 if (node2) { 14141 switch (nd_type(node2)) { 14142 case NODE_DREGX: 14143 case NODE_DREGX_ONCE: 14144 return NEW_MATCH3(node2, node1); 14145 14146 case NODE_LIT: 14147 if (TYPE(node2->nd_lit) == T_REGEXP) { 14148 return NEW_MATCH3(node2, node1); 14149 } 14150 } 14151 } 14152 14153 return NEW_CALL(node1, tMATCH, NEW_LIST(node2)); 14154 } 14155 14156 static NODE* 14157 gettable_gen(struct parser_params *parser, ID id) 14158 { 14159 if (id == keyword_self) { 14160 return NEW_SELF(); 14161 } 14162 else if (id == keyword_nil) { 14163 return NEW_NIL(); 14164 } 14165 else if (id == keyword_true) { 14166 return NEW_TRUE(); 14167 } 14168 else if (id == keyword_false) { 14169 return NEW_FALSE(); 14170 } 14171 else if (id == keyword__FILE__) { 14172 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile), 14173 rb_filesystem_encoding())); 14174 } 14175 else if (id == keyword__LINE__) { 14176 return NEW_LIT(INT2FIX(ruby_sourceline)); 14177 } 14178 else if (id == keyword__ENCODING__) { 14179 return NEW_LIT(rb_enc_from_encoding(parser->enc)); 14180 } 14181 else if (is_local_id(id)) { 14182 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id); 14183 if (local_id(id)) return NEW_LVAR(id); 14184 /* method call without arguments */ 14185 return NEW_VCALL(id); 14186 } 14187 else if (is_global_id(id)) { 14188 return NEW_GVAR(id); 14189 } 14190 else if (is_instance_id(id)) { 14191 return NEW_IVAR(id); 14192 } 14193 else if (is_const_id(id)) { 14194 return NEW_CONST(id); 14195 } 14196 else if (is_class_id(id)) { 14197 return NEW_CVAR(id); 14198 } 14199 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); 14200 return 0; 14201 } 14202 #endif /* !RIPPER */ 14203 14204 #ifdef RIPPER 14205 static VALUE 14206 assignable_gen(struct parser_params *parser, VALUE lhs) 14207 #else 14208 static NODE* 14209 assignable_gen(struct parser_params *parser, ID id, NODE *val) 14210 #endif 14211 { 14212 #ifdef RIPPER 14213 ID id = get_id(lhs); 14214 # define assignable_result(x) get_value(lhs) 14215 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs) 14216 #else 14217 # define assignable_result(x) x 14218 #endif 14219 if (!id) return assignable_result(0); 14220 if (id == keyword_self) { 14221 yyerror("Can't change the value of self"); 14222 } 14223 else if (id == keyword_nil) { 14224 yyerror("Can't assign to nil"); 14225 } 14226 else if (id == keyword_true) { 14227 yyerror("Can't assign to true"); 14228 } 14229 else if (id == keyword_false) { 14230 yyerror("Can't assign to false"); 14231 } 14232 else if (id == keyword__FILE__) { 14233 yyerror("Can't assign to __FILE__"); 14234 } 14235 else if (id == keyword__LINE__) { 14236 yyerror("Can't assign to __LINE__"); 14237 } 14238 else if (id == keyword__ENCODING__) { 14239 yyerror("Can't assign to __ENCODING__"); 14240 } 14241 else if (is_local_id(id)) { 14242 if (dyna_in_block()) { 14243 if (dvar_curr(id)) { 14244 return assignable_result(NEW_DASGN_CURR(id, val)); 14245 } 14246 else if (dvar_defined(id)) { 14247 return assignable_result(NEW_DASGN(id, val)); 14248 } 14249 else if (local_id(id)) { 14250 return assignable_result(NEW_LASGN(id, val)); 14251 } 14252 else { 14253 dyna_var(id); 14254 return assignable_result(NEW_DASGN_CURR(id, val)); 14255 } 14256 } 14257 else { 14258 if (!local_id(id)) { 14259 local_var(id); 14260 } 14261 return assignable_result(NEW_LASGN(id, val)); 14262 } 14263 } 14264 else if (is_global_id(id)) { 14265 return assignable_result(NEW_GASGN(id, val)); 14266 } 14267 else if (is_instance_id(id)) { 14268 return assignable_result(NEW_IASGN(id, val)); 14269 } 14270 else if (is_const_id(id)) { 14271 if (!in_def && !in_single) 14272 return assignable_result(NEW_CDECL(id, val, 0)); 14273 yyerror("dynamic constant assignment"); 14274 } 14275 else if (is_class_id(id)) { 14276 return assignable_result(NEW_CVASGN(id, val)); 14277 } 14278 else { 14279 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id)); 14280 } 14281 return assignable_result(0); 14282 #undef assignable_result 14283 #undef parser_yyerror 14284 } 14285 14286 static ID 14287 shadowing_lvar_gen(struct parser_params *parser, ID name) 14288 { 14289 ID uscore; 14290 14291 CONST_ID(uscore, "_"); 14292 if (uscore == name) return name; 14293 if (dyna_in_block()) { 14294 if (dvar_curr(name)) { 14295 yyerror("duplicated argument name"); 14296 } 14297 else if (dvar_defined(name) || local_id(name)) { 14298 rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); 14299 vtable_add(lvtbl->vars, name); 14300 } 14301 } 14302 else { 14303 if (local_id(name)) { 14304 yyerror("duplicated argument name"); 14305 } 14306 } 14307 return name; 14308 } 14309 14310 static void 14311 new_bv_gen(struct parser_params *parser, ID name) 14312 { 14313 if (!name) return; 14314 if (!is_local_id(name)) { 14315 compile_error(PARSER_ARG "invalid local variable - %s", 14316 rb_id2name(name)); 14317 return; 14318 } 14319 shadowing_lvar(name); 14320 dyna_var(name); 14321 } 14322 14323 #ifndef RIPPER 14324 static NODE * 14325 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx) 14326 { 14327 if (recv && nd_type(recv) == NODE_SELF) 14328 recv = (NODE *)1; 14329 return NEW_ATTRASGN(recv, tASET, idx); 14330 } 14331 14332 static void 14333 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14334 { 14335 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) { 14336 compile_error(PARSER_ARG "both block arg and actual block given"); 14337 } 14338 } 14339 14340 ID 14341 rb_id_attrset(ID id) 14342 { 14343 id &= ~ID_SCOPE_MASK; 14344 id |= ID_ATTRSET; 14345 return id; 14346 } 14347 14348 static NODE * 14349 attrset_gen(struct parser_params *parser, NODE *recv, ID id) 14350 { 14351 if (recv && nd_type(recv) == NODE_SELF) 14352 recv = (NODE *)1; 14353 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0); 14354 } 14355 14356 static void 14357 rb_backref_error_gen(struct parser_params *parser, NODE *node) 14358 { 14359 switch (nd_type(node)) { 14360 case NODE_NTH_REF: 14361 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth); 14362 break; 14363 case NODE_BACK_REF: 14364 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth); 14365 break; 14366 } 14367 } 14368 14369 static NODE * 14370 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14371 { 14372 if (!node2) return node1; 14373 switch (nd_type(node1)) { 14374 case NODE_BLOCK_PASS: 14375 if (node1->nd_head) 14376 node1->nd_head = arg_concat(node1->nd_head, node2); 14377 else 14378 node1->nd_head = NEW_LIST(node2); 14379 return node1; 14380 case NODE_ARGSPUSH: 14381 if (nd_type(node2) != NODE_ARRAY) break; 14382 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2); 14383 nd_set_type(node1, NODE_ARGSCAT); 14384 return node1; 14385 case NODE_ARGSCAT: 14386 if (nd_type(node2) != NODE_ARRAY || 14387 nd_type(node1->nd_body) != NODE_ARRAY) break; 14388 node1->nd_body = list_concat(node1->nd_body, node2); 14389 return node1; 14390 } 14391 return NEW_ARGSCAT(node1, node2); 14392 } 14393 14394 static NODE * 14395 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14396 { 14397 if (!node1) return NEW_LIST(node2); 14398 switch (nd_type(node1)) { 14399 case NODE_ARRAY: 14400 return list_append(node1, node2); 14401 case NODE_BLOCK_PASS: 14402 node1->nd_head = arg_append(node1->nd_head, node2); 14403 return node1; 14404 case NODE_ARGSPUSH: 14405 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2); 14406 nd_set_type(node1, NODE_ARGSCAT); 14407 return node1; 14408 } 14409 return NEW_ARGSPUSH(node1, node2); 14410 } 14411 14412 static NODE * 14413 splat_array(NODE* node) 14414 { 14415 if (nd_type(node) == NODE_SPLAT) node = node->nd_head; 14416 if (nd_type(node) == NODE_ARRAY) return node; 14417 return 0; 14418 } 14419 14420 static NODE * 14421 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs) 14422 { 14423 if (!lhs) return 0; 14424 14425 switch (nd_type(lhs)) { 14426 case NODE_GASGN: 14427 case NODE_IASGN: 14428 case NODE_IASGN2: 14429 case NODE_LASGN: 14430 case NODE_DASGN: 14431 case NODE_DASGN_CURR: 14432 case NODE_MASGN: 14433 case NODE_CDECL: 14434 case NODE_CVASGN: 14435 lhs->nd_value = rhs; 14436 break; 14437 14438 case NODE_ATTRASGN: 14439 case NODE_CALL: 14440 lhs->nd_args = arg_append(lhs->nd_args, rhs); 14441 break; 14442 14443 default: 14444 /* should not happen */ 14445 break; 14446 } 14447 14448 return lhs; 14449 } 14450 14451 static int 14452 value_expr_gen(struct parser_params *parser, NODE *node) 14453 { 14454 int cond = 0; 14455 14456 if (!node) { 14457 rb_warning0("empty expression"); 14458 } 14459 while (node) { 14460 switch (nd_type(node)) { 14461 case NODE_DEFN: 14462 case NODE_DEFS: 14463 parser_warning(node, "void value expression"); 14464 return FALSE; 14465 14466 case NODE_RETURN: 14467 case NODE_BREAK: 14468 case NODE_NEXT: 14469 case NODE_REDO: 14470 case NODE_RETRY: 14471 if (!cond) yyerror("void value expression"); 14472 /* or "control never reach"? */ 14473 return FALSE; 14474 14475 case NODE_BLOCK: 14476 while (node->nd_next) { 14477 node = node->nd_next; 14478 } 14479 node = node->nd_head; 14480 break; 14481 14482 case NODE_BEGIN: 14483 node = node->nd_body; 14484 break; 14485 14486 case NODE_IF: 14487 if (!node->nd_body) { 14488 node = node->nd_else; 14489 break; 14490 } 14491 else if (!node->nd_else) { 14492 node = node->nd_body; 14493 break; 14494 } 14495 if (!value_expr(node->nd_body)) return FALSE; 14496 node = node->nd_else; 14497 break; 14498 14499 case NODE_AND: 14500 case NODE_OR: 14501 cond = 1; 14502 node = node->nd_2nd; 14503 break; 14504 14505 default: 14506 return TRUE; 14507 } 14508 } 14509 14510 return TRUE; 14511 } 14512 14513 static void 14514 void_expr_gen(struct parser_params *parser, NODE *node) 14515 { 14516 const char *useless = 0; 14517 14518 if (!RTEST(ruby_verbose)) return; 14519 14520 if (!node) return; 14521 switch (nd_type(node)) { 14522 case NODE_CALL: 14523 switch (node->nd_mid) { 14524 case '+': 14525 case '-': 14526 case '*': 14527 case '/': 14528 case '%': 14529 case tPOW: 14530 case tUPLUS: 14531 case tUMINUS: 14532 case '|': 14533 case '^': 14534 case '&': 14535 case tCMP: 14536 case '>': 14537 case tGEQ: 14538 case '<': 14539 case tLEQ: 14540 case tEQ: 14541 case tNEQ: 14542 useless = rb_id2name(node->nd_mid); 14543 break; 14544 } 14545 break; 14546 14547 case NODE_LVAR: 14548 case NODE_DVAR: 14549 case NODE_GVAR: 14550 case NODE_IVAR: 14551 case NODE_CVAR: 14552 case NODE_NTH_REF: 14553 case NODE_BACK_REF: 14554 useless = "a variable"; 14555 break; 14556 case NODE_CONST: 14557 useless = "a constant"; 14558 break; 14559 case NODE_LIT: 14560 case NODE_STR: 14561 case NODE_DSTR: 14562 case NODE_DREGX: 14563 case NODE_DREGX_ONCE: 14564 useless = "a literal"; 14565 break; 14566 case NODE_COLON2: 14567 case NODE_COLON3: 14568 useless = "::"; 14569 break; 14570 case NODE_DOT2: 14571 useless = ".."; 14572 break; 14573 case NODE_DOT3: 14574 useless = "..."; 14575 break; 14576 case NODE_SELF: 14577 useless = "self"; 14578 break; 14579 case NODE_NIL: 14580 useless = "nil"; 14581 break; 14582 case NODE_TRUE: 14583 useless = "true"; 14584 break; 14585 case NODE_FALSE: 14586 useless = "false"; 14587 break; 14588 case NODE_DEFINED: 14589 useless = "defined?"; 14590 break; 14591 } 14592 14593 if (useless) { 14594 int line = ruby_sourceline; 14595 14596 ruby_sourceline = nd_line(node); 14597 rb_warnS("useless use of %s in void context", useless); 14598 ruby_sourceline = line; 14599 } 14600 } 14601 14602 static void 14603 void_stmts_gen(struct parser_params *parser, NODE *node) 14604 { 14605 if (!RTEST(ruby_verbose)) return; 14606 if (!node) return; 14607 if (nd_type(node) != NODE_BLOCK) return; 14608 14609 for (;;) { 14610 if (!node->nd_next) return; 14611 void_expr0(node->nd_head); 14612 node = node->nd_next; 14613 } 14614 } 14615 14616 static NODE * 14617 remove_begin(NODE *node) 14618 { 14619 NODE **n = &node, *n1 = node; 14620 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) { 14621 *n = n1 = n1->nd_body; 14622 } 14623 return node; 14624 } 14625 14626 static void 14627 reduce_nodes_gen(struct parser_params *parser, NODE **body) 14628 { 14629 NODE *node = *body; 14630 14631 if (!node) { 14632 *body = NEW_NIL(); 14633 return; 14634 } 14635 #define subnodes(n1, n2) \ 14636 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \ 14637 (!node->n2) ? (body = &node->n1, 1) : \ 14638 (reduce_nodes(&node->n1), body = &node->n2, 1)) 14639 14640 while (node) { 14641 int newline = (int)(node->flags & NODE_FL_NEWLINE); 14642 switch (nd_type(node)) { 14643 end: 14644 case NODE_NIL: 14645 *body = 0; 14646 return; 14647 case NODE_RETURN: 14648 *body = node = node->nd_stts; 14649 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14650 continue; 14651 case NODE_BEGIN: 14652 *body = node = node->nd_body; 14653 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14654 continue; 14655 case NODE_BLOCK: 14656 body = &node->nd_end->nd_head; 14657 break; 14658 case NODE_IF: 14659 if (subnodes(nd_body, nd_else)) break; 14660 return; 14661 case NODE_CASE: 14662 body = &node->nd_body; 14663 break; 14664 case NODE_WHEN: 14665 if (!subnodes(nd_body, nd_next)) goto end; 14666 break; 14667 case NODE_ENSURE: 14668 if (!subnodes(nd_head, nd_resq)) goto end; 14669 break; 14670 case NODE_RESCUE: 14671 if (!subnodes(nd_head, nd_resq)) goto end; 14672 break; 14673 default: 14674 return; 14675 } 14676 node = *body; 14677 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14678 } 14679 14680 #undef subnodes 14681 } 14682 14683 static int 14684 assign_in_cond(struct parser_params *parser, NODE *node) 14685 { 14686 switch (nd_type(node)) { 14687 case NODE_MASGN: 14688 yyerror("multiple assignment in conditional"); 14689 return 1; 14690 14691 case NODE_LASGN: 14692 case NODE_DASGN: 14693 case NODE_DASGN_CURR: 14694 case NODE_GASGN: 14695 case NODE_IASGN: 14696 break; 14697 14698 default: 14699 return 0; 14700 } 14701 14702 if (!node->nd_value) return 1; 14703 switch (nd_type(node->nd_value)) { 14704 case NODE_LIT: 14705 case NODE_STR: 14706 case NODE_NIL: 14707 case NODE_TRUE: 14708 case NODE_FALSE: 14709 /* reports always */ 14710 parser_warn(node->nd_value, "found = in conditional, should be =="); 14711 return 1; 14712 14713 case NODE_DSTR: 14714 case NODE_XSTR: 14715 case NODE_DXSTR: 14716 case NODE_EVSTR: 14717 case NODE_DREGX: 14718 default: 14719 break; 14720 } 14721 return 1; 14722 } 14723 14724 static void 14725 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 14726 { 14727 if (!e_option_supplied(parser)) parser_warn(node, str); 14728 } 14729 14730 static void 14731 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 14732 { 14733 if (!e_option_supplied(parser)) parser_warning(node, str); 14734 } 14735 14736 static void 14737 fixup_nodes(NODE **rootnode) 14738 { 14739 NODE *node, *next, *head; 14740 14741 for (node = *rootnode; node; node = next) { 14742 enum node_type type; 14743 VALUE val; 14744 14745 next = node->nd_next; 14746 head = node->nd_head; 14747 rb_gc_force_recycle((VALUE)node); 14748 *rootnode = next; 14749 switch (type = nd_type(head)) { 14750 case NODE_DOT2: 14751 case NODE_DOT3: 14752 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit, 14753 type == NODE_DOT3); 14754 rb_gc_force_recycle((VALUE)head->nd_beg); 14755 rb_gc_force_recycle((VALUE)head->nd_end); 14756 nd_set_type(head, NODE_LIT); 14757 head->nd_lit = val; 14758 break; 14759 default: 14760 break; 14761 } 14762 } 14763 } 14764 14765 static NODE *cond0(struct parser_params*,NODE*); 14766 14767 static NODE* 14768 range_op(struct parser_params *parser, NODE *node) 14769 { 14770 enum node_type type; 14771 14772 if (node == 0) return 0; 14773 14774 type = nd_type(node); 14775 value_expr(node); 14776 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) { 14777 warn_unless_e_option(parser, node, "integer literal in conditional range"); 14778 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$.")))); 14779 } 14780 return cond0(parser, node); 14781 } 14782 14783 static int 14784 literal_node(NODE *node) 14785 { 14786 if (!node) return 1; /* same as NODE_NIL */ 14787 switch (nd_type(node)) { 14788 case NODE_LIT: 14789 case NODE_STR: 14790 case NODE_DSTR: 14791 case NODE_EVSTR: 14792 case NODE_DREGX: 14793 case NODE_DREGX_ONCE: 14794 case NODE_DSYM: 14795 return 2; 14796 case NODE_TRUE: 14797 case NODE_FALSE: 14798 case NODE_NIL: 14799 return 1; 14800 } 14801 return 0; 14802 } 14803 14804 static NODE* 14805 cond0(struct parser_params *parser, NODE *node) 14806 { 14807 if (node == 0) return 0; 14808 assign_in_cond(parser, node); 14809 14810 switch (nd_type(node)) { 14811 case NODE_DSTR: 14812 case NODE_EVSTR: 14813 case NODE_STR: 14814 rb_warn0("string literal in condition"); 14815 break; 14816 14817 case NODE_DREGX: 14818 case NODE_DREGX_ONCE: 14819 warning_unless_e_option(parser, node, "regex literal in condition"); 14820 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_"))); 14821 14822 case NODE_AND: 14823 case NODE_OR: 14824 node->nd_1st = cond0(parser, node->nd_1st); 14825 node->nd_2nd = cond0(parser, node->nd_2nd); 14826 break; 14827 14828 case NODE_DOT2: 14829 case NODE_DOT3: 14830 node->nd_beg = range_op(parser, node->nd_beg); 14831 node->nd_end = range_op(parser, node->nd_end); 14832 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2); 14833 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3); 14834 if (!e_option_supplied(parser)) { 14835 int b = literal_node(node->nd_beg); 14836 int e = literal_node(node->nd_end); 14837 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) { 14838 parser_warn(node, "range literal in condition"); 14839 } 14840 } 14841 break; 14842 14843 case NODE_DSYM: 14844 parser_warning(node, "literal in condition"); 14845 break; 14846 14847 case NODE_LIT: 14848 if (TYPE(node->nd_lit) == T_REGEXP) { 14849 warn_unless_e_option(parser, node, "regex literal in condition"); 14850 nd_set_type(node, NODE_MATCH); 14851 } 14852 else { 14853 parser_warning(node, "literal in condition"); 14854 } 14855 default: 14856 break; 14857 } 14858 return node; 14859 } 14860 14861 static NODE* 14862 cond_gen(struct parser_params *parser, NODE *node) 14863 { 14864 if (node == 0) return 0; 14865 return cond0(parser, node); 14866 } 14867 14868 static NODE* 14869 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right) 14870 { 14871 value_expr(left); 14872 if (left && (enum node_type)nd_type(left) == type) { 14873 NODE *node = left, *second; 14874 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) { 14875 node = second; 14876 } 14877 node->nd_2nd = NEW_NODE(type, second, right, 0); 14878 return left; 14879 } 14880 return NEW_NODE(type, left, right, 0); 14881 } 14882 14883 static void 14884 no_blockarg(struct parser_params *parser, NODE *node) 14885 { 14886 if (node && nd_type(node) == NODE_BLOCK_PASS) { 14887 compile_error(PARSER_ARG "block argument should not be given"); 14888 } 14889 } 14890 14891 static NODE * 14892 ret_args_gen(struct parser_params *parser, NODE *node) 14893 { 14894 if (node) { 14895 no_blockarg(parser, node); 14896 if (nd_type(node) == NODE_ARRAY) { 14897 if (node->nd_next == 0) { 14898 node = node->nd_head; 14899 } 14900 else { 14901 nd_set_type(node, NODE_VALUES); 14902 } 14903 } 14904 } 14905 return node; 14906 } 14907 14908 static NODE * 14909 new_yield_gen(struct parser_params *parser, NODE *node) 14910 { 14911 long state = Qtrue; 14912 14913 if (node) { 14914 no_blockarg(parser, node); 14915 if (node && nd_type(node) == NODE_SPLAT) { 14916 state = Qtrue; 14917 } 14918 } 14919 else { 14920 state = Qfalse; 14921 } 14922 return NEW_YIELD(node, state); 14923 } 14924 14925 static NODE* 14926 negate_lit(NODE *node) 14927 { 14928 switch (TYPE(node->nd_lit)) { 14929 case T_FIXNUM: 14930 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit)); 14931 break; 14932 case T_BIGNUM: 14933 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0); 14934 break; 14935 case T_FLOAT: 14936 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit); 14937 break; 14938 default: 14939 break; 14940 } 14941 return node; 14942 } 14943 14944 static NODE * 14945 arg_blk_pass(NODE *node1, NODE *node2) 14946 { 14947 if (node2) { 14948 node2->nd_head = node1; 14949 return node2; 14950 } 14951 return node1; 14952 } 14953 14954 static NODE* 14955 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b) 14956 { 14957 int saved_line = ruby_sourceline; 14958 NODE *node; 14959 NODE *i1, *i2 = 0; 14960 14961 node = NEW_ARGS(m ? m->nd_plen : 0, o); 14962 i1 = m ? m->nd_next : 0; 14963 node->nd_next = NEW_ARGS_AUX(r, b); 14964 14965 if (p) { 14966 i2 = p->nd_next; 14967 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen); 14968 } 14969 else if (i1) { 14970 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0); 14971 } 14972 if (i1 || i2) { 14973 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0); 14974 } 14975 ruby_sourceline = saved_line; 14976 return node; 14977 } 14978 #endif /* !RIPPER */ 14979 14980 static void 14981 local_push_gen(struct parser_params *parser, int inherit_dvars) 14982 { 14983 struct local_vars *local; 14984 14985 local = ALLOC(struct local_vars); 14986 local->prev = lvtbl; 14987 local->args = vtable_alloc(0); 14988 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE); 14989 lvtbl = local; 14990 } 14991 14992 static void 14993 local_pop_gen(struct parser_params *parser) 14994 { 14995 struct local_vars *local = lvtbl->prev; 14996 vtable_free(lvtbl->args); 14997 vtable_free(lvtbl->vars); 14998 xfree(lvtbl); 14999 lvtbl = local; 15000 } 15001 15002 #ifndef RIPPER 15003 static ID* 15004 vtable_tblcpy(ID *buf, const struct vtable *src) 15005 { 15006 int i, cnt = vtable_size(src); 15007 15008 if (cnt > 0) { 15009 buf[0] = cnt; 15010 for (i = 0; i < cnt; i++) { 15011 buf[i] = src->tbl[i]; 15012 } 15013 return buf; 15014 } 15015 return 0; 15016 } 15017 15018 static ID* 15019 local_tbl_gen(struct parser_params *parser) 15020 { 15021 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars); 15022 ID *buf; 15023 15024 if (cnt <= 0) return 0; 15025 buf = ALLOC_N(ID, cnt + 1); 15026 vtable_tblcpy(buf+1, lvtbl->args); 15027 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars); 15028 buf[0] = cnt; 15029 return buf; 15030 } 15031 #endif 15032 15033 static int 15034 arg_var_gen(struct parser_params *parser, ID id) 15035 { 15036 vtable_add(lvtbl->args, id); 15037 return vtable_size(lvtbl->args) - 1; 15038 } 15039 15040 static int 15041 local_var_gen(struct parser_params *parser, ID id) 15042 { 15043 vtable_add(lvtbl->vars, id); 15044 return vtable_size(lvtbl->vars) - 1; 15045 } 15046 15047 static int 15048 local_id_gen(struct parser_params *parser, ID id) 15049 { 15050 struct vtable *vars, *args; 15051 15052 vars = lvtbl->vars; 15053 args = lvtbl->args; 15054 15055 while (vars && POINTER_P(vars->prev)) { 15056 vars = vars->prev; 15057 args = args->prev; 15058 } 15059 15060 if (vars && vars->prev == DVARS_INHERIT) { 15061 return rb_local_defined(id); 15062 } 15063 else { 15064 return (vtable_included(args, id) || 15065 vtable_included(vars, id)); 15066 } 15067 } 15068 15069 static const struct vtable * 15070 dyna_push_gen(struct parser_params *parser) 15071 { 15072 lvtbl->args = vtable_alloc(lvtbl->args); 15073 lvtbl->vars = vtable_alloc(lvtbl->vars); 15074 return lvtbl->args; 15075 } 15076 15077 static void 15078 dyna_pop_1(struct parser_params *parser) 15079 { 15080 struct vtable *tmp; 15081 15082 tmp = lvtbl->args; 15083 lvtbl->args = lvtbl->args->prev; 15084 vtable_free(tmp); 15085 tmp = lvtbl->vars; 15086 lvtbl->vars = lvtbl->vars->prev; 15087 vtable_free(tmp); 15088 } 15089 15090 static void 15091 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs) 15092 { 15093 while (lvtbl->args != lvargs) { 15094 dyna_pop_1(parser); 15095 if (!lvtbl->args) { 15096 struct local_vars *local = lvtbl->prev; 15097 xfree(lvtbl); 15098 lvtbl = local; 15099 } 15100 } 15101 dyna_pop_1(parser); 15102 } 15103 15104 static int 15105 dyna_in_block_gen(struct parser_params *parser) 15106 { 15107 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE; 15108 } 15109 15110 static int 15111 dvar_defined_gen(struct parser_params *parser, ID id) 15112 { 15113 struct vtable *vars, *args; 15114 15115 args = lvtbl->args; 15116 vars = lvtbl->vars; 15117 15118 while (POINTER_P(vars)) { 15119 if (vtable_included(args, id)) { 15120 return 1; 15121 } 15122 if (vtable_included(vars, id)) { 15123 return 1; 15124 } 15125 args = args->prev; 15126 vars = vars->prev; 15127 } 15128 15129 if (vars == DVARS_INHERIT) { 15130 return rb_dvar_defined(id); 15131 } 15132 15133 return 0; 15134 } 15135 15136 static int 15137 dvar_curr_gen(struct parser_params *parser, ID id) 15138 { 15139 return (vtable_included(lvtbl->args, id) || 15140 vtable_included(lvtbl->vars, id)); 15141 } 15142 15143 #ifndef RIPPER 15144 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline); 15145 VALUE rb_reg_check_preprocess(VALUE); 15146 15147 static void 15148 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options) 15149 { 15150 int c = RE_OPTION_ENCODING_IDX(options); 15151 15152 if (c) { 15153 int opt, idx; 15154 rb_char_to_option_kcode(c, &opt, &idx); 15155 if (idx != ENCODING_GET(str) && 15156 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15157 goto error; 15158 } 15159 ENCODING_SET(str, idx); 15160 } 15161 else if (RE_OPTION_ENCODING_NONE(options)) { 15162 if (!ENCODING_IS_ASCII8BIT(str) && 15163 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15164 c = 'n'; 15165 goto error; 15166 } 15167 rb_enc_associate(str, rb_ascii8bit_encoding()); 15168 } 15169 else if (parser->enc == rb_usascii_encoding()) { 15170 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15171 /* raise in re.c */ 15172 rb_enc_associate(str, rb_usascii_encoding()); 15173 } 15174 else { 15175 rb_enc_associate(str, rb_ascii8bit_encoding()); 15176 } 15177 } 15178 return; 15179 15180 error: 15181 compile_error(PARSER_ARG 15182 "regexp encoding option '%c' differs from source encoding '%s'", 15183 c, rb_enc_name(rb_enc_get(str))); 15184 } 15185 15186 static int 15187 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options) 15188 { 15189 VALUE err; 15190 reg_fragment_setenc(str, options); 15191 err = rb_reg_check_preprocess(str); 15192 if (err != Qnil) { 15193 err = rb_obj_as_string(err); 15194 compile_error(PARSER_ARG "%s", RSTRING_PTR(err)); 15195 RB_GC_GUARD(err); 15196 return 0; 15197 } 15198 return 1; 15199 } 15200 15201 typedef struct { 15202 struct parser_params* parser; 15203 rb_encoding *enc; 15204 NODE *succ_block; 15205 NODE *fail_block; 15206 int num; 15207 } reg_named_capture_assign_t; 15208 15209 static int 15210 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, 15211 int back_num, int *back_refs, OnigRegex regex, void *arg0) 15212 { 15213 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0; 15214 struct parser_params* parser = arg->parser; 15215 rb_encoding *enc = arg->enc; 15216 long len = name_end - name; 15217 const char *s = (const char *)name; 15218 ID var; 15219 15220 arg->num++; 15221 15222 if (arg->succ_block == 0) { 15223 arg->succ_block = NEW_BEGIN(0); 15224 arg->fail_block = NEW_BEGIN(0); 15225 } 15226 15227 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) || 15228 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) || 15229 !rb_enc_symname2_p(s, len, enc)) { 15230 return ST_CONTINUE; 15231 } 15232 var = rb_intern3(s, len, enc); 15233 if (dvar_defined(var) || local_id(var)) { 15234 rb_warningS("named capture conflicts a local variable - %s", 15235 rb_id2name(var)); 15236 } 15237 arg->succ_block = block_append(arg->succ_block, 15238 newline_node(node_assign(assignable(var,0), 15239 NEW_CALL( 15240 gettable(rb_intern("$~")), 15241 idAREF, 15242 NEW_LIST(NEW_LIT(ID2SYM(var)))) 15243 ))); 15244 arg->fail_block = block_append(arg->fail_block, 15245 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil)))); 15246 return ST_CONTINUE; 15247 } 15248 15249 static NODE * 15250 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match) 15251 { 15252 reg_named_capture_assign_t arg; 15253 15254 arg.parser = parser; 15255 arg.enc = rb_enc_get(regexp); 15256 arg.succ_block = 0; 15257 arg.fail_block = 0; 15258 arg.num = 0; 15259 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg); 15260 15261 if (arg.num == 0) 15262 return match; 15263 15264 return 15265 block_append( 15266 newline_node(match), 15267 NEW_IF(gettable(rb_intern("$~")), 15268 block_append( 15269 newline_node(arg.succ_block), 15270 newline_node( 15271 NEW_CALL( 15272 gettable(rb_intern("$~")), 15273 rb_intern("begin"), 15274 NEW_LIST(NEW_LIT(INT2FIX(0)))))), 15275 block_append( 15276 newline_node(arg.fail_block), 15277 newline_node( 15278 NEW_LIT(Qnil))))); 15279 } 15280 15281 static VALUE 15282 reg_compile_gen(struct parser_params* parser, VALUE str, int options) 15283 { 15284 VALUE re; 15285 VALUE err; 15286 15287 reg_fragment_setenc(str, options); 15288 err = rb_errinfo(); 15289 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline); 15290 if (NIL_P(re)) { 15291 ID mesg = rb_intern("mesg"); 15292 VALUE m = rb_attr_get(rb_errinfo(), mesg); 15293 rb_set_errinfo(err); 15294 if (!NIL_P(err)) { 15295 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m); 15296 } 15297 else { 15298 compile_error(PARSER_ARG "%s", RSTRING_PTR(m)); 15299 } 15300 return Qnil; 15301 } 15302 return re; 15303 } 15304 15305 void 15306 rb_gc_mark_parser(void) 15307 { 15308 } 15309 15310 NODE* 15311 rb_parser_append_print(VALUE vparser, NODE *node) 15312 { 15313 NODE *prelude = 0; 15314 NODE *scope = node; 15315 struct parser_params *parser; 15316 15317 if (!node) return node; 15318 15319 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 15320 15321 node = node->nd_body; 15322 15323 if (nd_type(node) == NODE_PRELUDE) { 15324 prelude = node; 15325 node = node->nd_body; 15326 } 15327 15328 node = block_append(node, 15329 NEW_FCALL(rb_intern("print"), 15330 NEW_ARRAY(NEW_GVAR(rb_intern("$_"))))); 15331 if (prelude) { 15332 prelude->nd_body = node; 15333 scope->nd_body = prelude; 15334 } 15335 else { 15336 scope->nd_body = node; 15337 } 15338 15339 return scope; 15340 } 15341 15342 NODE * 15343 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split) 15344 { 15345 NODE *prelude = 0; 15346 NODE *scope = node; 15347 struct parser_params *parser; 15348 15349 if (!node) return node; 15350 15351 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 15352 15353 node = node->nd_body; 15354 15355 if (nd_type(node) == NODE_PRELUDE) { 15356 prelude = node; 15357 node = node->nd_body; 15358 } 15359 if (split) { 15360 node = block_append(NEW_GASGN(rb_intern("$F"), 15361 NEW_CALL(NEW_GVAR(rb_intern("$_")), 15362 rb_intern("split"), 0)), 15363 node); 15364 } 15365 if (chop) { 15366 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")), 15367 rb_intern("chop!"), 0), node); 15368 } 15369 15370 node = NEW_OPT_N(node); 15371 15372 if (prelude) { 15373 prelude->nd_body = node; 15374 scope->nd_body = prelude; 15375 } 15376 else { 15377 scope->nd_body = node; 15378 } 15379 15380 return scope; 15381 } 15382 15383 static const struct { 15384 ID token; 15385 const char *name; 15386 } op_tbl[] = { 15387 {tDOT2, ".."}, 15388 {tDOT3, "..."}, 15389 {'+', "+(binary)"}, 15390 {'-', "-(binary)"}, 15391 {tPOW, "**"}, 15392 {tUPLUS, "+@"}, 15393 {tUMINUS, "-@"}, 15394 {tCMP, "<=>"}, 15395 {tGEQ, ">="}, 15396 {tLEQ, "<="}, 15397 {tEQ, "=="}, 15398 {tEQQ, "==="}, 15399 {tNEQ, "!="}, 15400 {tMATCH, "=~"}, 15401 {tNMATCH, "!~"}, 15402 {tAREF, "[]"}, 15403 {tASET, "[]="}, 15404 {tLSHFT, "<<"}, 15405 {tRSHFT, ">>"}, 15406 {tCOLON2, "::"}, 15407 }; 15408 15409 #define op_tbl_count numberof(op_tbl) 15410 15411 #ifndef ENABLE_SELECTOR_NAMESPACE 15412 #define ENABLE_SELECTOR_NAMESPACE 0 15413 #endif 15414 15415 static struct symbols { 15416 ID last_id; 15417 st_table *sym_id; 15418 st_table *id_str; 15419 #if ENABLE_SELECTOR_NAMESPACE 15420 st_table *ivar2_id; 15421 st_table *id_ivar2; 15422 #endif 15423 VALUE op_sym[tLAST_TOKEN]; 15424 } global_symbols = {tLAST_ID}; 15425 15426 static const struct st_hash_type symhash = { 15427 rb_str_hash_cmp, 15428 rb_str_hash, 15429 }; 15430 15431 #if ENABLE_SELECTOR_NAMESPACE 15432 struct ivar2_key { 15433 ID id; 15434 VALUE klass; 15435 }; 15436 15437 static int 15438 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2) 15439 { 15440 if (key1->id == key2->id && key1->klass == key2->klass) { 15441 return 0; 15442 } 15443 return 1; 15444 } 15445 15446 static int 15447 ivar2_hash(struct ivar2_key *key) 15448 { 15449 return (key->id << 8) ^ (key->klass >> 2); 15450 } 15451 15452 static const struct st_hash_type ivar2_hash_type = { 15453 ivar2_cmp, 15454 ivar2_hash, 15455 }; 15456 #endif 15457 15458 void 15459 Init_sym(void) 15460 { 15461 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000); 15462 global_symbols.id_str = st_init_numtable_with_size(1000); 15463 #if ENABLE_SELECTOR_NAMESPACE 15464 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000); 15465 global_symbols.id_ivar2 = st_init_numtable_with_size(1000); 15466 #endif 15467 15468 Init_id(); 15469 } 15470 15471 void 15472 rb_gc_mark_symbols(void) 15473 { 15474 rb_mark_tbl(global_symbols.id_str); 15475 rb_gc_mark_locations(global_symbols.op_sym, 15476 global_symbols.op_sym + tLAST_TOKEN); 15477 } 15478 #endif /* !RIPPER */ 15479 15480 static ID 15481 internal_id_gen(struct parser_params *parser) 15482 { 15483 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars); 15484 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1; 15485 return ID_INTERNAL | (id << ID_SCOPE_SHIFT); 15486 } 15487 15488 #ifndef RIPPER 15489 static int 15490 is_special_global_name(const char *m, const char *e, rb_encoding *enc) 15491 { 15492 int mb = 0; 15493 15494 if (m >= e) return 0; 15495 switch (*m) { 15496 case '~': case '*': case '$': case '?': case '!': case '@': 15497 case '/': case '\\': case ';': case ',': case '.': case '=': 15498 case ':': case '<': case '>': case '\"': 15499 case '&': case '`': case '\'': case '+': 15500 case '0': 15501 ++m; 15502 break; 15503 case '-': 15504 ++m; 15505 if (m < e && is_identchar(m, e, enc)) { 15506 if (!ISASCII(*m)) mb = 1; 15507 m += rb_enc_mbclen(m, e, enc); 15508 } 15509 break; 15510 default: 15511 if (!rb_enc_isdigit(*m, enc)) return 0; 15512 do { 15513 if (!ISASCII(*m)) mb = 1; 15514 ++m; 15515 } while (m < e && rb_enc_isdigit(*m, enc)); 15516 } 15517 return m == e ? mb + 1 : 0; 15518 } 15519 15520 int 15521 rb_symname_p(const char *name) 15522 { 15523 return rb_enc_symname_p(name, rb_ascii8bit_encoding()); 15524 } 15525 15526 int 15527 rb_enc_symname_p(const char *name, rb_encoding *enc) 15528 { 15529 return rb_enc_symname2_p(name, strlen(name), enc); 15530 } 15531 15532 int 15533 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc) 15534 { 15535 const char *m = name; 15536 const char *e = m + len; 15537 int localid = FALSE; 15538 15539 if (!m) return FALSE; 15540 switch (*m) { 15541 case '\0': 15542 return FALSE; 15543 15544 case '$': 15545 if (is_special_global_name(++m, e, enc)) return TRUE; 15546 goto id; 15547 15548 case '@': 15549 if (*++m == '@') ++m; 15550 goto id; 15551 15552 case '<': 15553 switch (*++m) { 15554 case '<': ++m; break; 15555 case '=': if (*++m == '>') ++m; break; 15556 default: break; 15557 } 15558 break; 15559 15560 case '>': 15561 switch (*++m) { 15562 case '>': case '=': ++m; break; 15563 } 15564 break; 15565 15566 case '=': 15567 switch (*++m) { 15568 case '~': ++m; break; 15569 case '=': if (*++m == '=') ++m; break; 15570 default: return FALSE; 15571 } 15572 break; 15573 15574 case '*': 15575 if (*++m == '*') ++m; 15576 break; 15577 15578 case '+': case '-': 15579 if (*++m == '@') ++m; 15580 break; 15581 15582 case '|': case '^': case '&': case '/': case '%': case '~': case '`': 15583 ++m; 15584 break; 15585 15586 case '[': 15587 if (*++m != ']') return FALSE; 15588 if (*++m == '=') ++m; 15589 break; 15590 15591 case '!': 15592 switch (*++m) { 15593 case '\0': return TRUE; 15594 case '=': case '~': ++m; break; 15595 default: return FALSE; 15596 } 15597 break; 15598 15599 default: 15600 localid = !rb_enc_isupper(*m, enc); 15601 id: 15602 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m))) 15603 return FALSE; 15604 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc); 15605 if (localid) { 15606 switch (*m) { 15607 case '!': case '?': case '=': ++m; 15608 } 15609 } 15610 break; 15611 } 15612 return m == e; 15613 } 15614 15615 static ID 15616 register_symid(ID id, const char *name, long len, rb_encoding *enc) 15617 { 15618 VALUE str = rb_enc_str_new(name, len, enc); 15619 OBJ_FREEZE(str); 15620 st_add_direct(global_symbols.sym_id, (st_data_t)str, id); 15621 st_add_direct(global_symbols.id_str, id, (st_data_t)str); 15622 return id; 15623 } 15624 15625 ID 15626 rb_intern3(const char *name, long len, rb_encoding *enc) 15627 { 15628 const char *m = name; 15629 const char *e = m + len; 15630 unsigned char c; 15631 VALUE str; 15632 ID id; 15633 long last; 15634 int mb; 15635 st_data_t data; 15636 struct RString fake_str; 15637 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE; 15638 fake_str.basic.klass = rb_cString; 15639 fake_str.as.heap.len = len; 15640 fake_str.as.heap.ptr = (char *)name; 15641 fake_str.as.heap.aux.capa = len; 15642 str = (VALUE)&fake_str; 15643 rb_enc_associate(str, enc); 15644 15645 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) { 15646 rb_raise(rb_eEncodingError, "invalid encoding symbol"); 15647 } 15648 15649 if (st_lookup(global_symbols.sym_id, str, &data)) 15650 return (ID)data; 15651 15652 if (rb_cString && !rb_enc_asciicompat(enc)) { 15653 id = ID_JUNK; 15654 goto new_id; 15655 } 15656 last = len-1; 15657 id = 0; 15658 switch (*m) { 15659 case '$': 15660 id |= ID_GLOBAL; 15661 if ((mb = is_special_global_name(++m, e, enc)) != 0) { 15662 if (!--mb) enc = rb_ascii8bit_encoding(); 15663 goto new_id; 15664 } 15665 break; 15666 case '@': 15667 if (m[1] == '@') { 15668 m++; 15669 id |= ID_CLASS; 15670 } 15671 else { 15672 id |= ID_INSTANCE; 15673 } 15674 m++; 15675 break; 15676 default: 15677 c = m[0]; 15678 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) { 15679 /* operators */ 15680 int i; 15681 15682 if (len == 1) { 15683 id = c; 15684 goto id_register; 15685 } 15686 for (i = 0; i < op_tbl_count; i++) { 15687 if (*op_tbl[i].name == *m && 15688 strcmp(op_tbl[i].name, m) == 0) { 15689 id = op_tbl[i].token; 15690 goto id_register; 15691 } 15692 } 15693 } 15694 15695 if (m[last] == '=') { 15696 /* attribute assignment */ 15697 id = rb_intern3(name, last, enc); 15698 if (id > tLAST_TOKEN && !is_attrset_id(id)) { 15699 enc = rb_enc_get(rb_id2str(id)); 15700 id = rb_id_attrset(id); 15701 goto id_register; 15702 } 15703 id = ID_ATTRSET; 15704 } 15705 else if (rb_enc_isupper(m[0], enc)) { 15706 id = ID_CONST; 15707 } 15708 else { 15709 id = ID_LOCAL; 15710 } 15711 break; 15712 } 15713 mb = 0; 15714 if (!rb_enc_isdigit(*m, enc)) { 15715 while (m <= name + last && is_identchar(m, e, enc)) { 15716 if (ISASCII(*m)) { 15717 m++; 15718 } 15719 else { 15720 mb = 1; 15721 m += rb_enc_mbclen(m, e, enc); 15722 } 15723 } 15724 } 15725 if (m - name < len) id = ID_JUNK; 15726 if (enc != rb_usascii_encoding()) { 15727 /* 15728 * this clause makes sense only when called from other than 15729 * rb_intern_str() taking care of code-range. 15730 */ 15731 if (!mb) { 15732 for (; m <= name + len; ++m) { 15733 if (!ISASCII(*m)) goto mbstr; 15734 } 15735 enc = rb_usascii_encoding(); 15736 } 15737 mbstr:; 15738 } 15739 new_id: 15740 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) { 15741 if (len > 20) { 15742 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)", 15743 name); 15744 } 15745 else { 15746 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)", 15747 (int)len, name); 15748 } 15749 } 15750 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT; 15751 id_register: 15752 return register_symid(id, name, len, enc); 15753 } 15754 15755 ID 15756 rb_intern2(const char *name, long len) 15757 { 15758 return rb_intern3(name, len, rb_usascii_encoding()); 15759 } 15760 15761 #undef rb_intern 15762 ID 15763 rb_intern(const char *name) 15764 { 15765 return rb_intern2(name, strlen(name)); 15766 } 15767 15768 ID 15769 rb_intern_str(VALUE str) 15770 { 15771 rb_encoding *enc; 15772 ID id; 15773 15774 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 15775 enc = rb_usascii_encoding(); 15776 } 15777 else { 15778 enc = rb_enc_get(str); 15779 } 15780 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc); 15781 RB_GC_GUARD(str); 15782 return id; 15783 } 15784 15785 VALUE 15786 rb_id2str(ID id) 15787 { 15788 st_data_t data; 15789 15790 if (id < tLAST_TOKEN) { 15791 int i = 0; 15792 15793 if (id < INT_MAX && rb_ispunct((int)id)) { 15794 VALUE str = global_symbols.op_sym[i = (int)id]; 15795 if (!str) { 15796 char name[2]; 15797 name[0] = (char)id; 15798 name[1] = 0; 15799 str = rb_usascii_str_new(name, 1); 15800 OBJ_FREEZE(str); 15801 global_symbols.op_sym[i] = str; 15802 } 15803 return str; 15804 } 15805 for (i = 0; i < op_tbl_count; i++) { 15806 if (op_tbl[i].token == id) { 15807 VALUE str = global_symbols.op_sym[i]; 15808 if (!str) { 15809 str = rb_usascii_str_new2(op_tbl[i].name); 15810 OBJ_FREEZE(str); 15811 global_symbols.op_sym[i] = str; 15812 } 15813 return str; 15814 } 15815 } 15816 } 15817 15818 if (st_lookup(global_symbols.id_str, id, &data)) { 15819 VALUE str = (VALUE)data; 15820 if (RBASIC(str)->klass == 0) 15821 RBASIC(str)->klass = rb_cString; 15822 return str; 15823 } 15824 15825 if (is_attrset_id(id)) { 15826 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL; 15827 VALUE str; 15828 15829 while (!(str = rb_id2str(id2))) { 15830 if (!is_local_id(id2)) return 0; 15831 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST; 15832 } 15833 str = rb_str_dup(str); 15834 rb_str_cat(str, "=", 1); 15835 rb_intern_str(str); 15836 if (st_lookup(global_symbols.id_str, id, &data)) { 15837 VALUE str = (VALUE)data; 15838 if (RBASIC(str)->klass == 0) 15839 RBASIC(str)->klass = rb_cString; 15840 return str; 15841 } 15842 } 15843 return 0; 15844 } 15845 15846 const char * 15847 rb_id2name(ID id) 15848 { 15849 VALUE str = rb_id2str(id); 15850 15851 if (!str) return 0; 15852 return RSTRING_PTR(str); 15853 } 15854 15855 static int 15856 symbols_i(VALUE sym, ID value, VALUE ary) 15857 { 15858 rb_ary_push(ary, ID2SYM(value)); 15859 return ST_CONTINUE; 15860 } 15861 15862 /* 15863 * call-seq: 15864 * Symbol.all_symbols => array 15865 * 15866 * Returns an array of all the symbols currently in Ruby's symbol 15867 * table. 15868 * 15869 * Symbol.all_symbols.size #=> 903 15870 * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink, 15871 * :chown, :EOFError, :$;, :String, 15872 * :LOCK_SH, :"setuid?", :$<, 15873 * :default_proc, :compact, :extend, 15874 * :Tms, :getwd, :$=, :ThreadGroup, 15875 * :wait2, :$>] 15876 */ 15877 15878 VALUE 15879 rb_sym_all_symbols(void) 15880 { 15881 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries); 15882 15883 st_foreach(global_symbols.sym_id, symbols_i, ary); 15884 return ary; 15885 } 15886 15887 int 15888 rb_is_const_id(ID id) 15889 { 15890 return is_const_id(id); 15891 } 15892 15893 int 15894 rb_is_class_id(ID id) 15895 { 15896 return is_class_id(id); 15897 } 15898 15899 int 15900 rb_is_instance_id(ID id) 15901 { 15902 return is_instance_id(id); 15903 } 15904 15905 int 15906 rb_is_local_id(ID id) 15907 { 15908 return is_local_id(id); 15909 } 15910 15911 int 15912 rb_is_junk_id(ID id) 15913 { 15914 return is_junk_id(id); 15915 } 15916 15917 #endif /* !RIPPER */ 15918 15919 static void 15920 parser_initialize(struct parser_params *parser) 15921 { 15922 parser->eofp = Qfalse; 15923 15924 parser->parser_lex_strterm = 0; 15925 parser->parser_cond_stack = 0; 15926 parser->parser_cmdarg_stack = 0; 15927 parser->parser_class_nest = 0; 15928 parser->parser_paren_nest = 0; 15929 parser->parser_lpar_beg = 0; 15930 parser->parser_in_single = 0; 15931 parser->parser_in_def = 0; 15932 parser->parser_in_defined = 0; 15933 parser->parser_compile_for_eval = 0; 15934 parser->parser_cur_mid = 0; 15935 parser->parser_tokenbuf = NULL; 15936 parser->parser_tokidx = 0; 15937 parser->parser_toksiz = 0; 15938 parser->parser_heredoc_end = 0; 15939 parser->parser_command_start = TRUE; 15940 parser->parser_deferred_nodes = 0; 15941 parser->parser_lex_pbeg = 0; 15942 parser->parser_lex_p = 0; 15943 parser->parser_lex_pend = 0; 15944 parser->parser_lvtbl = 0; 15945 parser->parser_ruby__end__seen = 0; 15946 parser->parser_ruby_sourcefile = 0; 15947 #ifndef RIPPER 15948 parser->is_ripper = 0; 15949 parser->parser_eval_tree_begin = 0; 15950 parser->parser_eval_tree = 0; 15951 #else 15952 parser->is_ripper = 1; 15953 parser->parser_ruby_sourcefile_string = Qnil; 15954 parser->delayed = Qnil; 15955 15956 parser->result = Qnil; 15957 parser->parsing_thread = Qnil; 15958 parser->toplevel_p = TRUE; 15959 #endif 15960 #ifdef YYMALLOC 15961 parser->heap = NULL; 15962 #endif 15963 parser->enc = rb_usascii_encoding(); 15964 } 15965 15966 #ifdef RIPPER 15967 #define parser_mark ripper_parser_mark 15968 #define parser_free ripper_parser_free 15969 #endif 15970 15971 static void 15972 parser_mark(void *ptr) 15973 { 15974 struct parser_params *p = (struct parser_params*)ptr; 15975 15976 rb_gc_mark((VALUE)p->parser_lex_strterm); 15977 rb_gc_mark((VALUE)p->parser_deferred_nodes); 15978 rb_gc_mark(p->parser_lex_input); 15979 rb_gc_mark(p->parser_lex_lastline); 15980 rb_gc_mark(p->parser_lex_nextline); 15981 #ifndef RIPPER 15982 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ; 15983 rb_gc_mark((VALUE)p->parser_eval_tree) ; 15984 rb_gc_mark(p->debug_lines); 15985 #else 15986 rb_gc_mark(p->parser_ruby_sourcefile_string); 15987 rb_gc_mark(p->delayed); 15988 rb_gc_mark(p->value); 15989 rb_gc_mark(p->result); 15990 rb_gc_mark(p->parsing_thread); 15991 #endif 15992 #ifdef YYMALLOC 15993 rb_gc_mark((VALUE)p->heap); 15994 #endif 15995 } 15996 15997 static void 15998 parser_free(void *ptr) 15999 { 16000 struct parser_params *p = (struct parser_params*)ptr; 16001 struct local_vars *local, *prev; 16002 16003 if (p->parser_tokenbuf) { 16004 xfree(p->parser_tokenbuf); 16005 } 16006 for (local = p->parser_lvtbl; local; local = prev) { 16007 if (local->vars) xfree(local->vars); 16008 prev = local->prev; 16009 xfree(local); 16010 } 16011 #ifndef RIPPER 16012 xfree(p->parser_ruby_sourcefile); 16013 #endif 16014 xfree(p); 16015 } 16016 16017 static size_t 16018 parser_memsize(const void *ptr) 16019 { 16020 struct parser_params *p = (struct parser_params*)ptr; 16021 struct local_vars *local; 16022 size_t size = sizeof(*p); 16023 16024 if (!ptr) return 0; 16025 size += p->parser_toksiz; 16026 for (local = p->parser_lvtbl; local; local = local->prev) { 16027 size += sizeof(*local); 16028 if (local->vars) size += local->vars->capa * sizeof(ID); 16029 } 16030 #ifndef RIPPER 16031 if (p->parser_ruby_sourcefile) { 16032 size += strlen(p->parser_ruby_sourcefile) + 1; 16033 } 16034 #endif 16035 return size; 16036 } 16037 16038 static const rb_data_type_t parser_data_type = { 16039 "parser", 16040 parser_mark, 16041 parser_free, 16042 parser_memsize, 16043 }; 16044 16045 VALUE rb_parser_get_yydebug(VALUE); 16046 VALUE rb_parser_set_yydebug(VALUE, VALUE); 16047 16048 #ifndef RIPPER 16049 #undef rb_reserved_word 16050 16051 const struct kwtable * 16052 rb_reserved_word(const char *str, unsigned int len) 16053 { 16054 return reserved_word(str, len); 16055 } 16056 16057 static struct parser_params * 16058 parser_new(void) 16059 { 16060 struct parser_params *p; 16061 16062 p = ALLOC_N(struct parser_params, 1); 16063 MEMZERO(p, struct parser_params, 1); 16064 parser_initialize(p); 16065 return p; 16066 } 16067 16068 VALUE 16069 rb_parser_new(void) 16070 { 16071 struct parser_params *p = parser_new(); 16072 16073 return TypedData_Wrap_Struct(0, &parser_data_type, p); 16074 } 16075 16076 /* 16077 * call-seq: 16078 * ripper#end_seen? -> Boolean 16079 * 16080 * Return if parsed source ended by +\_\_END\_\_+. 16081 * This number starts from 1. 16082 */ 16083 VALUE 16084 rb_parser_end_seen_p(VALUE vparser) 16085 { 16086 struct parser_params *parser; 16087 16088 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 16089 return ruby__end__seen ? Qtrue : Qfalse; 16090 } 16091 16092 /* 16093 * call-seq: 16094 * ripper#encoding -> encoding 16095 * 16096 * Return encoding of the source. 16097 */ 16098 VALUE 16099 rb_parser_encoding(VALUE vparser) 16100 { 16101 struct parser_params *parser; 16102 16103 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 16104 return rb_enc_from_encoding(parser->enc); 16105 } 16106 16107 /* 16108 * call-seq: 16109 * ripper.yydebug -> true or false 16110 * 16111 * Get yydebug. 16112 */ 16113 VALUE 16114 rb_parser_get_yydebug(VALUE self) 16115 { 16116 struct parser_params *parser; 16117 16118 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16119 return yydebug ? Qtrue : Qfalse; 16120 } 16121 16122 /* 16123 * call-seq: 16124 * ripper.yydebug = flag 16125 * 16126 * Set yydebug. 16127 */ 16128 VALUE 16129 rb_parser_set_yydebug(VALUE self, VALUE flag) 16130 { 16131 struct parser_params *parser; 16132 16133 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16134 yydebug = RTEST(flag); 16135 return flag; 16136 } 16137 16138 #ifdef YYMALLOC 16139 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE)) 16140 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0) 16141 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \ 16142 (n)->u3.cnt = (c), (p)) 16143 16144 void * 16145 rb_parser_malloc(struct parser_params *parser, size_t size) 16146 { 16147 size_t cnt = HEAPCNT(1, size); 16148 NODE *n = NEWHEAP(); 16149 void *ptr = xmalloc(size); 16150 16151 return ADD2HEAP(n, cnt, ptr); 16152 } 16153 16154 void * 16155 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size) 16156 { 16157 size_t cnt = HEAPCNT(nelem, size); 16158 NODE *n = NEWHEAP(); 16159 void *ptr = xcalloc(nelem, size); 16160 16161 return ADD2HEAP(n, cnt, ptr); 16162 } 16163 16164 void * 16165 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size) 16166 { 16167 NODE *n; 16168 size_t cnt = HEAPCNT(1, size); 16169 16170 if (ptr && (n = parser->heap) != NULL) { 16171 do { 16172 if (n->u1.node == ptr) { 16173 n->u1.node = ptr = xrealloc(ptr, size); 16174 if (n->u3.cnt) n->u3.cnt = cnt; 16175 return ptr; 16176 } 16177 } while ((n = n->u2.node) != NULL); 16178 } 16179 n = NEWHEAP(); 16180 ptr = xrealloc(ptr, size); 16181 return ADD2HEAP(n, cnt, ptr); 16182 } 16183 16184 void 16185 rb_parser_free(struct parser_params *parser, void *ptr) 16186 { 16187 NODE **prev = &parser->heap, *n; 16188 16189 while ((n = *prev) != NULL) { 16190 if (n->u1.node == ptr) { 16191 *prev = n->u2.node; 16192 rb_gc_force_recycle((VALUE)n); 16193 break; 16194 } 16195 prev = &n->u2.node; 16196 } 16197 xfree(ptr); 16198 } 16199 #endif 16200 #endif 16201 16202 #ifdef RIPPER 16203 #ifdef RIPPER_DEBUG 16204 extern int rb_is_pointer_to_heap(VALUE); 16205 16206 /* :nodoc: */ 16207 static VALUE 16208 ripper_validate_object(VALUE self, VALUE x) 16209 { 16210 if (x == Qfalse) return x; 16211 if (x == Qtrue) return x; 16212 if (x == Qnil) return x; 16213 if (x == Qundef) 16214 rb_raise(rb_eArgError, "Qundef given"); 16215 if (FIXNUM_P(x)) return x; 16216 if (SYMBOL_P(x)) return x; 16217 if (!rb_is_pointer_to_heap(x)) 16218 rb_raise(rb_eArgError, "invalid pointer: %p", x); 16219 switch (TYPE(x)) { 16220 case T_STRING: 16221 case T_OBJECT: 16222 case T_ARRAY: 16223 case T_BIGNUM: 16224 case T_FLOAT: 16225 return x; 16226 case T_NODE: 16227 if (nd_type(x) != NODE_LASGN) { 16228 rb_raise(rb_eArgError, "NODE given: %p", x); 16229 } 16230 return ((NODE *)x)->nd_rval; 16231 default: 16232 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)", 16233 x, rb_obj_classname(x)); 16234 } 16235 return x; 16236 } 16237 #endif 16238 16239 #define validate(x) (x = get_value(x)) 16240 16241 static VALUE 16242 ripper_dispatch0(struct parser_params *parser, ID mid) 16243 { 16244 return rb_funcall(parser->value, mid, 0); 16245 } 16246 16247 static VALUE 16248 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a) 16249 { 16250 validate(a); 16251 return rb_funcall(parser->value, mid, 1, a); 16252 } 16253 16254 static VALUE 16255 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b) 16256 { 16257 validate(a); 16258 validate(b); 16259 return rb_funcall(parser->value, mid, 2, a, b); 16260 } 16261 16262 static VALUE 16263 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c) 16264 { 16265 validate(a); 16266 validate(b); 16267 validate(c); 16268 return rb_funcall(parser->value, mid, 3, a, b, c); 16269 } 16270 16271 static VALUE 16272 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d) 16273 { 16274 validate(a); 16275 validate(b); 16276 validate(c); 16277 validate(d); 16278 return rb_funcall(parser->value, mid, 4, a, b, c, d); 16279 } 16280 16281 static VALUE 16282 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e) 16283 { 16284 validate(a); 16285 validate(b); 16286 validate(c); 16287 validate(d); 16288 validate(e); 16289 return rb_funcall(parser->value, mid, 5, a, b, c, d, e); 16290 } 16291 16292 static const struct kw_assoc { 16293 ID id; 16294 const char *name; 16295 } keyword_to_name[] = { 16296 {keyword_class, "class"}, 16297 {keyword_module, "module"}, 16298 {keyword_def, "def"}, 16299 {keyword_undef, "undef"}, 16300 {keyword_begin, "begin"}, 16301 {keyword_rescue, "rescue"}, 16302 {keyword_ensure, "ensure"}, 16303 {keyword_end, "end"}, 16304 {keyword_if, "if"}, 16305 {keyword_unless, "unless"}, 16306 {keyword_then, "then"}, 16307 {keyword_elsif, "elsif"}, 16308 {keyword_else, "else"}, 16309 {keyword_case, "case"}, 16310 {keyword_when, "when"}, 16311 {keyword_while, "while"}, 16312 {keyword_until, "until"}, 16313 {keyword_for, "for"}, 16314 {keyword_break, "break"}, 16315 {keyword_next, "next"}, 16316 {keyword_redo, "redo"}, 16317 {keyword_retry, "retry"}, 16318 {keyword_in, "in"}, 16319 {keyword_do, "do"}, 16320 {keyword_do_cond, "do"}, 16321 {keyword_do_block, "do"}, 16322 {keyword_return, "return"}, 16323 {keyword_yield, "yield"}, 16324 {keyword_super, "super"}, 16325 {keyword_self, "self"}, 16326 {keyword_nil, "nil"}, 16327 {keyword_true, "true"}, 16328 {keyword_false, "false"}, 16329 {keyword_and, "and"}, 16330 {keyword_or, "or"}, 16331 {keyword_not, "not"}, 16332 {modifier_if, "if"}, 16333 {modifier_unless, "unless"}, 16334 {modifier_while, "while"}, 16335 {modifier_until, "until"}, 16336 {modifier_rescue, "rescue"}, 16337 {keyword_alias, "alias"}, 16338 {keyword_defined, "defined?"}, 16339 {keyword_BEGIN, "BEGIN"}, 16340 {keyword_END, "END"}, 16341 {keyword__LINE__, "__LINE__"}, 16342 {keyword__FILE__, "__FILE__"}, 16343 {keyword__ENCODING__, "__ENCODING__"}, 16344 {0, NULL} 16345 }; 16346 16347 static const char* 16348 keyword_id_to_str(ID id) 16349 { 16350 const struct kw_assoc *a; 16351 16352 for (a = keyword_to_name; a->id; a++) { 16353 if (a->id == id) 16354 return a->name; 16355 } 16356 return NULL; 16357 } 16358 16359 #undef ripper_id2sym 16360 static VALUE 16361 ripper_id2sym(ID id) 16362 { 16363 const char *name; 16364 char buf[8]; 16365 16366 if (id <= 256) { 16367 buf[0] = (char)id; 16368 buf[1] = '\0'; 16369 return ID2SYM(rb_intern2(buf, 1)); 16370 } 16371 if ((name = keyword_id_to_str(id))) { 16372 return ID2SYM(rb_intern(name)); 16373 } 16374 switch (id) { 16375 case tOROP: 16376 name = "||"; 16377 break; 16378 case tANDOP: 16379 name = "&&"; 16380 break; 16381 default: 16382 name = rb_id2name(id); 16383 if (!name) { 16384 rb_bug("cannot convert ID to string: %ld", (unsigned long)id); 16385 } 16386 return ID2SYM(id); 16387 } 16388 return ID2SYM(rb_intern(name)); 16389 } 16390 16391 static ID 16392 ripper_get_id(VALUE v) 16393 { 16394 NODE *nd; 16395 if (!RB_TYPE_P(v, T_NODE)) return 0; 16396 nd = (NODE *)v; 16397 if (nd_type(nd) != NODE_LASGN) return 0; 16398 return nd->nd_vid; 16399 } 16400 16401 static VALUE 16402 ripper_get_value(VALUE v) 16403 { 16404 NODE *nd; 16405 if (v == Qundef) return Qnil; 16406 if (!RB_TYPE_P(v, T_NODE)) return v; 16407 nd = (NODE *)v; 16408 if (nd_type(nd) != NODE_LASGN) return Qnil; 16409 return nd->nd_rval; 16410 } 16411 16412 static void 16413 ripper_compile_error(struct parser_params *parser, const char *fmt, ...) 16414 { 16415 VALUE str; 16416 va_list args; 16417 16418 va_start(args, fmt); 16419 str = rb_vsprintf(fmt, args); 16420 va_end(args); 16421 rb_funcall(parser->value, rb_intern("compile_error"), 1, str); 16422 } 16423 16424 static void 16425 ripper_warn0(struct parser_params *parser, const char *fmt) 16426 { 16427 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt)); 16428 } 16429 16430 static void 16431 ripper_warnI(struct parser_params *parser, const char *fmt, int a) 16432 { 16433 rb_funcall(parser->value, rb_intern("warn"), 2, 16434 STR_NEW2(fmt), INT2NUM(a)); 16435 } 16436 16437 #if 0 16438 static void 16439 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str) 16440 { 16441 rb_funcall(parser->value, rb_intern("warn"), 2, 16442 STR_NEW2(fmt), STR_NEW2(str)); 16443 } 16444 #endif 16445 16446 static void 16447 ripper_warning0(struct parser_params *parser, const char *fmt) 16448 { 16449 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt)); 16450 } 16451 16452 static void 16453 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str) 16454 { 16455 rb_funcall(parser->value, rb_intern("warning"), 2, 16456 STR_NEW2(fmt), STR_NEW2(str)); 16457 } 16458 16459 static VALUE 16460 ripper_lex_get_generic(struct parser_params *parser, VALUE src) 16461 { 16462 return rb_funcall(src, ripper_id_gets, 0); 16463 } 16464 16465 static VALUE 16466 ripper_s_allocate(VALUE klass) 16467 { 16468 struct parser_params *p; 16469 VALUE self; 16470 16471 p = ALLOC_N(struct parser_params, 1); 16472 MEMZERO(p, struct parser_params, 1); 16473 self = TypedData_Wrap_Struct(klass, &parser_data_type, p); 16474 p->value = self; 16475 return self; 16476 } 16477 16478 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0) 16479 16480 /* 16481 * call-seq: 16482 * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper 16483 * 16484 * Create a new Ripper object. 16485 * _src_ must be a String, an IO, or an Object which has #gets method. 16486 * 16487 * This method does not starts parsing. 16488 * See also Ripper#parse and Ripper.parse. 16489 */ 16490 static VALUE 16491 ripper_initialize(int argc, VALUE *argv, VALUE self) 16492 { 16493 struct parser_params *parser; 16494 VALUE src, fname, lineno; 16495 16496 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16497 rb_scan_args(argc, argv, "12", &src, &fname, &lineno); 16498 if (rb_obj_respond_to(src, ripper_id_gets, 0)) { 16499 parser->parser_lex_gets = ripper_lex_get_generic; 16500 } 16501 else { 16502 StringValue(src); 16503 parser->parser_lex_gets = lex_get_str; 16504 } 16505 parser->parser_lex_input = src; 16506 parser->eofp = Qfalse; 16507 if (NIL_P(fname)) { 16508 fname = STR_NEW2("(ripper)"); 16509 } 16510 else { 16511 StringValue(fname); 16512 } 16513 parser_initialize(parser); 16514 16515 parser->parser_ruby_sourcefile_string = fname; 16516 parser->parser_ruby_sourcefile = RSTRING_PTR(fname); 16517 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1; 16518 16519 return Qnil; 16520 } 16521 16522 extern VALUE rb_thread_pass(void); 16523 16524 struct ripper_args { 16525 struct parser_params *parser; 16526 int argc; 16527 VALUE *argv; 16528 }; 16529 16530 static VALUE 16531 ripper_parse0(VALUE parser_v) 16532 { 16533 struct parser_params *parser; 16534 16535 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 16536 parser_prepare(parser); 16537 ripper_yyparse((void*)parser); 16538 return parser->result; 16539 } 16540 16541 static VALUE 16542 ripper_ensure(VALUE parser_v) 16543 { 16544 struct parser_params *parser; 16545 16546 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 16547 parser->parsing_thread = Qnil; 16548 return Qnil; 16549 } 16550 16551 /* 16552 * call-seq: 16553 * ripper#parse 16554 * 16555 * Start parsing and returns the value of the root action. 16556 */ 16557 static VALUE 16558 ripper_parse(VALUE self) 16559 { 16560 struct parser_params *parser; 16561 16562 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16563 if (!ripper_initialized_p(parser)) { 16564 rb_raise(rb_eArgError, "method called for uninitialized object"); 16565 } 16566 if (!NIL_P(parser->parsing_thread)) { 16567 if (parser->parsing_thread == rb_thread_current()) 16568 rb_raise(rb_eArgError, "Ripper#parse is not reentrant"); 16569 else 16570 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe"); 16571 } 16572 parser->parsing_thread = rb_thread_current(); 16573 rb_ensure(ripper_parse0, self, ripper_ensure, self); 16574 16575 return parser->result; 16576 } 16577 16578 /* 16579 * call-seq: 16580 * ripper#column -> Integer 16581 * 16582 * Return column number of current parsing line. 16583 * This number starts from 0. 16584 */ 16585 static VALUE 16586 ripper_column(VALUE self) 16587 { 16588 struct parser_params *parser; 16589 long col; 16590 16591 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16592 if (!ripper_initialized_p(parser)) { 16593 rb_raise(rb_eArgError, "method called for uninitialized object"); 16594 } 16595 if (NIL_P(parser->parsing_thread)) return Qnil; 16596 col = parser->tokp - parser->parser_lex_pbeg; 16597 return LONG2NUM(col); 16598 } 16599 16600 /* 16601 * call-seq: 16602 * ripper#filename -> String 16603 * 16604 * Return current parsing filename. 16605 */ 16606 static VALUE 16607 ripper_filename(VALUE self) 16608 { 16609 struct parser_params *parser; 16610 16611 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16612 if (!ripper_initialized_p(parser)) { 16613 rb_raise(rb_eArgError, "method called for uninitialized object"); 16614 } 16615 return parser->parser_ruby_sourcefile_string; 16616 } 16617 16618 /* 16619 * call-seq: 16620 * ripper#lineno -> Integer 16621 * 16622 * Return line number of current parsing line. 16623 * This number starts from 1. 16624 */ 16625 static VALUE 16626 ripper_lineno(VALUE self) 16627 { 16628 struct parser_params *parser; 16629 16630 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16631 if (!ripper_initialized_p(parser)) { 16632 rb_raise(rb_eArgError, "method called for uninitialized object"); 16633 } 16634 if (NIL_P(parser->parsing_thread)) return Qnil; 16635 return INT2NUM(parser->parser_ruby_sourceline); 16636 } 16637 16638 #ifdef RIPPER_DEBUG 16639 /* :nodoc: */ 16640 static VALUE 16641 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg) 16642 { 16643 StringValue(msg); 16644 if (obj == Qundef) { 16645 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg)); 16646 } 16647 return Qnil; 16648 } 16649 16650 /* :nodoc: */ 16651 static VALUE 16652 ripper_value(VALUE self, VALUE obj) 16653 { 16654 return ULONG2NUM(obj); 16655 } 16656 #endif 16657 16658 void 16659 Init_ripper(void) 16660 { 16661 VALUE Ripper; 16662 16663 Ripper = rb_define_class("Ripper", rb_cObject); 16664 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION)); 16665 rb_define_alloc_func(Ripper, ripper_s_allocate); 16666 rb_define_method(Ripper, "initialize", ripper_initialize, -1); 16667 rb_define_method(Ripper, "parse", ripper_parse, 0); 16668 rb_define_method(Ripper, "column", ripper_column, 0); 16669 rb_define_method(Ripper, "filename", ripper_filename, 0); 16670 rb_define_method(Ripper, "lineno", ripper_lineno, 0); 16671 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0); 16672 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0); 16673 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0); 16674 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1); 16675 #ifdef RIPPER_DEBUG 16676 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2); 16677 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1); 16678 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1); 16679 #endif 16680 16681 ripper_id_gets = rb_intern("gets"); 16682 ripper_init_eventids1(Ripper); 16683 ripper_init_eventids2(Ripper); 16684 /* ensure existing in symbol table */ 16685 rb_intern("||"); 16686 rb_intern("&&"); 16687 } 16688 #endif /* RIPPER */ 16689 16690
1.7.3