|
Ruby
1.9.3p537(2014-02-19revision0)
|
00001 /* A Bison parser, made by GNU Bison 2.7.1. */ 00002 00003 /* Bison implementation for Yacc-like parsers in C 00004 00005 Copyright (C) 1984, 1989-1990, 2000-2013 Free Software Foundation, Inc. 00006 00007 This program is free software: you can redistribute it and/or modify 00008 it under the terms of the GNU General Public License as published by 00009 the Free Software Foundation, either version 3 of the License, or 00010 (at your option) any later version. 00011 00012 This program is distributed in the hope that it will be useful, 00013 but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 GNU General Public License for more details. 00016 00017 You should have received a copy of the GNU General Public License 00018 along with this program. If not, see <http://www.gnu.org/licenses/>. */ 00019 00020 /* As a special exception, you may create a larger work that contains 00021 part or all of the Bison parser skeleton and distribute that work 00022 under terms of your choice, so long as that work isn't itself a 00023 parser generator using the skeleton or a modified version thereof 00024 as a parser skeleton. Alternatively, if you modify or redistribute 00025 the parser skeleton itself, you may (at your option) remove this 00026 special exception, which will cause the skeleton and the resulting 00027 Bison output files to be licensed under the GNU General Public 00028 License without this special exception. 00029 00030 This special exception was added by the Free Software Foundation in 00031 version 2.2 of Bison. */ 00032 00033 /* C LALR(1) parser skeleton written by Richard Stallman, by 00034 simplifying the original so-called "semantic" parser. */ 00035 00036 /* All symbols defined below should begin with yy or YY, to avoid 00037 infringing on user name space. This should be done even for local 00038 variables, as they might otherwise be expanded by user macros. 00039 There are some unavoidable exceptions within include files to 00040 define necessary library symbols; they are noted "INFRINGES ON 00041 USER NAME SPACE" below. */ 00042 00043 /* Identify Bison output. */ 00044 #define YYBISON 1 00045 00046 /* Bison version. */ 00047 #define YYBISON_VERSION "2.7.1" 00048 00049 /* Skeleton name. */ 00050 #define YYSKELETON_NAME "yacc.c" 00051 00052 /* Pure parsers. */ 00053 #define YYPURE 1 00054 00055 /* Push parsers. */ 00056 #define YYPUSH 0 00057 00058 /* Pull parsers. */ 00059 #define YYPULL 1 00060 00061 00062 00063 00064 /* Copy the first part of user declarations. */ 00065 /* Line 371 of yacc.c */ 00066 #line 12 "ripper.y" 00067 00068 00069 #define YYDEBUG 1 00070 #define YYERROR_VERBOSE 1 00071 #define YYSTACK_USE_ALLOCA 0 00072 00073 #include "ruby/ruby.h" 00074 #include "ruby/st.h" 00075 #include "ruby/encoding.h" 00076 #include "internal.h" 00077 #include "node.h" 00078 #include "parse.h" 00079 #include "id.h" 00080 #include "regenc.h" 00081 #include <stdio.h> 00082 #include <errno.h> 00083 #include <ctype.h> 00084 00085 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0])) 00086 00087 #define YYMALLOC(size) rb_parser_malloc(parser, (size)) 00088 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size)) 00089 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size)) 00090 #define YYFREE(ptr) rb_parser_free(parser, (ptr)) 00091 #define malloc YYMALLOC 00092 #define realloc YYREALLOC 00093 #define calloc YYCALLOC 00094 #define free YYFREE 00095 00096 #ifndef RIPPER 00097 static ID register_symid(ID, const char *, long, rb_encoding *); 00098 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc) 00099 #include "id.c" 00100 #endif 00101 00102 #define is_notop_id(id) ((id)>tLAST_TOKEN) 00103 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL) 00104 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL) 00105 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE) 00106 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET) 00107 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST) 00108 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS) 00109 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK) 00110 00111 #define is_asgn_or_id(id) ((is_notop_id(id)) && \ 00112 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \ 00113 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \ 00114 ((id)&ID_SCOPE_MASK) == ID_CLASS)) 00115 00116 enum lex_state_e { 00117 EXPR_BEG, /* ignore newline, +/- is a sign. */ 00118 EXPR_END, /* newline significant, +/- is an operator. */ 00119 EXPR_ENDARG, /* ditto, and unbound braces. */ 00120 EXPR_ENDFN, /* ditto, and unbound braces. */ 00121 EXPR_ARG, /* newline significant, +/- is an operator. */ 00122 EXPR_CMDARG, /* newline significant, +/- is an operator. */ 00123 EXPR_MID, /* newline significant, +/- is an operator. */ 00124 EXPR_FNAME, /* ignore newline, no reserved words. */ 00125 EXPR_DOT, /* right after `.' or `::', no reserved words. */ 00126 EXPR_CLASS, /* immediate after `class', no here document. */ 00127 EXPR_VALUE, /* alike EXPR_BEG but label is disallowed. */ 00128 EXPR_MAX_STATE 00129 }; 00130 00131 typedef VALUE stack_type; 00132 00133 # define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1)) 00134 # define BITSTACK_POP(stack) ((stack) = (stack) >> 1) 00135 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1)) 00136 # define BITSTACK_SET_P(stack) ((stack)&1) 00137 00138 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n)) 00139 #define COND_POP() BITSTACK_POP(cond_stack) 00140 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack) 00141 #define COND_P() BITSTACK_SET_P(cond_stack) 00142 00143 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n)) 00144 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack) 00145 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack) 00146 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack) 00147 00148 struct vtable { 00149 ID *tbl; 00150 int pos; 00151 int capa; 00152 struct vtable *prev; 00153 }; 00154 00155 struct local_vars { 00156 struct vtable *args; 00157 struct vtable *vars; 00158 struct vtable *used; 00159 struct local_vars *prev; 00160 stack_type cmdargs; 00161 }; 00162 00163 #define DVARS_INHERIT ((void*)1) 00164 #define DVARS_TOPSCOPE NULL 00165 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl)) 00166 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3) 00167 00168 static int 00169 vtable_size(const struct vtable *tbl) 00170 { 00171 if (POINTER_P(tbl)) { 00172 return tbl->pos; 00173 } 00174 else { 00175 return 0; 00176 } 00177 } 00178 00179 #define VTBL_DEBUG 0 00180 00181 static struct vtable * 00182 vtable_alloc(struct vtable *prev) 00183 { 00184 struct vtable *tbl = ALLOC(struct vtable); 00185 tbl->pos = 0; 00186 tbl->capa = 8; 00187 tbl->tbl = ALLOC_N(ID, tbl->capa); 00188 tbl->prev = prev; 00189 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl); 00190 return tbl; 00191 } 00192 00193 static void 00194 vtable_free(struct vtable *tbl) 00195 { 00196 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl); 00197 if (POINTER_P(tbl)) { 00198 if (tbl->tbl) { 00199 xfree(tbl->tbl); 00200 } 00201 xfree(tbl); 00202 } 00203 } 00204 00205 static void 00206 vtable_add(struct vtable *tbl, ID id) 00207 { 00208 if (!POINTER_P(tbl)) { 00209 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl); 00210 } 00211 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id)); 00212 00213 if (tbl->pos == tbl->capa) { 00214 tbl->capa = tbl->capa * 2; 00215 REALLOC_N(tbl->tbl, ID, tbl->capa); 00216 } 00217 tbl->tbl[tbl->pos++] = id; 00218 } 00219 00220 static int 00221 vtable_included(const struct vtable * tbl, ID id) 00222 { 00223 int i; 00224 00225 if (POINTER_P(tbl)) { 00226 for (i = 0; i < tbl->pos; i++) { 00227 if (tbl->tbl[i] == id) { 00228 return i+1; 00229 } 00230 } 00231 } 00232 return 0; 00233 } 00234 00235 00236 #ifndef RIPPER 00237 typedef struct token_info { 00238 const char *token; 00239 int linenum; 00240 int column; 00241 int nonspc; 00242 struct token_info *next; 00243 } token_info; 00244 #endif 00245 00246 /* 00247 Structure of Lexer Buffer: 00248 00249 lex_pbeg tokp lex_p lex_pend 00250 | | | | 00251 |-----------+--------------+------------| 00252 |<------------>| 00253 token 00254 */ 00255 struct parser_params { 00256 int is_ripper; 00257 NODE *heap; 00258 00259 YYSTYPE *parser_yylval; 00260 VALUE eofp; 00261 00262 NODE *parser_lex_strterm; 00263 enum lex_state_e parser_lex_state; 00264 stack_type parser_cond_stack; 00265 stack_type parser_cmdarg_stack; 00266 int parser_class_nest; 00267 int parser_paren_nest; 00268 int parser_lpar_beg; 00269 int parser_in_single; 00270 int parser_in_def; 00271 int parser_compile_for_eval; 00272 VALUE parser_cur_mid; 00273 int parser_in_defined; 00274 char *parser_tokenbuf; 00275 int parser_tokidx; 00276 int parser_toksiz; 00277 VALUE parser_lex_input; 00278 VALUE parser_lex_lastline; 00279 VALUE parser_lex_nextline; 00280 const char *parser_lex_pbeg; 00281 const char *parser_lex_p; 00282 const char *parser_lex_pend; 00283 int parser_heredoc_end; 00284 int parser_command_start; 00285 NODE *parser_deferred_nodes; 00286 long parser_lex_gets_ptr; 00287 VALUE (*parser_lex_gets)(struct parser_params*,VALUE); 00288 struct local_vars *parser_lvtbl; 00289 int parser_ruby__end__seen; 00290 int line_count; 00291 int has_shebang; 00292 char *parser_ruby_sourcefile; /* current source file */ 00293 int parser_ruby_sourceline; /* current line no. */ 00294 rb_encoding *enc; 00295 rb_encoding *utf8; 00296 00297 int parser_yydebug; 00298 00299 #ifndef RIPPER 00300 /* Ruby core only */ 00301 NODE *parser_eval_tree_begin; 00302 NODE *parser_eval_tree; 00303 VALUE debug_lines; 00304 VALUE coverage; 00305 int nerr; 00306 00307 int parser_token_info_enabled; 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 static int parser_yyerror(struct parser_params*, const char*); 00334 #define yyerror(msg) parser_yyerror(parser, (msg)) 00335 00336 #define lex_strterm (parser->parser_lex_strterm) 00337 #define lex_state (parser->parser_lex_state) 00338 #define cond_stack (parser->parser_cond_stack) 00339 #define cmdarg_stack (parser->parser_cmdarg_stack) 00340 #define class_nest (parser->parser_class_nest) 00341 #define paren_nest (parser->parser_paren_nest) 00342 #define lpar_beg (parser->parser_lpar_beg) 00343 #define in_single (parser->parser_in_single) 00344 #define in_def (parser->parser_in_def) 00345 #define compile_for_eval (parser->parser_compile_for_eval) 00346 #define cur_mid (parser->parser_cur_mid) 00347 #define in_defined (parser->parser_in_defined) 00348 #define tokenbuf (parser->parser_tokenbuf) 00349 #define tokidx (parser->parser_tokidx) 00350 #define toksiz (parser->parser_toksiz) 00351 #define lex_input (parser->parser_lex_input) 00352 #define lex_lastline (parser->parser_lex_lastline) 00353 #define lex_nextline (parser->parser_lex_nextline) 00354 #define lex_pbeg (parser->parser_lex_pbeg) 00355 #define lex_p (parser->parser_lex_p) 00356 #define lex_pend (parser->parser_lex_pend) 00357 #define heredoc_end (parser->parser_heredoc_end) 00358 #define command_start (parser->parser_command_start) 00359 #define deferred_nodes (parser->parser_deferred_nodes) 00360 #define lex_gets_ptr (parser->parser_lex_gets_ptr) 00361 #define lex_gets (parser->parser_lex_gets) 00362 #define lvtbl (parser->parser_lvtbl) 00363 #define ruby__end__seen (parser->parser_ruby__end__seen) 00364 #define ruby_sourceline (parser->parser_ruby_sourceline) 00365 #define ruby_sourcefile (parser->parser_ruby_sourcefile) 00366 #define current_enc (parser->enc) 00367 #define yydebug (parser->parser_yydebug) 00368 #ifdef RIPPER 00369 #else 00370 #define ruby_eval_tree (parser->parser_eval_tree) 00371 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin) 00372 #define ruby_debug_lines (parser->debug_lines) 00373 #define ruby_coverage (parser->coverage) 00374 #endif 00375 00376 #if YYPURE 00377 static int yylex(void*, void*); 00378 #else 00379 static int yylex(void*); 00380 #endif 00381 00382 #ifndef RIPPER 00383 #define yyparse ruby_yyparse 00384 00385 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE); 00386 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3)) 00387 00388 static NODE *cond_gen(struct parser_params*,NODE*); 00389 #define cond(node) cond_gen(parser, (node)) 00390 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*); 00391 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2)) 00392 00393 static NODE *newline_node(NODE*); 00394 static void fixpos(NODE*,NODE*); 00395 00396 static int value_expr_gen(struct parser_params*,NODE*); 00397 static void void_expr_gen(struct parser_params*,NODE*); 00398 static NODE *remove_begin(NODE*); 00399 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node)) 00400 #define void_expr0(node) void_expr_gen(parser, (node)) 00401 #define void_expr(node) void_expr0((node) = remove_begin(node)) 00402 static void void_stmts_gen(struct parser_params*,NODE*); 00403 #define void_stmts(node) void_stmts_gen(parser, (node)) 00404 static void reduce_nodes_gen(struct parser_params*,NODE**); 00405 #define reduce_nodes(n) reduce_nodes_gen(parser,(n)) 00406 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*); 00407 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2)) 00408 00409 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*); 00410 #define block_append(h,t) block_append_gen(parser,(h),(t)) 00411 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*); 00412 #define list_append(l,i) list_append_gen(parser,(l),(i)) 00413 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*); 00414 #define list_concat(h,t) list_concat_gen(parser,(h),(t)) 00415 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*); 00416 #define arg_append(h,t) arg_append_gen(parser,(h),(t)) 00417 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*); 00418 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t)) 00419 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*); 00420 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t)) 00421 static int literal_concat0(struct parser_params *, VALUE, VALUE); 00422 static NODE *new_evstr_gen(struct parser_params*,NODE*); 00423 #define new_evstr(n) new_evstr_gen(parser,(n)) 00424 static NODE *evstr2dstr_gen(struct parser_params*,NODE*); 00425 #define evstr2dstr(n) evstr2dstr_gen(parser,(n)) 00426 static NODE *splat_array(NODE*); 00427 00428 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*); 00429 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1)) 00430 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID); 00431 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id)) 00432 00433 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID); 00434 #define new_args(f,o,r,p,b) new_args_gen(parser, (f),(o),(r),(p),(b)) 00435 00436 static NODE *negate_lit(NODE*); 00437 static NODE *ret_args_gen(struct parser_params*,NODE*); 00438 #define ret_args(node) ret_args_gen(parser, (node)) 00439 static NODE *arg_blk_pass(NODE*,NODE*); 00440 static NODE *new_yield_gen(struct parser_params*,NODE*); 00441 #define new_yield(node) new_yield_gen(parser, (node)) 00442 00443 static NODE *gettable_gen(struct parser_params*,ID); 00444 #define gettable(id) gettable_gen(parser,(id)) 00445 static NODE *assignable_gen(struct parser_params*,ID,NODE*); 00446 #define assignable(id,node) assignable_gen(parser, (id), (node)) 00447 00448 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*); 00449 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2)) 00450 static NODE *attrset_gen(struct parser_params*,NODE*,ID); 00451 #define attrset(node,id) attrset_gen(parser, (node), (id)) 00452 00453 static void rb_backref_error_gen(struct parser_params*,NODE*); 00454 #define rb_backref_error(n) rb_backref_error_gen(parser,(n)) 00455 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*); 00456 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2)) 00457 00458 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*); 00459 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2)) 00460 00461 static ID *local_tbl_gen(struct parser_params*); 00462 #define local_tbl() local_tbl_gen(parser) 00463 00464 static void fixup_nodes(NODE **); 00465 00466 static VALUE reg_compile_gen(struct parser_params*, VALUE, int); 00467 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options)) 00468 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int); 00469 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options)) 00470 static int reg_fragment_check_gen(struct parser_params*, VALUE, int); 00471 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options)) 00472 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match); 00473 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match)) 00474 00475 #define get_id(id) (id) 00476 #define get_value(val) (val) 00477 #else 00478 #define remove_begin(node) (node) 00479 #define rb_dvar_defined(id) 0 00480 #define rb_local_defined(id) 0 00481 static ID ripper_get_id(VALUE); 00482 #define get_id(id) ripper_get_id(id) 00483 static VALUE ripper_get_value(VALUE); 00484 #define get_value(val) ripper_get_value(val) 00485 static VALUE assignable_gen(struct parser_params*,VALUE); 00486 #define assignable(lhs,node) assignable_gen(parser, (lhs)) 00487 static int id_is_var_gen(struct parser_params *parser, ID id); 00488 #define id_is_var(id) id_is_var_gen(parser, (id)) 00489 #endif /* !RIPPER */ 00490 00491 static ID formal_argument_gen(struct parser_params*, ID); 00492 #define formal_argument(id) formal_argument_gen(parser, (id)) 00493 static ID shadowing_lvar_gen(struct parser_params*,ID); 00494 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name)) 00495 static void new_bv_gen(struct parser_params*,ID); 00496 #define new_bv(id) new_bv_gen(parser, (id)) 00497 00498 static void local_push_gen(struct parser_params*,int); 00499 #define local_push(top) local_push_gen(parser,(top)) 00500 static void local_pop_gen(struct parser_params*); 00501 #define local_pop() local_pop_gen(parser) 00502 static int local_var_gen(struct parser_params*, ID); 00503 #define local_var(id) local_var_gen(parser, (id)); 00504 static int arg_var_gen(struct parser_params*, ID); 00505 #define arg_var(id) arg_var_gen(parser, (id)) 00506 static int local_id_gen(struct parser_params*, ID); 00507 #define local_id(id) local_id_gen(parser, (id)) 00508 static ID internal_id_gen(struct parser_params*); 00509 #define internal_id() internal_id_gen(parser) 00510 00511 static const struct vtable *dyna_push_gen(struct parser_params *); 00512 #define dyna_push() dyna_push_gen(parser) 00513 static void dyna_pop_gen(struct parser_params*, const struct vtable *); 00514 #define dyna_pop(node) dyna_pop_gen(parser, (node)) 00515 static int dyna_in_block_gen(struct parser_params*); 00516 #define dyna_in_block() dyna_in_block_gen(parser) 00517 #define dyna_var(id) local_var(id) 00518 static int dvar_defined_gen(struct parser_params*,ID,int); 00519 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0) 00520 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1) 00521 static int dvar_curr_gen(struct parser_params*,ID); 00522 #define dvar_curr(id) dvar_curr_gen(parser, (id)) 00523 00524 static int lvar_defined_gen(struct parser_params*, ID); 00525 #define lvar_defined(id) lvar_defined_gen(parser, (id)) 00526 00527 #define RE_OPTION_ONCE (1<<16) 00528 #define RE_OPTION_ENCODING_SHIFT 8 00529 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT) 00530 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff) 00531 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE) 00532 #define RE_OPTION_MASK 0xff 00533 #define RE_OPTION_ARG_ENCODING_NONE 32 00534 00535 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */ 00536 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */ 00537 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1)) 00538 #define nd_func u1.id 00539 #if SIZEOF_SHORT == 2 00540 #define nd_term(node) ((signed short)(node)->u2.id) 00541 #else 00542 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2) 00543 #endif 00544 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2) 00545 #define nd_nest u3.cnt 00546 00547 /****** Ripper *******/ 00548 00549 #ifdef RIPPER 00550 #define RIPPER_VERSION "0.1.0" 00551 00552 #include "eventids1.c" 00553 #include "eventids2.c" 00554 static ID ripper_id_gets; 00555 00556 static VALUE ripper_dispatch0(struct parser_params*,ID); 00557 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE); 00558 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE); 00559 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE); 00560 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE); 00561 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE); 00562 00563 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n)) 00564 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a)) 00565 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b)) 00566 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c)) 00567 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d)) 00568 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e)) 00569 00570 #define yyparse ripper_yyparse 00571 00572 #define ripper_intern(s) ID2SYM(rb_intern(s)) 00573 static VALUE ripper_id2sym(ID); 00574 #ifdef __GNUC__ 00575 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \ 00576 ID2SYM(id) : ripper_id2sym(id)) 00577 #endif 00578 00579 #define arg_new() dispatch0(args_new) 00580 #define arg_add(l,a) dispatch2(args_add, (l), (a)) 00581 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a)) 00582 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b)) 00583 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b))) 00584 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v)) 00585 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b)) 00586 00587 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a)) 00588 #define mrhs_new() dispatch0(mrhs_new) 00589 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a)) 00590 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a)) 00591 00592 #define mlhs_new() dispatch0(mlhs_new) 00593 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a)) 00594 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a)) 00595 00596 #define params_new(pars, opts, rest, pars2, blk) \ 00597 dispatch5(params, (pars), (opts), (rest), (pars2), (blk)) 00598 00599 #define blockvar_new(p,v) dispatch2(block_var, (p), (v)) 00600 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a)) 00601 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a)) 00602 00603 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a))) 00604 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a)) 00605 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b)) 00606 00607 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x)) 00608 00609 #define FIXME 0 00610 00611 #endif /* RIPPER */ 00612 00613 #ifndef RIPPER 00614 # define ifndef_ripper(x) (x) 00615 #else 00616 # define ifndef_ripper(x) 00617 #endif 00618 00619 #ifndef RIPPER 00620 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt)) 00621 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00622 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00623 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt)) 00624 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00625 #else 00626 # define rb_warn0(fmt) ripper_warn0(parser, (fmt)) 00627 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a)) 00628 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a)) 00629 # define rb_warning0(fmt) ripper_warning0(parser, (fmt)) 00630 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a)) 00631 static void ripper_warn0(struct parser_params*, const char*); 00632 static void ripper_warnI(struct parser_params*, const char*, int); 00633 #if 0 00634 static void ripper_warnS(struct parser_params*, const char*, const char*); 00635 #endif 00636 static void ripper_warning0(struct parser_params*, const char*); 00637 static void ripper_warningS(struct parser_params*, const char*, const char*); 00638 #endif 00639 00640 #ifdef RIPPER 00641 static void ripper_compile_error(struct parser_params*, const char *fmt, ...); 00642 # define rb_compile_error ripper_compile_error 00643 # define compile_error ripper_compile_error 00644 # define PARSER_ARG parser, 00645 #else 00646 # define rb_compile_error rb_compile_error_with_enc 00647 # define compile_error parser->nerr++,rb_compile_error_with_enc 00648 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc, 00649 #endif 00650 00651 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150, 00652 for instance). This is too low for Ruby to parse some files, such as 00653 date/format.rb, therefore bump the value up to at least Bison's default. */ 00654 #ifdef OLD_YACC 00655 #ifndef YYMAXDEPTH 00656 #define YYMAXDEPTH 10000 00657 #endif 00658 #endif 00659 00660 #ifndef RIPPER 00661 static void token_info_push(struct parser_params*, const char *token); 00662 static void token_info_pop(struct parser_params*, const char *token); 00663 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0) 00664 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0) 00665 #else 00666 #define token_info_push(token) /* nothing */ 00667 #define token_info_pop(token) /* nothing */ 00668 #endif 00669 00670 /* Line 371 of yacc.c */ 00671 #line 672 "parse.c" 00672 00673 # ifndef YY_NULL 00674 # if defined __cplusplus && 201103L <= __cplusplus 00675 # define YY_NULL nullptr 00676 # else 00677 # define YY_NULL 0 00678 # endif 00679 # endif 00680 00681 /* Enabling verbose error messages. */ 00682 #ifdef YYERROR_VERBOSE 00683 # undef YYERROR_VERBOSE 00684 # define YYERROR_VERBOSE 1 00685 #else 00686 # define YYERROR_VERBOSE 0 00687 #endif 00688 00689 00690 /* Enabling traces. */ 00691 #ifndef YYDEBUG 00692 # define YYDEBUG 1 00693 #endif 00694 #if YYDEBUG 00695 #ifndef yydebug 00696 extern int yydebug; 00697 #endif 00698 #endif 00699 00700 /* Tokens. */ 00701 #ifndef YYTOKENTYPE 00702 # define YYTOKENTYPE 00703 /* Put the tokens into the symbol table, so that GDB and other debuggers 00704 know about them. */ 00705 enum yytokentype { 00706 keyword_class = 258, 00707 keyword_module = 259, 00708 keyword_def = 260, 00709 keyword_undef = 261, 00710 keyword_begin = 262, 00711 keyword_rescue = 263, 00712 keyword_ensure = 264, 00713 keyword_end = 265, 00714 keyword_if = 266, 00715 keyword_unless = 267, 00716 keyword_then = 268, 00717 keyword_elsif = 269, 00718 keyword_else = 270, 00719 keyword_case = 271, 00720 keyword_when = 272, 00721 keyword_while = 273, 00722 keyword_until = 274, 00723 keyword_for = 275, 00724 keyword_break = 276, 00725 keyword_next = 277, 00726 keyword_redo = 278, 00727 keyword_retry = 279, 00728 keyword_in = 280, 00729 keyword_do = 281, 00730 keyword_do_cond = 282, 00731 keyword_do_block = 283, 00732 keyword_do_LAMBDA = 284, 00733 keyword_return = 285, 00734 keyword_yield = 286, 00735 keyword_super = 287, 00736 keyword_self = 288, 00737 keyword_nil = 289, 00738 keyword_true = 290, 00739 keyword_false = 291, 00740 keyword_and = 292, 00741 keyword_or = 293, 00742 keyword_not = 294, 00743 modifier_if = 295, 00744 modifier_unless = 296, 00745 modifier_while = 297, 00746 modifier_until = 298, 00747 modifier_rescue = 299, 00748 keyword_alias = 300, 00749 keyword_defined = 301, 00750 keyword_BEGIN = 302, 00751 keyword_END = 303, 00752 keyword__LINE__ = 304, 00753 keyword__FILE__ = 305, 00754 keyword__ENCODING__ = 306, 00755 tIDENTIFIER = 307, 00756 tFID = 308, 00757 tGVAR = 309, 00758 tIVAR = 310, 00759 tCONSTANT = 311, 00760 tCVAR = 312, 00761 tLABEL = 313, 00762 tINTEGER = 314, 00763 tFLOAT = 315, 00764 tSTRING_CONTENT = 316, 00765 tCHAR = 317, 00766 tNTH_REF = 318, 00767 tBACK_REF = 319, 00768 tREGEXP_END = 320, 00769 tUPLUS = 321, 00770 tUMINUS = 322, 00771 tPOW = 323, 00772 tCMP = 324, 00773 tEQ = 325, 00774 tEQQ = 326, 00775 tNEQ = 327, 00776 tGEQ = 328, 00777 tLEQ = 329, 00778 tANDOP = 330, 00779 tOROP = 331, 00780 tMATCH = 332, 00781 tNMATCH = 333, 00782 tDOT2 = 334, 00783 tDOT3 = 335, 00784 tAREF = 336, 00785 tASET = 337, 00786 tLSHFT = 338, 00787 tRSHFT = 339, 00788 tCOLON2 = 340, 00789 tCOLON3 = 341, 00790 tOP_ASGN = 342, 00791 tASSOC = 343, 00792 tLPAREN = 344, 00793 tLPAREN_ARG = 345, 00794 tRPAREN = 346, 00795 tLBRACK = 347, 00796 tLBRACE = 348, 00797 tLBRACE_ARG = 349, 00798 tSTAR = 350, 00799 tAMPER = 351, 00800 tLAMBDA = 352, 00801 tSYMBEG = 353, 00802 tSTRING_BEG = 354, 00803 tXSTRING_BEG = 355, 00804 tREGEXP_BEG = 356, 00805 tWORDS_BEG = 357, 00806 tQWORDS_BEG = 358, 00807 tSTRING_DBEG = 359, 00808 tSTRING_DVAR = 360, 00809 tSTRING_END = 361, 00810 tLAMBEG = 362, 00811 tLOWEST = 363, 00812 tUMINUS_NUM = 364, 00813 idNULL = 365, 00814 idRespond_to = 366, 00815 idIFUNC = 367, 00816 idCFUNC = 368, 00817 id_core_set_method_alias = 369, 00818 id_core_set_variable_alias = 370, 00819 id_core_undef_method = 371, 00820 id_core_define_method = 372, 00821 id_core_define_singleton_method = 373, 00822 id_core_set_postexe = 374, 00823 tLAST_TOKEN = 375 00824 }; 00825 #endif 00826 00827 00828 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 00829 typedef union YYSTYPE 00830 { 00831 /* Line 387 of yacc.c */ 00832 #line 620 "ripper.y" 00833 00834 VALUE val; 00835 NODE *node; 00836 ID id; 00837 int num; 00838 const struct vtable *vars; 00839 00840 00841 /* Line 387 of yacc.c */ 00842 #line 841 "parse.c" 00843 } YYSTYPE; 00844 # define YYSTYPE_IS_TRIVIAL 1 00845 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 00846 # define YYSTYPE_IS_DECLARED 1 00847 #endif 00848 00849 00850 #ifdef YYPARSE_PARAM 00851 #if defined __STDC__ || defined __cplusplus 00852 int yyparse (void *YYPARSE_PARAM); 00853 #else 00854 int yyparse (); 00855 #endif 00856 #else /* ! YYPARSE_PARAM */ 00857 #if defined __STDC__ || defined __cplusplus 00858 int yyparse (struct parser_params *parser); 00859 #else 00860 int yyparse (); 00861 #endif 00862 #endif /* ! YYPARSE_PARAM */ 00863 00864 00865 00866 /* Copy the second part of user declarations. */ 00867 00868 /* Line 390 of yacc.c */ 00869 #line 868 "parse.c" 00870 00871 #ifdef short 00872 # undef short 00873 #endif 00874 00875 #ifdef YYTYPE_UINT8 00876 typedef YYTYPE_UINT8 yytype_uint8; 00877 #else 00878 typedef unsigned char yytype_uint8; 00879 #endif 00880 00881 #ifdef YYTYPE_INT8 00882 typedef YYTYPE_INT8 yytype_int8; 00883 #elif (defined __STDC__ || defined __C99__FUNC__ \ 00884 || defined __cplusplus || defined _MSC_VER) 00885 typedef signed char yytype_int8; 00886 #else 00887 typedef short int yytype_int8; 00888 #endif 00889 00890 #ifdef YYTYPE_UINT16 00891 typedef YYTYPE_UINT16 yytype_uint16; 00892 #else 00893 typedef unsigned short int yytype_uint16; 00894 #endif 00895 00896 #ifdef YYTYPE_INT16 00897 typedef YYTYPE_INT16 yytype_int16; 00898 #else 00899 typedef short int yytype_int16; 00900 #endif 00901 00902 #ifndef YYSIZE_T 00903 # ifdef __SIZE_TYPE__ 00904 # define YYSIZE_T __SIZE_TYPE__ 00905 # elif defined size_t 00906 # define YYSIZE_T size_t 00907 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 00908 || defined __cplusplus || defined _MSC_VER) 00909 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 00910 # define YYSIZE_T size_t 00911 # else 00912 # define YYSIZE_T unsigned int 00913 # endif 00914 #endif 00915 00916 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 00917 00918 #ifndef YY_ 00919 # if defined YYENABLE_NLS && YYENABLE_NLS 00920 # if ENABLE_NLS 00921 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 00922 # define YY_(Msgid) dgettext ("bison-runtime", Msgid) 00923 # endif 00924 # endif 00925 # ifndef YY_ 00926 # define YY_(Msgid) Msgid 00927 # endif 00928 #endif 00929 00930 #ifndef __attribute__ 00931 /* This feature is available in gcc versions 2.5 and later. */ 00932 # if (! defined __GNUC__ || __GNUC__ < 2 \ 00933 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5)) 00934 # define __attribute__(Spec) /* empty */ 00935 # endif 00936 #endif 00937 00938 /* Suppress unused-variable warnings by "using" E. */ 00939 #if ! defined lint || defined __GNUC__ 00940 # define YYUSE(E) ((void) (E)) 00941 #else 00942 # define YYUSE(E) /* empty */ 00943 #endif 00944 00945 00946 /* Identity function, used to suppress warnings about constant conditions. */ 00947 #ifndef lint 00948 # define YYID(N) (N) 00949 #else 00950 #if (defined __STDC__ || defined __C99__FUNC__ \ 00951 || defined __cplusplus || defined _MSC_VER) 00952 static int 00953 YYID (int yyi) 00954 #else 00955 static int 00956 YYID (yyi) 00957 int yyi; 00958 #endif 00959 { 00960 return yyi; 00961 } 00962 #endif 00963 00964 #if ! defined yyoverflow || YYERROR_VERBOSE 00965 00966 /* The parser invokes alloca or malloc; define the necessary symbols. */ 00967 00968 # ifdef YYSTACK_USE_ALLOCA 00969 # if YYSTACK_USE_ALLOCA 00970 # ifdef __GNUC__ 00971 # define YYSTACK_ALLOC __builtin_alloca 00972 # elif defined __BUILTIN_VA_ARG_INCR 00973 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 00974 # elif defined _AIX 00975 # define YYSTACK_ALLOC __alloca 00976 # elif defined _MSC_VER 00977 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 00978 # define alloca _alloca 00979 # else 00980 # define YYSTACK_ALLOC alloca 00981 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 00982 || defined __cplusplus || defined _MSC_VER) 00983 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 00984 /* Use EXIT_SUCCESS as a witness for stdlib.h. */ 00985 # ifndef EXIT_SUCCESS 00986 # define EXIT_SUCCESS 0 00987 # endif 00988 # endif 00989 # endif 00990 # endif 00991 # endif 00992 00993 # ifdef YYSTACK_ALLOC 00994 /* Pacify GCC's `empty if-body' warning. */ 00995 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 00996 # ifndef YYSTACK_ALLOC_MAXIMUM 00997 /* The OS might guarantee only one guard page at the bottom of the stack, 00998 and a page size can be as small as 4096 bytes. So we cannot safely 00999 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 01000 to allow for a few compiler-allocated temporary stack slots. */ 01001 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 01002 # endif 01003 # else 01004 # define YYSTACK_ALLOC YYMALLOC 01005 # define YYSTACK_FREE YYFREE 01006 # ifndef YYSTACK_ALLOC_MAXIMUM 01007 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 01008 # endif 01009 # if (defined __cplusplus && ! defined EXIT_SUCCESS \ 01010 && ! ((defined YYMALLOC || defined malloc) \ 01011 && (defined YYFREE || defined free))) 01012 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 01013 # ifndef EXIT_SUCCESS 01014 # define EXIT_SUCCESS 0 01015 # endif 01016 # endif 01017 # ifndef YYMALLOC 01018 # define YYMALLOC malloc 01019 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 01020 || defined __cplusplus || defined _MSC_VER) 01021 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 01022 # endif 01023 # endif 01024 # ifndef YYFREE 01025 # define YYFREE free 01026 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 01027 || defined __cplusplus || defined _MSC_VER) 01028 void free (void *); /* INFRINGES ON USER NAME SPACE */ 01029 # endif 01030 # endif 01031 # endif 01032 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 01033 01034 01035 #if (! defined yyoverflow \ 01036 && (! defined __cplusplus \ 01037 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 01038 01039 /* A type that is properly aligned for any stack member. */ 01040 union yyalloc 01041 { 01042 yytype_int16 yyss_alloc; 01043 YYSTYPE yyvs_alloc; 01044 }; 01045 01046 /* The size of the maximum gap between one aligned stack and the next. */ 01047 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 01048 01049 /* The size of an array large to enough to hold all stacks, each with 01050 N elements. */ 01051 # define YYSTACK_BYTES(N) \ 01052 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 01053 + YYSTACK_GAP_MAXIMUM) 01054 01055 # define YYCOPY_NEEDED 1 01056 01057 /* Relocate STACK from its old location to the new one. The 01058 local variables YYSIZE and YYSTACKSIZE give the old and new number of 01059 elements in the stack, and YYPTR gives the new location of the 01060 stack. Advance YYPTR to a properly aligned location for the next 01061 stack. */ 01062 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 01063 do \ 01064 { \ 01065 YYSIZE_T yynewbytes; \ 01066 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 01067 Stack = &yyptr->Stack_alloc; \ 01068 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 01069 yyptr += yynewbytes / sizeof (*yyptr); \ 01070 } \ 01071 while (YYID (0)) 01072 01073 #endif 01074 01075 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED 01076 /* Copy COUNT objects from SRC to DST. The source and destination do 01077 not overlap. */ 01078 # ifndef YYCOPY 01079 # if defined __GNUC__ && 1 < __GNUC__ 01080 # define YYCOPY(Dst, Src, Count) \ 01081 __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src))) 01082 # else 01083 # define YYCOPY(Dst, Src, Count) \ 01084 do \ 01085 { \ 01086 YYSIZE_T yyi; \ 01087 for (yyi = 0; yyi < (Count); yyi++) \ 01088 (Dst)[yyi] = (Src)[yyi]; \ 01089 } \ 01090 while (YYID (0)) 01091 # endif 01092 # endif 01093 #endif /* !YYCOPY_NEEDED */ 01094 01095 /* YYFINAL -- State number of the termination state. */ 01096 #define YYFINAL 3 01097 /* YYLAST -- Last index in YYTABLE. */ 01098 #define YYLAST 10748 01099 01100 /* YYNTOKENS -- Number of terminals. */ 01101 #define YYNTOKENS 148 01102 /* YYNNTS -- Number of nonterminals. */ 01103 #define YYNNTS 174 01104 /* YYNRULES -- Number of rules. */ 01105 #define YYNRULES 573 01106 /* YYNRULES -- Number of states. */ 01107 #define YYNSTATES 991 01108 01109 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 01110 #define YYUNDEFTOK 2 01111 #define YYMAXUTOK 375 01112 01113 #define YYTRANSLATE(YYX) \ 01114 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 01115 01116 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 01117 static const yytype_uint8 yytranslate[] = 01118 { 01119 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01120 147, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01121 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01122 2, 2, 146, 123, 2, 2, 2, 121, 116, 2, 01123 142, 143, 119, 117, 140, 118, 139, 120, 2, 2, 01124 2, 2, 2, 2, 2, 2, 2, 2, 111, 145, 01125 113, 109, 112, 110, 2, 2, 2, 2, 2, 2, 01126 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01127 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01128 2, 138, 2, 144, 115, 2, 141, 2, 2, 2, 01129 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01130 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01131 2, 2, 2, 136, 114, 137, 124, 2, 2, 2, 01132 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01133 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01134 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01135 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01136 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01137 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01138 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01139 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01140 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01141 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01142 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01143 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01144 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 01145 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 01146 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 01147 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 01148 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 01149 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 01150 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 01151 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 01152 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 01153 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 01154 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 01155 105, 106, 107, 108, 122, 125, 126, 127, 128, 129, 01156 130, 131, 132, 133, 134, 135 01157 }; 01158 01159 #if YYDEBUG 01160 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 01161 YYRHS. */ 01162 static const yytype_uint16 yyprhs[] = 01163 { 01164 0, 0, 3, 4, 7, 10, 12, 14, 18, 21, 01165 23, 24, 30, 35, 38, 40, 42, 46, 49, 50, 01166 55, 59, 63, 67, 70, 74, 78, 82, 86, 90, 01167 95, 97, 101, 105, 112, 118, 124, 130, 136, 140, 01168 144, 148, 152, 154, 158, 162, 164, 168, 172, 176, 01169 179, 181, 183, 185, 187, 189, 194, 199, 200, 206, 01170 209, 213, 218, 224, 229, 235, 238, 241, 244, 247, 01171 250, 252, 256, 258, 262, 264, 267, 271, 277, 280, 01172 285, 288, 293, 295, 299, 301, 305, 308, 312, 314, 01173 318, 320, 322, 327, 331, 335, 339, 343, 346, 348, 01174 350, 352, 357, 361, 365, 369, 373, 376, 378, 380, 01175 382, 385, 387, 391, 393, 395, 397, 399, 401, 403, 01176 405, 407, 409, 411, 412, 417, 419, 421, 423, 425, 01177 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 01178 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 01179 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 01180 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 01181 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 01182 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 01183 547, 549, 551, 553, 555, 557, 561, 567, 571, 577, 01184 584, 590, 596, 602, 608, 613, 617, 621, 625, 629, 01185 633, 637, 641, 645, 649, 654, 659, 662, 665, 669, 01186 673, 677, 681, 685, 689, 693, 697, 701, 705, 709, 01187 713, 717, 720, 723, 727, 731, 735, 739, 740, 745, 01188 752, 754, 756, 758, 761, 766, 769, 773, 775, 777, 01189 779, 781, 784, 789, 792, 794, 797, 800, 805, 807, 01190 808, 811, 814, 817, 819, 821, 824, 828, 833, 837, 01191 842, 845, 847, 849, 851, 853, 855, 857, 859, 861, 01192 863, 864, 869, 870, 875, 879, 883, 886, 890, 894, 01193 896, 901, 905, 907, 908, 915, 920, 924, 927, 929, 01194 932, 935, 942, 949, 950, 951, 959, 960, 961, 969, 01195 975, 980, 981, 982, 992, 993, 1000, 1001, 1002, 1011, 01196 1012, 1018, 1019, 1026, 1027, 1028, 1038, 1040, 1042, 1044, 01197 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 01198 1066, 1068, 1070, 1072, 1074, 1077, 1079, 1081, 1083, 1089, 01199 1091, 1094, 1096, 1098, 1100, 1104, 1106, 1110, 1112, 1117, 01200 1124, 1128, 1134, 1137, 1142, 1144, 1148, 1155, 1164, 1169, 01201 1176, 1181, 1184, 1191, 1194, 1199, 1206, 1209, 1214, 1217, 01202 1222, 1224, 1226, 1228, 1232, 1234, 1239, 1241, 1244, 1246, 01203 1250, 1252, 1254, 1255, 1256, 1261, 1266, 1268, 1272, 1276, 01204 1277, 1283, 1286, 1291, 1296, 1299, 1304, 1309, 1313, 1317, 01205 1321, 1324, 1326, 1331, 1332, 1338, 1339, 1345, 1351, 1353, 01206 1355, 1362, 1364, 1366, 1368, 1370, 1373, 1375, 1378, 1380, 01207 1382, 1384, 1386, 1388, 1390, 1392, 1395, 1399, 1403, 1407, 01208 1411, 1415, 1416, 1420, 1422, 1425, 1429, 1433, 1434, 1438, 01209 1439, 1442, 1443, 1446, 1447, 1450, 1452, 1453, 1457, 1458, 01210 1459, 1465, 1467, 1469, 1471, 1473, 1476, 1478, 1480, 1482, 01211 1484, 1488, 1490, 1492, 1495, 1498, 1500, 1502, 1504, 1506, 01212 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526, 01213 1528, 1530, 1532, 1534, 1536, 1537, 1542, 1545, 1549, 1552, 01214 1559, 1568, 1573, 1580, 1585, 1592, 1595, 1600, 1607, 1610, 01215 1615, 1618, 1623, 1625, 1626, 1628, 1630, 1632, 1634, 1636, 01216 1638, 1640, 1644, 1646, 1650, 1654, 1658, 1660, 1664, 1666, 01217 1670, 1672, 1674, 1677, 1679, 1681, 1683, 1686, 1689, 1691, 01218 1693, 1694, 1699, 1701, 1704, 1706, 1710, 1714, 1717, 1719, 01219 1721, 1723, 1725, 1727, 1729, 1731, 1733, 1735, 1737, 1739, 01220 1741, 1742, 1744, 1745, 1747, 1750, 1753, 1754, 1756, 1758, 01221 1760, 1762, 1764, 1767 01222 }; 01223 01224 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 01225 static const yytype_int16 yyrhs[] = 01226 { 01227 149, 0, -1, -1, 150, 151, -1, 152, 314, -1, 01228 321, -1, 153, -1, 152, 320, 153, -1, 1, 153, 01229 -1, 158, -1, -1, 47, 154, 136, 151, 137, -1, 01230 156, 256, 231, 259, -1, 157, 314, -1, 321, -1, 01231 158, -1, 157, 320, 158, -1, 1, 158, -1, -1, 01232 45, 180, 159, 180, -1, 45, 54, 54, -1, 45, 01233 54, 64, -1, 45, 54, 63, -1, 6, 181, -1, 01234 158, 40, 162, -1, 158, 41, 162, -1, 158, 42, 01235 162, -1, 158, 43, 162, -1, 158, 44, 158, -1, 01236 48, 136, 156, 137, -1, 160, -1, 168, 109, 163, 01237 -1, 286, 87, 163, -1, 216, 138, 191, 317, 87, 01238 163, -1, 216, 139, 52, 87, 163, -1, 216, 139, 01239 56, 87, 163, -1, 216, 85, 56, 87, 163, -1, 01240 216, 85, 52, 87, 163, -1, 287, 87, 163, -1, 01241 175, 109, 198, -1, 168, 109, 187, -1, 168, 109, 01242 198, -1, 161, -1, 175, 109, 163, -1, 175, 109, 01243 160, -1, 163, -1, 161, 37, 161, -1, 161, 38, 01244 161, -1, 39, 315, 161, -1, 123, 163, -1, 185, 01245 -1, 161, -1, 167, -1, 164, -1, 249, -1, 249, 01246 139, 311, 193, -1, 249, 85, 311, 193, -1, -1, 01247 94, 166, 237, 156, 137, -1, 310, 193, -1, 310, 01248 193, 165, -1, 216, 139, 311, 193, -1, 216, 139, 01249 311, 193, 165, -1, 216, 85, 311, 193, -1, 216, 01250 85, 311, 193, 165, -1, 32, 193, -1, 31, 193, 01251 -1, 30, 192, -1, 21, 192, -1, 22, 192, -1, 01252 170, -1, 89, 169, 316, -1, 170, -1, 89, 169, 01253 316, -1, 172, -1, 172, 171, -1, 172, 95, 174, 01254 -1, 172, 95, 174, 140, 173, -1, 172, 95, -1, 01255 172, 95, 140, 173, -1, 95, 174, -1, 95, 174, 01256 140, 173, -1, 95, -1, 95, 140, 173, -1, 174, 01257 -1, 89, 169, 316, -1, 171, 140, -1, 172, 171, 01258 140, -1, 171, -1, 173, 140, 171, -1, 283, -1, 01259 284, -1, 216, 138, 191, 317, -1, 216, 139, 52, 01260 -1, 216, 85, 52, -1, 216, 139, 56, -1, 216, 01261 85, 56, -1, 86, 56, -1, 287, -1, 283, -1, 01262 284, -1, 216, 138, 191, 317, -1, 216, 139, 52, 01263 -1, 216, 85, 52, -1, 216, 139, 56, -1, 216, 01264 85, 56, -1, 86, 56, -1, 287, -1, 52, -1, 01265 56, -1, 86, 176, -1, 176, -1, 216, 85, 176, 01266 -1, 52, -1, 56, -1, 53, -1, 183, -1, 184, 01267 -1, 178, -1, 279, -1, 179, -1, 281, -1, 180, 01268 -1, -1, 181, 140, 182, 180, -1, 114, -1, 115, 01269 -1, 116, -1, 69, -1, 70, -1, 71, -1, 77, 01270 -1, 78, -1, 112, -1, 73, -1, 113, -1, 74, 01271 -1, 72, -1, 83, -1, 84, -1, 117, -1, 118, 01272 -1, 119, -1, 95, -1, 120, -1, 121, -1, 68, 01273 -1, 123, -1, 124, -1, 66, -1, 67, -1, 81, 01274 -1, 82, -1, 141, -1, 49, -1, 50, -1, 51, 01275 -1, 47, -1, 48, -1, 45, -1, 37, -1, 7, 01276 -1, 21, -1, 16, -1, 3, -1, 5, -1, 46, 01277 -1, 26, -1, 15, -1, 14, -1, 10, -1, 9, 01278 -1, 36, -1, 20, -1, 25, -1, 4, -1, 22, 01279 -1, 34, -1, 39, -1, 38, -1, 23, -1, 8, 01280 -1, 24, -1, 30, -1, 33, -1, 32, -1, 13, 01281 -1, 35, -1, 6, -1, 17, -1, 31, -1, 11, 01282 -1, 12, -1, 18, -1, 19, -1, 175, 109, 185, 01283 -1, 175, 109, 185, 44, 185, -1, 286, 87, 185, 01284 -1, 286, 87, 185, 44, 185, -1, 216, 138, 191, 01285 317, 87, 185, -1, 216, 139, 52, 87, 185, -1, 01286 216, 139, 56, 87, 185, -1, 216, 85, 52, 87, 01287 185, -1, 216, 85, 56, 87, 185, -1, 86, 56, 01288 87, 185, -1, 287, 87, 185, -1, 185, 79, 185, 01289 -1, 185, 80, 185, -1, 185, 117, 185, -1, 185, 01290 118, 185, -1, 185, 119, 185, -1, 185, 120, 185, 01291 -1, 185, 121, 185, -1, 185, 68, 185, -1, 122, 01292 59, 68, 185, -1, 122, 60, 68, 185, -1, 66, 01293 185, -1, 67, 185, -1, 185, 114, 185, -1, 185, 01294 115, 185, -1, 185, 116, 185, -1, 185, 69, 185, 01295 -1, 185, 112, 185, -1, 185, 73, 185, -1, 185, 01296 113, 185, -1, 185, 74, 185, -1, 185, 70, 185, 01297 -1, 185, 71, 185, -1, 185, 72, 185, -1, 185, 01298 77, 185, -1, 185, 78, 185, -1, 123, 185, -1, 01299 124, 185, -1, 185, 83, 185, -1, 185, 84, 185, 01300 -1, 185, 75, 185, -1, 185, 76, 185, -1, -1, 01301 46, 315, 186, 185, -1, 185, 110, 185, 315, 111, 01302 185, -1, 199, -1, 185, -1, 321, -1, 197, 318, 01303 -1, 197, 140, 308, 318, -1, 308, 318, -1, 142, 01304 191, 316, -1, 321, -1, 189, -1, 321, -1, 192, 01305 -1, 197, 140, -1, 197, 140, 308, 140, -1, 308, 01306 140, -1, 167, -1, 197, 196, -1, 308, 196, -1, 01307 197, 140, 308, 196, -1, 195, -1, -1, 194, 192, 01308 -1, 96, 187, -1, 140, 195, -1, 321, -1, 187, 01309 -1, 95, 187, -1, 197, 140, 187, -1, 197, 140, 01310 95, 187, -1, 197, 140, 187, -1, 197, 140, 95, 01311 187, -1, 95, 187, -1, 260, -1, 261, -1, 264, 01312 -1, 265, -1, 266, -1, 269, -1, 285, -1, 287, 01313 -1, 53, -1, -1, 217, 200, 155, 227, -1, -1, 01314 90, 161, 201, 316, -1, 89, 156, 143, -1, 216, 01315 85, 56, -1, 86, 56, -1, 92, 188, 144, -1, 01316 93, 307, 137, -1, 30, -1, 31, 142, 192, 316, 01317 -1, 31, 142, 316, -1, 31, -1, -1, 46, 315, 01318 142, 202, 161, 316, -1, 39, 142, 161, 316, -1, 01319 39, 142, 316, -1, 310, 251, -1, 250, -1, 250, 01320 251, -1, 97, 242, -1, 218, 162, 228, 156, 230, 01321 227, -1, 219, 162, 228, 156, 231, 227, -1, -1, 01322 -1, 220, 203, 162, 229, 204, 156, 227, -1, -1, 01323 -1, 221, 205, 162, 229, 206, 156, 227, -1, 222, 01324 162, 314, 254, 227, -1, 222, 314, 254, 227, -1, 01325 -1, -1, 223, 232, 25, 207, 162, 229, 208, 156, 01326 227, -1, -1, 224, 177, 288, 209, 155, 227, -1, 01327 -1, -1, 224, 83, 161, 210, 319, 211, 155, 227, 01328 -1, -1, 225, 177, 212, 155, 227, -1, -1, 226, 01329 178, 213, 290, 155, 227, -1, -1, -1, 226, 305, 01330 313, 214, 178, 215, 290, 155, 227, -1, 21, -1, 01331 22, -1, 23, -1, 24, -1, 199, -1, 7, -1, 01332 11, -1, 12, -1, 18, -1, 19, -1, 16, -1, 01333 20, -1, 3, -1, 4, -1, 5, -1, 10, -1, 01334 319, -1, 13, -1, 319, 13, -1, 319, -1, 27, 01335 -1, 231, -1, 14, 162, 228, 156, 230, -1, 321, 01336 -1, 15, 156, -1, 175, -1, 168, -1, 293, -1, 01337 89, 235, 316, -1, 233, -1, 234, 140, 233, -1, 01338 234, -1, 234, 140, 95, 293, -1, 234, 140, 95, 01339 293, 140, 234, -1, 234, 140, 95, -1, 234, 140, 01340 95, 140, 234, -1, 95, 293, -1, 95, 293, 140, 01341 234, -1, 95, -1, 95, 140, 234, -1, 295, 140, 01342 298, 140, 301, 304, -1, 295, 140, 298, 140, 301, 01343 140, 295, 304, -1, 295, 140, 298, 304, -1, 295, 01344 140, 298, 140, 295, 304, -1, 295, 140, 301, 304, 01345 -1, 295, 140, -1, 295, 140, 301, 140, 295, 304, 01346 -1, 295, 304, -1, 298, 140, 301, 304, -1, 298, 01347 140, 301, 140, 295, 304, -1, 298, 304, -1, 298, 01348 140, 295, 304, -1, 301, 304, -1, 301, 140, 295, 01349 304, -1, 303, -1, 321, -1, 238, -1, 114, 239, 01350 114, -1, 76, -1, 114, 236, 239, 114, -1, 321, 01351 -1, 145, 240, -1, 241, -1, 240, 140, 241, -1, 01352 52, -1, 292, -1, -1, -1, 243, 244, 245, 246, 01353 -1, 142, 291, 239, 316, -1, 291, -1, 107, 156, 01354 137, -1, 29, 156, 10, -1, -1, 28, 248, 237, 01355 156, 10, -1, 167, 247, -1, 249, 139, 311, 190, 01356 -1, 249, 85, 311, 190, -1, 310, 189, -1, 216, 01357 139, 311, 190, -1, 216, 85, 311, 189, -1, 216, 01358 85, 312, -1, 216, 139, 189, -1, 216, 85, 189, 01359 -1, 32, 189, -1, 32, -1, 216, 138, 191, 317, 01360 -1, -1, 136, 252, 237, 156, 137, -1, -1, 26, 01361 253, 237, 156, 10, -1, 17, 197, 228, 156, 255, 01362 -1, 231, -1, 254, -1, 8, 257, 258, 228, 156, 01363 256, -1, 321, -1, 187, -1, 198, -1, 321, -1, 01364 88, 175, -1, 321, -1, 9, 156, -1, 321, -1, 01365 282, -1, 279, -1, 281, -1, 262, -1, 62, -1, 01366 263, -1, 262, 263, -1, 99, 271, 106, -1, 100, 01367 272, 106, -1, 101, 273, 65, -1, 102, 146, 106, 01368 -1, 102, 267, 106, -1, -1, 267, 268, 146, -1, 01369 274, -1, 268, 274, -1, 103, 146, 106, -1, 103, 01370 270, 106, -1, -1, 270, 61, 146, -1, -1, 271, 01371 274, -1, -1, 272, 274, -1, -1, 273, 274, -1, 01372 61, -1, -1, 105, 275, 278, -1, -1, -1, 104, 01373 276, 277, 156, 137, -1, 54, -1, 55, -1, 57, 01374 -1, 287, -1, 98, 280, -1, 178, -1, 55, -1, 01375 54, -1, 57, -1, 98, 272, 106, -1, 59, -1, 01376 60, -1, 122, 59, -1, 122, 60, -1, 52, -1, 01377 55, -1, 54, -1, 56, -1, 57, -1, 34, -1, 01378 33, -1, 35, -1, 36, -1, 50, -1, 49, -1, 01379 51, -1, 283, -1, 284, -1, 283, -1, 284, -1, 01380 63, -1, 64, -1, 319, -1, -1, 113, 289, 162, 01381 319, -1, 1, 319, -1, 142, 291, 316, -1, 291, 01382 319, -1, 295, 140, 299, 140, 301, 304, -1, 295, 01383 140, 299, 140, 301, 140, 295, 304, -1, 295, 140, 01384 299, 304, -1, 295, 140, 299, 140, 295, 304, -1, 01385 295, 140, 301, 304, -1, 295, 140, 301, 140, 295, 01386 304, -1, 295, 304, -1, 299, 140, 301, 304, -1, 01387 299, 140, 301, 140, 295, 304, -1, 299, 304, -1, 01388 299, 140, 295, 304, -1, 301, 304, -1, 301, 140, 01389 295, 304, -1, 303, -1, -1, 56, -1, 55, -1, 01390 54, -1, 57, -1, 292, -1, 52, -1, 293, -1, 01391 89, 235, 316, -1, 294, -1, 295, 140, 294, -1, 01392 52, 109, 187, -1, 52, 109, 216, -1, 297, -1, 01393 298, 140, 297, -1, 296, -1, 299, 140, 296, -1, 01394 119, -1, 95, -1, 300, 52, -1, 300, -1, 116, 01395 -1, 96, -1, 302, 52, -1, 140, 303, -1, 321, 01396 -1, 285, -1, -1, 142, 306, 161, 316, -1, 321, 01397 -1, 308, 318, -1, 309, -1, 308, 140, 309, -1, 01398 187, 88, 187, -1, 58, 187, -1, 52, -1, 56, 01399 -1, 53, -1, 52, -1, 56, -1, 53, -1, 183, 01400 -1, 52, -1, 53, -1, 183, -1, 139, -1, 85, 01401 -1, -1, 320, -1, -1, 147, -1, 315, 143, -1, 01402 315, 144, -1, -1, 147, -1, 140, -1, 145, -1, 01403 147, -1, 319, -1, 320, 145, -1, -1 01404 }; 01405 01406 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 01407 static const yytype_uint16 yyrline[] = 01408 { 01409 0, 786, 786, 786, 817, 828, 837, 845, 853, 859, 01410 861, 860, 884, 917, 928, 937, 945, 953, 959, 959, 01411 967, 975, 986, 996, 1004, 1013, 1022, 1035, 1048, 1057, 01412 1069, 1070, 1080, 1109, 1130, 1147, 1164, 1175, 1192, 1202, 01413 1211, 1220, 1229, 1232, 1241, 1253, 1254, 1262, 1270, 1278, 01414 1286, 1289, 1301, 1302, 1305, 1306, 1315, 1327, 1326, 1348, 01415 1357, 1369, 1378, 1390, 1399, 1411, 1420, 1429, 1437, 1445, 01416 1455, 1456, 1466, 1467, 1477, 1485, 1493, 1501, 1510, 1518, 01417 1527, 1535, 1544, 1552, 1563, 1564, 1574, 1582, 1592, 1600, 01418 1610, 1614, 1618, 1626, 1634, 1642, 1650, 1662, 1672, 1684, 01419 1693, 1702, 1710, 1718, 1726, 1734, 1747, 1760, 1771, 1779, 01420 1782, 1790, 1798, 1808, 1809, 1810, 1811, 1816, 1827, 1828, 01421 1831, 1839, 1842, 1850, 1850, 1860, 1861, 1862, 1863, 1864, 01422 1865, 1866, 1867, 1868, 1869, 1870, 1871, 1872, 1873, 1874, 01423 1875, 1876, 1877, 1878, 1879, 1880, 1881, 1882, 1883, 1884, 01424 1885, 1886, 1887, 1888, 1891, 1891, 1891, 1892, 1892, 1893, 01425 1893, 1893, 1894, 1894, 1894, 1894, 1895, 1895, 1895, 1895, 01426 1896, 1896, 1896, 1897, 1897, 1897, 1897, 1898, 1898, 1898, 01427 1898, 1899, 1899, 1899, 1899, 1900, 1900, 1900, 1900, 1901, 01428 1901, 1901, 1901, 1902, 1902, 1905, 1914, 1924, 1953, 1984, 01429 2010, 2027, 2044, 2061, 2072, 2083, 2094, 2108, 2122, 2130, 01430 2138, 2146, 2154, 2162, 2170, 2179, 2188, 2196, 2204, 2212, 01431 2220, 2228, 2236, 2244, 2252, 2260, 2268, 2276, 2284, 2292, 01432 2303, 2311, 2319, 2327, 2335, 2343, 2351, 2359, 2359, 2369, 01433 2379, 2385, 2397, 2398, 2402, 2410, 2420, 2430, 2431, 2434, 01434 2435, 2436, 2440, 2448, 2458, 2467, 2475, 2485, 2494, 2503, 01435 2503, 2515, 2525, 2529, 2535, 2543, 2551, 2565, 2581, 2595, 01436 2610, 2620, 2621, 2622, 2623, 2624, 2625, 2626, 2627, 2628, 01437 2637, 2636, 2661, 2661, 2670, 2678, 2686, 2694, 2707, 2715, 01438 2723, 2731, 2739, 2747, 2747, 2757, 2765, 2773, 2784, 2785, 01439 2796, 2800, 2812, 2824, 2824, 2824, 2835, 2835, 2835, 2846, 01440 2857, 2866, 2868, 2865, 2932, 2931, 2953, 2958, 2952, 2977, 01441 2976, 2998, 2997, 3020, 3021, 3020, 3041, 3049, 3057, 3065, 01442 3075, 3087, 3093, 3099, 3105, 3111, 3117, 3123, 3129, 3135, 01443 3141, 3151, 3157, 3162, 3163, 3170, 3175, 3178, 3179, 3192, 01444 3193, 3203, 3204, 3207, 3215, 3225, 3233, 3243, 3251, 3260, 01445 3269, 3277, 3285, 3294, 3306, 3314, 3324, 3332, 3340, 3348, 01446 3356, 3364, 3373, 3381, 3389, 3397, 3405, 3413, 3421, 3429, 01447 3437, 3447, 3448, 3454, 3463, 3472, 3483, 3484, 3494, 3501, 01448 3510, 3518, 3524, 3527, 3524, 3545, 3553, 3563, 3567, 3574, 01449 3573, 3594, 3610, 3619, 3630, 3639, 3649, 3659, 3667, 3678, 01450 3689, 3697, 3705, 3720, 3719, 3739, 3738, 3759, 3771, 3772, 01451 3775, 3794, 3797, 3805, 3813, 3816, 3820, 3823, 3831, 3834, 01452 3835, 3843, 3846, 3863, 3864, 3865, 3875, 3885, 3912, 3977, 01453 3986, 3997, 4004, 4014, 4022, 4032, 4041, 4052, 4059, 4070, 01454 4077, 4088, 4095, 4106, 4113, 4142, 4144, 4143, 4160, 4166, 01455 4159, 4185, 4193, 4201, 4209, 4212, 4223, 4224, 4225, 4226, 01456 4229, 4259, 4260, 4261, 4269, 4279, 4280, 4281, 4282, 4283, 01457 4286, 4287, 4288, 4289, 4290, 4291, 4292, 4295, 4308, 4318, 01458 4326, 4336, 4337, 4340, 4349, 4348, 4356, 4368, 4378, 4386, 01459 4394, 4402, 4410, 4418, 4426, 4434, 4442, 4450, 4458, 4466, 01460 4474, 4482, 4490, 4499, 4508, 4517, 4526, 4535, 4546, 4547, 01461 4554, 4563, 4582, 4589, 4602, 4614, 4626, 4634, 4650, 4658, 01462 4674, 4675, 4678, 4691, 4702, 4703, 4706, 4723, 4727, 4737, 01463 4747, 4747, 4776, 4777, 4787, 4794, 4804, 4812, 4822, 4823, 01464 4824, 4827, 4828, 4829, 4830, 4833, 4834, 4835, 4838, 4843, 01465 4850, 4851, 4854, 4855, 4858, 4861, 4864, 4865, 4866, 4869, 01466 4870, 4873, 4874, 4878 01467 }; 01468 #endif 01469 01470 #if YYDEBUG || YYERROR_VERBOSE || 0 01471 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 01472 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 01473 static const char *const yytname[] = 01474 { 01475 "$end", "error", "$undefined", "keyword_class", "keyword_module", 01476 "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue", 01477 "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless", 01478 "keyword_then", "keyword_elsif", "keyword_else", "keyword_case", 01479 "keyword_when", "keyword_while", "keyword_until", "keyword_for", 01480 "keyword_break", "keyword_next", "keyword_redo", "keyword_retry", 01481 "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block", 01482 "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super", 01483 "keyword_self", "keyword_nil", "keyword_true", "keyword_false", 01484 "keyword_and", "keyword_or", "keyword_not", "modifier_if", 01485 "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue", 01486 "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END", 01487 "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__", 01488 "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL", 01489 "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", 01490 "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ", 01491 "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", 01492 "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", 01493 "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN", 01494 "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA", 01495 "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", 01496 "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG", 01497 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", 01498 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL", 01499 "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias", 01500 "id_core_set_variable_alias", "id_core_undef_method", 01501 "id_core_define_method", "id_core_define_singleton_method", 01502 "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','", 01503 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program", 01504 "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt", 01505 "compstmt", "stmts", "stmt", "$@3", "command_asgn", "expr", "expr_value", 01506 "command_call", "block_command", "cmd_brace_block", "@4", "command", 01507 "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", 01508 "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", 01509 "fitem", "undef_list", "$@5", "op", "reswords", "arg", "$@6", 01510 "arg_value", "aref_args", "paren_args", "opt_paren_args", 01511 "opt_call_args", "call_args", "command_args", "@7", "block_arg", 01512 "opt_block_arg", "args", "mrhs", "primary", "@8", "$@9", "$@10", "$@11", 01513 "$@12", "$@13", "$@14", "$@15", "$@16", "@17", "@18", "@19", "@20", 01514 "@21", "$@22", "$@23", "primary_value", "k_begin", "k_if", "k_unless", 01515 "k_while", "k_until", "k_case", "k_for", "k_class", "k_module", "k_def", 01516 "k_end", "then", "do", "if_tail", "opt_else", "for_var", "f_marg", 01517 "f_marg_list", "f_margs", "block_param", "opt_block_param", 01518 "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@24", 01519 "@25", "f_larglist", "lambda_body", "do_block", "@26", "block_call", 01520 "method_call", "brace_block", "@27", "@28", "case_body", "cases", 01521 "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal", "strings", 01522 "string", "string1", "xstring", "regexp", "words", "word_list", "word", 01523 "qwords", "qword_list", "string_contents", "xstring_contents", 01524 "regexp_contents", "string_content", "@29", "@30", "@31", "string_dvar", 01525 "symbol", "sym", "dsym", "numeric", "user_variable", "keyword_variable", 01526 "var_ref", "var_lhs", "backref", "superclass", "$@32", "f_arglist", 01527 "f_args", "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_opt", 01528 "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark", 01529 "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg", 01530 "singleton", "$@33", "assoc_list", "assocs", "assoc", "operation", 01531 "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl", 01532 "rparen", "rbracket", "trailer", "term", "terms", "none", YY_NULL 01533 }; 01534 #endif 01535 01536 # ifdef YYPRINT 01537 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 01538 token YYLEX-NUM. */ 01539 static const yytype_uint16 yytoknum[] = 01540 { 01541 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 01542 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 01543 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 01544 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 01545 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 01546 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 01547 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 01548 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 01549 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 01550 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 01551 355, 356, 357, 358, 359, 360, 361, 362, 363, 61, 01552 63, 58, 62, 60, 124, 94, 38, 43, 45, 42, 01553 47, 37, 364, 33, 126, 365, 366, 367, 368, 369, 01554 370, 371, 372, 373, 374, 375, 123, 125, 91, 46, 01555 44, 96, 40, 41, 93, 59, 32, 10 01556 }; 01557 # endif 01558 01559 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 01560 static const yytype_uint16 yyr1[] = 01561 { 01562 0, 148, 150, 149, 151, 152, 152, 152, 152, 153, 01563 154, 153, 155, 156, 157, 157, 157, 157, 159, 158, 01564 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 01565 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 01566 158, 158, 158, 160, 160, 161, 161, 161, 161, 161, 01567 161, 162, 163, 163, 164, 164, 164, 166, 165, 167, 01568 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 01569 168, 168, 169, 169, 170, 170, 170, 170, 170, 170, 01570 170, 170, 170, 170, 171, 171, 172, 172, 173, 173, 01571 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 01572 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 01573 177, 177, 177, 178, 178, 178, 178, 178, 179, 179, 01574 180, 180, 181, 182, 181, 183, 183, 183, 183, 183, 01575 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 01576 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 01577 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 01578 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01579 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01580 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01581 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 01582 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 01583 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 01584 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 01585 185, 185, 185, 185, 185, 185, 185, 186, 185, 185, 01586 185, 187, 188, 188, 188, 188, 189, 190, 190, 191, 01587 191, 191, 191, 191, 192, 192, 192, 192, 192, 194, 01588 193, 195, 196, 196, 197, 197, 197, 197, 198, 198, 01589 198, 199, 199, 199, 199, 199, 199, 199, 199, 199, 01590 200, 199, 201, 199, 199, 199, 199, 199, 199, 199, 01591 199, 199, 199, 202, 199, 199, 199, 199, 199, 199, 01592 199, 199, 199, 203, 204, 199, 205, 206, 199, 199, 01593 199, 207, 208, 199, 209, 199, 210, 211, 199, 212, 01594 199, 213, 199, 214, 215, 199, 199, 199, 199, 199, 01595 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 01596 226, 227, 228, 228, 228, 229, 229, 230, 230, 231, 01597 231, 232, 232, 233, 233, 234, 234, 235, 235, 235, 01598 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 01599 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 01600 236, 237, 237, 238, 238, 238, 239, 239, 240, 240, 01601 241, 241, 243, 244, 242, 245, 245, 246, 246, 248, 01602 247, 249, 249, 249, 250, 250, 250, 250, 250, 250, 01603 250, 250, 250, 252, 251, 253, 251, 254, 255, 255, 01604 256, 256, 257, 257, 257, 258, 258, 259, 259, 260, 01605 260, 260, 261, 262, 262, 262, 263, 264, 265, 266, 01606 266, 267, 267, 268, 268, 269, 269, 270, 270, 271, 01607 271, 272, 272, 273, 273, 274, 275, 274, 276, 277, 01608 274, 278, 278, 278, 278, 279, 280, 280, 280, 280, 01609 281, 282, 282, 282, 282, 283, 283, 283, 283, 283, 01610 284, 284, 284, 284, 284, 284, 284, 285, 285, 286, 01611 286, 287, 287, 288, 289, 288, 288, 290, 290, 291, 01612 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 01613 291, 291, 291, 291, 292, 292, 292, 292, 293, 293, 01614 294, 294, 295, 295, 296, 297, 298, 298, 299, 299, 01615 300, 300, 301, 301, 302, 302, 303, 304, 304, 305, 01616 306, 305, 307, 307, 308, 308, 309, 309, 310, 310, 01617 310, 311, 311, 311, 311, 312, 312, 312, 313, 313, 01618 314, 314, 315, 315, 316, 317, 318, 318, 318, 319, 01619 319, 320, 320, 321 01620 }; 01621 01622 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 01623 static const yytype_uint8 yyr2[] = 01624 { 01625 0, 2, 0, 2, 2, 1, 1, 3, 2, 1, 01626 0, 5, 4, 2, 1, 1, 3, 2, 0, 4, 01627 3, 3, 3, 2, 3, 3, 3, 3, 3, 4, 01628 1, 3, 3, 6, 5, 5, 5, 5, 3, 3, 01629 3, 3, 1, 3, 3, 1, 3, 3, 3, 2, 01630 1, 1, 1, 1, 1, 4, 4, 0, 5, 2, 01631 3, 4, 5, 4, 5, 2, 2, 2, 2, 2, 01632 1, 3, 1, 3, 1, 2, 3, 5, 2, 4, 01633 2, 4, 1, 3, 1, 3, 2, 3, 1, 3, 01634 1, 1, 4, 3, 3, 3, 3, 2, 1, 1, 01635 1, 4, 3, 3, 3, 3, 2, 1, 1, 1, 01636 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 01637 1, 1, 1, 0, 4, 1, 1, 1, 1, 1, 01638 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01639 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01640 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01641 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01642 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01643 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01644 1, 1, 1, 1, 1, 3, 5, 3, 5, 6, 01645 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 01646 3, 3, 3, 3, 4, 4, 2, 2, 3, 3, 01647 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01648 3, 2, 2, 3, 3, 3, 3, 0, 4, 6, 01649 1, 1, 1, 2, 4, 2, 3, 1, 1, 1, 01650 1, 2, 4, 2, 1, 2, 2, 4, 1, 0, 01651 2, 2, 2, 1, 1, 2, 3, 4, 3, 4, 01652 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01653 0, 4, 0, 4, 3, 3, 2, 3, 3, 1, 01654 4, 3, 1, 0, 6, 4, 3, 2, 1, 2, 01655 2, 6, 6, 0, 0, 7, 0, 0, 7, 5, 01656 4, 0, 0, 9, 0, 6, 0, 0, 8, 0, 01657 5, 0, 6, 0, 0, 9, 1, 1, 1, 1, 01658 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01659 1, 1, 1, 1, 2, 1, 1, 1, 5, 1, 01660 2, 1, 1, 1, 3, 1, 3, 1, 4, 6, 01661 3, 5, 2, 4, 1, 3, 6, 8, 4, 6, 01662 4, 2, 6, 2, 4, 6, 2, 4, 2, 4, 01663 1, 1, 1, 3, 1, 4, 1, 2, 1, 3, 01664 1, 1, 0, 0, 4, 4, 1, 3, 3, 0, 01665 5, 2, 4, 4, 2, 4, 4, 3, 3, 3, 01666 2, 1, 4, 0, 5, 0, 5, 5, 1, 1, 01667 6, 1, 1, 1, 1, 2, 1, 2, 1, 1, 01668 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 01669 3, 0, 3, 1, 2, 3, 3, 0, 3, 0, 01670 2, 0, 2, 0, 2, 1, 0, 3, 0, 0, 01671 5, 1, 1, 1, 1, 2, 1, 1, 1, 1, 01672 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, 01673 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01674 1, 1, 1, 1, 0, 4, 2, 3, 2, 6, 01675 8, 4, 6, 4, 6, 2, 4, 6, 2, 4, 01676 2, 4, 1, 0, 1, 1, 1, 1, 1, 1, 01677 1, 3, 1, 3, 3, 3, 1, 3, 1, 3, 01678 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 01679 0, 4, 1, 2, 1, 3, 3, 2, 1, 1, 01680 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01681 0, 1, 0, 1, 2, 2, 0, 1, 1, 1, 01682 1, 1, 2, 0 01683 }; 01684 01685 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. 01686 Performed when YYTABLE doesn't specify something else to do. Zero 01687 means the default is an error. */ 01688 static const yytype_uint16 yydefact[] = 01689 { 01690 2, 0, 0, 1, 0, 338, 339, 340, 0, 331, 01691 332, 333, 336, 334, 335, 337, 326, 327, 328, 329, 01692 289, 259, 259, 481, 480, 482, 483, 562, 0, 562, 01693 10, 0, 485, 484, 486, 475, 550, 477, 476, 478, 01694 479, 471, 472, 433, 491, 492, 0, 0, 0, 0, 01695 0, 573, 573, 82, 392, 451, 449, 451, 453, 441, 01696 447, 0, 0, 0, 3, 560, 6, 9, 30, 42, 01697 45, 53, 52, 0, 70, 0, 74, 84, 0, 50, 01698 240, 0, 280, 0, 0, 303, 306, 560, 0, 0, 01699 0, 0, 54, 298, 271, 272, 432, 434, 273, 274, 01700 275, 276, 430, 431, 429, 487, 488, 277, 0, 278, 01701 259, 5, 8, 164, 175, 165, 188, 161, 181, 171, 01702 170, 191, 192, 186, 169, 168, 163, 189, 193, 194, 01703 173, 162, 176, 180, 182, 174, 167, 183, 190, 185, 01704 184, 177, 187, 172, 160, 179, 178, 159, 166, 157, 01705 158, 154, 155, 156, 113, 115, 114, 149, 150, 146, 01706 128, 129, 130, 137, 134, 136, 131, 132, 151, 152, 01707 138, 139, 143, 133, 135, 125, 126, 127, 140, 141, 01708 142, 144, 145, 147, 148, 153, 118, 120, 122, 23, 01709 116, 117, 119, 121, 0, 0, 0, 0, 0, 0, 01710 0, 254, 0, 241, 264, 68, 258, 573, 0, 487, 01711 488, 0, 278, 573, 544, 69, 67, 562, 66, 0, 01712 573, 410, 65, 562, 563, 0, 0, 18, 237, 0, 01713 0, 326, 327, 289, 292, 411, 216, 0, 0, 217, 01714 286, 0, 0, 0, 560, 15, 562, 72, 14, 282, 01715 0, 566, 566, 242, 0, 0, 566, 542, 562, 0, 01716 0, 0, 80, 330, 0, 90, 91, 98, 300, 393, 01717 468, 467, 469, 466, 0, 465, 0, 0, 0, 0, 01718 0, 0, 0, 473, 474, 49, 231, 232, 569, 570, 01719 4, 571, 561, 0, 0, 0, 0, 0, 0, 0, 01720 399, 401, 0, 86, 0, 78, 75, 0, 0, 0, 01721 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01722 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01723 0, 0, 0, 0, 0, 573, 0, 0, 51, 0, 01724 0, 0, 0, 560, 0, 561, 0, 352, 351, 0, 01725 0, 487, 488, 278, 108, 109, 0, 0, 111, 0, 01726 0, 487, 488, 278, 319, 184, 177, 187, 172, 154, 01727 155, 156, 113, 114, 540, 321, 539, 0, 0, 0, 01728 415, 413, 299, 435, 0, 0, 404, 59, 297, 123, 01729 547, 286, 265, 261, 0, 0, 0, 255, 263, 0, 01730 573, 0, 0, 0, 0, 256, 562, 0, 291, 260, 01731 562, 250, 573, 573, 249, 562, 296, 48, 20, 22, 01732 21, 0, 293, 0, 0, 0, 0, 0, 0, 17, 01733 562, 284, 13, 561, 71, 562, 287, 568, 567, 243, 01734 568, 245, 288, 543, 0, 97, 473, 474, 88, 83, 01735 0, 0, 573, 0, 513, 455, 458, 456, 470, 452, 01736 436, 450, 437, 438, 454, 439, 440, 0, 443, 445, 01737 0, 446, 0, 0, 572, 7, 24, 25, 26, 27, 01738 28, 46, 47, 573, 0, 31, 40, 0, 41, 562, 01739 0, 76, 87, 44, 43, 0, 195, 264, 39, 213, 01740 221, 226, 227, 228, 223, 225, 235, 236, 229, 230, 01741 206, 207, 233, 234, 562, 222, 224, 218, 219, 220, 01742 208, 209, 210, 211, 212, 551, 556, 552, 557, 409, 01743 259, 407, 562, 551, 553, 552, 554, 408, 259, 0, 01744 573, 343, 0, 342, 0, 0, 0, 0, 0, 0, 01745 286, 0, 573, 0, 311, 316, 108, 109, 110, 0, 01746 494, 314, 493, 0, 573, 0, 0, 0, 513, 559, 01747 558, 323, 551, 552, 259, 259, 573, 573, 32, 197, 01748 38, 205, 57, 60, 0, 195, 546, 0, 266, 262, 01749 573, 555, 552, 562, 551, 552, 545, 290, 564, 246, 01750 251, 253, 295, 19, 0, 238, 0, 29, 0, 573, 01751 204, 73, 16, 283, 566, 0, 81, 94, 96, 562, 01752 551, 552, 519, 516, 515, 514, 517, 0, 531, 535, 01753 534, 530, 513, 0, 396, 518, 520, 522, 573, 528, 01754 573, 533, 573, 0, 512, 459, 0, 442, 444, 448, 01755 214, 215, 384, 573, 0, 382, 381, 270, 0, 85, 01756 79, 0, 0, 0, 0, 0, 0, 406, 63, 0, 01757 412, 0, 0, 248, 405, 61, 247, 341, 281, 573, 01758 573, 421, 573, 344, 573, 346, 304, 345, 307, 0, 01759 0, 310, 555, 285, 562, 551, 552, 0, 0, 496, 01760 0, 0, 108, 109, 112, 562, 0, 562, 513, 0, 01761 0, 0, 403, 56, 402, 55, 0, 0, 0, 573, 01762 124, 267, 257, 0, 0, 412, 0, 0, 573, 562, 01763 11, 244, 89, 92, 0, 519, 0, 364, 355, 357, 01764 562, 353, 573, 0, 0, 394, 0, 505, 538, 0, 01765 508, 532, 0, 510, 536, 0, 461, 462, 463, 457, 01766 464, 519, 0, 573, 0, 573, 526, 573, 573, 380, 01767 386, 0, 0, 268, 77, 196, 0, 37, 202, 36, 01768 203, 64, 565, 0, 34, 200, 35, 201, 62, 422, 01769 423, 573, 424, 0, 573, 349, 0, 0, 347, 0, 01770 0, 0, 309, 0, 0, 412, 0, 317, 0, 0, 01771 412, 320, 541, 562, 0, 498, 324, 0, 0, 198, 01772 0, 0, 252, 294, 524, 562, 0, 362, 0, 521, 01773 562, 0, 0, 523, 573, 573, 537, 573, 529, 573, 01774 573, 0, 0, 390, 387, 388, 391, 0, 383, 371, 01775 373, 0, 376, 0, 378, 400, 269, 239, 33, 199, 01776 0, 0, 426, 350, 0, 12, 428, 0, 301, 302, 01777 0, 0, 266, 573, 312, 0, 495, 315, 497, 322, 01778 513, 416, 414, 0, 354, 365, 0, 360, 356, 395, 01779 398, 397, 0, 501, 0, 503, 0, 509, 0, 506, 01780 511, 460, 0, 525, 0, 385, 573, 573, 573, 527, 01781 573, 573, 0, 425, 0, 99, 100, 107, 0, 427, 01782 0, 305, 308, 418, 419, 417, 0, 0, 0, 58, 01783 0, 363, 0, 358, 573, 573, 573, 573, 286, 0, 01784 389, 0, 368, 0, 370, 377, 0, 374, 379, 106, 01785 0, 573, 0, 573, 573, 0, 318, 0, 361, 0, 01786 502, 0, 499, 504, 507, 555, 285, 573, 573, 573, 01787 573, 555, 105, 562, 551, 552, 420, 348, 313, 325, 01788 359, 573, 369, 0, 366, 372, 375, 412, 500, 573, 01789 367 01790 }; 01791 01792 /* YYDEFGOTO[NTERM-NUM]. */ 01793 static const yytype_int16 yydefgoto[] = 01794 { 01795 -1, 1, 2, 64, 65, 66, 229, 539, 540, 244, 01796 245, 421, 68, 69, 339, 70, 71, 583, 719, 72, 01797 73, 246, 74, 75, 76, 449, 77, 202, 358, 359, 01798 186, 187, 188, 189, 584, 536, 191, 79, 423, 204, 01799 250, 529, 674, 410, 411, 218, 219, 206, 397, 412, 01800 488, 80, 337, 435, 604, 341, 800, 342, 801, 697, 01801 926, 701, 698, 875, 566, 568, 711, 880, 237, 82, 01802 83, 84, 85, 86, 87, 88, 89, 90, 91, 678, 01803 542, 686, 797, 798, 350, 738, 739, 740, 763, 654, 01804 655, 764, 844, 845, 268, 269, 454, 633, 745, 301, 01805 483, 92, 93, 388, 577, 576, 549, 925, 680, 791, 01806 861, 865, 94, 95, 96, 97, 98, 99, 100, 280, 01807 467, 101, 282, 276, 274, 278, 459, 646, 645, 755, 01808 759, 102, 275, 103, 104, 209, 210, 107, 211, 212, 01809 561, 700, 709, 710, 635, 636, 637, 638, 639, 766, 01810 767, 640, 641, 642, 643, 836, 747, 377, 567, 255, 01811 413, 214, 238, 608, 531, 571, 290, 407, 408, 670, 01812 439, 543, 345, 248 01813 }; 01814 01815 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 01816 STATE-NUM. */ 01817 #define YYPACT_NINF -747 01818 static const yytype_int16 yypact[] = 01819 { 01820 -747, 81, 2552, -747, 7102, -747, -747, -747, 6615, -747, 01821 -747, -747, -747, -747, -747, -747, 7320, 7320, -747, -747, 01822 7320, 3237, 2814, -747, -747, -747, -747, 100, 6476, -31, 01823 -747, -26, -747, -747, -747, 5715, 2955, -747, -747, 5842, 01824 -747, -747, -747, -747, -747, -747, 8519, 8519, 83, 4434, 01825 8628, 7538, 7865, 6878, -747, 6337, -747, -747, -747, -24, 01826 29, 252, 8737, 8519, -747, 193, -747, 1104, -747, 458, 01827 -747, -747, 129, 77, -747, 69, 8846, -747, 139, 2797, 01828 22, 41, -747, 8628, 8628, -747, -747, 5078, 8951, 9056, 01829 9161, 5588, 33, 46, -747, -747, 157, -747, -747, -747, 01830 -747, -747, -747, -747, -747, 25, 58, -747, 179, 613, 01831 51, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01832 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01833 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01834 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01835 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01836 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01837 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01838 -747, -747, -747, -747, -747, -747, -747, -747, -747, 134, 01839 -747, -747, -747, -747, 182, 8519, 279, 4564, 8519, 8519, 01840 8519, -747, 263, 2797, 260, -747, -747, 237, 207, 43, 01841 206, 298, 254, 265, -747, -747, -747, 4969, -747, 7320, 01842 7320, -747, -747, 5208, -747, 8628, 661, -747, 272, 287, 01843 4694, -747, -747, -747, 295, 307, -747, 304, 51, 416, 01844 619, 7211, 4434, 384, 193, 1104, -31, 399, -747, 458, 01845 419, 221, 300, -747, 260, 430, 300, -747, -31, 497, 01846 501, 9266, 442, -747, 351, 366, 383, 409, -747, -747, 01847 -747, -747, -747, -747, 644, -747, 754, 813, 605, 464, 01848 819, 478, 68, 530, 532, -747, -747, -747, -747, -747, 01849 -747, -747, 5317, 8628, 8628, 8628, 8628, 7211, 8628, 8628, 01850 -747, -747, 7974, -747, 4434, 6990, 470, 7974, 8519, 8519, 01851 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 01852 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 01853 8519, 8519, 8519, 8519, 9548, 7320, 9625, 3609, 458, 86, 01854 86, 8628, 8628, 193, 597, 480, 562, -747, -747, 454, 01855 601, 54, 76, 99, 331, 349, 8628, 481, -747, 45, 01856 473, -747, -747, -747, -747, 217, 286, 305, 318, 321, 01857 347, 363, 376, 381, -747, -747, -747, 391, 10549, 10549, 01858 -747, -747, -747, -747, 8737, 8737, -747, 535, -747, -747, 01859 -747, 388, -747, -747, 8519, 8519, 7429, -747, -747, 9702, 01860 7320, 9779, 8519, 8519, 7647, -747, -31, 492, -747, -747, 01861 -31, -747, 506, 539, -747, 106, -747, -747, -747, -747, 01862 -747, 6615, -747, 8519, 4029, 508, 9702, 9779, 8519, 1104, 01863 -31, -747, -747, 5445, 541, -31, -747, 7756, -747, -747, 01864 7865, -747, -747, -747, 272, 510, -747, -747, -747, 543, 01865 9266, 9856, 7320, 9933, 774, -747, -747, -747, -747, -747, 01866 -747, -747, -747, -747, -747, -747, -747, 313, -747, -747, 01867 491, -747, 8519, 8519, -747, -747, -747, -747, -747, -747, 01868 -747, -747, -747, 32, 8519, -747, 545, 546, -747, -31, 01869 9266, 551, -747, -747, -747, 566, 9473, -747, -747, 416, 01870 2184, 2184, 2184, 2184, 781, 781, 2273, 2938, 2184, 2184, 01871 1364, 1364, 662, 662, 2656, 781, 781, 927, 927, 768, 01872 397, 397, 416, 416, 416, 3378, 6083, 3464, 6197, -747, 01873 307, -747, -31, 647, -747, 660, -747, -747, 3096, 650, 01874 688, -747, 3754, 685, 4174, 56, 56, 597, 8083, 650, 01875 112, 10010, 7320, 10087, -747, 458, -747, 510, -747, 193, 01876 -747, -747, -747, 10164, 7320, 10241, 3609, 8628, 1131, -747, 01877 -747, -747, -747, -747, 1739, 1739, 32, 32, -747, 10608, 01878 -747, 2797, -747, -747, 6615, 10627, -747, 8519, 260, -747, 01879 265, 5969, 2673, -31, 490, 500, -747, -747, -747, -747, 01880 7429, 7647, -747, -747, 8628, 2797, 570, -747, 307, 307, 01881 2797, 213, 1104, -747, 300, 9266, 543, 505, 282, -31, 01882 38, 261, 603, -747, -747, -747, -747, 972, -747, -747, 01883 -747, -747, 1223, 66, -747, -747, -747, -747, 580, -747, 01884 583, 683, 589, 687, -747, -747, 893, -747, -747, -747, 01885 416, 416, -747, 576, 4839, -747, -747, 604, 8192, -747, 01886 543, 9266, 8737, 8519, 630, 8737, 8737, -747, 535, 608, 01887 677, 8737, 8737, -747, -747, 535, -747, -747, -747, 8301, 01888 740, -747, 588, -747, 740, -747, -747, -747, -747, 650, 01889 44, -747, 239, 257, -31, 141, 145, 8628, 193, -747, 01890 8628, 3609, 505, 282, -747, -31, 650, 106, 1223, 3609, 01891 193, 6754, -747, -747, -747, -747, 4839, 4694, 8519, 32, 01892 -747, -747, -747, 8519, 8519, 507, 8519, 8519, 636, 106, 01893 -747, -747, -747, 291, 8519, -747, 972, 457, -747, 651, 01894 -31, -747, 639, 4839, 4694, -747, 1223, -747, -747, 1223, 01895 -747, -747, 598, -747, -747, 4694, -747, -747, -747, -747, 01896 -747, 681, 1017, 639, 679, 654, -747, 656, 657, -747, 01897 -747, 789, 8519, 664, 543, 2797, 8519, -747, 2797, -747, 01898 2797, -747, -747, 8737, -747, 2797, -747, 2797, -747, 545, 01899 -747, 713, -747, 4304, 796, -747, 8628, 650, -747, 650, 01900 4839, 4839, -747, 8410, 3899, 189, 56, -747, 193, 650, 01901 -747, -747, -747, -31, 650, -747, -747, 799, 673, 2797, 01902 4694, 8519, 7647, -747, -747, -31, 884, 671, 1079, -747, 01903 -31, 803, 686, -747, 676, 678, -747, 684, -747, 694, 01904 684, 690, 9371, -747, 699, -747, -747, 711, -747, 1251, 01905 -747, 1251, -747, 598, -747, -747, 700, 2797, -747, 2797, 01906 9476, 86, -747, -747, 4839, -747, -747, 86, -747, -747, 01907 650, 650, -747, 365, -747, 3609, -747, -747, -747, -747, 01908 1131, -747, -747, 706, -747, 707, 884, 716, -747, -747, 01909 -747, -747, 1223, -747, 598, -747, 598, -747, 598, -747, 01910 -747, -747, 790, 520, 1017, -747, 708, 715, 684, -747, 01911 717, 684, 797, -747, 523, 366, 383, 409, 3609, -747, 01912 3754, -747, -747, -747, -747, -747, 4839, 650, 3609, -747, 01913 884, 707, 884, 721, 684, 727, 684, 684, -747, 10318, 01914 -747, 1251, -747, 598, -747, -747, 598, -747, -747, 510, 01915 10395, 7320, 10472, 688, 588, 650, -747, 650, 707, 884, 01916 -747, 598, -747, -747, -747, 730, 731, 684, 735, 684, 01917 684, 55, 282, -31, 128, 158, -747, -747, -747, -747, 01918 707, 684, -747, 598, -747, -747, -747, 163, -747, 684, 01919 -747 01920 }; 01921 01922 /* YYPGOTO[NTERM-NUM]. */ 01923 static const yytype_int16 yypgoto[] = 01924 { 01925 -747, -747, -747, 452, -747, 28, -747, -545, 277, -747, 01926 39, -747, -293, 184, -58, 71, -747, -169, -747, -7, 01927 791, -142, -13, -37, -747, -396, -29, 1623, -312, 788, 01928 -54, -747, -25, -747, -747, 20, -747, 1066, -747, -45, 01929 -747, 11, 47, -324, 115, 5, -747, -322, -196, 53, 01930 -295, 8, -747, -747, -747, -747, -747, -747, -747, -747, 01931 -747, -747, -747, -747, -747, -747, -747, -747, 2, -747, 01932 -747, -747, -747, -747, -747, -747, -747, -747, -747, 205, 01933 -338, -516, -72, -618, -747, -722, -671, 147, -747, -489, 01934 -747, -600, -747, -12, -747, -747, -747, -747, -747, -747, 01935 -747, -747, -747, 798, -747, -747, -531, -747, -50, -747, 01936 -747, -747, -747, -747, -747, 811, -747, -747, -747, -747, 01937 -747, -747, -747, -747, 856, -747, -140, -747, -747, -747, 01938 -747, 7, -747, 12, -747, 1268, 1605, 823, 1289, 1575, 01939 -747, -747, 35, -387, -697, -568, -690, 273, -696, -746, 01940 72, 181, -747, -526, -747, -449, 270, -747, -747, -747, 01941 97, -360, 758, -276, -747, -747, -56, -4, 278, -585, 01942 -214, 6, -18, -2 01943 }; 01944 01945 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 01946 positive, shift that token. If negative, reduce the rule which 01947 number is the opposite. If YYTABLE_NINF, syntax error. */ 01948 #define YYTABLE_NINF -574 01949 static const yytype_int16 yytable[] = 01950 { 01951 111, 273, 544, 227, 81, 644, 81, 254, 725, 201, 01952 201, 532, 498, 201, 493, 192, 689, 405, 208, 208, 01953 193, 706, 208, 225, 262, 228, 340, 222, 190, 343, 01954 688, 344, 112, 221, 733, 192, 247, 375, 441, 306, 01955 193, 67, 443, 67, 596, 558, 559, 292, 190, 253, 01956 257, 81, 208, 838, 616, 264, 833, 541, 530, 741, 01957 538, 263, 794, -93, 208, 846, 799, 634, -103, 207, 01958 207, 291, 380, 207, 589, 190, 593, 380, 264, -99, 01959 596, 3, 589, 685, 263, 208, 208, 716, 717, 208, 01960 349, 360, 360, 291, 660, 743, 263, 263, 263, 541, 01961 430, -100, 574, 575, 251, 909, 888, -330, 652, 805, 01962 230, 190, -489, 213, 213, 387, 224, 213, 378, 644, 01963 810, 386, 279, 530, -107, 538, 334, 768, 619, 470, 01964 -489, 205, 215, 285, -99, 216, 461, -106, 464, 240, 01965 468, -102, 830, 298, 299, -490, 653, -93, 252, 256, 01966 390, 609, -99, 392, 393, 885, 809, 300, 560, 833, 01967 -330, -330, 489, 847, 814, -90, -102, -100, 741, 827, 01968 -104, -104, 379, 744, 471, 281, -101, 609, -93, 335, 01969 336, -93, 381, 644, 803, -93, 302, 381, 432, 288, 01970 288, 289, 289, 220, -90, 909, 838, -551, -91, 81, 01971 -103, 288, -103, 289, 769, 398, 833, 846, 888, 303, 01972 201, 398, 201, 201, -101, 931, -91, 405, 414, 208, 01973 835, 208, 208, 839, 448, 208, 433, 208, 694, 247, 01974 820, 288, 81, 289, 249, 476, 477, 478, 479, -98, 01975 705, 596, 223, 81, 81, 742, 221, 224, 307, 386, 01976 291, 704, -97, 224, 444, 923, 56, 486, 741, 644, 01977 741, 958, 497, 264, -103, 774, 384, 338, 338, 263, 01978 207, 338, 207, -102, 389, -102, 491, 609, 589, 589, 01979 429, -93, -105, 545, 546, -95, -95, 547, 980, 609, 01980 874, 247, 399, -490, 81, 208, 208, 208, 208, 81, 01981 208, 208, -481, -104, 208, -104, 81, 264, -101, 208, 01982 -101, 283, 284, 263, 213, -100, 213, -412, 741, 933, 01983 475, 813, -71, 907, 223, 910, 243, 648, 201, -92, 01984 927, 67, 406, 414, 409, 391, 480, 208, 288, 81, 01985 289, 403, 924, 208, 208, 400, 401, 537, 395, 291, 01986 586, 588, 804, -85, 528, 487, -481, -548, 208, 254, 01987 487, 437, 741, -107, 741, 562, 935, -285, 438, 493, 01988 -95, -480, 394, 485, 455, -549, -412, 396, 494, -94, 01989 793, -551, 548, 957, 790, 402, 208, 208, 987, 426, 01990 -482, 741, 588, 201, 722, 254, 603, -96, 414, -552, 01991 731, -95, 208, -483, -95, 404, -485, 415, -95, 417, 01992 398, 398, 537, 448, 422, 968, -475, 456, 457, 528, 01993 -285, -285, 111, 424, -552, -480, 81, -412, 192, -412, 01994 -412, 644, -484, 193, -478, 81, 451, 217, 537, 657, 01995 440, 190, 400, 427, -482, 201, 528, 438, -486, 220, 01996 414, -487, 264, 448, 208, 578, 580, -483, 263, 647, 01997 -485, -475, 596, 67, 537, 308, -478, -548, -488, -475, 01998 -475, 528, 612, -548, 243, 428, 569, 338, 338, 338, 01999 338, 656, 481, 482, 308, -549, -484, -478, -478, 452, 02000 453, -549, 264, 590, -278, 298, 299, -106, 263, 781, 02001 589, 416, -486, 497, -487, -487, 788, 425, -70, 735, 02002 664, 623, 624, 625, 626, -475, 331, 332, 333, 243, 02003 -478, -488, -488, 918, 434, 338, 338, 431, 669, 920, 02004 570, -555, 722, 556, 614, 668, 676, 557, 681, 551, 02005 555, 667, 721, 675, 81, 201, 81, -278, -278, 673, 02006 414, 687, 687, 445, 208, 588, 254, 201, 563, 720, 02007 446, 447, 414, 436, 537, 699, 208, 442, 81, 208, 02008 465, 528, 676, 676, 656, 656, 537, 726, 732, 713, 02009 715, 243, 450, 528, 469, 673, 673, 727, 398, 669, 02010 -555, 192, 552, 553, 821, -286, 193, 826, 472, -102, 02011 473, 690, 796, 793, 190, 939, 208, 676, 950, -104, 02012 492, 564, 565, 773, 548, 669, -101, 264, 550, 667, 02013 673, 712, 714, 263, 448, 474, 554, 973, 761, 582, 02014 623, 624, 625, 626, 789, 598, 748, 649, 748, 806, 02015 748, -555, 808, -555, -555, 607, 600, -551, -286, -286, 02016 735, 770, 623, 624, 625, 626, 81, 816, 564, 565, 02017 677, 951, 952, 264, 208, 627, 455, 208, 208, 263, 02018 463, 628, 629, 208, 208, 662, 609, 792, 795, 601, 02019 795, -85, 795, 615, 597, -264, 658, 627, 599, 824, 02020 669, 661, 630, 602, 629, 631, 679, 728, 683, 208, 02021 385, 669, 208, 81, 807, 455, 428, 730, 611, 456, 02022 457, 81, 734, 613, 630, 418, 815, 656, 81, 81, 02023 746, 762, -107, 749, 419, 420, 398, 856, -106, 752, 02024 308, 190, 487, 494, 671, 751, 777, 779, 867, 754, 02025 770, 776, 784, 786, -265, 81, 81, 672, 456, 457, 02026 458, 707, 782, -98, 691, 793, -102, 81, 872, -97, 02027 110, 770, 110, 748, 783, 748, 748, 659, 735, -104, 02028 623, 624, 625, 626, 110, 110, 822, 254, 110, 329, 02029 330, 331, 332, 333, 762, 208, -101, -93, 729, 862, 02030 842, 828, 866, 848, 849, 81, 851, 853, 208, 855, 02031 -95, 860, 81, 81, -266, 864, 81, 110, 110, 881, 02032 882, 886, 687, 890, 876, 455, 892, -92, 894, 682, 02033 110, 684, 81, 891, 896, 905, 622, 901, 623, 624, 02034 625, 626, 748, 748, 898, 748, 308, 748, 748, 904, 02035 -267, 110, 110, 929, 903, 110, 938, 930, 941, 308, 02036 263, 321, 322, 949, 858, 943, 932, 946, 456, 457, 02037 460, 959, 914, 627, 321, 322, 81, 961, 263, 628, 02038 629, 795, -551, -552, 455, 983, 606, 81, 364, 347, 02039 455, 338, 977, 825, 338, 329, 330, 331, 332, 333, 02040 630, 382, 940, 631, 802, 326, 327, 328, 329, 330, 02041 331, 332, 333, 976, 748, 748, 748, 383, 748, 748, 02042 750, 811, 753, 277, 376, 928, 632, 456, 457, 462, 02043 81, 906, 81, 456, 457, 466, 765, 834, 81, 0, 02044 81, 771, 748, 748, 748, 748, 735, 0, 623, 624, 02045 625, 626, 0, 0, 201, 0, 0, 756, 757, 414, 02046 758, 681, 795, 208, 0, 110, 44, 45, 0, 528, 02047 0, 0, 0, 537, 0, 748, 748, 748, 748, 669, 02048 528, 0, 0, 736, 0, 110, 0, 110, 110, 748, 02049 338, 110, 0, 110, 0, 812, 0, 748, 110, 0, 02050 0, 0, 0, 817, 818, 308, 0, 0, 0, 110, 02051 110, 0, 868, 0, 869, 0, 0, 823, 0, 0, 02052 321, 322, 0, 0, 877, 0, 0, 0, 829, 879, 02053 831, 832, 837, 0, 735, 840, 623, 624, 625, 626, 02054 0, 0, 841, 0, 0, 850, 0, 852, 854, 0, 02055 0, 0, 0, 328, 329, 330, 331, 332, 333, 0, 02056 110, 110, 110, 110, 110, 110, 110, 110, 0, 0, 02057 110, 736, 110, 0, 0, 110, 0, 737, 0, 843, 02058 863, 623, 624, 625, 626, 921, 922, 870, 871, 0, 02059 0, 873, 203, 203, 0, 0, 203, 0, 0, 0, 02060 0, 878, 0, 110, 0, 110, 0, 883, 0, 110, 02061 110, 0, 0, 884, 893, 895, 0, 897, 889, 899, 02062 900, 0, 236, 239, 110, 0, 0, 203, 203, 0, 02063 0, 0, 0, 0, 908, 0, 911, 0, 286, 287, 02064 0, 735, 956, 623, 624, 625, 626, 0, 0, 0, 02065 0, 919, 110, 110, 293, 294, 295, 296, 297, 0, 02066 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 02067 978, 0, 979, 0, 0, 934, 0, 936, 736, 0, 02068 0, 937, 0, 0, 887, 0, 942, 944, 945, 0, 02069 947, 948, 110, 622, 0, 623, 624, 625, 626, 0, 02070 0, 110, 0, 0, 0, 953, 0, 954, 0, 0, 02071 0, 0, 0, 955, 960, 962, 963, 964, 0, 0, 02072 110, 0, 0, 0, 967, 0, 969, 0, 0, 970, 02073 627, 0, 0, 0, 0, 0, 628, 629, 0, 0, 02074 0, 0, 0, 0, 981, 0, 0, 982, 984, 985, 02075 986, 0, 0, 0, 0, 0, 0, 630, 0, 0, 02076 631, 988, 0, 0, 0, 0, 989, 0, 0, 990, 02077 0, 203, 0, 0, 203, 203, 286, 0, 0, 0, 02078 105, 0, 105, 708, 0, 622, 0, 623, 624, 625, 02079 626, 0, 0, 203, 0, 203, 203, 0, 0, 0, 02080 0, 108, 0, 108, 0, 0, 0, 0, 0, 0, 02081 110, 0, 110, 761, 0, 623, 624, 625, 626, 0, 02082 110, 0, 627, 0, 0, 0, 0, 105, 628, 629, 02083 0, 265, 110, 0, 110, 110, 0, 0, 0, 0, 02084 0, 0, 0, 0, 0, 0, 0, 0, 108, 630, 02085 627, 0, 631, 0, 265, 0, 628, 629, 0, 0, 02086 0, 0, 0, 0, 0, 0, 351, 361, 361, 361, 02087 0, 0, 110, 0, 0, 0, 0, 630, 203, 0, 02088 631, 0, 0, 496, 499, 500, 501, 502, 503, 504, 02089 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 02090 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 02091 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 02092 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 02093 110, 0, 0, 110, 110, 0, 0, 0, 0, 110, 02094 110, 0, 308, 309, 310, 311, 312, 313, 314, 315, 02095 316, 317, 318, -574, -574, 0, 0, 321, 322, 0, 02096 579, 581, 0, 0, 0, 110, 0, 0, 110, 110, 02097 585, 203, 203, 0, 0, 105, 203, 110, 579, 581, 02098 203, 0, 0, 0, 110, 110, 324, 325, 326, 327, 02099 328, 329, 330, 331, 332, 333, 108, 0, 0, 605, 02100 0, 0, 0, 0, 610, 0, 0, 0, 105, 0, 02101 0, 110, 110, 203, 0, 0, 203, 0, 0, 105, 02102 105, 0, 0, 110, 0, 0, 0, 0, 203, 108, 02103 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 02104 108, 108, 0, 0, 0, 0, 0, 0, 650, 651, 02105 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 02106 203, 110, 0, 0, 110, 0, 0, 0, 110, 110, 02107 105, 0, 110, 0, 0, 105, 0, 0, 0, 0, 02108 0, 0, 105, 265, 0, 0, 0, 109, 110, 109, 02109 0, 108, 0, 0, 0, 0, 108, 0, 0, 0, 02110 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 02111 0, 0, 0, 0, 0, 105, 0, 106, 0, 106, 02112 0, 0, 0, 0, 203, 0, 0, 0, 203, 0, 02113 0, 0, 110, 0, 109, 78, 108, 78, 267, 0, 02114 203, 0, 0, 110, 0, 0, 0, 0, 0, 0, 02115 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02116 0, 267, 0, 203, 106, 0, 0, 0, 266, 0, 02117 0, 0, 0, 353, 363, 363, 203, 203, 0, 0, 02118 0, 0, 78, 0, 0, 0, 110, 0, 110, 0, 02119 0, 266, 0, 0, 110, 0, 110, 0, 0, 0, 02120 0, 0, 105, 352, 362, 362, 362, 0, 0, 0, 02121 0, 105, 0, 0, 0, 0, 0, 0, 0, 110, 02122 0, 348, 0, 108, 0, 0, 0, 0, 265, 0, 02123 0, 0, 108, 0, 203, 0, 0, 0, 585, 775, 02124 0, 778, 780, 0, 0, 0, 0, 785, 787, -573, 02125 0, 0, 0, 0, 0, 203, 0, -573, -573, -573, 02126 0, 0, -573, -573, -573, 0, -573, 0, 265, 0, 02127 0, 0, 0, 0, 0, 0, -573, 0, 0, 0, 02128 0, 0, 109, 0, 0, 0, -573, -573, 0, -573, 02129 -573, -573, -573, -573, 819, 0, 0, 0, 0, 778, 02130 780, 0, 785, 787, 0, 0, 0, 0, 0, 0, 02131 203, 0, 106, 0, 0, 109, 0, 0, 0, 0, 02132 105, 0, 105, 0, 0, 0, 109, 109, 0, 0, 02133 78, 0, 0, 0, -573, 0, 0, 0, 0, 0, 02134 0, 108, 0, 108, 105, 106, 267, 0, 203, 0, 02135 0, 0, 857, 0, 0, 0, 106, 106, 0, 859, 02136 0, 0, 0, 78, 0, 108, 0, 0, 0, 0, 02137 0, 0, 0, 0, 78, 78, 266, 109, 0, 203, 02138 0, 0, 109, 0, 0, 0, -573, 0, -573, 109, 02139 267, 220, -573, 265, -573, 0, -573, 859, 203, 0, 02140 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 02141 0, 0, 106, 0, 0, 0, 0, 0, 0, 106, 02142 266, 0, 109, 0, 0, 78, 0, 0, 0, 0, 02143 78, 0, 105, 0, 0, 0, 0, 78, 0, 265, 02144 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02145 0, 0, 106, 108, 0, 0, 0, 0, 0, 0, 02146 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02147 78, 0, 0, 0, 0, 0, 0, 0, 0, 105, 02148 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 02149 0, 0, 0, 0, 105, 105, 0, 0, 0, 0, 02150 108, 0, 0, 0, 0, 0, 0, 0, 108, 109, 02151 0, 0, 0, 0, 0, 108, 108, 0, 109, 0, 02152 0, 105, 105, 0, 0, 0, 0, 203, 0, 0, 02153 0, 0, 0, 105, 0, 267, 0, 0, 0, 106, 02154 0, 0, 108, 108, 0, 0, 0, 0, 106, 0, 02155 0, 0, 0, 0, 108, 0, 0, 78, 0, 0, 02156 0, 0, 0, 0, 0, 266, 78, 0, 0, 0, 02157 0, 105, 0, 0, 0, 267, 0, 0, 105, 105, 02158 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 02159 0, 0, 108, 0, 0, 0, 0, 0, 105, 108, 02160 108, 0, 0, 108, 0, 266, 0, 0, 0, 0, 02161 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 02162 361, 0, 0, 0, 0, 0, 0, 109, 0, 109, 02163 0, 0, 0, 0, 0, 0, 0, 0, 915, 0, 02164 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 02165 0, 109, 0, 105, 0, 0, 0, 106, 0, 106, 02166 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 02167 0, 0, 0, 0, 108, 78, 0, 78, 0, 0, 02168 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 02169 0, 0, 0, 0, 0, 0, 105, 0, 105, 78, 02170 267, 0, 0, 0, 105, 0, 105, 0, 0, 0, 02171 0, 0, 0, 0, 0, 0, 0, 108, 0, 108, 02172 0, 0, 0, 0, 0, 108, 0, 108, 0, 0, 02173 266, 760, 0, 0, 0, 0, 0, 0, 0, 109, 02174 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 02175 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02176 0, 0, 308, -574, -574, -574, -574, 313, 314, 106, 02177 0, -574, -574, 0, 0, 0, 266, 321, 322, 0, 02178 0, 0, 0, 0, 0, 0, 109, 78, 0, 0, 02179 0, 0, 0, 0, 109, 495, 0, 0, 0, 0, 02180 0, 109, 109, 0, 0, 0, 324, 325, 326, 327, 02181 328, 329, 330, 331, 332, 333, 106, 0, 0, 0, 02182 0, 0, 0, 0, 106, 0, 0, 0, 109, 109, 02183 0, 106, 106, 0, 78, 0, 0, 0, 0, 0, 02184 109, 0, 78, 0, 0, 0, 0, 0, 0, 78, 02185 78, 308, 309, 310, 311, 312, 313, 314, 106, 106, 02186 317, 318, 0, 0, 0, 0, 321, 322, 0, 0, 02187 106, 0, 0, 0, 0, 0, 78, 78, 109, 0, 02188 0, 0, 0, 0, 0, 109, 109, 0, 78, 109, 02189 0, 0, 0, 0, 0, 324, 325, 326, 327, 328, 02190 329, 330, 331, 332, 333, 109, 0, 0, 106, 0, 02191 0, 0, 0, 0, 0, 106, 106, 0, 0, 106, 02192 0, 0, 0, 0, 0, 0, 78, 363, 0, 0, 02193 0, 0, 0, 78, 78, 106, 0, 78, 0, 0, 02194 0, 0, 0, 0, 0, 917, 0, 0, 0, 109, 02195 0, 0, 0, 78, 0, 0, 0, 362, 0, 0, 02196 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02197 0, 0, 0, 0, 0, 916, 0, 0, 0, 106, 02198 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02199 106, 0, 0, 913, 0, 0, 0, 78, 0, 0, 02200 0, 0, 0, 109, 0, 109, 0, 0, 78, 0, 02201 0, 109, 0, 109, 0, 0, 0, 0, 0, 0, 02202 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02203 0, 0, 0, 106, 0, 106, 0, 0, 0, 0, 02204 0, 106, 0, 106, 0, 0, 0, 0, 0, 0, 02205 0, 78, 0, 78, 0, 0, 0, 0, 0, 78, 02206 0, 78, -573, 4, 0, 5, 6, 7, 8, 9, 02207 0, 0, 0, 10, 11, 0, 0, 0, 12, 0, 02208 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02209 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02210 0, 27, 0, 0, 0, 0, 0, 28, 29, 30, 02211 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02212 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02213 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02214 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02215 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02216 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02217 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02218 0, 0, 0, -285, 61, 62, 63, 0, 0, 0, 02219 0, -285, -285, -285, 0, 0, -285, -285, -285, 0, 02220 -285, 0, 0, 0, 0, 0, 0, -573, 0, -573, 02221 -285, -285, -285, 0, 0, 0, 0, 0, 0, 0, 02222 -285, -285, 0, -285, -285, -285, -285, -285, 0, 0, 02223 0, 0, 0, 0, 308, 309, 310, 311, 312, 313, 02224 314, 315, 316, 317, 318, 319, 320, 0, 0, 321, 02225 322, -285, -285, -285, -285, -285, -285, -285, -285, -285, 02226 -285, -285, -285, -285, 0, 0, -285, -285, -285, 0, 02227 724, -285, 0, 0, 0, 0, 323, -285, 324, 325, 02228 326, 327, 328, 329, 330, 331, 332, 333, 0, 0, 02229 -285, 0, -105, -285, -285, -285, -285, -285, -285, -285, 02230 -285, -285, -285, -285, -285, 0, 0, 0, 0, 0, 02231 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 02232 -285, -285, -285, -285, -411, 0, -285, -285, -285, 0, 02233 -285, 0, -411, -411, -411, 0, 0, -411, -411, -411, 02234 0, -411, 0, 0, 0, 0, 0, 0, 0, 0, 02235 -411, -411, -411, 0, 0, 0, 0, 0, 0, 0, 02236 0, -411, -411, 0, -411, -411, -411, -411, -411, 0, 02237 0, 0, 0, 0, 0, 308, 309, 310, 311, 312, 02238 313, 314, 315, 316, 317, 318, 319, 320, 0, 0, 02239 321, 322, -411, -411, -411, -411, -411, -411, -411, -411, 02240 -411, -411, -411, -411, -411, 0, 0, -411, -411, -411, 02241 0, 0, -411, 0, 0, 0, 0, 323, -411, 324, 02242 325, 326, 327, 328, 329, 330, 331, 332, 333, 0, 02243 0, 0, 0, 0, -411, 0, -411, -411, -411, -411, 02244 -411, -411, -411, -411, -411, -411, 0, 0, 0, 0, 02245 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02246 -411, -411, -411, -411, -411, -279, 220, -411, -411, -411, 02247 0, -411, 0, -279, -279, -279, 0, 0, -279, -279, 02248 -279, 0, -279, 0, 0, 0, 0, 0, 0, 0, 02249 0, 0, -279, -279, -279, 0, 0, 0, 0, 0, 02250 0, 0, -279, -279, 0, -279, -279, -279, -279, -279, 02251 0, 0, 0, 0, 0, 0, 308, 309, 310, 311, 02252 312, 313, 314, 315, 0, 317, 318, 0, 0, 0, 02253 0, 321, 322, -279, -279, -279, -279, -279, -279, -279, 02254 -279, -279, -279, -279, -279, -279, 0, 0, -279, -279, 02255 -279, 0, 0, -279, 0, 0, 0, 0, 0, -279, 02256 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 02257 0, 0, -279, 0, 0, -279, -279, -279, -279, -279, 02258 -279, -279, -279, -279, -279, -279, -279, 0, 0, 0, 02259 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02260 0, 0, -279, -279, -279, -279, -573, 0, -279, -279, 02261 -279, 0, -279, 0, -573, -573, -573, 0, 0, -573, 02262 -573, -573, 0, -573, 0, 0, 0, 0, 0, 0, 02263 0, 0, -573, -573, -573, 0, 0, 0, 0, 0, 02264 0, 0, 0, -573, -573, 0, -573, -573, -573, -573, 02265 -573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02266 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02267 0, 0, 0, 0, -573, -573, -573, -573, -573, -573, 02268 -573, -573, -573, -573, -573, -573, -573, 0, 0, -573, 02269 -573, -573, 0, 0, -573, 0, 0, 0, 0, 0, 02270 -573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02271 0, 0, 0, 0, 0, 0, -573, 0, -573, -573, 02272 -573, -573, -573, -573, -573, -573, -573, -573, 0, 0, 02273 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02274 0, 0, -573, -573, -573, -573, -573, -292, 220, -573, 02275 -573, -573, 0, -573, 0, -292, -292, -292, 0, 0, 02276 -292, -292, -292, 0, -292, 0, 0, 0, 0, 0, 02277 0, 0, 0, 0, -292, -292, 0, 0, 0, 0, 02278 0, 0, 0, 0, -292, -292, 0, -292, -292, -292, 02279 -292, -292, 0, 0, 0, 0, 0, 0, 0, 0, 02280 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02281 0, 0, 0, 0, 0, -292, -292, -292, -292, -292, 02282 -292, -292, -292, -292, -292, -292, -292, -292, 0, 0, 02283 -292, -292, -292, 0, 0, -292, 0, 0, 0, 0, 02284 0, -292, 0, 0, 0, 0, 0, 0, 0, 0, 02285 0, 0, 0, 0, 0, 0, 0, -292, 0, -292, 02286 -292, -292, -292, -292, -292, -292, -292, -292, -292, 0, 02287 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02288 0, 0, 0, 0, -292, -292, -292, -292, -555, 217, 02289 -292, -292, -292, 0, -292, 0, -555, -555, -555, 0, 02290 0, 0, -555, -555, 0, -555, 0, 0, 0, 0, 02291 0, 0, 0, 0, -555, 0, 0, 0, 0, 0, 02292 0, 0, 0, 0, 0, -555, -555, 0, -555, -555, 02293 -555, -555, -555, 0, 0, 0, 0, 0, 0, 0, 02294 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02295 0, 0, 0, 0, 0, 0, -555, -555, -555, -555, 02296 -555, -555, -555, -555, -555, -555, -555, -555, -555, 0, 02297 0, -555, -555, -555, -285, 665, 0, 0, 0, 0, 02298 0, 0, -285, -285, -285, 0, 0, 0, -285, -285, 02299 0, -285, 0, 0, 0, 0, 0, -103, -555, 0, 02300 -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, 02301 0, -285, -285, 0, -285, -285, -285, -285, -285, 0, 02302 0, 0, 0, 0, -555, -555, -555, -555, -94, 0, 02303 0, -555, 0, -555, 0, -555, 0, 0, 0, 0, 02304 0, 0, -285, -285, -285, -285, -285, -285, -285, -285, 02305 -285, -285, -285, -285, -285, 0, 0, -285, -285, -285, 02306 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 02307 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02308 0, 0, 0, -105, -285, 0, -285, -285, -285, -285, 02309 -285, -285, -285, -285, -285, -285, 0, 0, 0, 0, 02310 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02311 0, -285, -285, -285, -96, 0, 0, -285, 0, -285, 02312 241, -285, 5, 6, 7, 8, 9, -573, -573, -573, 02313 10, 11, 0, 0, -573, 12, 0, 13, 14, 15, 02314 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02315 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02316 0, 0, 0, 0, 28, 29, 0, 31, 32, 33, 02317 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02318 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02320 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02321 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02322 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02323 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02324 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 02325 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02326 0, 0, 0, 0, -573, 241, -573, 5, 6, 7, 02327 8, 9, 0, 0, -573, 10, 11, 0, -573, -573, 02328 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02329 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02330 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02331 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02332 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02333 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02334 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02335 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02336 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02337 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02338 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02339 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02340 0, 0, 0, 0, 0, 0, 0, 0, 0, -573, 02341 241, -573, 5, 6, 7, 8, 9, 0, 0, -573, 02342 10, 11, 0, 0, -573, 12, -573, 13, 14, 15, 02343 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02344 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02345 0, 0, 0, 0, 28, 29, 0, 31, 32, 33, 02346 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02347 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02348 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02349 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02350 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02351 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02352 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02353 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 02354 4, 0, 5, 6, 7, 8, 9, 0, 0, 0, 02355 10, 11, 0, 0, -573, 12, -573, 13, 14, 15, 02356 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02357 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02358 0, 0, 0, 0, 28, 29, 30, 31, 32, 33, 02359 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02360 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02361 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02362 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02363 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02364 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02365 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02366 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 02367 0, 0, 0, 0, 0, 0, -573, 0, 0, 0, 02368 0, 0, 0, 0, -573, 241, -573, 5, 6, 7, 02369 8, 9, 0, 0, -573, 10, 11, 0, 0, -573, 02370 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02371 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02372 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02373 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02374 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02375 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02376 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02377 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02378 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02379 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02380 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02381 0, 0, 0, 0, 0, 241, 0, 5, 6, 7, 02382 8, 9, 0, -573, -573, 10, 11, 0, 0, -573, 02383 12, -573, 13, 14, 15, 16, 17, 18, 19, 0, 02384 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02385 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02386 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02387 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02388 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02389 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02390 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02391 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02392 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02393 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02394 0, 0, 0, 0, 0, 241, 0, 5, 6, 7, 02395 8, 9, 0, 0, 0, 10, 11, 0, 0, -573, 02396 12, -573, 13, 14, 15, 16, 17, 18, 19, 0, 02397 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02398 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02399 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02400 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02401 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02402 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02403 48, 0, 0, 242, 50, 0, 51, 52, 0, 53, 02404 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02405 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02406 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02407 0, 0, 0, 0, 0, 241, 0, 5, 6, 7, 02408 8, 9, 0, 0, 0, 10, 11, -573, 0, -573, 02409 12, -573, 13, 14, 15, 16, 17, 18, 19, 0, 02410 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02411 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02412 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02413 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02414 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02415 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02416 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02417 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02418 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02419 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02420 0, 0, 0, 0, 0, 241, 0, 5, 6, 7, 02421 8, 9, 0, 0, 0, 10, 11, -573, 0, -573, 02422 12, -573, 13, 14, 15, 16, 17, 18, 19, 0, 02423 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02424 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02425 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02426 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02427 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02428 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02429 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02430 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02431 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02432 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02433 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02434 0, -573, 0, 0, 0, 0, 0, 0, 0, -573, 02435 241, -573, 5, 6, 7, 8, 9, 0, 0, -573, 02436 10, 11, 0, 0, 0, 12, 0, 13, 14, 15, 02437 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02438 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02439 0, 0, 0, 0, 28, 29, 0, 31, 32, 33, 02440 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02441 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02442 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02443 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02444 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02445 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02446 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02447 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 02448 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02449 10, 11, 0, 0, -573, 12, -573, 13, 14, 15, 02450 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02451 21, 22, 23, 24, 25, 26, 0, 0, 194, 0, 02452 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02453 34, 35, 36, 37, 38, 39, 40, 195, 41, 42, 02454 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02455 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02456 0, 0, 0, 0, 0, 196, 0, 0, 197, 50, 02457 0, 51, 52, 0, 198, 199, 54, 55, 56, 57, 02458 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02459 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02460 11, 61, 200, 63, 12, 0, 13, 14, 15, 16, 02461 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 02462 22, 23, 24, 25, 26, 0, 224, 27, 0, 0, 02463 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02464 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02465 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02466 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02467 0, 0, 0, 0, 196, 0, 0, 197, 50, 0, 02468 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02469 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02470 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02471 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 02472 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02473 11, 0, 0, 288, 12, 289, 13, 14, 15, 16, 02474 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 02475 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 02476 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02477 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02478 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02479 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02480 0, 0, 0, 0, 196, 0, 0, 197, 50, 0, 02481 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02482 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02483 5, 6, 7, 8, 9, 0, 0, 0, 10, 11, 02484 61, 62, 63, 12, 0, 13, 14, 15, 16, 17, 02485 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02486 23, 24, 25, 26, 0, 224, 27, 0, 0, 0, 02487 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, 02488 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02489 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02490 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02491 0, 0, 0, 48, 0, 0, 49, 50, 0, 51, 02492 52, 0, 53, 0, 54, 55, 56, 57, 58, 59, 02493 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02494 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 02495 62, 63, 0, 0, 0, 0, 0, 0, 5, 6, 02496 7, 8, 9, 0, 0, 0, 10, 11, 0, 0, 02497 0, 12, 474, 13, 14, 15, 16, 17, 18, 19, 02498 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 02499 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 02500 28, 29, 0, 31, 32, 33, 34, 35, 36, 37, 02501 38, 39, 40, 0, 41, 42, 0, 43, 44, 45, 02502 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02503 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02504 0, 48, 0, 0, 49, 50, 0, 51, 52, 0, 02505 53, 0, 54, 55, 56, 57, 58, 59, 60, 0, 02506 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02507 0, 0, 0, 0, 0, 0, 0, 61, 62, 63, 02508 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02509 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02510 474, 113, 114, 115, 116, 117, 118, 119, 120, 121, 02511 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 02512 132, 133, 134, 135, 136, 0, 0, 0, 137, 138, 02513 139, 365, 366, 367, 368, 144, 145, 146, 0, 0, 02514 0, 0, 0, 147, 148, 149, 150, 369, 370, 371, 02515 372, 155, 37, 38, 373, 40, 0, 0, 0, 0, 02516 0, 0, 0, 0, 157, 158, 159, 160, 161, 162, 02517 163, 164, 165, 0, 0, 166, 167, 0, 0, 168, 02518 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 02519 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 02520 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02521 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 02522 0, 183, 184, 0, 0, 0, 0, 0, -548, -548, 02523 -548, 0, -548, 0, 0, 0, -548, -548, 0, 185, 02524 374, -548, 0, -548, -548, -548, -548, -548, -548, -548, 02525 0, -548, 0, 0, 0, -548, -548, -548, -548, -548, 02526 -548, -548, 0, 0, -548, 0, 0, 0, 0, 0, 02527 0, -548, 0, 0, -548, -548, -548, -548, -548, -548, 02528 -548, -548, -548, -548, -548, -548, 0, -548, -548, -548, 02529 0, -548, -548, 0, 0, 0, 0, 0, 0, 0, 02530 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02531 0, -548, 0, 0, -548, -548, 0, -548, -548, 0, 02532 -548, -548, -548, -548, -548, -548, -548, -548, -548, 0, 02533 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02534 0, 0, 0, 0, 0, 0, 0, -548, -548, -548, 02535 0, 0, 0, 0, 0, -549, -549, -549, 0, -549, 02536 0, -548, 0, -549, -549, 0, 0, -548, -549, 0, 02537 -549, -549, -549, -549, -549, -549, -549, 0, -549, 0, 02538 0, 0, -549, -549, -549, -549, -549, -549, -549, 0, 02539 0, -549, 0, 0, 0, 0, 0, 0, -549, 0, 02540 0, -549, -549, -549, -549, -549, -549, -549, -549, -549, 02541 -549, -549, -549, 0, -549, -549, -549, 0, -549, -549, 02542 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02543 0, 0, 0, 0, 0, 0, 0, 0, -549, 0, 02544 0, -549, -549, 0, -549, -549, 0, -549, -549, -549, 02545 -549, -549, -549, -549, -549, -549, 0, 0, 0, 0, 02546 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02547 0, 0, 0, 0, -549, -549, -549, 0, 0, 0, 02548 0, 0, -551, -551, -551, 0, -551, 0, -549, 0, 02549 -551, -551, 0, 0, -549, -551, 0, -551, -551, -551, 02550 -551, -551, -551, -551, 0, 0, 0, 0, 0, -551, 02551 -551, -551, -551, -551, -551, -551, 0, 0, -551, 0, 02552 0, 0, 0, 0, 0, -551, 0, 0, -551, -551, 02553 -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, 02554 0, -551, -551, -551, 0, -551, -551, 0, 0, 0, 02555 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02556 0, 0, 0, 0, 0, -551, 723, 0, -551, -551, 02557 0, -551, -551, 0, -551, -551, -551, -551, -551, -551, 02558 -551, -551, -551, 0, 0, 0, 0, 0, -103, 0, 02559 0, 0, 0, 0, 0, 0, -553, -553, -553, 0, 02560 -553, -551, -551, -551, -553, -553, 0, 0, 0, -553, 02561 0, -553, -553, -553, -553, -553, -553, -553, 0, 0, 02562 0, -551, 0, -553, -553, -553, -553, -553, -553, -553, 02563 0, 0, -553, 0, 0, 0, 0, 0, 0, -553, 02564 0, 0, -553, -553, -553, -553, -553, -553, -553, -553, 02565 -553, -553, -553, -553, 0, -553, -553, -553, 0, -553, 02566 -553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02567 0, 0, 0, 0, 0, 0, 0, 0, 0, -553, 02568 0, 0, -553, -553, 0, -553, -553, 0, -553, -553, 02569 -553, -553, -553, -553, -553, -553, -553, 0, 0, 0, 02570 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02571 -554, -554, -554, 0, -554, -553, -553, -553, -554, -554, 02572 0, 0, 0, -554, 0, -554, -554, -554, -554, -554, 02573 -554, -554, 0, 0, 0, -553, 0, -554, -554, -554, 02574 -554, -554, -554, -554, 0, 0, -554, 0, 0, 0, 02575 0, 0, 0, -554, 0, 0, -554, -554, -554, -554, 02576 -554, -554, -554, -554, -554, -554, -554, -554, 0, -554, 02577 -554, -554, 0, -554, -554, 0, 0, 0, 0, 0, 02578 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02579 0, 0, 0, -554, 0, 0, -554, -554, 0, -554, 02580 -554, 0, -554, -554, -554, -554, -554, -554, -554, -554, 02581 -554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02582 0, 0, 0, 0, 0, 0, 0, 0, 0, -554, 02583 -554, -554, 0, 0, 0, 0, 0, 0, 0, 0, 02584 0, 0, 0, 0, 0, 0, 0, 0, 0, -554, 02585 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 02586 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 02587 133, 134, 135, 136, 0, 0, 0, 137, 138, 139, 02588 140, 141, 142, 143, 144, 145, 146, 0, 0, 0, 02589 0, 0, 147, 148, 149, 150, 151, 152, 153, 154, 02590 155, 270, 271, 156, 272, 0, 0, 0, 0, 0, 02591 0, 0, 0, 157, 158, 159, 160, 161, 162, 163, 02592 164, 165, 0, 0, 166, 167, 0, 0, 168, 169, 02593 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 02594 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 02595 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 02596 174, 175, 176, 177, 178, 179, 180, 181, 182, 0, 02597 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, 02598 0, 0, 0, 0, 0, 0, 0, 0, 185, 113, 02599 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 02600 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 02601 134, 135, 136, 0, 0, 0, 137, 138, 139, 140, 02602 141, 142, 143, 144, 145, 146, 0, 0, 0, 0, 02603 0, 147, 148, 149, 150, 151, 152, 153, 154, 155, 02604 226, 0, 156, 0, 0, 0, 0, 0, 0, 0, 02605 0, 0, 157, 158, 159, 160, 161, 162, 163, 164, 02606 165, 0, 0, 166, 167, 0, 0, 168, 169, 170, 02607 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02608 0, 172, 0, 0, 55, 0, 0, 0, 0, 0, 02609 0, 0, 0, 0, 0, 0, 0, 0, 173, 174, 02610 175, 176, 177, 178, 179, 180, 181, 182, 0, 183, 02611 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02612 0, 0, 0, 0, 0, 0, 0, 185, 113, 114, 02613 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 02614 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 02615 135, 136, 0, 0, 0, 137, 138, 139, 140, 141, 02616 142, 143, 144, 145, 146, 0, 0, 0, 0, 0, 02617 147, 148, 149, 150, 151, 152, 153, 154, 155, 0, 02618 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 02619 0, 157, 158, 159, 160, 161, 162, 163, 164, 165, 02620 0, 0, 166, 167, 0, 0, 168, 169, 170, 171, 02621 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02622 172, 0, 0, 55, 0, 0, 0, 0, 0, 0, 02623 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, 02624 176, 177, 178, 179, 180, 181, 182, 0, 183, 184, 02625 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02626 0, 0, 0, 0, 0, 0, 185, 113, 114, 115, 02627 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 02628 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 02629 136, 0, 0, 0, 137, 138, 139, 140, 141, 142, 02630 143, 144, 145, 146, 0, 0, 0, 0, 0, 147, 02631 148, 149, 150, 151, 152, 153, 154, 155, 0, 0, 02632 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02633 157, 158, 159, 160, 161, 162, 163, 164, 165, 0, 02634 0, 166, 167, 0, 0, 168, 169, 170, 171, 0, 02635 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 02636 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02637 0, 0, 0, 0, 0, 0, 173, 174, 175, 176, 02638 177, 178, 179, 180, 181, 182, 0, 183, 184, 0, 02639 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02640 11, 0, 0, 0, 12, 185, 13, 14, 15, 231, 02641 232, 18, 19, 0, 0, 0, 0, 0, 233, 234, 02642 235, 23, 24, 25, 26, 0, 0, 194, 0, 0, 02643 0, 0, 0, 0, 258, 0, 0, 32, 33, 34, 02644 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02645 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 02646 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02647 0, 0, 0, 0, 259, 0, 0, 197, 50, 0, 02648 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02649 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02650 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02651 260, 10, 11, 0, 0, 0, 12, 0, 13, 14, 02652 15, 231, 232, 18, 19, 0, 0, 0, 261, 0, 02653 233, 234, 235, 23, 24, 25, 26, 0, 0, 194, 02654 0, 0, 0, 0, 0, 0, 258, 0, 0, 32, 02655 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 02656 42, 0, 43, 44, 45, 0, 0, 0, 0, 0, 02657 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02658 0, 0, 0, 0, 0, 0, 259, 0, 0, 197, 02659 50, 0, 51, 52, 0, 0, 0, 54, 55, 56, 02660 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 02661 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 02662 0, 0, 260, 10, 11, 0, 0, 0, 12, 0, 02663 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02664 490, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02665 0, 27, 0, 0, 0, 0, 0, 28, 29, 30, 02666 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02667 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02668 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02669 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02670 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02671 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02672 0, 0, 0, 0, 5, 6, 7, 8, 9, 0, 02673 0, 0, 10, 11, 61, 62, 63, 12, 0, 13, 02674 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 02675 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 02676 27, 0, 0, 0, 0, 0, 28, 29, 0, 31, 02677 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02678 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02679 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02680 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 02681 49, 50, 0, 51, 52, 0, 53, 0, 54, 55, 02682 56, 57, 58, 59, 60, 0, 0, 0, 0, 0, 02683 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02684 0, 10, 11, 61, 62, 63, 12, 0, 13, 14, 02685 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 02686 20, 21, 22, 23, 24, 25, 26, 0, 0, 194, 02687 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 02688 33, 34, 35, 36, 37, 38, 39, 40, 195, 41, 02689 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02690 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02691 0, 0, 0, 0, 0, 0, 196, 0, 0, 197, 02692 50, 0, 51, 52, 0, 198, 199, 54, 55, 56, 02693 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 02694 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02695 10, 11, 61, 200, 63, 12, 0, 13, 14, 15, 02696 231, 232, 18, 19, 0, 0, 0, 0, 0, 233, 02697 234, 235, 23, 24, 25, 26, 0, 0, 194, 0, 02698 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02699 34, 35, 36, 37, 38, 39, 40, 195, 41, 42, 02700 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02701 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02702 0, 0, 0, 0, 0, 196, 0, 0, 197, 50, 02703 0, 51, 52, 0, 587, 199, 54, 55, 56, 57, 02704 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02705 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02706 11, 61, 200, 63, 12, 0, 13, 14, 15, 231, 02707 232, 18, 19, 0, 0, 0, 0, 0, 233, 234, 02708 235, 23, 24, 25, 26, 0, 0, 194, 0, 0, 02709 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02710 35, 36, 37, 38, 39, 40, 195, 41, 42, 0, 02711 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02712 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02713 0, 0, 0, 0, 196, 0, 0, 197, 50, 0, 02714 51, 52, 0, 198, 0, 54, 55, 56, 57, 58, 02715 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02716 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02717 61, 200, 63, 12, 0, 13, 14, 15, 231, 232, 02718 18, 19, 0, 0, 0, 0, 0, 233, 234, 235, 02719 23, 24, 25, 26, 0, 0, 194, 0, 0, 0, 02720 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02721 36, 37, 38, 39, 40, 195, 41, 42, 0, 43, 02722 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02723 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02724 0, 0, 0, 196, 0, 0, 197, 50, 0, 51, 02725 52, 0, 0, 199, 54, 55, 56, 57, 58, 59, 02726 60, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02727 6, 7, 0, 9, 0, 0, 0, 10, 11, 61, 02728 200, 63, 12, 0, 13, 14, 15, 231, 232, 18, 02729 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02730 24, 25, 26, 0, 0, 194, 0, 0, 0, 0, 02731 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 02732 37, 38, 39, 40, 195, 41, 42, 0, 43, 44, 02733 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 02734 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02735 0, 0, 196, 0, 0, 197, 50, 0, 51, 52, 02736 0, 587, 0, 54, 55, 56, 57, 58, 59, 60, 02737 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 02738 7, 0, 9, 0, 0, 0, 10, 11, 61, 200, 02739 63, 12, 0, 13, 14, 15, 231, 232, 18, 19, 02740 0, 0, 0, 0, 0, 233, 234, 235, 23, 24, 02741 25, 26, 0, 0, 194, 0, 0, 0, 0, 0, 02742 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 02743 38, 39, 40, 195, 41, 42, 0, 43, 44, 45, 02744 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02745 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02746 0, 196, 0, 0, 197, 50, 0, 51, 52, 0, 02747 0, 0, 54, 55, 56, 57, 58, 59, 60, 0, 02748 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 02749 0, 9, 0, 0, 0, 10, 11, 61, 200, 63, 02750 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02751 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02752 26, 0, 0, 194, 0, 0, 0, 0, 0, 0, 02753 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 02754 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02755 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02756 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02757 196, 0, 0, 197, 50, 0, 51, 52, 0, 484, 02758 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02759 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 02760 9, 0, 0, 0, 10, 11, 61, 200, 63, 12, 02761 0, 13, 14, 15, 231, 232, 18, 19, 0, 0, 02762 0, 0, 0, 233, 234, 235, 23, 24, 25, 26, 02763 0, 0, 194, 0, 0, 0, 0, 0, 0, 29, 02764 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 02765 40, 0, 41, 42, 0, 43, 44, 45, 0, 46, 02766 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02767 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 02768 0, 0, 197, 50, 0, 51, 52, 0, 198, 0, 02769 54, 55, 56, 57, 58, 59, 60, 0, 0, 0, 02770 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 02771 0, 0, 0, 10, 11, 61, 200, 63, 12, 0, 02772 13, 14, 15, 231, 232, 18, 19, 0, 0, 0, 02773 0, 0, 233, 234, 235, 23, 24, 25, 26, 0, 02774 0, 194, 0, 0, 0, 0, 0, 0, 29, 0, 02775 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02776 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02777 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02778 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 02779 0, 197, 50, 0, 51, 52, 0, 772, 0, 54, 02780 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02781 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02782 0, 0, 10, 11, 61, 200, 63, 12, 0, 13, 02783 14, 15, 231, 232, 18, 19, 0, 0, 0, 0, 02784 0, 233, 234, 235, 23, 24, 25, 26, 0, 0, 02785 194, 0, 0, 0, 0, 0, 0, 29, 0, 0, 02786 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02787 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02788 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02789 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 02790 197, 50, 0, 51, 52, 0, 484, 0, 54, 55, 02791 56, 57, 58, 59, 60, 0, 0, 0, 0, 0, 02792 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02793 0, 10, 11, 61, 200, 63, 12, 0, 13, 14, 02794 15, 231, 232, 18, 19, 0, 0, 0, 0, 0, 02795 233, 234, 235, 23, 24, 25, 26, 0, 0, 194, 02796 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 02797 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 02798 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02799 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02800 0, 0, 0, 0, 0, 0, 196, 0, 0, 197, 02801 50, 0, 51, 52, 0, 587, 0, 54, 55, 56, 02802 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 02803 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02804 10, 11, 61, 200, 63, 12, 0, 13, 14, 15, 02805 231, 232, 18, 19, 0, 0, 0, 0, 0, 233, 02806 234, 235, 23, 24, 25, 26, 0, 0, 194, 0, 02807 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02808 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02809 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02810 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02811 0, 0, 0, 0, 0, 196, 0, 0, 197, 50, 02812 0, 51, 52, 0, 0, 0, 54, 55, 56, 57, 02813 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02814 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02815 11, 61, 200, 63, 12, 0, 13, 14, 15, 16, 02816 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 02817 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 02818 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02819 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02820 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02821 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02822 0, 0, 0, 0, 196, 0, 0, 197, 50, 0, 02823 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02824 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02825 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02826 61, 62, 63, 12, 0, 13, 14, 15, 16, 17, 02827 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02828 23, 24, 25, 26, 0, 0, 194, 0, 0, 0, 02829 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02830 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02831 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02832 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02833 0, 0, 0, 196, 0, 0, 197, 50, 0, 51, 02834 52, 0, 0, 0, 54, 55, 56, 57, 58, 59, 02835 60, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02836 6, 7, 0, 9, 0, 0, 0, 10, 11, 61, 02837 200, 63, 12, 0, 13, 14, 15, 231, 232, 18, 02838 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02839 24, 25, 26, 0, 0, 194, 0, 0, 0, 0, 02840 0, 0, 258, 0, 0, 32, 33, 34, 35, 36, 02841 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02842 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02843 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02844 0, 0, 259, 0, 0, 304, 50, 0, 51, 52, 02845 0, 305, 0, 54, 55, 56, 57, 58, 59, 60, 02846 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02847 0, 0, 10, 11, 0, 0, 0, 12, 260, 13, 02848 14, 15, 231, 232, 18, 19, 0, 0, 0, 0, 02849 0, 233, 234, 235, 23, 24, 25, 26, 0, 0, 02850 194, 0, 0, 0, 0, 0, 0, 258, 0, 0, 02851 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02852 41, 42, 0, 43, 44, 45, 0, 0, 0, 0, 02853 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02854 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 02855 49, 50, 0, 51, 52, 0, 53, 0, 54, 55, 02856 56, 57, 58, 59, 60, 0, 0, 0, 0, 5, 02857 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02858 0, 0, 12, 260, 13, 14, 15, 231, 232, 18, 02859 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02860 24, 25, 26, 0, 0, 194, 0, 0, 0, 0, 02861 0, 0, 258, 0, 0, 32, 33, 34, 354, 36, 02862 37, 38, 355, 40, 0, 41, 42, 0, 43, 44, 02863 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02864 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 02865 0, 0, 357, 0, 0, 197, 50, 0, 51, 52, 02866 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02867 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02868 0, 0, 10, 11, 0, 0, 0, 12, 260, 13, 02869 14, 15, 231, 232, 18, 19, 0, 0, 0, 0, 02870 0, 233, 234, 235, 23, 24, 25, 26, 0, 0, 02871 194, 0, 0, 0, 0, 0, 0, 258, 0, 0, 02872 32, 33, 34, 354, 36, 37, 38, 355, 40, 0, 02873 41, 42, 0, 43, 44, 45, 0, 0, 0, 0, 02874 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02875 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 02876 197, 50, 0, 51, 52, 0, 0, 0, 54, 55, 02877 56, 57, 58, 59, 60, 0, 0, 0, 0, 5, 02878 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02879 0, 0, 12, 260, 13, 14, 15, 231, 232, 18, 02880 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02881 24, 25, 26, 0, 0, 194, 0, 0, 0, 0, 02882 0, 0, 258, 0, 0, 32, 33, 34, 35, 36, 02883 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02884 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02885 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02886 0, 0, 259, 0, 0, 304, 50, 0, 51, 52, 02887 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02888 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02889 0, 0, 10, 11, 0, 0, 0, 12, 260, 13, 02890 14, 15, 231, 232, 18, 19, 0, 0, 0, 0, 02891 0, 233, 234, 235, 23, 24, 25, 26, 0, 0, 02892 194, 0, 0, 0, 0, 0, 0, 258, 0, 0, 02893 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02894 41, 42, 0, 43, 44, 45, 0, 0, 0, 0, 02895 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02896 0, 0, 0, 0, 0, 0, 0, 902, 0, 0, 02897 197, 50, 0, 51, 52, 0, 0, 0, 54, 55, 02898 56, 57, 58, 59, 60, 0, 0, 0, 0, 5, 02899 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02900 0, 0, 12, 260, 13, 14, 15, 231, 232, 18, 02901 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02902 24, 25, 26, 0, 0, 194, 0, 663, 0, 0, 02903 0, 0, 258, 0, 0, 32, 33, 34, 35, 36, 02904 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02905 45, 308, 309, 310, 311, 312, 313, 314, 315, 316, 02906 317, 318, 319, 320, 0, 0, 321, 322, 0, 0, 02907 0, 0, 912, 0, 0, 197, 50, 0, 51, 52, 02908 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02909 0, 0, 0, 323, 0, 324, 325, 326, 327, 328, 02910 329, 330, 331, 332, 333, 0, 0, 0, 260, 0, 02911 525, 526, 0, 0, 527, 0, 0, 0, 0, 0, 02912 0, 0, 0, -241, 157, 158, 159, 160, 161, 162, 02913 163, 164, 165, 0, 0, 166, 167, 0, 0, 168, 02914 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 02915 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 02916 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02917 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 02918 0, 183, 184, 0, 0, 0, 0, 533, 534, 0, 02919 0, 535, 0, 0, 0, 0, 0, 0, 0, 185, 02920 220, 157, 158, 159, 160, 161, 162, 163, 164, 165, 02921 0, 0, 166, 167, 0, 0, 168, 169, 170, 171, 02922 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02923 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02924 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, 02925 176, 177, 178, 179, 180, 181, 182, 0, 183, 184, 02926 0, 0, 0, 0, 591, 526, 0, 0, 592, 0, 02927 0, 0, 0, 0, 0, 0, 185, 220, 157, 158, 02928 159, 160, 161, 162, 163, 164, 165, 0, 0, 166, 02929 167, 0, 0, 168, 169, 170, 171, 0, 0, 0, 02930 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 02931 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02932 0, 0, 0, 0, 173, 174, 175, 176, 177, 178, 02933 179, 180, 181, 182, 0, 183, 184, 0, 0, 0, 02934 0, 594, 534, 0, 0, 595, 0, 0, 0, 0, 02935 0, 0, 0, 185, 220, 157, 158, 159, 160, 161, 02936 162, 163, 164, 165, 0, 0, 166, 167, 0, 0, 02937 168, 169, 170, 171, 0, 0, 0, 0, 0, 0, 02938 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 02939 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02940 0, 173, 174, 175, 176, 177, 178, 179, 180, 181, 02941 182, 0, 183, 184, 0, 0, 0, 0, 617, 526, 02942 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 02943 185, 220, 157, 158, 159, 160, 161, 162, 163, 164, 02944 165, 0, 0, 166, 167, 0, 0, 168, 169, 170, 02945 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02946 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 02947 0, 0, 0, 0, 0, 0, 0, 0, 173, 174, 02948 175, 176, 177, 178, 179, 180, 181, 182, 0, 183, 02949 184, 0, 0, 0, 0, 620, 534, 0, 0, 621, 02950 0, 0, 0, 0, 0, 0, 0, 185, 220, 157, 02951 158, 159, 160, 161, 162, 163, 164, 165, 0, 0, 02952 166, 167, 0, 0, 168, 169, 170, 171, 0, 0, 02953 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 02954 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02955 0, 0, 0, 0, 0, 173, 174, 175, 176, 177, 02956 178, 179, 180, 181, 182, 0, 183, 184, 0, 0, 02957 0, 0, 692, 526, 0, 0, 693, 0, 0, 0, 02958 0, 0, 0, 0, 185, 220, 157, 158, 159, 160, 02959 161, 162, 163, 164, 165, 0, 0, 166, 167, 0, 02960 0, 168, 169, 170, 171, 0, 0, 0, 0, 0, 02961 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 02962 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02963 0, 0, 173, 174, 175, 176, 177, 178, 179, 180, 02964 181, 182, 0, 183, 184, 0, 0, 0, 0, 695, 02965 534, 0, 0, 696, 0, 0, 0, 0, 0, 0, 02966 0, 185, 220, 157, 158, 159, 160, 161, 162, 163, 02967 164, 165, 0, 0, 166, 167, 0, 0, 168, 169, 02968 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 02969 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 02970 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 02971 174, 175, 176, 177, 178, 179, 180, 181, 182, 0, 02972 183, 184, 0, 0, 0, 0, 702, 526, 0, 0, 02973 703, 0, 0, 0, 0, 0, 0, 0, 185, 220, 02974 157, 158, 159, 160, 161, 162, 163, 164, 165, 0, 02975 0, 166, 167, 0, 0, 168, 169, 170, 171, 0, 02976 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 02977 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02978 0, 0, 0, 0, 0, 0, 173, 174, 175, 176, 02979 177, 178, 179, 180, 181, 182, 0, 183, 184, 0, 02980 0, 0, 0, 572, 534, 0, 0, 573, 0, 0, 02981 0, 0, 0, 0, 0, 185, 220, 157, 158, 159, 02982 160, 161, 162, 163, 164, 165, 0, 0, 166, 167, 02983 0, 0, 168, 169, 170, 171, 0, 0, 0, 0, 02984 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 02985 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02986 0, 0, 0, 173, 174, 175, 176, 177, 178, 179, 02987 180, 181, 182, 0, 183, 184, 0, 0, 0, 0, 02988 965, 526, 0, 0, 966, 0, 0, 0, 0, 0, 02989 0, 0, 185, 220, 157, 158, 159, 160, 161, 162, 02990 163, 164, 165, 0, 0, 166, 167, 0, 0, 168, 02991 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 02992 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 02993 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02994 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 02995 0, 183, 184, 0, 0, 0, 0, 971, 526, 0, 02996 0, 972, 0, 0, 0, 0, 0, 0, 0, 185, 02997 220, 157, 158, 159, 160, 161, 162, 163, 164, 165, 02998 0, 0, 166, 167, 0, 0, 168, 169, 170, 171, 02999 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03000 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03001 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, 03002 176, 177, 178, 179, 180, 181, 182, 0, 183, 184, 03003 0, 0, 0, 0, 974, 534, 0, 0, 975, 0, 03004 0, 0, 0, 0, 0, 0, 185, 220, 157, 158, 03005 159, 160, 161, 162, 163, 164, 165, 0, 0, 166, 03006 167, 0, 0, 168, 169, 170, 171, 0, 0, 0, 03007 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 03008 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03009 0, 0, 0, 0, 173, 174, 175, 176, 177, 178, 03010 179, 180, 181, 182, 0, 183, 184, 0, 0, 0, 03011 0, 572, 534, 0, 0, 573, 0, 0, 0, 0, 03012 0, 0, 0, 185, 220, 157, 158, 159, 160, 161, 03013 162, 163, 164, 165, 0, 0, 166, 167, 0, 0, 03014 168, 169, 170, 171, 0, 0, 0, 0, 0, 0, 03015 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 03016 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 03017 0, 173, 174, 175, 176, 177, 178, 179, 180, 181, 03018 182, 663, 183, 184, 0, 0, 308, 309, 310, 311, 03019 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, 03020 185, 321, 322, 0, 0, 308, 309, 310, 311, 312, 03021 313, 314, 315, 316, 317, 318, 319, 320, 0, 0, 03022 321, 322, 0, 0, 0, 0, 0, 0, 323, 0, 03023 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 03024 0, 0, 0, 0, 0, 0, 0, 323, 0, 324, 03025 325, 326, 327, 328, 329, 330, 331, 332, 333 03026 }; 03027 03028 #define yypact_value_is_default(Yystate) \ 03029 (!!((Yystate) == (-747))) 03030 03031 #define yytable_value_is_error(Yytable_value) \ 03032 (!!((Yytable_value) == (-574))) 03033 03034 static const yytype_int16 yycheck[] = 03035 { 03036 2, 55, 340, 28, 2, 454, 4, 52, 593, 16, 03037 17, 335, 307, 20, 307, 8, 547, 213, 16, 17, 03038 8, 566, 20, 27, 53, 29, 84, 22, 8, 87, 03039 546, 87, 4, 22, 619, 28, 49, 91, 252, 76, 03040 28, 2, 256, 4, 404, 357, 1, 65, 28, 51, 03041 52, 49, 50, 749, 450, 53, 746, 13, 334, 627, 03042 336, 53, 680, 25, 62, 762, 684, 454, 13, 16, 03043 17, 65, 26, 20, 396, 55, 400, 26, 76, 25, 03044 440, 0, 404, 27, 76, 83, 84, 576, 577, 87, 03045 88, 89, 90, 87, 490, 29, 88, 89, 90, 13, 03046 242, 25, 378, 379, 51, 851, 828, 85, 76, 694, 03047 136, 91, 87, 16, 17, 110, 147, 20, 85, 568, 03048 705, 110, 146, 399, 25, 401, 85, 653, 452, 61, 03049 87, 16, 17, 62, 109, 20, 276, 25, 278, 56, 03050 280, 13, 742, 37, 38, 87, 114, 109, 51, 52, 03051 195, 427, 109, 198, 199, 826, 701, 28, 113, 849, 03052 138, 139, 304, 763, 709, 140, 25, 109, 736, 737, 03053 25, 13, 139, 107, 106, 146, 13, 453, 140, 138, 03054 139, 143, 136, 632, 140, 147, 109, 136, 244, 145, 03055 145, 147, 147, 142, 140, 941, 892, 142, 140, 197, 03056 145, 145, 147, 147, 653, 207, 896, 904, 930, 140, 03057 217, 213, 219, 220, 25, 886, 140, 413, 220, 217, 03058 746, 219, 220, 749, 261, 223, 244, 225, 552, 242, 03059 719, 145, 230, 147, 50, 293, 294, 295, 296, 140, 03060 564, 601, 142, 241, 242, 632, 235, 147, 109, 238, 03061 244, 563, 140, 147, 258, 873, 99, 302, 826, 708, 03062 828, 932, 307, 261, 25, 661, 87, 83, 84, 261, 03063 217, 87, 219, 145, 140, 147, 305, 553, 600, 601, 03064 241, 140, 25, 341, 342, 140, 25, 343, 959, 565, 03065 806, 304, 85, 87, 292, 293, 294, 295, 296, 297, 03066 298, 299, 85, 145, 302, 147, 304, 305, 145, 307, 03067 147, 59, 60, 305, 217, 109, 219, 26, 886, 887, 03068 292, 708, 109, 849, 142, 851, 49, 467, 335, 140, 03069 875, 292, 217, 335, 219, 56, 297, 335, 145, 337, 03070 147, 87, 873, 341, 342, 138, 139, 336, 88, 343, 03071 395, 396, 690, 140, 334, 302, 139, 26, 356, 404, 03072 307, 140, 930, 109, 932, 359, 892, 85, 147, 662, 03073 109, 85, 109, 302, 61, 26, 85, 140, 307, 140, 03074 15, 142, 17, 928, 679, 87, 384, 385, 973, 85, 03075 85, 959, 437, 400, 590, 440, 421, 140, 400, 142, 03076 614, 140, 400, 85, 143, 140, 85, 223, 147, 225, 03077 412, 413, 401, 450, 142, 941, 85, 104, 105, 399, 03078 138, 139, 424, 136, 142, 139, 424, 136, 421, 138, 03079 139, 880, 85, 421, 85, 433, 85, 142, 427, 484, 03080 140, 421, 138, 139, 139, 452, 426, 147, 85, 142, 03081 452, 85, 450, 490, 452, 384, 385, 139, 450, 146, 03082 139, 85, 822, 424, 453, 68, 85, 136, 85, 138, 03083 139, 451, 433, 142, 197, 87, 85, 293, 294, 295, 03084 296, 483, 298, 299, 68, 136, 139, 138, 139, 138, 03085 139, 142, 490, 396, 85, 37, 38, 109, 490, 668, 03086 822, 223, 139, 548, 138, 139, 675, 230, 109, 52, 03087 514, 54, 55, 56, 57, 139, 119, 120, 121, 242, 03088 139, 138, 139, 861, 246, 341, 342, 143, 532, 867, 03089 139, 26, 728, 52, 437, 530, 538, 56, 540, 85, 03090 356, 530, 587, 538, 542, 552, 544, 138, 139, 538, 03091 552, 545, 546, 56, 552, 600, 601, 564, 85, 584, 03092 59, 60, 564, 144, 553, 559, 564, 137, 566, 567, 03093 106, 551, 574, 575, 576, 577, 565, 87, 615, 574, 03094 575, 304, 140, 563, 106, 574, 575, 87, 590, 593, 03095 85, 584, 138, 139, 87, 85, 584, 140, 68, 109, 03096 68, 548, 14, 15, 584, 85, 604, 609, 85, 109, 03097 140, 138, 139, 658, 17, 619, 109, 615, 56, 608, 03098 609, 574, 575, 615, 661, 145, 25, 951, 52, 94, 03099 54, 55, 56, 57, 679, 143, 638, 146, 640, 697, 03100 642, 136, 700, 138, 139, 137, 140, 142, 138, 139, 03101 52, 653, 54, 55, 56, 57, 654, 711, 138, 139, 03102 10, 138, 139, 661, 662, 89, 61, 665, 666, 661, 03103 65, 95, 96, 671, 672, 109, 952, 679, 680, 140, 03104 682, 140, 684, 140, 406, 140, 140, 89, 410, 734, 03105 694, 140, 116, 415, 96, 119, 8, 600, 13, 697, 03106 87, 705, 700, 701, 698, 61, 87, 137, 430, 104, 03107 105, 709, 109, 435, 116, 54, 710, 719, 716, 717, 03108 140, 145, 109, 140, 63, 64, 728, 772, 109, 140, 03109 68, 711, 679, 662, 87, 52, 665, 666, 796, 52, 03110 742, 111, 671, 672, 140, 743, 744, 87, 104, 105, 03111 106, 567, 144, 140, 549, 15, 109, 755, 803, 140, 03112 2, 763, 4, 765, 87, 767, 768, 489, 52, 109, 03113 54, 55, 56, 57, 16, 17, 140, 822, 20, 117, 03114 118, 119, 120, 121, 145, 783, 109, 140, 604, 791, 03115 109, 140, 794, 114, 140, 793, 140, 140, 796, 10, 03116 140, 88, 800, 801, 140, 9, 804, 49, 50, 10, 03117 137, 140, 806, 10, 808, 61, 140, 140, 140, 542, 03118 62, 544, 820, 137, 140, 114, 52, 137, 54, 55, 03119 56, 57, 834, 835, 140, 837, 68, 839, 840, 140, 03120 140, 83, 84, 137, 842, 87, 56, 140, 140, 68, 03121 842, 83, 84, 56, 783, 140, 140, 140, 104, 105, 03122 106, 140, 860, 89, 83, 84, 864, 140, 860, 95, 03123 96, 873, 142, 142, 61, 140, 424, 875, 90, 88, 03124 61, 697, 954, 736, 700, 117, 118, 119, 120, 121, 03125 116, 93, 904, 119, 689, 114, 115, 116, 117, 118, 03126 119, 120, 121, 953, 906, 907, 908, 96, 910, 911, 03127 640, 706, 642, 57, 91, 880, 142, 104, 105, 106, 03128 918, 849, 920, 104, 105, 106, 653, 746, 926, -1, 03129 928, 654, 934, 935, 936, 937, 52, -1, 54, 55, 03130 56, 57, -1, -1, 951, -1, -1, 54, 55, 951, 03131 57, 953, 954, 951, -1, 197, 63, 64, -1, 939, 03132 -1, -1, -1, 952, -1, 967, 968, 969, 970, 973, 03133 950, -1, -1, 89, -1, 217, -1, 219, 220, 981, 03134 796, 223, -1, 225, -1, 707, -1, 989, 230, -1, 03135 -1, -1, -1, 716, 717, 68, -1, -1, -1, 241, 03136 242, -1, 797, -1, 799, -1, -1, 729, -1, -1, 03137 83, 84, -1, -1, 809, -1, -1, -1, 740, 814, 03138 743, 744, 749, -1, 52, 752, 54, 55, 56, 57, 03139 -1, -1, 755, -1, -1, 765, -1, 767, 768, -1, 03140 -1, -1, -1, 116, 117, 118, 119, 120, 121, -1, 03141 292, 293, 294, 295, 296, 297, 298, 299, -1, -1, 03142 302, 89, 304, -1, -1, 307, -1, 95, -1, 52, 03143 793, 54, 55, 56, 57, 870, 871, 800, 801, -1, 03144 -1, 804, 16, 17, -1, -1, 20, -1, -1, -1, 03145 -1, 813, -1, 335, -1, 337, -1, 820, -1, 341, 03146 342, -1, -1, 825, 834, 835, -1, 837, 830, 839, 03147 840, -1, 46, 47, 356, -1, -1, 51, 52, -1, 03148 -1, -1, -1, -1, 851, -1, 853, -1, 62, 63, 03149 -1, 52, 927, 54, 55, 56, 57, -1, -1, -1, 03150 -1, 864, 384, 385, 40, 41, 42, 43, 44, -1, 03151 -1, -1, -1, -1, -1, -1, -1, -1, 400, -1, 03152 955, -1, 957, -1, -1, 892, -1, 894, 89, -1, 03153 -1, 898, -1, -1, 95, -1, 906, 907, 908, -1, 03154 910, 911, 424, 52, -1, 54, 55, 56, 57, -1, 03155 -1, 433, -1, -1, -1, 918, -1, 920, -1, -1, 03156 -1, -1, -1, 926, 934, 935, 936, 937, -1, -1, 03157 452, -1, -1, -1, 941, -1, 943, -1, -1, 946, 03158 89, -1, -1, -1, -1, -1, 95, 96, -1, -1, 03159 -1, -1, -1, -1, 961, -1, -1, 967, 968, 969, 03160 970, -1, -1, -1, -1, -1, -1, 116, -1, -1, 03161 119, 981, -1, -1, -1, -1, 983, -1, -1, 989, 03162 -1, 195, -1, -1, 198, 199, 200, -1, -1, -1, 03163 2, -1, 4, 142, -1, 52, -1, 54, 55, 56, 03164 57, -1, -1, 217, -1, 219, 220, -1, -1, -1, 03165 -1, 2, -1, 4, -1, -1, -1, -1, -1, -1, 03166 542, -1, 544, 52, -1, 54, 55, 56, 57, -1, 03167 552, -1, 89, -1, -1, -1, -1, 49, 95, 96, 03168 -1, 53, 564, -1, 566, 567, -1, -1, -1, -1, 03169 -1, -1, -1, -1, -1, -1, -1, -1, 49, 116, 03170 89, -1, 119, -1, 76, -1, 95, 96, -1, -1, 03171 -1, -1, -1, -1, -1, -1, 88, 89, 90, 91, 03172 -1, -1, 604, -1, -1, -1, -1, 116, 302, -1, 03173 119, -1, -1, 307, 308, 309, 310, 311, 312, 313, 03174 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 03175 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 03176 -1, 335, -1, -1, -1, -1, -1, -1, -1, -1, 03177 -1, -1, 654, -1, -1, -1, -1, -1, -1, -1, 03178 662, -1, -1, 665, 666, -1, -1, -1, -1, 671, 03179 672, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03180 76, 77, 78, 79, 80, -1, -1, 83, 84, -1, 03181 384, 385, -1, -1, -1, 697, -1, -1, 700, 701, 03182 394, 395, 396, -1, -1, 197, 400, 709, 402, 403, 03183 404, -1, -1, -1, 716, 717, 112, 113, 114, 115, 03184 116, 117, 118, 119, 120, 121, 197, -1, -1, 423, 03185 -1, -1, -1, -1, 428, -1, -1, -1, 230, -1, 03186 -1, 743, 744, 437, -1, -1, 440, -1, -1, 241, 03187 242, -1, -1, 755, -1, -1, -1, -1, 452, 230, 03188 -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, 03189 241, 242, -1, -1, -1, -1, -1, -1, 472, 473, 03190 -1, 783, -1, -1, -1, -1, -1, -1, -1, -1, 03191 484, 793, -1, -1, 796, -1, -1, -1, 800, 801, 03192 292, -1, 804, -1, -1, 297, -1, -1, -1, -1, 03193 -1, -1, 304, 305, -1, -1, -1, 2, 820, 4, 03194 -1, 292, -1, -1, -1, -1, 297, -1, -1, -1, 03195 -1, -1, -1, 304, -1, -1, -1, -1, -1, -1, 03196 -1, -1, -1, -1, -1, 337, -1, 2, -1, 4, 03197 -1, -1, -1, -1, 548, -1, -1, -1, 552, -1, 03198 -1, -1, 864, -1, 49, 2, 337, 4, 53, -1, 03199 564, -1, -1, 875, -1, -1, -1, -1, -1, -1, 03200 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03201 -1, 76, -1, 587, 49, -1, -1, -1, 53, -1, 03202 -1, -1, -1, 88, 89, 90, 600, 601, -1, -1, 03203 -1, -1, 49, -1, -1, -1, 918, -1, 920, -1, 03204 -1, 76, -1, -1, 926, -1, 928, -1, -1, -1, 03205 -1, -1, 424, 88, 89, 90, 91, -1, -1, -1, 03206 -1, 433, -1, -1, -1, -1, -1, -1, -1, 951, 03207 -1, 88, -1, 424, -1, -1, -1, -1, 450, -1, 03208 -1, -1, 433, -1, 658, -1, -1, -1, 662, 663, 03209 -1, 665, 666, -1, -1, -1, -1, 671, 672, 0, 03210 -1, -1, -1, -1, -1, 679, -1, 8, 9, 10, 03211 -1, -1, 13, 14, 15, -1, 17, -1, 490, -1, 03212 -1, -1, -1, -1, -1, -1, 27, -1, -1, -1, 03213 -1, -1, 197, -1, -1, -1, 37, 38, -1, 40, 03214 41, 42, 43, 44, 718, -1, -1, -1, -1, 723, 03215 724, -1, 726, 727, -1, -1, -1, -1, -1, -1, 03216 734, -1, 197, -1, -1, 230, -1, -1, -1, -1, 03217 542, -1, 544, -1, -1, -1, 241, 242, -1, -1, 03218 197, -1, -1, -1, 85, -1, -1, -1, -1, -1, 03219 -1, 542, -1, 544, 566, 230, 261, -1, 772, -1, 03220 -1, -1, 776, -1, -1, -1, 241, 242, -1, 783, 03221 -1, -1, -1, 230, -1, 566, -1, -1, -1, -1, 03222 -1, -1, -1, -1, 241, 242, 261, 292, -1, 803, 03223 -1, -1, 297, -1, -1, -1, 137, -1, 139, 304, 03224 305, 142, 143, 615, 145, -1, 147, 821, 822, -1, 03225 -1, -1, -1, -1, -1, -1, -1, 292, -1, -1, 03226 -1, -1, 297, -1, -1, -1, -1, -1, -1, 304, 03227 305, -1, 337, -1, -1, 292, -1, -1, -1, -1, 03228 297, -1, 654, -1, -1, -1, -1, 304, -1, 661, 03229 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03230 -1, -1, 337, 654, -1, -1, -1, -1, -1, -1, 03231 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03232 337, -1, -1, -1, -1, -1, -1, -1, -1, 701, 03233 -1, -1, -1, -1, -1, -1, -1, 709, -1, -1, 03234 -1, -1, -1, -1, 716, 717, -1, -1, -1, -1, 03235 701, -1, -1, -1, -1, -1, -1, -1, 709, 424, 03236 -1, -1, -1, -1, -1, 716, 717, -1, 433, -1, 03237 -1, 743, 744, -1, -1, -1, -1, 951, -1, -1, 03238 -1, -1, -1, 755, -1, 450, -1, -1, -1, 424, 03239 -1, -1, 743, 744, -1, -1, -1, -1, 433, -1, 03240 -1, -1, -1, -1, 755, -1, -1, 424, -1, -1, 03241 -1, -1, -1, -1, -1, 450, 433, -1, -1, -1, 03242 -1, 793, -1, -1, -1, 490, -1, -1, 800, 801, 03243 -1, -1, 804, -1, -1, -1, -1, -1, -1, -1, 03244 -1, -1, 793, -1, -1, -1, -1, -1, 820, 800, 03245 801, -1, -1, 804, -1, 490, -1, -1, -1, -1, 03246 -1, -1, -1, -1, -1, -1, -1, -1, -1, 820, 03247 842, -1, -1, -1, -1, -1, -1, 542, -1, 544, 03248 -1, -1, -1, -1, -1, -1, -1, -1, 860, -1, 03249 -1, -1, 864, -1, -1, -1, -1, -1, -1, -1, 03250 -1, 566, -1, 875, -1, -1, -1, 542, -1, 544, 03251 -1, -1, -1, 864, -1, -1, -1, -1, -1, -1, 03252 -1, -1, -1, -1, 875, 542, -1, 544, -1, -1, 03253 -1, 566, -1, -1, -1, -1, -1, -1, -1, -1, 03254 -1, -1, -1, -1, -1, -1, 918, -1, 920, 566, 03255 615, -1, -1, -1, 926, -1, 928, -1, -1, -1, 03256 -1, -1, -1, -1, -1, -1, -1, 918, -1, 920, 03257 -1, -1, -1, -1, -1, 926, -1, 928, -1, -1, 03258 615, 646, -1, -1, -1, -1, -1, -1, -1, 654, 03259 -1, -1, -1, -1, -1, -1, 661, -1, -1, -1, 03260 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03261 -1, -1, 68, 69, 70, 71, 72, 73, 74, 654, 03262 -1, 77, 78, -1, -1, -1, 661, 83, 84, -1, 03263 -1, -1, -1, -1, -1, -1, 701, 654, -1, -1, 03264 -1, -1, -1, -1, 709, 662, -1, -1, -1, -1, 03265 -1, 716, 717, -1, -1, -1, 112, 113, 114, 115, 03266 116, 117, 118, 119, 120, 121, 701, -1, -1, -1, 03267 -1, -1, -1, -1, 709, -1, -1, -1, 743, 744, 03268 -1, 716, 717, -1, 701, -1, -1, -1, -1, -1, 03269 755, -1, 709, -1, -1, -1, -1, -1, -1, 716, 03270 717, 68, 69, 70, 71, 72, 73, 74, 743, 744, 03271 77, 78, -1, -1, -1, -1, 83, 84, -1, -1, 03272 755, -1, -1, -1, -1, -1, 743, 744, 793, -1, 03273 -1, -1, -1, -1, -1, 800, 801, -1, 755, 804, 03274 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, 03275 117, 118, 119, 120, 121, 820, -1, -1, 793, -1, 03276 -1, -1, -1, -1, -1, 800, 801, -1, -1, 804, 03277 -1, -1, -1, -1, -1, -1, 793, 842, -1, -1, 03278 -1, -1, -1, 800, 801, 820, -1, 804, -1, -1, 03279 -1, -1, -1, -1, -1, 860, -1, -1, -1, 864, 03280 -1, -1, -1, 820, -1, -1, -1, 842, -1, -1, 03281 875, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03282 -1, -1, -1, -1, -1, 860, -1, -1, -1, 864, 03283 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03284 875, -1, -1, 860, -1, -1, -1, 864, -1, -1, 03285 -1, -1, -1, 918, -1, 920, -1, -1, 875, -1, 03286 -1, 926, -1, 928, -1, -1, -1, -1, -1, -1, 03287 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03288 -1, -1, -1, 918, -1, 920, -1, -1, -1, -1, 03289 -1, 926, -1, 928, -1, -1, -1, -1, -1, -1, 03290 -1, 918, -1, 920, -1, -1, -1, -1, -1, 926, 03291 -1, 928, 0, 1, -1, 3, 4, 5, 6, 7, 03292 -1, -1, -1, 11, 12, -1, -1, -1, 16, -1, 03293 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03294 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03295 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03296 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03297 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03298 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03299 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03300 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03301 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03302 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03303 -1, -1, -1, 0, 122, 123, 124, -1, -1, -1, 03304 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 03305 17, -1, -1, -1, -1, -1, -1, 145, -1, 147, 03306 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 03307 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, 03308 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73, 03309 74, 75, 76, 77, 78, 79, 80, -1, -1, 83, 03310 84, 68, 69, 70, 71, 72, 73, 74, 75, 76, 03311 77, 78, 79, 80, -1, -1, 83, 84, 85, -1, 03312 87, 88, -1, -1, -1, -1, 110, 94, 112, 113, 03313 114, 115, 116, 117, 118, 119, 120, 121, -1, -1, 03314 107, -1, 109, 110, 111, 112, 113, 114, 115, 116, 03315 117, 118, 119, 120, 121, -1, -1, -1, -1, -1, 03316 -1, -1, -1, 147, -1, -1, -1, -1, -1, -1, 03317 137, 138, 139, 140, 0, -1, 143, 144, 145, -1, 03318 147, -1, 8, 9, 10, -1, -1, 13, 14, 15, 03319 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, 03320 26, 27, 28, -1, -1, -1, -1, -1, -1, -1, 03321 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03322 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72, 03323 73, 74, 75, 76, 77, 78, 79, 80, -1, -1, 03324 83, 84, 68, 69, 70, 71, 72, 73, 74, 75, 03325 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03326 -1, -1, 88, -1, -1, -1, -1, 110, 94, 112, 03327 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 03328 -1, -1, -1, -1, 110, -1, 112, 113, 114, 115, 03329 116, 117, 118, 119, 120, 121, -1, -1, -1, -1, 03330 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03331 136, 137, 138, 139, 140, 0, 142, 143, 144, 145, 03332 -1, 147, -1, 8, 9, 10, -1, -1, 13, 14, 03333 15, -1, 17, -1, -1, -1, -1, -1, -1, -1, 03334 -1, -1, 27, 28, 29, -1, -1, -1, -1, -1, 03335 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, 03336 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71, 03337 72, 73, 74, 75, -1, 77, 78, -1, -1, -1, 03338 -1, 83, 84, 68, 69, 70, 71, 72, 73, 74, 03339 75, 76, 77, 78, 79, 80, -1, -1, 83, 84, 03340 85, -1, -1, 88, -1, -1, -1, -1, -1, 94, 03341 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 03342 -1, -1, 107, -1, -1, 110, 111, 112, 113, 114, 03343 115, 116, 117, 118, 119, 120, 121, -1, -1, -1, 03344 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03345 -1, -1, 137, 138, 139, 140, 0, -1, 143, 144, 03346 145, -1, 147, -1, 8, 9, 10, -1, -1, 13, 03347 14, 15, -1, 17, -1, -1, -1, -1, -1, -1, 03348 -1, -1, 26, 27, 28, -1, -1, -1, -1, -1, 03349 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 03350 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03351 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03352 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73, 03353 74, 75, 76, 77, 78, 79, 80, -1, -1, 83, 03354 84, 85, -1, -1, 88, -1, -1, -1, -1, -1, 03355 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03356 -1, -1, -1, -1, -1, -1, 110, -1, 112, 113, 03357 114, 115, 116, 117, 118, 119, 120, 121, -1, -1, 03358 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03359 -1, -1, 136, 137, 138, 139, 140, 0, 142, 143, 03360 144, 145, -1, 147, -1, 8, 9, 10, -1, -1, 03361 13, 14, 15, -1, 17, -1, -1, -1, -1, -1, 03362 -1, -1, -1, -1, 27, 28, -1, -1, -1, -1, 03363 -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 03364 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, 03365 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03366 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72, 03367 73, 74, 75, 76, 77, 78, 79, 80, -1, -1, 03368 83, 84, 85, -1, -1, 88, -1, -1, -1, -1, 03369 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 03370 -1, -1, -1, -1, -1, -1, -1, 110, -1, 112, 03371 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 03372 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03373 -1, -1, -1, -1, 137, 138, 139, 140, 0, 142, 03374 143, 144, 145, -1, 147, -1, 8, 9, 10, -1, 03375 -1, -1, 14, 15, -1, 17, -1, -1, -1, -1, 03376 -1, -1, -1, -1, 26, -1, -1, -1, -1, -1, 03377 -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 03378 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, 03379 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03380 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71, 03381 72, 73, 74, 75, 76, 77, 78, 79, 80, -1, 03382 -1, 83, 84, 85, 0, 87, -1, -1, -1, -1, 03383 -1, -1, 8, 9, 10, -1, -1, -1, 14, 15, 03384 -1, 17, -1, -1, -1, -1, -1, 109, 110, -1, 03385 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 03386 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03387 -1, -1, -1, -1, 136, 137, 138, 139, 140, -1, 03388 -1, 143, -1, 145, -1, 147, -1, -1, -1, -1, 03389 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03390 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03391 -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, 03392 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03393 -1, -1, -1, 109, 110, -1, 112, 113, 114, 115, 03394 116, 117, 118, 119, 120, 121, -1, -1, -1, -1, 03395 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03396 -1, 137, 138, 139, 140, -1, -1, 143, -1, 145, 03397 1, 147, 3, 4, 5, 6, 7, 8, 9, 10, 03398 11, 12, -1, -1, 15, 16, -1, 18, 19, 20, 03399 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03400 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03401 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50, 03402 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03403 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03404 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03405 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03406 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03407 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03408 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03409 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1, 03410 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03411 -1, -1, -1, -1, 145, 1, 147, 3, 4, 5, 03412 6, 7, -1, -1, 10, 11, 12, -1, 14, 15, 03413 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03414 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03415 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03416 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03417 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03418 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03419 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03420 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03421 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03422 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03423 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03424 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03425 -1, -1, -1, -1, -1, -1, -1, -1, -1, 145, 03426 1, 147, 3, 4, 5, 6, 7, -1, -1, 10, 03427 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 03428 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03429 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03430 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50, 03431 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03432 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03433 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03434 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03435 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03436 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03437 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03438 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1, 03439 1, -1, 3, 4, 5, 6, 7, -1, -1, -1, 03440 11, 12, -1, -1, 145, 16, 147, 18, 19, 20, 03441 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03442 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03443 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, 03444 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03445 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03446 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03447 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03448 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03449 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03450 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03451 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1, 03452 -1, -1, -1, -1, -1, -1, 137, -1, -1, -1, 03453 -1, -1, -1, -1, 145, 1, 147, 3, 4, 5, 03454 6, 7, -1, -1, 10, 11, 12, -1, -1, 15, 03455 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03456 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03457 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03458 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03459 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03460 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03461 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03462 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03463 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03464 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03465 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03466 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, 03467 6, 7, -1, 9, 10, 11, 12, -1, -1, 145, 03468 16, 147, 18, 19, 20, 21, 22, 23, 24, -1, 03469 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03470 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03471 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03472 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03473 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03474 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03475 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03476 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03477 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03478 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03479 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, 03480 6, 7, -1, -1, -1, 11, 12, -1, -1, 145, 03481 16, 147, 18, 19, 20, 21, 22, 23, 24, -1, 03482 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03483 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03484 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03485 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03486 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03487 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03488 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03489 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03490 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03491 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03492 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, 03493 6, 7, -1, -1, -1, 11, 12, 143, -1, 145, 03494 16, 147, 18, 19, 20, 21, 22, 23, 24, -1, 03495 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03496 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03497 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03498 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03499 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03500 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03501 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03502 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03503 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03504 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03505 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, 03506 6, 7, -1, -1, -1, 11, 12, 143, -1, 145, 03507 16, 147, 18, 19, 20, 21, 22, 23, 24, -1, 03508 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03509 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03510 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03511 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03512 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03513 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03514 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03515 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03516 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03517 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03518 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03519 -1, 137, -1, -1, -1, -1, -1, -1, -1, 145, 03520 1, 147, 3, 4, 5, 6, 7, -1, -1, 10, 03521 11, 12, -1, -1, -1, 16, -1, 18, 19, 20, 03522 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03523 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03524 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50, 03525 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03526 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03527 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03528 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03529 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03530 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03531 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03532 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1, 03533 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03534 11, 12, -1, -1, 145, 16, 147, 18, 19, 20, 03535 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03536 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03537 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03538 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 03539 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03540 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03541 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03542 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100, 03543 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03544 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03545 12, 122, 123, 124, 16, -1, 18, 19, 20, 21, 03546 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03547 32, 33, 34, 35, 36, -1, 147, 39, -1, -1, 03548 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03549 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03550 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03551 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03552 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03553 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03554 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03555 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03556 122, 123, 124, -1, -1, -1, -1, -1, -1, -1, 03557 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03558 12, -1, -1, 145, 16, 147, 18, 19, 20, 21, 03559 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03560 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03561 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03562 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03563 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03564 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03565 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03566 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03567 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03568 3, 4, 5, 6, 7, -1, -1, -1, 11, 12, 03569 122, 123, 124, 16, -1, 18, 19, 20, 21, 22, 03570 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03571 33, 34, 35, 36, -1, 147, 39, -1, -1, -1, 03572 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 03573 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03574 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03575 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03576 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03577 93, -1, 95, -1, 97, 98, 99, 100, 101, 102, 03578 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03579 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 03580 123, 124, -1, -1, -1, -1, -1, -1, 3, 4, 03581 5, 6, 7, -1, -1, -1, 11, 12, -1, -1, 03582 -1, 16, 145, 18, 19, 20, 21, 22, 23, 24, 03583 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03584 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03585 45, 46, -1, 48, 49, 50, 51, 52, 53, 54, 03586 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, 03587 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03588 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03589 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03590 95, -1, 97, 98, 99, 100, 101, 102, 103, -1, 03591 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03592 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 03593 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03594 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03595 145, 3, 4, 5, 6, 7, 8, 9, 10, 11, 03596 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 03597 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, 03598 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, 03599 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 03600 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, 03601 -1, -1, -1, -1, 66, 67, 68, 69, 70, 71, 03602 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 03603 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 03604 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, 03605 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03606 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 03607 -1, 123, 124, -1, -1, -1, -1, -1, 3, 4, 03608 5, -1, 7, -1, -1, -1, 11, 12, -1, 141, 03609 142, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03610 -1, 26, -1, -1, -1, 30, 31, 32, 33, 34, 03611 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03612 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03613 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 03614 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03615 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03616 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03617 95, 96, 97, 98, 99, 100, 101, 102, 103, -1, 03618 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03619 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 03620 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, 03621 -1, 136, -1, 11, 12, -1, -1, 142, 16, -1, 03622 18, 19, 20, 21, 22, 23, 24, -1, 26, -1, 03623 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03624 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, 03625 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03626 58, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03627 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03628 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03629 -1, 89, 90, -1, 92, 93, -1, 95, 96, 97, 03630 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03631 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03632 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1, 03633 -1, -1, 3, 4, 5, -1, 7, -1, 136, -1, 03634 11, 12, -1, -1, 142, 16, -1, 18, 19, 20, 03635 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03636 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03637 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03638 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 03639 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03640 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03641 -1, -1, -1, -1, -1, 86, 87, -1, 89, 90, 03642 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100, 03643 101, 102, 103, -1, -1, -1, -1, -1, 109, -1, 03644 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 03645 7, 122, 123, 124, 11, 12, -1, -1, -1, 16, 03646 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03647 -1, 142, -1, 30, 31, 32, 33, 34, 35, 36, 03648 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, 03649 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 03650 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, 03651 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03652 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03653 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96, 03654 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, 03655 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03656 3, 4, 5, -1, 7, 122, 123, 124, 11, 12, 03657 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22, 03658 23, 24, -1, -1, -1, 142, -1, 30, 31, 32, 03659 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03660 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03661 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 03662 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03663 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03664 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03665 93, -1, 95, 96, 97, 98, 99, 100, 101, 102, 03666 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03667 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 03668 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, 03669 -1, -1, -1, -1, -1, -1, -1, -1, -1, 142, 03670 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 03671 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 03672 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, 03673 33, 34, 35, 36, 37, 38, 39, -1, -1, -1, 03674 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 03675 53, 54, 55, 56, 57, -1, -1, -1, -1, -1, 03676 -1, -1, -1, 66, 67, 68, 69, 70, 71, 72, 03677 73, 74, -1, -1, 77, 78, -1, -1, 81, 82, 03678 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, 03679 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, 03680 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, 03681 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 03682 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, 03683 -1, -1, -1, -1, -1, -1, -1, -1, 141, 3, 03684 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 03685 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 03686 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, 03687 34, 35, 36, 37, 38, 39, -1, -1, -1, -1, 03688 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 03689 54, -1, 56, -1, -1, -1, -1, -1, -1, -1, 03690 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, 03691 74, -1, -1, 77, 78, -1, -1, 81, 82, 83, 03692 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03693 -1, 95, -1, -1, 98, -1, -1, -1, -1, -1, 03694 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113, 03695 114, 115, 116, 117, 118, 119, 120, 121, -1, 123, 03696 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03697 -1, -1, -1, -1, -1, -1, -1, 141, 3, 4, 03698 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 03699 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 03700 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, 03701 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, 03702 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, 03703 -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, 03704 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 03705 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 03706 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03707 95, -1, -1, 98, -1, -1, -1, -1, -1, -1, 03708 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, 03709 115, 116, 117, 118, 119, 120, 121, -1, 123, 124, 03710 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03711 -1, -1, -1, -1, -1, -1, 141, 3, 4, 5, 03712 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 03713 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 03714 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03715 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, 03716 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, 03717 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03718 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 03719 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1, 03720 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, 03721 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03722 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, 03723 116, 117, 118, 119, 120, 121, -1, 123, 124, -1, 03724 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03725 12, -1, -1, -1, 16, 141, 18, 19, 20, 21, 03726 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03727 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03728 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03729 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03730 62, 63, 64, -1, -1, -1, -1, -1, -1, -1, 03731 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03732 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03733 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03734 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03735 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 03736 122, 11, 12, -1, -1, -1, 16, -1, 18, 19, 03737 20, 21, 22, 23, 24, -1, -1, -1, 140, -1, 03738 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03739 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03740 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 03741 60, -1, 62, 63, 64, -1, -1, -1, -1, -1, 03742 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03743 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03744 90, -1, 92, 93, -1, -1, -1, 97, 98, 99, 03745 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03746 -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, 03747 -1, -1, 122, 11, 12, -1, -1, -1, 16, -1, 03748 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03749 140, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03750 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03751 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03752 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03753 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03754 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03755 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03756 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03757 -1, -1, -1, -1, 3, 4, 5, 6, 7, -1, 03758 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18, 03759 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03760 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03761 39, -1, -1, -1, -1, -1, 45, 46, -1, 48, 03762 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03763 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03764 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03765 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03766 89, 90, -1, 92, 93, -1, 95, -1, 97, 98, 03767 99, 100, 101, 102, 103, -1, -1, -1, -1, -1, 03768 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 03769 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19, 03770 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 03771 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03772 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03773 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 03774 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03775 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03776 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03777 90, -1, 92, 93, -1, 95, 96, 97, 98, 99, 03778 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03779 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03780 11, 12, 122, 123, 124, 16, -1, 18, 19, 20, 03781 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03782 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03783 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03784 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 03785 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03786 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03787 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03788 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100, 03789 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03790 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03791 12, 122, 123, 124, 16, -1, 18, 19, 20, 21, 03792 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03793 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03794 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03795 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 03796 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03797 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03798 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03799 92, 93, -1, 95, -1, 97, 98, 99, 100, 101, 03800 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03801 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 03802 122, 123, 124, 16, -1, 18, 19, 20, 21, 22, 03803 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03804 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03805 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03806 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 03807 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03808 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03809 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03810 93, -1, -1, 96, 97, 98, 99, 100, 101, 102, 03811 103, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03812 4, 5, -1, 7, -1, -1, -1, 11, 12, 122, 03813 123, 124, 16, -1, 18, 19, 20, 21, 22, 23, 03814 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03815 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03816 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03817 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 03818 64, -1, 66, 67, -1, -1, -1, -1, -1, -1, 03819 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03820 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03821 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103, 03822 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 03823 5, -1, 7, -1, -1, -1, 11, 12, 122, 123, 03824 124, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03825 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03826 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03827 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03828 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 03829 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03830 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03831 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03832 -1, -1, 97, 98, 99, 100, 101, 102, 103, -1, 03833 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 03834 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124, 03835 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03836 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03837 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03838 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03839 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03840 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03841 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03842 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03843 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03844 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 03845 7, -1, -1, -1, 11, 12, 122, 123, 124, 16, 03846 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03847 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03848 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, 03849 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 03850 57, -1, 59, 60, -1, 62, 63, 64, -1, 66, 03851 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03852 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03853 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1, 03854 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, 03855 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, 03856 -1, -1, -1, 11, 12, 122, 123, 124, 16, -1, 03857 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03858 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03859 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, 03860 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03861 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03862 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03863 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03864 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03865 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03866 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 03867 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18, 03868 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03869 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03870 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 03871 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03872 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03873 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03874 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03875 89, 90, -1, 92, 93, -1, 95, -1, 97, 98, 03876 99, 100, 101, 102, 103, -1, -1, -1, -1, -1, 03877 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 03878 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19, 03879 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 03880 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03881 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03882 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 03883 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03884 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03885 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03886 90, -1, 92, 93, -1, 95, -1, 97, 98, 99, 03887 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03888 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03889 11, 12, 122, 123, 124, 16, -1, 18, 19, 20, 03890 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03891 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03892 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03893 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03894 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03895 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03896 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03897 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100, 03898 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03899 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03900 12, 122, 123, 124, 16, -1, 18, 19, 20, 21, 03901 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03902 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03903 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03904 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03905 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03906 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03907 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03908 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03909 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03910 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 03911 122, 123, 124, 16, -1, 18, 19, 20, 21, 22, 03912 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03913 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03914 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03915 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03916 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03917 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03918 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03919 93, -1, -1, -1, 97, 98, 99, 100, 101, 102, 03920 103, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03921 4, 5, -1, 7, -1, -1, -1, 11, 12, 122, 03922 123, 124, 16, -1, 18, 19, 20, 21, 22, 23, 03923 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03924 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03925 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03926 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03927 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03928 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03929 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03930 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103, 03931 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 03932 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18, 03933 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03934 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03935 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 03936 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03937 59, 60, -1, 62, 63, 64, -1, -1, -1, -1, 03938 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03939 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03940 89, 90, -1, 92, 93, -1, 95, -1, 97, 98, 03941 99, 100, 101, 102, 103, -1, -1, -1, -1, 3, 03942 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 03943 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23, 03944 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03945 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03946 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03947 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03948 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03949 -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, 03950 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03951 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 03952 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 03953 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18, 03954 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03955 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03956 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 03957 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03958 59, 60, -1, 62, 63, 64, -1, -1, -1, -1, 03959 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03960 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03961 89, 90, -1, 92, 93, -1, -1, -1, 97, 98, 03962 99, 100, 101, 102, 103, -1, -1, -1, -1, 3, 03963 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 03964 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23, 03965 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03966 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03967 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03968 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03969 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03970 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03971 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03972 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 03973 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 03974 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18, 03975 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03976 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03977 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 03978 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03979 59, 60, -1, 62, 63, 64, -1, -1, -1, -1, 03980 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03981 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03982 89, 90, -1, 92, 93, -1, -1, -1, 97, 98, 03983 99, 100, 101, 102, 103, -1, -1, -1, -1, 3, 03984 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 03985 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23, 03986 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03987 34, 35, 36, -1, -1, 39, -1, 44, -1, -1, 03988 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03989 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03990 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 03991 77, 78, 79, 80, -1, -1, 83, 84, -1, -1, 03992 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03993 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 03994 -1, -1, -1, 110, -1, 112, 113, 114, 115, 116, 03995 117, 118, 119, 120, 121, -1, -1, -1, 122, -1, 03996 52, 53, -1, -1, 56, -1, -1, -1, -1, -1, 03997 -1, -1, -1, 140, 66, 67, 68, 69, 70, 71, 03998 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 03999 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 04000 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, 04001 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04002 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 04003 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1, 04004 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141, 04005 142, 66, 67, 68, 69, 70, 71, 72, 73, 74, 04006 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 04007 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04008 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04009 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, 04010 115, 116, 117, 118, 119, 120, 121, -1, 123, 124, 04011 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1, 04012 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67, 04013 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 04014 78, -1, -1, 81, 82, 83, 84, -1, -1, -1, 04015 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, 04016 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04017 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117, 04018 118, 119, 120, 121, -1, 123, 124, -1, -1, -1, 04019 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1, 04020 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70, 04021 71, 72, 73, 74, -1, -1, 77, 78, -1, -1, 04022 81, 82, 83, 84, -1, -1, -1, -1, -1, -1, 04023 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, 04024 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04025 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, 04026 121, -1, 123, 124, -1, -1, -1, -1, 52, 53, 04027 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, 04028 141, 142, 66, 67, 68, 69, 70, 71, 72, 73, 04029 74, -1, -1, 77, 78, -1, -1, 81, 82, 83, 04030 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04031 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, 04032 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113, 04033 114, 115, 116, 117, 118, 119, 120, 121, -1, 123, 04034 124, -1, -1, -1, -1, 52, 53, -1, -1, 56, 04035 -1, -1, -1, -1, -1, -1, -1, 141, 142, 66, 04036 67, 68, 69, 70, 71, 72, 73, 74, -1, -1, 04037 77, 78, -1, -1, 81, 82, 83, 84, -1, -1, 04038 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1, 04039 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04040 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, 04041 117, 118, 119, 120, 121, -1, 123, 124, -1, -1, 04042 -1, -1, 52, 53, -1, -1, 56, -1, -1, -1, 04043 -1, -1, -1, -1, 141, 142, 66, 67, 68, 69, 04044 70, 71, 72, 73, 74, -1, -1, 77, 78, -1, 04045 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1, 04046 -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, 04047 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04048 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, 04049 120, 121, -1, 123, 124, -1, -1, -1, -1, 52, 04050 53, -1, -1, 56, -1, -1, -1, -1, -1, -1, 04051 -1, 141, 142, 66, 67, 68, 69, 70, 71, 72, 04052 73, 74, -1, -1, 77, 78, -1, -1, 81, 82, 04053 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, 04054 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, 04055 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, 04056 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 04057 123, 124, -1, -1, -1, -1, 52, 53, -1, -1, 04058 56, -1, -1, -1, -1, -1, -1, -1, 141, 142, 04059 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 04060 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1, 04061 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, 04062 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04063 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, 04064 116, 117, 118, 119, 120, 121, -1, 123, 124, -1, 04065 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1, 04066 -1, -1, -1, -1, -1, 141, 142, 66, 67, 68, 04067 69, 70, 71, 72, 73, 74, -1, -1, 77, 78, 04068 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1, 04069 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, 04070 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04071 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118, 04072 119, 120, 121, -1, 123, 124, -1, -1, -1, -1, 04073 52, 53, -1, -1, 56, -1, -1, -1, -1, -1, 04074 -1, -1, 141, 142, 66, 67, 68, 69, 70, 71, 04075 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 04076 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 04077 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, 04078 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04079 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 04080 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1, 04081 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141, 04082 142, 66, 67, 68, 69, 70, 71, 72, 73, 74, 04083 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 04084 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04085 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04086 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, 04087 115, 116, 117, 118, 119, 120, 121, -1, 123, 124, 04088 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1, 04089 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67, 04090 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 04091 78, -1, -1, 81, 82, 83, 84, -1, -1, -1, 04092 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, 04093 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04094 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117, 04095 118, 119, 120, 121, -1, 123, 124, -1, -1, -1, 04096 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1, 04097 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70, 04098 71, 72, 73, 74, -1, -1, 77, 78, -1, -1, 04099 81, 82, 83, 84, -1, -1, -1, -1, -1, -1, 04100 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, 04101 -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, 04102 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, 04103 121, 44, 123, 124, -1, -1, 68, 69, 70, 71, 04104 72, 73, 74, 75, 76, 77, 78, 79, 80, -1, 04105 141, 83, 84, -1, -1, 68, 69, 70, 71, 72, 04106 73, 74, 75, 76, 77, 78, 79, 80, -1, -1, 04107 83, 84, -1, -1, -1, -1, -1, -1, 110, -1, 04108 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 04109 -1, -1, -1, -1, -1, -1, -1, 110, -1, 112, 04110 113, 114, 115, 116, 117, 118, 119, 120, 121 04111 }; 04112 04113 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 04114 symbol of state STATE-NUM. */ 04115 static const yytype_uint16 yystos[] = 04116 { 04117 0, 149, 150, 0, 1, 3, 4, 5, 6, 7, 04118 11, 12, 16, 18, 19, 20, 21, 22, 23, 24, 04119 30, 31, 32, 33, 34, 35, 36, 39, 45, 46, 04120 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 04121 57, 59, 60, 62, 63, 64, 66, 67, 86, 89, 04122 90, 92, 93, 95, 97, 98, 99, 100, 101, 102, 04123 103, 122, 123, 124, 151, 152, 153, 158, 160, 161, 04124 163, 164, 167, 168, 170, 171, 172, 174, 175, 185, 04125 199, 216, 217, 218, 219, 220, 221, 222, 223, 224, 04126 225, 226, 249, 250, 260, 261, 262, 263, 264, 265, 04127 266, 269, 279, 281, 282, 283, 284, 285, 286, 287, 04128 310, 321, 153, 3, 4, 5, 6, 7, 8, 9, 04129 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 04130 20, 21, 22, 23, 24, 25, 26, 30, 31, 32, 04131 33, 34, 35, 36, 37, 38, 39, 45, 46, 47, 04132 48, 49, 50, 51, 52, 53, 56, 66, 67, 68, 04133 69, 70, 71, 72, 73, 74, 77, 78, 81, 82, 04134 83, 84, 95, 112, 113, 114, 115, 116, 117, 118, 04135 119, 120, 121, 123, 124, 141, 178, 179, 180, 181, 04136 183, 184, 279, 281, 39, 58, 86, 89, 95, 96, 04137 123, 167, 175, 185, 187, 192, 195, 197, 216, 283, 04138 284, 286, 287, 308, 309, 192, 192, 142, 193, 194, 04139 142, 189, 193, 142, 147, 315, 54, 180, 315, 154, 04140 136, 21, 22, 30, 31, 32, 185, 216, 310, 185, 04141 56, 1, 89, 156, 157, 158, 169, 170, 321, 161, 04142 188, 197, 308, 321, 187, 307, 308, 321, 46, 86, 04143 122, 140, 174, 199, 216, 283, 284, 287, 242, 243, 04144 54, 55, 57, 178, 272, 280, 271, 272, 273, 146, 04145 267, 146, 270, 59, 60, 163, 185, 185, 145, 147, 04146 314, 319, 320, 40, 41, 42, 43, 44, 37, 38, 04147 28, 247, 109, 140, 89, 95, 171, 109, 68, 69, 04148 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 04149 80, 83, 84, 110, 112, 113, 114, 115, 116, 117, 04150 118, 119, 120, 121, 85, 138, 139, 200, 161, 162, 04151 162, 203, 205, 162, 314, 320, 86, 168, 175, 216, 04152 232, 283, 284, 287, 52, 56, 83, 86, 176, 177, 04153 216, 283, 284, 287, 177, 33, 34, 35, 36, 49, 04154 50, 51, 52, 56, 142, 178, 285, 305, 85, 139, 04155 26, 136, 251, 263, 87, 87, 189, 193, 251, 140, 04156 187, 56, 187, 187, 109, 88, 140, 196, 321, 85, 04157 138, 139, 87, 87, 140, 196, 192, 315, 316, 192, 04158 191, 192, 197, 308, 321, 161, 316, 161, 54, 63, 04159 64, 159, 142, 186, 136, 156, 85, 139, 87, 158, 04160 169, 143, 314, 320, 316, 201, 144, 140, 147, 318, 04161 140, 318, 137, 318, 315, 56, 59, 60, 171, 173, 04162 140, 85, 138, 139, 244, 61, 104, 105, 106, 274, 04163 106, 274, 106, 65, 274, 106, 106, 268, 274, 106, 04164 61, 106, 68, 68, 145, 153, 162, 162, 162, 162, 04165 158, 161, 161, 248, 95, 163, 187, 197, 198, 169, 04166 140, 174, 140, 160, 163, 175, 185, 187, 198, 185, 04167 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 04168 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 04169 185, 185, 185, 185, 185, 52, 53, 56, 183, 189, 04170 311, 312, 191, 52, 53, 56, 183, 189, 311, 155, 04171 156, 13, 228, 319, 228, 162, 162, 314, 17, 254, 04172 56, 85, 138, 139, 25, 161, 52, 56, 176, 1, 04173 113, 288, 319, 85, 138, 139, 212, 306, 213, 85, 04174 139, 313, 52, 56, 311, 311, 253, 252, 163, 185, 04175 163, 185, 94, 165, 182, 185, 187, 95, 187, 195, 04176 308, 52, 56, 191, 52, 56, 309, 316, 143, 316, 04177 140, 140, 316, 180, 202, 185, 151, 137, 311, 311, 04178 185, 316, 158, 316, 308, 140, 173, 52, 56, 191, 04179 52, 56, 52, 54, 55, 56, 57, 89, 95, 96, 04180 116, 119, 142, 245, 291, 292, 293, 294, 295, 296, 04181 299, 300, 301, 302, 303, 276, 275, 146, 274, 146, 04182 185, 185, 76, 114, 237, 238, 321, 187, 140, 316, 04183 173, 140, 109, 44, 315, 87, 87, 189, 193, 315, 04184 317, 87, 87, 189, 190, 193, 321, 10, 227, 8, 04185 256, 321, 156, 13, 156, 27, 229, 319, 229, 254, 04186 197, 227, 52, 56, 191, 52, 56, 207, 210, 319, 04187 289, 209, 52, 56, 176, 191, 155, 161, 142, 290, 04188 291, 214, 190, 193, 190, 193, 237, 237, 44, 166, 04189 180, 187, 196, 87, 87, 317, 87, 87, 308, 161, 04190 137, 318, 171, 317, 109, 52, 89, 95, 233, 234, 04191 235, 293, 291, 29, 107, 246, 140, 304, 321, 140, 04192 304, 52, 140, 304, 52, 277, 54, 55, 57, 278, 04193 287, 52, 145, 236, 239, 295, 297, 298, 301, 303, 04194 321, 156, 95, 187, 173, 185, 111, 163, 185, 163, 04195 185, 165, 144, 87, 163, 185, 163, 185, 165, 187, 04196 198, 257, 321, 15, 231, 321, 14, 230, 231, 231, 04197 204, 206, 227, 140, 228, 317, 162, 319, 162, 155, 04198 317, 227, 316, 291, 155, 319, 178, 156, 156, 185, 04199 237, 87, 140, 316, 187, 235, 140, 293, 140, 316, 04200 239, 156, 156, 294, 299, 301, 303, 295, 296, 301, 04201 295, 156, 109, 52, 240, 241, 292, 239, 114, 140, 04202 304, 140, 304, 140, 304, 10, 187, 185, 163, 185, 04203 88, 258, 321, 156, 9, 259, 321, 162, 227, 227, 04204 156, 156, 187, 156, 229, 211, 319, 227, 316, 227, 04205 215, 10, 137, 156, 316, 234, 140, 95, 233, 316, 04206 10, 137, 140, 304, 140, 304, 140, 304, 140, 304, 04207 304, 137, 86, 216, 140, 114, 298, 301, 295, 297, 04208 301, 295, 86, 175, 216, 283, 284, 287, 228, 156, 04209 228, 227, 227, 231, 254, 255, 208, 155, 290, 137, 04210 140, 234, 140, 293, 295, 301, 295, 295, 56, 85, 04211 241, 140, 304, 140, 304, 304, 140, 304, 304, 56, 04212 85, 138, 139, 156, 156, 156, 227, 155, 234, 140, 04213 304, 140, 304, 304, 304, 52, 56, 295, 301, 295, 04214 295, 52, 56, 191, 52, 56, 256, 230, 227, 227, 04215 234, 295, 304, 140, 304, 304, 304, 317, 304, 295, 04216 304 04217 }; 04218 04219 #define yyerrok (yyerrstatus = 0) 04220 #define yyclearin (yychar = YYEMPTY) 04221 #define YYEMPTY (-2) 04222 #define YYEOF 0 04223 04224 #define YYACCEPT goto yyacceptlab 04225 #define YYABORT goto yyabortlab 04226 #define YYERROR goto yyerrorlab 04227 04228 04229 /* Like YYERROR except do call yyerror. This remains here temporarily 04230 to ease the transition to the new meaning of YYERROR, for GCC. 04231 Once GCC version 2 has supplanted version 1, this can go. However, 04232 YYFAIL appears to be in use. Nevertheless, it is formally deprecated 04233 in Bison 2.4.2's NEWS entry, where a plan to phase it out is 04234 discussed. */ 04235 04236 #define YYFAIL goto yyerrlab 04237 #if defined YYFAIL 04238 /* This is here to suppress warnings from the GCC cpp's 04239 -Wunused-macros. Normally we don't worry about that warning, but 04240 some users do, and we want to make it easy for users to remove 04241 YYFAIL uses, which will produce warnings from Bison 2.5. */ 04242 #endif 04243 04244 #define YYRECOVERING() (!!yyerrstatus) 04245 04246 #define YYBACKUP(Token, Value) \ 04247 do \ 04248 if (yychar == YYEMPTY) \ 04249 { \ 04250 yychar = (Token); \ 04251 yylval = (Value); \ 04252 YYPOPSTACK (yylen); \ 04253 yystate = *yyssp; \ 04254 goto yybackup; \ 04255 } \ 04256 else \ 04257 { \ 04258 parser_yyerror (parser, YY_("syntax error: cannot back up")); \ 04259 YYERROR; \ 04260 } \ 04261 while (YYID (0)) 04262 04263 /* Error token number */ 04264 #define YYTERROR 1 04265 #define YYERRCODE 256 04266 04267 04268 /* This macro is provided for backward compatibility. */ 04269 #ifndef YY_LOCATION_PRINT 04270 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 04271 #endif 04272 04273 04274 /* YYLEX -- calling `yylex' with the right arguments. */ 04275 #ifdef YYLEX_PARAM 04276 # define YYLEX yylex (&yylval, YYLEX_PARAM) 04277 #else 04278 # define YYLEX yylex (&yylval, parser) 04279 #endif 04280 04281 /* Enable debugging if requested. */ 04282 #if YYDEBUG 04283 04284 # ifndef YYFPRINTF 04285 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 04286 # define YYFPRINTF fprintf 04287 # endif 04288 04289 # define YYDPRINTF(Args) \ 04290 do { \ 04291 if (yydebug) \ 04292 YYFPRINTF Args; \ 04293 } while (YYID (0)) 04294 04295 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 04296 do { \ 04297 if (yydebug) \ 04298 { \ 04299 YYFPRINTF (stderr, "%s ", Title); \ 04300 yy_symbol_print (stderr, \ 04301 Type, Value, parser); \ 04302 YYFPRINTF (stderr, "\n"); \ 04303 } \ 04304 } while (YYID (0)) 04305 04306 04307 /*--------------------------------. 04308 | Print this symbol on YYOUTPUT. | 04309 `--------------------------------*/ 04310 04311 /*ARGSUSED*/ 04312 #if (defined __STDC__ || defined __C99__FUNC__ \ 04313 || defined __cplusplus || defined _MSC_VER) 04314 static void 04315 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser) 04316 #else 04317 static void 04318 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser) 04319 FILE *yyoutput; 04320 int yytype; 04321 YYSTYPE const * const yyvaluep; 04322 struct parser_params *parser; 04323 #endif 04324 { 04325 FILE *yyo = yyoutput; 04326 YYUSE (yyo); 04327 if (!yyvaluep) 04328 return; 04329 YYUSE (parser); 04330 # ifdef YYPRINT 04331 if (yytype < YYNTOKENS) 04332 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 04333 # else 04334 YYUSE (yyoutput); 04335 # endif 04336 YYUSE (yytype); 04337 } 04338 04339 04340 /*--------------------------------. 04341 | Print this symbol on YYOUTPUT. | 04342 `--------------------------------*/ 04343 04344 #if (defined __STDC__ || defined __C99__FUNC__ \ 04345 || defined __cplusplus || defined _MSC_VER) 04346 static void 04347 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser) 04348 #else 04349 static void 04350 yy_symbol_print (yyoutput, yytype, yyvaluep, parser) 04351 FILE *yyoutput; 04352 int yytype; 04353 YYSTYPE const * const yyvaluep; 04354 struct parser_params *parser; 04355 #endif 04356 { 04357 if (yytype < YYNTOKENS) 04358 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 04359 else 04360 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 04361 04362 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser); 04363 YYFPRINTF (yyoutput, ")"); 04364 } 04365 04366 /*------------------------------------------------------------------. 04367 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 04368 | TOP (included). | 04369 `------------------------------------------------------------------*/ 04370 04371 #if (defined __STDC__ || defined __C99__FUNC__ \ 04372 || defined __cplusplus || defined _MSC_VER) 04373 static void 04374 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 04375 #else 04376 static void 04377 yy_stack_print (yybottom, yytop) 04378 yytype_int16 *yybottom; 04379 yytype_int16 *yytop; 04380 #endif 04381 { 04382 YYFPRINTF (stderr, "Stack now"); 04383 for (; yybottom <= yytop; yybottom++) 04384 { 04385 int yybot = *yybottom; 04386 YYFPRINTF (stderr, " %d", yybot); 04387 } 04388 YYFPRINTF (stderr, "\n"); 04389 } 04390 04391 # define YY_STACK_PRINT(Bottom, Top) \ 04392 do { \ 04393 if (yydebug) \ 04394 yy_stack_print ((Bottom), (Top)); \ 04395 } while (YYID (0)) 04396 04397 04398 /*------------------------------------------------. 04399 | Report that the YYRULE is going to be reduced. | 04400 `------------------------------------------------*/ 04401 04402 #if (defined __STDC__ || defined __C99__FUNC__ \ 04403 || defined __cplusplus || defined _MSC_VER) 04404 static void 04405 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser) 04406 #else 04407 static void 04408 yy_reduce_print (yyvsp, yyrule, parser) 04409 YYSTYPE *yyvsp; 04410 int yyrule; 04411 struct parser_params *parser; 04412 #endif 04413 { 04414 int yynrhs = yyr2[yyrule]; 04415 int yyi; 04416 unsigned long int yylno = yyrline[yyrule]; 04417 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 04418 yyrule - 1, yylno); 04419 /* The symbols being reduced. */ 04420 for (yyi = 0; yyi < yynrhs; yyi++) 04421 { 04422 YYFPRINTF (stderr, " $%d = ", yyi + 1); 04423 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 04424 &(yyvsp[(yyi + 1) - (yynrhs)]) 04425 , parser); 04426 YYFPRINTF (stderr, "\n"); 04427 } 04428 } 04429 04430 # define YY_REDUCE_PRINT(Rule) \ 04431 do { \ 04432 if (yydebug) \ 04433 yy_reduce_print (yyvsp, Rule, parser); \ 04434 } while (YYID (0)) 04435 04436 /* Nonzero means print parse trace. It is left uninitialized so that 04437 multiple parsers can coexist. */ 04438 #ifndef yydebug 04439 int yydebug; 04440 #endif 04441 #else /* !YYDEBUG */ 04442 # define YYDPRINTF(Args) 04443 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) 04444 # define YY_STACK_PRINT(Bottom, Top) 04445 # define YY_REDUCE_PRINT(Rule) 04446 #endif /* !YYDEBUG */ 04447 04448 04449 /* YYINITDEPTH -- initial size of the parser's stacks. */ 04450 #ifndef YYINITDEPTH 04451 # define YYINITDEPTH 200 04452 #endif 04453 04454 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 04455 if the built-in stack extension method is used). 04456 04457 Do not make this value too large; the results are undefined if 04458 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 04459 evaluated with infinite-precision integer arithmetic. */ 04460 04461 #ifndef YYMAXDEPTH 04462 # define YYMAXDEPTH 10000 04463 #endif 04464 04465 04466 #if YYERROR_VERBOSE 04467 04468 # ifndef yystrlen 04469 # if defined __GLIBC__ && defined _STRING_H 04470 # define yystrlen strlen 04471 # else 04472 /* Return the length of YYSTR. */ 04473 #if (defined __STDC__ || defined __C99__FUNC__ \ 04474 || defined __cplusplus || defined _MSC_VER) 04475 static YYSIZE_T 04476 yystrlen (const char *yystr) 04477 #else 04478 static YYSIZE_T 04479 yystrlen (yystr) 04480 const char *yystr; 04481 #endif 04482 { 04483 YYSIZE_T yylen; 04484 for (yylen = 0; yystr[yylen]; yylen++) 04485 continue; 04486 return yylen; 04487 } 04488 # endif 04489 # endif 04490 04491 # ifndef yystpcpy 04492 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 04493 # define yystpcpy stpcpy 04494 # else 04495 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 04496 YYDEST. */ 04497 #if (defined __STDC__ || defined __C99__FUNC__ \ 04498 || defined __cplusplus || defined _MSC_VER) 04499 static char * 04500 yystpcpy (char *yydest, const char *yysrc) 04501 #else 04502 static char * 04503 yystpcpy (yydest, yysrc) 04504 char *yydest; 04505 const char *yysrc; 04506 #endif 04507 { 04508 char *yyd = yydest; 04509 const char *yys = yysrc; 04510 04511 while ((*yyd++ = *yys++) != '\0') 04512 continue; 04513 04514 return yyd - 1; 04515 } 04516 # endif 04517 # endif 04518 04519 # ifndef yytnamerr 04520 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary 04521 quotes and backslashes, so that it's suitable for yyerror. The 04522 heuristic is that double-quoting is unnecessary unless the string 04523 contains an apostrophe, a comma, or backslash (other than 04524 backslash-backslash). YYSTR is taken from yytname. If YYRES is 04525 null, do not copy; instead, return the length of what the result 04526 would have been. */ 04527 static YYSIZE_T 04528 yytnamerr (char *yyres, const char *yystr) 04529 { 04530 if (*yystr == '"') 04531 { 04532 YYSIZE_T yyn = 0; 04533 char const *yyp = yystr; 04534 04535 for (;;) 04536 switch (*++yyp) 04537 { 04538 case '\'': 04539 case ',': 04540 goto do_not_strip_quotes; 04541 04542 case '\\': 04543 if (*++yyp != '\\') 04544 goto do_not_strip_quotes; 04545 /* Fall through. */ 04546 default: 04547 if (yyres) 04548 yyres[yyn] = *yyp; 04549 yyn++; 04550 break; 04551 04552 case '"': 04553 if (yyres) 04554 yyres[yyn] = '\0'; 04555 return yyn; 04556 } 04557 do_not_strip_quotes: ; 04558 } 04559 04560 if (! yyres) 04561 return yystrlen (yystr); 04562 04563 return yystpcpy (yyres, yystr) - yyres; 04564 } 04565 # endif 04566 04567 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message 04568 about the unexpected token YYTOKEN for the state stack whose top is 04569 YYSSP. 04570 04571 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is 04572 not large enough to hold the message. In that case, also set 04573 *YYMSG_ALLOC to the required number of bytes. Return 2 if the 04574 required number of bytes is too large to store. */ 04575 static int 04576 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, 04577 yytype_int16 *yyssp, int yytoken) 04578 { 04579 YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]); 04580 YYSIZE_T yysize = yysize0; 04581 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 04582 /* Internationalized format string. */ 04583 const char *yyformat = YY_NULL; 04584 /* Arguments of yyformat. */ 04585 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 04586 /* Number of reported tokens (one for the "unexpected", one per 04587 "expected"). */ 04588 int yycount = 0; 04589 04590 /* There are many possibilities here to consider: 04591 - Assume YYFAIL is not used. It's too flawed to consider. See 04592 <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> 04593 for details. YYERROR is fine as it does not invoke this 04594 function. 04595 - If this state is a consistent state with a default action, then 04596 the only way this function was invoked is if the default action 04597 is an error action. In that case, don't check for expected 04598 tokens because there are none. 04599 - The only way there can be no lookahead present (in yychar) is if 04600 this state is a consistent state with a default action. Thus, 04601 detecting the absence of a lookahead is sufficient to determine 04602 that there is no unexpected or expected token to report. In that 04603 case, just report a simple "syntax error". 04604 - Don't assume there isn't a lookahead just because this state is a 04605 consistent state with a default action. There might have been a 04606 previous inconsistent state, consistent state with a non-default 04607 action, or user semantic action that manipulated yychar. 04608 - Of course, the expected token list depends on states to have 04609 correct lookahead information, and it depends on the parser not 04610 to perform extra reductions after fetching a lookahead from the 04611 scanner and before detecting a syntax error. Thus, state merging 04612 (from LALR or IELR) and default reductions corrupt the expected 04613 token list. However, the list is correct for canonical LR with 04614 one exception: it will still contain any token that will not be 04615 accepted due to an error action in a later state. 04616 */ 04617 if (yytoken != YYEMPTY) 04618 { 04619 int yyn = yypact[*yyssp]; 04620 yyarg[yycount++] = yytname[yytoken]; 04621 if (!yypact_value_is_default (yyn)) 04622 { 04623 /* Start YYX at -YYN if negative to avoid negative indexes in 04624 YYCHECK. In other words, skip the first -YYN actions for 04625 this state because they are default actions. */ 04626 int yyxbegin = yyn < 0 ? -yyn : 0; 04627 /* Stay within bounds of both yycheck and yytname. */ 04628 int yychecklim = YYLAST - yyn + 1; 04629 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 04630 int yyx; 04631 04632 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 04633 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR 04634 && !yytable_value_is_error (yytable[yyx + yyn])) 04635 { 04636 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 04637 { 04638 yycount = 1; 04639 yysize = yysize0; 04640 break; 04641 } 04642 yyarg[yycount++] = yytname[yyx]; 04643 { 04644 YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]); 04645 if (! (yysize <= yysize1 04646 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 04647 return 2; 04648 yysize = yysize1; 04649 } 04650 } 04651 } 04652 } 04653 04654 switch (yycount) 04655 { 04656 # define YYCASE_(N, S) \ 04657 case N: \ 04658 yyformat = S; \ 04659 break 04660 YYCASE_(0, YY_("syntax error")); 04661 YYCASE_(1, YY_("syntax error, unexpected %s")); 04662 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); 04663 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); 04664 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); 04665 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); 04666 # undef YYCASE_ 04667 } 04668 04669 { 04670 YYSIZE_T yysize1 = yysize + yystrlen (yyformat); 04671 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 04672 return 2; 04673 yysize = yysize1; 04674 } 04675 04676 if (*yymsg_alloc < yysize) 04677 { 04678 *yymsg_alloc = 2 * yysize; 04679 if (! (yysize <= *yymsg_alloc 04680 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) 04681 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; 04682 return 1; 04683 } 04684 04685 /* Avoid sprintf, as that infringes on the user's name space. 04686 Don't have undefined behavior even if the translation 04687 produced a string with the wrong number of "%s"s. */ 04688 { 04689 char *yyp = *yymsg; 04690 int yyi = 0; 04691 while ((*yyp = *yyformat) != '\0') 04692 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) 04693 { 04694 yyp += yytnamerr (yyp, yyarg[yyi++]); 04695 yyformat += 2; 04696 } 04697 else 04698 { 04699 yyp++; 04700 yyformat++; 04701 } 04702 } 04703 return 0; 04704 } 04705 #endif /* YYERROR_VERBOSE */ 04706 04707 /*-----------------------------------------------. 04708 | Release the memory associated to this symbol. | 04709 `-----------------------------------------------*/ 04710 04711 /*ARGSUSED*/ 04712 #if (defined __STDC__ || defined __C99__FUNC__ \ 04713 || defined __cplusplus || defined _MSC_VER) 04714 static void 04715 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser) 04716 #else 04717 static void 04718 yydestruct (yymsg, yytype, yyvaluep, parser) 04719 const char *yymsg; 04720 int yytype; 04721 YYSTYPE *yyvaluep; 04722 struct parser_params *parser; 04723 #endif 04724 { 04725 YYUSE (yyvaluep); 04726 YYUSE (parser); 04727 04728 if (!yymsg) 04729 yymsg = "Deleting"; 04730 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 04731 04732 YYUSE (yytype); 04733 } 04734 04735 04736 04737 04738 /*----------. 04739 | yyparse. | 04740 `----------*/ 04741 04742 #ifdef YYPARSE_PARAM 04743 #if (defined __STDC__ || defined __C99__FUNC__ \ 04744 || defined __cplusplus || defined _MSC_VER) 04745 int 04746 yyparse (void *YYPARSE_PARAM) 04747 #else 04748 int 04749 yyparse (YYPARSE_PARAM) 04750 void *YYPARSE_PARAM; 04751 #endif 04752 #else /* ! YYPARSE_PARAM */ 04753 #if (defined __STDC__ || defined __C99__FUNC__ \ 04754 || defined __cplusplus || defined _MSC_VER) 04755 int 04756 yyparse (struct parser_params *parser) 04757 #else 04758 int 04759 yyparse (parser) 04760 struct parser_params *parser; 04761 #endif 04762 #endif 04763 { 04764 /* The lookahead symbol. */ 04765 int yychar; 04766 04767 04768 #if defined __GNUC__ && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ 04769 /* Suppress an incorrect diagnostic about yylval being uninitialized. */ 04770 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ 04771 _Pragma ("GCC diagnostic push") \ 04772 _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"")\ 04773 _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") 04774 # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ 04775 _Pragma ("GCC diagnostic pop") 04776 #else 04777 /* Default value used for initialization, for pacifying older GCCs 04778 or non-GCC compilers. */ 04779 static YYSTYPE yyval_default; 04780 # define YY_INITIAL_VALUE(Value) = Value 04781 #endif 04782 #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 04783 # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 04784 # define YY_IGNORE_MAYBE_UNINITIALIZED_END 04785 #endif 04786 #ifndef YY_INITIAL_VALUE 04787 # define YY_INITIAL_VALUE(Value) /* Nothing. */ 04788 #endif 04789 04790 /* The semantic value of the lookahead symbol. */ 04791 YYSTYPE yylval YY_INITIAL_VALUE(yyval_default); 04792 04793 /* Number of syntax errors so far. */ 04794 int yynerrs; 04795 04796 int yystate; 04797 /* Number of tokens to shift before error messages enabled. */ 04798 int yyerrstatus; 04799 04800 /* The stacks and their tools: 04801 `yyss': related to states. 04802 `yyvs': related to semantic values. 04803 04804 Refer to the stacks through separate pointers, to allow yyoverflow 04805 to reallocate them elsewhere. */ 04806 04807 /* The state stack. */ 04808 yytype_int16 yyssa[YYINITDEPTH]; 04809 yytype_int16 *yyss; 04810 yytype_int16 *yyssp; 04811 04812 /* The semantic value stack. */ 04813 YYSTYPE yyvsa[YYINITDEPTH]; 04814 YYSTYPE *yyvs; 04815 YYSTYPE *yyvsp; 04816 04817 YYSIZE_T yystacksize; 04818 04819 int yyn; 04820 int yyresult; 04821 /* Lookahead token as an internal (translated) token number. */ 04822 int yytoken = 0; 04823 /* The variables used to return semantic value and location from the 04824 action routines. */ 04825 YYSTYPE yyval; 04826 04827 #if YYERROR_VERBOSE 04828 /* Buffer for error messages, and its allocated size. */ 04829 char yymsgbuf[128]; 04830 char *yymsg = yymsgbuf; 04831 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 04832 #endif 04833 04834 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 04835 04836 /* The number of symbols on the RHS of the reduced rule. 04837 Keep to zero when no symbol should be popped. */ 04838 int yylen = 0; 04839 04840 yyssp = yyss = yyssa; 04841 yyvsp = yyvs = yyvsa; 04842 yystacksize = YYINITDEPTH; 04843 04844 YYDPRINTF ((stderr, "Starting parse\n")); 04845 04846 yystate = 0; 04847 yyerrstatus = 0; 04848 yynerrs = 0; 04849 yychar = YYEMPTY; /* Cause a token to be read. */ 04850 goto yysetstate; 04851 04852 /*------------------------------------------------------------. 04853 | yynewstate -- Push a new state, which is found in yystate. | 04854 `------------------------------------------------------------*/ 04855 yynewstate: 04856 /* In all cases, when you get here, the value and location stacks 04857 have just been pushed. So pushing a state here evens the stacks. */ 04858 yyssp++; 04859 04860 yysetstate: 04861 *yyssp = yystate; 04862 04863 if (yyss + yystacksize - 1 <= yyssp) 04864 { 04865 /* Get the current used size of the three stacks, in elements. */ 04866 YYSIZE_T yysize = yyssp - yyss + 1; 04867 04868 #ifdef yyoverflow 04869 { 04870 /* Give user a chance to reallocate the stack. Use copies of 04871 these so that the &'s don't force the real ones into 04872 memory. */ 04873 YYSTYPE *yyvs1 = yyvs; 04874 yytype_int16 *yyss1 = yyss; 04875 04876 /* Each stack pointer address is followed by the size of the 04877 data in use in that stack, in bytes. This used to be a 04878 conditional around just the two extra args, but that might 04879 be undefined if yyoverflow is a macro. */ 04880 yyoverflow (YY_("memory exhausted"), 04881 &yyss1, yysize * sizeof (*yyssp), 04882 &yyvs1, yysize * sizeof (*yyvsp), 04883 &yystacksize); 04884 04885 yyss = yyss1; 04886 yyvs = yyvs1; 04887 } 04888 #else /* no yyoverflow */ 04889 # ifndef YYSTACK_RELOCATE 04890 goto yyexhaustedlab; 04891 # else 04892 /* Extend the stack our own way. */ 04893 if (YYMAXDEPTH <= yystacksize) 04894 goto yyexhaustedlab; 04895 yystacksize *= 2; 04896 if (YYMAXDEPTH < yystacksize) 04897 yystacksize = YYMAXDEPTH; 04898 04899 { 04900 yytype_int16 *yyss1 = yyss; 04901 union yyalloc *yyptr = 04902 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 04903 if (! yyptr) 04904 goto yyexhaustedlab; 04905 YYSTACK_RELOCATE (yyss_alloc, yyss); 04906 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 04907 # undef YYSTACK_RELOCATE 04908 if (yyss1 != yyssa) 04909 YYSTACK_FREE (yyss1); 04910 } 04911 # endif 04912 #endif /* no yyoverflow */ 04913 04914 yyssp = yyss + yysize - 1; 04915 yyvsp = yyvs + yysize - 1; 04916 04917 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 04918 (unsigned long int) yystacksize)); 04919 04920 if (yyss + yystacksize - 1 <= yyssp) 04921 YYABORT; 04922 } 04923 04924 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 04925 04926 if (yystate == YYFINAL) 04927 YYACCEPT; 04928 04929 goto yybackup; 04930 04931 /*-----------. 04932 | yybackup. | 04933 `-----------*/ 04934 yybackup: 04935 04936 /* Do appropriate processing given the current state. Read a 04937 lookahead token if we need one and don't already have one. */ 04938 04939 /* First try to decide what to do without reference to lookahead token. */ 04940 yyn = yypact[yystate]; 04941 if (yypact_value_is_default (yyn)) 04942 goto yydefault; 04943 04944 /* Not known => get a lookahead token if don't already have one. */ 04945 04946 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 04947 if (yychar == YYEMPTY) 04948 { 04949 YYDPRINTF ((stderr, "Reading a token: ")); 04950 yychar = YYLEX; 04951 } 04952 04953 if (yychar <= YYEOF) 04954 { 04955 yychar = yytoken = YYEOF; 04956 YYDPRINTF ((stderr, "Now at end of input.\n")); 04957 } 04958 else 04959 { 04960 yytoken = YYTRANSLATE (yychar); 04961 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 04962 } 04963 04964 /* If the proper action on seeing token YYTOKEN is to reduce or to 04965 detect an error, take that action. */ 04966 yyn += yytoken; 04967 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 04968 goto yydefault; 04969 yyn = yytable[yyn]; 04970 if (yyn <= 0) 04971 { 04972 if (yytable_value_is_error (yyn)) 04973 goto yyerrlab; 04974 yyn = -yyn; 04975 goto yyreduce; 04976 } 04977 04978 /* Count tokens shifted since error; after three, turn off error 04979 status. */ 04980 if (yyerrstatus) 04981 yyerrstatus--; 04982 04983 /* Shift the lookahead token. */ 04984 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 04985 04986 /* Discard the shifted token. */ 04987 yychar = YYEMPTY; 04988 04989 yystate = yyn; 04990 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 04991 *++yyvsp = yylval; 04992 YY_IGNORE_MAYBE_UNINITIALIZED_END 04993 04994 goto yynewstate; 04995 04996 04997 /*-----------------------------------------------------------. 04998 | yydefault -- do the default action for the current state. | 04999 `-----------------------------------------------------------*/ 05000 yydefault: 05001 yyn = yydefact[yystate]; 05002 if (yyn == 0) 05003 goto yyerrlab; 05004 goto yyreduce; 05005 05006 05007 /*-----------------------------. 05008 | yyreduce -- Do a reduction. | 05009 `-----------------------------*/ 05010 yyreduce: 05011 /* yyn is the number of a rule to reduce with. */ 05012 yylen = yyr2[yyn]; 05013 05014 /* If YYLEN is nonzero, implement the default value of the action: 05015 `$$ = $1'. 05016 05017 Otherwise, the following line sets YYVAL to garbage. 05018 This behavior is undocumented and Bison 05019 users should not rely upon it. Assigning to YYVAL 05020 unconditionally makes the parser a bit smaller, and it avoids a 05021 GCC warning that YYVAL may be used uninitialized. */ 05022 yyval = yyvsp[1-yylen]; 05023 05024 05025 YY_REDUCE_PRINT (yyn); 05026 switch (yyn) 05027 { 05028 case 2: 05029 /* Line 1787 of yacc.c */ 05030 #line 786 "ripper.y" 05031 { 05032 lex_state = EXPR_BEG; 05033 #if 0 05034 local_push(compile_for_eval || rb_parse_in_main()); 05035 #endif 05036 local_push(0); 05037 05038 } 05039 break; 05040 05041 case 3: 05042 /* Line 1787 of yacc.c */ 05043 #line 795 "ripper.y" 05044 { 05045 #if 0 05046 if ((yyvsp[(2) - (2)].val) && !compile_for_eval) { 05047 /* last expression should not be void */ 05048 if (nd_type((yyvsp[(2) - (2)].val)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].val)); 05049 else { 05050 NODE *node = (yyvsp[(2) - (2)].val); 05051 while (node->nd_next) { 05052 node = node->nd_next; 05053 } 05054 void_expr(node->nd_head); 05055 } 05056 } 05057 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].val))); 05058 #endif 05059 (yyval.val) = (yyvsp[(2) - (2)].val); 05060 parser->result = dispatch1(program, (yyval.val)); 05061 05062 local_pop(); 05063 } 05064 break; 05065 05066 case 4: 05067 /* Line 1787 of yacc.c */ 05068 #line 818 "ripper.y" 05069 { 05070 #if 0 05071 void_stmts((yyvsp[(1) - (2)].val)); 05072 fixup_nodes(&deferred_nodes); 05073 #endif 05074 05075 (yyval.val) = (yyvsp[(1) - (2)].val); 05076 } 05077 break; 05078 05079 case 5: 05080 /* Line 1787 of yacc.c */ 05081 #line 829 "ripper.y" 05082 { 05083 #if 0 05084 (yyval.val) = NEW_BEGIN(0); 05085 #endif 05086 (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), 05087 dispatch0(void_stmt)); 05088 05089 } 05090 break; 05091 05092 case 6: 05093 /* Line 1787 of yacc.c */ 05094 #line 838 "ripper.y" 05095 { 05096 #if 0 05097 (yyval.val) = newline_node((yyvsp[(1) - (1)].val)); 05098 #endif 05099 (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val)); 05100 05101 } 05102 break; 05103 05104 case 7: 05105 /* Line 1787 of yacc.c */ 05106 #line 846 "ripper.y" 05107 { 05108 #if 0 05109 (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val))); 05110 #endif 05111 (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05112 05113 } 05114 break; 05115 05116 case 8: 05117 /* Line 1787 of yacc.c */ 05118 #line 854 "ripper.y" 05119 { 05120 (yyval.val) = remove_begin((yyvsp[(2) - (2)].val)); 05121 } 05122 break; 05123 05124 case 10: 05125 /* Line 1787 of yacc.c */ 05126 #line 861 "ripper.y" 05127 { 05128 if (in_def || in_single) { 05129 yyerror("BEGIN in method"); 05130 } 05131 #if 0 05132 /* local_push(0); */ 05133 #endif 05134 05135 } 05136 break; 05137 05138 case 11: 05139 /* Line 1787 of yacc.c */ 05140 #line 871 "ripper.y" 05141 { 05142 #if 0 05143 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin, 05144 (yyvsp[(4) - (5)].val)); 05145 /* NEW_PREEXE($4)); */ 05146 /* local_pop(); */ 05147 (yyval.val) = NEW_BEGIN(0); 05148 #endif 05149 (yyval.val) = dispatch1(BEGIN, (yyvsp[(4) - (5)].val)); 05150 05151 } 05152 break; 05153 05154 case 12: 05155 /* Line 1787 of yacc.c */ 05156 #line 888 "ripper.y" 05157 { 05158 #if 0 05159 (yyval.val) = (yyvsp[(1) - (4)].val); 05160 if ((yyvsp[(2) - (4)].val)) { 05161 (yyval.val) = NEW_RESCUE((yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val)); 05162 } 05163 else if ((yyvsp[(3) - (4)].val)) { 05164 rb_warn0("else without rescue is useless"); 05165 (yyval.val) = block_append((yyval.val), (yyvsp[(3) - (4)].val)); 05166 } 05167 if ((yyvsp[(4) - (4)].val)) { 05168 if ((yyval.val)) { 05169 (yyval.val) = NEW_ENSURE((yyval.val), (yyvsp[(4) - (4)].val)); 05170 } 05171 else { 05172 (yyval.val) = block_append((yyvsp[(4) - (4)].val), NEW_NIL()); 05173 } 05174 } 05175 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 05176 #endif 05177 (yyval.val) = dispatch4(bodystmt, 05178 escape_Qundef((yyvsp[(1) - (4)].val)), 05179 escape_Qundef((yyvsp[(2) - (4)].val)), 05180 escape_Qundef((yyvsp[(3) - (4)].val)), 05181 escape_Qundef((yyvsp[(4) - (4)].val))); 05182 05183 } 05184 break; 05185 05186 case 13: 05187 /* Line 1787 of yacc.c */ 05188 #line 918 "ripper.y" 05189 { 05190 #if 0 05191 void_stmts((yyvsp[(1) - (2)].val)); 05192 fixup_nodes(&deferred_nodes); 05193 #endif 05194 05195 (yyval.val) = (yyvsp[(1) - (2)].val); 05196 } 05197 break; 05198 05199 case 14: 05200 /* Line 1787 of yacc.c */ 05201 #line 929 "ripper.y" 05202 { 05203 #if 0 05204 (yyval.val) = NEW_BEGIN(0); 05205 #endif 05206 (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), 05207 dispatch0(void_stmt)); 05208 05209 } 05210 break; 05211 05212 case 15: 05213 /* Line 1787 of yacc.c */ 05214 #line 938 "ripper.y" 05215 { 05216 #if 0 05217 (yyval.val) = newline_node((yyvsp[(1) - (1)].val)); 05218 #endif 05219 (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val)); 05220 05221 } 05222 break; 05223 05224 case 16: 05225 /* Line 1787 of yacc.c */ 05226 #line 946 "ripper.y" 05227 { 05228 #if 0 05229 (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val))); 05230 #endif 05231 (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05232 05233 } 05234 break; 05235 05236 case 17: 05237 /* Line 1787 of yacc.c */ 05238 #line 954 "ripper.y" 05239 { 05240 (yyval.val) = remove_begin((yyvsp[(2) - (2)].val)); 05241 } 05242 break; 05243 05244 case 18: 05245 /* Line 1787 of yacc.c */ 05246 #line 959 "ripper.y" 05247 {lex_state = EXPR_FNAME;} 05248 break; 05249 05250 case 19: 05251 /* Line 1787 of yacc.c */ 05252 #line 960 "ripper.y" 05253 { 05254 #if 0 05255 (yyval.val) = NEW_ALIAS((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val)); 05256 #endif 05257 (yyval.val) = dispatch2(alias, (yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val)); 05258 05259 } 05260 break; 05261 05262 case 20: 05263 /* Line 1787 of yacc.c */ 05264 #line 968 "ripper.y" 05265 { 05266 #if 0 05267 (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05268 #endif 05269 (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05270 05271 } 05272 break; 05273 05274 case 21: 05275 /* Line 1787 of yacc.c */ 05276 #line 976 "ripper.y" 05277 { 05278 #if 0 05279 char buf[2]; 05280 buf[0] = '$'; 05281 buf[1] = (char)(yyvsp[(3) - (3)].val)->nd_nth; 05282 (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), rb_intern2(buf, 2)); 05283 #endif 05284 (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05285 05286 } 05287 break; 05288 05289 case 22: 05290 /* Line 1787 of yacc.c */ 05291 #line 987 "ripper.y" 05292 { 05293 #if 0 05294 yyerror("can't make alias for the number variables"); 05295 (yyval.val) = NEW_BEGIN(0); 05296 #endif 05297 (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05298 (yyval.val) = dispatch1(alias_error, (yyval.val)); 05299 05300 } 05301 break; 05302 05303 case 23: 05304 /* Line 1787 of yacc.c */ 05305 #line 997 "ripper.y" 05306 { 05307 #if 0 05308 (yyval.val) = (yyvsp[(2) - (2)].val); 05309 #endif 05310 (yyval.val) = dispatch1(undef, (yyvsp[(2) - (2)].val)); 05311 05312 } 05313 break; 05314 05315 case 24: 05316 /* Line 1787 of yacc.c */ 05317 #line 1005 "ripper.y" 05318 { 05319 #if 0 05320 (yyval.val) = NEW_IF(cond((yyvsp[(3) - (3)].val)), remove_begin((yyvsp[(1) - (3)].val)), 0); 05321 fixpos((yyval.val), (yyvsp[(3) - (3)].val)); 05322 #endif 05323 (yyval.val) = dispatch2(if_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val)); 05324 05325 } 05326 break; 05327 05328 case 25: 05329 /* Line 1787 of yacc.c */ 05330 #line 1014 "ripper.y" 05331 { 05332 #if 0 05333 (yyval.val) = NEW_UNLESS(cond((yyvsp[(3) - (3)].val)), remove_begin((yyvsp[(1) - (3)].val)), 0); 05334 fixpos((yyval.val), (yyvsp[(3) - (3)].val)); 05335 #endif 05336 (yyval.val) = dispatch2(unless_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val)); 05337 05338 } 05339 break; 05340 05341 case 26: 05342 /* Line 1787 of yacc.c */ 05343 #line 1023 "ripper.y" 05344 { 05345 #if 0 05346 if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) { 05347 (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0); 05348 } 05349 else { 05350 (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1); 05351 } 05352 #endif 05353 (yyval.val) = dispatch2(while_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val)); 05354 05355 } 05356 break; 05357 05358 case 27: 05359 /* Line 1787 of yacc.c */ 05360 #line 1036 "ripper.y" 05361 { 05362 #if 0 05363 if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) { 05364 (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0); 05365 } 05366 else { 05367 (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1); 05368 } 05369 #endif 05370 (yyval.val) = dispatch2(until_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val)); 05371 05372 } 05373 break; 05374 05375 case 28: 05376 /* Line 1787 of yacc.c */ 05377 #line 1049 "ripper.y" 05378 { 05379 #if 0 05380 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].val)), 0); 05381 (yyval.val) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].val)), resq, 0); 05382 #endif 05383 (yyval.val) = dispatch2(rescue_mod, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05384 05385 } 05386 break; 05387 05388 case 29: 05389 /* Line 1787 of yacc.c */ 05390 #line 1058 "ripper.y" 05391 { 05392 if (in_def || in_single) { 05393 rb_warn0("END in method; use at_exit"); 05394 } 05395 #if 0 05396 (yyval.val) = NEW_POSTEXE(NEW_NODE( 05397 NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].val) /* body */, 0 /* args */)); 05398 #endif 05399 (yyval.val) = dispatch1(END, (yyvsp[(3) - (4)].val)); 05400 05401 } 05402 break; 05403 05404 case 31: 05405 /* Line 1787 of yacc.c */ 05406 #line 1071 "ripper.y" 05407 { 05408 #if 0 05409 value_expr((yyvsp[(3) - (3)].val)); 05410 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05411 (yyval.val) = (yyvsp[(1) - (3)].val); 05412 #endif 05413 (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05414 05415 } 05416 break; 05417 05418 case 32: 05419 /* Line 1787 of yacc.c */ 05420 #line 1081 "ripper.y" 05421 { 05422 #if 0 05423 value_expr((yyvsp[(3) - (3)].val)); 05424 if ((yyvsp[(1) - (3)].val)) { 05425 ID vid = (yyvsp[(1) - (3)].val)->nd_vid; 05426 if ((yyvsp[(2) - (3)].val) == tOROP) { 05427 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05428 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].val)); 05429 if (is_asgn_or_id(vid)) { 05430 (yyval.val)->nd_aid = vid; 05431 } 05432 } 05433 else if ((yyvsp[(2) - (3)].val) == tANDOP) { 05434 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05435 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].val)); 05436 } 05437 else { 05438 (yyval.val) = (yyvsp[(1) - (3)].val); 05439 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].val), NEW_LIST((yyvsp[(3) - (3)].val))); 05440 } 05441 } 05442 else { 05443 (yyval.val) = NEW_BEGIN(0); 05444 } 05445 #endif 05446 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05447 05448 } 05449 break; 05450 05451 case 33: 05452 /* Line 1787 of yacc.c */ 05453 #line 1110 "ripper.y" 05454 { 05455 #if 0 05456 NODE *args; 05457 05458 value_expr((yyvsp[(6) - (6)].val)); 05459 if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY(); 05460 args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 05461 if ((yyvsp[(5) - (6)].val) == tOROP) { 05462 (yyvsp[(5) - (6)].val) = 0; 05463 } 05464 else if ((yyvsp[(5) - (6)].val) == tANDOP) { 05465 (yyvsp[(5) - (6)].val) = 1; 05466 } 05467 (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args); 05468 fixpos((yyval.val), (yyvsp[(1) - (6)].val)); 05469 #endif 05470 (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val))); 05471 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 05472 05473 } 05474 break; 05475 05476 case 34: 05477 /* Line 1787 of yacc.c */ 05478 #line 1131 "ripper.y" 05479 { 05480 #if 0 05481 value_expr((yyvsp[(5) - (5)].val)); 05482 if ((yyvsp[(4) - (5)].val) == tOROP) { 05483 (yyvsp[(4) - (5)].val) = 0; 05484 } 05485 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 05486 (yyvsp[(4) - (5)].val) = 1; 05487 } 05488 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05489 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05490 #endif 05491 (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val)); 05492 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05493 05494 } 05495 break; 05496 05497 case 35: 05498 /* Line 1787 of yacc.c */ 05499 #line 1148 "ripper.y" 05500 { 05501 #if 0 05502 value_expr((yyvsp[(5) - (5)].val)); 05503 if ((yyvsp[(4) - (5)].val) == tOROP) { 05504 (yyvsp[(4) - (5)].val) = 0; 05505 } 05506 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 05507 (yyvsp[(4) - (5)].val) = 1; 05508 } 05509 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05510 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05511 #endif 05512 (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val)); 05513 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05514 05515 } 05516 break; 05517 05518 case 36: 05519 /* Line 1787 of yacc.c */ 05520 #line 1165 "ripper.y" 05521 { 05522 #if 0 05523 yyerror("constant re-assignment"); 05524 (yyval.val) = 0; 05525 #endif 05526 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val)); 05527 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05528 (yyval.val) = dispatch1(assign_error, (yyval.val)); 05529 05530 } 05531 break; 05532 05533 case 37: 05534 /* Line 1787 of yacc.c */ 05535 #line 1176 "ripper.y" 05536 { 05537 #if 0 05538 value_expr((yyvsp[(5) - (5)].val)); 05539 if ((yyvsp[(4) - (5)].val) == tOROP) { 05540 (yyvsp[(4) - (5)].val) = 0; 05541 } 05542 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 05543 (yyvsp[(4) - (5)].val) = 1; 05544 } 05545 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05546 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05547 #endif 05548 (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val)); 05549 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05550 05551 } 05552 break; 05553 05554 case 38: 05555 /* Line 1787 of yacc.c */ 05556 #line 1193 "ripper.y" 05557 { 05558 #if 0 05559 rb_backref_error((yyvsp[(1) - (3)].val)); 05560 (yyval.val) = NEW_BEGIN(0); 05561 #endif 05562 (yyval.val) = dispatch2(assign, dispatch1(var_field, (yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val)); 05563 (yyval.val) = dispatch1(assign_error, (yyval.val)); 05564 05565 } 05566 break; 05567 05568 case 39: 05569 /* Line 1787 of yacc.c */ 05570 #line 1203 "ripper.y" 05571 { 05572 #if 0 05573 value_expr((yyvsp[(3) - (3)].val)); 05574 (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05575 #endif 05576 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05577 05578 } 05579 break; 05580 05581 case 40: 05582 /* Line 1787 of yacc.c */ 05583 #line 1212 "ripper.y" 05584 { 05585 #if 0 05586 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05587 (yyval.val) = (yyvsp[(1) - (3)].val); 05588 #endif 05589 (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05590 05591 } 05592 break; 05593 05594 case 41: 05595 /* Line 1787 of yacc.c */ 05596 #line 1221 "ripper.y" 05597 { 05598 #if 0 05599 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05600 (yyval.val) = (yyvsp[(1) - (3)].val); 05601 #endif 05602 (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05603 05604 } 05605 break; 05606 05607 case 43: 05608 /* Line 1787 of yacc.c */ 05609 #line 1233 "ripper.y" 05610 { 05611 #if 0 05612 value_expr((yyvsp[(3) - (3)].val)); 05613 (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05614 #endif 05615 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05616 05617 } 05618 break; 05619 05620 case 44: 05621 /* Line 1787 of yacc.c */ 05622 #line 1242 "ripper.y" 05623 { 05624 #if 0 05625 value_expr((yyvsp[(3) - (3)].val)); 05626 (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05627 #endif 05628 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05629 05630 } 05631 break; 05632 05633 case 46: 05634 /* Line 1787 of yacc.c */ 05635 #line 1255 "ripper.y" 05636 { 05637 #if 0 05638 (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05639 #endif 05640 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("and"), (yyvsp[(3) - (3)].val)); 05641 05642 } 05643 break; 05644 05645 case 47: 05646 /* Line 1787 of yacc.c */ 05647 #line 1263 "ripper.y" 05648 { 05649 #if 0 05650 (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05651 #endif 05652 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("or"), (yyvsp[(3) - (3)].val)); 05653 05654 } 05655 break; 05656 05657 case 48: 05658 /* Line 1787 of yacc.c */ 05659 #line 1271 "ripper.y" 05660 { 05661 #if 0 05662 (yyval.val) = call_uni_op(cond((yyvsp[(3) - (3)].val)), '!'); 05663 #endif 05664 (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (3)].val)); 05665 05666 } 05667 break; 05668 05669 case 49: 05670 /* Line 1787 of yacc.c */ 05671 #line 1279 "ripper.y" 05672 { 05673 #if 0 05674 (yyval.val) = call_uni_op(cond((yyvsp[(2) - (2)].val)), '!'); 05675 #endif 05676 (yyval.val) = dispatch2(unary, ripper_id2sym('!'), (yyvsp[(2) - (2)].val)); 05677 05678 } 05679 break; 05680 05681 case 51: 05682 /* Line 1787 of yacc.c */ 05683 #line 1290 "ripper.y" 05684 { 05685 #if 0 05686 value_expr((yyvsp[(1) - (1)].val)); 05687 (yyval.val) = (yyvsp[(1) - (1)].val); 05688 if (!(yyval.val)) (yyval.val) = NEW_NIL(); 05689 #endif 05690 (yyval.val) = (yyvsp[(1) - (1)].val); 05691 05692 } 05693 break; 05694 05695 case 55: 05696 /* Line 1787 of yacc.c */ 05697 #line 1307 "ripper.y" 05698 { 05699 #if 0 05700 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05701 #endif 05702 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val)); 05703 (yyval.val) = method_arg((yyval.val), (yyvsp[(4) - (4)].val)); 05704 05705 } 05706 break; 05707 05708 case 56: 05709 /* Line 1787 of yacc.c */ 05710 #line 1316 "ripper.y" 05711 { 05712 #if 0 05713 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05714 #endif 05715 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val)); 05716 (yyval.val) = method_arg((yyval.val), (yyvsp[(4) - (4)].val)); 05717 05718 } 05719 break; 05720 05721 case 57: 05722 /* Line 1787 of yacc.c */ 05723 #line 1327 "ripper.y" 05724 { 05725 (yyvsp[(1) - (1)].vars) = dyna_push(); 05726 #if 0 05727 (yyval.num) = ruby_sourceline; 05728 #endif 05729 05730 } 05731 break; 05732 05733 case 58: 05734 /* Line 1787 of yacc.c */ 05735 #line 1337 "ripper.y" 05736 { 05737 #if 0 05738 (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val)); 05739 nd_set_line((yyval.val), (yyvsp[(2) - (5)].num)); 05740 #endif 05741 (yyval.val) = dispatch2(brace_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val)); 05742 05743 dyna_pop((yyvsp[(1) - (5)].vars)); 05744 } 05745 break; 05746 05747 case 59: 05748 /* Line 1787 of yacc.c */ 05749 #line 1349 "ripper.y" 05750 { 05751 #if 0 05752 (yyval.val) = NEW_FCALL((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 05753 fixpos((yyval.val), (yyvsp[(2) - (2)].val)); 05754 #endif 05755 (yyval.val) = dispatch2(command, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 05756 05757 } 05758 break; 05759 05760 case 60: 05761 /* Line 1787 of yacc.c */ 05762 #line 1358 "ripper.y" 05763 { 05764 #if 0 05765 block_dup_check((yyvsp[(2) - (3)].val),(yyvsp[(3) - (3)].val)); 05766 (yyvsp[(3) - (3)].val)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 05767 (yyval.val) = (yyvsp[(3) - (3)].val); 05768 fixpos((yyval.val), (yyvsp[(2) - (3)].val)); 05769 #endif 05770 (yyval.val) = dispatch2(command, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 05771 (yyval.val) = method_add_block((yyval.val), (yyvsp[(3) - (3)].val)); 05772 05773 } 05774 break; 05775 05776 case 61: 05777 /* Line 1787 of yacc.c */ 05778 #line 1370 "ripper.y" 05779 { 05780 #if 0 05781 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05782 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 05783 #endif 05784 (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05785 05786 } 05787 break; 05788 05789 case 62: 05790 /* Line 1787 of yacc.c */ 05791 #line 1379 "ripper.y" 05792 { 05793 #if 0 05794 block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val)); 05795 (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val)); 05796 (yyval.val) = (yyvsp[(5) - (5)].val); 05797 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05798 #endif 05799 (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val)); 05800 (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val)); 05801 05802 } 05803 break; 05804 05805 case 63: 05806 /* Line 1787 of yacc.c */ 05807 #line 1391 "ripper.y" 05808 { 05809 #if 0 05810 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05811 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 05812 #endif 05813 (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05814 05815 } 05816 break; 05817 05818 case 64: 05819 /* Line 1787 of yacc.c */ 05820 #line 1400 "ripper.y" 05821 { 05822 #if 0 05823 block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val)); 05824 (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val)); 05825 (yyval.val) = (yyvsp[(5) - (5)].val); 05826 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05827 #endif 05828 (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val)); 05829 (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val)); 05830 05831 } 05832 break; 05833 05834 case 65: 05835 /* Line 1787 of yacc.c */ 05836 #line 1412 "ripper.y" 05837 { 05838 #if 0 05839 (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val)); 05840 fixpos((yyval.val), (yyvsp[(2) - (2)].val)); 05841 #endif 05842 (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val)); 05843 05844 } 05845 break; 05846 05847 case 66: 05848 /* Line 1787 of yacc.c */ 05849 #line 1421 "ripper.y" 05850 { 05851 #if 0 05852 (yyval.val) = new_yield((yyvsp[(2) - (2)].val)); 05853 fixpos((yyval.val), (yyvsp[(2) - (2)].val)); 05854 #endif 05855 (yyval.val) = dispatch1(yield, (yyvsp[(2) - (2)].val)); 05856 05857 } 05858 break; 05859 05860 case 67: 05861 /* Line 1787 of yacc.c */ 05862 #line 1430 "ripper.y" 05863 { 05864 #if 0 05865 (yyval.val) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].val))); 05866 #endif 05867 (yyval.val) = dispatch1(return, (yyvsp[(2) - (2)].val)); 05868 05869 } 05870 break; 05871 05872 case 68: 05873 /* Line 1787 of yacc.c */ 05874 #line 1438 "ripper.y" 05875 { 05876 #if 0 05877 (yyval.val) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].val))); 05878 #endif 05879 (yyval.val) = dispatch1(break, (yyvsp[(2) - (2)].val)); 05880 05881 } 05882 break; 05883 05884 case 69: 05885 /* Line 1787 of yacc.c */ 05886 #line 1446 "ripper.y" 05887 { 05888 #if 0 05889 (yyval.val) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].val))); 05890 #endif 05891 (yyval.val) = dispatch1(next, (yyvsp[(2) - (2)].val)); 05892 05893 } 05894 break; 05895 05896 case 71: 05897 /* Line 1787 of yacc.c */ 05898 #line 1457 "ripper.y" 05899 { 05900 #if 0 05901 (yyval.val) = (yyvsp[(2) - (3)].val); 05902 #endif 05903 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 05904 05905 } 05906 break; 05907 05908 case 73: 05909 /* Line 1787 of yacc.c */ 05910 #line 1468 "ripper.y" 05911 { 05912 #if 0 05913 (yyval.val) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].val)), 0); 05914 #endif 05915 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 05916 05917 } 05918 break; 05919 05920 case 74: 05921 /* Line 1787 of yacc.c */ 05922 #line 1478 "ripper.y" 05923 { 05924 #if 0 05925 (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0); 05926 #endif 05927 (yyval.val) = (yyvsp[(1) - (1)].val); 05928 05929 } 05930 break; 05931 05932 case 75: 05933 /* Line 1787 of yacc.c */ 05934 #line 1486 "ripper.y" 05935 { 05936 #if 0 05937 (yyval.val) = NEW_MASGN(list_append((yyvsp[(1) - (2)].val),(yyvsp[(2) - (2)].val)), 0); 05938 #endif 05939 (yyval.val) = mlhs_add((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 05940 05941 } 05942 break; 05943 05944 case 76: 05945 /* Line 1787 of yacc.c */ 05946 #line 1494 "ripper.y" 05947 { 05948 #if 0 05949 (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05950 #endif 05951 (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05952 05953 } 05954 break; 05955 05956 case 77: 05957 /* Line 1787 of yacc.c */ 05958 #line 1502 "ripper.y" 05959 { 05960 #if 0 05961 (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG((yyvsp[(3) - (5)].val),(yyvsp[(5) - (5)].val))); 05962 #endif 05963 (yyvsp[(1) - (5)].val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val)); 05964 (yyval.val) = mlhs_add((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val)); 05965 05966 } 05967 break; 05968 05969 case 78: 05970 /* Line 1787 of yacc.c */ 05971 #line 1511 "ripper.y" 05972 { 05973 #if 0 05974 (yyval.val) = NEW_MASGN((yyvsp[(1) - (2)].val), -1); 05975 #endif 05976 (yyval.val) = mlhs_add_star((yyvsp[(1) - (2)].val), Qnil); 05977 05978 } 05979 break; 05980 05981 case 79: 05982 /* Line 1787 of yacc.c */ 05983 #line 1519 "ripper.y" 05984 { 05985 #if 0 05986 (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), NEW_POSTARG(-1, (yyvsp[(4) - (4)].val))); 05987 #endif 05988 (yyvsp[(1) - (4)].val) = mlhs_add_star((yyvsp[(1) - (4)].val), Qnil); 05989 (yyval.val) = mlhs_add((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 05990 05991 } 05992 break; 05993 05994 case 80: 05995 /* Line 1787 of yacc.c */ 05996 #line 1528 "ripper.y" 05997 { 05998 #if 0 05999 (yyval.val) = NEW_MASGN(0, (yyvsp[(2) - (2)].val)); 06000 #endif 06001 (yyval.val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (2)].val)); 06002 06003 } 06004 break; 06005 06006 case 81: 06007 /* Line 1787 of yacc.c */ 06008 #line 1536 "ripper.y" 06009 { 06010 #if 0 06011 (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].val),(yyvsp[(4) - (4)].val))); 06012 #endif 06013 (yyvsp[(2) - (4)].val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (4)].val)); 06014 (yyval.val) = mlhs_add((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val)); 06015 06016 } 06017 break; 06018 06019 case 82: 06020 /* Line 1787 of yacc.c */ 06021 #line 1545 "ripper.y" 06022 { 06023 #if 0 06024 (yyval.val) = NEW_MASGN(0, -1); 06025 #endif 06026 (yyval.val) = mlhs_add_star(mlhs_new(), Qnil); 06027 06028 } 06029 break; 06030 06031 case 83: 06032 /* Line 1787 of yacc.c */ 06033 #line 1553 "ripper.y" 06034 { 06035 #if 0 06036 (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val))); 06037 #endif 06038 (yyval.val) = mlhs_add_star(mlhs_new(), Qnil); 06039 (yyval.val) = mlhs_add((yyval.val), (yyvsp[(3) - (3)].val)); 06040 06041 } 06042 break; 06043 06044 case 85: 06045 /* Line 1787 of yacc.c */ 06046 #line 1565 "ripper.y" 06047 { 06048 #if 0 06049 (yyval.val) = (yyvsp[(2) - (3)].val); 06050 #endif 06051 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 06052 06053 } 06054 break; 06055 06056 case 86: 06057 /* Line 1787 of yacc.c */ 06058 #line 1575 "ripper.y" 06059 { 06060 #if 0 06061 (yyval.val) = NEW_LIST((yyvsp[(1) - (2)].val)); 06062 #endif 06063 (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (2)].val)); 06064 06065 } 06066 break; 06067 06068 case 87: 06069 /* Line 1787 of yacc.c */ 06070 #line 1583 "ripper.y" 06071 { 06072 #if 0 06073 (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 06074 #endif 06075 (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 06076 06077 } 06078 break; 06079 06080 case 88: 06081 /* Line 1787 of yacc.c */ 06082 #line 1593 "ripper.y" 06083 { 06084 #if 0 06085 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 06086 #endif 06087 (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val)); 06088 06089 } 06090 break; 06091 06092 case 89: 06093 /* Line 1787 of yacc.c */ 06094 #line 1601 "ripper.y" 06095 { 06096 #if 0 06097 (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06098 #endif 06099 (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06100 06101 } 06102 break; 06103 06104 case 90: 06105 /* Line 1787 of yacc.c */ 06106 #line 1611 "ripper.y" 06107 { 06108 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 06109 } 06110 break; 06111 06112 case 91: 06113 /* Line 1787 of yacc.c */ 06114 #line 1615 "ripper.y" 06115 { 06116 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 06117 } 06118 break; 06119 06120 case 92: 06121 /* Line 1787 of yacc.c */ 06122 #line 1619 "ripper.y" 06123 { 06124 #if 0 06125 (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)); 06126 #endif 06127 (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val))); 06128 06129 } 06130 break; 06131 06132 case 93: 06133 /* Line 1787 of yacc.c */ 06134 #line 1627 "ripper.y" 06135 { 06136 #if 0 06137 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06138 #endif 06139 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val)); 06140 06141 } 06142 break; 06143 06144 case 94: 06145 /* Line 1787 of yacc.c */ 06146 #line 1635 "ripper.y" 06147 { 06148 #if 0 06149 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06150 #endif 06151 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06152 06153 } 06154 break; 06155 06156 case 95: 06157 /* Line 1787 of yacc.c */ 06158 #line 1643 "ripper.y" 06159 { 06160 #if 0 06161 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06162 #endif 06163 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val)); 06164 06165 } 06166 break; 06167 06168 case 96: 06169 /* Line 1787 of yacc.c */ 06170 #line 1651 "ripper.y" 06171 { 06172 #if 0 06173 if (in_def || in_single) 06174 yyerror("dynamic constant assignment"); 06175 (yyval.val) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val))); 06176 #endif 06177 if (in_def || in_single) 06178 yyerror("dynamic constant assignment"); 06179 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06180 06181 } 06182 break; 06183 06184 case 97: 06185 /* Line 1787 of yacc.c */ 06186 #line 1663 "ripper.y" 06187 { 06188 #if 0 06189 if (in_def || in_single) 06190 yyerror("dynamic constant assignment"); 06191 (yyval.val) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].val))); 06192 #endif 06193 (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (2)].val)); 06194 06195 } 06196 break; 06197 06198 case 98: 06199 /* Line 1787 of yacc.c */ 06200 #line 1673 "ripper.y" 06201 { 06202 #if 0 06203 rb_backref_error((yyvsp[(1) - (1)].val)); 06204 (yyval.val) = NEW_BEGIN(0); 06205 #endif 06206 (yyval.val) = dispatch1(var_field, (yyvsp[(1) - (1)].val)); 06207 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06208 06209 } 06210 break; 06211 06212 case 99: 06213 /* Line 1787 of yacc.c */ 06214 #line 1685 "ripper.y" 06215 { 06216 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 06217 #if 0 06218 if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0); 06219 #endif 06220 (yyval.val) = dispatch1(var_field, (yyval.val)); 06221 06222 } 06223 break; 06224 06225 case 100: 06226 /* Line 1787 of yacc.c */ 06227 #line 1694 "ripper.y" 06228 { 06229 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 06230 #if 0 06231 if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0); 06232 #endif 06233 (yyval.val) = dispatch1(var_field, (yyval.val)); 06234 06235 } 06236 break; 06237 06238 case 101: 06239 /* Line 1787 of yacc.c */ 06240 #line 1703 "ripper.y" 06241 { 06242 #if 0 06243 (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)); 06244 #endif 06245 (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val))); 06246 06247 } 06248 break; 06249 06250 case 102: 06251 /* Line 1787 of yacc.c */ 06252 #line 1711 "ripper.y" 06253 { 06254 #if 0 06255 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06256 #endif 06257 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val)); 06258 06259 } 06260 break; 06261 06262 case 103: 06263 /* Line 1787 of yacc.c */ 06264 #line 1719 "ripper.y" 06265 { 06266 #if 0 06267 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06268 #endif 06269 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_intern("::"), (yyvsp[(3) - (3)].val)); 06270 06271 } 06272 break; 06273 06274 case 104: 06275 /* Line 1787 of yacc.c */ 06276 #line 1727 "ripper.y" 06277 { 06278 #if 0 06279 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06280 #endif 06281 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val)); 06282 06283 } 06284 break; 06285 06286 case 105: 06287 /* Line 1787 of yacc.c */ 06288 #line 1735 "ripper.y" 06289 { 06290 #if 0 06291 if (in_def || in_single) 06292 yyerror("dynamic constant assignment"); 06293 (yyval.val) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val))); 06294 #endif 06295 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06296 if (in_def || in_single) { 06297 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06298 } 06299 06300 } 06301 break; 06302 06303 case 106: 06304 /* Line 1787 of yacc.c */ 06305 #line 1748 "ripper.y" 06306 { 06307 #if 0 06308 if (in_def || in_single) 06309 yyerror("dynamic constant assignment"); 06310 (yyval.val) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].val))); 06311 #endif 06312 (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (2)].val)); 06313 if (in_def || in_single) { 06314 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06315 } 06316 06317 } 06318 break; 06319 06320 case 107: 06321 /* Line 1787 of yacc.c */ 06322 #line 1761 "ripper.y" 06323 { 06324 #if 0 06325 rb_backref_error((yyvsp[(1) - (1)].val)); 06326 (yyval.val) = NEW_BEGIN(0); 06327 #endif 06328 (yyval.val) = dispatch1(assign_error, (yyvsp[(1) - (1)].val)); 06329 06330 } 06331 break; 06332 06333 case 108: 06334 /* Line 1787 of yacc.c */ 06335 #line 1772 "ripper.y" 06336 { 06337 #if 0 06338 yyerror("class/module name must be CONSTANT"); 06339 #endif 06340 (yyval.val) = dispatch1(class_name_error, (yyvsp[(1) - (1)].val)); 06341 06342 } 06343 break; 06344 06345 case 110: 06346 /* Line 1787 of yacc.c */ 06347 #line 1783 "ripper.y" 06348 { 06349 #if 0 06350 (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val)); 06351 #endif 06352 (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val)); 06353 06354 } 06355 break; 06356 06357 case 111: 06358 /* Line 1787 of yacc.c */ 06359 #line 1791 "ripper.y" 06360 { 06361 #if 0 06362 (yyval.val) = NEW_COLON2(0, (yyval.val)); 06363 #endif 06364 (yyval.val) = dispatch1(const_ref, (yyvsp[(1) - (1)].val)); 06365 06366 } 06367 break; 06368 06369 case 112: 06370 /* Line 1787 of yacc.c */ 06371 #line 1799 "ripper.y" 06372 { 06373 #if 0 06374 (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06375 #endif 06376 (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06377 06378 } 06379 break; 06380 06381 case 116: 06382 /* Line 1787 of yacc.c */ 06383 #line 1812 "ripper.y" 06384 { 06385 lex_state = EXPR_ENDFN; 06386 (yyval.val) = (yyvsp[(1) - (1)].val); 06387 } 06388 break; 06389 06390 case 117: 06391 /* Line 1787 of yacc.c */ 06392 #line 1817 "ripper.y" 06393 { 06394 lex_state = EXPR_ENDFN; 06395 #if 0 06396 (yyval.val) = (yyvsp[(1) - (1)].id); 06397 #endif 06398 (yyval.val) = (yyvsp[(1) - (1)].val); 06399 06400 } 06401 break; 06402 06403 case 120: 06404 /* Line 1787 of yacc.c */ 06405 #line 1832 "ripper.y" 06406 { 06407 #if 0 06408 (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val))); 06409 #endif 06410 (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val)); 06411 06412 } 06413 break; 06414 06415 case 122: 06416 /* Line 1787 of yacc.c */ 06417 #line 1843 "ripper.y" 06418 { 06419 #if 0 06420 (yyval.val) = NEW_UNDEF((yyvsp[(1) - (1)].val)); 06421 #endif 06422 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 06423 06424 } 06425 break; 06426 06427 case 123: 06428 /* Line 1787 of yacc.c */ 06429 #line 1850 "ripper.y" 06430 {lex_state = EXPR_FNAME;} 06431 break; 06432 06433 case 124: 06434 /* Line 1787 of yacc.c */ 06435 #line 1851 "ripper.y" 06436 { 06437 #if 0 06438 (yyval.val) = block_append((yyvsp[(1) - (4)].val), NEW_UNDEF((yyvsp[(4) - (4)].val))); 06439 #endif 06440 rb_ary_push((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 06441 06442 } 06443 break; 06444 06445 case 125: 06446 /* Line 1787 of yacc.c */ 06447 #line 1860 "ripper.y" 06448 { ifndef_ripper((yyval.val) = '|'); } 06449 break; 06450 06451 case 126: 06452 /* Line 1787 of yacc.c */ 06453 #line 1861 "ripper.y" 06454 { ifndef_ripper((yyval.val) = '^'); } 06455 break; 06456 06457 case 127: 06458 /* Line 1787 of yacc.c */ 06459 #line 1862 "ripper.y" 06460 { ifndef_ripper((yyval.val) = '&'); } 06461 break; 06462 06463 case 128: 06464 /* Line 1787 of yacc.c */ 06465 #line 1863 "ripper.y" 06466 { ifndef_ripper((yyval.val) = tCMP); } 06467 break; 06468 06469 case 129: 06470 /* Line 1787 of yacc.c */ 06471 #line 1864 "ripper.y" 06472 { ifndef_ripper((yyval.val) = tEQ); } 06473 break; 06474 06475 case 130: 06476 /* Line 1787 of yacc.c */ 06477 #line 1865 "ripper.y" 06478 { ifndef_ripper((yyval.val) = tEQQ); } 06479 break; 06480 06481 case 131: 06482 /* Line 1787 of yacc.c */ 06483 #line 1866 "ripper.y" 06484 { ifndef_ripper((yyval.val) = tMATCH); } 06485 break; 06486 06487 case 132: 06488 /* Line 1787 of yacc.c */ 06489 #line 1867 "ripper.y" 06490 { ifndef_ripper((yyval.val) = tNMATCH); } 06491 break; 06492 06493 case 133: 06494 /* Line 1787 of yacc.c */ 06495 #line 1868 "ripper.y" 06496 { ifndef_ripper((yyval.val) = '>'); } 06497 break; 06498 06499 case 134: 06500 /* Line 1787 of yacc.c */ 06501 #line 1869 "ripper.y" 06502 { ifndef_ripper((yyval.val) = tGEQ); } 06503 break; 06504 06505 case 135: 06506 /* Line 1787 of yacc.c */ 06507 #line 1870 "ripper.y" 06508 { ifndef_ripper((yyval.val) = '<'); } 06509 break; 06510 06511 case 136: 06512 /* Line 1787 of yacc.c */ 06513 #line 1871 "ripper.y" 06514 { ifndef_ripper((yyval.val) = tLEQ); } 06515 break; 06516 06517 case 137: 06518 /* Line 1787 of yacc.c */ 06519 #line 1872 "ripper.y" 06520 { ifndef_ripper((yyval.val) = tNEQ); } 06521 break; 06522 06523 case 138: 06524 /* Line 1787 of yacc.c */ 06525 #line 1873 "ripper.y" 06526 { ifndef_ripper((yyval.val) = tLSHFT); } 06527 break; 06528 06529 case 139: 06530 /* Line 1787 of yacc.c */ 06531 #line 1874 "ripper.y" 06532 { ifndef_ripper((yyval.val) = tRSHFT); } 06533 break; 06534 06535 case 140: 06536 /* Line 1787 of yacc.c */ 06537 #line 1875 "ripper.y" 06538 { ifndef_ripper((yyval.val) = '+'); } 06539 break; 06540 06541 case 141: 06542 /* Line 1787 of yacc.c */ 06543 #line 1876 "ripper.y" 06544 { ifndef_ripper((yyval.val) = '-'); } 06545 break; 06546 06547 case 142: 06548 /* Line 1787 of yacc.c */ 06549 #line 1877 "ripper.y" 06550 { ifndef_ripper((yyval.val) = '*'); } 06551 break; 06552 06553 case 143: 06554 /* Line 1787 of yacc.c */ 06555 #line 1878 "ripper.y" 06556 { ifndef_ripper((yyval.val) = '*'); } 06557 break; 06558 06559 case 144: 06560 /* Line 1787 of yacc.c */ 06561 #line 1879 "ripper.y" 06562 { ifndef_ripper((yyval.val) = '/'); } 06563 break; 06564 06565 case 145: 06566 /* Line 1787 of yacc.c */ 06567 #line 1880 "ripper.y" 06568 { ifndef_ripper((yyval.val) = '%'); } 06569 break; 06570 06571 case 146: 06572 /* Line 1787 of yacc.c */ 06573 #line 1881 "ripper.y" 06574 { ifndef_ripper((yyval.val) = tPOW); } 06575 break; 06576 06577 case 147: 06578 /* Line 1787 of yacc.c */ 06579 #line 1882 "ripper.y" 06580 { ifndef_ripper((yyval.val) = '!'); } 06581 break; 06582 06583 case 148: 06584 /* Line 1787 of yacc.c */ 06585 #line 1883 "ripper.y" 06586 { ifndef_ripper((yyval.val) = '~'); } 06587 break; 06588 06589 case 149: 06590 /* Line 1787 of yacc.c */ 06591 #line 1884 "ripper.y" 06592 { ifndef_ripper((yyval.val) = tUPLUS); } 06593 break; 06594 06595 case 150: 06596 /* Line 1787 of yacc.c */ 06597 #line 1885 "ripper.y" 06598 { ifndef_ripper((yyval.val) = tUMINUS); } 06599 break; 06600 06601 case 151: 06602 /* Line 1787 of yacc.c */ 06603 #line 1886 "ripper.y" 06604 { ifndef_ripper((yyval.val) = tAREF); } 06605 break; 06606 06607 case 152: 06608 /* Line 1787 of yacc.c */ 06609 #line 1887 "ripper.y" 06610 { ifndef_ripper((yyval.val) = tASET); } 06611 break; 06612 06613 case 153: 06614 /* Line 1787 of yacc.c */ 06615 #line 1888 "ripper.y" 06616 { ifndef_ripper((yyval.val) = '`'); } 06617 break; 06618 06619 case 195: 06620 /* Line 1787 of yacc.c */ 06621 #line 1906 "ripper.y" 06622 { 06623 #if 0 06624 value_expr((yyvsp[(3) - (3)].val)); 06625 (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06626 #endif 06627 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06628 06629 } 06630 break; 06631 06632 case 196: 06633 /* Line 1787 of yacc.c */ 06634 #line 1915 "ripper.y" 06635 { 06636 #if 0 06637 value_expr((yyvsp[(3) - (5)].val)); 06638 (yyvsp[(3) - (5)].val) = NEW_RESCUE((yyvsp[(3) - (5)].val), NEW_RESBODY(0,(yyvsp[(5) - (5)].val),0), 0); 06639 (yyval.val) = node_assign((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val)); 06640 #endif 06641 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (5)].val), dispatch2(rescue_mod, (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val))); 06642 06643 } 06644 break; 06645 06646 case 197: 06647 /* Line 1787 of yacc.c */ 06648 #line 1925 "ripper.y" 06649 { 06650 #if 0 06651 value_expr((yyvsp[(3) - (3)].val)); 06652 if ((yyvsp[(1) - (3)].val)) { 06653 ID vid = (yyvsp[(1) - (3)].val)->nd_vid; 06654 if ((yyvsp[(2) - (3)].val) == tOROP) { 06655 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 06656 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].val)); 06657 if (is_asgn_or_id(vid)) { 06658 (yyval.val)->nd_aid = vid; 06659 } 06660 } 06661 else if ((yyvsp[(2) - (3)].val) == tANDOP) { 06662 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 06663 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].val)); 06664 } 06665 else { 06666 (yyval.val) = (yyvsp[(1) - (3)].val); 06667 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].val), NEW_LIST((yyvsp[(3) - (3)].val))); 06668 } 06669 } 06670 else { 06671 (yyval.val) = NEW_BEGIN(0); 06672 } 06673 #endif 06674 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 06675 06676 } 06677 break; 06678 06679 case 198: 06680 /* Line 1787 of yacc.c */ 06681 #line 1954 "ripper.y" 06682 { 06683 #if 0 06684 value_expr((yyvsp[(3) - (5)].val)); 06685 (yyvsp[(3) - (5)].val) = NEW_RESCUE((yyvsp[(3) - (5)].val), NEW_RESBODY(0,(yyvsp[(5) - (5)].val),0), 0); 06686 if ((yyvsp[(1) - (5)].val)) { 06687 ID vid = (yyvsp[(1) - (5)].val)->nd_vid; 06688 if ((yyvsp[(2) - (5)].val) == tOROP) { 06689 (yyvsp[(1) - (5)].val)->nd_value = (yyvsp[(3) - (5)].val); 06690 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].val)); 06691 if (is_asgn_or_id(vid)) { 06692 (yyval.val)->nd_aid = vid; 06693 } 06694 } 06695 else if ((yyvsp[(2) - (5)].val) == tANDOP) { 06696 (yyvsp[(1) - (5)].val)->nd_value = (yyvsp[(3) - (5)].val); 06697 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].val)); 06698 } 06699 else { 06700 (yyval.val) = (yyvsp[(1) - (5)].val); 06701 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].val), NEW_LIST((yyvsp[(3) - (5)].val))); 06702 } 06703 } 06704 else { 06705 (yyval.val) = NEW_BEGIN(0); 06706 } 06707 #endif 06708 (yyvsp[(3) - (5)].val) = dispatch2(rescue_mod, (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val)); 06709 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val)); 06710 06711 } 06712 break; 06713 06714 case 199: 06715 /* Line 1787 of yacc.c */ 06716 #line 1985 "ripper.y" 06717 { 06718 #if 0 06719 NODE *args; 06720 06721 value_expr((yyvsp[(6) - (6)].val)); 06722 if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY(); 06723 if (nd_type((yyvsp[(3) - (6)].val)) == NODE_BLOCK_PASS) { 06724 args = NEW_ARGSCAT((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 06725 } 06726 else { 06727 args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 06728 } 06729 if ((yyvsp[(5) - (6)].val) == tOROP) { 06730 (yyvsp[(5) - (6)].val) = 0; 06731 } 06732 else if ((yyvsp[(5) - (6)].val) == tANDOP) { 06733 (yyvsp[(5) - (6)].val) = 1; 06734 } 06735 (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args); 06736 fixpos((yyval.val), (yyvsp[(1) - (6)].val)); 06737 #endif 06738 (yyvsp[(1) - (6)].val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val))); 06739 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 06740 06741 } 06742 break; 06743 06744 case 200: 06745 /* Line 1787 of yacc.c */ 06746 #line 2011 "ripper.y" 06747 { 06748 #if 0 06749 value_expr((yyvsp[(5) - (5)].val)); 06750 if ((yyvsp[(4) - (5)].val) == tOROP) { 06751 (yyvsp[(4) - (5)].val) = 0; 06752 } 06753 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 06754 (yyvsp[(4) - (5)].val) = 1; 06755 } 06756 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06757 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 06758 #endif 06759 (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val)); 06760 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06761 06762 } 06763 break; 06764 06765 case 201: 06766 /* Line 1787 of yacc.c */ 06767 #line 2028 "ripper.y" 06768 { 06769 #if 0 06770 value_expr((yyvsp[(5) - (5)].val)); 06771 if ((yyvsp[(4) - (5)].val) == tOROP) { 06772 (yyvsp[(4) - (5)].val) = 0; 06773 } 06774 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 06775 (yyvsp[(4) - (5)].val) = 1; 06776 } 06777 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06778 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 06779 #endif 06780 (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val)); 06781 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06782 06783 } 06784 break; 06785 06786 case 202: 06787 /* Line 1787 of yacc.c */ 06788 #line 2045 "ripper.y" 06789 { 06790 #if 0 06791 value_expr((yyvsp[(5) - (5)].val)); 06792 if ((yyvsp[(4) - (5)].val) == tOROP) { 06793 (yyvsp[(4) - (5)].val) = 0; 06794 } 06795 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 06796 (yyvsp[(4) - (5)].val) = 1; 06797 } 06798 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06799 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 06800 #endif 06801 (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val)); 06802 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06803 06804 } 06805 break; 06806 06807 case 203: 06808 /* Line 1787 of yacc.c */ 06809 #line 2062 "ripper.y" 06810 { 06811 #if 0 06812 yyerror("constant re-assignment"); 06813 (yyval.val) = NEW_BEGIN(0); 06814 #endif 06815 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val)); 06816 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06817 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06818 06819 } 06820 break; 06821 06822 case 204: 06823 /* Line 1787 of yacc.c */ 06824 #line 2073 "ripper.y" 06825 { 06826 #if 0 06827 yyerror("constant re-assignment"); 06828 (yyval.val) = NEW_BEGIN(0); 06829 #endif 06830 (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (4)].val)); 06831 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 06832 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06833 06834 } 06835 break; 06836 06837 case 205: 06838 /* Line 1787 of yacc.c */ 06839 #line 2084 "ripper.y" 06840 { 06841 #if 0 06842 rb_backref_error((yyvsp[(1) - (3)].val)); 06843 (yyval.val) = NEW_BEGIN(0); 06844 #endif 06845 (yyval.val) = dispatch1(var_field, (yyvsp[(1) - (3)].val)); 06846 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 06847 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06848 06849 } 06850 break; 06851 06852 case 206: 06853 /* Line 1787 of yacc.c */ 06854 #line 2095 "ripper.y" 06855 { 06856 #if 0 06857 value_expr((yyvsp[(1) - (3)].val)); 06858 value_expr((yyvsp[(3) - (3)].val)); 06859 (yyval.val) = NEW_DOT2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06860 if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].val)->nd_lit) && 06861 nd_type((yyvsp[(3) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].val)->nd_lit)) { 06862 deferred_nodes = list_append(deferred_nodes, (yyval.val)); 06863 } 06864 #endif 06865 (yyval.val) = dispatch2(dot2, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06866 06867 } 06868 break; 06869 06870 case 207: 06871 /* Line 1787 of yacc.c */ 06872 #line 2109 "ripper.y" 06873 { 06874 #if 0 06875 value_expr((yyvsp[(1) - (3)].val)); 06876 value_expr((yyvsp[(3) - (3)].val)); 06877 (yyval.val) = NEW_DOT3((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06878 if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].val)->nd_lit) && 06879 nd_type((yyvsp[(3) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].val)->nd_lit)) { 06880 deferred_nodes = list_append(deferred_nodes, (yyval.val)); 06881 } 06882 #endif 06883 (yyval.val) = dispatch2(dot3, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06884 06885 } 06886 break; 06887 06888 case 208: 06889 /* Line 1787 of yacc.c */ 06890 #line 2123 "ripper.y" 06891 { 06892 #if 0 06893 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '+', (yyvsp[(3) - (3)].val)); 06894 #endif 06895 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('+'), (yyvsp[(3) - (3)].val)); 06896 06897 } 06898 break; 06899 06900 case 209: 06901 /* Line 1787 of yacc.c */ 06902 #line 2131 "ripper.y" 06903 { 06904 #if 0 06905 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '-', (yyvsp[(3) - (3)].val)); 06906 #endif 06907 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('-'), (yyvsp[(3) - (3)].val)); 06908 06909 } 06910 break; 06911 06912 case 210: 06913 /* Line 1787 of yacc.c */ 06914 #line 2139 "ripper.y" 06915 { 06916 #if 0 06917 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '*', (yyvsp[(3) - (3)].val)); 06918 #endif 06919 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('*'), (yyvsp[(3) - (3)].val)); 06920 06921 } 06922 break; 06923 06924 case 211: 06925 /* Line 1787 of yacc.c */ 06926 #line 2147 "ripper.y" 06927 { 06928 #if 0 06929 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '/', (yyvsp[(3) - (3)].val)); 06930 #endif 06931 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('/'), (yyvsp[(3) - (3)].val)); 06932 06933 } 06934 break; 06935 06936 case 212: 06937 /* Line 1787 of yacc.c */ 06938 #line 2155 "ripper.y" 06939 { 06940 #if 0 06941 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '%', (yyvsp[(3) - (3)].val)); 06942 #endif 06943 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('%'), (yyvsp[(3) - (3)].val)); 06944 06945 } 06946 break; 06947 06948 case 213: 06949 /* Line 1787 of yacc.c */ 06950 #line 2163 "ripper.y" 06951 { 06952 #if 0 06953 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tPOW, (yyvsp[(3) - (3)].val)); 06954 #endif 06955 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("**"), (yyvsp[(3) - (3)].val)); 06956 06957 } 06958 break; 06959 06960 case 214: 06961 /* Line 1787 of yacc.c */ 06962 #line 2171 "ripper.y" 06963 { 06964 #if 0 06965 (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0); 06966 #endif 06967 (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ripper_intern("**"), (yyvsp[(4) - (4)].val)); 06968 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyval.val)); 06969 06970 } 06971 break; 06972 06973 case 215: 06974 /* Line 1787 of yacc.c */ 06975 #line 2180 "ripper.y" 06976 { 06977 #if 0 06978 (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0); 06979 #endif 06980 (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ripper_intern("**"), (yyvsp[(4) - (4)].val)); 06981 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyval.val)); 06982 06983 } 06984 break; 06985 06986 case 216: 06987 /* Line 1787 of yacc.c */ 06988 #line 2189 "ripper.y" 06989 { 06990 #if 0 06991 (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUPLUS); 06992 #endif 06993 (yyval.val) = dispatch2(unary, ripper_intern("+@"), (yyvsp[(2) - (2)].val)); 06994 06995 } 06996 break; 06997 06998 case 217: 06999 /* Line 1787 of yacc.c */ 07000 #line 2197 "ripper.y" 07001 { 07002 #if 0 07003 (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUMINUS); 07004 #endif 07005 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val)); 07006 07007 } 07008 break; 07009 07010 case 218: 07011 /* Line 1787 of yacc.c */ 07012 #line 2205 "ripper.y" 07013 { 07014 #if 0 07015 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '|', (yyvsp[(3) - (3)].val)); 07016 #endif 07017 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('|'), (yyvsp[(3) - (3)].val)); 07018 07019 } 07020 break; 07021 07022 case 219: 07023 /* Line 1787 of yacc.c */ 07024 #line 2213 "ripper.y" 07025 { 07026 #if 0 07027 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '^', (yyvsp[(3) - (3)].val)); 07028 #endif 07029 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('^'), (yyvsp[(3) - (3)].val)); 07030 07031 } 07032 break; 07033 07034 case 220: 07035 /* Line 1787 of yacc.c */ 07036 #line 2221 "ripper.y" 07037 { 07038 #if 0 07039 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '&', (yyvsp[(3) - (3)].val)); 07040 #endif 07041 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('&'), (yyvsp[(3) - (3)].val)); 07042 07043 } 07044 break; 07045 07046 case 221: 07047 /* Line 1787 of yacc.c */ 07048 #line 2229 "ripper.y" 07049 { 07050 #if 0 07051 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tCMP, (yyvsp[(3) - (3)].val)); 07052 #endif 07053 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<=>"), (yyvsp[(3) - (3)].val)); 07054 07055 } 07056 break; 07057 07058 case 222: 07059 /* Line 1787 of yacc.c */ 07060 #line 2237 "ripper.y" 07061 { 07062 #if 0 07063 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '>', (yyvsp[(3) - (3)].val)); 07064 #endif 07065 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('>'), (yyvsp[(3) - (3)].val)); 07066 07067 } 07068 break; 07069 07070 case 223: 07071 /* Line 1787 of yacc.c */ 07072 #line 2245 "ripper.y" 07073 { 07074 #if 0 07075 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tGEQ, (yyvsp[(3) - (3)].val)); 07076 #endif 07077 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern(">="), (yyvsp[(3) - (3)].val)); 07078 07079 } 07080 break; 07081 07082 case 224: 07083 /* Line 1787 of yacc.c */ 07084 #line 2253 "ripper.y" 07085 { 07086 #if 0 07087 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '<', (yyvsp[(3) - (3)].val)); 07088 #endif 07089 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('<'), (yyvsp[(3) - (3)].val)); 07090 07091 } 07092 break; 07093 07094 case 225: 07095 /* Line 1787 of yacc.c */ 07096 #line 2261 "ripper.y" 07097 { 07098 #if 0 07099 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLEQ, (yyvsp[(3) - (3)].val)); 07100 #endif 07101 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<="), (yyvsp[(3) - (3)].val)); 07102 07103 } 07104 break; 07105 07106 case 226: 07107 /* Line 1787 of yacc.c */ 07108 #line 2269 "ripper.y" 07109 { 07110 #if 0 07111 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQ, (yyvsp[(3) - (3)].val)); 07112 #endif 07113 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("=="), (yyvsp[(3) - (3)].val)); 07114 07115 } 07116 break; 07117 07118 case 227: 07119 /* Line 1787 of yacc.c */ 07120 #line 2277 "ripper.y" 07121 { 07122 #if 0 07123 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQQ, (yyvsp[(3) - (3)].val)); 07124 #endif 07125 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("==="), (yyvsp[(3) - (3)].val)); 07126 07127 } 07128 break; 07129 07130 case 228: 07131 /* Line 1787 of yacc.c */ 07132 #line 2285 "ripper.y" 07133 { 07134 #if 0 07135 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNEQ, (yyvsp[(3) - (3)].val)); 07136 #endif 07137 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("!="), (yyvsp[(3) - (3)].val)); 07138 07139 } 07140 break; 07141 07142 case 229: 07143 /* Line 1787 of yacc.c */ 07144 #line 2293 "ripper.y" 07145 { 07146 #if 0 07147 (yyval.val) = match_op((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07148 if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].val)->nd_lit) == T_REGEXP) { 07149 (yyval.val) = reg_named_capture_assign((yyvsp[(1) - (3)].val)->nd_lit, (yyval.val)); 07150 } 07151 #endif 07152 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("=~"), (yyvsp[(3) - (3)].val)); 07153 07154 } 07155 break; 07156 07157 case 230: 07158 /* Line 1787 of yacc.c */ 07159 #line 2304 "ripper.y" 07160 { 07161 #if 0 07162 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNMATCH, (yyvsp[(3) - (3)].val)); 07163 #endif 07164 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("!~"), (yyvsp[(3) - (3)].val)); 07165 07166 } 07167 break; 07168 07169 case 231: 07170 /* Line 1787 of yacc.c */ 07171 #line 2312 "ripper.y" 07172 { 07173 #if 0 07174 (yyval.val) = call_uni_op(cond((yyvsp[(2) - (2)].val)), '!'); 07175 #endif 07176 (yyval.val) = dispatch2(unary, ID2SYM('!'), (yyvsp[(2) - (2)].val)); 07177 07178 } 07179 break; 07180 07181 case 232: 07182 /* Line 1787 of yacc.c */ 07183 #line 2320 "ripper.y" 07184 { 07185 #if 0 07186 (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), '~'); 07187 #endif 07188 (yyval.val) = dispatch2(unary, ID2SYM('~'), (yyvsp[(2) - (2)].val)); 07189 07190 } 07191 break; 07192 07193 case 233: 07194 /* Line 1787 of yacc.c */ 07195 #line 2328 "ripper.y" 07196 { 07197 #if 0 07198 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLSHFT, (yyvsp[(3) - (3)].val)); 07199 #endif 07200 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<<"), (yyvsp[(3) - (3)].val)); 07201 07202 } 07203 break; 07204 07205 case 234: 07206 /* Line 1787 of yacc.c */ 07207 #line 2336 "ripper.y" 07208 { 07209 #if 0 07210 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tRSHFT, (yyvsp[(3) - (3)].val)); 07211 #endif 07212 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern(">>"), (yyvsp[(3) - (3)].val)); 07213 07214 } 07215 break; 07216 07217 case 235: 07218 /* Line 1787 of yacc.c */ 07219 #line 2344 "ripper.y" 07220 { 07221 #if 0 07222 (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07223 #endif 07224 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("&&"), (yyvsp[(3) - (3)].val)); 07225 07226 } 07227 break; 07228 07229 case 236: 07230 /* Line 1787 of yacc.c */ 07231 #line 2352 "ripper.y" 07232 { 07233 #if 0 07234 (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07235 #endif 07236 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("||"), (yyvsp[(3) - (3)].val)); 07237 07238 } 07239 break; 07240 07241 case 237: 07242 /* Line 1787 of yacc.c */ 07243 #line 2359 "ripper.y" 07244 {in_defined = 1;} 07245 break; 07246 07247 case 238: 07248 /* Line 1787 of yacc.c */ 07249 #line 2360 "ripper.y" 07250 { 07251 #if 0 07252 in_defined = 0; 07253 (yyval.val) = NEW_DEFINED((yyvsp[(4) - (4)].val)); 07254 #endif 07255 in_defined = 0; 07256 (yyval.val) = dispatch1(defined, (yyvsp[(4) - (4)].val)); 07257 07258 } 07259 break; 07260 07261 case 239: 07262 /* Line 1787 of yacc.c */ 07263 #line 2370 "ripper.y" 07264 { 07265 #if 0 07266 value_expr((yyvsp[(1) - (6)].val)); 07267 (yyval.val) = NEW_IF(cond((yyvsp[(1) - (6)].val)), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 07268 fixpos((yyval.val), (yyvsp[(1) - (6)].val)); 07269 #endif 07270 (yyval.val) = dispatch3(ifop, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 07271 07272 } 07273 break; 07274 07275 case 240: 07276 /* Line 1787 of yacc.c */ 07277 #line 2380 "ripper.y" 07278 { 07279 (yyval.val) = (yyvsp[(1) - (1)].val); 07280 } 07281 break; 07282 07283 case 241: 07284 /* Line 1787 of yacc.c */ 07285 #line 2386 "ripper.y" 07286 { 07287 #if 0 07288 value_expr((yyvsp[(1) - (1)].val)); 07289 (yyval.val) = (yyvsp[(1) - (1)].val); 07290 if (!(yyval.val)) (yyval.val) = NEW_NIL(); 07291 #endif 07292 (yyval.val) = (yyvsp[(1) - (1)].val); 07293 07294 } 07295 break; 07296 07297 case 243: 07298 /* Line 1787 of yacc.c */ 07299 #line 2399 "ripper.y" 07300 { 07301 (yyval.val) = (yyvsp[(1) - (2)].val); 07302 } 07303 break; 07304 07305 case 244: 07306 /* Line 1787 of yacc.c */ 07307 #line 2403 "ripper.y" 07308 { 07309 #if 0 07310 (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val))); 07311 #endif 07312 (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)); 07313 07314 } 07315 break; 07316 07317 case 245: 07318 /* Line 1787 of yacc.c */ 07319 #line 2411 "ripper.y" 07320 { 07321 #if 0 07322 (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val))); 07323 #endif 07324 (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val)); 07325 07326 } 07327 break; 07328 07329 case 246: 07330 /* Line 1787 of yacc.c */ 07331 #line 2421 "ripper.y" 07332 { 07333 #if 0 07334 (yyval.val) = (yyvsp[(2) - (3)].val); 07335 #endif 07336 (yyval.val) = dispatch1(arg_paren, escape_Qundef((yyvsp[(2) - (3)].val))); 07337 07338 } 07339 break; 07340 07341 case 251: 07342 /* Line 1787 of yacc.c */ 07343 #line 2437 "ripper.y" 07344 { 07345 (yyval.val) = (yyvsp[(1) - (2)].val); 07346 } 07347 break; 07348 07349 case 252: 07350 /* Line 1787 of yacc.c */ 07351 #line 2441 "ripper.y" 07352 { 07353 #if 0 07354 (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val))); 07355 #endif 07356 (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)); 07357 07358 } 07359 break; 07360 07361 case 253: 07362 /* Line 1787 of yacc.c */ 07363 #line 2449 "ripper.y" 07364 { 07365 #if 0 07366 (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val))); 07367 #endif 07368 (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val)); 07369 07370 } 07371 break; 07372 07373 case 254: 07374 /* Line 1787 of yacc.c */ 07375 #line 2459 "ripper.y" 07376 { 07377 #if 0 07378 value_expr((yyvsp[(1) - (1)].val)); 07379 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 07380 #endif 07381 (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val)); 07382 07383 } 07384 break; 07385 07386 case 255: 07387 /* Line 1787 of yacc.c */ 07388 #line 2468 "ripper.y" 07389 { 07390 #if 0 07391 (yyval.val) = arg_blk_pass((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 07392 #endif 07393 (yyval.val) = arg_add_optblock((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 07394 07395 } 07396 break; 07397 07398 case 256: 07399 /* Line 1787 of yacc.c */ 07400 #line 2476 "ripper.y" 07401 { 07402 #if 0 07403 (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val))); 07404 (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(2) - (2)].val)); 07405 #endif 07406 (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val)); 07407 (yyval.val) = arg_add_optblock((yyval.val), (yyvsp[(2) - (2)].val)); 07408 07409 } 07410 break; 07411 07412 case 257: 07413 /* Line 1787 of yacc.c */ 07414 #line 2486 "ripper.y" 07415 { 07416 #if 0 07417 (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val))); 07418 (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(4) - (4)].val)); 07419 #endif 07420 (yyval.val) = arg_add_optblock(arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)), (yyvsp[(4) - (4)].val)); 07421 07422 } 07423 break; 07424 07425 case 258: 07426 /* Line 1787 of yacc.c */ 07427 #line 2497 "ripper.y" 07428 { 07429 (yyval.val) = arg_add_block(arg_new(), (yyvsp[(1) - (1)].val)); 07430 } 07431 break; 07432 07433 case 259: 07434 /* Line 1787 of yacc.c */ 07435 #line 2503 "ripper.y" 07436 { 07437 (yyval.val) = cmdarg_stack; 07438 CMDARG_PUSH(1); 07439 } 07440 break; 07441 07442 case 260: 07443 /* Line 1787 of yacc.c */ 07444 #line 2508 "ripper.y" 07445 { 07446 /* CMDARG_POP() */ 07447 cmdarg_stack = (yyvsp[(1) - (2)].val); 07448 (yyval.val) = (yyvsp[(2) - (2)].val); 07449 } 07450 break; 07451 07452 case 261: 07453 /* Line 1787 of yacc.c */ 07454 #line 2516 "ripper.y" 07455 { 07456 #if 0 07457 (yyval.val) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].val)); 07458 #endif 07459 (yyval.val) = (yyvsp[(2) - (2)].val); 07460 07461 } 07462 break; 07463 07464 case 262: 07465 /* Line 1787 of yacc.c */ 07466 #line 2526 "ripper.y" 07467 { 07468 (yyval.val) = (yyvsp[(2) - (2)].val); 07469 } 07470 break; 07471 07472 case 263: 07473 /* Line 1787 of yacc.c */ 07474 #line 2530 "ripper.y" 07475 { 07476 (yyval.val) = 0; 07477 } 07478 break; 07479 07480 case 264: 07481 /* Line 1787 of yacc.c */ 07482 #line 2536 "ripper.y" 07483 { 07484 #if 0 07485 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 07486 #endif 07487 (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val)); 07488 07489 } 07490 break; 07491 07492 case 265: 07493 /* Line 1787 of yacc.c */ 07494 #line 2544 "ripper.y" 07495 { 07496 #if 0 07497 (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val)); 07498 #endif 07499 (yyval.val) = arg_add_star(arg_new(), (yyvsp[(2) - (2)].val)); 07500 07501 } 07502 break; 07503 07504 case 266: 07505 /* Line 1787 of yacc.c */ 07506 #line 2552 "ripper.y" 07507 { 07508 #if 0 07509 NODE *n1; 07510 if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) { 07511 (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val)); 07512 } 07513 else { 07514 (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07515 } 07516 #endif 07517 (yyval.val) = arg_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07518 07519 } 07520 break; 07521 07522 case 267: 07523 /* Line 1787 of yacc.c */ 07524 #line 2566 "ripper.y" 07525 { 07526 #if 0 07527 NODE *n1; 07528 if ((nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) { 07529 (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val)); 07530 } 07531 else { 07532 (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 07533 } 07534 #endif 07535 (yyval.val) = arg_add_star((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 07536 07537 } 07538 break; 07539 07540 case 268: 07541 /* Line 1787 of yacc.c */ 07542 #line 2582 "ripper.y" 07543 { 07544 #if 0 07545 NODE *n1; 07546 if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) { 07547 (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val)); 07548 } 07549 else { 07550 (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07551 } 07552 #endif 07553 (yyval.val) = mrhs_add(args2mrhs((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val)); 07554 07555 } 07556 break; 07557 07558 case 269: 07559 /* Line 1787 of yacc.c */ 07560 #line 2596 "ripper.y" 07561 { 07562 #if 0 07563 NODE *n1; 07564 if (nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY && 07565 (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) { 07566 (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val)); 07567 } 07568 else { 07569 (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 07570 } 07571 #endif 07572 (yyval.val) = mrhs_add_star(args2mrhs((yyvsp[(1) - (4)].val)), (yyvsp[(4) - (4)].val)); 07573 07574 } 07575 break; 07576 07577 case 270: 07578 /* Line 1787 of yacc.c */ 07579 #line 2611 "ripper.y" 07580 { 07581 #if 0 07582 (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val)); 07583 #endif 07584 (yyval.val) = mrhs_add_star(mrhs_new(), (yyvsp[(2) - (2)].val)); 07585 07586 } 07587 break; 07588 07589 case 279: 07590 /* Line 1787 of yacc.c */ 07591 #line 2629 "ripper.y" 07592 { 07593 #if 0 07594 (yyval.val) = NEW_FCALL((yyvsp[(1) - (1)].val), 0); 07595 #endif 07596 (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (1)].val)), arg_new()); 07597 07598 } 07599 break; 07600 07601 case 280: 07602 /* Line 1787 of yacc.c */ 07603 #line 2637 "ripper.y" 07604 { 07605 #if 0 07606 (yyval.num) = ruby_sourceline; 07607 #endif 07608 07609 } 07610 break; 07611 07612 case 281: 07613 /* Line 1787 of yacc.c */ 07614 #line 2645 "ripper.y" 07615 { 07616 #if 0 07617 if ((yyvsp[(3) - (4)].val) == NULL) { 07618 (yyval.val) = NEW_NIL(); 07619 } 07620 else { 07621 if (nd_type((yyvsp[(3) - (4)].val)) == NODE_RESCUE || 07622 nd_type((yyvsp[(3) - (4)].val)) == NODE_ENSURE) 07623 nd_set_line((yyvsp[(3) - (4)].val), (yyvsp[(2) - (4)].num)); 07624 (yyval.val) = NEW_BEGIN((yyvsp[(3) - (4)].val)); 07625 } 07626 nd_set_line((yyval.val), (yyvsp[(2) - (4)].num)); 07627 #endif 07628 (yyval.val) = dispatch1(begin, (yyvsp[(3) - (4)].val)); 07629 07630 } 07631 break; 07632 07633 case 282: 07634 /* Line 1787 of yacc.c */ 07635 #line 2661 "ripper.y" 07636 {lex_state = EXPR_ENDARG;} 07637 break; 07638 07639 case 283: 07640 /* Line 1787 of yacc.c */ 07641 #line 2662 "ripper.y" 07642 { 07643 rb_warning0("(...) interpreted as grouped expression"); 07644 #if 0 07645 (yyval.val) = (yyvsp[(2) - (4)].val); 07646 #endif 07647 (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val)); 07648 07649 } 07650 break; 07651 07652 case 284: 07653 /* Line 1787 of yacc.c */ 07654 #line 2671 "ripper.y" 07655 { 07656 #if 0 07657 (yyval.val) = (yyvsp[(2) - (3)].val); 07658 #endif 07659 (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val)); 07660 07661 } 07662 break; 07663 07664 case 285: 07665 /* Line 1787 of yacc.c */ 07666 #line 2679 "ripper.y" 07667 { 07668 #if 0 07669 (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07670 #endif 07671 (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07672 07673 } 07674 break; 07675 07676 case 286: 07677 /* Line 1787 of yacc.c */ 07678 #line 2687 "ripper.y" 07679 { 07680 #if 0 07681 (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val)); 07682 #endif 07683 (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val)); 07684 07685 } 07686 break; 07687 07688 case 287: 07689 /* Line 1787 of yacc.c */ 07690 #line 2695 "ripper.y" 07691 { 07692 #if 0 07693 if ((yyvsp[(2) - (3)].val) == 0) { 07694 (yyval.val) = NEW_ZARRAY(); /* zero length array*/ 07695 } 07696 else { 07697 (yyval.val) = (yyvsp[(2) - (3)].val); 07698 } 07699 #endif 07700 (yyval.val) = dispatch1(array, escape_Qundef((yyvsp[(2) - (3)].val))); 07701 07702 } 07703 break; 07704 07705 case 288: 07706 /* Line 1787 of yacc.c */ 07707 #line 2708 "ripper.y" 07708 { 07709 #if 0 07710 (yyval.val) = NEW_HASH((yyvsp[(2) - (3)].val)); 07711 #endif 07712 (yyval.val) = dispatch1(hash, escape_Qundef((yyvsp[(2) - (3)].val))); 07713 07714 } 07715 break; 07716 07717 case 289: 07718 /* Line 1787 of yacc.c */ 07719 #line 2716 "ripper.y" 07720 { 07721 #if 0 07722 (yyval.val) = NEW_RETURN(0); 07723 #endif 07724 (yyval.val) = dispatch0(return0); 07725 07726 } 07727 break; 07728 07729 case 290: 07730 /* Line 1787 of yacc.c */ 07731 #line 2724 "ripper.y" 07732 { 07733 #if 0 07734 (yyval.val) = new_yield((yyvsp[(3) - (4)].val)); 07735 #endif 07736 (yyval.val) = dispatch1(yield, dispatch1(paren, (yyvsp[(3) - (4)].val))); 07737 07738 } 07739 break; 07740 07741 case 291: 07742 /* Line 1787 of yacc.c */ 07743 #line 2732 "ripper.y" 07744 { 07745 #if 0 07746 (yyval.val) = NEW_YIELD(0, Qfalse); 07747 #endif 07748 (yyval.val) = dispatch1(yield, dispatch1(paren, arg_new())); 07749 07750 } 07751 break; 07752 07753 case 292: 07754 /* Line 1787 of yacc.c */ 07755 #line 2740 "ripper.y" 07756 { 07757 #if 0 07758 (yyval.val) = NEW_YIELD(0, Qfalse); 07759 #endif 07760 (yyval.val) = dispatch0(yield0); 07761 07762 } 07763 break; 07764 07765 case 293: 07766 /* Line 1787 of yacc.c */ 07767 #line 2747 "ripper.y" 07768 {in_defined = 1;} 07769 break; 07770 07771 case 294: 07772 /* Line 1787 of yacc.c */ 07773 #line 2748 "ripper.y" 07774 { 07775 #if 0 07776 in_defined = 0; 07777 (yyval.val) = NEW_DEFINED((yyvsp[(5) - (6)].val)); 07778 #endif 07779 in_defined = 0; 07780 (yyval.val) = dispatch1(defined, (yyvsp[(5) - (6)].val)); 07781 07782 } 07783 break; 07784 07785 case 295: 07786 /* Line 1787 of yacc.c */ 07787 #line 2758 "ripper.y" 07788 { 07789 #if 0 07790 (yyval.val) = call_uni_op(cond((yyvsp[(3) - (4)].val)), '!'); 07791 #endif 07792 (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (4)].val)); 07793 07794 } 07795 break; 07796 07797 case 296: 07798 /* Line 1787 of yacc.c */ 07799 #line 2766 "ripper.y" 07800 { 07801 #if 0 07802 (yyval.val) = call_uni_op(cond(NEW_NIL()), '!'); 07803 #endif 07804 (yyval.val) = dispatch2(unary, ripper_intern("not"), Qnil); 07805 07806 } 07807 break; 07808 07809 case 297: 07810 /* Line 1787 of yacc.c */ 07811 #line 2774 "ripper.y" 07812 { 07813 #if 0 07814 (yyvsp[(2) - (2)].val)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].val), 0); 07815 (yyval.val) = (yyvsp[(2) - (2)].val); 07816 fixpos((yyvsp[(2) - (2)].val)->nd_iter, (yyvsp[(2) - (2)].val)); 07817 #endif 07818 (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), arg_new()); 07819 (yyval.val) = method_add_block((yyval.val), (yyvsp[(2) - (2)].val)); 07820 07821 } 07822 break; 07823 07824 case 299: 07825 /* Line 1787 of yacc.c */ 07826 #line 2786 "ripper.y" 07827 { 07828 #if 0 07829 block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val)); 07830 (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val); 07831 (yyval.val) = (yyvsp[(2) - (2)].val); 07832 fixpos((yyval.val), (yyvsp[(1) - (2)].val)); 07833 #endif 07834 (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 07835 07836 } 07837 break; 07838 07839 case 300: 07840 /* Line 1787 of yacc.c */ 07841 #line 2797 "ripper.y" 07842 { 07843 (yyval.val) = (yyvsp[(2) - (2)].val); 07844 } 07845 break; 07846 07847 case 301: 07848 /* Line 1787 of yacc.c */ 07849 #line 2804 "ripper.y" 07850 { 07851 #if 0 07852 (yyval.val) = NEW_IF(cond((yyvsp[(2) - (6)].val)), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val)); 07853 fixpos((yyval.val), (yyvsp[(2) - (6)].val)); 07854 #endif 07855 (yyval.val) = dispatch3(if, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val))); 07856 07857 } 07858 break; 07859 07860 case 302: 07861 /* Line 1787 of yacc.c */ 07862 #line 2816 "ripper.y" 07863 { 07864 #if 0 07865 (yyval.val) = NEW_UNLESS(cond((yyvsp[(2) - (6)].val)), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val)); 07866 fixpos((yyval.val), (yyvsp[(2) - (6)].val)); 07867 #endif 07868 (yyval.val) = dispatch3(unless, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val))); 07869 07870 } 07871 break; 07872 07873 case 303: 07874 /* Line 1787 of yacc.c */ 07875 #line 2824 "ripper.y" 07876 {COND_PUSH(1);} 07877 break; 07878 07879 case 304: 07880 /* Line 1787 of yacc.c */ 07881 #line 2824 "ripper.y" 07882 {COND_POP();} 07883 break; 07884 07885 case 305: 07886 /* Line 1787 of yacc.c */ 07887 #line 2827 "ripper.y" 07888 { 07889 #if 0 07890 (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1); 07891 fixpos((yyval.val), (yyvsp[(3) - (7)].val)); 07892 #endif 07893 (yyval.val) = dispatch2(while, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val)); 07894 07895 } 07896 break; 07897 07898 case 306: 07899 /* Line 1787 of yacc.c */ 07900 #line 2835 "ripper.y" 07901 {COND_PUSH(1);} 07902 break; 07903 07904 case 307: 07905 /* Line 1787 of yacc.c */ 07906 #line 2835 "ripper.y" 07907 {COND_POP();} 07908 break; 07909 07910 case 308: 07911 /* Line 1787 of yacc.c */ 07912 #line 2838 "ripper.y" 07913 { 07914 #if 0 07915 (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1); 07916 fixpos((yyval.val), (yyvsp[(3) - (7)].val)); 07917 #endif 07918 (yyval.val) = dispatch2(until, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val)); 07919 07920 } 07921 break; 07922 07923 case 309: 07924 /* Line 1787 of yacc.c */ 07925 #line 2849 "ripper.y" 07926 { 07927 #if 0 07928 (yyval.val) = NEW_CASE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val)); 07929 fixpos((yyval.val), (yyvsp[(2) - (5)].val)); 07930 #endif 07931 (yyval.val) = dispatch2(case, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val)); 07932 07933 } 07934 break; 07935 07936 case 310: 07937 /* Line 1787 of yacc.c */ 07938 #line 2858 "ripper.y" 07939 { 07940 #if 0 07941 (yyval.val) = NEW_CASE(0, (yyvsp[(3) - (4)].val)); 07942 #endif 07943 (yyval.val) = dispatch2(case, Qnil, (yyvsp[(3) - (4)].val)); 07944 07945 } 07946 break; 07947 07948 case 311: 07949 /* Line 1787 of yacc.c */ 07950 #line 2866 "ripper.y" 07951 {COND_PUSH(1);} 07952 break; 07953 07954 case 312: 07955 /* Line 1787 of yacc.c */ 07956 #line 2868 "ripper.y" 07957 {COND_POP();} 07958 break; 07959 07960 case 313: 07961 /* Line 1787 of yacc.c */ 07962 #line 2871 "ripper.y" 07963 { 07964 #if 0 07965 /* 07966 * for a, b, c in e 07967 * #=> 07968 * e.each{|*x| a, b, c = x 07969 * 07970 * for a in e 07971 * #=> 07972 * e.each{|x| a, = x} 07973 */ 07974 ID id = internal_id(); 07975 ID *tbl = ALLOC_N(ID, 2); 07976 NODE *m = NEW_ARGS_AUX(0, 0); 07977 NODE *args, *scope; 07978 07979 if (nd_type((yyvsp[(2) - (9)].val)) == NODE_MASGN) { 07980 /* if args.length == 1 && args[0].kind_of?(Array) 07981 * args = args[0] 07982 * end 07983 */ 07984 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1))); 07985 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0))); 07986 m->nd_next = block_append( 07987 NEW_IF( 07988 NEW_NODE(NODE_AND, 07989 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0), 07990 rb_intern("=="), one), 07991 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero), 07992 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))), 07993 0), 07994 NEW_DASGN_CURR(id, 07995 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)), 07996 0), 07997 node_assign((yyvsp[(2) - (9)].val), NEW_DVAR(id))); 07998 07999 args = new_args(m, 0, id, 0, 0); 08000 } 08001 else { 08002 if (nd_type((yyvsp[(2) - (9)].val)) == NODE_LASGN || 08003 nd_type((yyvsp[(2) - (9)].val)) == NODE_DASGN || 08004 nd_type((yyvsp[(2) - (9)].val)) == NODE_DASGN_CURR) { 08005 (yyvsp[(2) - (9)].val)->nd_value = NEW_DVAR(id); 08006 m->nd_plen = 1; 08007 m->nd_next = (yyvsp[(2) - (9)].val); 08008 args = new_args(m, 0, 0, 0, 0); 08009 } 08010 else { 08011 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].val)), 0), NEW_DVAR(id)); 08012 args = new_args(m, 0, id, 0, 0); 08013 } 08014 } 08015 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].val), args); 08016 tbl[0] = 1; tbl[1] = id; 08017 (yyval.val) = NEW_FOR(0, (yyvsp[(5) - (9)].val), scope); 08018 fixpos((yyval.val), (yyvsp[(2) - (9)].val)); 08019 #endif 08020 (yyval.val) = dispatch3(for, (yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(8) - (9)].val)); 08021 08022 } 08023 break; 08024 08025 case 314: 08026 /* Line 1787 of yacc.c */ 08027 #line 2932 "ripper.y" 08028 { 08029 if (in_def || in_single) 08030 yyerror("class definition in method body"); 08031 local_push(0); 08032 #if 0 08033 (yyval.num) = ruby_sourceline; 08034 #endif 08035 08036 } 08037 break; 08038 08039 case 315: 08040 /* Line 1787 of yacc.c */ 08041 #line 2943 "ripper.y" 08042 { 08043 #if 0 08044 (yyval.val) = NEW_CLASS((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(3) - (6)].val)); 08045 nd_set_line((yyval.val), (yyvsp[(4) - (6)].num)); 08046 #endif 08047 (yyval.val) = dispatch3(class, (yyvsp[(2) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val)); 08048 08049 local_pop(); 08050 } 08051 break; 08052 08053 case 316: 08054 /* Line 1787 of yacc.c */ 08055 #line 2953 "ripper.y" 08056 { 08057 (yyval.num) = in_def; 08058 in_def = 0; 08059 } 08060 break; 08061 08062 case 317: 08063 /* Line 1787 of yacc.c */ 08064 #line 2958 "ripper.y" 08065 { 08066 (yyval.num) = in_single; 08067 in_single = 0; 08068 local_push(0); 08069 } 08070 break; 08071 08072 case 318: 08073 /* Line 1787 of yacc.c */ 08074 #line 2965 "ripper.y" 08075 { 08076 #if 0 08077 (yyval.val) = NEW_SCLASS((yyvsp[(3) - (8)].val), (yyvsp[(7) - (8)].val)); 08078 fixpos((yyval.val), (yyvsp[(3) - (8)].val)); 08079 #endif 08080 (yyval.val) = dispatch2(sclass, (yyvsp[(3) - (8)].val), (yyvsp[(7) - (8)].val)); 08081 08082 local_pop(); 08083 in_def = (yyvsp[(4) - (8)].num); 08084 in_single = (yyvsp[(6) - (8)].num); 08085 } 08086 break; 08087 08088 case 319: 08089 /* Line 1787 of yacc.c */ 08090 #line 2977 "ripper.y" 08091 { 08092 if (in_def || in_single) 08093 yyerror("module definition in method body"); 08094 local_push(0); 08095 #if 0 08096 (yyval.num) = ruby_sourceline; 08097 #endif 08098 08099 } 08100 break; 08101 08102 case 320: 08103 /* Line 1787 of yacc.c */ 08104 #line 2988 "ripper.y" 08105 { 08106 #if 0 08107 (yyval.val) = NEW_MODULE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val)); 08108 nd_set_line((yyval.val), (yyvsp[(3) - (5)].num)); 08109 #endif 08110 (yyval.val) = dispatch2(module, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val)); 08111 08112 local_pop(); 08113 } 08114 break; 08115 08116 case 321: 08117 /* Line 1787 of yacc.c */ 08118 #line 2998 "ripper.y" 08119 { 08120 (yyval.id) = cur_mid; 08121 cur_mid = (yyvsp[(2) - (2)].val); 08122 in_def++; 08123 local_push(0); 08124 } 08125 break; 08126 08127 case 322: 08128 /* Line 1787 of yacc.c */ 08129 #line 3007 "ripper.y" 08130 { 08131 #if 0 08132 NODE *body = remove_begin((yyvsp[(5) - (6)].val)); 08133 reduce_nodes(&body); 08134 (yyval.val) = NEW_DEFN((yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), body, NOEX_PRIVATE); 08135 nd_set_line((yyval.val), (yyvsp[(1) - (6)].num)); 08136 #endif 08137 (yyval.val) = dispatch3(def, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val)); 08138 08139 local_pop(); 08140 in_def--; 08141 cur_mid = (yyvsp[(3) - (6)].id); 08142 } 08143 break; 08144 08145 case 323: 08146 /* Line 1787 of yacc.c */ 08147 #line 3020 "ripper.y" 08148 {lex_state = EXPR_FNAME;} 08149 break; 08150 08151 case 324: 08152 /* Line 1787 of yacc.c */ 08153 #line 3021 "ripper.y" 08154 { 08155 in_single++; 08156 lex_state = EXPR_ENDFN; /* force for args */ 08157 local_push(0); 08158 } 08159 break; 08160 08161 case 325: 08162 /* Line 1787 of yacc.c */ 08163 #line 3029 "ripper.y" 08164 { 08165 #if 0 08166 NODE *body = remove_begin((yyvsp[(8) - (9)].val)); 08167 reduce_nodes(&body); 08168 (yyval.val) = NEW_DEFS((yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), body); 08169 nd_set_line((yyval.val), (yyvsp[(1) - (9)].num)); 08170 #endif 08171 (yyval.val) = dispatch5(defs, (yyvsp[(2) - (9)].val), (yyvsp[(3) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), (yyvsp[(8) - (9)].val)); 08172 08173 local_pop(); 08174 in_single--; 08175 } 08176 break; 08177 08178 case 326: 08179 /* Line 1787 of yacc.c */ 08180 #line 3042 "ripper.y" 08181 { 08182 #if 0 08183 (yyval.val) = NEW_BREAK(0); 08184 #endif 08185 (yyval.val) = dispatch1(break, arg_new()); 08186 08187 } 08188 break; 08189 08190 case 327: 08191 /* Line 1787 of yacc.c */ 08192 #line 3050 "ripper.y" 08193 { 08194 #if 0 08195 (yyval.val) = NEW_NEXT(0); 08196 #endif 08197 (yyval.val) = dispatch1(next, arg_new()); 08198 08199 } 08200 break; 08201 08202 case 328: 08203 /* Line 1787 of yacc.c */ 08204 #line 3058 "ripper.y" 08205 { 08206 #if 0 08207 (yyval.val) = NEW_REDO(); 08208 #endif 08209 (yyval.val) = dispatch0(redo); 08210 08211 } 08212 break; 08213 08214 case 329: 08215 /* Line 1787 of yacc.c */ 08216 #line 3066 "ripper.y" 08217 { 08218 #if 0 08219 (yyval.val) = NEW_RETRY(); 08220 #endif 08221 (yyval.val) = dispatch0(retry); 08222 08223 } 08224 break; 08225 08226 case 330: 08227 /* Line 1787 of yacc.c */ 08228 #line 3076 "ripper.y" 08229 { 08230 #if 0 08231 value_expr((yyvsp[(1) - (1)].val)); 08232 (yyval.val) = (yyvsp[(1) - (1)].val); 08233 if (!(yyval.val)) (yyval.val) = NEW_NIL(); 08234 #endif 08235 (yyval.val) = (yyvsp[(1) - (1)].val); 08236 08237 } 08238 break; 08239 08240 case 331: 08241 /* Line 1787 of yacc.c */ 08242 #line 3088 "ripper.y" 08243 { 08244 token_info_push("begin"); 08245 } 08246 break; 08247 08248 case 332: 08249 /* Line 1787 of yacc.c */ 08250 #line 3094 "ripper.y" 08251 { 08252 token_info_push("if"); 08253 } 08254 break; 08255 08256 case 333: 08257 /* Line 1787 of yacc.c */ 08258 #line 3100 "ripper.y" 08259 { 08260 token_info_push("unless"); 08261 } 08262 break; 08263 08264 case 334: 08265 /* Line 1787 of yacc.c */ 08266 #line 3106 "ripper.y" 08267 { 08268 token_info_push("while"); 08269 } 08270 break; 08271 08272 case 335: 08273 /* Line 1787 of yacc.c */ 08274 #line 3112 "ripper.y" 08275 { 08276 token_info_push("until"); 08277 } 08278 break; 08279 08280 case 336: 08281 /* Line 1787 of yacc.c */ 08282 #line 3118 "ripper.y" 08283 { 08284 token_info_push("case"); 08285 } 08286 break; 08287 08288 case 337: 08289 /* Line 1787 of yacc.c */ 08290 #line 3124 "ripper.y" 08291 { 08292 token_info_push("for"); 08293 } 08294 break; 08295 08296 case 338: 08297 /* Line 1787 of yacc.c */ 08298 #line 3130 "ripper.y" 08299 { 08300 token_info_push("class"); 08301 } 08302 break; 08303 08304 case 339: 08305 /* Line 1787 of yacc.c */ 08306 #line 3136 "ripper.y" 08307 { 08308 token_info_push("module"); 08309 } 08310 break; 08311 08312 case 340: 08313 /* Line 1787 of yacc.c */ 08314 #line 3142 "ripper.y" 08315 { 08316 token_info_push("def"); 08317 #if 0 08318 (yyval.num) = ruby_sourceline; 08319 #endif 08320 08321 } 08322 break; 08323 08324 case 341: 08325 /* Line 1787 of yacc.c */ 08326 #line 3152 "ripper.y" 08327 { 08328 token_info_pop("end"); 08329 } 08330 break; 08331 08332 case 342: 08333 /* Line 1787 of yacc.c */ 08334 #line 3160 "ripper.y" 08335 { (yyval.val) = Qnil; } 08336 break; 08337 08338 case 344: 08339 /* Line 1787 of yacc.c */ 08340 #line 3166 "ripper.y" 08341 { (yyval.val) = (yyvsp[(2) - (2)].val); } 08342 break; 08343 08344 case 345: 08345 /* Line 1787 of yacc.c */ 08346 #line 3173 "ripper.y" 08347 { (yyval.val) = Qnil; } 08348 break; 08349 08350 case 348: 08351 /* Line 1787 of yacc.c */ 08352 #line 3182 "ripper.y" 08353 { 08354 #if 0 08355 (yyval.val) = NEW_IF(cond((yyvsp[(2) - (5)].val)), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 08356 fixpos((yyval.val), (yyvsp[(2) - (5)].val)); 08357 #endif 08358 (yyval.val) = dispatch3(elsif, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val))); 08359 08360 } 08361 break; 08362 08363 case 350: 08364 /* Line 1787 of yacc.c */ 08365 #line 3194 "ripper.y" 08366 { 08367 #if 0 08368 (yyval.val) = (yyvsp[(2) - (2)].val); 08369 #endif 08370 (yyval.val) = dispatch1(else, (yyvsp[(2) - (2)].val)); 08371 08372 } 08373 break; 08374 08375 case 353: 08376 /* Line 1787 of yacc.c */ 08377 #line 3208 "ripper.y" 08378 { 08379 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 08380 #if 0 08381 #endif 08382 (yyval.val) = dispatch1(mlhs_paren, (yyval.val)); 08383 08384 } 08385 break; 08386 08387 case 354: 08388 /* Line 1787 of yacc.c */ 08389 #line 3216 "ripper.y" 08390 { 08391 #if 0 08392 (yyval.val) = (yyvsp[(2) - (3)].val); 08393 #endif 08394 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 08395 08396 } 08397 break; 08398 08399 case 355: 08400 /* Line 1787 of yacc.c */ 08401 #line 3226 "ripper.y" 08402 { 08403 #if 0 08404 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 08405 #endif 08406 (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val)); 08407 08408 } 08409 break; 08410 08411 case 356: 08412 /* Line 1787 of yacc.c */ 08413 #line 3234 "ripper.y" 08414 { 08415 #if 0 08416 (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 08417 #endif 08418 (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 08419 08420 } 08421 break; 08422 08423 case 357: 08424 /* Line 1787 of yacc.c */ 08425 #line 3244 "ripper.y" 08426 { 08427 #if 0 08428 (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0); 08429 #endif 08430 (yyval.val) = (yyvsp[(1) - (1)].val); 08431 08432 } 08433 break; 08434 08435 case 358: 08436 /* Line 1787 of yacc.c */ 08437 #line 3252 "ripper.y" 08438 { 08439 (yyval.val) = assignable((yyvsp[(4) - (4)].val), 0); 08440 #if 0 08441 (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), (yyval.val)); 08442 #endif 08443 (yyval.val) = mlhs_add_star((yyvsp[(1) - (4)].val), (yyval.val)); 08444 08445 } 08446 break; 08447 08448 case 359: 08449 /* Line 1787 of yacc.c */ 08450 #line 3261 "ripper.y" 08451 { 08452 (yyval.val) = assignable((yyvsp[(4) - (6)].val), 0); 08453 #if 0 08454 (yyval.val) = NEW_MASGN((yyvsp[(1) - (6)].val), NEW_POSTARG((yyval.val), (yyvsp[(6) - (6)].val))); 08455 #endif 08456 (yyval.val) = mlhs_add_star((yyvsp[(1) - (6)].val), (yyval.val)); 08457 08458 } 08459 break; 08460 08461 case 360: 08462 /* Line 1787 of yacc.c */ 08463 #line 3270 "ripper.y" 08464 { 08465 #if 0 08466 (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), -1); 08467 #endif 08468 (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), Qnil); 08469 08470 } 08471 break; 08472 08473 case 361: 08474 /* Line 1787 of yacc.c */ 08475 #line 3278 "ripper.y" 08476 { 08477 #if 0 08478 (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG(-1, (yyvsp[(5) - (5)].val))); 08479 #endif 08480 (yyval.val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val)); 08481 08482 } 08483 break; 08484 08485 case 362: 08486 /* Line 1787 of yacc.c */ 08487 #line 3286 "ripper.y" 08488 { 08489 (yyval.val) = assignable((yyvsp[(2) - (2)].val), 0); 08490 #if 0 08491 (yyval.val) = NEW_MASGN(0, (yyval.val)); 08492 #endif 08493 (yyval.val) = mlhs_add_star(mlhs_new(), (yyval.val)); 08494 08495 } 08496 break; 08497 08498 case 363: 08499 /* Line 1787 of yacc.c */ 08500 #line 3295 "ripper.y" 08501 { 08502 (yyval.val) = assignable((yyvsp[(2) - (4)].val), 0); 08503 #if 0 08504 (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyval.val), (yyvsp[(4) - (4)].val))); 08505 #endif 08506 #if 0 08507 TODO: Check me 08508 #endif 08509 (yyval.val) = mlhs_add_star((yyval.val), (yyvsp[(4) - (4)].val)); 08510 08511 } 08512 break; 08513 08514 case 364: 08515 /* Line 1787 of yacc.c */ 08516 #line 3307 "ripper.y" 08517 { 08518 #if 0 08519 (yyval.val) = NEW_MASGN(0, -1); 08520 #endif 08521 (yyval.val) = mlhs_add_star(mlhs_new(), Qnil); 08522 08523 } 08524 break; 08525 08526 case 365: 08527 /* Line 1787 of yacc.c */ 08528 #line 3315 "ripper.y" 08529 { 08530 #if 0 08531 (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val))); 08532 #endif 08533 (yyval.val) = mlhs_add_star(mlhs_new(), Qnil); 08534 08535 } 08536 break; 08537 08538 case 366: 08539 /* Line 1787 of yacc.c */ 08540 #line 3325 "ripper.y" 08541 { 08542 #if 0 08543 (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), 0, (yyvsp[(6) - (6)].val)); 08544 #endif 08545 (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnil, escape_Qundef((yyvsp[(6) - (6)].val))); 08546 08547 } 08548 break; 08549 08550 case 367: 08551 /* Line 1787 of yacc.c */ 08552 #line 3333 "ripper.y" 08553 { 08554 #if 0 08555 (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val)); 08556 #endif 08557 (yyval.val) = params_new((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), escape_Qundef((yyvsp[(8) - (8)].val))); 08558 08559 } 08560 break; 08561 08562 case 368: 08563 /* Line 1787 of yacc.c */ 08564 #line 3341 "ripper.y" 08565 { 08566 #if 0 08567 (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, 0, (yyvsp[(4) - (4)].val)); 08568 #endif 08569 (yyval.val) = params_new((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 08570 08571 } 08572 break; 08573 08574 case 369: 08575 /* Line 1787 of yacc.c */ 08576 #line 3349 "ripper.y" 08577 { 08578 #if 0 08579 (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), 0, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 08580 #endif 08581 (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnil, (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 08582 08583 } 08584 break; 08585 08586 case 370: 08587 /* Line 1787 of yacc.c */ 08588 #line 3357 "ripper.y" 08589 { 08590 #if 0 08591 (yyval.val) = new_args((yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val)); 08592 #endif 08593 (yyval.val) = params_new((yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 08594 08595 } 08596 break; 08597 08598 case 371: 08599 /* Line 1787 of yacc.c */ 08600 #line 3365 "ripper.y" 08601 { 08602 #if 0 08603 (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 1, 0, 0); 08604 #endif 08605 (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil, Qnil, Qnil, Qnil); 08606 dispatch1(excessed_comma, (yyval.val)); 08607 08608 } 08609 break; 08610 08611 case 372: 08612 /* Line 1787 of yacc.c */ 08613 #line 3374 "ripper.y" 08614 { 08615 #if 0 08616 (yyval.val) = new_args((yyvsp[(1) - (6)].val), 0, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 08617 #endif 08618 (yyval.val) = params_new((yyvsp[(1) - (6)].val), Qnil, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 08619 08620 } 08621 break; 08622 08623 case 373: 08624 /* Line 1787 of yacc.c */ 08625 #line 3382 "ripper.y" 08626 { 08627 #if 0 08628 (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 0, 0, (yyvsp[(2) - (2)].val)); 08629 #endif 08630 (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil,Qnil, Qnil, escape_Qundef((yyvsp[(2) - (2)].val))); 08631 08632 } 08633 break; 08634 08635 case 374: 08636 /* Line 1787 of yacc.c */ 08637 #line 3390 "ripper.y" 08638 { 08639 #if 0 08640 (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val)); 08641 #endif 08642 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 08643 08644 } 08645 break; 08646 08647 case 375: 08648 /* Line 1787 of yacc.c */ 08649 #line 3398 "ripper.y" 08650 { 08651 #if 0 08652 (yyval.val) = new_args(0, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 08653 #endif 08654 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 08655 08656 } 08657 break; 08658 08659 case 376: 08660 /* Line 1787 of yacc.c */ 08661 #line 3406 "ripper.y" 08662 { 08663 #if 0 08664 (yyval.val) = new_args(0, (yyvsp[(1) - (2)].val), 0, 0, (yyvsp[(2) - (2)].val)); 08665 #endif 08666 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (2)].val), Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val))); 08667 08668 } 08669 break; 08670 08671 case 377: 08672 /* Line 1787 of yacc.c */ 08673 #line 3414 "ripper.y" 08674 { 08675 #if 0 08676 (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08677 #endif 08678 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val))); 08679 08680 } 08681 break; 08682 08683 case 378: 08684 /* Line 1787 of yacc.c */ 08685 #line 3422 "ripper.y" 08686 { 08687 #if 0 08688 (yyval.val) = new_args(0, 0, (yyvsp[(1) - (2)].val), 0, (yyvsp[(2) - (2)].val)); 08689 #endif 08690 (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (2)].val), Qnil, escape_Qundef((yyvsp[(2) - (2)].val))); 08691 08692 } 08693 break; 08694 08695 case 379: 08696 /* Line 1787 of yacc.c */ 08697 #line 3430 "ripper.y" 08698 { 08699 #if 0 08700 (yyval.val) = new_args(0, 0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08701 #endif 08702 (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val))); 08703 08704 } 08705 break; 08706 08707 case 380: 08708 /* Line 1787 of yacc.c */ 08709 #line 3438 "ripper.y" 08710 { 08711 #if 0 08712 (yyval.val) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].val)); 08713 #endif 08714 (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, (yyvsp[(1) - (1)].val)); 08715 08716 } 08717 break; 08718 08719 case 382: 08720 /* Line 1787 of yacc.c */ 08721 #line 3449 "ripper.y" 08722 { 08723 command_start = TRUE; 08724 } 08725 break; 08726 08727 case 383: 08728 /* Line 1787 of yacc.c */ 08729 #line 3455 "ripper.y" 08730 { 08731 #if 0 08732 (yyval.val) = 0; 08733 #endif 08734 (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil), 08735 escape_Qundef((yyvsp[(2) - (3)].val))); 08736 08737 } 08738 break; 08739 08740 case 384: 08741 /* Line 1787 of yacc.c */ 08742 #line 3464 "ripper.y" 08743 { 08744 #if 0 08745 (yyval.val) = 0; 08746 #endif 08747 (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil), 08748 Qnil); 08749 08750 } 08751 break; 08752 08753 case 385: 08754 /* Line 1787 of yacc.c */ 08755 #line 3473 "ripper.y" 08756 { 08757 #if 0 08758 (yyval.val) = (yyvsp[(2) - (4)].val); 08759 #endif 08760 (yyval.val) = blockvar_new(escape_Qundef((yyvsp[(2) - (4)].val)), escape_Qundef((yyvsp[(3) - (4)].val))); 08761 08762 } 08763 break; 08764 08765 case 387: 08766 /* Line 1787 of yacc.c */ 08767 #line 3485 "ripper.y" 08768 { 08769 #if 0 08770 (yyval.val) = 0; 08771 #endif 08772 (yyval.val) = (yyvsp[(2) - (2)].val); 08773 08774 } 08775 break; 08776 08777 case 388: 08778 /* Line 1787 of yacc.c */ 08779 #line 3497 "ripper.y" 08780 { 08781 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 08782 } 08783 break; 08784 08785 case 389: 08786 /* Line 1787 of yacc.c */ 08787 #line 3504 "ripper.y" 08788 { 08789 rb_ary_push((yyval.val), (yyvsp[(3) - (3)].val)); 08790 } 08791 break; 08792 08793 case 390: 08794 /* Line 1787 of yacc.c */ 08795 #line 3511 "ripper.y" 08796 { 08797 new_bv(get_id((yyvsp[(1) - (1)].val))); 08798 #if 0 08799 #endif 08800 (yyval.val) = get_value((yyvsp[(1) - (1)].val)); 08801 08802 } 08803 break; 08804 08805 case 391: 08806 /* Line 1787 of yacc.c */ 08807 #line 3519 "ripper.y" 08808 { 08809 (yyval.val) = 0; 08810 } 08811 break; 08812 08813 case 392: 08814 /* Line 1787 of yacc.c */ 08815 #line 3524 "ripper.y" 08816 { 08817 (yyval.vars) = dyna_push(); 08818 } 08819 break; 08820 08821 case 393: 08822 /* Line 1787 of yacc.c */ 08823 #line 3527 "ripper.y" 08824 { 08825 (yyval.num) = lpar_beg; 08826 lpar_beg = ++paren_nest; 08827 } 08828 break; 08829 08830 case 394: 08831 /* Line 1787 of yacc.c */ 08832 #line 3533 "ripper.y" 08833 { 08834 lpar_beg = (yyvsp[(2) - (4)].num); 08835 #if 0 08836 (yyval.val) = (yyvsp[(3) - (4)].val); 08837 (yyval.val)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].val)->nd_head, (yyvsp[(4) - (4)].val)); 08838 #endif 08839 (yyval.val) = dispatch2(lambda, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08840 08841 dyna_pop((yyvsp[(1) - (4)].vars)); 08842 } 08843 break; 08844 08845 case 395: 08846 /* Line 1787 of yacc.c */ 08847 #line 3546 "ripper.y" 08848 { 08849 #if 0 08850 (yyval.val) = NEW_LAMBDA((yyvsp[(2) - (4)].val)); 08851 #endif 08852 (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val)); 08853 08854 } 08855 break; 08856 08857 case 396: 08858 /* Line 1787 of yacc.c */ 08859 #line 3554 "ripper.y" 08860 { 08861 #if 0 08862 (yyval.val) = NEW_LAMBDA((yyvsp[(1) - (1)].val)); 08863 #endif 08864 (yyval.val) = (yyvsp[(1) - (1)].val); 08865 08866 } 08867 break; 08868 08869 case 397: 08870 /* Line 1787 of yacc.c */ 08871 #line 3564 "ripper.y" 08872 { 08873 (yyval.val) = (yyvsp[(2) - (3)].val); 08874 } 08875 break; 08876 08877 case 398: 08878 /* Line 1787 of yacc.c */ 08879 #line 3568 "ripper.y" 08880 { 08881 (yyval.val) = (yyvsp[(2) - (3)].val); 08882 } 08883 break; 08884 08885 case 399: 08886 /* Line 1787 of yacc.c */ 08887 #line 3574 "ripper.y" 08888 { 08889 (yyvsp[(1) - (1)].vars) = dyna_push(); 08890 #if 0 08891 (yyval.num) = ruby_sourceline; 08892 #endif 08893 } 08894 break; 08895 08896 case 400: 08897 /* Line 1787 of yacc.c */ 08898 #line 3583 "ripper.y" 08899 { 08900 #if 0 08901 (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val)); 08902 nd_set_line((yyval.val), (yyvsp[(2) - (5)].num)); 08903 #endif 08904 (yyval.val) = dispatch2(do_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val)); 08905 08906 dyna_pop((yyvsp[(1) - (5)].vars)); 08907 } 08908 break; 08909 08910 case 401: 08911 /* Line 1787 of yacc.c */ 08912 #line 3595 "ripper.y" 08913 { 08914 #if 0 08915 if (nd_type((yyvsp[(1) - (2)].val)) == NODE_YIELD) { 08916 compile_error(PARSER_ARG "block given to yield"); 08917 } 08918 else { 08919 block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val)); 08920 } 08921 (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val); 08922 (yyval.val) = (yyvsp[(2) - (2)].val); 08923 fixpos((yyval.val), (yyvsp[(1) - (2)].val)); 08924 #endif 08925 (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 08926 08927 } 08928 break; 08929 08930 case 402: 08931 /* Line 1787 of yacc.c */ 08932 #line 3611 "ripper.y" 08933 { 08934 #if 0 08935 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08936 #endif 08937 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val)); 08938 (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val)); 08939 08940 } 08941 break; 08942 08943 case 403: 08944 /* Line 1787 of yacc.c */ 08945 #line 3620 "ripper.y" 08946 { 08947 #if 0 08948 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08949 #endif 08950 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val)); 08951 (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val)); 08952 08953 } 08954 break; 08955 08956 case 404: 08957 /* Line 1787 of yacc.c */ 08958 #line 3631 "ripper.y" 08959 { 08960 #if 0 08961 (yyval.val) = NEW_FCALL((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 08962 fixpos((yyval.val), (yyvsp[(2) - (2)].val)); 08963 #endif 08964 (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), (yyvsp[(2) - (2)].val)); 08965 08966 } 08967 break; 08968 08969 case 405: 08970 /* Line 1787 of yacc.c */ 08971 #line 3640 "ripper.y" 08972 { 08973 #if 0 08974 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08975 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 08976 #endif 08977 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val)); 08978 (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val)); 08979 08980 } 08981 break; 08982 08983 case 406: 08984 /* Line 1787 of yacc.c */ 08985 #line 3650 "ripper.y" 08986 { 08987 #if 0 08988 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08989 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 08990 #endif 08991 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val)); 08992 (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val)); 08993 08994 } 08995 break; 08996 08997 case 407: 08998 /* Line 1787 of yacc.c */ 08999 #line 3660 "ripper.y" 09000 { 09001 #if 0 09002 (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val), 0); 09003 #endif 09004 (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_intern("::"), (yyvsp[(3) - (3)].val)); 09005 09006 } 09007 break; 09008 09009 case 408: 09010 /* Line 1787 of yacc.c */ 09011 #line 3668 "ripper.y" 09012 { 09013 #if 0 09014 (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), rb_intern("call"), (yyvsp[(3) - (3)].val)); 09015 fixpos((yyval.val), (yyvsp[(1) - (3)].val)); 09016 #endif 09017 (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), 09018 ripper_intern("call")); 09019 (yyval.val) = method_optarg((yyval.val), (yyvsp[(3) - (3)].val)); 09020 09021 } 09022 break; 09023 09024 case 409: 09025 /* Line 1787 of yacc.c */ 09026 #line 3679 "ripper.y" 09027 { 09028 #if 0 09029 (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), rb_intern("call"), (yyvsp[(3) - (3)].val)); 09030 fixpos((yyval.val), (yyvsp[(1) - (3)].val)); 09031 #endif 09032 (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_intern("::"), 09033 ripper_intern("call")); 09034 (yyval.val) = method_optarg((yyval.val), (yyvsp[(3) - (3)].val)); 09035 09036 } 09037 break; 09038 09039 case 410: 09040 /* Line 1787 of yacc.c */ 09041 #line 3690 "ripper.y" 09042 { 09043 #if 0 09044 (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val)); 09045 #endif 09046 (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val)); 09047 09048 } 09049 break; 09050 09051 case 411: 09052 /* Line 1787 of yacc.c */ 09053 #line 3698 "ripper.y" 09054 { 09055 #if 0 09056 (yyval.val) = NEW_ZSUPER(); 09057 #endif 09058 (yyval.val) = dispatch0(zsuper); 09059 09060 } 09061 break; 09062 09063 case 412: 09064 /* Line 1787 of yacc.c */ 09065 #line 3706 "ripper.y" 09066 { 09067 #if 0 09068 if ((yyvsp[(1) - (4)].val) && nd_type((yyvsp[(1) - (4)].val)) == NODE_SELF) 09069 (yyval.val) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].val)); 09070 else 09071 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), tAREF, (yyvsp[(3) - (4)].val)); 09072 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 09073 #endif 09074 (yyval.val) = dispatch2(aref, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val))); 09075 09076 } 09077 break; 09078 09079 case 413: 09080 /* Line 1787 of yacc.c */ 09081 #line 3720 "ripper.y" 09082 { 09083 (yyvsp[(1) - (1)].vars) = dyna_push(); 09084 #if 0 09085 (yyval.num) = ruby_sourceline; 09086 #endif 09087 09088 } 09089 break; 09090 09091 case 414: 09092 /* Line 1787 of yacc.c */ 09093 #line 3729 "ripper.y" 09094 { 09095 #if 0 09096 (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val)); 09097 nd_set_line((yyval.val), (yyvsp[(2) - (5)].num)); 09098 #endif 09099 (yyval.val) = dispatch2(brace_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val)); 09100 09101 dyna_pop((yyvsp[(1) - (5)].vars)); 09102 } 09103 break; 09104 09105 case 415: 09106 /* Line 1787 of yacc.c */ 09107 #line 3739 "ripper.y" 09108 { 09109 (yyvsp[(1) - (1)].vars) = dyna_push(); 09110 #if 0 09111 (yyval.num) = ruby_sourceline; 09112 #endif 09113 09114 } 09115 break; 09116 09117 case 416: 09118 /* Line 1787 of yacc.c */ 09119 #line 3748 "ripper.y" 09120 { 09121 #if 0 09122 (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val)); 09123 nd_set_line((yyval.val), (yyvsp[(2) - (5)].num)); 09124 #endif 09125 (yyval.val) = dispatch2(do_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val)); 09126 09127 dyna_pop((yyvsp[(1) - (5)].vars)); 09128 } 09129 break; 09130 09131 case 417: 09132 /* Line 1787 of yacc.c */ 09133 #line 3762 "ripper.y" 09134 { 09135 #if 0 09136 (yyval.val) = NEW_WHEN((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 09137 #endif 09138 (yyval.val) = dispatch3(when, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val))); 09139 09140 } 09141 break; 09142 09143 case 420: 09144 /* Line 1787 of yacc.c */ 09145 #line 3778 "ripper.y" 09146 { 09147 #if 0 09148 if ((yyvsp[(3) - (6)].val)) { 09149 (yyvsp[(3) - (6)].val) = node_assign((yyvsp[(3) - (6)].val), NEW_ERRINFO()); 09150 (yyvsp[(5) - (6)].val) = block_append((yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val)); 09151 } 09152 (yyval.val) = NEW_RESBODY((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 09153 fixpos((yyval.val), (yyvsp[(2) - (6)].val)?(yyvsp[(2) - (6)].val):(yyvsp[(5) - (6)].val)); 09154 #endif 09155 (yyval.val) = dispatch4(rescue, 09156 escape_Qundef((yyvsp[(2) - (6)].val)), 09157 escape_Qundef((yyvsp[(3) - (6)].val)), 09158 escape_Qundef((yyvsp[(5) - (6)].val)), 09159 escape_Qundef((yyvsp[(6) - (6)].val))); 09160 09161 } 09162 break; 09163 09164 case 422: 09165 /* Line 1787 of yacc.c */ 09166 #line 3798 "ripper.y" 09167 { 09168 #if 0 09169 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 09170 #endif 09171 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 09172 09173 } 09174 break; 09175 09176 case 423: 09177 /* Line 1787 of yacc.c */ 09178 #line 3806 "ripper.y" 09179 { 09180 #if 0 09181 if (!((yyval.val) = splat_array((yyvsp[(1) - (1)].val)))) (yyval.val) = (yyvsp[(1) - (1)].val); 09182 #endif 09183 (yyval.val) = (yyvsp[(1) - (1)].val); 09184 09185 } 09186 break; 09187 09188 case 425: 09189 /* Line 1787 of yacc.c */ 09190 #line 3817 "ripper.y" 09191 { 09192 (yyval.val) = (yyvsp[(2) - (2)].val); 09193 } 09194 break; 09195 09196 case 427: 09197 /* Line 1787 of yacc.c */ 09198 #line 3824 "ripper.y" 09199 { 09200 #if 0 09201 (yyval.val) = (yyvsp[(2) - (2)].val); 09202 #endif 09203 (yyval.val) = dispatch1(ensure, (yyvsp[(2) - (2)].val)); 09204 09205 } 09206 break; 09207 09208 case 430: 09209 /* Line 1787 of yacc.c */ 09210 #line 3836 "ripper.y" 09211 { 09212 #if 0 09213 (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val))); 09214 #endif 09215 (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val)); 09216 09217 } 09218 break; 09219 09220 case 432: 09221 /* Line 1787 of yacc.c */ 09222 #line 3847 "ripper.y" 09223 { 09224 #if 0 09225 NODE *node = (yyvsp[(1) - (1)].val); 09226 if (!node) { 09227 node = NEW_STR(STR_NEW0()); 09228 } 09229 else { 09230 node = evstr2dstr(node); 09231 } 09232 (yyval.val) = node; 09233 #endif 09234 (yyval.val) = (yyvsp[(1) - (1)].val); 09235 09236 } 09237 break; 09238 09239 case 435: 09240 /* Line 1787 of yacc.c */ 09241 #line 3866 "ripper.y" 09242 { 09243 #if 0 09244 (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09245 #endif 09246 (yyval.val) = dispatch2(string_concat, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09247 09248 } 09249 break; 09250 09251 case 436: 09252 /* Line 1787 of yacc.c */ 09253 #line 3876 "ripper.y" 09254 { 09255 #if 0 09256 (yyval.val) = (yyvsp[(2) - (3)].val); 09257 #endif 09258 (yyval.val) = dispatch1(string_literal, (yyvsp[(2) - (3)].val)); 09259 09260 } 09261 break; 09262 09263 case 437: 09264 /* Line 1787 of yacc.c */ 09265 #line 3886 "ripper.y" 09266 { 09267 #if 0 09268 NODE *node = (yyvsp[(2) - (3)].val); 09269 if (!node) { 09270 node = NEW_XSTR(STR_NEW0()); 09271 } 09272 else { 09273 switch (nd_type(node)) { 09274 case NODE_STR: 09275 nd_set_type(node, NODE_XSTR); 09276 break; 09277 case NODE_DSTR: 09278 nd_set_type(node, NODE_DXSTR); 09279 break; 09280 default: 09281 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node)); 09282 break; 09283 } 09284 } 09285 (yyval.val) = node; 09286 #endif 09287 (yyval.val) = dispatch1(xstring_literal, (yyvsp[(2) - (3)].val)); 09288 09289 } 09290 break; 09291 09292 case 438: 09293 /* Line 1787 of yacc.c */ 09294 #line 3913 "ripper.y" 09295 { 09296 #if 0 09297 int options = (yyvsp[(3) - (3)].val); 09298 NODE *node = (yyvsp[(2) - (3)].val); 09299 NODE *list, *prev; 09300 if (!node) { 09301 node = NEW_LIT(reg_compile(STR_NEW0(), options)); 09302 } 09303 else switch (nd_type(node)) { 09304 case NODE_STR: 09305 { 09306 VALUE src = node->nd_lit; 09307 nd_set_type(node, NODE_LIT); 09308 node->nd_lit = reg_compile(src, options); 09309 } 09310 break; 09311 default: 09312 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node)); 09313 case NODE_DSTR: 09314 if (options & RE_OPTION_ONCE) { 09315 nd_set_type(node, NODE_DREGX_ONCE); 09316 } 09317 else { 09318 nd_set_type(node, NODE_DREGX); 09319 } 09320 node->nd_cflag = options & RE_OPTION_MASK; 09321 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options); 09322 for (list = (prev = node)->nd_next; list; list = list->nd_next) { 09323 if (nd_type(list->nd_head) == NODE_STR) { 09324 VALUE tail = list->nd_head->nd_lit; 09325 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) { 09326 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit; 09327 if (!literal_concat0(parser, lit, tail)) { 09328 node = 0; 09329 break; 09330 } 09331 rb_str_resize(tail, 0); 09332 prev->nd_next = list->nd_next; 09333 rb_gc_force_recycle((VALUE)list->nd_head); 09334 rb_gc_force_recycle((VALUE)list); 09335 list = prev; 09336 } 09337 else { 09338 prev = list; 09339 } 09340 } 09341 else { 09342 prev = 0; 09343 } 09344 } 09345 if (!node->nd_next) { 09346 VALUE src = node->nd_lit; 09347 nd_set_type(node, NODE_LIT); 09348 node->nd_lit = reg_compile(src, options); 09349 } 09350 break; 09351 } 09352 (yyval.val) = node; 09353 #endif 09354 (yyval.val) = dispatch2(regexp_literal, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 09355 09356 } 09357 break; 09358 09359 case 439: 09360 /* Line 1787 of yacc.c */ 09361 #line 3978 "ripper.y" 09362 { 09363 #if 0 09364 (yyval.val) = NEW_ZARRAY(); 09365 #endif 09366 (yyval.val) = dispatch0(words_new); 09367 (yyval.val) = dispatch1(array, (yyval.val)); 09368 09369 } 09370 break; 09371 09372 case 440: 09373 /* Line 1787 of yacc.c */ 09374 #line 3987 "ripper.y" 09375 { 09376 #if 0 09377 (yyval.val) = (yyvsp[(2) - (3)].val); 09378 #endif 09379 (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val)); 09380 09381 } 09382 break; 09383 09384 case 441: 09385 /* Line 1787 of yacc.c */ 09386 #line 3997 "ripper.y" 09387 { 09388 #if 0 09389 (yyval.val) = 0; 09390 #endif 09391 (yyval.val) = dispatch0(words_new); 09392 09393 } 09394 break; 09395 09396 case 442: 09397 /* Line 1787 of yacc.c */ 09398 #line 4005 "ripper.y" 09399 { 09400 #if 0 09401 (yyval.val) = list_append((yyvsp[(1) - (3)].val), evstr2dstr((yyvsp[(2) - (3)].val))); 09402 #endif 09403 (yyval.val) = dispatch2(words_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 09404 09405 } 09406 break; 09407 09408 case 443: 09409 /* Line 1787 of yacc.c */ 09410 #line 4017 "ripper.y" 09411 { 09412 (yyval.val) = dispatch0(word_new); 09413 (yyval.val) = dispatch2(word_add, (yyval.val), (yyvsp[(1) - (1)].val)); 09414 } 09415 break; 09416 09417 case 444: 09418 /* Line 1787 of yacc.c */ 09419 #line 4023 "ripper.y" 09420 { 09421 #if 0 09422 (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09423 #endif 09424 (yyval.val) = dispatch2(word_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09425 09426 } 09427 break; 09428 09429 case 445: 09430 /* Line 1787 of yacc.c */ 09431 #line 4033 "ripper.y" 09432 { 09433 #if 0 09434 (yyval.val) = NEW_ZARRAY(); 09435 #endif 09436 (yyval.val) = dispatch0(qwords_new); 09437 (yyval.val) = dispatch1(array, (yyval.val)); 09438 09439 } 09440 break; 09441 09442 case 446: 09443 /* Line 1787 of yacc.c */ 09444 #line 4042 "ripper.y" 09445 { 09446 #if 0 09447 (yyval.val) = (yyvsp[(2) - (3)].val); 09448 #endif 09449 (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val)); 09450 09451 } 09452 break; 09453 09454 case 447: 09455 /* Line 1787 of yacc.c */ 09456 #line 4052 "ripper.y" 09457 { 09458 #if 0 09459 (yyval.val) = 0; 09460 #endif 09461 (yyval.val) = dispatch0(qwords_new); 09462 09463 } 09464 break; 09465 09466 case 448: 09467 /* Line 1787 of yacc.c */ 09468 #line 4060 "ripper.y" 09469 { 09470 #if 0 09471 (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 09472 #endif 09473 (yyval.val) = dispatch2(qwords_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 09474 09475 } 09476 break; 09477 09478 case 449: 09479 /* Line 1787 of yacc.c */ 09480 #line 4070 "ripper.y" 09481 { 09482 #if 0 09483 (yyval.val) = 0; 09484 #endif 09485 (yyval.val) = dispatch0(string_content); 09486 09487 } 09488 break; 09489 09490 case 450: 09491 /* Line 1787 of yacc.c */ 09492 #line 4078 "ripper.y" 09493 { 09494 #if 0 09495 (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09496 #endif 09497 (yyval.val) = dispatch2(string_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09498 09499 } 09500 break; 09501 09502 case 451: 09503 /* Line 1787 of yacc.c */ 09504 #line 4088 "ripper.y" 09505 { 09506 #if 0 09507 (yyval.val) = 0; 09508 #endif 09509 (yyval.val) = dispatch0(xstring_new); 09510 09511 } 09512 break; 09513 09514 case 452: 09515 /* Line 1787 of yacc.c */ 09516 #line 4096 "ripper.y" 09517 { 09518 #if 0 09519 (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09520 #endif 09521 (yyval.val) = dispatch2(xstring_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09522 09523 } 09524 break; 09525 09526 case 453: 09527 /* Line 1787 of yacc.c */ 09528 #line 4106 "ripper.y" 09529 { 09530 #if 0 09531 (yyval.val) = 0; 09532 #endif 09533 (yyval.val) = dispatch0(regexp_new); 09534 09535 } 09536 break; 09537 09538 case 454: 09539 /* Line 1787 of yacc.c */ 09540 #line 4114 "ripper.y" 09541 { 09542 #if 0 09543 NODE *head = (yyvsp[(1) - (2)].val), *tail = (yyvsp[(2) - (2)].val); 09544 if (!head) { 09545 (yyval.val) = tail; 09546 } 09547 else if (!tail) { 09548 (yyval.val) = head; 09549 } 09550 else { 09551 switch (nd_type(head)) { 09552 case NODE_STR: 09553 nd_set_type(head, NODE_DSTR); 09554 break; 09555 case NODE_DSTR: 09556 break; 09557 default: 09558 head = list_append(NEW_DSTR(Qnil), head); 09559 break; 09560 } 09561 (yyval.val) = list_append(head, tail); 09562 } 09563 #endif 09564 (yyval.val) = dispatch2(regexp_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09565 09566 } 09567 break; 09568 09569 case 456: 09570 /* Line 1787 of yacc.c */ 09571 #line 4144 "ripper.y" 09572 { 09573 (yyval.node) = lex_strterm; 09574 lex_strterm = 0; 09575 lex_state = EXPR_BEG; 09576 } 09577 break; 09578 09579 case 457: 09580 /* Line 1787 of yacc.c */ 09581 #line 4150 "ripper.y" 09582 { 09583 #if 0 09584 lex_strterm = (yyvsp[(2) - (3)].node); 09585 (yyval.val) = NEW_EVSTR((yyvsp[(3) - (3)].val)); 09586 #endif 09587 lex_strterm = (yyvsp[(2) - (3)].node); 09588 (yyval.val) = dispatch1(string_dvar, (yyvsp[(3) - (3)].val)); 09589 09590 } 09591 break; 09592 09593 case 458: 09594 /* Line 1787 of yacc.c */ 09595 #line 4160 "ripper.y" 09596 { 09597 (yyvsp[(1) - (1)].val) = cond_stack; 09598 (yyval.val) = cmdarg_stack; 09599 cond_stack = 0; 09600 cmdarg_stack = 0; 09601 } 09602 break; 09603 09604 case 459: 09605 /* Line 1787 of yacc.c */ 09606 #line 4166 "ripper.y" 09607 { 09608 (yyval.node) = lex_strterm; 09609 lex_strterm = 0; 09610 lex_state = EXPR_BEG; 09611 } 09612 break; 09613 09614 case 460: 09615 /* Line 1787 of yacc.c */ 09616 #line 4172 "ripper.y" 09617 { 09618 cond_stack = (yyvsp[(1) - (5)].val); 09619 cmdarg_stack = (yyvsp[(2) - (5)].val); 09620 lex_strterm = (yyvsp[(3) - (5)].node); 09621 #if 0 09622 if ((yyvsp[(4) - (5)].val)) (yyvsp[(4) - (5)].val)->flags &= ~NODE_FL_NEWLINE; 09623 (yyval.val) = new_evstr((yyvsp[(4) - (5)].val)); 09624 #endif 09625 (yyval.val) = dispatch1(string_embexpr, (yyvsp[(4) - (5)].val)); 09626 09627 } 09628 break; 09629 09630 case 461: 09631 /* Line 1787 of yacc.c */ 09632 #line 4186 "ripper.y" 09633 { 09634 #if 0 09635 (yyval.val) = NEW_GVAR((yyvsp[(1) - (1)].val)); 09636 #endif 09637 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09638 09639 } 09640 break; 09641 09642 case 462: 09643 /* Line 1787 of yacc.c */ 09644 #line 4194 "ripper.y" 09645 { 09646 #if 0 09647 (yyval.val) = NEW_IVAR((yyvsp[(1) - (1)].val)); 09648 #endif 09649 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09650 09651 } 09652 break; 09653 09654 case 463: 09655 /* Line 1787 of yacc.c */ 09656 #line 4202 "ripper.y" 09657 { 09658 #if 0 09659 (yyval.val) = NEW_CVAR((yyvsp[(1) - (1)].val)); 09660 #endif 09661 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09662 09663 } 09664 break; 09665 09666 case 465: 09667 /* Line 1787 of yacc.c */ 09668 #line 4213 "ripper.y" 09669 { 09670 lex_state = EXPR_END; 09671 #if 0 09672 (yyval.val) = (yyvsp[(2) - (2)].val); 09673 #endif 09674 (yyval.val) = dispatch1(symbol, (yyvsp[(2) - (2)].val)); 09675 09676 } 09677 break; 09678 09679 case 470: 09680 /* Line 1787 of yacc.c */ 09681 #line 4230 "ripper.y" 09682 { 09683 lex_state = EXPR_END; 09684 #if 0 09685 if (!((yyval.val) = (yyvsp[(2) - (3)].val))) { 09686 (yyval.val) = NEW_LIT(ID2SYM(rb_intern(""))); 09687 } 09688 else { 09689 VALUE lit; 09690 09691 switch (nd_type((yyval.val))) { 09692 case NODE_DSTR: 09693 nd_set_type((yyval.val), NODE_DSYM); 09694 break; 09695 case NODE_STR: 09696 lit = (yyval.val)->nd_lit; 09697 (yyval.val)->nd_lit = ID2SYM(rb_intern_str(lit)); 09698 nd_set_type((yyval.val), NODE_LIT); 09699 break; 09700 default: 09701 (yyval.val) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.val))); 09702 break; 09703 } 09704 } 09705 #endif 09706 (yyval.val) = dispatch1(dyna_symbol, (yyvsp[(2) - (3)].val)); 09707 09708 } 09709 break; 09710 09711 case 473: 09712 /* Line 1787 of yacc.c */ 09713 #line 4262 "ripper.y" 09714 { 09715 #if 0 09716 (yyval.val) = negate_lit((yyvsp[(2) - (2)].val)); 09717 #endif 09718 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val)); 09719 09720 } 09721 break; 09722 09723 case 474: 09724 /* Line 1787 of yacc.c */ 09725 #line 4270 "ripper.y" 09726 { 09727 #if 0 09728 (yyval.val) = negate_lit((yyvsp[(2) - (2)].val)); 09729 #endif 09730 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val)); 09731 09732 } 09733 break; 09734 09735 case 480: 09736 /* Line 1787 of yacc.c */ 09737 #line 4286 "ripper.y" 09738 {ifndef_ripper((yyval.val) = keyword_nil);} 09739 break; 09740 09741 case 481: 09742 /* Line 1787 of yacc.c */ 09743 #line 4287 "ripper.y" 09744 {ifndef_ripper((yyval.val) = keyword_self);} 09745 break; 09746 09747 case 482: 09748 /* Line 1787 of yacc.c */ 09749 #line 4288 "ripper.y" 09750 {ifndef_ripper((yyval.val) = keyword_true);} 09751 break; 09752 09753 case 483: 09754 /* Line 1787 of yacc.c */ 09755 #line 4289 "ripper.y" 09756 {ifndef_ripper((yyval.val) = keyword_false);} 09757 break; 09758 09759 case 484: 09760 /* Line 1787 of yacc.c */ 09761 #line 4290 "ripper.y" 09762 {ifndef_ripper((yyval.val) = keyword__FILE__);} 09763 break; 09764 09765 case 485: 09766 /* Line 1787 of yacc.c */ 09767 #line 4291 "ripper.y" 09768 {ifndef_ripper((yyval.val) = keyword__LINE__);} 09769 break; 09770 09771 case 486: 09772 /* Line 1787 of yacc.c */ 09773 #line 4292 "ripper.y" 09774 {ifndef_ripper((yyval.val) = keyword__ENCODING__);} 09775 break; 09776 09777 case 487: 09778 /* Line 1787 of yacc.c */ 09779 #line 4296 "ripper.y" 09780 { 09781 #if 0 09782 if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0); 09783 #endif 09784 if (id_is_var(get_id((yyvsp[(1) - (1)].val)))) { 09785 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09786 } 09787 else { 09788 (yyval.val) = dispatch1(vcall, (yyvsp[(1) - (1)].val)); 09789 } 09790 09791 } 09792 break; 09793 09794 case 488: 09795 /* Line 1787 of yacc.c */ 09796 #line 4309 "ripper.y" 09797 { 09798 #if 0 09799 if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0); 09800 #endif 09801 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09802 09803 } 09804 break; 09805 09806 case 489: 09807 /* Line 1787 of yacc.c */ 09808 #line 4319 "ripper.y" 09809 { 09810 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 09811 #if 0 09812 #endif 09813 (yyval.val) = dispatch1(var_field, (yyval.val)); 09814 09815 } 09816 break; 09817 09818 case 490: 09819 /* Line 1787 of yacc.c */ 09820 #line 4327 "ripper.y" 09821 { 09822 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 09823 #if 0 09824 #endif 09825 (yyval.val) = dispatch1(var_field, (yyval.val)); 09826 09827 } 09828 break; 09829 09830 case 493: 09831 /* Line 1787 of yacc.c */ 09832 #line 4341 "ripper.y" 09833 { 09834 #if 0 09835 (yyval.val) = 0; 09836 #endif 09837 (yyval.val) = Qnil; 09838 09839 } 09840 break; 09841 09842 case 494: 09843 /* Line 1787 of yacc.c */ 09844 #line 4349 "ripper.y" 09845 { 09846 lex_state = EXPR_BEG; 09847 } 09848 break; 09849 09850 case 495: 09851 /* Line 1787 of yacc.c */ 09852 #line 4353 "ripper.y" 09853 { 09854 (yyval.val) = (yyvsp[(3) - (4)].val); 09855 } 09856 break; 09857 09858 case 496: 09859 /* Line 1787 of yacc.c */ 09860 #line 4357 "ripper.y" 09861 { 09862 #if 0 09863 yyerrok; 09864 (yyval.val) = 0; 09865 #endif 09866 yyerrok; 09867 (yyval.val) = Qnil; 09868 09869 } 09870 break; 09871 09872 case 497: 09873 /* Line 1787 of yacc.c */ 09874 #line 4369 "ripper.y" 09875 { 09876 #if 0 09877 (yyval.val) = (yyvsp[(2) - (3)].val); 09878 #endif 09879 (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val)); 09880 09881 lex_state = EXPR_BEG; 09882 command_start = TRUE; 09883 } 09884 break; 09885 09886 case 498: 09887 /* Line 1787 of yacc.c */ 09888 #line 4379 "ripper.y" 09889 { 09890 (yyval.val) = (yyvsp[(1) - (2)].val); 09891 lex_state = EXPR_BEG; 09892 command_start = TRUE; 09893 } 09894 break; 09895 09896 case 499: 09897 /* Line 1787 of yacc.c */ 09898 #line 4387 "ripper.y" 09899 { 09900 #if 0 09901 (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), 0, (yyvsp[(6) - (6)].val)); 09902 #endif 09903 (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnil, escape_Qundef((yyvsp[(6) - (6)].val))); 09904 09905 } 09906 break; 09907 09908 case 500: 09909 /* Line 1787 of yacc.c */ 09910 #line 4395 "ripper.y" 09911 { 09912 #if 0 09913 (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val)); 09914 #endif 09915 (yyval.val) = params_new((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), escape_Qundef((yyvsp[(8) - (8)].val))); 09916 09917 } 09918 break; 09919 09920 case 501: 09921 /* Line 1787 of yacc.c */ 09922 #line 4403 "ripper.y" 09923 { 09924 #if 0 09925 (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, 0, (yyvsp[(4) - (4)].val)); 09926 #endif 09927 (yyval.val) = params_new((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 09928 09929 } 09930 break; 09931 09932 case 502: 09933 /* Line 1787 of yacc.c */ 09934 #line 4411 "ripper.y" 09935 { 09936 #if 0 09937 (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), 0, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 09938 #endif 09939 (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnil, (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 09940 09941 } 09942 break; 09943 09944 case 503: 09945 /* Line 1787 of yacc.c */ 09946 #line 4419 "ripper.y" 09947 { 09948 #if 0 09949 (yyval.val) = new_args((yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val)); 09950 #endif 09951 (yyval.val) = params_new((yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 09952 09953 } 09954 break; 09955 09956 case 504: 09957 /* Line 1787 of yacc.c */ 09958 #line 4427 "ripper.y" 09959 { 09960 #if 0 09961 (yyval.val) = new_args((yyvsp[(1) - (6)].val), 0, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 09962 #endif 09963 (yyval.val) = params_new((yyvsp[(1) - (6)].val), Qnil, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 09964 09965 } 09966 break; 09967 09968 case 505: 09969 /* Line 1787 of yacc.c */ 09970 #line 4435 "ripper.y" 09971 { 09972 #if 0 09973 (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 0, 0, (yyvsp[(2) - (2)].val)); 09974 #endif 09975 (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil, Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val))); 09976 09977 } 09978 break; 09979 09980 case 506: 09981 /* Line 1787 of yacc.c */ 09982 #line 4443 "ripper.y" 09983 { 09984 #if 0 09985 (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val)); 09986 #endif 09987 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 09988 09989 } 09990 break; 09991 09992 case 507: 09993 /* Line 1787 of yacc.c */ 09994 #line 4451 "ripper.y" 09995 { 09996 #if 0 09997 (yyval.val) = new_args(0, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 09998 #endif 09999 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 10000 10001 } 10002 break; 10003 10004 case 508: 10005 /* Line 1787 of yacc.c */ 10006 #line 4459 "ripper.y" 10007 { 10008 #if 0 10009 (yyval.val) = new_args(0, (yyvsp[(1) - (2)].val), 0, 0, (yyvsp[(2) - (2)].val)); 10010 #endif 10011 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (2)].val), Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val))); 10012 10013 } 10014 break; 10015 10016 case 509: 10017 /* Line 1787 of yacc.c */ 10018 #line 4467 "ripper.y" 10019 { 10020 #if 0 10021 (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 10022 #endif 10023 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val))); 10024 10025 } 10026 break; 10027 10028 case 510: 10029 /* Line 1787 of yacc.c */ 10030 #line 4475 "ripper.y" 10031 { 10032 #if 0 10033 (yyval.val) = new_args(0, 0, (yyvsp[(1) - (2)].val), 0, (yyvsp[(2) - (2)].val)); 10034 #endif 10035 (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (2)].val), Qnil,escape_Qundef((yyvsp[(2) - (2)].val))); 10036 10037 } 10038 break; 10039 10040 case 511: 10041 /* Line 1787 of yacc.c */ 10042 #line 4483 "ripper.y" 10043 { 10044 #if 0 10045 (yyval.val) = new_args(0, 0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 10046 #endif 10047 (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val))); 10048 10049 } 10050 break; 10051 10052 case 512: 10053 /* Line 1787 of yacc.c */ 10054 #line 4491 "ripper.y" 10055 { 10056 #if 0 10057 (yyval.val) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].val)); 10058 #endif 10059 (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, (yyvsp[(1) - (1)].val)); 10060 10061 } 10062 break; 10063 10064 case 513: 10065 /* Line 1787 of yacc.c */ 10066 #line 4499 "ripper.y" 10067 { 10068 #if 0 10069 (yyval.val) = new_args(0, 0, 0, 0, 0); 10070 #endif 10071 (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, Qnil); 10072 10073 } 10074 break; 10075 10076 case 514: 10077 /* Line 1787 of yacc.c */ 10078 #line 4509 "ripper.y" 10079 { 10080 #if 0 10081 yyerror("formal argument cannot be a constant"); 10082 (yyval.val) = 0; 10083 #endif 10084 (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val)); 10085 10086 } 10087 break; 10088 10089 case 515: 10090 /* Line 1787 of yacc.c */ 10091 #line 4518 "ripper.y" 10092 { 10093 #if 0 10094 yyerror("formal argument cannot be an instance variable"); 10095 (yyval.val) = 0; 10096 #endif 10097 (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val)); 10098 10099 } 10100 break; 10101 10102 case 516: 10103 /* Line 1787 of yacc.c */ 10104 #line 4527 "ripper.y" 10105 { 10106 #if 0 10107 yyerror("formal argument cannot be a global variable"); 10108 (yyval.val) = 0; 10109 #endif 10110 (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val)); 10111 10112 } 10113 break; 10114 10115 case 517: 10116 /* Line 1787 of yacc.c */ 10117 #line 4536 "ripper.y" 10118 { 10119 #if 0 10120 yyerror("formal argument cannot be a class variable"); 10121 (yyval.val) = 0; 10122 #endif 10123 (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val)); 10124 10125 } 10126 break; 10127 10128 case 519: 10129 /* Line 1787 of yacc.c */ 10130 #line 4548 "ripper.y" 10131 { 10132 formal_argument(get_id((yyvsp[(1) - (1)].val))); 10133 (yyval.val) = (yyvsp[(1) - (1)].val); 10134 } 10135 break; 10136 10137 case 520: 10138 /* Line 1787 of yacc.c */ 10139 #line 4555 "ripper.y" 10140 { 10141 arg_var(get_id((yyvsp[(1) - (1)].val))); 10142 #if 0 10143 (yyval.val) = NEW_ARGS_AUX((yyvsp[(1) - (1)].val), 1); 10144 #endif 10145 (yyval.val) = get_value((yyvsp[(1) - (1)].val)); 10146 10147 } 10148 break; 10149 10150 case 521: 10151 /* Line 1787 of yacc.c */ 10152 #line 4564 "ripper.y" 10153 { 10154 ID tid = internal_id(); 10155 arg_var(tid); 10156 #if 0 10157 if (dyna_in_block()) { 10158 (yyvsp[(2) - (3)].val)->nd_value = NEW_DVAR(tid); 10159 } 10160 else { 10161 (yyvsp[(2) - (3)].val)->nd_value = NEW_LVAR(tid); 10162 } 10163 (yyval.val) = NEW_ARGS_AUX(tid, 1); 10164 (yyval.val)->nd_next = (yyvsp[(2) - (3)].val); 10165 #endif 10166 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 10167 10168 } 10169 break; 10170 10171 case 522: 10172 /* Line 1787 of yacc.c */ 10173 #line 4585 "ripper.y" 10174 { 10175 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 10176 } 10177 break; 10178 10179 case 523: 10180 /* Line 1787 of yacc.c */ 10181 #line 4590 "ripper.y" 10182 { 10183 #if 0 10184 (yyval.val) = (yyvsp[(1) - (3)].val); 10185 (yyval.val)->nd_plen++; 10186 (yyval.val)->nd_next = block_append((yyval.val)->nd_next, (yyvsp[(3) - (3)].val)->nd_next); 10187 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].val)); 10188 #endif 10189 (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10190 10191 } 10192 break; 10193 10194 case 524: 10195 /* Line 1787 of yacc.c */ 10196 #line 4603 "ripper.y" 10197 { 10198 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].val)))); 10199 (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10200 #if 0 10201 (yyval.val) = NEW_OPT_ARG(0, (yyval.val)); 10202 #endif 10203 (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val)); 10204 10205 } 10206 break; 10207 10208 case 525: 10209 /* Line 1787 of yacc.c */ 10210 #line 4615 "ripper.y" 10211 { 10212 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].val)))); 10213 (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10214 #if 0 10215 (yyval.val) = NEW_OPT_ARG(0, (yyval.val)); 10216 #endif 10217 (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val)); 10218 10219 } 10220 break; 10221 10222 case 526: 10223 /* Line 1787 of yacc.c */ 10224 #line 4627 "ripper.y" 10225 { 10226 #if 0 10227 (yyval.val) = (yyvsp[(1) - (1)].val); 10228 #endif 10229 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 10230 10231 } 10232 break; 10233 10234 case 527: 10235 /* Line 1787 of yacc.c */ 10236 #line 4635 "ripper.y" 10237 { 10238 #if 0 10239 NODE *opts = (yyvsp[(1) - (3)].val); 10240 10241 while (opts->nd_next) { 10242 opts = opts->nd_next; 10243 } 10244 opts->nd_next = (yyvsp[(3) - (3)].val); 10245 (yyval.val) = (yyvsp[(1) - (3)].val); 10246 #endif 10247 (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10248 10249 } 10250 break; 10251 10252 case 528: 10253 /* Line 1787 of yacc.c */ 10254 #line 4651 "ripper.y" 10255 { 10256 #if 0 10257 (yyval.val) = (yyvsp[(1) - (1)].val); 10258 #endif 10259 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 10260 10261 } 10262 break; 10263 10264 case 529: 10265 /* Line 1787 of yacc.c */ 10266 #line 4659 "ripper.y" 10267 { 10268 #if 0 10269 NODE *opts = (yyvsp[(1) - (3)].val); 10270 10271 while (opts->nd_next) { 10272 opts = opts->nd_next; 10273 } 10274 opts->nd_next = (yyvsp[(3) - (3)].val); 10275 (yyval.val) = (yyvsp[(1) - (3)].val); 10276 #endif 10277 (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10278 10279 } 10280 break; 10281 10282 case 532: 10283 /* Line 1787 of yacc.c */ 10284 #line 4679 "ripper.y" 10285 { 10286 #if 0 10287 if (!is_local_id((yyvsp[(2) - (2)].val))) 10288 yyerror("rest argument must be local variable"); 10289 #endif 10290 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val)))); 10291 #if 0 10292 (yyval.val) = (yyvsp[(2) - (2)].val); 10293 #endif 10294 (yyval.val) = dispatch1(rest_param, (yyvsp[(2) - (2)].val)); 10295 10296 } 10297 break; 10298 10299 case 533: 10300 /* Line 1787 of yacc.c */ 10301 #line 4692 "ripper.y" 10302 { 10303 #if 0 10304 (yyval.val) = internal_id(); 10305 arg_var((yyval.val)); 10306 #endif 10307 (yyval.val) = dispatch1(rest_param, Qnil); 10308 10309 } 10310 break; 10311 10312 case 536: 10313 /* Line 1787 of yacc.c */ 10314 #line 4707 "ripper.y" 10315 { 10316 #if 0 10317 if (!is_local_id((yyvsp[(2) - (2)].val))) 10318 yyerror("block argument must be local variable"); 10319 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].val))) 10320 yyerror("duplicated block argument name"); 10321 #endif 10322 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val)))); 10323 #if 0 10324 (yyval.val) = (yyvsp[(2) - (2)].val); 10325 #endif 10326 (yyval.val) = dispatch1(blockarg, (yyvsp[(2) - (2)].val)); 10327 10328 } 10329 break; 10330 10331 case 537: 10332 /* Line 1787 of yacc.c */ 10333 #line 4724 "ripper.y" 10334 { 10335 (yyval.val) = (yyvsp[(2) - (2)].val); 10336 } 10337 break; 10338 10339 case 538: 10340 /* Line 1787 of yacc.c */ 10341 #line 4728 "ripper.y" 10342 { 10343 #if 0 10344 (yyval.val) = 0; 10345 #endif 10346 (yyval.val) = Qundef; 10347 10348 } 10349 break; 10350 10351 case 539: 10352 /* Line 1787 of yacc.c */ 10353 #line 4738 "ripper.y" 10354 { 10355 #if 0 10356 value_expr((yyvsp[(1) - (1)].val)); 10357 (yyval.val) = (yyvsp[(1) - (1)].val); 10358 if (!(yyval.val)) (yyval.val) = NEW_NIL(); 10359 #endif 10360 (yyval.val) = (yyvsp[(1) - (1)].val); 10361 10362 } 10363 break; 10364 10365 case 540: 10366 /* Line 1787 of yacc.c */ 10367 #line 4747 "ripper.y" 10368 {lex_state = EXPR_BEG;} 10369 break; 10370 10371 case 541: 10372 /* Line 1787 of yacc.c */ 10373 #line 4748 "ripper.y" 10374 { 10375 #if 0 10376 if ((yyvsp[(3) - (4)].val) == 0) { 10377 yyerror("can't define singleton method for ()."); 10378 } 10379 else { 10380 switch (nd_type((yyvsp[(3) - (4)].val))) { 10381 case NODE_STR: 10382 case NODE_DSTR: 10383 case NODE_XSTR: 10384 case NODE_DXSTR: 10385 case NODE_DREGX: 10386 case NODE_LIT: 10387 case NODE_ARRAY: 10388 case NODE_ZARRAY: 10389 yyerror("can't define singleton method for literals"); 10390 default: 10391 value_expr((yyvsp[(3) - (4)].val)); 10392 break; 10393 } 10394 } 10395 (yyval.val) = (yyvsp[(3) - (4)].val); 10396 #endif 10397 (yyval.val) = dispatch1(paren, (yyvsp[(3) - (4)].val)); 10398 10399 } 10400 break; 10401 10402 case 543: 10403 /* Line 1787 of yacc.c */ 10404 #line 4778 "ripper.y" 10405 { 10406 #if 0 10407 (yyval.val) = (yyvsp[(1) - (2)].val); 10408 #endif 10409 (yyval.val) = dispatch1(assoclist_from_args, (yyvsp[(1) - (2)].val)); 10410 10411 } 10412 break; 10413 10414 case 544: 10415 /* Line 1787 of yacc.c */ 10416 #line 4790 "ripper.y" 10417 { 10418 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 10419 } 10420 break; 10421 10422 case 545: 10423 /* Line 1787 of yacc.c */ 10424 #line 4795 "ripper.y" 10425 { 10426 #if 0 10427 (yyval.val) = list_concat((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10428 #endif 10429 (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10430 10431 } 10432 break; 10433 10434 case 546: 10435 /* Line 1787 of yacc.c */ 10436 #line 4805 "ripper.y" 10437 { 10438 #if 0 10439 (yyval.val) = list_append(NEW_LIST((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val)); 10440 #endif 10441 (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10442 10443 } 10444 break; 10445 10446 case 547: 10447 /* Line 1787 of yacc.c */ 10448 #line 4813 "ripper.y" 10449 { 10450 #if 0 10451 (yyval.val) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].val)))), (yyvsp[(2) - (2)].val)); 10452 #endif 10453 (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 10454 10455 } 10456 break; 10457 10458 case 558: 10459 /* Line 1787 of yacc.c */ 10460 #line 4841 "ripper.y" 10461 { (yyval.val) = (yyvsp[(1) - (1)].val); } 10462 break; 10463 10464 case 559: 10465 /* Line 1787 of yacc.c */ 10466 #line 4846 "ripper.y" 10467 { (yyval.val) = (yyvsp[(1) - (1)].val); } 10468 break; 10469 10470 case 569: 10471 /* Line 1787 of yacc.c */ 10472 #line 4869 "ripper.y" 10473 {yyerrok;} 10474 break; 10475 10476 case 572: 10477 /* Line 1787 of yacc.c */ 10478 #line 4874 "ripper.y" 10479 {yyerrok;} 10480 break; 10481 10482 case 573: 10483 /* Line 1787 of yacc.c */ 10484 #line 4878 "ripper.y" 10485 { 10486 #if 0 10487 (yyval.val) = 0; 10488 #endif 10489 (yyval.val) = Qundef; 10490 10491 } 10492 break; 10493 10494 10495 /* Line 1787 of yacc.c */ 10496 #line 10493 "parse.c" 10497 default: break; 10498 } 10499 /* User semantic actions sometimes alter yychar, and that requires 10500 that yytoken be updated with the new translation. We take the 10501 approach of translating immediately before every use of yytoken. 10502 One alternative is translating here after every semantic action, 10503 but that translation would be missed if the semantic action invokes 10504 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or 10505 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an 10506 incorrect destructor might then be invoked immediately. In the 10507 case of YYERROR or YYBACKUP, subsequent parser actions might lead 10508 to an incorrect destructor call or verbose syntax error message 10509 before the lookahead is translated. */ 10510 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 10511 10512 YYPOPSTACK (yylen); 10513 yylen = 0; 10514 YY_STACK_PRINT (yyss, yyssp); 10515 10516 *++yyvsp = yyval; 10517 10518 /* Now `shift' the result of the reduction. Determine what state 10519 that goes to, based on the state we popped back to and the rule 10520 number reduced by. */ 10521 10522 yyn = yyr1[yyn]; 10523 10524 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 10525 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 10526 yystate = yytable[yystate]; 10527 else 10528 yystate = yydefgoto[yyn - YYNTOKENS]; 10529 10530 goto yynewstate; 10531 10532 10533 /*------------------------------------. 10534 | yyerrlab -- here on detecting error | 10535 `------------------------------------*/ 10536 yyerrlab: 10537 /* Make sure we have latest lookahead translation. See comments at 10538 user semantic actions for why this is necessary. */ 10539 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); 10540 10541 /* If not already recovering from an error, report this error. */ 10542 if (!yyerrstatus) 10543 { 10544 ++yynerrs; 10545 #if ! YYERROR_VERBOSE 10546 parser_yyerror (parser, YY_("syntax error")); 10547 #else 10548 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ 10549 yyssp, yytoken) 10550 { 10551 char const *yymsgp = YY_("syntax error"); 10552 int yysyntax_error_status; 10553 yysyntax_error_status = YYSYNTAX_ERROR; 10554 if (yysyntax_error_status == 0) 10555 yymsgp = yymsg; 10556 else if (yysyntax_error_status == 1) 10557 { 10558 if (yymsg != yymsgbuf) 10559 YYSTACK_FREE (yymsg); 10560 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); 10561 if (!yymsg) 10562 { 10563 yymsg = yymsgbuf; 10564 yymsg_alloc = sizeof yymsgbuf; 10565 yysyntax_error_status = 2; 10566 } 10567 else 10568 { 10569 yysyntax_error_status = YYSYNTAX_ERROR; 10570 yymsgp = yymsg; 10571 } 10572 } 10573 parser_yyerror (parser, yymsgp); 10574 if (yysyntax_error_status == 2) 10575 goto yyexhaustedlab; 10576 } 10577 # undef YYSYNTAX_ERROR 10578 #endif 10579 } 10580 10581 10582 10583 if (yyerrstatus == 3) 10584 { 10585 /* If just tried and failed to reuse lookahead token after an 10586 error, discard it. */ 10587 10588 if (yychar <= YYEOF) 10589 { 10590 /* Return failure if at end of input. */ 10591 if (yychar == YYEOF) 10592 YYABORT; 10593 } 10594 else 10595 { 10596 yydestruct ("Error: discarding", 10597 yytoken, &yylval, parser); 10598 yychar = YYEMPTY; 10599 } 10600 } 10601 10602 /* Else will try to reuse lookahead token after shifting the error 10603 token. */ 10604 goto yyerrlab1; 10605 10606 10607 /*---------------------------------------------------. 10608 | yyerrorlab -- error raised explicitly by YYERROR. | 10609 `---------------------------------------------------*/ 10610 yyerrorlab: 10611 10612 /* Pacify compilers like GCC when the user code never invokes 10613 YYERROR and the label yyerrorlab therefore never appears in user 10614 code. */ 10615 if (/*CONSTCOND*/ 0) 10616 goto yyerrorlab; 10617 10618 /* Do not reclaim the symbols of the rule which action triggered 10619 this YYERROR. */ 10620 YYPOPSTACK (yylen); 10621 yylen = 0; 10622 YY_STACK_PRINT (yyss, yyssp); 10623 yystate = *yyssp; 10624 goto yyerrlab1; 10625 10626 10627 /*-------------------------------------------------------------. 10628 | yyerrlab1 -- common code for both syntax error and YYERROR. | 10629 `-------------------------------------------------------------*/ 10630 yyerrlab1: 10631 yyerrstatus = 3; /* Each real token shifted decrements this. */ 10632 10633 for (;;) 10634 { 10635 yyn = yypact[yystate]; 10636 if (!yypact_value_is_default (yyn)) 10637 { 10638 yyn += YYTERROR; 10639 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 10640 { 10641 yyn = yytable[yyn]; 10642 if (0 < yyn) 10643 break; 10644 } 10645 } 10646 10647 /* Pop the current state because it cannot handle the error token. */ 10648 if (yyssp == yyss) 10649 YYABORT; 10650 10651 10652 yydestruct ("Error: popping", 10653 yystos[yystate], yyvsp, parser); 10654 YYPOPSTACK (1); 10655 yystate = *yyssp; 10656 YY_STACK_PRINT (yyss, yyssp); 10657 } 10658 10659 YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN 10660 *++yyvsp = yylval; 10661 YY_IGNORE_MAYBE_UNINITIALIZED_END 10662 10663 10664 /* Shift the error token. */ 10665 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 10666 10667 yystate = yyn; 10668 goto yynewstate; 10669 10670 10671 /*-------------------------------------. 10672 | yyacceptlab -- YYACCEPT comes here. | 10673 `-------------------------------------*/ 10674 yyacceptlab: 10675 yyresult = 0; 10676 goto yyreturn; 10677 10678 /*-----------------------------------. 10679 | yyabortlab -- YYABORT comes here. | 10680 `-----------------------------------*/ 10681 yyabortlab: 10682 yyresult = 1; 10683 goto yyreturn; 10684 10685 #if !defined yyoverflow || YYERROR_VERBOSE 10686 /*-------------------------------------------------. 10687 | yyexhaustedlab -- memory exhaustion comes here. | 10688 `-------------------------------------------------*/ 10689 yyexhaustedlab: 10690 parser_yyerror (parser, YY_("memory exhausted")); 10691 yyresult = 2; 10692 /* Fall through. */ 10693 #endif 10694 10695 yyreturn: 10696 if (yychar != YYEMPTY) 10697 { 10698 /* Make sure we have latest lookahead translation. See comments at 10699 user semantic actions for why this is necessary. */ 10700 yytoken = YYTRANSLATE (yychar); 10701 yydestruct ("Cleanup: discarding lookahead", 10702 yytoken, &yylval, parser); 10703 } 10704 /* Do not reclaim the symbols of the rule which action triggered 10705 this YYABORT or YYACCEPT. */ 10706 YYPOPSTACK (yylen); 10707 YY_STACK_PRINT (yyss, yyssp); 10708 while (yyssp != yyss) 10709 { 10710 yydestruct ("Cleanup: popping", 10711 yystos[*yyssp], yyvsp, parser); 10712 YYPOPSTACK (1); 10713 } 10714 #ifndef yyoverflow 10715 if (yyss != yyssa) 10716 YYSTACK_FREE (yyss); 10717 #endif 10718 #if YYERROR_VERBOSE 10719 if (yymsg != yymsgbuf) 10720 YYSTACK_FREE (yymsg); 10721 #endif 10722 /* Make sure YYID is used. */ 10723 return YYID (yyresult); 10724 } 10725 10726 10727 /* Line 2050 of yacc.c */ 10728 #line 4886 "ripper.y" 10729 10730 # undef parser 10731 # undef yylex 10732 # undef yylval 10733 # define yylval (*((YYSTYPE*)(parser->parser_yylval))) 10734 10735 static int parser_regx_options(struct parser_params*); 10736 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**); 10737 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc); 10738 static int parser_parse_string(struct parser_params*,NODE*); 10739 static int parser_here_document(struct parser_params*,NODE*); 10740 10741 10742 # define nextc() parser_nextc(parser) 10743 # define pushback(c) parser_pushback(parser, (c)) 10744 # define newtok() parser_newtok(parser) 10745 # define tokspace(n) parser_tokspace(parser, (n)) 10746 # define tokadd(c) parser_tokadd(parser, (c)) 10747 # define tok_hex(numlen) parser_tok_hex(parser, (numlen)) 10748 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e)) 10749 # define tokadd_escape(e) parser_tokadd_escape(parser, (e)) 10750 # define regx_options() parser_regx_options(parser) 10751 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e)) 10752 # define parse_string(n) parser_parse_string(parser,(n)) 10753 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc)) 10754 # define here_document(n) parser_here_document(parser,(n)) 10755 # define heredoc_identifier() parser_heredoc_identifier(parser) 10756 # define heredoc_restore(n) parser_heredoc_restore(parser,(n)) 10757 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i)) 10758 10759 #ifndef RIPPER 10760 # define set_yylval_str(x) (yylval.node = NEW_STR(x)) 10761 # define set_yylval_num(x) (yylval.num = (x)) 10762 # define set_yylval_id(x) (yylval.id = (x)) 10763 # define set_yylval_name(x) (yylval.id = (x)) 10764 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x)) 10765 # define set_yylval_node(x) (yylval.node = (x)) 10766 # define yylval_id() (yylval.id) 10767 #else 10768 static inline VALUE 10769 ripper_yylval_id(ID x) 10770 { 10771 return (VALUE)NEW_LASGN(x, ID2SYM(x)); 10772 } 10773 # define set_yylval_str(x) (void)(x) 10774 # define set_yylval_num(x) (void)(x) 10775 # define set_yylval_id(x) (void)(x) 10776 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x)) 10777 # define set_yylval_literal(x) (void)(x) 10778 # define set_yylval_node(x) (void)(x) 10779 # define yylval_id() yylval.id 10780 #endif 10781 10782 #ifndef RIPPER 10783 #define ripper_flush(p) (void)(p) 10784 #else 10785 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p) 10786 10787 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)) 10788 10789 static int 10790 ripper_has_scan_event(struct parser_params *parser) 10791 { 10792 10793 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp"); 10794 return lex_p > parser->tokp; 10795 } 10796 10797 static VALUE 10798 ripper_scan_event_val(struct parser_params *parser, int t) 10799 { 10800 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp); 10801 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str); 10802 ripper_flush(parser); 10803 return rval; 10804 } 10805 10806 static void 10807 ripper_dispatch_scan_event(struct parser_params *parser, int t) 10808 { 10809 if (!ripper_has_scan_event(parser)) return; 10810 yylval_rval = ripper_scan_event_val(parser, t); 10811 } 10812 10813 static void 10814 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t) 10815 { 10816 if (!ripper_has_scan_event(parser)) return; 10817 (void)ripper_scan_event_val(parser, t); 10818 } 10819 10820 static void 10821 ripper_dispatch_delayed_token(struct parser_params *parser, int t) 10822 { 10823 int saved_line = ruby_sourceline; 10824 const char *saved_tokp = parser->tokp; 10825 10826 ruby_sourceline = parser->delayed_line; 10827 parser->tokp = lex_pbeg + parser->delayed_col; 10828 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed); 10829 parser->delayed = Qnil; 10830 ruby_sourceline = saved_line; 10831 parser->tokp = saved_tokp; 10832 } 10833 #endif /* RIPPER */ 10834 10835 #include "ruby/regex.h" 10836 #include "ruby/util.h" 10837 10838 /* We remove any previous definition of `SIGN_EXTEND_CHAR', 10839 since ours (we hope) works properly with all combinations of 10840 machines, compilers, `char' and `unsigned char' argument types. 10841 (Per Bothner suggested the basic approach.) */ 10842 #undef SIGN_EXTEND_CHAR 10843 #if __STDC__ 10844 # define SIGN_EXTEND_CHAR(c) ((signed char)(c)) 10845 #else /* not __STDC__ */ 10846 /* As in Harbison and Steele. */ 10847 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128) 10848 #endif 10849 10850 #define parser_encoding_name() (parser->enc->name) 10851 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc) 10852 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc) 10853 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p))) 10854 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc)) 10855 10856 #define parser_isascii() ISASCII(*(lex_p-1)) 10857 10858 #ifndef RIPPER 10859 static int 10860 token_info_get_column(struct parser_params *parser, const char *token) 10861 { 10862 int column = 1; 10863 const char *p, *pend = lex_p - strlen(token); 10864 for (p = lex_pbeg; p < pend; p++) { 10865 if (*p == '\t') { 10866 column = (((column - 1) / 8) + 1) * 8; 10867 } 10868 column++; 10869 } 10870 return column; 10871 } 10872 10873 static int 10874 token_info_has_nonspaces(struct parser_params *parser, const char *token) 10875 { 10876 const char *p, *pend = lex_p - strlen(token); 10877 for (p = lex_pbeg; p < pend; p++) { 10878 if (*p != ' ' && *p != '\t') { 10879 return 1; 10880 } 10881 } 10882 return 0; 10883 } 10884 10885 #undef token_info_push 10886 static void 10887 token_info_push(struct parser_params *parser, const char *token) 10888 { 10889 token_info *ptinfo; 10890 10891 if (!parser->parser_token_info_enabled) return; 10892 ptinfo = ALLOC(token_info); 10893 ptinfo->token = token; 10894 ptinfo->linenum = ruby_sourceline; 10895 ptinfo->column = token_info_get_column(parser, token); 10896 ptinfo->nonspc = token_info_has_nonspaces(parser, token); 10897 ptinfo->next = parser->parser_token_info; 10898 10899 parser->parser_token_info = ptinfo; 10900 } 10901 10902 #undef token_info_pop 10903 static void 10904 token_info_pop(struct parser_params *parser, const char *token) 10905 { 10906 int linenum; 10907 token_info *ptinfo = parser->parser_token_info; 10908 10909 if (!ptinfo) return; 10910 parser->parser_token_info = ptinfo->next; 10911 if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */ 10912 goto finish; 10913 } 10914 linenum = ruby_sourceline; 10915 if (linenum == ptinfo->linenum) { /* SKIP */ 10916 goto finish; 10917 } 10918 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */ 10919 goto finish; 10920 } 10921 if (parser->parser_token_info_enabled) { 10922 rb_compile_warn(ruby_sourcefile, linenum, 10923 "mismatched indentations at '%s' with '%s' at %d", 10924 token, ptinfo->token, ptinfo->linenum); 10925 } 10926 10927 finish: 10928 xfree(ptinfo); 10929 } 10930 #endif /* RIPPER */ 10931 10932 static int 10933 parser_yyerror(struct parser_params *parser, const char *msg) 10934 { 10935 #ifndef RIPPER 10936 const int max_line_margin = 30; 10937 const char *p, *pe; 10938 char *buf; 10939 long len; 10940 int i; 10941 10942 compile_error(PARSER_ARG "%s", msg); 10943 p = lex_p; 10944 while (lex_pbeg <= p) { 10945 if (*p == '\n') break; 10946 p--; 10947 } 10948 p++; 10949 10950 pe = lex_p; 10951 while (pe < lex_pend) { 10952 if (*pe == '\n') break; 10953 pe++; 10954 } 10955 10956 len = pe - p; 10957 if (len > 4) { 10958 char *p2; 10959 const char *pre = "", *post = ""; 10960 10961 if (len > max_line_margin * 2 + 10) { 10962 if (lex_p - p > max_line_margin) { 10963 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline)); 10964 pre = "..."; 10965 } 10966 if (pe - lex_p > max_line_margin) { 10967 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline)); 10968 post = "..."; 10969 } 10970 len = pe - p; 10971 } 10972 buf = ALLOCA_N(char, len+2); 10973 MEMCPY(buf, p, char, len); 10974 buf[len] = '\0'; 10975 rb_compile_error_append("%s%s%s", pre, buf, post); 10976 10977 i = (int)(lex_p - p); 10978 p2 = buf; pe = buf + len; 10979 10980 while (p2 < pe) { 10981 if (*p2 != '\t') *p2 = ' '; 10982 p2++; 10983 } 10984 buf[i] = '^'; 10985 buf[i+1] = '\0'; 10986 rb_compile_error_append("%s%s", pre, buf); 10987 } 10988 #else 10989 dispatch1(parse_error, STR_NEW2(msg)); 10990 #endif /* !RIPPER */ 10991 return 0; 10992 } 10993 10994 static void parser_prepare(struct parser_params *parser); 10995 10996 #ifndef RIPPER 10997 static VALUE 10998 debug_lines(const char *f) 10999 { 11000 ID script_lines; 11001 CONST_ID(script_lines, "SCRIPT_LINES__"); 11002 if (rb_const_defined_at(rb_cObject, script_lines)) { 11003 VALUE hash = rb_const_get_at(rb_cObject, script_lines); 11004 if (TYPE(hash) == T_HASH) { 11005 VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding()); 11006 VALUE lines = rb_ary_new(); 11007 rb_hash_aset(hash, fname, lines); 11008 return lines; 11009 } 11010 } 11011 return 0; 11012 } 11013 11014 static VALUE 11015 coverage(const char *f, int n) 11016 { 11017 VALUE coverages = rb_get_coverages(); 11018 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) { 11019 VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding()); 11020 VALUE lines = rb_ary_new2(n); 11021 int i; 11022 RBASIC(lines)->klass = 0; 11023 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil; 11024 RARRAY(lines)->as.heap.len = n; 11025 rb_hash_aset(coverages, fname, lines); 11026 return lines; 11027 } 11028 return 0; 11029 } 11030 11031 static int 11032 e_option_supplied(struct parser_params *parser) 11033 { 11034 return strcmp(ruby_sourcefile, "-e") == 0; 11035 } 11036 11037 static VALUE 11038 yycompile0(VALUE arg, int tracing) 11039 { 11040 int n; 11041 NODE *tree; 11042 struct parser_params *parser = (struct parser_params *)arg; 11043 11044 if (!compile_for_eval && rb_safe_level() == 0) { 11045 ruby_debug_lines = debug_lines(ruby_sourcefile); 11046 if (ruby_debug_lines && ruby_sourceline > 0) { 11047 VALUE str = STR_NEW0(); 11048 n = ruby_sourceline; 11049 do { 11050 rb_ary_push(ruby_debug_lines, str); 11051 } while (--n); 11052 } 11053 11054 if (!e_option_supplied(parser)) { 11055 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline); 11056 } 11057 } 11058 11059 parser_prepare(parser); 11060 deferred_nodes = 0; 11061 #ifndef RIPPER 11062 parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose); 11063 #endif 11064 n = yyparse((void*)parser); 11065 ruby_debug_lines = 0; 11066 ruby_coverage = 0; 11067 compile_for_eval = 0; 11068 11069 lex_strterm = 0; 11070 lex_p = lex_pbeg = lex_pend = 0; 11071 lex_lastline = lex_nextline = 0; 11072 if (parser->nerr) { 11073 return 0; 11074 } 11075 tree = ruby_eval_tree; 11076 if (!tree) { 11077 tree = NEW_NIL(); 11078 } 11079 else if (ruby_eval_tree_begin) { 11080 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body); 11081 } 11082 return (VALUE)tree; 11083 } 11084 11085 static NODE* 11086 yycompile(struct parser_params *parser, const char *f, int line) 11087 { 11088 ruby_sourcefile = ruby_strdup(f); 11089 ruby_sourceline = line - 1; 11090 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE); 11091 } 11092 #endif /* !RIPPER */ 11093 11094 static rb_encoding * 11095 must_be_ascii_compatible(VALUE s) 11096 { 11097 rb_encoding *enc = rb_enc_get(s); 11098 if (!rb_enc_asciicompat(enc)) { 11099 rb_raise(rb_eArgError, "invalid source encoding"); 11100 } 11101 return enc; 11102 } 11103 11104 static VALUE 11105 lex_get_str(struct parser_params *parser, VALUE s) 11106 { 11107 char *beg, *end, *pend; 11108 rb_encoding *enc = must_be_ascii_compatible(s); 11109 11110 beg = RSTRING_PTR(s); 11111 if (lex_gets_ptr) { 11112 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil; 11113 beg += lex_gets_ptr; 11114 } 11115 pend = RSTRING_PTR(s) + RSTRING_LEN(s); 11116 end = beg; 11117 while (end < pend) { 11118 if (*end++ == '\n') break; 11119 } 11120 lex_gets_ptr = end - RSTRING_PTR(s); 11121 return rb_enc_str_new(beg, end - beg, enc); 11122 } 11123 11124 static VALUE 11125 lex_getline(struct parser_params *parser) 11126 { 11127 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input); 11128 if (NIL_P(line)) return line; 11129 must_be_ascii_compatible(line); 11130 #ifndef RIPPER 11131 if (ruby_debug_lines) { 11132 rb_enc_associate(line, parser->enc); 11133 rb_ary_push(ruby_debug_lines, line); 11134 } 11135 if (ruby_coverage) { 11136 rb_ary_push(ruby_coverage, Qnil); 11137 } 11138 #endif 11139 return line; 11140 } 11141 11142 #ifdef RIPPER 11143 static rb_data_type_t parser_data_type; 11144 #else 11145 static const rb_data_type_t parser_data_type; 11146 11147 static NODE* 11148 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 11149 { 11150 struct parser_params *parser; 11151 NODE *node; 11152 volatile VALUE tmp; 11153 11154 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 11155 lex_gets = lex_get_str; 11156 lex_gets_ptr = 0; 11157 lex_input = s; 11158 lex_pbeg = lex_p = lex_pend = 0; 11159 compile_for_eval = rb_parse_in_eval(); 11160 11161 node = yycompile(parser, f, line); 11162 tmp = vparser; /* prohibit tail call optimization */ 11163 11164 return node; 11165 } 11166 11167 NODE* 11168 rb_compile_string(const char *f, VALUE s, int line) 11169 { 11170 must_be_ascii_compatible(s); 11171 return parser_compile_string(rb_parser_new(), f, s, line); 11172 } 11173 11174 NODE* 11175 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 11176 { 11177 must_be_ascii_compatible(s); 11178 return parser_compile_string(vparser, f, s, line); 11179 } 11180 11181 NODE* 11182 rb_compile_cstr(const char *f, const char *s, int len, int line) 11183 { 11184 VALUE str = rb_str_new(s, len); 11185 return parser_compile_string(rb_parser_new(), f, str, line); 11186 } 11187 11188 NODE* 11189 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line) 11190 { 11191 VALUE str = rb_str_new(s, len); 11192 return parser_compile_string(vparser, f, str, line); 11193 } 11194 11195 static VALUE 11196 lex_io_gets(struct parser_params *parser, VALUE io) 11197 { 11198 return rb_io_gets(io); 11199 } 11200 11201 NODE* 11202 rb_compile_file(const char *f, VALUE file, int start) 11203 { 11204 VALUE volatile vparser = rb_parser_new(); 11205 11206 return rb_parser_compile_file(vparser, f, file, start); 11207 } 11208 11209 NODE* 11210 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start) 11211 { 11212 struct parser_params *parser; 11213 volatile VALUE tmp; 11214 NODE *node; 11215 11216 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 11217 lex_gets = lex_io_gets; 11218 lex_input = file; 11219 lex_pbeg = lex_p = lex_pend = 0; 11220 compile_for_eval = rb_parse_in_eval(); 11221 11222 node = yycompile(parser, f, start); 11223 tmp = vparser; /* prohibit tail call optimization */ 11224 11225 return node; 11226 } 11227 #endif /* !RIPPER */ 11228 11229 #define STR_FUNC_ESCAPE 0x01 11230 #define STR_FUNC_EXPAND 0x02 11231 #define STR_FUNC_REGEXP 0x04 11232 #define STR_FUNC_QWORDS 0x08 11233 #define STR_FUNC_SYMBOL 0x10 11234 #define STR_FUNC_INDENT 0x20 11235 11236 enum string_type { 11237 str_squote = (0), 11238 str_dquote = (STR_FUNC_EXPAND), 11239 str_xquote = (STR_FUNC_EXPAND), 11240 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND), 11241 str_sword = (STR_FUNC_QWORDS), 11242 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND), 11243 str_ssym = (STR_FUNC_SYMBOL), 11244 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND) 11245 }; 11246 11247 static VALUE 11248 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0) 11249 { 11250 VALUE str; 11251 11252 str = rb_enc_str_new(p, n, enc); 11253 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { 11254 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 11255 } 11256 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) { 11257 rb_enc_associate(str, rb_ascii8bit_encoding()); 11258 } 11259 } 11260 11261 return str; 11262 } 11263 11264 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend) 11265 #define lex_eol_p() (lex_p >= lex_pend) 11266 #define peek(c) peek_n((c), 0) 11267 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n]) 11268 11269 static inline int 11270 parser_nextc(struct parser_params *parser) 11271 { 11272 int c; 11273 11274 if (lex_p == lex_pend) { 11275 VALUE v = lex_nextline; 11276 lex_nextline = 0; 11277 if (!v) { 11278 if (parser->eofp) 11279 return -1; 11280 11281 if (!lex_input || NIL_P(v = lex_getline(parser))) { 11282 parser->eofp = Qtrue; 11283 lex_goto_eol(parser); 11284 return -1; 11285 } 11286 } 11287 { 11288 #ifdef RIPPER 11289 if (parser->tokp < lex_pend) { 11290 if (NIL_P(parser->delayed)) { 11291 parser->delayed = rb_str_buf_new(1024); 11292 rb_enc_associate(parser->delayed, parser->enc); 11293 rb_str_buf_cat(parser->delayed, 11294 parser->tokp, lex_pend - parser->tokp); 11295 parser->delayed_line = ruby_sourceline; 11296 parser->delayed_col = (int)(parser->tokp - lex_pbeg); 11297 } 11298 else { 11299 rb_str_buf_cat(parser->delayed, 11300 parser->tokp, lex_pend - parser->tokp); 11301 } 11302 } 11303 #endif 11304 if (heredoc_end > 0) { 11305 ruby_sourceline = heredoc_end; 11306 heredoc_end = 0; 11307 } 11308 ruby_sourceline++; 11309 parser->line_count++; 11310 lex_pbeg = lex_p = RSTRING_PTR(v); 11311 lex_pend = lex_p + RSTRING_LEN(v); 11312 ripper_flush(parser); 11313 lex_lastline = v; 11314 } 11315 } 11316 c = (unsigned char)*lex_p++; 11317 if (c == '\r' && peek('\n')) { 11318 lex_p++; 11319 c = '\n'; 11320 } 11321 11322 return c; 11323 } 11324 11325 static void 11326 parser_pushback(struct parser_params *parser, int c) 11327 { 11328 if (c == -1) return; 11329 lex_p--; 11330 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') { 11331 lex_p--; 11332 } 11333 } 11334 11335 #define was_bol() (lex_p == lex_pbeg + 1) 11336 11337 #define tokfix() (tokenbuf[tokidx]='\0') 11338 #define tok() tokenbuf 11339 #define toklen() tokidx 11340 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0) 11341 11342 static char* 11343 parser_newtok(struct parser_params *parser) 11344 { 11345 tokidx = 0; 11346 if (!tokenbuf) { 11347 toksiz = 60; 11348 tokenbuf = ALLOC_N(char, 60); 11349 } 11350 if (toksiz > 4096) { 11351 toksiz = 60; 11352 REALLOC_N(tokenbuf, char, 60); 11353 } 11354 return tokenbuf; 11355 } 11356 11357 static char * 11358 parser_tokspace(struct parser_params *parser, int n) 11359 { 11360 tokidx += n; 11361 11362 if (tokidx >= toksiz) { 11363 do {toksiz *= 2;} while (toksiz < tokidx); 11364 REALLOC_N(tokenbuf, char, toksiz); 11365 } 11366 return &tokenbuf[tokidx-n]; 11367 } 11368 11369 static void 11370 parser_tokadd(struct parser_params *parser, int c) 11371 { 11372 tokenbuf[tokidx++] = (char)c; 11373 if (tokidx >= toksiz) { 11374 toksiz *= 2; 11375 REALLOC_N(tokenbuf, char, toksiz); 11376 } 11377 } 11378 11379 static int 11380 parser_tok_hex(struct parser_params *parser, size_t *numlen) 11381 { 11382 int c; 11383 11384 c = scan_hex(lex_p, 2, numlen); 11385 if (!*numlen) { 11386 yyerror("invalid hex escape"); 11387 return 0; 11388 } 11389 lex_p += *numlen; 11390 return c; 11391 } 11392 11393 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n)) 11394 11395 static int 11396 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, 11397 int string_literal, int symbol_literal, int regexp_literal) 11398 { 11399 /* 11400 * If string_literal is true, then we allow multiple codepoints 11401 * in \u{}, and add the codepoints to the current token. 11402 * Otherwise we're parsing a character literal and return a single 11403 * codepoint without adding it 11404 */ 11405 11406 int codepoint; 11407 size_t numlen; 11408 11409 if (regexp_literal) { tokadd('\\'); tokadd('u'); } 11410 11411 if (peek('{')) { /* handle \u{...} form */ 11412 do { 11413 if (regexp_literal) { tokadd(*lex_p); } 11414 nextc(); 11415 codepoint = scan_hex(lex_p, 6, &numlen); 11416 if (numlen == 0) { 11417 yyerror("invalid Unicode escape"); 11418 return 0; 11419 } 11420 if (codepoint > 0x10ffff) { 11421 yyerror("invalid Unicode codepoint (too large)"); 11422 return 0; 11423 } 11424 lex_p += numlen; 11425 if (regexp_literal) { 11426 tokcopy((int)numlen); 11427 } 11428 else if (codepoint >= 0x80) { 11429 *encp = UTF8_ENC(); 11430 if (string_literal) tokaddmbc(codepoint, *encp); 11431 } 11432 else if (string_literal) { 11433 tokadd(codepoint); 11434 } 11435 } while (string_literal && (peek(' ') || peek('\t'))); 11436 11437 if (!peek('}')) { 11438 yyerror("unterminated Unicode escape"); 11439 return 0; 11440 } 11441 11442 if (regexp_literal) { tokadd('}'); } 11443 nextc(); 11444 } 11445 else { /* handle \uxxxx form */ 11446 codepoint = scan_hex(lex_p, 4, &numlen); 11447 if (numlen < 4) { 11448 yyerror("invalid Unicode escape"); 11449 return 0; 11450 } 11451 lex_p += 4; 11452 if (regexp_literal) { 11453 tokcopy(4); 11454 } 11455 else if (codepoint >= 0x80) { 11456 *encp = UTF8_ENC(); 11457 if (string_literal) tokaddmbc(codepoint, *encp); 11458 } 11459 else if (string_literal) { 11460 tokadd(codepoint); 11461 } 11462 } 11463 11464 return codepoint; 11465 } 11466 11467 #define ESCAPE_CONTROL 1 11468 #define ESCAPE_META 2 11469 11470 static int 11471 parser_read_escape(struct parser_params *parser, int flags, 11472 rb_encoding **encp) 11473 { 11474 int c; 11475 size_t numlen; 11476 11477 switch (c = nextc()) { 11478 case '\\': /* Backslash */ 11479 return c; 11480 11481 case 'n': /* newline */ 11482 return '\n'; 11483 11484 case 't': /* horizontal tab */ 11485 return '\t'; 11486 11487 case 'r': /* carriage-return */ 11488 return '\r'; 11489 11490 case 'f': /* form-feed */ 11491 return '\f'; 11492 11493 case 'v': /* vertical tab */ 11494 return '\13'; 11495 11496 case 'a': /* alarm(bell) */ 11497 return '\007'; 11498 11499 case 'e': /* escape */ 11500 return 033; 11501 11502 case '0': case '1': case '2': case '3': /* octal constant */ 11503 case '4': case '5': case '6': case '7': 11504 pushback(c); 11505 c = scan_oct(lex_p, 3, &numlen); 11506 lex_p += numlen; 11507 return c; 11508 11509 case 'x': /* hex constant */ 11510 c = tok_hex(&numlen); 11511 if (numlen == 0) return 0; 11512 return c; 11513 11514 case 'b': /* backspace */ 11515 return '\010'; 11516 11517 case 's': /* space */ 11518 return ' '; 11519 11520 case 'M': 11521 if (flags & ESCAPE_META) goto eof; 11522 if ((c = nextc()) != '-') { 11523 pushback(c); 11524 goto eof; 11525 } 11526 if ((c = nextc()) == '\\') { 11527 if (peek('u')) goto eof; 11528 return read_escape(flags|ESCAPE_META, encp) | 0x80; 11529 } 11530 else if (c == -1 || !ISASCII(c)) goto eof; 11531 else { 11532 return ((c & 0xff) | 0x80); 11533 } 11534 11535 case 'C': 11536 if ((c = nextc()) != '-') { 11537 pushback(c); 11538 goto eof; 11539 } 11540 case 'c': 11541 if (flags & ESCAPE_CONTROL) goto eof; 11542 if ((c = nextc())== '\\') { 11543 if (peek('u')) goto eof; 11544 c = read_escape(flags|ESCAPE_CONTROL, encp); 11545 } 11546 else if (c == '?') 11547 return 0177; 11548 else if (c == -1 || !ISASCII(c)) goto eof; 11549 return c & 0x9f; 11550 11551 eof: 11552 case -1: 11553 yyerror("Invalid escape character syntax"); 11554 return '\0'; 11555 11556 default: 11557 return c; 11558 } 11559 } 11560 11561 static void 11562 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc) 11563 { 11564 int len = rb_enc_codelen(c, enc); 11565 rb_enc_mbcput(c, tokspace(len), enc); 11566 } 11567 11568 static int 11569 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp) 11570 { 11571 int c; 11572 int flags = 0; 11573 size_t numlen; 11574 11575 first: 11576 switch (c = nextc()) { 11577 case '\n': 11578 return 0; /* just ignore */ 11579 11580 case '0': case '1': case '2': case '3': /* octal constant */ 11581 case '4': case '5': case '6': case '7': 11582 { 11583 ruby_scan_oct(--lex_p, 3, &numlen); 11584 if (numlen == 0) goto eof; 11585 lex_p += numlen; 11586 tokcopy((int)numlen + 1); 11587 } 11588 return 0; 11589 11590 case 'x': /* hex constant */ 11591 { 11592 tok_hex(&numlen); 11593 if (numlen == 0) return -1; 11594 tokcopy((int)numlen + 2); 11595 } 11596 return 0; 11597 11598 case 'M': 11599 if (flags & ESCAPE_META) goto eof; 11600 if ((c = nextc()) != '-') { 11601 pushback(c); 11602 goto eof; 11603 } 11604 tokcopy(3); 11605 flags |= ESCAPE_META; 11606 goto escaped; 11607 11608 case 'C': 11609 if (flags & ESCAPE_CONTROL) goto eof; 11610 if ((c = nextc()) != '-') { 11611 pushback(c); 11612 goto eof; 11613 } 11614 tokcopy(3); 11615 goto escaped; 11616 11617 case 'c': 11618 if (flags & ESCAPE_CONTROL) goto eof; 11619 tokcopy(2); 11620 flags |= ESCAPE_CONTROL; 11621 escaped: 11622 if ((c = nextc()) == '\\') { 11623 goto first; 11624 } 11625 else if (c == -1) goto eof; 11626 tokadd(c); 11627 return 0; 11628 11629 eof: 11630 case -1: 11631 yyerror("Invalid escape character syntax"); 11632 return -1; 11633 11634 default: 11635 tokadd('\\'); 11636 tokadd(c); 11637 } 11638 return 0; 11639 } 11640 11641 static int 11642 parser_regx_options(struct parser_params *parser) 11643 { 11644 int kcode = 0; 11645 int kopt = 0; 11646 int options = 0; 11647 int c, opt, kc; 11648 11649 newtok(); 11650 while (c = nextc(), ISALPHA(c)) { 11651 if (c == 'o') { 11652 options |= RE_OPTION_ONCE; 11653 } 11654 else if (rb_char_to_option_kcode(c, &opt, &kc)) { 11655 if (kc >= 0) { 11656 if (kc != rb_ascii8bit_encindex()) kcode = c; 11657 kopt = opt; 11658 } 11659 else { 11660 options |= opt; 11661 } 11662 } 11663 else { 11664 tokadd(c); 11665 } 11666 } 11667 options |= kopt; 11668 pushback(c); 11669 if (toklen()) { 11670 tokfix(); 11671 compile_error(PARSER_ARG "unknown regexp option%s - %s", 11672 toklen() > 1 ? "s" : "", tok()); 11673 } 11674 return options | RE_OPTION_ENCODING(kcode); 11675 } 11676 11677 static void 11678 dispose_string(VALUE str) 11679 { 11680 /* TODO: should use another API? */ 11681 if (RBASIC(str)->flags & RSTRING_NOEMBED) 11682 xfree(RSTRING_PTR(str)); 11683 rb_gc_force_recycle(str); 11684 } 11685 11686 static int 11687 parser_tokadd_mbchar(struct parser_params *parser, int c) 11688 { 11689 int len = parser_precise_mbclen(); 11690 if (!MBCLEN_CHARFOUND_P(len)) { 11691 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name()); 11692 return -1; 11693 } 11694 tokadd(c); 11695 lex_p += --len; 11696 if (len > 0) tokcopy(len); 11697 return c; 11698 } 11699 11700 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c)) 11701 11702 static int 11703 parser_tokadd_string(struct parser_params *parser, 11704 int func, int term, int paren, long *nest, 11705 rb_encoding **encp) 11706 { 11707 int c; 11708 int has_nonascii = 0; 11709 rb_encoding *enc = *encp; 11710 char *errbuf = 0; 11711 static const char mixed_msg[] = "%s mixed within %s source"; 11712 11713 #define mixed_error(enc1, enc2) if (!errbuf) { \ 11714 size_t len = sizeof(mixed_msg) - 4; \ 11715 len += strlen(rb_enc_name(enc1)); \ 11716 len += strlen(rb_enc_name(enc2)); \ 11717 errbuf = ALLOCA_N(char, len); \ 11718 snprintf(errbuf, len, mixed_msg, \ 11719 rb_enc_name(enc1), \ 11720 rb_enc_name(enc2)); \ 11721 yyerror(errbuf); \ 11722 } 11723 #define mixed_escape(beg, enc1, enc2) do { \ 11724 const char *pos = lex_p; \ 11725 lex_p = (beg); \ 11726 mixed_error((enc1), (enc2)); \ 11727 lex_p = pos; \ 11728 } while (0) 11729 11730 while ((c = nextc()) != -1) { 11731 if (paren && c == paren) { 11732 ++*nest; 11733 } 11734 else if (c == term) { 11735 if (!nest || !*nest) { 11736 pushback(c); 11737 break; 11738 } 11739 --*nest; 11740 } 11741 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) { 11742 int c2 = *lex_p; 11743 if (c2 == '$' || c2 == '@' || c2 == '{') { 11744 pushback(c); 11745 break; 11746 } 11747 } 11748 else if (c == '\\') { 11749 const char *beg = lex_p - 1; 11750 c = nextc(); 11751 switch (c) { 11752 case '\n': 11753 if (func & STR_FUNC_QWORDS) break; 11754 if (func & STR_FUNC_EXPAND) continue; 11755 tokadd('\\'); 11756 break; 11757 11758 case '\\': 11759 if (func & STR_FUNC_ESCAPE) tokadd(c); 11760 break; 11761 11762 case 'u': 11763 if ((func & STR_FUNC_EXPAND) == 0) { 11764 tokadd('\\'); 11765 break; 11766 } 11767 parser_tokadd_utf8(parser, &enc, 1, 11768 func & STR_FUNC_SYMBOL, 11769 func & STR_FUNC_REGEXP); 11770 if (has_nonascii && enc != *encp) { 11771 mixed_escape(beg, enc, *encp); 11772 } 11773 continue; 11774 11775 default: 11776 if (c == -1) return -1; 11777 if (!ISASCII(c)) { 11778 if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\'); 11779 goto non_ascii; 11780 } 11781 if (func & STR_FUNC_REGEXP) { 11782 pushback(c); 11783 if ((c = tokadd_escape(&enc)) < 0) 11784 return -1; 11785 if (has_nonascii && enc != *encp) { 11786 mixed_escape(beg, enc, *encp); 11787 } 11788 continue; 11789 } 11790 else if (func & STR_FUNC_EXPAND) { 11791 pushback(c); 11792 if (func & STR_FUNC_ESCAPE) tokadd('\\'); 11793 c = read_escape(0, &enc); 11794 } 11795 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11796 /* ignore backslashed spaces in %w */ 11797 } 11798 else if (c != term && !(paren && c == paren)) { 11799 tokadd('\\'); 11800 pushback(c); 11801 continue; 11802 } 11803 } 11804 } 11805 else if (!parser_isascii()) { 11806 non_ascii: 11807 has_nonascii = 1; 11808 if (enc != *encp) { 11809 mixed_error(enc, *encp); 11810 continue; 11811 } 11812 if (tokadd_mbchar(c) == -1) return -1; 11813 continue; 11814 } 11815 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11816 pushback(c); 11817 break; 11818 } 11819 if (c & 0x80) { 11820 has_nonascii = 1; 11821 if (enc != *encp) { 11822 mixed_error(enc, *encp); 11823 continue; 11824 } 11825 } 11826 tokadd(c); 11827 } 11828 *encp = enc; 11829 return c; 11830 } 11831 11832 #define NEW_STRTERM(func, term, paren) \ 11833 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0) 11834 11835 #ifdef RIPPER 11836 static void 11837 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc) 11838 { 11839 if (!NIL_P(parser->delayed)) { 11840 ptrdiff_t len = lex_p - parser->tokp; 11841 if (len > 0) { 11842 rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc); 11843 } 11844 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 11845 parser->tokp = lex_p; 11846 } 11847 } 11848 11849 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc)) 11850 #else 11851 #define flush_string_content(enc) ((void)(enc)) 11852 #endif 11853 11854 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32]; 11855 /* this can be shared with ripper, since it's independent from struct 11856 * parser_params. */ 11857 #ifndef RIPPER 11858 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0) 11859 #define SPECIAL_PUNCT(idx) ( \ 11860 BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \ 11861 BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \ 11862 BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \ 11863 BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \ 11864 BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \ 11865 BIT('0', idx)) 11866 const unsigned int ruby_global_name_punct_bits[] = { 11867 SPECIAL_PUNCT(0), 11868 SPECIAL_PUNCT(1), 11869 SPECIAL_PUNCT(2), 11870 }; 11871 #undef BIT 11872 #undef SPECIAL_PUNCT 11873 #endif 11874 11875 static inline int 11876 is_global_name_punct(const char c) 11877 { 11878 if (c <= 0x20 || 0x7e < c) return 0; 11879 return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1; 11880 } 11881 11882 static int 11883 parser_peek_variable_name(struct parser_params *parser) 11884 { 11885 int c; 11886 const char *p = lex_p; 11887 11888 if (p + 1 >= lex_pend) return 0; 11889 c = *p++; 11890 switch (c) { 11891 case '$': 11892 if ((c = *p) == '-') { 11893 if (++p >= lex_pend) return 0; 11894 c = *p; 11895 } 11896 else if (is_global_name_punct(c) || ISDIGIT(c)) { 11897 return tSTRING_DVAR; 11898 } 11899 break; 11900 case '@': 11901 if ((c = *p) == '@') { 11902 if (++p >= lex_pend) return 0; 11903 c = *p; 11904 } 11905 break; 11906 case '{': 11907 lex_p = p; 11908 command_start = TRUE; 11909 return tSTRING_DBEG; 11910 default: 11911 return 0; 11912 } 11913 if (!ISASCII(c) || c == '_' || ISALPHA(c)) 11914 return tSTRING_DVAR; 11915 return 0; 11916 } 11917 11918 static int 11919 parser_parse_string(struct parser_params *parser, NODE *quote) 11920 { 11921 int func = (int)quote->nd_func; 11922 int term = nd_term(quote); 11923 int paren = nd_paren(quote); 11924 int c, space = 0; 11925 rb_encoding *enc = parser->enc; 11926 11927 if (func == -1) return tSTRING_END; 11928 c = nextc(); 11929 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11930 do {c = nextc();} while (ISSPACE(c)); 11931 space = 1; 11932 } 11933 if (c == term && !quote->nd_nest) { 11934 if (func & STR_FUNC_QWORDS) { 11935 quote->nd_func = -1; 11936 return ' '; 11937 } 11938 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END; 11939 set_yylval_num(regx_options()); 11940 return tREGEXP_END; 11941 } 11942 if (space) { 11943 pushback(c); 11944 return ' '; 11945 } 11946 newtok(); 11947 if ((func & STR_FUNC_EXPAND) && c == '#') { 11948 int t = parser_peek_variable_name(parser); 11949 if (t) return t; 11950 tokadd('#'); 11951 c = nextc(); 11952 } 11953 pushback(c); 11954 if (tokadd_string(func, term, paren, "e->nd_nest, 11955 &enc) == -1) { 11956 ruby_sourceline = nd_line(quote); 11957 if (func & STR_FUNC_REGEXP) { 11958 if (parser->eofp) 11959 compile_error(PARSER_ARG "unterminated regexp meets end of file"); 11960 return tREGEXP_END; 11961 } 11962 else { 11963 if (parser->eofp) 11964 compile_error(PARSER_ARG "unterminated string meets end of file"); 11965 return tSTRING_END; 11966 } 11967 } 11968 11969 tokfix(); 11970 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 11971 flush_string_content(enc); 11972 11973 return tSTRING_CONTENT; 11974 } 11975 11976 static int 11977 parser_heredoc_identifier(struct parser_params *parser) 11978 { 11979 int c = nextc(), term, func = 0; 11980 long len; 11981 11982 if (c == '-') { 11983 c = nextc(); 11984 func = STR_FUNC_INDENT; 11985 } 11986 switch (c) { 11987 case '\'': 11988 func |= str_squote; goto quoted; 11989 case '"': 11990 func |= str_dquote; goto quoted; 11991 case '`': 11992 func |= str_xquote; 11993 quoted: 11994 newtok(); 11995 tokadd(func); 11996 term = c; 11997 while ((c = nextc()) != -1 && c != term) { 11998 if (tokadd_mbchar(c) == -1) return 0; 11999 } 12000 if (c == -1) { 12001 compile_error(PARSER_ARG "unterminated here document identifier"); 12002 return 0; 12003 } 12004 break; 12005 12006 default: 12007 if (!parser_is_identchar()) { 12008 pushback(c); 12009 if (func & STR_FUNC_INDENT) { 12010 pushback('-'); 12011 } 12012 return 0; 12013 } 12014 newtok(); 12015 term = '"'; 12016 tokadd(func |= str_dquote); 12017 do { 12018 if (tokadd_mbchar(c) == -1) return 0; 12019 } while ((c = nextc()) != -1 && parser_is_identchar()); 12020 pushback(c); 12021 break; 12022 } 12023 12024 tokfix(); 12025 #ifdef RIPPER 12026 ripper_dispatch_scan_event(parser, tHEREDOC_BEG); 12027 #endif 12028 len = lex_p - lex_pbeg; 12029 lex_goto_eol(parser); 12030 lex_strterm = rb_node_newnode(NODE_HEREDOC, 12031 STR_NEW(tok(), toklen()), /* nd_lit */ 12032 len, /* nd_nth */ 12033 lex_lastline); /* nd_orig */ 12034 nd_set_line(lex_strterm, ruby_sourceline); 12035 ripper_flush(parser); 12036 return term == '`' ? tXSTRING_BEG : tSTRING_BEG; 12037 } 12038 12039 static void 12040 parser_heredoc_restore(struct parser_params *parser, NODE *here) 12041 { 12042 VALUE line; 12043 12044 line = here->nd_orig; 12045 lex_lastline = line; 12046 lex_pbeg = RSTRING_PTR(line); 12047 lex_pend = lex_pbeg + RSTRING_LEN(line); 12048 lex_p = lex_pbeg + here->nd_nth; 12049 heredoc_end = ruby_sourceline; 12050 ruby_sourceline = nd_line(here); 12051 dispose_string(here->nd_lit); 12052 rb_gc_force_recycle((VALUE)here); 12053 ripper_flush(parser); 12054 } 12055 12056 static int 12057 parser_whole_match_p(struct parser_params *parser, 12058 const char *eos, long len, int indent) 12059 { 12060 const char *p = lex_pbeg; 12061 long n; 12062 12063 if (indent) { 12064 while (*p && ISSPACE(*p)) p++; 12065 } 12066 n = lex_pend - (p + len); 12067 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE; 12068 return strncmp(eos, p, len) == 0; 12069 } 12070 12071 #ifdef RIPPER 12072 static void 12073 ripper_dispatch_heredoc_end(struct parser_params *parser) 12074 { 12075 if (!NIL_P(parser->delayed)) 12076 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12077 lex_goto_eol(parser); 12078 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END); 12079 } 12080 12081 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser) 12082 #else 12083 #define dispatch_heredoc_end() ((void)0) 12084 #endif 12085 12086 static int 12087 parser_here_document(struct parser_params *parser, NODE *here) 12088 { 12089 int c, func, indent = 0; 12090 const char *eos, *p, *pend; 12091 long len; 12092 VALUE str = 0; 12093 rb_encoding *enc = parser->enc; 12094 12095 eos = RSTRING_PTR(here->nd_lit); 12096 len = RSTRING_LEN(here->nd_lit) - 1; 12097 indent = (func = *eos++) & STR_FUNC_INDENT; 12098 12099 if ((c = nextc()) == -1) { 12100 error: 12101 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos); 12102 #ifdef RIPPER 12103 if (NIL_P(parser->delayed)) { 12104 ripper_dispatch_scan_event(parser, tSTRING_CONTENT); 12105 } 12106 else { 12107 if (str || 12108 ((len = lex_p - parser->tokp) > 0 && 12109 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) { 12110 rb_str_append(parser->delayed, str); 12111 } 12112 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12113 } 12114 lex_goto_eol(parser); 12115 #endif 12116 restore: 12117 heredoc_restore(lex_strterm); 12118 lex_strterm = 0; 12119 return 0; 12120 } 12121 if (was_bol() && whole_match_p(eos, len, indent)) { 12122 dispatch_heredoc_end(); 12123 heredoc_restore(lex_strterm); 12124 return tSTRING_END; 12125 } 12126 12127 if (!(func & STR_FUNC_EXPAND)) { 12128 do { 12129 p = RSTRING_PTR(lex_lastline); 12130 pend = lex_pend; 12131 if (pend > p) { 12132 switch (pend[-1]) { 12133 case '\n': 12134 if (--pend == p || pend[-1] != '\r') { 12135 pend++; 12136 break; 12137 } 12138 case '\r': 12139 --pend; 12140 } 12141 } 12142 if (str) 12143 rb_str_cat(str, p, pend - p); 12144 else 12145 str = STR_NEW(p, pend - p); 12146 if (pend < lex_pend) rb_str_cat(str, "\n", 1); 12147 lex_goto_eol(parser); 12148 if (nextc() == -1) { 12149 if (str) dispose_string(str); 12150 goto error; 12151 } 12152 } while (!whole_match_p(eos, len, indent)); 12153 } 12154 else { 12155 /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/ 12156 newtok(); 12157 if (c == '#') { 12158 int t = parser_peek_variable_name(parser); 12159 if (t) return t; 12160 tokadd('#'); 12161 c = nextc(); 12162 } 12163 do { 12164 pushback(c); 12165 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) { 12166 if (parser->eofp) goto error; 12167 goto restore; 12168 } 12169 if (c != '\n') { 12170 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 12171 flush_string_content(enc); 12172 return tSTRING_CONTENT; 12173 } 12174 tokadd(nextc()); 12175 /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/ 12176 if ((c = nextc()) == -1) goto error; 12177 } while (!whole_match_p(eos, len, indent)); 12178 str = STR_NEW3(tok(), toklen(), enc, func); 12179 } 12180 dispatch_heredoc_end(); 12181 heredoc_restore(lex_strterm); 12182 lex_strterm = NEW_STRTERM(-1, 0, 0); 12183 set_yylval_str(str); 12184 return tSTRING_CONTENT; 12185 } 12186 12187 #include "lex.c" 12188 12189 static void 12190 arg_ambiguous_gen(struct parser_params *parser) 12191 { 12192 #ifndef RIPPER 12193 rb_warning0("ambiguous first argument; put parentheses or even spaces"); 12194 #else 12195 dispatch0(arg_ambiguous); 12196 #endif 12197 } 12198 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1) 12199 12200 static ID 12201 formal_argument_gen(struct parser_params *parser, ID lhs) 12202 { 12203 #ifndef RIPPER 12204 if (!is_local_id(lhs)) 12205 yyerror("formal argument must be local variable"); 12206 #endif 12207 shadowing_lvar(lhs); 12208 return lhs; 12209 } 12210 12211 static int 12212 lvar_defined_gen(struct parser_params *parser, ID id) 12213 { 12214 return (dyna_in_block() && dvar_defined_get(id)) || local_id(id); 12215 } 12216 12217 /* emacsen -*- hack */ 12218 static long 12219 parser_encode_length(struct parser_params *parser, const char *name, long len) 12220 { 12221 long nlen; 12222 12223 if (len > 5 && name[nlen = len - 5] == '-') { 12224 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0) 12225 return nlen; 12226 } 12227 if (len > 4 && name[nlen = len - 4] == '-') { 12228 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0) 12229 return nlen; 12230 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 && 12231 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0)) 12232 /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */ 12233 return nlen; 12234 } 12235 return len; 12236 } 12237 12238 static void 12239 parser_set_encode(struct parser_params *parser, const char *name) 12240 { 12241 int idx = rb_enc_find_index(name); 12242 rb_encoding *enc; 12243 VALUE excargs[3]; 12244 12245 if (idx < 0) { 12246 excargs[1] = rb_sprintf("unknown encoding name: %s", name); 12247 error: 12248 excargs[0] = rb_eArgError; 12249 excargs[2] = rb_make_backtrace(); 12250 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline)); 12251 rb_exc_raise(rb_make_exception(3, excargs)); 12252 } 12253 enc = rb_enc_from_index(idx); 12254 if (!rb_enc_asciicompat(enc)) { 12255 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc)); 12256 goto error; 12257 } 12258 parser->enc = enc; 12259 #ifndef RIPPER 12260 if (ruby_debug_lines) { 12261 long i, n = RARRAY_LEN(ruby_debug_lines); 12262 const VALUE *p = RARRAY_PTR(ruby_debug_lines); 12263 for (i = 0; i < n; ++i) { 12264 rb_enc_associate_index(*p, idx); 12265 } 12266 } 12267 #endif 12268 } 12269 12270 static int 12271 comment_at_top(struct parser_params *parser) 12272 { 12273 const char *p = lex_pbeg, *pend = lex_p - 1; 12274 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0; 12275 while (p < pend) { 12276 if (!ISSPACE(*p)) return 0; 12277 p++; 12278 } 12279 return 1; 12280 } 12281 12282 #ifndef RIPPER 12283 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len); 12284 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val); 12285 12286 static void 12287 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val) 12288 { 12289 if (!comment_at_top(parser)) { 12290 return; 12291 } 12292 parser_set_encode(parser, val); 12293 } 12294 12295 static void 12296 parser_set_token_info(struct parser_params *parser, const char *name, const char *val) 12297 { 12298 int *p = &parser->parser_token_info_enabled; 12299 12300 switch (*val) { 12301 case 't': case 'T': 12302 if (strcasecmp(val, "true") == 0) { 12303 *p = TRUE; 12304 return; 12305 } 12306 break; 12307 case 'f': case 'F': 12308 if (strcasecmp(val, "false") == 0) { 12309 *p = FALSE; 12310 return; 12311 } 12312 break; 12313 } 12314 rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val); 12315 } 12316 12317 struct magic_comment { 12318 const char *name; 12319 rb_magic_comment_setter_t func; 12320 rb_magic_comment_length_t length; 12321 }; 12322 12323 static const struct magic_comment magic_comments[] = { 12324 {"coding", magic_comment_encoding, parser_encode_length}, 12325 {"encoding", magic_comment_encoding, parser_encode_length}, 12326 {"warn_indent", parser_set_token_info}, 12327 }; 12328 #endif 12329 12330 static const char * 12331 magic_comment_marker(const char *str, long len) 12332 { 12333 long i = 2; 12334 12335 while (i < len) { 12336 switch (str[i]) { 12337 case '-': 12338 if (str[i-1] == '*' && str[i-2] == '-') { 12339 return str + i + 1; 12340 } 12341 i += 2; 12342 break; 12343 case '*': 12344 if (i + 1 >= len) return 0; 12345 if (str[i+1] != '-') { 12346 i += 4; 12347 } 12348 else if (str[i-1] != '-') { 12349 i += 2; 12350 } 12351 else { 12352 return str + i + 2; 12353 } 12354 break; 12355 default: 12356 i += 3; 12357 break; 12358 } 12359 } 12360 return 0; 12361 } 12362 12363 static int 12364 parser_magic_comment(struct parser_params *parser, const char *str, long len) 12365 { 12366 VALUE name = 0, val = 0; 12367 const char *beg, *end, *vbeg, *vend; 12368 #define str_copy(_s, _p, _n) ((_s) \ 12369 ? (void)(rb_str_resize((_s), (_n)), \ 12370 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \ 12371 : (void)((_s) = STR_NEW((_p), (_n)))) 12372 12373 if (len <= 7) return FALSE; 12374 if (!(beg = magic_comment_marker(str, len))) return FALSE; 12375 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE; 12376 str = beg; 12377 len = end - beg - 3; 12378 12379 /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */ 12380 while (len > 0) { 12381 #ifndef RIPPER 12382 const struct magic_comment *p = magic_comments; 12383 #endif 12384 char *s; 12385 int i; 12386 long n = 0; 12387 12388 for (; len > 0 && *str; str++, --len) { 12389 switch (*str) { 12390 case '\'': case '"': case ':': case ';': 12391 continue; 12392 } 12393 if (!ISSPACE(*str)) break; 12394 } 12395 for (beg = str; len > 0; str++, --len) { 12396 switch (*str) { 12397 case '\'': case '"': case ':': case ';': 12398 break; 12399 default: 12400 if (ISSPACE(*str)) break; 12401 continue; 12402 } 12403 break; 12404 } 12405 for (end = str; len > 0 && ISSPACE(*str); str++, --len); 12406 if (!len) break; 12407 if (*str != ':') continue; 12408 12409 do str++; while (--len > 0 && ISSPACE(*str)); 12410 if (!len) break; 12411 if (*str == '"') { 12412 for (vbeg = ++str; --len > 0 && *str != '"'; str++) { 12413 if (*str == '\\') { 12414 --len; 12415 ++str; 12416 } 12417 } 12418 vend = str; 12419 if (len) { 12420 --len; 12421 ++str; 12422 } 12423 } 12424 else { 12425 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++); 12426 vend = str; 12427 } 12428 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++; 12429 12430 n = end - beg; 12431 str_copy(name, beg, n); 12432 s = RSTRING_PTR(name); 12433 for (i = 0; i < n; ++i) { 12434 if (s[i] == '-') s[i] = '_'; 12435 } 12436 #ifndef RIPPER 12437 do { 12438 if (STRNCASECMP(p->name, s, n) == 0) { 12439 n = vend - vbeg; 12440 if (p->length) { 12441 n = (*p->length)(parser, vbeg, n); 12442 } 12443 str_copy(val, vbeg, n); 12444 (*p->func)(parser, s, RSTRING_PTR(val)); 12445 break; 12446 } 12447 } while (++p < magic_comments + numberof(magic_comments)); 12448 #else 12449 str_copy(val, vbeg, vend - vbeg); 12450 dispatch2(magic_comment, name, val); 12451 #endif 12452 } 12453 12454 return TRUE; 12455 } 12456 12457 static void 12458 set_file_encoding(struct parser_params *parser, const char *str, const char *send) 12459 { 12460 int sep = 0; 12461 const char *beg = str; 12462 VALUE s; 12463 12464 for (;;) { 12465 if (send - str <= 6) return; 12466 switch (str[6]) { 12467 case 'C': case 'c': str += 6; continue; 12468 case 'O': case 'o': str += 5; continue; 12469 case 'D': case 'd': str += 4; continue; 12470 case 'I': case 'i': str += 3; continue; 12471 case 'N': case 'n': str += 2; continue; 12472 case 'G': case 'g': str += 1; continue; 12473 case '=': case ':': 12474 sep = 1; 12475 str += 6; 12476 break; 12477 default: 12478 str += 6; 12479 if (ISSPACE(*str)) break; 12480 continue; 12481 } 12482 if (STRNCASECMP(str-6, "coding", 6) == 0) break; 12483 } 12484 for (;;) { 12485 do { 12486 if (++str >= send) return; 12487 } while (ISSPACE(*str)); 12488 if (sep) break; 12489 if (*str != '=' && *str != ':') return; 12490 sep = 1; 12491 str++; 12492 } 12493 beg = str; 12494 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send); 12495 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg)); 12496 parser_set_encode(parser, RSTRING_PTR(s)); 12497 rb_str_resize(s, 0); 12498 } 12499 12500 static void 12501 parser_prepare(struct parser_params *parser) 12502 { 12503 int c = nextc(); 12504 switch (c) { 12505 case '#': 12506 if (peek('!')) parser->has_shebang = 1; 12507 break; 12508 case 0xef: /* UTF-8 BOM marker */ 12509 if (lex_pend - lex_p >= 2 && 12510 (unsigned char)lex_p[0] == 0xbb && 12511 (unsigned char)lex_p[1] == 0xbf) { 12512 parser->enc = rb_utf8_encoding(); 12513 lex_p += 2; 12514 lex_pbeg = lex_p; 12515 return; 12516 } 12517 break; 12518 case EOF: 12519 return; 12520 } 12521 pushback(c); 12522 parser->enc = rb_enc_get(lex_lastline); 12523 } 12524 12525 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG) 12526 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN) 12527 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS) 12528 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c)) 12529 #define IS_LABEL_POSSIBLE() ((lex_state == EXPR_BEG && !cmd_state) || IS_ARG()) 12530 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1)) 12531 12532 #ifndef RIPPER 12533 #define ambiguous_operator(op, syn) ( \ 12534 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \ 12535 rb_warning0("even though it seems like "syn"")) 12536 #else 12537 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn)) 12538 #endif 12539 #define warn_balanced(op, syn) ((void) \ 12540 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \ 12541 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \ 12542 last_state != EXPR_ENDARG && \ 12543 space_seen && !ISSPACE(c) && \ 12544 (ambiguous_operator(op, syn), 0))) 12545 12546 static int 12547 parser_yylex(struct parser_params *parser) 12548 { 12549 register int c; 12550 int space_seen = 0; 12551 int cmd_state; 12552 enum lex_state_e last_state; 12553 rb_encoding *enc; 12554 int mb; 12555 #ifdef RIPPER 12556 int fallthru = FALSE; 12557 #endif 12558 12559 if (lex_strterm) { 12560 int token; 12561 if (nd_type(lex_strterm) == NODE_HEREDOC) { 12562 token = here_document(lex_strterm); 12563 if (token == tSTRING_END) { 12564 lex_strterm = 0; 12565 lex_state = EXPR_END; 12566 } 12567 } 12568 else { 12569 token = parse_string(lex_strterm); 12570 if (token == tSTRING_END || token == tREGEXP_END) { 12571 rb_gc_force_recycle((VALUE)lex_strterm); 12572 lex_strterm = 0; 12573 lex_state = EXPR_END; 12574 } 12575 } 12576 return token; 12577 } 12578 cmd_state = command_start; 12579 command_start = FALSE; 12580 retry: 12581 last_state = lex_state; 12582 switch (c = nextc()) { 12583 case '\0': /* NUL */ 12584 case '\004': /* ^D */ 12585 case '\032': /* ^Z */ 12586 case -1: /* end of script. */ 12587 return 0; 12588 12589 /* white spaces */ 12590 case ' ': case '\t': case '\f': case '\r': 12591 case '\13': /* '\v' */ 12592 space_seen = 1; 12593 #ifdef RIPPER 12594 while ((c = nextc())) { 12595 switch (c) { 12596 case ' ': case '\t': case '\f': case '\r': 12597 case '\13': /* '\v' */ 12598 break; 12599 default: 12600 goto outofloop; 12601 } 12602 } 12603 outofloop: 12604 pushback(c); 12605 ripper_dispatch_scan_event(parser, tSP); 12606 #endif 12607 goto retry; 12608 12609 case '#': /* it's a comment */ 12610 /* no magic_comment in shebang line */ 12611 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) { 12612 if (comment_at_top(parser)) { 12613 set_file_encoding(parser, lex_p, lex_pend); 12614 } 12615 } 12616 lex_p = lex_pend; 12617 #ifdef RIPPER 12618 ripper_dispatch_scan_event(parser, tCOMMENT); 12619 fallthru = TRUE; 12620 #endif 12621 /* fall through */ 12622 case '\n': 12623 switch (lex_state) { 12624 case EXPR_BEG: 12625 case EXPR_FNAME: 12626 case EXPR_DOT: 12627 case EXPR_CLASS: 12628 case EXPR_VALUE: 12629 #ifdef RIPPER 12630 if (!fallthru) { 12631 ripper_dispatch_scan_event(parser, tIGNORED_NL); 12632 } 12633 fallthru = FALSE; 12634 #endif 12635 goto retry; 12636 default: 12637 break; 12638 } 12639 while ((c = nextc())) { 12640 switch (c) { 12641 case ' ': case '\t': case '\f': case '\r': 12642 case '\13': /* '\v' */ 12643 space_seen = 1; 12644 break; 12645 case '.': { 12646 if ((c = nextc()) != '.') { 12647 pushback(c); 12648 pushback('.'); 12649 goto retry; 12650 } 12651 } 12652 default: 12653 --ruby_sourceline; 12654 lex_nextline = lex_lastline; 12655 case -1: /* EOF no decrement*/ 12656 lex_goto_eol(parser); 12657 #ifdef RIPPER 12658 if (c != -1) { 12659 parser->tokp = lex_p; 12660 } 12661 #endif 12662 goto normal_newline; 12663 } 12664 } 12665 normal_newline: 12666 command_start = TRUE; 12667 lex_state = EXPR_BEG; 12668 return '\n'; 12669 12670 case '*': 12671 if ((c = nextc()) == '*') { 12672 if ((c = nextc()) == '=') { 12673 set_yylval_id(tPOW); 12674 lex_state = EXPR_BEG; 12675 return tOP_ASGN; 12676 } 12677 pushback(c); 12678 c = tPOW; 12679 } 12680 else { 12681 if (c == '=') { 12682 set_yylval_id('*'); 12683 lex_state = EXPR_BEG; 12684 return tOP_ASGN; 12685 } 12686 pushback(c); 12687 if (IS_SPCARG(c)) { 12688 rb_warning0("`*' interpreted as argument prefix"); 12689 c = tSTAR; 12690 } 12691 else if (IS_BEG()) { 12692 c = tSTAR; 12693 } 12694 else { 12695 warn_balanced("*", "argument prefix"); 12696 c = '*'; 12697 } 12698 } 12699 switch (lex_state) { 12700 case EXPR_FNAME: case EXPR_DOT: 12701 lex_state = EXPR_ARG; break; 12702 default: 12703 lex_state = EXPR_BEG; break; 12704 } 12705 return c; 12706 12707 case '!': 12708 c = nextc(); 12709 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12710 lex_state = EXPR_ARG; 12711 if (c == '@') { 12712 return '!'; 12713 } 12714 } 12715 else { 12716 lex_state = EXPR_BEG; 12717 } 12718 if (c == '=') { 12719 return tNEQ; 12720 } 12721 if (c == '~') { 12722 return tNMATCH; 12723 } 12724 pushback(c); 12725 return '!'; 12726 12727 case '=': 12728 if (was_bol()) { 12729 /* skip embedded rd document */ 12730 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) { 12731 #ifdef RIPPER 12732 int first_p = TRUE; 12733 12734 lex_goto_eol(parser); 12735 ripper_dispatch_scan_event(parser, tEMBDOC_BEG); 12736 #endif 12737 for (;;) { 12738 lex_goto_eol(parser); 12739 #ifdef RIPPER 12740 if (!first_p) { 12741 ripper_dispatch_scan_event(parser, tEMBDOC); 12742 } 12743 first_p = FALSE; 12744 #endif 12745 c = nextc(); 12746 if (c == -1) { 12747 compile_error(PARSER_ARG "embedded document meets end of file"); 12748 return 0; 12749 } 12750 if (c != '=') continue; 12751 if (strncmp(lex_p, "end", 3) == 0 && 12752 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) { 12753 break; 12754 } 12755 } 12756 lex_goto_eol(parser); 12757 #ifdef RIPPER 12758 ripper_dispatch_scan_event(parser, tEMBDOC_END); 12759 #endif 12760 goto retry; 12761 } 12762 } 12763 12764 switch (lex_state) { 12765 case EXPR_FNAME: case EXPR_DOT: 12766 lex_state = EXPR_ARG; break; 12767 default: 12768 lex_state = EXPR_BEG; break; 12769 } 12770 if ((c = nextc()) == '=') { 12771 if ((c = nextc()) == '=') { 12772 return tEQQ; 12773 } 12774 pushback(c); 12775 return tEQ; 12776 } 12777 if (c == '~') { 12778 return tMATCH; 12779 } 12780 else if (c == '>') { 12781 return tASSOC; 12782 } 12783 pushback(c); 12784 return '='; 12785 12786 case '<': 12787 last_state = lex_state; 12788 c = nextc(); 12789 if (c == '<' && 12790 lex_state != EXPR_DOT && 12791 lex_state != EXPR_CLASS && 12792 !IS_END() && 12793 (!IS_ARG() || space_seen)) { 12794 int token = heredoc_identifier(); 12795 if (token) return token; 12796 } 12797 switch (lex_state) { 12798 case EXPR_FNAME: case EXPR_DOT: 12799 lex_state = EXPR_ARG; break; 12800 default: 12801 lex_state = EXPR_BEG; break; 12802 } 12803 if (c == '=') { 12804 if ((c = nextc()) == '>') { 12805 return tCMP; 12806 } 12807 pushback(c); 12808 return tLEQ; 12809 } 12810 if (c == '<') { 12811 if ((c = nextc()) == '=') { 12812 set_yylval_id(tLSHFT); 12813 lex_state = EXPR_BEG; 12814 return tOP_ASGN; 12815 } 12816 pushback(c); 12817 warn_balanced("<<", "here document"); 12818 return tLSHFT; 12819 } 12820 pushback(c); 12821 return '<'; 12822 12823 case '>': 12824 switch (lex_state) { 12825 case EXPR_FNAME: case EXPR_DOT: 12826 lex_state = EXPR_ARG; break; 12827 default: 12828 lex_state = EXPR_BEG; break; 12829 } 12830 if ((c = nextc()) == '=') { 12831 return tGEQ; 12832 } 12833 if (c == '>') { 12834 if ((c = nextc()) == '=') { 12835 set_yylval_id(tRSHFT); 12836 lex_state = EXPR_BEG; 12837 return tOP_ASGN; 12838 } 12839 pushback(c); 12840 return tRSHFT; 12841 } 12842 pushback(c); 12843 return '>'; 12844 12845 case '"': 12846 lex_strterm = NEW_STRTERM(str_dquote, '"', 0); 12847 return tSTRING_BEG; 12848 12849 case '`': 12850 if (lex_state == EXPR_FNAME) { 12851 lex_state = EXPR_ENDFN; 12852 return c; 12853 } 12854 if (lex_state == EXPR_DOT) { 12855 if (cmd_state) 12856 lex_state = EXPR_CMDARG; 12857 else 12858 lex_state = EXPR_ARG; 12859 return c; 12860 } 12861 lex_strterm = NEW_STRTERM(str_xquote, '`', 0); 12862 return tXSTRING_BEG; 12863 12864 case '\'': 12865 lex_strterm = NEW_STRTERM(str_squote, '\'', 0); 12866 return tSTRING_BEG; 12867 12868 case '?': 12869 if (IS_END()) { 12870 lex_state = EXPR_VALUE; 12871 return '?'; 12872 } 12873 c = nextc(); 12874 if (c == -1) { 12875 compile_error(PARSER_ARG "incomplete character syntax"); 12876 return 0; 12877 } 12878 if (rb_enc_isspace(c, parser->enc)) { 12879 if (!IS_ARG()) { 12880 int c2 = 0; 12881 switch (c) { 12882 case ' ': 12883 c2 = 's'; 12884 break; 12885 case '\n': 12886 c2 = 'n'; 12887 break; 12888 case '\t': 12889 c2 = 't'; 12890 break; 12891 case '\v': 12892 c2 = 'v'; 12893 break; 12894 case '\r': 12895 c2 = 'r'; 12896 break; 12897 case '\f': 12898 c2 = 'f'; 12899 break; 12900 } 12901 if (c2) { 12902 rb_warnI("invalid character syntax; use ?\\%c", c2); 12903 } 12904 } 12905 ternary: 12906 pushback(c); 12907 lex_state = EXPR_VALUE; 12908 return '?'; 12909 } 12910 newtok(); 12911 enc = parser->enc; 12912 if (!parser_isascii()) { 12913 if (tokadd_mbchar(c) == -1) return 0; 12914 } 12915 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') && 12916 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) { 12917 goto ternary; 12918 } 12919 else if (c == '\\') { 12920 if (peek('u')) { 12921 nextc(); 12922 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0); 12923 if (0x80 <= c) { 12924 tokaddmbc(c, enc); 12925 } 12926 else { 12927 tokadd(c); 12928 } 12929 } 12930 else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) { 12931 nextc(); 12932 if (tokadd_mbchar(c) == -1) return 0; 12933 } 12934 else { 12935 c = read_escape(0, &enc); 12936 tokadd(c); 12937 } 12938 } 12939 else { 12940 tokadd(c); 12941 } 12942 tokfix(); 12943 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0)); 12944 lex_state = EXPR_END; 12945 return tCHAR; 12946 12947 case '&': 12948 if ((c = nextc()) == '&') { 12949 lex_state = EXPR_BEG; 12950 if ((c = nextc()) == '=') { 12951 set_yylval_id(tANDOP); 12952 lex_state = EXPR_BEG; 12953 return tOP_ASGN; 12954 } 12955 pushback(c); 12956 return tANDOP; 12957 } 12958 else if (c == '=') { 12959 set_yylval_id('&'); 12960 lex_state = EXPR_BEG; 12961 return tOP_ASGN; 12962 } 12963 pushback(c); 12964 if (IS_SPCARG(c)) { 12965 rb_warning0("`&' interpreted as argument prefix"); 12966 c = tAMPER; 12967 } 12968 else if (IS_BEG()) { 12969 c = tAMPER; 12970 } 12971 else { 12972 warn_balanced("&", "argument prefix"); 12973 c = '&'; 12974 } 12975 switch (lex_state) { 12976 case EXPR_FNAME: case EXPR_DOT: 12977 lex_state = EXPR_ARG; break; 12978 default: 12979 lex_state = EXPR_BEG; 12980 } 12981 return c; 12982 12983 case '|': 12984 if ((c = nextc()) == '|') { 12985 lex_state = EXPR_BEG; 12986 if ((c = nextc()) == '=') { 12987 set_yylval_id(tOROP); 12988 lex_state = EXPR_BEG; 12989 return tOP_ASGN; 12990 } 12991 pushback(c); 12992 return tOROP; 12993 } 12994 if (c == '=') { 12995 set_yylval_id('|'); 12996 lex_state = EXPR_BEG; 12997 return tOP_ASGN; 12998 } 12999 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13000 lex_state = EXPR_ARG; 13001 } 13002 else { 13003 lex_state = EXPR_BEG; 13004 } 13005 pushback(c); 13006 return '|'; 13007 13008 case '+': 13009 c = nextc(); 13010 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13011 lex_state = EXPR_ARG; 13012 if (c == '@') { 13013 return tUPLUS; 13014 } 13015 pushback(c); 13016 return '+'; 13017 } 13018 if (c == '=') { 13019 set_yylval_id('+'); 13020 lex_state = EXPR_BEG; 13021 return tOP_ASGN; 13022 } 13023 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 13024 lex_state = EXPR_BEG; 13025 pushback(c); 13026 if (c != -1 && ISDIGIT(c)) { 13027 c = '+'; 13028 goto start_num; 13029 } 13030 return tUPLUS; 13031 } 13032 lex_state = EXPR_BEG; 13033 pushback(c); 13034 warn_balanced("+", "unary operator"); 13035 return '+'; 13036 13037 case '-': 13038 c = nextc(); 13039 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13040 lex_state = EXPR_ARG; 13041 if (c == '@') { 13042 return tUMINUS; 13043 } 13044 pushback(c); 13045 return '-'; 13046 } 13047 if (c == '=') { 13048 set_yylval_id('-'); 13049 lex_state = EXPR_BEG; 13050 return tOP_ASGN; 13051 } 13052 if (c == '>') { 13053 lex_state = EXPR_ARG; 13054 return tLAMBDA; 13055 } 13056 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 13057 lex_state = EXPR_BEG; 13058 pushback(c); 13059 if (c != -1 && ISDIGIT(c)) { 13060 return tUMINUS_NUM; 13061 } 13062 return tUMINUS; 13063 } 13064 lex_state = EXPR_BEG; 13065 pushback(c); 13066 warn_balanced("-", "unary operator"); 13067 return '-'; 13068 13069 case '.': 13070 lex_state = EXPR_BEG; 13071 if ((c = nextc()) == '.') { 13072 if ((c = nextc()) == '.') { 13073 return tDOT3; 13074 } 13075 pushback(c); 13076 return tDOT2; 13077 } 13078 pushback(c); 13079 if (c != -1 && ISDIGIT(c)) { 13080 yyerror("no .<digit> floating literal anymore; put 0 before dot"); 13081 } 13082 lex_state = EXPR_DOT; 13083 return '.'; 13084 13085 start_num: 13086 case '0': case '1': case '2': case '3': case '4': 13087 case '5': case '6': case '7': case '8': case '9': 13088 { 13089 int is_float, seen_point, seen_e, nondigit; 13090 13091 is_float = seen_point = seen_e = nondigit = 0; 13092 lex_state = EXPR_END; 13093 newtok(); 13094 if (c == '-' || c == '+') { 13095 tokadd(c); 13096 c = nextc(); 13097 } 13098 if (c == '0') { 13099 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0) 13100 int start = toklen(); 13101 c = nextc(); 13102 if (c == 'x' || c == 'X') { 13103 /* hexadecimal */ 13104 c = nextc(); 13105 if (c != -1 && ISXDIGIT(c)) { 13106 do { 13107 if (c == '_') { 13108 if (nondigit) break; 13109 nondigit = c; 13110 continue; 13111 } 13112 if (!ISXDIGIT(c)) break; 13113 nondigit = 0; 13114 tokadd(c); 13115 } while ((c = nextc()) != -1); 13116 } 13117 pushback(c); 13118 tokfix(); 13119 if (toklen() == start) { 13120 no_digits(); 13121 } 13122 else if (nondigit) goto trailing_uc; 13123 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE)); 13124 return tINTEGER; 13125 } 13126 if (c == 'b' || c == 'B') { 13127 /* binary */ 13128 c = nextc(); 13129 if (c == '0' || c == '1') { 13130 do { 13131 if (c == '_') { 13132 if (nondigit) break; 13133 nondigit = c; 13134 continue; 13135 } 13136 if (c != '0' && c != '1') break; 13137 nondigit = 0; 13138 tokadd(c); 13139 } while ((c = nextc()) != -1); 13140 } 13141 pushback(c); 13142 tokfix(); 13143 if (toklen() == start) { 13144 no_digits(); 13145 } 13146 else if (nondigit) goto trailing_uc; 13147 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE)); 13148 return tINTEGER; 13149 } 13150 if (c == 'd' || c == 'D') { 13151 /* decimal */ 13152 c = nextc(); 13153 if (c != -1 && ISDIGIT(c)) { 13154 do { 13155 if (c == '_') { 13156 if (nondigit) break; 13157 nondigit = c; 13158 continue; 13159 } 13160 if (!ISDIGIT(c)) break; 13161 nondigit = 0; 13162 tokadd(c); 13163 } while ((c = nextc()) != -1); 13164 } 13165 pushback(c); 13166 tokfix(); 13167 if (toklen() == start) { 13168 no_digits(); 13169 } 13170 else if (nondigit) goto trailing_uc; 13171 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 13172 return tINTEGER; 13173 } 13174 if (c == '_') { 13175 /* 0_0 */ 13176 goto octal_number; 13177 } 13178 if (c == 'o' || c == 'O') { 13179 /* prefixed octal */ 13180 c = nextc(); 13181 if (c == -1 || c == '_' || !ISDIGIT(c)) { 13182 no_digits(); 13183 } 13184 } 13185 if (c >= '0' && c <= '7') { 13186 /* octal */ 13187 octal_number: 13188 do { 13189 if (c == '_') { 13190 if (nondigit) break; 13191 nondigit = c; 13192 continue; 13193 } 13194 if (c < '0' || c > '9') break; 13195 if (c > '7') goto invalid_octal; 13196 nondigit = 0; 13197 tokadd(c); 13198 } while ((c = nextc()) != -1); 13199 if (toklen() > start) { 13200 pushback(c); 13201 tokfix(); 13202 if (nondigit) goto trailing_uc; 13203 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE)); 13204 return tINTEGER; 13205 } 13206 if (nondigit) { 13207 pushback(c); 13208 goto trailing_uc; 13209 } 13210 } 13211 if (c > '7' && c <= '9') { 13212 invalid_octal: 13213 yyerror("Invalid octal digit"); 13214 } 13215 else if (c == '.' || c == 'e' || c == 'E') { 13216 tokadd('0'); 13217 } 13218 else { 13219 pushback(c); 13220 set_yylval_literal(INT2FIX(0)); 13221 return tINTEGER; 13222 } 13223 } 13224 13225 for (;;) { 13226 switch (c) { 13227 case '0': case '1': case '2': case '3': case '4': 13228 case '5': case '6': case '7': case '8': case '9': 13229 nondigit = 0; 13230 tokadd(c); 13231 break; 13232 13233 case '.': 13234 if (nondigit) goto trailing_uc; 13235 if (seen_point || seen_e) { 13236 goto decode_num; 13237 } 13238 else { 13239 int c0 = nextc(); 13240 if (c0 == -1 || !ISDIGIT(c0)) { 13241 pushback(c0); 13242 goto decode_num; 13243 } 13244 c = c0; 13245 } 13246 tokadd('.'); 13247 tokadd(c); 13248 is_float++; 13249 seen_point++; 13250 nondigit = 0; 13251 break; 13252 13253 case 'e': 13254 case 'E': 13255 if (nondigit) { 13256 pushback(c); 13257 c = nondigit; 13258 goto decode_num; 13259 } 13260 if (seen_e) { 13261 goto decode_num; 13262 } 13263 tokadd(c); 13264 seen_e++; 13265 is_float++; 13266 nondigit = c; 13267 c = nextc(); 13268 if (c != '-' && c != '+') continue; 13269 tokadd(c); 13270 nondigit = c; 13271 break; 13272 13273 case '_': /* `_' in number just ignored */ 13274 if (nondigit) goto decode_num; 13275 nondigit = c; 13276 break; 13277 13278 default: 13279 goto decode_num; 13280 } 13281 c = nextc(); 13282 } 13283 13284 decode_num: 13285 pushback(c); 13286 if (nondigit) { 13287 char tmp[30]; 13288 trailing_uc: 13289 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit); 13290 yyerror(tmp); 13291 } 13292 tokfix(); 13293 if (is_float) { 13294 double d = strtod(tok(), 0); 13295 if (errno == ERANGE) { 13296 rb_warningS("Float %s out of range", tok()); 13297 errno = 0; 13298 } 13299 set_yylval_literal(DBL2NUM(d)); 13300 return tFLOAT; 13301 } 13302 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 13303 return tINTEGER; 13304 } 13305 13306 case ')': 13307 case ']': 13308 paren_nest--; 13309 case '}': 13310 COND_LEXPOP(); 13311 CMDARG_LEXPOP(); 13312 if (c == ')') 13313 lex_state = EXPR_ENDFN; 13314 else 13315 lex_state = EXPR_ENDARG; 13316 return c; 13317 13318 case ':': 13319 c = nextc(); 13320 if (c == ':') { 13321 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) { 13322 lex_state = EXPR_BEG; 13323 return tCOLON3; 13324 } 13325 lex_state = EXPR_DOT; 13326 return tCOLON2; 13327 } 13328 if (IS_END() || ISSPACE(c)) { 13329 pushback(c); 13330 warn_balanced(":", "symbol literal"); 13331 lex_state = EXPR_BEG; 13332 return ':'; 13333 } 13334 switch (c) { 13335 case '\'': 13336 lex_strterm = NEW_STRTERM(str_ssym, c, 0); 13337 break; 13338 case '"': 13339 lex_strterm = NEW_STRTERM(str_dsym, c, 0); 13340 break; 13341 default: 13342 pushback(c); 13343 break; 13344 } 13345 lex_state = EXPR_FNAME; 13346 return tSYMBEG; 13347 13348 case '/': 13349 if (IS_BEG()) { 13350 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 13351 return tREGEXP_BEG; 13352 } 13353 if ((c = nextc()) == '=') { 13354 set_yylval_id('/'); 13355 lex_state = EXPR_BEG; 13356 return tOP_ASGN; 13357 } 13358 pushback(c); 13359 if (IS_SPCARG(c)) { 13360 (void)arg_ambiguous(); 13361 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 13362 return tREGEXP_BEG; 13363 } 13364 switch (lex_state) { 13365 case EXPR_FNAME: case EXPR_DOT: 13366 lex_state = EXPR_ARG; break; 13367 default: 13368 lex_state = EXPR_BEG; break; 13369 } 13370 warn_balanced("/", "regexp literal"); 13371 return '/'; 13372 13373 case '^': 13374 if ((c = nextc()) == '=') { 13375 set_yylval_id('^'); 13376 lex_state = EXPR_BEG; 13377 return tOP_ASGN; 13378 } 13379 switch (lex_state) { 13380 case EXPR_FNAME: case EXPR_DOT: 13381 lex_state = EXPR_ARG; break; 13382 default: 13383 lex_state = EXPR_BEG; break; 13384 } 13385 pushback(c); 13386 return '^'; 13387 13388 case ';': 13389 lex_state = EXPR_BEG; 13390 command_start = TRUE; 13391 return ';'; 13392 13393 case ',': 13394 lex_state = EXPR_BEG; 13395 return ','; 13396 13397 case '~': 13398 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13399 if ((c = nextc()) != '@') { 13400 pushback(c); 13401 } 13402 lex_state = EXPR_ARG; 13403 } 13404 else { 13405 lex_state = EXPR_BEG; 13406 } 13407 return '~'; 13408 13409 case '(': 13410 if (IS_BEG()) { 13411 c = tLPAREN; 13412 } 13413 else if (IS_SPCARG(-1)) { 13414 c = tLPAREN_ARG; 13415 } 13416 paren_nest++; 13417 COND_PUSH(0); 13418 CMDARG_PUSH(0); 13419 lex_state = EXPR_BEG; 13420 return c; 13421 13422 case '[': 13423 paren_nest++; 13424 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 13425 lex_state = EXPR_ARG; 13426 if ((c = nextc()) == ']') { 13427 if ((c = nextc()) == '=') { 13428 return tASET; 13429 } 13430 pushback(c); 13431 return tAREF; 13432 } 13433 pushback(c); 13434 return '['; 13435 } 13436 else if (IS_BEG()) { 13437 c = tLBRACK; 13438 } 13439 else if (IS_ARG() && space_seen) { 13440 c = tLBRACK; 13441 } 13442 lex_state = EXPR_BEG; 13443 COND_PUSH(0); 13444 CMDARG_PUSH(0); 13445 return c; 13446 13447 case '{': 13448 if (lpar_beg && lpar_beg == paren_nest) { 13449 lex_state = EXPR_BEG; 13450 lpar_beg = 0; 13451 --paren_nest; 13452 COND_PUSH(0); 13453 CMDARG_PUSH(0); 13454 return tLAMBEG; 13455 } 13456 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN) 13457 c = '{'; /* block (primary) */ 13458 else if (lex_state == EXPR_ENDARG) 13459 c = tLBRACE_ARG; /* block (expr) */ 13460 else 13461 c = tLBRACE; /* hash */ 13462 COND_PUSH(0); 13463 CMDARG_PUSH(0); 13464 lex_state = EXPR_BEG; 13465 if (c != tLBRACE) command_start = TRUE; 13466 return c; 13467 13468 case '\\': 13469 c = nextc(); 13470 if (c == '\n') { 13471 space_seen = 1; 13472 #ifdef RIPPER 13473 ripper_dispatch_scan_event(parser, tSP); 13474 #endif 13475 goto retry; /* skip \\n */ 13476 } 13477 pushback(c); 13478 return '\\'; 13479 13480 case '%': 13481 if (IS_BEG()) { 13482 int term; 13483 int paren; 13484 13485 c = nextc(); 13486 quotation: 13487 if (c == -1 || !ISALNUM(c)) { 13488 term = c; 13489 c = 'Q'; 13490 } 13491 else { 13492 term = nextc(); 13493 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) { 13494 yyerror("unknown type of %string"); 13495 return 0; 13496 } 13497 } 13498 if (c == -1 || term == -1) { 13499 compile_error(PARSER_ARG "unterminated quoted string meets end of file"); 13500 return 0; 13501 } 13502 paren = term; 13503 if (term == '(') term = ')'; 13504 else if (term == '[') term = ']'; 13505 else if (term == '{') term = '}'; 13506 else if (term == '<') term = '>'; 13507 else paren = 0; 13508 13509 switch (c) { 13510 case 'Q': 13511 lex_strterm = NEW_STRTERM(str_dquote, term, paren); 13512 return tSTRING_BEG; 13513 13514 case 'q': 13515 lex_strterm = NEW_STRTERM(str_squote, term, paren); 13516 return tSTRING_BEG; 13517 13518 case 'W': 13519 lex_strterm = NEW_STRTERM(str_dword, term, paren); 13520 do {c = nextc();} while (ISSPACE(c)); 13521 pushback(c); 13522 return tWORDS_BEG; 13523 13524 case 'w': 13525 lex_strterm = NEW_STRTERM(str_sword, term, paren); 13526 do {c = nextc();} while (ISSPACE(c)); 13527 pushback(c); 13528 return tQWORDS_BEG; 13529 13530 case 'x': 13531 lex_strterm = NEW_STRTERM(str_xquote, term, paren); 13532 return tXSTRING_BEG; 13533 13534 case 'r': 13535 lex_strterm = NEW_STRTERM(str_regexp, term, paren); 13536 return tREGEXP_BEG; 13537 13538 case 's': 13539 lex_strterm = NEW_STRTERM(str_ssym, term, paren); 13540 lex_state = EXPR_FNAME; 13541 return tSYMBEG; 13542 13543 default: 13544 yyerror("unknown type of %string"); 13545 return 0; 13546 } 13547 } 13548 if ((c = nextc()) == '=') { 13549 set_yylval_id('%'); 13550 lex_state = EXPR_BEG; 13551 return tOP_ASGN; 13552 } 13553 if (IS_SPCARG(c)) { 13554 goto quotation; 13555 } 13556 switch (lex_state) { 13557 case EXPR_FNAME: case EXPR_DOT: 13558 lex_state = EXPR_ARG; break; 13559 default: 13560 lex_state = EXPR_BEG; break; 13561 } 13562 pushback(c); 13563 warn_balanced("%%", "string literal"); 13564 return '%'; 13565 13566 case '$': 13567 lex_state = EXPR_END; 13568 newtok(); 13569 c = nextc(); 13570 switch (c) { 13571 case '_': /* $_: last read line string */ 13572 c = nextc(); 13573 if (parser_is_identchar()) { 13574 tokadd('$'); 13575 tokadd('_'); 13576 break; 13577 } 13578 pushback(c); 13579 c = '_'; 13580 /* fall through */ 13581 case '~': /* $~: match-data */ 13582 case '*': /* $*: argv */ 13583 case '$': /* $$: pid */ 13584 case '?': /* $?: last status */ 13585 case '!': /* $!: error string */ 13586 case '@': /* $@: error position */ 13587 case '/': /* $/: input record separator */ 13588 case '\\': /* $\: output record separator */ 13589 case ';': /* $;: field separator */ 13590 case ',': /* $,: output field separator */ 13591 case '.': /* $.: last read line number */ 13592 case '=': /* $=: ignorecase */ 13593 case ':': /* $:: load path */ 13594 case '<': /* $<: reading filename */ 13595 case '>': /* $>: default output handle */ 13596 case '\"': /* $": already loaded files */ 13597 tokadd('$'); 13598 tokadd(c); 13599 tokfix(); 13600 set_yylval_name(rb_intern(tok())); 13601 return tGVAR; 13602 13603 case '-': 13604 tokadd('$'); 13605 tokadd(c); 13606 c = nextc(); 13607 if (parser_is_identchar()) { 13608 if (tokadd_mbchar(c) == -1) return 0; 13609 } 13610 else { 13611 pushback(c); 13612 } 13613 gvar: 13614 tokfix(); 13615 set_yylval_name(rb_intern(tok())); 13616 return tGVAR; 13617 13618 case '&': /* $&: last match */ 13619 case '`': /* $`: string before last match */ 13620 case '\'': /* $': string after last match */ 13621 case '+': /* $+: string matches last paren. */ 13622 if (last_state == EXPR_FNAME) { 13623 tokadd('$'); 13624 tokadd(c); 13625 goto gvar; 13626 } 13627 set_yylval_node(NEW_BACK_REF(c)); 13628 return tBACK_REF; 13629 13630 case '1': case '2': case '3': 13631 case '4': case '5': case '6': 13632 case '7': case '8': case '9': 13633 tokadd('$'); 13634 do { 13635 tokadd(c); 13636 c = nextc(); 13637 } while (c != -1 && ISDIGIT(c)); 13638 pushback(c); 13639 if (last_state == EXPR_FNAME) goto gvar; 13640 tokfix(); 13641 set_yylval_node(NEW_NTH_REF(atoi(tok()+1))); 13642 return tNTH_REF; 13643 13644 default: 13645 if (!parser_is_identchar()) { 13646 pushback(c); 13647 compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c); 13648 return 0; 13649 } 13650 case '0': 13651 tokadd('$'); 13652 } 13653 break; 13654 13655 case '@': 13656 c = nextc(); 13657 newtok(); 13658 tokadd('@'); 13659 if (c == '@') { 13660 tokadd('@'); 13661 c = nextc(); 13662 } 13663 if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) { 13664 pushback(c); 13665 if (tokidx == 1) { 13666 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c); 13667 } 13668 else { 13669 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c); 13670 } 13671 return 0; 13672 } 13673 break; 13674 13675 case '_': 13676 if (was_bol() && whole_match_p("__END__", 7, 0)) { 13677 ruby__end__seen = 1; 13678 parser->eofp = Qtrue; 13679 #ifndef RIPPER 13680 return -1; 13681 #else 13682 lex_goto_eol(parser); 13683 ripper_dispatch_scan_event(parser, k__END__); 13684 return 0; 13685 #endif 13686 } 13687 newtok(); 13688 break; 13689 13690 default: 13691 if (!parser_is_identchar()) { 13692 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c); 13693 goto retry; 13694 } 13695 13696 newtok(); 13697 break; 13698 } 13699 13700 mb = ENC_CODERANGE_7BIT; 13701 do { 13702 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN; 13703 if (tokadd_mbchar(c) == -1) return 0; 13704 c = nextc(); 13705 } while (parser_is_identchar()); 13706 switch (tok()[0]) { 13707 case '@': case '$': 13708 pushback(c); 13709 break; 13710 default: 13711 if ((c == '!' || c == '?') && !peek('=')) { 13712 tokadd(c); 13713 } 13714 else { 13715 pushback(c); 13716 } 13717 } 13718 tokfix(); 13719 13720 { 13721 int result = 0; 13722 13723 last_state = lex_state; 13724 switch (tok()[0]) { 13725 case '$': 13726 lex_state = EXPR_END; 13727 result = tGVAR; 13728 break; 13729 case '@': 13730 lex_state = EXPR_END; 13731 if (tok()[1] == '@') 13732 result = tCVAR; 13733 else 13734 result = tIVAR; 13735 break; 13736 13737 default: 13738 if (toklast() == '!' || toklast() == '?') { 13739 result = tFID; 13740 } 13741 else { 13742 if (lex_state == EXPR_FNAME) { 13743 if ((c = nextc()) == '=' && !peek('~') && !peek('>') && 13744 (!peek('=') || (peek_n('>', 1)))) { 13745 result = tIDENTIFIER; 13746 tokadd(c); 13747 tokfix(); 13748 } 13749 else { 13750 pushback(c); 13751 } 13752 } 13753 if (result == 0 && ISUPPER(tok()[0])) { 13754 result = tCONSTANT; 13755 } 13756 else { 13757 result = tIDENTIFIER; 13758 } 13759 } 13760 13761 if (IS_LABEL_POSSIBLE()) { 13762 if (IS_LABEL_SUFFIX(0)) { 13763 lex_state = EXPR_BEG; 13764 nextc(); 13765 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb))); 13766 return tLABEL; 13767 } 13768 } 13769 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) { 13770 const struct kwtable *kw; 13771 13772 /* See if it is a reserved word. */ 13773 kw = rb_reserved_word(tok(), toklen()); 13774 if (kw) { 13775 enum lex_state_e state = lex_state; 13776 lex_state = kw->state; 13777 if (state == EXPR_FNAME) { 13778 set_yylval_name(rb_intern(kw->name)); 13779 return kw->id[0]; 13780 } 13781 if (kw->id[0] == keyword_do) { 13782 command_start = TRUE; 13783 if (lpar_beg && lpar_beg == paren_nest) { 13784 lpar_beg = 0; 13785 --paren_nest; 13786 return keyword_do_LAMBDA; 13787 } 13788 if (COND_P()) return keyword_do_cond; 13789 if (CMDARG_P() && state != EXPR_CMDARG) 13790 return keyword_do_block; 13791 if (state == EXPR_ENDARG || state == EXPR_BEG) 13792 return keyword_do_block; 13793 return keyword_do; 13794 } 13795 if (state == EXPR_BEG || state == EXPR_VALUE) 13796 return kw->id[0]; 13797 else { 13798 if (kw->id[0] != kw->id[1]) 13799 lex_state = EXPR_BEG; 13800 return kw->id[1]; 13801 } 13802 } 13803 } 13804 13805 if (IS_BEG() || 13806 lex_state == EXPR_DOT || 13807 IS_ARG()) { 13808 if (cmd_state) { 13809 lex_state = EXPR_CMDARG; 13810 } 13811 else { 13812 lex_state = EXPR_ARG; 13813 } 13814 } 13815 else if (lex_state == EXPR_FNAME) { 13816 lex_state = EXPR_ENDFN; 13817 } 13818 else { 13819 lex_state = EXPR_END; 13820 } 13821 } 13822 { 13823 ID ident = TOK_INTERN(!ENC_SINGLE(mb)); 13824 13825 set_yylval_name(ident); 13826 if (last_state != EXPR_DOT && last_state != EXPR_FNAME && 13827 is_local_id(ident) && lvar_defined(ident)) { 13828 lex_state = EXPR_END; 13829 } 13830 } 13831 return result; 13832 } 13833 } 13834 13835 #if YYPURE 13836 static int 13837 yylex(void *lval, void *p) 13838 #else 13839 yylex(void *p) 13840 #endif 13841 { 13842 struct parser_params *parser = (struct parser_params*)p; 13843 int t; 13844 13845 #if YYPURE 13846 parser->parser_yylval = lval; 13847 parser->parser_yylval->val = Qundef; 13848 #endif 13849 t = parser_yylex(parser); 13850 #ifdef RIPPER 13851 if (!NIL_P(parser->delayed)) { 13852 ripper_dispatch_delayed_token(parser, t); 13853 return t; 13854 } 13855 if (t != 0) 13856 ripper_dispatch_scan_event(parser, t); 13857 #endif 13858 13859 return t; 13860 } 13861 13862 #ifndef RIPPER 13863 static NODE* 13864 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2) 13865 { 13866 NODE *n = (rb_node_newnode)(type, a0, a1, a2); 13867 nd_set_line(n, ruby_sourceline); 13868 return n; 13869 } 13870 13871 enum node_type 13872 nodetype(NODE *node) /* for debug */ 13873 { 13874 return (enum node_type)nd_type(node); 13875 } 13876 13877 int 13878 nodeline(NODE *node) 13879 { 13880 return nd_line(node); 13881 } 13882 13883 static NODE* 13884 newline_node(NODE *node) 13885 { 13886 if (node) { 13887 node = remove_begin(node); 13888 node->flags |= NODE_FL_NEWLINE; 13889 } 13890 return node; 13891 } 13892 13893 static void 13894 fixpos(NODE *node, NODE *orig) 13895 { 13896 if (!node) return; 13897 if (!orig) return; 13898 if (orig == (NODE*)1) return; 13899 nd_set_line(node, nd_line(orig)); 13900 } 13901 13902 static void 13903 parser_warning(struct parser_params *parser, NODE *node, const char *mesg) 13904 { 13905 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg); 13906 } 13907 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg)) 13908 13909 static void 13910 parser_warn(struct parser_params *parser, NODE *node, const char *mesg) 13911 { 13912 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg); 13913 } 13914 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg)) 13915 13916 static NODE* 13917 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail) 13918 { 13919 NODE *end, *h = head, *nd; 13920 13921 if (tail == 0) return head; 13922 13923 if (h == 0) return tail; 13924 switch (nd_type(h)) { 13925 case NODE_LIT: 13926 case NODE_STR: 13927 case NODE_SELF: 13928 case NODE_TRUE: 13929 case NODE_FALSE: 13930 case NODE_NIL: 13931 parser_warning(h, "unused literal ignored"); 13932 return tail; 13933 default: 13934 h = end = NEW_BLOCK(head); 13935 end->nd_end = end; 13936 fixpos(end, head); 13937 head = end; 13938 break; 13939 case NODE_BLOCK: 13940 end = h->nd_end; 13941 break; 13942 } 13943 13944 nd = end->nd_head; 13945 switch (nd_type(nd)) { 13946 case NODE_RETURN: 13947 case NODE_BREAK: 13948 case NODE_NEXT: 13949 case NODE_REDO: 13950 case NODE_RETRY: 13951 if (RTEST(ruby_verbose)) { 13952 parser_warning(nd, "statement not reached"); 13953 } 13954 break; 13955 13956 default: 13957 break; 13958 } 13959 13960 if (nd_type(tail) != NODE_BLOCK) { 13961 tail = NEW_BLOCK(tail); 13962 tail->nd_end = tail; 13963 } 13964 end->nd_next = tail; 13965 h->nd_end = tail->nd_end; 13966 return head; 13967 } 13968 13969 /* append item to the list */ 13970 static NODE* 13971 list_append_gen(struct parser_params *parser, NODE *list, NODE *item) 13972 { 13973 NODE *last; 13974 13975 if (list == 0) return NEW_LIST(item); 13976 if (list->nd_next) { 13977 last = list->nd_next->nd_end; 13978 } 13979 else { 13980 last = list; 13981 } 13982 13983 list->nd_alen += 1; 13984 last->nd_next = NEW_LIST(item); 13985 list->nd_next->nd_end = last->nd_next; 13986 return list; 13987 } 13988 13989 /* concat two lists */ 13990 static NODE* 13991 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 13992 { 13993 NODE *last; 13994 13995 if (head->nd_next) { 13996 last = head->nd_next->nd_end; 13997 } 13998 else { 13999 last = head; 14000 } 14001 14002 head->nd_alen += tail->nd_alen; 14003 last->nd_next = tail; 14004 if (tail->nd_next) { 14005 head->nd_next->nd_end = tail->nd_next->nd_end; 14006 } 14007 else { 14008 head->nd_next->nd_end = tail; 14009 } 14010 14011 return head; 14012 } 14013 14014 static int 14015 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail) 14016 { 14017 if (NIL_P(tail)) return 1; 14018 if (!rb_enc_compatible(head, tail)) { 14019 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)", 14020 rb_enc_name(rb_enc_get(head)), 14021 rb_enc_name(rb_enc_get(tail))); 14022 rb_str_resize(head, 0); 14023 rb_str_resize(tail, 0); 14024 return 0; 14025 } 14026 rb_str_buf_append(head, tail); 14027 return 1; 14028 } 14029 14030 /* concat two string literals */ 14031 static NODE * 14032 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 14033 { 14034 enum node_type htype; 14035 14036 if (!head) return tail; 14037 if (!tail) return head; 14038 14039 htype = nd_type(head); 14040 if (htype == NODE_EVSTR) { 14041 NODE *node = NEW_DSTR(Qnil); 14042 head = list_append(node, head); 14043 } 14044 switch (nd_type(tail)) { 14045 case NODE_STR: 14046 if (htype == NODE_STR) { 14047 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) { 14048 error: 14049 rb_gc_force_recycle((VALUE)head); 14050 rb_gc_force_recycle((VALUE)tail); 14051 return 0; 14052 } 14053 rb_gc_force_recycle((VALUE)tail); 14054 } 14055 else { 14056 list_append(head, tail); 14057 } 14058 break; 14059 14060 case NODE_DSTR: 14061 if (htype == NODE_STR) { 14062 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) 14063 goto error; 14064 tail->nd_lit = head->nd_lit; 14065 rb_gc_force_recycle((VALUE)head); 14066 head = tail; 14067 } 14068 else if (NIL_P(tail->nd_lit)) { 14069 head->nd_alen += tail->nd_alen - 1; 14070 head->nd_next->nd_end->nd_next = tail->nd_next; 14071 head->nd_next->nd_end = tail->nd_next->nd_end; 14072 rb_gc_force_recycle((VALUE)tail); 14073 } 14074 else { 14075 nd_set_type(tail, NODE_ARRAY); 14076 tail->nd_head = NEW_STR(tail->nd_lit); 14077 list_concat(head, tail); 14078 } 14079 break; 14080 14081 case NODE_EVSTR: 14082 if (htype == NODE_STR) { 14083 nd_set_type(head, NODE_DSTR); 14084 head->nd_alen = 1; 14085 } 14086 list_append(head, tail); 14087 break; 14088 } 14089 return head; 14090 } 14091 14092 static NODE * 14093 evstr2dstr_gen(struct parser_params *parser, NODE *node) 14094 { 14095 if (nd_type(node) == NODE_EVSTR) { 14096 node = list_append(NEW_DSTR(Qnil), node); 14097 } 14098 return node; 14099 } 14100 14101 static NODE * 14102 new_evstr_gen(struct parser_params *parser, NODE *node) 14103 { 14104 NODE *head = node; 14105 14106 if (node) { 14107 switch (nd_type(node)) { 14108 case NODE_STR: case NODE_DSTR: case NODE_EVSTR: 14109 return node; 14110 } 14111 } 14112 return NEW_EVSTR(head); 14113 } 14114 14115 static NODE * 14116 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1) 14117 { 14118 value_expr(recv); 14119 value_expr(arg1); 14120 return NEW_CALL(recv, id, NEW_LIST(arg1)); 14121 } 14122 14123 static NODE * 14124 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id) 14125 { 14126 value_expr(recv); 14127 return NEW_CALL(recv, id, 0); 14128 } 14129 14130 static NODE* 14131 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14132 { 14133 value_expr(node1); 14134 value_expr(node2); 14135 if (node1) { 14136 switch (nd_type(node1)) { 14137 case NODE_DREGX: 14138 case NODE_DREGX_ONCE: 14139 return NEW_MATCH2(node1, node2); 14140 14141 case NODE_LIT: 14142 if (TYPE(node1->nd_lit) == T_REGEXP) { 14143 return NEW_MATCH2(node1, node2); 14144 } 14145 } 14146 } 14147 14148 if (node2) { 14149 switch (nd_type(node2)) { 14150 case NODE_DREGX: 14151 case NODE_DREGX_ONCE: 14152 return NEW_MATCH3(node2, node1); 14153 14154 case NODE_LIT: 14155 if (TYPE(node2->nd_lit) == T_REGEXP) { 14156 return NEW_MATCH3(node2, node1); 14157 } 14158 } 14159 } 14160 14161 return NEW_CALL(node1, tMATCH, NEW_LIST(node2)); 14162 } 14163 14164 static NODE* 14165 gettable_gen(struct parser_params *parser, ID id) 14166 { 14167 if (id == keyword_self) { 14168 return NEW_SELF(); 14169 } 14170 else if (id == keyword_nil) { 14171 return NEW_NIL(); 14172 } 14173 else if (id == keyword_true) { 14174 return NEW_TRUE(); 14175 } 14176 else if (id == keyword_false) { 14177 return NEW_FALSE(); 14178 } 14179 else if (id == keyword__FILE__) { 14180 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile), 14181 rb_filesystem_encoding())); 14182 } 14183 else if (id == keyword__LINE__) { 14184 return NEW_LIT(INT2FIX(ruby_sourceline)); 14185 } 14186 else if (id == keyword__ENCODING__) { 14187 return NEW_LIT(rb_enc_from_encoding(parser->enc)); 14188 } 14189 else if (is_local_id(id)) { 14190 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id); 14191 if (local_id(id)) return NEW_LVAR(id); 14192 /* method call without arguments */ 14193 return NEW_VCALL(id); 14194 } 14195 else if (is_global_id(id)) { 14196 return NEW_GVAR(id); 14197 } 14198 else if (is_instance_id(id)) { 14199 return NEW_IVAR(id); 14200 } 14201 else if (is_const_id(id)) { 14202 return NEW_CONST(id); 14203 } 14204 else if (is_class_id(id)) { 14205 return NEW_CVAR(id); 14206 } 14207 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); 14208 return 0; 14209 } 14210 #else /* !RIPPER */ 14211 static int 14212 id_is_var_gen(struct parser_params *parser, ID id) 14213 { 14214 if (is_notop_id(id)) { 14215 switch (id & ID_SCOPE_MASK) { 14216 case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS: 14217 return 1; 14218 case ID_LOCAL: 14219 if (dyna_in_block() && dvar_defined(id)) return 1; 14220 if (local_id(id)) return 1; 14221 /* method call without arguments */ 14222 return 0; 14223 } 14224 } 14225 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); 14226 return 0; 14227 } 14228 #endif /* !RIPPER */ 14229 14230 #ifdef RIPPER 14231 static VALUE 14232 assignable_gen(struct parser_params *parser, VALUE lhs) 14233 #else 14234 static NODE* 14235 assignable_gen(struct parser_params *parser, ID id, NODE *val) 14236 #endif 14237 { 14238 #ifdef RIPPER 14239 ID id = get_id(lhs); 14240 # define assignable_result(x) get_value(lhs) 14241 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs) 14242 #else 14243 # define assignable_result(x) (x) 14244 #endif 14245 if (!id) return assignable_result(0); 14246 if (id == keyword_self) { 14247 yyerror("Can't change the value of self"); 14248 } 14249 else if (id == keyword_nil) { 14250 yyerror("Can't assign to nil"); 14251 } 14252 else if (id == keyword_true) { 14253 yyerror("Can't assign to true"); 14254 } 14255 else if (id == keyword_false) { 14256 yyerror("Can't assign to false"); 14257 } 14258 else if (id == keyword__FILE__) { 14259 yyerror("Can't assign to __FILE__"); 14260 } 14261 else if (id == keyword__LINE__) { 14262 yyerror("Can't assign to __LINE__"); 14263 } 14264 else if (id == keyword__ENCODING__) { 14265 yyerror("Can't assign to __ENCODING__"); 14266 } 14267 else if (is_local_id(id)) { 14268 if (dyna_in_block()) { 14269 if (dvar_curr(id)) { 14270 return assignable_result(NEW_DASGN_CURR(id, val)); 14271 } 14272 else if (dvar_defined(id)) { 14273 return assignable_result(NEW_DASGN(id, val)); 14274 } 14275 else if (local_id(id)) { 14276 return assignable_result(NEW_LASGN(id, val)); 14277 } 14278 else { 14279 dyna_var(id); 14280 return assignable_result(NEW_DASGN_CURR(id, val)); 14281 } 14282 } 14283 else { 14284 if (!local_id(id)) { 14285 local_var(id); 14286 } 14287 return assignable_result(NEW_LASGN(id, val)); 14288 } 14289 } 14290 else if (is_global_id(id)) { 14291 return assignable_result(NEW_GASGN(id, val)); 14292 } 14293 else if (is_instance_id(id)) { 14294 return assignable_result(NEW_IASGN(id, val)); 14295 } 14296 else if (is_const_id(id)) { 14297 if (!in_def && !in_single) 14298 return assignable_result(NEW_CDECL(id, val, 0)); 14299 yyerror("dynamic constant assignment"); 14300 } 14301 else if (is_class_id(id)) { 14302 return assignable_result(NEW_CVASGN(id, val)); 14303 } 14304 else { 14305 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id)); 14306 } 14307 return assignable_result(0); 14308 #undef assignable_result 14309 #undef parser_yyerror 14310 } 14311 14312 #define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1)) 14313 14314 static ID 14315 shadowing_lvar_gen(struct parser_params *parser, ID name) 14316 { 14317 if (idUScore == name) return name; 14318 if (dyna_in_block()) { 14319 if (dvar_curr(name)) { 14320 yyerror("duplicated argument name"); 14321 } 14322 else if (dvar_defined_get(name) || local_id(name)) { 14323 rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); 14324 vtable_add(lvtbl->vars, name); 14325 if (lvtbl->used) { 14326 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED); 14327 } 14328 } 14329 } 14330 else { 14331 if (local_id(name)) { 14332 yyerror("duplicated argument name"); 14333 } 14334 } 14335 return name; 14336 } 14337 14338 static void 14339 new_bv_gen(struct parser_params *parser, ID name) 14340 { 14341 if (!name) return; 14342 if (!is_local_id(name)) { 14343 compile_error(PARSER_ARG "invalid local variable - %s", 14344 rb_id2name(name)); 14345 return; 14346 } 14347 shadowing_lvar(name); 14348 dyna_var(name); 14349 } 14350 14351 #ifndef RIPPER 14352 static NODE * 14353 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx) 14354 { 14355 if (recv && nd_type(recv) == NODE_SELF) 14356 recv = (NODE *)1; 14357 return NEW_ATTRASGN(recv, tASET, idx); 14358 } 14359 14360 static void 14361 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14362 { 14363 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) { 14364 compile_error(PARSER_ARG "both block arg and actual block given"); 14365 } 14366 } 14367 14368 ID 14369 rb_id_attrset(ID id) 14370 { 14371 id &= ~ID_SCOPE_MASK; 14372 id |= ID_ATTRSET; 14373 return id; 14374 } 14375 14376 static NODE * 14377 attrset_gen(struct parser_params *parser, NODE *recv, ID id) 14378 { 14379 if (recv && nd_type(recv) == NODE_SELF) 14380 recv = (NODE *)1; 14381 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0); 14382 } 14383 14384 static void 14385 rb_backref_error_gen(struct parser_params *parser, NODE *node) 14386 { 14387 switch (nd_type(node)) { 14388 case NODE_NTH_REF: 14389 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth); 14390 break; 14391 case NODE_BACK_REF: 14392 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth); 14393 break; 14394 } 14395 } 14396 14397 static NODE * 14398 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14399 { 14400 if (!node2) return node1; 14401 switch (nd_type(node1)) { 14402 case NODE_BLOCK_PASS: 14403 if (node1->nd_head) 14404 node1->nd_head = arg_concat(node1->nd_head, node2); 14405 else 14406 node1->nd_head = NEW_LIST(node2); 14407 return node1; 14408 case NODE_ARGSPUSH: 14409 if (nd_type(node2) != NODE_ARRAY) break; 14410 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2); 14411 nd_set_type(node1, NODE_ARGSCAT); 14412 return node1; 14413 case NODE_ARGSCAT: 14414 if (nd_type(node2) != NODE_ARRAY || 14415 nd_type(node1->nd_body) != NODE_ARRAY) break; 14416 node1->nd_body = list_concat(node1->nd_body, node2); 14417 return node1; 14418 } 14419 return NEW_ARGSCAT(node1, node2); 14420 } 14421 14422 static NODE * 14423 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14424 { 14425 if (!node1) return NEW_LIST(node2); 14426 switch (nd_type(node1)) { 14427 case NODE_ARRAY: 14428 return list_append(node1, node2); 14429 case NODE_BLOCK_PASS: 14430 node1->nd_head = arg_append(node1->nd_head, node2); 14431 return node1; 14432 case NODE_ARGSPUSH: 14433 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2); 14434 nd_set_type(node1, NODE_ARGSCAT); 14435 return node1; 14436 } 14437 return NEW_ARGSPUSH(node1, node2); 14438 } 14439 14440 static NODE * 14441 splat_array(NODE* node) 14442 { 14443 if (nd_type(node) == NODE_SPLAT) node = node->nd_head; 14444 if (nd_type(node) == NODE_ARRAY) return node; 14445 return 0; 14446 } 14447 14448 static NODE * 14449 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs) 14450 { 14451 if (!lhs) return 0; 14452 14453 switch (nd_type(lhs)) { 14454 case NODE_GASGN: 14455 case NODE_IASGN: 14456 case NODE_IASGN2: 14457 case NODE_LASGN: 14458 case NODE_DASGN: 14459 case NODE_DASGN_CURR: 14460 case NODE_MASGN: 14461 case NODE_CDECL: 14462 case NODE_CVASGN: 14463 lhs->nd_value = rhs; 14464 break; 14465 14466 case NODE_ATTRASGN: 14467 case NODE_CALL: 14468 lhs->nd_args = arg_append(lhs->nd_args, rhs); 14469 break; 14470 14471 default: 14472 /* should not happen */ 14473 break; 14474 } 14475 14476 return lhs; 14477 } 14478 14479 static int 14480 value_expr_gen(struct parser_params *parser, NODE *node) 14481 { 14482 int cond = 0; 14483 14484 if (!node) { 14485 rb_warning0("empty expression"); 14486 } 14487 while (node) { 14488 switch (nd_type(node)) { 14489 case NODE_DEFN: 14490 case NODE_DEFS: 14491 parser_warning(node, "void value expression"); 14492 return FALSE; 14493 14494 case NODE_RETURN: 14495 case NODE_BREAK: 14496 case NODE_NEXT: 14497 case NODE_REDO: 14498 case NODE_RETRY: 14499 if (!cond) yyerror("void value expression"); 14500 /* or "control never reach"? */ 14501 return FALSE; 14502 14503 case NODE_BLOCK: 14504 while (node->nd_next) { 14505 node = node->nd_next; 14506 } 14507 node = node->nd_head; 14508 break; 14509 14510 case NODE_BEGIN: 14511 node = node->nd_body; 14512 break; 14513 14514 case NODE_IF: 14515 if (!node->nd_body) { 14516 node = node->nd_else; 14517 break; 14518 } 14519 else if (!node->nd_else) { 14520 node = node->nd_body; 14521 break; 14522 } 14523 if (!value_expr(node->nd_body)) return FALSE; 14524 node = node->nd_else; 14525 break; 14526 14527 case NODE_AND: 14528 case NODE_OR: 14529 cond = 1; 14530 node = node->nd_2nd; 14531 break; 14532 14533 default: 14534 return TRUE; 14535 } 14536 } 14537 14538 return TRUE; 14539 } 14540 14541 static void 14542 void_expr_gen(struct parser_params *parser, NODE *node) 14543 { 14544 const char *useless = 0; 14545 14546 if (!RTEST(ruby_verbose)) return; 14547 14548 if (!node) return; 14549 switch (nd_type(node)) { 14550 case NODE_CALL: 14551 switch (node->nd_mid) { 14552 case '+': 14553 case '-': 14554 case '*': 14555 case '/': 14556 case '%': 14557 case tPOW: 14558 case tUPLUS: 14559 case tUMINUS: 14560 case '|': 14561 case '^': 14562 case '&': 14563 case tCMP: 14564 case '>': 14565 case tGEQ: 14566 case '<': 14567 case tLEQ: 14568 case tEQ: 14569 case tNEQ: 14570 useless = rb_id2name(node->nd_mid); 14571 break; 14572 } 14573 break; 14574 14575 case NODE_LVAR: 14576 case NODE_DVAR: 14577 case NODE_GVAR: 14578 case NODE_IVAR: 14579 case NODE_CVAR: 14580 case NODE_NTH_REF: 14581 case NODE_BACK_REF: 14582 useless = "a variable"; 14583 break; 14584 case NODE_CONST: 14585 useless = "a constant"; 14586 break; 14587 case NODE_LIT: 14588 case NODE_STR: 14589 case NODE_DSTR: 14590 case NODE_DREGX: 14591 case NODE_DREGX_ONCE: 14592 useless = "a literal"; 14593 break; 14594 case NODE_COLON2: 14595 case NODE_COLON3: 14596 useless = "::"; 14597 break; 14598 case NODE_DOT2: 14599 useless = ".."; 14600 break; 14601 case NODE_DOT3: 14602 useless = "..."; 14603 break; 14604 case NODE_SELF: 14605 useless = "self"; 14606 break; 14607 case NODE_NIL: 14608 useless = "nil"; 14609 break; 14610 case NODE_TRUE: 14611 useless = "true"; 14612 break; 14613 case NODE_FALSE: 14614 useless = "false"; 14615 break; 14616 case NODE_DEFINED: 14617 useless = "defined?"; 14618 break; 14619 } 14620 14621 if (useless) { 14622 int line = ruby_sourceline; 14623 14624 ruby_sourceline = nd_line(node); 14625 rb_warnS("possibly useless use of %s in void context", useless); 14626 ruby_sourceline = line; 14627 } 14628 } 14629 14630 static void 14631 void_stmts_gen(struct parser_params *parser, NODE *node) 14632 { 14633 if (!RTEST(ruby_verbose)) return; 14634 if (!node) return; 14635 if (nd_type(node) != NODE_BLOCK) return; 14636 14637 for (;;) { 14638 if (!node->nd_next) return; 14639 void_expr0(node->nd_head); 14640 node = node->nd_next; 14641 } 14642 } 14643 14644 static NODE * 14645 remove_begin(NODE *node) 14646 { 14647 NODE **n = &node, *n1 = node; 14648 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) { 14649 *n = n1 = n1->nd_body; 14650 } 14651 return node; 14652 } 14653 14654 static void 14655 reduce_nodes_gen(struct parser_params *parser, NODE **body) 14656 { 14657 NODE *node = *body; 14658 14659 if (!node) { 14660 *body = NEW_NIL(); 14661 return; 14662 } 14663 #define subnodes(n1, n2) \ 14664 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \ 14665 (!node->n2) ? (body = &node->n1, 1) : \ 14666 (reduce_nodes(&node->n1), body = &node->n2, 1)) 14667 14668 while (node) { 14669 int newline = (int)(node->flags & NODE_FL_NEWLINE); 14670 switch (nd_type(node)) { 14671 end: 14672 case NODE_NIL: 14673 *body = 0; 14674 return; 14675 case NODE_RETURN: 14676 *body = node = node->nd_stts; 14677 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14678 continue; 14679 case NODE_BEGIN: 14680 *body = node = node->nd_body; 14681 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14682 continue; 14683 case NODE_BLOCK: 14684 body = &node->nd_end->nd_head; 14685 break; 14686 case NODE_IF: 14687 if (subnodes(nd_body, nd_else)) break; 14688 return; 14689 case NODE_CASE: 14690 body = &node->nd_body; 14691 break; 14692 case NODE_WHEN: 14693 if (!subnodes(nd_body, nd_next)) goto end; 14694 break; 14695 case NODE_ENSURE: 14696 if (!subnodes(nd_head, nd_resq)) goto end; 14697 break; 14698 case NODE_RESCUE: 14699 if (node->nd_else) { 14700 body = &node->nd_resq; 14701 break; 14702 } 14703 if (!subnodes(nd_head, nd_resq)) goto end; 14704 break; 14705 default: 14706 return; 14707 } 14708 node = *body; 14709 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14710 } 14711 14712 #undef subnodes 14713 } 14714 14715 static int 14716 assign_in_cond(struct parser_params *parser, NODE *node) 14717 { 14718 switch (nd_type(node)) { 14719 case NODE_MASGN: 14720 yyerror("multiple assignment in conditional"); 14721 return 1; 14722 14723 case NODE_LASGN: 14724 case NODE_DASGN: 14725 case NODE_DASGN_CURR: 14726 case NODE_GASGN: 14727 case NODE_IASGN: 14728 break; 14729 14730 default: 14731 return 0; 14732 } 14733 14734 if (!node->nd_value) return 1; 14735 switch (nd_type(node->nd_value)) { 14736 case NODE_LIT: 14737 case NODE_STR: 14738 case NODE_NIL: 14739 case NODE_TRUE: 14740 case NODE_FALSE: 14741 /* reports always */ 14742 parser_warn(node->nd_value, "found = in conditional, should be =="); 14743 return 1; 14744 14745 case NODE_DSTR: 14746 case NODE_XSTR: 14747 case NODE_DXSTR: 14748 case NODE_EVSTR: 14749 case NODE_DREGX: 14750 default: 14751 break; 14752 } 14753 return 1; 14754 } 14755 14756 static void 14757 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 14758 { 14759 if (!e_option_supplied(parser)) parser_warn(node, str); 14760 } 14761 14762 static void 14763 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 14764 { 14765 if (!e_option_supplied(parser)) parser_warning(node, str); 14766 } 14767 14768 static void 14769 fixup_nodes(NODE **rootnode) 14770 { 14771 NODE *node, *next, *head; 14772 14773 for (node = *rootnode; node; node = next) { 14774 enum node_type type; 14775 VALUE val; 14776 14777 next = node->nd_next; 14778 head = node->nd_head; 14779 rb_gc_force_recycle((VALUE)node); 14780 *rootnode = next; 14781 switch (type = nd_type(head)) { 14782 case NODE_DOT2: 14783 case NODE_DOT3: 14784 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit, 14785 type == NODE_DOT3); 14786 rb_gc_force_recycle((VALUE)head->nd_beg); 14787 rb_gc_force_recycle((VALUE)head->nd_end); 14788 nd_set_type(head, NODE_LIT); 14789 head->nd_lit = val; 14790 break; 14791 default: 14792 break; 14793 } 14794 } 14795 } 14796 14797 static NODE *cond0(struct parser_params*,NODE*); 14798 14799 static NODE* 14800 range_op(struct parser_params *parser, NODE *node) 14801 { 14802 enum node_type type; 14803 14804 if (node == 0) return 0; 14805 14806 type = nd_type(node); 14807 value_expr(node); 14808 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) { 14809 warn_unless_e_option(parser, node, "integer literal in conditional range"); 14810 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$.")))); 14811 } 14812 return cond0(parser, node); 14813 } 14814 14815 static int 14816 literal_node(NODE *node) 14817 { 14818 if (!node) return 1; /* same as NODE_NIL */ 14819 switch (nd_type(node)) { 14820 case NODE_LIT: 14821 case NODE_STR: 14822 case NODE_DSTR: 14823 case NODE_EVSTR: 14824 case NODE_DREGX: 14825 case NODE_DREGX_ONCE: 14826 case NODE_DSYM: 14827 return 2; 14828 case NODE_TRUE: 14829 case NODE_FALSE: 14830 case NODE_NIL: 14831 return 1; 14832 } 14833 return 0; 14834 } 14835 14836 static NODE* 14837 cond0(struct parser_params *parser, NODE *node) 14838 { 14839 if (node == 0) return 0; 14840 assign_in_cond(parser, node); 14841 14842 switch (nd_type(node)) { 14843 case NODE_DSTR: 14844 case NODE_EVSTR: 14845 case NODE_STR: 14846 rb_warn0("string literal in condition"); 14847 break; 14848 14849 case NODE_DREGX: 14850 case NODE_DREGX_ONCE: 14851 warning_unless_e_option(parser, node, "regex literal in condition"); 14852 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_"))); 14853 14854 case NODE_AND: 14855 case NODE_OR: 14856 node->nd_1st = cond0(parser, node->nd_1st); 14857 node->nd_2nd = cond0(parser, node->nd_2nd); 14858 break; 14859 14860 case NODE_DOT2: 14861 case NODE_DOT3: 14862 node->nd_beg = range_op(parser, node->nd_beg); 14863 node->nd_end = range_op(parser, node->nd_end); 14864 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2); 14865 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3); 14866 if (!e_option_supplied(parser)) { 14867 int b = literal_node(node->nd_beg); 14868 int e = literal_node(node->nd_end); 14869 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) { 14870 parser_warn(node, "range literal in condition"); 14871 } 14872 } 14873 break; 14874 14875 case NODE_DSYM: 14876 parser_warning(node, "literal in condition"); 14877 break; 14878 14879 case NODE_LIT: 14880 if (TYPE(node->nd_lit) == T_REGEXP) { 14881 warn_unless_e_option(parser, node, "regex literal in condition"); 14882 nd_set_type(node, NODE_MATCH); 14883 } 14884 else { 14885 parser_warning(node, "literal in condition"); 14886 } 14887 default: 14888 break; 14889 } 14890 return node; 14891 } 14892 14893 static NODE* 14894 cond_gen(struct parser_params *parser, NODE *node) 14895 { 14896 if (node == 0) return 0; 14897 return cond0(parser, node); 14898 } 14899 14900 static NODE* 14901 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right) 14902 { 14903 value_expr(left); 14904 if (left && (enum node_type)nd_type(left) == type) { 14905 NODE *node = left, *second; 14906 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) { 14907 node = second; 14908 } 14909 node->nd_2nd = NEW_NODE(type, second, right, 0); 14910 return left; 14911 } 14912 return NEW_NODE(type, left, right, 0); 14913 } 14914 14915 static void 14916 no_blockarg(struct parser_params *parser, NODE *node) 14917 { 14918 if (node && nd_type(node) == NODE_BLOCK_PASS) { 14919 compile_error(PARSER_ARG "block argument should not be given"); 14920 } 14921 } 14922 14923 static NODE * 14924 ret_args_gen(struct parser_params *parser, NODE *node) 14925 { 14926 if (node) { 14927 no_blockarg(parser, node); 14928 if (nd_type(node) == NODE_ARRAY) { 14929 if (node->nd_next == 0) { 14930 node = node->nd_head; 14931 } 14932 else { 14933 nd_set_type(node, NODE_VALUES); 14934 } 14935 } 14936 } 14937 return node; 14938 } 14939 14940 static NODE * 14941 new_yield_gen(struct parser_params *parser, NODE *node) 14942 { 14943 long state = Qtrue; 14944 14945 if (node) { 14946 no_blockarg(parser, node); 14947 if (node && nd_type(node) == NODE_SPLAT) { 14948 state = Qtrue; 14949 } 14950 } 14951 else { 14952 state = Qfalse; 14953 } 14954 return NEW_YIELD(node, state); 14955 } 14956 14957 static NODE* 14958 negate_lit(NODE *node) 14959 { 14960 switch (TYPE(node->nd_lit)) { 14961 case T_FIXNUM: 14962 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit)); 14963 break; 14964 case T_BIGNUM: 14965 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0); 14966 break; 14967 case T_FLOAT: 14968 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit); 14969 break; 14970 default: 14971 break; 14972 } 14973 return node; 14974 } 14975 14976 static NODE * 14977 arg_blk_pass(NODE *node1, NODE *node2) 14978 { 14979 if (node2) { 14980 node2->nd_head = node1; 14981 return node2; 14982 } 14983 return node1; 14984 } 14985 14986 static NODE* 14987 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b) 14988 { 14989 int saved_line = ruby_sourceline; 14990 NODE *node; 14991 NODE *i1, *i2 = 0; 14992 14993 node = NEW_ARGS(m ? m->nd_plen : 0, o); 14994 i1 = m ? m->nd_next : 0; 14995 node->nd_next = NEW_ARGS_AUX(r, b); 14996 14997 if (p) { 14998 i2 = p->nd_next; 14999 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen); 15000 } 15001 else if (i1) { 15002 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0); 15003 } 15004 if (i1 || i2) { 15005 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0); 15006 } 15007 ruby_sourceline = saved_line; 15008 return node; 15009 } 15010 #endif /* !RIPPER */ 15011 15012 static void 15013 warn_unused_var(struct parser_params *parser, struct local_vars *local) 15014 { 15015 int i, cnt; 15016 ID *v, *u; 15017 15018 if (!local->used) return; 15019 v = local->vars->tbl; 15020 u = local->used->tbl; 15021 cnt = local->used->pos; 15022 if (cnt != local->vars->pos) { 15023 rb_bug("local->used->pos != local->vars->pos"); 15024 } 15025 for (i = 0; i < cnt; ++i) { 15026 if (!v[i] || (u[i] & LVAR_USED)) continue; 15027 if (idUScore == v[i]) continue; 15028 rb_compile_warn(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i])); 15029 } 15030 } 15031 15032 static void 15033 local_push_gen(struct parser_params *parser, int inherit_dvars) 15034 { 15035 struct local_vars *local; 15036 15037 local = ALLOC(struct local_vars); 15038 local->prev = lvtbl; 15039 local->args = vtable_alloc(0); 15040 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE); 15041 local->used = !inherit_dvars && RTEST(ruby_verbose) ? vtable_alloc(0) : 0; 15042 local->cmdargs = cmdarg_stack; 15043 cmdarg_stack = 0; 15044 lvtbl = local; 15045 } 15046 15047 static void 15048 local_pop_gen(struct parser_params *parser) 15049 { 15050 struct local_vars *local = lvtbl->prev; 15051 if (lvtbl->used) { 15052 warn_unused_var(parser, lvtbl); 15053 vtable_free(lvtbl->used); 15054 } 15055 vtable_free(lvtbl->args); 15056 vtable_free(lvtbl->vars); 15057 cmdarg_stack = lvtbl->cmdargs; 15058 xfree(lvtbl); 15059 lvtbl = local; 15060 } 15061 15062 #ifndef RIPPER 15063 static ID* 15064 vtable_tblcpy(ID *buf, const struct vtable *src) 15065 { 15066 int i, cnt = vtable_size(src); 15067 15068 if (cnt > 0) { 15069 buf[0] = cnt; 15070 for (i = 0; i < cnt; i++) { 15071 buf[i] = src->tbl[i]; 15072 } 15073 return buf; 15074 } 15075 return 0; 15076 } 15077 15078 static ID* 15079 local_tbl_gen(struct parser_params *parser) 15080 { 15081 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars); 15082 ID *buf; 15083 15084 if (cnt <= 0) return 0; 15085 buf = ALLOC_N(ID, cnt + 1); 15086 vtable_tblcpy(buf+1, lvtbl->args); 15087 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars); 15088 buf[0] = cnt; 15089 return buf; 15090 } 15091 #endif 15092 15093 static int 15094 arg_var_gen(struct parser_params *parser, ID id) 15095 { 15096 vtable_add(lvtbl->args, id); 15097 return vtable_size(lvtbl->args) - 1; 15098 } 15099 15100 static int 15101 local_var_gen(struct parser_params *parser, ID id) 15102 { 15103 vtable_add(lvtbl->vars, id); 15104 if (lvtbl->used) { 15105 vtable_add(lvtbl->used, (ID)ruby_sourceline); 15106 } 15107 return vtable_size(lvtbl->vars) - 1; 15108 } 15109 15110 static int 15111 local_id_gen(struct parser_params *parser, ID id) 15112 { 15113 struct vtable *vars, *args, *used; 15114 15115 vars = lvtbl->vars; 15116 args = lvtbl->args; 15117 used = lvtbl->used; 15118 15119 while (vars && POINTER_P(vars->prev)) { 15120 vars = vars->prev; 15121 args = args->prev; 15122 if (used) used = used->prev; 15123 } 15124 15125 if (vars && vars->prev == DVARS_INHERIT) { 15126 return rb_local_defined(id); 15127 } 15128 else if (vtable_included(args, id)) { 15129 return 1; 15130 } 15131 else { 15132 int i = vtable_included(vars, id); 15133 if (i && used) used->tbl[i-1] |= LVAR_USED; 15134 return i != 0; 15135 } 15136 } 15137 15138 static const struct vtable * 15139 dyna_push_gen(struct parser_params *parser) 15140 { 15141 lvtbl->args = vtable_alloc(lvtbl->args); 15142 lvtbl->vars = vtable_alloc(lvtbl->vars); 15143 if (lvtbl->used) { 15144 lvtbl->used = vtable_alloc(lvtbl->used); 15145 } 15146 return lvtbl->args; 15147 } 15148 15149 static void 15150 dyna_pop_1(struct parser_params *parser) 15151 { 15152 struct vtable *tmp; 15153 15154 if ((tmp = lvtbl->used) != 0) { 15155 warn_unused_var(parser, lvtbl); 15156 lvtbl->used = lvtbl->used->prev; 15157 vtable_free(tmp); 15158 } 15159 tmp = lvtbl->args; 15160 lvtbl->args = lvtbl->args->prev; 15161 vtable_free(tmp); 15162 tmp = lvtbl->vars; 15163 lvtbl->vars = lvtbl->vars->prev; 15164 vtable_free(tmp); 15165 } 15166 15167 static void 15168 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs) 15169 { 15170 while (lvtbl->args != lvargs) { 15171 dyna_pop_1(parser); 15172 if (!lvtbl->args) { 15173 struct local_vars *local = lvtbl->prev; 15174 xfree(lvtbl); 15175 lvtbl = local; 15176 } 15177 } 15178 dyna_pop_1(parser); 15179 } 15180 15181 static int 15182 dyna_in_block_gen(struct parser_params *parser) 15183 { 15184 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE; 15185 } 15186 15187 static int 15188 dvar_defined_gen(struct parser_params *parser, ID id, int get) 15189 { 15190 struct vtable *vars, *args, *used; 15191 int i; 15192 15193 args = lvtbl->args; 15194 vars = lvtbl->vars; 15195 used = lvtbl->used; 15196 15197 while (POINTER_P(vars)) { 15198 if (vtable_included(args, id)) { 15199 return 1; 15200 } 15201 if ((i = vtable_included(vars, id)) != 0) { 15202 if (used) used->tbl[i-1] |= LVAR_USED; 15203 return 1; 15204 } 15205 args = args->prev; 15206 vars = vars->prev; 15207 if (get) used = 0; 15208 if (used) used = used->prev; 15209 } 15210 15211 if (vars == DVARS_INHERIT) { 15212 return rb_dvar_defined(id); 15213 } 15214 15215 return 0; 15216 } 15217 15218 static int 15219 dvar_curr_gen(struct parser_params *parser, ID id) 15220 { 15221 return (vtable_included(lvtbl->args, id) || 15222 vtable_included(lvtbl->vars, id)); 15223 } 15224 15225 #ifndef RIPPER 15226 static void 15227 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options) 15228 { 15229 int c = RE_OPTION_ENCODING_IDX(options); 15230 15231 if (c) { 15232 int opt, idx; 15233 rb_char_to_option_kcode(c, &opt, &idx); 15234 if (idx != ENCODING_GET(str) && 15235 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15236 goto error; 15237 } 15238 ENCODING_SET(str, idx); 15239 } 15240 else if (RE_OPTION_ENCODING_NONE(options)) { 15241 if (!ENCODING_IS_ASCII8BIT(str) && 15242 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15243 c = 'n'; 15244 goto error; 15245 } 15246 rb_enc_associate(str, rb_ascii8bit_encoding()); 15247 } 15248 else if (parser->enc == rb_usascii_encoding()) { 15249 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 15250 /* raise in re.c */ 15251 rb_enc_associate(str, rb_usascii_encoding()); 15252 } 15253 else { 15254 rb_enc_associate(str, rb_ascii8bit_encoding()); 15255 } 15256 } 15257 return; 15258 15259 error: 15260 compile_error(PARSER_ARG 15261 "regexp encoding option '%c' differs from source encoding '%s'", 15262 c, rb_enc_name(rb_enc_get(str))); 15263 } 15264 15265 static int 15266 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options) 15267 { 15268 VALUE err; 15269 reg_fragment_setenc(str, options); 15270 err = rb_reg_check_preprocess(str); 15271 if (err != Qnil) { 15272 err = rb_obj_as_string(err); 15273 compile_error(PARSER_ARG "%s", RSTRING_PTR(err)); 15274 RB_GC_GUARD(err); 15275 return 0; 15276 } 15277 return 1; 15278 } 15279 15280 typedef struct { 15281 struct parser_params* parser; 15282 rb_encoding *enc; 15283 NODE *succ_block; 15284 NODE *fail_block; 15285 int num; 15286 } reg_named_capture_assign_t; 15287 15288 static int 15289 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, 15290 int back_num, int *back_refs, OnigRegex regex, void *arg0) 15291 { 15292 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0; 15293 struct parser_params* parser = arg->parser; 15294 rb_encoding *enc = arg->enc; 15295 long len = name_end - name; 15296 const char *s = (const char *)name; 15297 ID var; 15298 15299 arg->num++; 15300 15301 if (arg->succ_block == 0) { 15302 arg->succ_block = NEW_BEGIN(0); 15303 arg->fail_block = NEW_BEGIN(0); 15304 } 15305 15306 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) || 15307 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) || 15308 !rb_enc_symname2_p(s, len, enc)) { 15309 return ST_CONTINUE; 15310 } 15311 var = rb_intern3(s, len, enc); 15312 if (dvar_defined(var) || local_id(var)) { 15313 rb_warningS("named capture conflicts a local variable - %s", 15314 rb_id2name(var)); 15315 } 15316 arg->succ_block = block_append(arg->succ_block, 15317 newline_node(node_assign(assignable(var,0), 15318 NEW_CALL( 15319 gettable(rb_intern("$~")), 15320 idAREF, 15321 NEW_LIST(NEW_LIT(ID2SYM(var)))) 15322 ))); 15323 arg->fail_block = block_append(arg->fail_block, 15324 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil)))); 15325 return ST_CONTINUE; 15326 } 15327 15328 static NODE * 15329 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match) 15330 { 15331 reg_named_capture_assign_t arg; 15332 15333 arg.parser = parser; 15334 arg.enc = rb_enc_get(regexp); 15335 arg.succ_block = 0; 15336 arg.fail_block = 0; 15337 arg.num = 0; 15338 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg); 15339 15340 if (arg.num == 0) 15341 return match; 15342 15343 return 15344 block_append( 15345 newline_node(match), 15346 NEW_IF(gettable(rb_intern("$~")), 15347 block_append( 15348 newline_node(arg.succ_block), 15349 newline_node( 15350 NEW_CALL( 15351 gettable(rb_intern("$~")), 15352 rb_intern("begin"), 15353 NEW_LIST(NEW_LIT(INT2FIX(0)))))), 15354 block_append( 15355 newline_node(arg.fail_block), 15356 newline_node( 15357 NEW_LIT(Qnil))))); 15358 } 15359 15360 static VALUE 15361 reg_compile_gen(struct parser_params* parser, VALUE str, int options) 15362 { 15363 VALUE re; 15364 VALUE err; 15365 15366 reg_fragment_setenc(str, options); 15367 err = rb_errinfo(); 15368 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline); 15369 if (NIL_P(re)) { 15370 ID mesg = rb_intern("mesg"); 15371 VALUE m = rb_attr_get(rb_errinfo(), mesg); 15372 rb_set_errinfo(err); 15373 if (!NIL_P(err)) { 15374 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m); 15375 } 15376 else { 15377 compile_error(PARSER_ARG "%s", RSTRING_PTR(m)); 15378 } 15379 return Qnil; 15380 } 15381 return re; 15382 } 15383 15384 void 15385 rb_gc_mark_parser(void) 15386 { 15387 } 15388 15389 NODE* 15390 rb_parser_append_print(VALUE vparser, NODE *node) 15391 { 15392 NODE *prelude = 0; 15393 NODE *scope = node; 15394 struct parser_params *parser; 15395 15396 if (!node) return node; 15397 15398 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 15399 15400 node = node->nd_body; 15401 15402 if (nd_type(node) == NODE_PRELUDE) { 15403 prelude = node; 15404 node = node->nd_body; 15405 } 15406 15407 node = block_append(node, 15408 NEW_FCALL(rb_intern("print"), 15409 NEW_ARRAY(NEW_GVAR(rb_intern("$_"))))); 15410 if (prelude) { 15411 prelude->nd_body = node; 15412 scope->nd_body = prelude; 15413 } 15414 else { 15415 scope->nd_body = node; 15416 } 15417 15418 return scope; 15419 } 15420 15421 NODE * 15422 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split) 15423 { 15424 NODE *prelude = 0; 15425 NODE *scope = node; 15426 struct parser_params *parser; 15427 15428 if (!node) return node; 15429 15430 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 15431 15432 node = node->nd_body; 15433 15434 if (nd_type(node) == NODE_PRELUDE) { 15435 prelude = node; 15436 node = node->nd_body; 15437 } 15438 if (split) { 15439 node = block_append(NEW_GASGN(rb_intern("$F"), 15440 NEW_CALL(NEW_GVAR(rb_intern("$_")), 15441 rb_intern("split"), 0)), 15442 node); 15443 } 15444 if (chop) { 15445 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")), 15446 rb_intern("chop!"), 0), node); 15447 } 15448 15449 node = NEW_OPT_N(node); 15450 15451 if (prelude) { 15452 prelude->nd_body = node; 15453 scope->nd_body = prelude; 15454 } 15455 else { 15456 scope->nd_body = node; 15457 } 15458 15459 return scope; 15460 } 15461 15462 static const struct { 15463 ID token; 15464 const char *name; 15465 } op_tbl[] = { 15466 {tDOT2, ".."}, 15467 {tDOT3, "..."}, 15468 {tPOW, "**"}, 15469 {tUPLUS, "+@"}, 15470 {tUMINUS, "-@"}, 15471 {tCMP, "<=>"}, 15472 {tGEQ, ">="}, 15473 {tLEQ, "<="}, 15474 {tEQ, "=="}, 15475 {tEQQ, "==="}, 15476 {tNEQ, "!="}, 15477 {tMATCH, "=~"}, 15478 {tNMATCH, "!~"}, 15479 {tAREF, "[]"}, 15480 {tASET, "[]="}, 15481 {tLSHFT, "<<"}, 15482 {tRSHFT, ">>"}, 15483 {tCOLON2, "::"}, 15484 }; 15485 15486 #define op_tbl_count numberof(op_tbl) 15487 15488 #ifndef ENABLE_SELECTOR_NAMESPACE 15489 #define ENABLE_SELECTOR_NAMESPACE 0 15490 #endif 15491 15492 static struct symbols { 15493 ID last_id; 15494 st_table *sym_id; 15495 st_table *id_str; 15496 #if ENABLE_SELECTOR_NAMESPACE 15497 st_table *ivar2_id; 15498 st_table *id_ivar2; 15499 #endif 15500 VALUE op_sym[tLAST_TOKEN]; 15501 } global_symbols = {tLAST_ID}; 15502 15503 static const struct st_hash_type symhash = { 15504 rb_str_hash_cmp, 15505 rb_str_hash, 15506 }; 15507 15508 #if ENABLE_SELECTOR_NAMESPACE 15509 struct ivar2_key { 15510 ID id; 15511 VALUE klass; 15512 }; 15513 15514 static int 15515 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2) 15516 { 15517 if (key1->id == key2->id && key1->klass == key2->klass) { 15518 return 0; 15519 } 15520 return 1; 15521 } 15522 15523 static int 15524 ivar2_hash(struct ivar2_key *key) 15525 { 15526 return (key->id << 8) ^ (key->klass >> 2); 15527 } 15528 15529 static const struct st_hash_type ivar2_hash_type = { 15530 ivar2_cmp, 15531 ivar2_hash, 15532 }; 15533 #endif 15534 15535 void 15536 Init_sym(void) 15537 { 15538 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000); 15539 global_symbols.id_str = st_init_numtable_with_size(1000); 15540 #if ENABLE_SELECTOR_NAMESPACE 15541 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000); 15542 global_symbols.id_ivar2 = st_init_numtable_with_size(1000); 15543 #endif 15544 15545 Init_id(); 15546 } 15547 15548 void 15549 rb_gc_mark_symbols(void) 15550 { 15551 rb_mark_tbl(global_symbols.id_str); 15552 rb_gc_mark_locations(global_symbols.op_sym, 15553 global_symbols.op_sym + tLAST_TOKEN); 15554 } 15555 #endif /* !RIPPER */ 15556 15557 static ID 15558 internal_id_gen(struct parser_params *parser) 15559 { 15560 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars); 15561 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1; 15562 return ID_INTERNAL | (id << ID_SCOPE_SHIFT); 15563 } 15564 15565 #ifndef RIPPER 15566 static int 15567 is_special_global_name(const char *m, const char *e, rb_encoding *enc) 15568 { 15569 int mb = 0; 15570 15571 if (m >= e) return 0; 15572 if (is_global_name_punct(*m)) { 15573 ++m; 15574 } 15575 else if (*m == '-') { 15576 ++m; 15577 if (m < e && is_identchar(m, e, enc)) { 15578 if (!ISASCII(*m)) mb = 1; 15579 m += rb_enc_mbclen(m, e, enc); 15580 } 15581 } 15582 else { 15583 if (!rb_enc_isdigit(*m, enc)) return 0; 15584 do { 15585 if (!ISASCII(*m)) mb = 1; 15586 ++m; 15587 } while (m < e && rb_enc_isdigit(*m, enc)); 15588 } 15589 return m == e ? mb + 1 : 0; 15590 } 15591 15592 int 15593 rb_symname_p(const char *name) 15594 { 15595 return rb_enc_symname_p(name, rb_ascii8bit_encoding()); 15596 } 15597 15598 int 15599 rb_enc_symname_p(const char *name, rb_encoding *enc) 15600 { 15601 return rb_enc_symname2_p(name, strlen(name), enc); 15602 } 15603 15604 int 15605 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc) 15606 { 15607 const char *m = name; 15608 const char *e = m + len; 15609 int localid = FALSE; 15610 15611 if (!m || len <= 0) return FALSE; 15612 switch (*m) { 15613 case '\0': 15614 return FALSE; 15615 15616 case '$': 15617 if (is_special_global_name(++m, e, enc)) return TRUE; 15618 goto id; 15619 15620 case '@': 15621 if (*++m == '@') ++m; 15622 goto id; 15623 15624 case '<': 15625 switch (*++m) { 15626 case '<': ++m; break; 15627 case '=': if (*++m == '>') ++m; break; 15628 default: break; 15629 } 15630 break; 15631 15632 case '>': 15633 switch (*++m) { 15634 case '>': case '=': ++m; break; 15635 } 15636 break; 15637 15638 case '=': 15639 switch (*++m) { 15640 case '~': ++m; break; 15641 case '=': if (*++m == '=') ++m; break; 15642 default: return FALSE; 15643 } 15644 break; 15645 15646 case '*': 15647 if (*++m == '*') ++m; 15648 break; 15649 15650 case '+': case '-': 15651 if (*++m == '@') ++m; 15652 break; 15653 15654 case '|': case '^': case '&': case '/': case '%': case '~': case '`': 15655 ++m; 15656 break; 15657 15658 case '[': 15659 if (*++m != ']') return FALSE; 15660 if (*++m == '=') ++m; 15661 break; 15662 15663 case '!': 15664 if (len == 1) return TRUE; 15665 switch (*++m) { 15666 case '=': case '~': ++m; break; 15667 default: return FALSE; 15668 } 15669 break; 15670 15671 default: 15672 localid = !rb_enc_isupper(*m, enc); 15673 id: 15674 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m))) 15675 return FALSE; 15676 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc); 15677 if (localid) { 15678 switch (*m) { 15679 case '!': case '?': case '=': ++m; 15680 } 15681 } 15682 break; 15683 } 15684 return m == e; 15685 } 15686 15687 static ID 15688 register_symid(ID id, const char *name, long len, rb_encoding *enc) 15689 { 15690 VALUE str = rb_enc_str_new(name, len, enc); 15691 OBJ_FREEZE(str); 15692 st_add_direct(global_symbols.sym_id, (st_data_t)str, id); 15693 st_add_direct(global_symbols.id_str, id, (st_data_t)str); 15694 return id; 15695 } 15696 15697 ID 15698 rb_intern3(const char *name, long len, rb_encoding *enc) 15699 { 15700 const char *m = name; 15701 const char *e = m + len; 15702 unsigned char c; 15703 VALUE str; 15704 ID id; 15705 long last; 15706 int mb; 15707 st_data_t data; 15708 struct RString fake_str; 15709 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED; 15710 fake_str.basic.klass = rb_cString; 15711 fake_str.as.heap.len = len; 15712 fake_str.as.heap.ptr = (char *)name; 15713 fake_str.as.heap.aux.capa = len; 15714 str = (VALUE)&fake_str; 15715 rb_enc_associate(str, enc); 15716 OBJ_FREEZE(str); 15717 15718 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) { 15719 rb_raise(rb_eEncodingError, "invalid encoding symbol"); 15720 } 15721 15722 if (st_lookup(global_symbols.sym_id, str, &data)) 15723 return (ID)data; 15724 15725 if (rb_cString && !rb_enc_asciicompat(enc)) { 15726 id = ID_JUNK; 15727 goto new_id; 15728 } 15729 last = len-1; 15730 id = 0; 15731 switch (*m) { 15732 case '$': 15733 id |= ID_GLOBAL; 15734 if ((mb = is_special_global_name(++m, e, enc)) != 0) { 15735 if (!--mb) enc = rb_ascii8bit_encoding(); 15736 goto new_id; 15737 } 15738 break; 15739 case '@': 15740 if (m[1] == '@') { 15741 m++; 15742 id |= ID_CLASS; 15743 } 15744 else { 15745 id |= ID_INSTANCE; 15746 } 15747 m++; 15748 break; 15749 default: 15750 c = m[0]; 15751 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) { 15752 /* operators */ 15753 int i; 15754 15755 if (len == 1) { 15756 id = c; 15757 goto id_register; 15758 } 15759 for (i = 0; i < op_tbl_count; i++) { 15760 if (*op_tbl[i].name == *m && 15761 strcmp(op_tbl[i].name, m) == 0) { 15762 id = op_tbl[i].token; 15763 goto id_register; 15764 } 15765 } 15766 } 15767 15768 if (m[last] == '=') { 15769 /* attribute assignment */ 15770 id = rb_intern3(name, last, enc); 15771 if (id > tLAST_TOKEN && !is_attrset_id(id)) { 15772 enc = rb_enc_get(rb_id2str(id)); 15773 id = rb_id_attrset(id); 15774 goto id_register; 15775 } 15776 id = ID_ATTRSET; 15777 } 15778 else if (rb_enc_isupper(m[0], enc)) { 15779 id = ID_CONST; 15780 } 15781 else { 15782 id = ID_LOCAL; 15783 } 15784 break; 15785 } 15786 mb = 0; 15787 if (!rb_enc_isdigit(*m, enc)) { 15788 while (m <= name + last && is_identchar(m, e, enc)) { 15789 if (ISASCII(*m)) { 15790 m++; 15791 } 15792 else { 15793 mb = 1; 15794 m += rb_enc_mbclen(m, e, enc); 15795 } 15796 } 15797 } 15798 if (m - name < len) id = ID_JUNK; 15799 if (enc != rb_usascii_encoding()) { 15800 /* 15801 * this clause makes sense only when called from other than 15802 * rb_intern_str() taking care of code-range. 15803 */ 15804 if (!mb) { 15805 for (; m <= name + len; ++m) { 15806 if (!ISASCII(*m)) goto mbstr; 15807 } 15808 enc = rb_usascii_encoding(); 15809 } 15810 mbstr:; 15811 } 15812 new_id: 15813 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) { 15814 if (len > 20) { 15815 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)", 15816 name); 15817 } 15818 else { 15819 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)", 15820 (int)len, name); 15821 } 15822 } 15823 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT; 15824 id_register: 15825 return register_symid(id, name, len, enc); 15826 } 15827 15828 ID 15829 rb_intern2(const char *name, long len) 15830 { 15831 return rb_intern3(name, len, rb_usascii_encoding()); 15832 } 15833 15834 #undef rb_intern 15835 ID 15836 rb_intern(const char *name) 15837 { 15838 return rb_intern2(name, strlen(name)); 15839 } 15840 15841 ID 15842 rb_intern_str(VALUE str) 15843 { 15844 rb_encoding *enc; 15845 ID id; 15846 15847 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 15848 enc = rb_usascii_encoding(); 15849 } 15850 else { 15851 enc = rb_enc_get(str); 15852 } 15853 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc); 15854 RB_GC_GUARD(str); 15855 return id; 15856 } 15857 15858 VALUE 15859 rb_id2str(ID id) 15860 { 15861 st_data_t data; 15862 15863 if (id < tLAST_TOKEN) { 15864 int i = 0; 15865 15866 if (id < INT_MAX && rb_ispunct((int)id)) { 15867 VALUE str = global_symbols.op_sym[i = (int)id]; 15868 if (!str) { 15869 char name[2]; 15870 name[0] = (char)id; 15871 name[1] = 0; 15872 str = rb_usascii_str_new(name, 1); 15873 OBJ_FREEZE(str); 15874 global_symbols.op_sym[i] = str; 15875 } 15876 return str; 15877 } 15878 for (i = 0; i < op_tbl_count; i++) { 15879 if (op_tbl[i].token == id) { 15880 VALUE str = global_symbols.op_sym[i]; 15881 if (!str) { 15882 str = rb_usascii_str_new2(op_tbl[i].name); 15883 OBJ_FREEZE(str); 15884 global_symbols.op_sym[i] = str; 15885 } 15886 return str; 15887 } 15888 } 15889 } 15890 15891 if (st_lookup(global_symbols.id_str, id, &data)) { 15892 VALUE str = (VALUE)data; 15893 if (RBASIC(str)->klass == 0) 15894 RBASIC(str)->klass = rb_cString; 15895 return str; 15896 } 15897 15898 if (is_attrset_id(id)) { 15899 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL; 15900 VALUE str; 15901 15902 while (!(str = rb_id2str(id2))) { 15903 if (!is_local_id(id2)) return 0; 15904 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST; 15905 } 15906 str = rb_str_dup(str); 15907 rb_str_cat(str, "=", 1); 15908 rb_intern_str(str); 15909 if (st_lookup(global_symbols.id_str, id, &data)) { 15910 VALUE str = (VALUE)data; 15911 if (RBASIC(str)->klass == 0) 15912 RBASIC(str)->klass = rb_cString; 15913 return str; 15914 } 15915 } 15916 return 0; 15917 } 15918 15919 const char * 15920 rb_id2name(ID id) 15921 { 15922 VALUE str = rb_id2str(id); 15923 15924 if (!str) return 0; 15925 return RSTRING_PTR(str); 15926 } 15927 15928 static int 15929 symbols_i(VALUE sym, ID value, VALUE ary) 15930 { 15931 rb_ary_push(ary, ID2SYM(value)); 15932 return ST_CONTINUE; 15933 } 15934 15935 /* 15936 * call-seq: 15937 * Symbol.all_symbols => array 15938 * 15939 * Returns an array of all the symbols currently in Ruby's symbol 15940 * table. 15941 * 15942 * Symbol.all_symbols.size #=> 903 15943 * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink, 15944 * :chown, :EOFError, :$;, :String, 15945 * :LOCK_SH, :"setuid?", :$<, 15946 * :default_proc, :compact, :extend, 15947 * :Tms, :getwd, :$=, :ThreadGroup, 15948 * :wait2, :$>] 15949 */ 15950 15951 VALUE 15952 rb_sym_all_symbols(void) 15953 { 15954 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries); 15955 15956 st_foreach(global_symbols.sym_id, symbols_i, ary); 15957 return ary; 15958 } 15959 15960 int 15961 rb_is_const_id(ID id) 15962 { 15963 return is_const_id(id); 15964 } 15965 15966 int 15967 rb_is_class_id(ID id) 15968 { 15969 return is_class_id(id); 15970 } 15971 15972 int 15973 rb_is_instance_id(ID id) 15974 { 15975 return is_instance_id(id); 15976 } 15977 15978 int 15979 rb_is_local_id(ID id) 15980 { 15981 return is_local_id(id); 15982 } 15983 15984 int 15985 rb_is_junk_id(ID id) 15986 { 15987 return is_junk_id(id); 15988 } 15989 15990 #endif /* !RIPPER */ 15991 15992 static void 15993 parser_initialize(struct parser_params *parser) 15994 { 15995 parser->eofp = Qfalse; 15996 15997 parser->parser_lex_strterm = 0; 15998 parser->parser_cond_stack = 0; 15999 parser->parser_cmdarg_stack = 0; 16000 parser->parser_class_nest = 0; 16001 parser->parser_paren_nest = 0; 16002 parser->parser_lpar_beg = 0; 16003 parser->parser_in_single = 0; 16004 parser->parser_in_def = 0; 16005 parser->parser_in_defined = 0; 16006 parser->parser_compile_for_eval = 0; 16007 parser->parser_cur_mid = 0; 16008 parser->parser_tokenbuf = NULL; 16009 parser->parser_tokidx = 0; 16010 parser->parser_toksiz = 0; 16011 parser->parser_heredoc_end = 0; 16012 parser->parser_command_start = TRUE; 16013 parser->parser_deferred_nodes = 0; 16014 parser->parser_lex_pbeg = 0; 16015 parser->parser_lex_p = 0; 16016 parser->parser_lex_pend = 0; 16017 parser->parser_lvtbl = 0; 16018 parser->parser_ruby__end__seen = 0; 16019 parser->parser_ruby_sourcefile = 0; 16020 #ifndef RIPPER 16021 parser->is_ripper = 0; 16022 parser->parser_eval_tree_begin = 0; 16023 parser->parser_eval_tree = 0; 16024 #else 16025 parser->is_ripper = 1; 16026 parser->parser_ruby_sourcefile_string = Qnil; 16027 parser->delayed = Qnil; 16028 16029 parser->result = Qnil; 16030 parser->parsing_thread = Qnil; 16031 parser->toplevel_p = TRUE; 16032 #endif 16033 #ifdef YYMALLOC 16034 parser->heap = NULL; 16035 #endif 16036 parser->enc = rb_usascii_encoding(); 16037 } 16038 16039 #ifdef RIPPER 16040 #define parser_mark ripper_parser_mark 16041 #define parser_free ripper_parser_free 16042 #endif 16043 16044 static void 16045 parser_mark(void *ptr) 16046 { 16047 struct parser_params *p = (struct parser_params*)ptr; 16048 16049 rb_gc_mark((VALUE)p->parser_lex_strterm); 16050 rb_gc_mark((VALUE)p->parser_deferred_nodes); 16051 rb_gc_mark(p->parser_lex_input); 16052 rb_gc_mark(p->parser_lex_lastline); 16053 rb_gc_mark(p->parser_lex_nextline); 16054 #ifndef RIPPER 16055 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ; 16056 rb_gc_mark((VALUE)p->parser_eval_tree) ; 16057 rb_gc_mark(p->debug_lines); 16058 #else 16059 rb_gc_mark(p->parser_ruby_sourcefile_string); 16060 rb_gc_mark(p->delayed); 16061 rb_gc_mark(p->value); 16062 rb_gc_mark(p->result); 16063 rb_gc_mark(p->parsing_thread); 16064 #endif 16065 #ifdef YYMALLOC 16066 rb_gc_mark((VALUE)p->heap); 16067 #endif 16068 } 16069 16070 static void 16071 parser_free(void *ptr) 16072 { 16073 struct parser_params *p = (struct parser_params*)ptr; 16074 struct local_vars *local, *prev; 16075 16076 if (p->parser_tokenbuf) { 16077 xfree(p->parser_tokenbuf); 16078 } 16079 for (local = p->parser_lvtbl; local; local = prev) { 16080 if (local->vars) xfree(local->vars); 16081 prev = local->prev; 16082 xfree(local); 16083 } 16084 #ifndef RIPPER 16085 xfree(p->parser_ruby_sourcefile); 16086 #endif 16087 xfree(p); 16088 } 16089 16090 static size_t 16091 parser_memsize(const void *ptr) 16092 { 16093 struct parser_params *p = (struct parser_params*)ptr; 16094 struct local_vars *local; 16095 size_t size = sizeof(*p); 16096 16097 if (!ptr) return 0; 16098 size += p->parser_toksiz; 16099 for (local = p->parser_lvtbl; local; local = local->prev) { 16100 size += sizeof(*local); 16101 if (local->vars) size += local->vars->capa * sizeof(ID); 16102 } 16103 #ifndef RIPPER 16104 if (p->parser_ruby_sourcefile) { 16105 size += strlen(p->parser_ruby_sourcefile) + 1; 16106 } 16107 #endif 16108 return size; 16109 } 16110 16111 static 16112 #ifndef RIPPER 16113 const 16114 #endif 16115 rb_data_type_t parser_data_type = { 16116 "parser", 16117 { 16118 parser_mark, 16119 parser_free, 16120 parser_memsize, 16121 }, 16122 }; 16123 16124 #ifndef RIPPER 16125 #undef rb_reserved_word 16126 16127 const struct kwtable * 16128 rb_reserved_word(const char *str, unsigned int len) 16129 { 16130 return reserved_word(str, len); 16131 } 16132 16133 static struct parser_params * 16134 parser_new(void) 16135 { 16136 struct parser_params *p; 16137 16138 p = ALLOC_N(struct parser_params, 1); 16139 MEMZERO(p, struct parser_params, 1); 16140 parser_initialize(p); 16141 return p; 16142 } 16143 16144 VALUE 16145 rb_parser_new(void) 16146 { 16147 struct parser_params *p = parser_new(); 16148 16149 return TypedData_Wrap_Struct(0, &parser_data_type, p); 16150 } 16151 16152 /* 16153 * call-seq: 16154 * ripper#end_seen? -> Boolean 16155 * 16156 * Return true if parsed source ended by +\_\_END\_\_+. 16157 */ 16158 VALUE 16159 rb_parser_end_seen_p(VALUE vparser) 16160 { 16161 struct parser_params *parser; 16162 16163 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 16164 return ruby__end__seen ? Qtrue : Qfalse; 16165 } 16166 16167 /* 16168 * call-seq: 16169 * ripper#encoding -> encoding 16170 * 16171 * Return encoding of the source. 16172 */ 16173 VALUE 16174 rb_parser_encoding(VALUE vparser) 16175 { 16176 struct parser_params *parser; 16177 16178 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 16179 return rb_enc_from_encoding(parser->enc); 16180 } 16181 16182 /* 16183 * call-seq: 16184 * ripper.yydebug -> true or false 16185 * 16186 * Get yydebug. 16187 */ 16188 VALUE 16189 rb_parser_get_yydebug(VALUE self) 16190 { 16191 struct parser_params *parser; 16192 16193 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16194 return yydebug ? Qtrue : Qfalse; 16195 } 16196 16197 /* 16198 * call-seq: 16199 * ripper.yydebug = flag 16200 * 16201 * Set yydebug. 16202 */ 16203 VALUE 16204 rb_parser_set_yydebug(VALUE self, VALUE flag) 16205 { 16206 struct parser_params *parser; 16207 16208 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16209 yydebug = RTEST(flag); 16210 return flag; 16211 } 16212 16213 #ifdef YYMALLOC 16214 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE)) 16215 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0) 16216 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \ 16217 (n)->u3.cnt = (c), (p)) 16218 16219 void * 16220 rb_parser_malloc(struct parser_params *parser, size_t size) 16221 { 16222 size_t cnt = HEAPCNT(1, size); 16223 NODE *n = NEWHEAP(); 16224 void *ptr = xmalloc(size); 16225 16226 return ADD2HEAP(n, cnt, ptr); 16227 } 16228 16229 void * 16230 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size) 16231 { 16232 size_t cnt = HEAPCNT(nelem, size); 16233 NODE *n = NEWHEAP(); 16234 void *ptr = xcalloc(nelem, size); 16235 16236 return ADD2HEAP(n, cnt, ptr); 16237 } 16238 16239 void * 16240 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size) 16241 { 16242 NODE *n; 16243 size_t cnt = HEAPCNT(1, size); 16244 16245 if (ptr && (n = parser->heap) != NULL) { 16246 do { 16247 if (n->u1.node == ptr) { 16248 n->u1.node = ptr = xrealloc(ptr, size); 16249 if (n->u3.cnt) n->u3.cnt = cnt; 16250 return ptr; 16251 } 16252 } while ((n = n->u2.node) != NULL); 16253 } 16254 n = NEWHEAP(); 16255 ptr = xrealloc(ptr, size); 16256 return ADD2HEAP(n, cnt, ptr); 16257 } 16258 16259 void 16260 rb_parser_free(struct parser_params *parser, void *ptr) 16261 { 16262 NODE **prev = &parser->heap, *n; 16263 16264 while ((n = *prev) != NULL) { 16265 if (n->u1.node == ptr) { 16266 *prev = n->u2.node; 16267 rb_gc_force_recycle((VALUE)n); 16268 break; 16269 } 16270 prev = &n->u2.node; 16271 } 16272 xfree(ptr); 16273 } 16274 #endif 16275 #endif 16276 16277 #ifdef RIPPER 16278 #ifdef RIPPER_DEBUG 16279 extern int rb_is_pointer_to_heap(VALUE); 16280 16281 /* :nodoc: */ 16282 static VALUE 16283 ripper_validate_object(VALUE self, VALUE x) 16284 { 16285 if (x == Qfalse) return x; 16286 if (x == Qtrue) return x; 16287 if (x == Qnil) return x; 16288 if (x == Qundef) 16289 rb_raise(rb_eArgError, "Qundef given"); 16290 if (FIXNUM_P(x)) return x; 16291 if (SYMBOL_P(x)) return x; 16292 if (!rb_is_pointer_to_heap(x)) 16293 rb_raise(rb_eArgError, "invalid pointer: %p", x); 16294 switch (TYPE(x)) { 16295 case T_STRING: 16296 case T_OBJECT: 16297 case T_ARRAY: 16298 case T_BIGNUM: 16299 case T_FLOAT: 16300 return x; 16301 case T_NODE: 16302 if (nd_type(x) != NODE_LASGN) { 16303 rb_raise(rb_eArgError, "NODE given: %p", x); 16304 } 16305 return ((NODE *)x)->nd_rval; 16306 default: 16307 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)", 16308 x, rb_obj_classname(x)); 16309 } 16310 return x; 16311 } 16312 #endif 16313 16314 #define validate(x) ((x) = get_value(x)) 16315 16316 static VALUE 16317 ripper_dispatch0(struct parser_params *parser, ID mid) 16318 { 16319 return rb_funcall(parser->value, mid, 0); 16320 } 16321 16322 static VALUE 16323 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a) 16324 { 16325 validate(a); 16326 return rb_funcall(parser->value, mid, 1, a); 16327 } 16328 16329 static VALUE 16330 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b) 16331 { 16332 validate(a); 16333 validate(b); 16334 return rb_funcall(parser->value, mid, 2, a, b); 16335 } 16336 16337 static VALUE 16338 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c) 16339 { 16340 validate(a); 16341 validate(b); 16342 validate(c); 16343 return rb_funcall(parser->value, mid, 3, a, b, c); 16344 } 16345 16346 static VALUE 16347 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d) 16348 { 16349 validate(a); 16350 validate(b); 16351 validate(c); 16352 validate(d); 16353 return rb_funcall(parser->value, mid, 4, a, b, c, d); 16354 } 16355 16356 static VALUE 16357 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e) 16358 { 16359 validate(a); 16360 validate(b); 16361 validate(c); 16362 validate(d); 16363 validate(e); 16364 return rb_funcall(parser->value, mid, 5, a, b, c, d, e); 16365 } 16366 16367 static const struct kw_assoc { 16368 ID id; 16369 const char *name; 16370 } keyword_to_name[] = { 16371 {keyword_class, "class"}, 16372 {keyword_module, "module"}, 16373 {keyword_def, "def"}, 16374 {keyword_undef, "undef"}, 16375 {keyword_begin, "begin"}, 16376 {keyword_rescue, "rescue"}, 16377 {keyword_ensure, "ensure"}, 16378 {keyword_end, "end"}, 16379 {keyword_if, "if"}, 16380 {keyword_unless, "unless"}, 16381 {keyword_then, "then"}, 16382 {keyword_elsif, "elsif"}, 16383 {keyword_else, "else"}, 16384 {keyword_case, "case"}, 16385 {keyword_when, "when"}, 16386 {keyword_while, "while"}, 16387 {keyword_until, "until"}, 16388 {keyword_for, "for"}, 16389 {keyword_break, "break"}, 16390 {keyword_next, "next"}, 16391 {keyword_redo, "redo"}, 16392 {keyword_retry, "retry"}, 16393 {keyword_in, "in"}, 16394 {keyword_do, "do"}, 16395 {keyword_do_cond, "do"}, 16396 {keyword_do_block, "do"}, 16397 {keyword_return, "return"}, 16398 {keyword_yield, "yield"}, 16399 {keyword_super, "super"}, 16400 {keyword_self, "self"}, 16401 {keyword_nil, "nil"}, 16402 {keyword_true, "true"}, 16403 {keyword_false, "false"}, 16404 {keyword_and, "and"}, 16405 {keyword_or, "or"}, 16406 {keyword_not, "not"}, 16407 {modifier_if, "if"}, 16408 {modifier_unless, "unless"}, 16409 {modifier_while, "while"}, 16410 {modifier_until, "until"}, 16411 {modifier_rescue, "rescue"}, 16412 {keyword_alias, "alias"}, 16413 {keyword_defined, "defined?"}, 16414 {keyword_BEGIN, "BEGIN"}, 16415 {keyword_END, "END"}, 16416 {keyword__LINE__, "__LINE__"}, 16417 {keyword__FILE__, "__FILE__"}, 16418 {keyword__ENCODING__, "__ENCODING__"}, 16419 {0, NULL} 16420 }; 16421 16422 static const char* 16423 keyword_id_to_str(ID id) 16424 { 16425 const struct kw_assoc *a; 16426 16427 for (a = keyword_to_name; a->id; a++) { 16428 if (a->id == id) 16429 return a->name; 16430 } 16431 return NULL; 16432 } 16433 16434 #undef ripper_id2sym 16435 static VALUE 16436 ripper_id2sym(ID id) 16437 { 16438 const char *name; 16439 char buf[8]; 16440 16441 if (id <= 256) { 16442 buf[0] = (char)id; 16443 buf[1] = '\0'; 16444 return ID2SYM(rb_intern2(buf, 1)); 16445 } 16446 if ((name = keyword_id_to_str(id))) { 16447 return ID2SYM(rb_intern(name)); 16448 } 16449 switch (id) { 16450 case tOROP: 16451 name = "||"; 16452 break; 16453 case tANDOP: 16454 name = "&&"; 16455 break; 16456 default: 16457 name = rb_id2name(id); 16458 if (!name) { 16459 rb_bug("cannot convert ID to string: %ld", (unsigned long)id); 16460 } 16461 return ID2SYM(id); 16462 } 16463 return ID2SYM(rb_intern(name)); 16464 } 16465 16466 static ID 16467 ripper_get_id(VALUE v) 16468 { 16469 NODE *nd; 16470 if (!RB_TYPE_P(v, T_NODE)) return 0; 16471 nd = (NODE *)v; 16472 if (nd_type(nd) != NODE_LASGN) return 0; 16473 return nd->nd_vid; 16474 } 16475 16476 static VALUE 16477 ripper_get_value(VALUE v) 16478 { 16479 NODE *nd; 16480 if (v == Qundef) return Qnil; 16481 if (!RB_TYPE_P(v, T_NODE)) return v; 16482 nd = (NODE *)v; 16483 if (nd_type(nd) != NODE_LASGN) return Qnil; 16484 return nd->nd_rval; 16485 } 16486 16487 static void 16488 ripper_compile_error(struct parser_params *parser, const char *fmt, ...) 16489 { 16490 VALUE str; 16491 va_list args; 16492 16493 va_start(args, fmt); 16494 str = rb_vsprintf(fmt, args); 16495 va_end(args); 16496 rb_funcall(parser->value, rb_intern("compile_error"), 1, str); 16497 } 16498 16499 static void 16500 ripper_warn0(struct parser_params *parser, const char *fmt) 16501 { 16502 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt)); 16503 } 16504 16505 static void 16506 ripper_warnI(struct parser_params *parser, const char *fmt, int a) 16507 { 16508 rb_funcall(parser->value, rb_intern("warn"), 2, 16509 STR_NEW2(fmt), INT2NUM(a)); 16510 } 16511 16512 #if 0 16513 static void 16514 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str) 16515 { 16516 rb_funcall(parser->value, rb_intern("warn"), 2, 16517 STR_NEW2(fmt), STR_NEW2(str)); 16518 } 16519 #endif 16520 16521 static void 16522 ripper_warning0(struct parser_params *parser, const char *fmt) 16523 { 16524 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt)); 16525 } 16526 16527 static void 16528 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str) 16529 { 16530 rb_funcall(parser->value, rb_intern("warning"), 2, 16531 STR_NEW2(fmt), STR_NEW2(str)); 16532 } 16533 16534 static VALUE 16535 ripper_lex_get_generic(struct parser_params *parser, VALUE src) 16536 { 16537 return rb_funcall(src, ripper_id_gets, 0); 16538 } 16539 16540 static VALUE 16541 ripper_s_allocate(VALUE klass) 16542 { 16543 struct parser_params *p; 16544 VALUE self; 16545 16546 p = ALLOC_N(struct parser_params, 1); 16547 MEMZERO(p, struct parser_params, 1); 16548 self = TypedData_Wrap_Struct(klass, &parser_data_type, p); 16549 p->value = self; 16550 return self; 16551 } 16552 16553 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0) 16554 16555 /* 16556 * call-seq: 16557 * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper 16558 * 16559 * Create a new Ripper object. 16560 * _src_ must be a String, an IO, or an Object which has #gets method. 16561 * 16562 * This method does not starts parsing. 16563 * See also Ripper#parse and Ripper.parse. 16564 */ 16565 static VALUE 16566 ripper_initialize(int argc, VALUE *argv, VALUE self) 16567 { 16568 struct parser_params *parser; 16569 VALUE src, fname, lineno; 16570 16571 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16572 rb_scan_args(argc, argv, "12", &src, &fname, &lineno); 16573 if (rb_obj_respond_to(src, ripper_id_gets, 0)) { 16574 parser->parser_lex_gets = ripper_lex_get_generic; 16575 } 16576 else { 16577 StringValue(src); 16578 parser->parser_lex_gets = lex_get_str; 16579 } 16580 parser->parser_lex_input = src; 16581 parser->eofp = Qfalse; 16582 if (NIL_P(fname)) { 16583 fname = STR_NEW2("(ripper)"); 16584 } 16585 else { 16586 StringValue(fname); 16587 } 16588 parser_initialize(parser); 16589 16590 parser->parser_ruby_sourcefile_string = fname; 16591 parser->parser_ruby_sourcefile = RSTRING_PTR(fname); 16592 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1; 16593 16594 return Qnil; 16595 } 16596 16597 struct ripper_args { 16598 struct parser_params *parser; 16599 int argc; 16600 VALUE *argv; 16601 }; 16602 16603 static VALUE 16604 ripper_parse0(VALUE parser_v) 16605 { 16606 struct parser_params *parser; 16607 16608 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 16609 parser_prepare(parser); 16610 ripper_yyparse((void*)parser); 16611 return parser->result; 16612 } 16613 16614 static VALUE 16615 ripper_ensure(VALUE parser_v) 16616 { 16617 struct parser_params *parser; 16618 16619 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 16620 parser->parsing_thread = Qnil; 16621 return Qnil; 16622 } 16623 16624 /* 16625 * call-seq: 16626 * ripper#parse 16627 * 16628 * Start parsing and returns the value of the root action. 16629 */ 16630 static VALUE 16631 ripper_parse(VALUE self) 16632 { 16633 struct parser_params *parser; 16634 16635 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16636 if (!ripper_initialized_p(parser)) { 16637 rb_raise(rb_eArgError, "method called for uninitialized object"); 16638 } 16639 if (!NIL_P(parser->parsing_thread)) { 16640 if (parser->parsing_thread == rb_thread_current()) 16641 rb_raise(rb_eArgError, "Ripper#parse is not reentrant"); 16642 else 16643 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe"); 16644 } 16645 parser->parsing_thread = rb_thread_current(); 16646 rb_ensure(ripper_parse0, self, ripper_ensure, self); 16647 16648 return parser->result; 16649 } 16650 16651 /* 16652 * call-seq: 16653 * ripper#column -> Integer 16654 * 16655 * Return column number of current parsing line. 16656 * This number starts from 0. 16657 */ 16658 static VALUE 16659 ripper_column(VALUE self) 16660 { 16661 struct parser_params *parser; 16662 long col; 16663 16664 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16665 if (!ripper_initialized_p(parser)) { 16666 rb_raise(rb_eArgError, "method called for uninitialized object"); 16667 } 16668 if (NIL_P(parser->parsing_thread)) return Qnil; 16669 col = parser->tokp - parser->parser_lex_pbeg; 16670 return LONG2NUM(col); 16671 } 16672 16673 /* 16674 * call-seq: 16675 * ripper#filename -> String 16676 * 16677 * Return current parsing filename. 16678 */ 16679 static VALUE 16680 ripper_filename(VALUE self) 16681 { 16682 struct parser_params *parser; 16683 16684 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16685 if (!ripper_initialized_p(parser)) { 16686 rb_raise(rb_eArgError, "method called for uninitialized object"); 16687 } 16688 return parser->parser_ruby_sourcefile_string; 16689 } 16690 16691 /* 16692 * call-seq: 16693 * ripper#lineno -> Integer 16694 * 16695 * Return line number of current parsing line. 16696 * This number starts from 1. 16697 */ 16698 static VALUE 16699 ripper_lineno(VALUE self) 16700 { 16701 struct parser_params *parser; 16702 16703 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16704 if (!ripper_initialized_p(parser)) { 16705 rb_raise(rb_eArgError, "method called for uninitialized object"); 16706 } 16707 if (NIL_P(parser->parsing_thread)) return Qnil; 16708 return INT2NUM(parser->parser_ruby_sourceline); 16709 } 16710 16711 #ifdef RIPPER_DEBUG 16712 /* :nodoc: */ 16713 static VALUE 16714 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg) 16715 { 16716 StringValue(msg); 16717 if (obj == Qundef) { 16718 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg)); 16719 } 16720 return Qnil; 16721 } 16722 16723 /* :nodoc: */ 16724 static VALUE 16725 ripper_value(VALUE self, VALUE obj) 16726 { 16727 return ULONG2NUM(obj); 16728 } 16729 #endif 16730 16731 16732 void 16733 InitVM_ripper(void) 16734 { 16735 parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new()); 16736 } 16737 16738 void 16739 Init_ripper(void) 16740 { 16741 VALUE Ripper; 16742 16743 InitVM(ripper); 16744 Ripper = rb_define_class("Ripper", rb_cObject); 16745 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION)); 16746 rb_define_alloc_func(Ripper, ripper_s_allocate); 16747 rb_define_method(Ripper, "initialize", ripper_initialize, -1); 16748 rb_define_method(Ripper, "parse", ripper_parse, 0); 16749 rb_define_method(Ripper, "column", ripper_column, 0); 16750 rb_define_method(Ripper, "filename", ripper_filename, 0); 16751 rb_define_method(Ripper, "lineno", ripper_lineno, 0); 16752 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0); 16753 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0); 16754 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0); 16755 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1); 16756 #ifdef RIPPER_DEBUG 16757 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2); 16758 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1); 16759 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1); 16760 #endif 16761 16762 ripper_id_gets = rb_intern("gets"); 16763 ripper_init_eventids1(Ripper); 16764 ripper_init_eventids2(Ripper); 16765 /* ensure existing in symbol table */ 16766 (void)rb_intern("||"); 16767 (void)rb_intern("&&"); 16768 16769 # if 0 16770 /* Hack to let RDoc document SCRIPT_LINES__ */ 16771 16772 /* 16773 * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded 16774 * after the assignment will be added as an Array of lines with the file 16775 * name as the key. 16776 */ 16777 rb_define_global_const("SCRIPT_LINES__", Qnil); 16778 #endif 16779 16780 } 16781 #endif /* RIPPER */ 16782
1.7.6.1