|
Ruby
2.0.0p594(2014-10-27revision48167)
|
00001 /* A Bison parser, made by GNU Bison 2.5. */ 00002 00003 /* Bison implementation for Yacc-like parsers in C 00004 00005 Copyright (C) 1984, 1989-1990, 2000-2011 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.5" 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 /* Using locations. */ 00062 #define YYLSP_NEEDED 0 00063 00064 00065 00066 /* Copy the first part of user declarations. */ 00067 00068 /* Line 268 of yacc.c */ 00069 #line 12 "parse.y" 00070 00071 00072 #ifndef PARSER_DEBUG 00073 #define PARSER_DEBUG 0 00074 #endif 00075 #define YYDEBUG 1 00076 #define YYERROR_VERBOSE 1 00077 #define YYSTACK_USE_ALLOCA 0 00078 00079 #include "ruby/ruby.h" 00080 #include "ruby/st.h" 00081 #include "ruby/encoding.h" 00082 #include "internal.h" 00083 #include "node.h" 00084 #include "parse.h" 00085 #include "id.h" 00086 #include "regenc.h" 00087 #include <stdio.h> 00088 #include <errno.h> 00089 #include <ctype.h> 00090 #include "probes.h" 00091 00092 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0])) 00093 00094 #define YYMALLOC(size) rb_parser_malloc(parser, (size)) 00095 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size)) 00096 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size)) 00097 #define YYFREE(ptr) rb_parser_free(parser, (ptr)) 00098 #define malloc YYMALLOC 00099 #define realloc YYREALLOC 00100 #define calloc YYCALLOC 00101 #define free YYFREE 00102 00103 #ifndef RIPPER 00104 static ID register_symid(ID, const char *, long, rb_encoding *); 00105 static ID register_symid_str(ID, VALUE); 00106 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc) 00107 #include "id.c" 00108 #endif 00109 00110 #define is_notop_id(id) ((id)>tLAST_OP_ID) 00111 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL) 00112 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL) 00113 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE) 00114 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET) 00115 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST) 00116 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS) 00117 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK) 00118 #define id_type(id) (is_notop_id(id) ? (int)((id)&ID_SCOPE_MASK) : -1) 00119 00120 #define is_asgn_or_id(id) ((is_notop_id(id)) && \ 00121 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \ 00122 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \ 00123 ((id)&ID_SCOPE_MASK) == ID_CLASS)) 00124 00125 enum lex_state_bits { 00126 EXPR_BEG_bit, /* ignore newline, +/- is a sign. */ 00127 EXPR_END_bit, /* newline significant, +/- is an operator. */ 00128 EXPR_ENDARG_bit, /* ditto, and unbound braces. */ 00129 EXPR_ENDFN_bit, /* ditto, and unbound braces. */ 00130 EXPR_ARG_bit, /* newline significant, +/- is an operator. */ 00131 EXPR_CMDARG_bit, /* newline significant, +/- is an operator. */ 00132 EXPR_MID_bit, /* newline significant, +/- is an operator. */ 00133 EXPR_FNAME_bit, /* ignore newline, no reserved words. */ 00134 EXPR_DOT_bit, /* right after `.' or `::', no reserved words. */ 00135 EXPR_CLASS_bit, /* immediate after `class', no here document. */ 00136 EXPR_VALUE_bit, /* alike EXPR_BEG but label is disallowed. */ 00137 EXPR_MAX_STATE 00138 }; 00139 /* examine combinations */ 00140 enum lex_state_e { 00141 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit) 00142 DEF_EXPR(BEG), 00143 DEF_EXPR(END), 00144 DEF_EXPR(ENDARG), 00145 DEF_EXPR(ENDFN), 00146 DEF_EXPR(ARG), 00147 DEF_EXPR(CMDARG), 00148 DEF_EXPR(MID), 00149 DEF_EXPR(FNAME), 00150 DEF_EXPR(DOT), 00151 DEF_EXPR(CLASS), 00152 DEF_EXPR(VALUE), 00153 EXPR_BEG_ANY = (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS), 00154 EXPR_ARG_ANY = (EXPR_ARG | EXPR_CMDARG), 00155 EXPR_END_ANY = (EXPR_END | EXPR_ENDARG | EXPR_ENDFN) 00156 }; 00157 #define IS_lex_state_for(x, ls) ((x) & (ls)) 00158 #define IS_lex_state(ls) IS_lex_state_for(lex_state, (ls)) 00159 00160 #if PARSER_DEBUG 00161 static const char *lex_state_name(enum lex_state_e state); 00162 #endif 00163 00164 typedef VALUE stack_type; 00165 00166 # define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1)) 00167 # define BITSTACK_POP(stack) ((stack) = (stack) >> 1) 00168 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1)) 00169 # define BITSTACK_SET_P(stack) ((stack)&1) 00170 00171 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n)) 00172 #define COND_POP() BITSTACK_POP(cond_stack) 00173 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack) 00174 #define COND_P() BITSTACK_SET_P(cond_stack) 00175 00176 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n)) 00177 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack) 00178 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack) 00179 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack) 00180 00181 struct vtable { 00182 ID *tbl; 00183 int pos; 00184 int capa; 00185 struct vtable *prev; 00186 }; 00187 00188 struct local_vars { 00189 struct vtable *args; 00190 struct vtable *vars; 00191 struct vtable *used; 00192 struct local_vars *prev; 00193 stack_type cmdargs; 00194 }; 00195 00196 #define DVARS_INHERIT ((void*)1) 00197 #define DVARS_TOPSCOPE NULL 00198 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl)) 00199 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3) 00200 00201 static int 00202 vtable_size(const struct vtable *tbl) 00203 { 00204 if (POINTER_P(tbl)) { 00205 return tbl->pos; 00206 } 00207 else { 00208 return 0; 00209 } 00210 } 00211 00212 #define VTBL_DEBUG 0 00213 00214 static struct vtable * 00215 vtable_alloc(struct vtable *prev) 00216 { 00217 struct vtable *tbl = ALLOC(struct vtable); 00218 tbl->pos = 0; 00219 tbl->capa = 8; 00220 tbl->tbl = ALLOC_N(ID, tbl->capa); 00221 tbl->prev = prev; 00222 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl); 00223 return tbl; 00224 } 00225 00226 static void 00227 vtable_free(struct vtable *tbl) 00228 { 00229 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl); 00230 if (POINTER_P(tbl)) { 00231 if (tbl->tbl) { 00232 xfree(tbl->tbl); 00233 } 00234 xfree(tbl); 00235 } 00236 } 00237 00238 static void 00239 vtable_add(struct vtable *tbl, ID id) 00240 { 00241 if (!POINTER_P(tbl)) { 00242 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl); 00243 } 00244 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id)); 00245 00246 if (tbl->pos == tbl->capa) { 00247 tbl->capa = tbl->capa * 2; 00248 REALLOC_N(tbl->tbl, ID, tbl->capa); 00249 } 00250 tbl->tbl[tbl->pos++] = id; 00251 } 00252 00253 static int 00254 vtable_included(const struct vtable * tbl, ID id) 00255 { 00256 int i; 00257 00258 if (POINTER_P(tbl)) { 00259 for (i = 0; i < tbl->pos; i++) { 00260 if (tbl->tbl[i] == id) { 00261 return i+1; 00262 } 00263 } 00264 } 00265 return 0; 00266 } 00267 00268 00269 #ifndef RIPPER 00270 typedef struct token_info { 00271 const char *token; 00272 int linenum; 00273 int column; 00274 int nonspc; 00275 struct token_info *next; 00276 } token_info; 00277 #endif 00278 00279 /* 00280 Structure of Lexer Buffer: 00281 00282 lex_pbeg tokp lex_p lex_pend 00283 | | | | 00284 |-----------+--------------+------------| 00285 |<------------>| 00286 token 00287 */ 00288 struct parser_params { 00289 int is_ripper; 00290 NODE *heap; 00291 00292 YYSTYPE *parser_yylval; 00293 VALUE eofp; 00294 00295 NODE *parser_lex_strterm; 00296 enum lex_state_e parser_lex_state; 00297 stack_type parser_cond_stack; 00298 stack_type parser_cmdarg_stack; 00299 int parser_class_nest; 00300 int parser_paren_nest; 00301 int parser_lpar_beg; 00302 int parser_in_single; 00303 int parser_in_def; 00304 int parser_brace_nest; 00305 int parser_compile_for_eval; 00306 VALUE parser_cur_mid; 00307 int parser_in_defined; 00308 char *parser_tokenbuf; 00309 int parser_tokidx; 00310 int parser_toksiz; 00311 int parser_tokline; 00312 VALUE parser_lex_input; 00313 VALUE parser_lex_lastline; 00314 VALUE parser_lex_nextline; 00315 const char *parser_lex_pbeg; 00316 const char *parser_lex_p; 00317 const char *parser_lex_pend; 00318 int parser_heredoc_end; 00319 int parser_command_start; 00320 NODE *parser_deferred_nodes; 00321 long parser_lex_gets_ptr; 00322 VALUE (*parser_lex_gets)(struct parser_params*,VALUE); 00323 struct local_vars *parser_lvtbl; 00324 int parser_ruby__end__seen; 00325 int line_count; 00326 int has_shebang; 00327 char *parser_ruby_sourcefile; /* current source file */ 00328 int parser_ruby_sourceline; /* current line no. */ 00329 VALUE parser_ruby_sourcefile_string; 00330 rb_encoding *enc; 00331 00332 int parser_yydebug; 00333 00334 #ifndef RIPPER 00335 /* Ruby core only */ 00336 NODE *parser_eval_tree_begin; 00337 NODE *parser_eval_tree; 00338 VALUE debug_lines; 00339 VALUE coverage; 00340 int nerr; 00341 00342 int parser_token_info_enabled; 00343 token_info *parser_token_info; 00344 #else 00345 /* Ripper only */ 00346 const char *tokp; 00347 VALUE delayed; 00348 int delayed_line; 00349 int delayed_col; 00350 00351 VALUE value; 00352 VALUE result; 00353 VALUE parsing_thread; 00354 int toplevel_p; 00355 #endif 00356 }; 00357 00358 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc) 00359 #define STR_NEW0() rb_enc_str_new(0,0,current_enc) 00360 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc) 00361 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc) 00362 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT) 00363 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), current_enc) 00364 00365 static int parser_yyerror(struct parser_params*, const char*); 00366 #define yyerror(msg) parser_yyerror(parser, (msg)) 00367 00368 #define lex_strterm (parser->parser_lex_strterm) 00369 #define lex_state (parser->parser_lex_state) 00370 #define cond_stack (parser->parser_cond_stack) 00371 #define cmdarg_stack (parser->parser_cmdarg_stack) 00372 #define class_nest (parser->parser_class_nest) 00373 #define paren_nest (parser->parser_paren_nest) 00374 #define lpar_beg (parser->parser_lpar_beg) 00375 #define brace_nest (parser->parser_brace_nest) 00376 #define in_single (parser->parser_in_single) 00377 #define in_def (parser->parser_in_def) 00378 #define compile_for_eval (parser->parser_compile_for_eval) 00379 #define cur_mid (parser->parser_cur_mid) 00380 #define in_defined (parser->parser_in_defined) 00381 #define tokenbuf (parser->parser_tokenbuf) 00382 #define tokidx (parser->parser_tokidx) 00383 #define toksiz (parser->parser_toksiz) 00384 #define tokline (parser->parser_tokline) 00385 #define lex_input (parser->parser_lex_input) 00386 #define lex_lastline (parser->parser_lex_lastline) 00387 #define lex_nextline (parser->parser_lex_nextline) 00388 #define lex_pbeg (parser->parser_lex_pbeg) 00389 #define lex_p (parser->parser_lex_p) 00390 #define lex_pend (parser->parser_lex_pend) 00391 #define heredoc_end (parser->parser_heredoc_end) 00392 #define command_start (parser->parser_command_start) 00393 #define deferred_nodes (parser->parser_deferred_nodes) 00394 #define lex_gets_ptr (parser->parser_lex_gets_ptr) 00395 #define lex_gets (parser->parser_lex_gets) 00396 #define lvtbl (parser->parser_lvtbl) 00397 #define ruby__end__seen (parser->parser_ruby__end__seen) 00398 #define ruby_sourceline (parser->parser_ruby_sourceline) 00399 #define ruby_sourcefile (parser->parser_ruby_sourcefile) 00400 #define ruby_sourcefile_string (parser->parser_ruby_sourcefile_string) 00401 #define current_enc (parser->enc) 00402 #define yydebug (parser->parser_yydebug) 00403 #ifdef RIPPER 00404 #else 00405 #define ruby_eval_tree (parser->parser_eval_tree) 00406 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin) 00407 #define ruby_debug_lines (parser->debug_lines) 00408 #define ruby_coverage (parser->coverage) 00409 #endif 00410 00411 #if YYPURE 00412 static int yylex(void*, void*); 00413 #else 00414 static int yylex(void*); 00415 #endif 00416 00417 #ifndef RIPPER 00418 #define yyparse ruby_yyparse 00419 00420 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE); 00421 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3)) 00422 00423 static NODE *cond_gen(struct parser_params*,NODE*); 00424 #define cond(node) cond_gen(parser, (node)) 00425 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*); 00426 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2)) 00427 00428 static NODE *newline_node(NODE*); 00429 static void fixpos(NODE*,NODE*); 00430 00431 static int value_expr_gen(struct parser_params*,NODE*); 00432 static void void_expr_gen(struct parser_params*,NODE*); 00433 static NODE *remove_begin(NODE*); 00434 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node)) 00435 #define void_expr0(node) void_expr_gen(parser, (node)) 00436 #define void_expr(node) void_expr0((node) = remove_begin(node)) 00437 static void void_stmts_gen(struct parser_params*,NODE*); 00438 #define void_stmts(node) void_stmts_gen(parser, (node)) 00439 static void reduce_nodes_gen(struct parser_params*,NODE**); 00440 #define reduce_nodes(n) reduce_nodes_gen(parser,(n)) 00441 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*); 00442 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2)) 00443 00444 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*); 00445 #define block_append(h,t) block_append_gen(parser,(h),(t)) 00446 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*); 00447 #define list_append(l,i) list_append_gen(parser,(l),(i)) 00448 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*); 00449 #define list_concat(h,t) list_concat_gen(parser,(h),(t)) 00450 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*); 00451 #define arg_append(h,t) arg_append_gen(parser,(h),(t)) 00452 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*); 00453 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t)) 00454 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*); 00455 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t)) 00456 static int literal_concat0(struct parser_params *, VALUE, VALUE); 00457 static NODE *new_evstr_gen(struct parser_params*,NODE*); 00458 #define new_evstr(n) new_evstr_gen(parser,(n)) 00459 static NODE *evstr2dstr_gen(struct parser_params*,NODE*); 00460 #define evstr2dstr(n) evstr2dstr_gen(parser,(n)) 00461 static NODE *splat_array(NODE*); 00462 00463 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*); 00464 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1)) 00465 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID); 00466 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id)) 00467 00468 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*); 00469 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t)) 00470 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID); 00471 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b)) 00472 00473 static NODE *negate_lit(NODE*); 00474 static NODE *ret_args_gen(struct parser_params*,NODE*); 00475 #define ret_args(node) ret_args_gen(parser, (node)) 00476 static NODE *arg_blk_pass(NODE*,NODE*); 00477 static NODE *new_yield_gen(struct parser_params*,NODE*); 00478 #define new_yield(node) new_yield_gen(parser, (node)) 00479 static NODE *dsym_node_gen(struct parser_params*,NODE*); 00480 #define dsym_node(node) dsym_node_gen(parser, (node)) 00481 00482 static NODE *gettable_gen(struct parser_params*,ID); 00483 #define gettable(id) gettable_gen(parser,(id)) 00484 static NODE *assignable_gen(struct parser_params*,ID,NODE*); 00485 #define assignable(id,node) assignable_gen(parser, (id), (node)) 00486 00487 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*); 00488 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2)) 00489 static NODE *attrset_gen(struct parser_params*,NODE*,ID); 00490 #define attrset(node,id) attrset_gen(parser, (node), (id)) 00491 00492 static void rb_backref_error_gen(struct parser_params*,NODE*); 00493 #define rb_backref_error(n) rb_backref_error_gen(parser,(n)) 00494 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*); 00495 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2)) 00496 00497 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs); 00498 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs); 00499 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs)) 00500 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs); 00501 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs)) 00502 00503 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*); 00504 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2)) 00505 00506 static ID *local_tbl_gen(struct parser_params*); 00507 #define local_tbl() local_tbl_gen(parser) 00508 00509 static void fixup_nodes(NODE **); 00510 00511 static VALUE reg_compile_gen(struct parser_params*, VALUE, int); 00512 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options)) 00513 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int); 00514 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options)) 00515 static int reg_fragment_check_gen(struct parser_params*, VALUE, int); 00516 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options)) 00517 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match); 00518 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match)) 00519 00520 #define get_id(id) (id) 00521 #define get_value(val) (val) 00522 #else 00523 #define value_expr(node) ((void)(node)) 00524 #define remove_begin(node) (node) 00525 #define rb_dvar_defined(id) 0 00526 #define rb_local_defined(id) 0 00527 static ID ripper_get_id(VALUE); 00528 #define get_id(id) ripper_get_id(id) 00529 static VALUE ripper_get_value(VALUE); 00530 #define get_value(val) ripper_get_value(val) 00531 static VALUE assignable_gen(struct parser_params*,VALUE); 00532 #define assignable(lhs,node) assignable_gen(parser, (lhs)) 00533 static int id_is_var_gen(struct parser_params *parser, ID id); 00534 #define id_is_var(id) id_is_var_gen(parser, (id)) 00535 00536 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2)) 00537 00538 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs); 00539 static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs); 00540 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs)) 00541 00542 #endif /* !RIPPER */ 00543 00544 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs)) 00545 00546 static ID formal_argument_gen(struct parser_params*, ID); 00547 #define formal_argument(id) formal_argument_gen(parser, (id)) 00548 static ID shadowing_lvar_gen(struct parser_params*,ID); 00549 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name)) 00550 static void new_bv_gen(struct parser_params*,ID); 00551 #define new_bv(id) new_bv_gen(parser, (id)) 00552 00553 static void local_push_gen(struct parser_params*,int); 00554 #define local_push(top) local_push_gen(parser,(top)) 00555 static void local_pop_gen(struct parser_params*); 00556 #define local_pop() local_pop_gen(parser) 00557 static int local_var_gen(struct parser_params*, ID); 00558 #define local_var(id) local_var_gen(parser, (id)) 00559 static int arg_var_gen(struct parser_params*, ID); 00560 #define arg_var(id) arg_var_gen(parser, (id)) 00561 static int local_id_gen(struct parser_params*, ID); 00562 #define local_id(id) local_id_gen(parser, (id)) 00563 static ID internal_id_gen(struct parser_params*); 00564 #define internal_id() internal_id_gen(parser) 00565 00566 static const struct vtable *dyna_push_gen(struct parser_params *); 00567 #define dyna_push() dyna_push_gen(parser) 00568 static void dyna_pop_gen(struct parser_params*, const struct vtable *); 00569 #define dyna_pop(node) dyna_pop_gen(parser, (node)) 00570 static int dyna_in_block_gen(struct parser_params*); 00571 #define dyna_in_block() dyna_in_block_gen(parser) 00572 #define dyna_var(id) local_var(id) 00573 static int dvar_defined_gen(struct parser_params*,ID,int); 00574 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0) 00575 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1) 00576 static int dvar_curr_gen(struct parser_params*,ID); 00577 #define dvar_curr(id) dvar_curr_gen(parser, (id)) 00578 00579 static int lvar_defined_gen(struct parser_params*, ID); 00580 #define lvar_defined(id) lvar_defined_gen(parser, (id)) 00581 00582 #define RE_OPTION_ONCE (1<<16) 00583 #define RE_OPTION_ENCODING_SHIFT 8 00584 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT) 00585 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff) 00586 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE) 00587 #define RE_OPTION_MASK 0xff 00588 #define RE_OPTION_ARG_ENCODING_NONE 32 00589 00590 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */ 00591 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */ 00592 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1)) 00593 #define nd_func u1.id 00594 #if SIZEOF_SHORT == 2 00595 #define nd_term(node) ((signed short)(node)->u2.id) 00596 #else 00597 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2) 00598 #endif 00599 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2) 00600 #define nd_nest u3.cnt 00601 00602 /****** Ripper *******/ 00603 00604 #ifdef RIPPER 00605 #define RIPPER_VERSION "0.1.0" 00606 00607 #include "eventids1.c" 00608 #include "eventids2.c" 00609 00610 static VALUE ripper_dispatch0(struct parser_params*,ID); 00611 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE); 00612 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE); 00613 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE); 00614 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE); 00615 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE); 00616 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE); 00617 00618 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n)) 00619 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a)) 00620 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b)) 00621 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c)) 00622 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d)) 00623 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e)) 00624 #define dispatch7(n,a,b,c,d,e,f,g) ripper_dispatch7(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e), (f), (g)) 00625 00626 #define yyparse ripper_yyparse 00627 00628 #define ripper_intern(s) ID2SYM(rb_intern(s)) 00629 static VALUE ripper_id2sym(ID); 00630 #ifdef __GNUC__ 00631 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \ 00632 ID2SYM(id) : ripper_id2sym(id)) 00633 #endif 00634 00635 #define arg_new() dispatch0(args_new) 00636 #define arg_add(l,a) dispatch2(args_add, (l), (a)) 00637 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a)) 00638 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b)) 00639 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b))) 00640 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v)) 00641 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b)) 00642 00643 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a)) 00644 #define mrhs_new() dispatch0(mrhs_new) 00645 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a)) 00646 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a)) 00647 00648 #define mlhs_new() dispatch0(mlhs_new) 00649 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a)) 00650 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a)) 00651 00652 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \ 00653 dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk)) 00654 00655 #define blockvar_new(p,v) dispatch2(block_var, (p), (v)) 00656 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a)) 00657 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a)) 00658 00659 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a))) 00660 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a)) 00661 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b)) 00662 00663 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x)) 00664 00665 static inline VALUE 00666 new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail) 00667 { 00668 NODE *t = (NODE *)tail; 00669 VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value; 00670 return params_new(f, o, r, p, k, kr, escape_Qundef(b)); 00671 } 00672 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t)) 00673 00674 static inline VALUE 00675 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b) 00676 { 00677 return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b); 00678 } 00679 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b)) 00680 00681 #define FIXME 0 00682 00683 #endif /* RIPPER */ 00684 00685 #ifndef RIPPER 00686 # define Qnone 0 00687 # define ifndef_ripper(x) (x) 00688 #else 00689 # define Qnone Qnil 00690 # define ifndef_ripper(x) 00691 #endif 00692 00693 #ifndef RIPPER 00694 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt)) 00695 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00696 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00697 # define rb_warn4S(file,line,fmt,a) rb_compile_warn((file), (line), (fmt), (a)) 00698 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt)) 00699 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00700 #else 00701 # define rb_warn0(fmt) ripper_warn0(parser, (fmt)) 00702 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a)) 00703 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a)) 00704 # define rb_warn4S(file,line,fmt,a) ripper_warnS(parser, (fmt), (a)) 00705 # define rb_warning0(fmt) ripper_warning0(parser, (fmt)) 00706 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a)) 00707 static void ripper_warn0(struct parser_params*, const char*); 00708 static void ripper_warnI(struct parser_params*, const char*, int); 00709 static void ripper_warnS(struct parser_params*, const char*, const char*); 00710 static void ripper_warning0(struct parser_params*, const char*); 00711 static void ripper_warningS(struct parser_params*, const char*, const char*); 00712 #endif 00713 00714 #ifdef RIPPER 00715 static void ripper_compile_error(struct parser_params*, const char *fmt, ...); 00716 # define rb_compile_error ripper_compile_error 00717 # define compile_error ripper_compile_error 00718 # define PARSER_ARG parser, 00719 #else 00720 # define rb_compile_error rb_compile_error_with_enc 00721 # define compile_error parser->nerr++,rb_compile_error_with_enc 00722 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc, 00723 #endif 00724 00725 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150, 00726 for instance). This is too low for Ruby to parse some files, such as 00727 date/format.rb, therefore bump the value up to at least Bison's default. */ 00728 #ifdef OLD_YACC 00729 #ifndef YYMAXDEPTH 00730 #define YYMAXDEPTH 10000 00731 #endif 00732 #endif 00733 00734 #ifndef RIPPER 00735 static void token_info_push(struct parser_params*, const char *token); 00736 static void token_info_pop(struct parser_params*, const char *token); 00737 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0) 00738 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0) 00739 #else 00740 #define token_info_push(token) /* nothing */ 00741 #define token_info_pop(token) /* nothing */ 00742 #endif 00743 00744 00745 /* Line 268 of yacc.c */ 00746 #line 747 "parse.c" 00747 00748 /* Enabling traces. */ 00749 #ifndef YYDEBUG 00750 # define YYDEBUG 0 00751 #endif 00752 00753 /* Enabling verbose error messages. */ 00754 #ifdef YYERROR_VERBOSE 00755 # undef YYERROR_VERBOSE 00756 # define YYERROR_VERBOSE 1 00757 #else 00758 # define YYERROR_VERBOSE 0 00759 #endif 00760 00761 /* Enabling the token table. */ 00762 #ifndef YYTOKEN_TABLE 00763 # define YYTOKEN_TABLE 0 00764 #endif 00765 00766 00767 /* Tokens. */ 00768 #ifndef YYTOKENTYPE 00769 # define YYTOKENTYPE 00770 /* Put the tokens into the symbol table, so that GDB and other debuggers 00771 know about them. */ 00772 enum yytokentype { 00773 END_OF_INPUT = 0, 00774 keyword_class = 258, 00775 keyword_module = 259, 00776 keyword_def = 260, 00777 keyword_undef = 261, 00778 keyword_begin = 262, 00779 keyword_rescue = 263, 00780 keyword_ensure = 264, 00781 keyword_end = 265, 00782 keyword_if = 266, 00783 keyword_unless = 267, 00784 keyword_then = 268, 00785 keyword_elsif = 269, 00786 keyword_else = 270, 00787 keyword_case = 271, 00788 keyword_when = 272, 00789 keyword_while = 273, 00790 keyword_until = 274, 00791 keyword_for = 275, 00792 keyword_break = 276, 00793 keyword_next = 277, 00794 keyword_redo = 278, 00795 keyword_retry = 279, 00796 keyword_in = 280, 00797 keyword_do = 281, 00798 keyword_do_cond = 282, 00799 keyword_do_block = 283, 00800 keyword_do_LAMBDA = 284, 00801 keyword_return = 285, 00802 keyword_yield = 286, 00803 keyword_super = 287, 00804 keyword_self = 288, 00805 keyword_nil = 289, 00806 keyword_true = 290, 00807 keyword_false = 291, 00808 keyword_and = 292, 00809 keyword_or = 293, 00810 keyword_not = 294, 00811 modifier_if = 295, 00812 modifier_unless = 296, 00813 modifier_while = 297, 00814 modifier_until = 298, 00815 modifier_rescue = 299, 00816 keyword_alias = 300, 00817 keyword_defined = 301, 00818 keyword_BEGIN = 302, 00819 keyword_END = 303, 00820 keyword__LINE__ = 304, 00821 keyword__FILE__ = 305, 00822 keyword__ENCODING__ = 306, 00823 tIDENTIFIER = 307, 00824 tFID = 308, 00825 tGVAR = 309, 00826 tIVAR = 310, 00827 tCONSTANT = 311, 00828 tCVAR = 312, 00829 tLABEL = 313, 00830 tINTEGER = 314, 00831 tFLOAT = 315, 00832 tSTRING_CONTENT = 316, 00833 tCHAR = 317, 00834 tNTH_REF = 318, 00835 tBACK_REF = 319, 00836 tREGEXP_END = 320, 00837 tUPLUS = 130, 00838 tUMINUS = 131, 00839 tPOW = 132, 00840 tCMP = 134, 00841 tEQ = 139, 00842 tEQQ = 140, 00843 tNEQ = 141, 00844 tGEQ = 138, 00845 tLEQ = 137, 00846 tANDOP = 321, 00847 tOROP = 322, 00848 tMATCH = 142, 00849 tNMATCH = 143, 00850 tDOT2 = 128, 00851 tDOT3 = 129, 00852 tAREF = 144, 00853 tASET = 145, 00854 tLSHFT = 135, 00855 tRSHFT = 136, 00856 tCOLON2 = 323, 00857 tCOLON3 = 324, 00858 tOP_ASGN = 325, 00859 tASSOC = 326, 00860 tLPAREN = 327, 00861 tLPAREN_ARG = 328, 00862 tRPAREN = 329, 00863 tLBRACK = 330, 00864 tLBRACE = 331, 00865 tLBRACE_ARG = 332, 00866 tSTAR = 333, 00867 tDSTAR = 334, 00868 tAMPER = 335, 00869 tLAMBDA = 336, 00870 tSYMBEG = 337, 00871 tSTRING_BEG = 338, 00872 tXSTRING_BEG = 339, 00873 tREGEXP_BEG = 340, 00874 tWORDS_BEG = 341, 00875 tQWORDS_BEG = 342, 00876 tSYMBOLS_BEG = 343, 00877 tQSYMBOLS_BEG = 344, 00878 tSTRING_DBEG = 345, 00879 tSTRING_DEND = 346, 00880 tSTRING_DVAR = 347, 00881 tSTRING_END = 348, 00882 tLAMBEG = 349, 00883 tLOWEST = 350, 00884 tUMINUS_NUM = 351, 00885 tLAST_TOKEN = 352 00886 }; 00887 #endif 00888 00889 00890 00891 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 00892 typedef union YYSTYPE 00893 { 00894 00895 /* Line 293 of yacc.c */ 00896 #line 691 "parse.y" 00897 00898 VALUE val; 00899 NODE *node; 00900 ID id; 00901 int num; 00902 const struct vtable *vars; 00903 00904 00905 00906 /* Line 293 of yacc.c */ 00907 #line 908 "parse.c" 00908 } YYSTYPE; 00909 # define YYSTYPE_IS_TRIVIAL 1 00910 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 00911 # define YYSTYPE_IS_DECLARED 1 00912 #endif 00913 00914 00915 /* Copy the second part of user declarations. */ 00916 00917 00918 /* Line 343 of yacc.c */ 00919 #line 920 "parse.c" 00920 00921 #ifdef short 00922 # undef short 00923 #endif 00924 00925 #ifdef YYTYPE_UINT8 00926 typedef YYTYPE_UINT8 yytype_uint8; 00927 #else 00928 typedef unsigned char yytype_uint8; 00929 #endif 00930 00931 #ifdef YYTYPE_INT8 00932 typedef YYTYPE_INT8 yytype_int8; 00933 #elif (defined __STDC__ || defined __C99__FUNC__ \ 00934 || defined __cplusplus || defined _MSC_VER) 00935 typedef signed char yytype_int8; 00936 #else 00937 typedef short int yytype_int8; 00938 #endif 00939 00940 #ifdef YYTYPE_UINT16 00941 typedef YYTYPE_UINT16 yytype_uint16; 00942 #else 00943 typedef unsigned short int yytype_uint16; 00944 #endif 00945 00946 #ifdef YYTYPE_INT16 00947 typedef YYTYPE_INT16 yytype_int16; 00948 #else 00949 typedef short int yytype_int16; 00950 #endif 00951 00952 #ifndef YYSIZE_T 00953 # ifdef __SIZE_TYPE__ 00954 # define YYSIZE_T __SIZE_TYPE__ 00955 # elif defined size_t 00956 # define YYSIZE_T size_t 00957 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 00958 || defined __cplusplus || defined _MSC_VER) 00959 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 00960 # define YYSIZE_T size_t 00961 # else 00962 # define YYSIZE_T unsigned int 00963 # endif 00964 #endif 00965 00966 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 00967 00968 #ifndef YY_ 00969 # if defined YYENABLE_NLS && YYENABLE_NLS 00970 # if ENABLE_NLS 00971 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 00972 # define YY_(msgid) dgettext ("bison-runtime", msgid) 00973 # endif 00974 # endif 00975 # ifndef YY_ 00976 # define YY_(msgid) msgid 00977 # endif 00978 #endif 00979 00980 /* Suppress unused-variable warnings by "using" E. */ 00981 #if ! defined lint || defined __GNUC__ 00982 # define YYUSE(e) ((void) (e)) 00983 #else 00984 # define YYUSE(e) /* empty */ 00985 #endif 00986 00987 /* Identity function, used to suppress warnings about constant conditions. */ 00988 #ifndef lint 00989 # define YYID(n) (n) 00990 #else 00991 #if (defined __STDC__ || defined __C99__FUNC__ \ 00992 || defined __cplusplus || defined _MSC_VER) 00993 static int 00994 YYID (int yyi) 00995 #else 00996 static int 00997 YYID (yyi) 00998 int yyi; 00999 #endif 01000 { 01001 return yyi; 01002 } 01003 #endif 01004 01005 #if ! defined yyoverflow || YYERROR_VERBOSE 01006 01007 /* The parser invokes alloca or malloc; define the necessary symbols. */ 01008 01009 # ifdef YYSTACK_USE_ALLOCA 01010 # if YYSTACK_USE_ALLOCA 01011 # ifdef __GNUC__ 01012 # define YYSTACK_ALLOC __builtin_alloca 01013 # elif defined __BUILTIN_VA_ARG_INCR 01014 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 01015 # elif defined _AIX 01016 # define YYSTACK_ALLOC __alloca 01017 # elif defined _MSC_VER 01018 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 01019 # define alloca _alloca 01020 # else 01021 # define YYSTACK_ALLOC alloca 01022 # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 01023 || defined __cplusplus || defined _MSC_VER) 01024 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 01025 # ifndef EXIT_SUCCESS 01026 # define EXIT_SUCCESS 0 01027 # endif 01028 # endif 01029 # endif 01030 # endif 01031 # endif 01032 01033 # ifdef YYSTACK_ALLOC 01034 /* Pacify GCC's `empty if-body' warning. */ 01035 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 01036 # ifndef YYSTACK_ALLOC_MAXIMUM 01037 /* The OS might guarantee only one guard page at the bottom of the stack, 01038 and a page size can be as small as 4096 bytes. So we cannot safely 01039 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 01040 to allow for a few compiler-allocated temporary stack slots. */ 01041 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 01042 # endif 01043 # else 01044 # define YYSTACK_ALLOC YYMALLOC 01045 # define YYSTACK_FREE YYFREE 01046 # ifndef YYSTACK_ALLOC_MAXIMUM 01047 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 01048 # endif 01049 # if (defined __cplusplus && ! defined EXIT_SUCCESS \ 01050 && ! ((defined YYMALLOC || defined malloc) \ 01051 && (defined YYFREE || defined free))) 01052 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 01053 # ifndef EXIT_SUCCESS 01054 # define EXIT_SUCCESS 0 01055 # endif 01056 # endif 01057 # ifndef YYMALLOC 01058 # define YYMALLOC malloc 01059 # if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 01060 || defined __cplusplus || defined _MSC_VER) 01061 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 01062 # endif 01063 # endif 01064 # ifndef YYFREE 01065 # define YYFREE free 01066 # if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \ 01067 || defined __cplusplus || defined _MSC_VER) 01068 void free (void *); /* INFRINGES ON USER NAME SPACE */ 01069 # endif 01070 # endif 01071 # endif 01072 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 01073 01074 01075 #if (! defined yyoverflow \ 01076 && (! defined __cplusplus \ 01077 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 01078 01079 /* A type that is properly aligned for any stack member. */ 01080 union yyalloc 01081 { 01082 yytype_int16 yyss_alloc; 01083 YYSTYPE yyvs_alloc; 01084 }; 01085 01086 /* The size of the maximum gap between one aligned stack and the next. */ 01087 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 01088 01089 /* The size of an array large to enough to hold all stacks, each with 01090 N elements. */ 01091 # define YYSTACK_BYTES(N) \ 01092 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 01093 + YYSTACK_GAP_MAXIMUM) 01094 01095 # define YYCOPY_NEEDED 1 01096 01097 /* Relocate STACK from its old location to the new one. The 01098 local variables YYSIZE and YYSTACKSIZE give the old and new number of 01099 elements in the stack, and YYPTR gives the new location of the 01100 stack. Advance YYPTR to a properly aligned location for the next 01101 stack. */ 01102 # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ 01103 do \ 01104 { \ 01105 YYSIZE_T yynewbytes; \ 01106 YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ 01107 Stack = &yyptr->Stack_alloc; \ 01108 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 01109 yyptr += yynewbytes / sizeof (*yyptr); \ 01110 } \ 01111 while (YYID (0)) 01112 01113 #endif 01114 01115 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED 01116 /* Copy COUNT objects from FROM to TO. The source and destination do 01117 not overlap. */ 01118 # ifndef YYCOPY 01119 # if defined __GNUC__ && 1 < __GNUC__ 01120 # define YYCOPY(To, From, Count) \ 01121 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 01122 # else 01123 # define YYCOPY(To, From, Count) \ 01124 do \ 01125 { \ 01126 YYSIZE_T yyi; \ 01127 for (yyi = 0; yyi < (Count); yyi++) \ 01128 (To)[yyi] = (From)[yyi]; \ 01129 } \ 01130 while (YYID (0)) 01131 # endif 01132 # endif 01133 #endif /* !YYCOPY_NEEDED */ 01134 01135 /* YYFINAL -- State number of the termination state. */ 01136 #define YYFINAL 3 01137 /* YYLAST -- Last index in YYTABLE. */ 01138 #define YYLAST 10700 01139 01140 /* YYNTOKENS -- Number of terminals. */ 01141 #define YYNTOKENS 142 01142 /* YYNNTS -- Number of nonterminals. */ 01143 #define YYNNTS 199 01144 /* YYNRULES -- Number of rules. */ 01145 #define YYNRULES 620 01146 /* YYNRULES -- Number of states. */ 01147 #define YYNSTATES 1057 01148 01149 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 01150 #define YYUNDEFTOK 2 01151 #define YYMAXUTOK 352 01152 01153 #define YYTRANSLATE(YYX) \ 01154 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 01155 01156 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 01157 static const yytype_uint8 yytranslate[] = 01158 { 01159 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01160 141, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01161 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01162 2, 2, 140, 127, 2, 2, 2, 125, 120, 2, 01163 136, 137, 123, 121, 134, 122, 133, 124, 2, 2, 01164 2, 2, 2, 2, 2, 2, 2, 2, 115, 139, 01165 117, 113, 116, 114, 2, 2, 2, 2, 2, 2, 01166 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01167 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01168 2, 132, 2, 138, 119, 2, 135, 2, 2, 2, 01169 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01170 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01171 2, 2, 2, 130, 118, 131, 128, 2, 79, 80, 01172 66, 67, 68, 2, 69, 83, 84, 74, 73, 70, 01173 71, 72, 77, 78, 81, 82, 2, 2, 2, 2, 01174 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01175 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01176 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01177 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01178 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01179 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01180 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01181 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01182 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01183 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01184 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 01185 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 01186 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 01187 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 01188 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 01189 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 01190 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 01191 65, 75, 76, 85, 86, 87, 88, 89, 90, 91, 01192 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 01193 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 01194 112, 126, 129 01195 }; 01196 01197 #if YYDEBUG 01198 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 01199 YYRHS. */ 01200 static const yytype_uint16 yyprhs[] = 01201 { 01202 0, 0, 3, 4, 7, 10, 12, 14, 18, 21, 01203 23, 24, 30, 35, 38, 40, 42, 46, 49, 51, 01204 52, 58, 59, 64, 68, 72, 76, 79, 83, 87, 01205 91, 95, 99, 104, 106, 110, 114, 121, 127, 133, 01206 139, 145, 149, 153, 157, 161, 163, 167, 171, 173, 01207 177, 181, 185, 188, 190, 192, 194, 196, 198, 203, 01208 204, 210, 212, 215, 219, 224, 230, 235, 241, 244, 01209 247, 250, 253, 256, 258, 262, 264, 268, 270, 273, 01210 277, 283, 286, 291, 294, 299, 301, 305, 307, 311, 01211 314, 318, 320, 324, 326, 328, 333, 337, 341, 345, 01212 349, 352, 354, 356, 358, 363, 367, 371, 375, 379, 01213 382, 384, 386, 388, 391, 393, 397, 399, 401, 403, 01214 405, 407, 409, 411, 413, 415, 417, 418, 423, 425, 01215 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 01216 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 01217 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 01218 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 01219 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 01220 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 01221 547, 549, 551, 553, 555, 557, 559, 561, 563, 565, 01222 569, 575, 579, 585, 592, 598, 604, 610, 616, 621, 01223 625, 629, 633, 637, 641, 645, 649, 653, 657, 662, 01224 667, 670, 673, 677, 681, 685, 689, 693, 697, 701, 01225 705, 709, 713, 717, 721, 725, 728, 731, 735, 739, 01226 743, 747, 748, 753, 760, 762, 764, 766, 769, 774, 01227 777, 781, 783, 785, 787, 789, 792, 797, 800, 802, 01228 805, 808, 813, 815, 816, 819, 822, 825, 827, 829, 01229 832, 836, 841, 845, 850, 853, 855, 857, 859, 861, 01230 863, 865, 867, 869, 871, 873, 875, 876, 881, 882, 01231 886, 887, 888, 894, 898, 902, 905, 909, 913, 915, 01232 920, 924, 926, 927, 934, 939, 943, 946, 948, 951, 01233 954, 961, 968, 969, 970, 978, 979, 980, 988, 994, 01234 999, 1000, 1001, 1011, 1012, 1019, 1020, 1021, 1030, 1031, 01235 1037, 1038, 1045, 1046, 1047, 1057, 1059, 1061, 1063, 1065, 01236 1067, 1069, 1071, 1073, 1075, 1077, 1079, 1081, 1083, 1085, 01237 1087, 1089, 1091, 1093, 1096, 1098, 1100, 1102, 1108, 1110, 01238 1113, 1115, 1117, 1119, 1123, 1125, 1129, 1131, 1136, 1143, 01239 1147, 1153, 1156, 1161, 1163, 1167, 1172, 1175, 1178, 1180, 01240 1183, 1184, 1191, 1200, 1205, 1212, 1217, 1220, 1227, 1230, 01241 1235, 1242, 1245, 1250, 1253, 1258, 1260, 1262, 1264, 1268, 01242 1270, 1275, 1277, 1282, 1284, 1288, 1290, 1292, 1293, 1294, 01243 1295, 1301, 1306, 1308, 1312, 1316, 1317, 1323, 1326, 1331, 01244 1337, 1343, 1346, 1347, 1353, 1354, 1360, 1364, 1365, 1370, 01245 1371, 1376, 1379, 1381, 1386, 1387, 1393, 1394, 1400, 1406, 01246 1408, 1410, 1417, 1419, 1421, 1423, 1425, 1428, 1430, 1433, 01247 1435, 1437, 1439, 1441, 1443, 1445, 1447, 1450, 1454, 1458, 01248 1462, 1466, 1470, 1471, 1475, 1477, 1480, 1484, 1488, 1489, 01249 1493, 1497, 1501, 1505, 1509, 1510, 1514, 1515, 1519, 1520, 01250 1523, 1524, 1527, 1528, 1531, 1533, 1534, 1538, 1539, 1540, 01251 1541, 1548, 1550, 1552, 1554, 1556, 1559, 1561, 1563, 1565, 01252 1567, 1571, 1573, 1575, 1578, 1581, 1583, 1585, 1587, 1589, 01253 1591, 1593, 1595, 1597, 1599, 1601, 1603, 1605, 1607, 1609, 01254 1611, 1613, 1615, 1617, 1619, 1620, 1625, 1628, 1632, 1635, 01255 1640, 1643, 1646, 1648, 1651, 1652, 1659, 1668, 1673, 1680, 01256 1685, 1692, 1695, 1700, 1707, 1710, 1715, 1718, 1723, 1725, 01257 1726, 1728, 1730, 1732, 1734, 1736, 1738, 1740, 1744, 1746, 01258 1750, 1753, 1756, 1758, 1762, 1764, 1768, 1770, 1772, 1775, 01259 1777, 1781, 1785, 1787, 1791, 1793, 1797, 1799, 1801, 1804, 01260 1806, 1808, 1810, 1813, 1816, 1818, 1820, 1821, 1826, 1828, 01261 1831, 1833, 1837, 1841, 1844, 1847, 1849, 1851, 1853, 1855, 01262 1857, 1859, 1861, 1863, 1865, 1867, 1869, 1871, 1872, 1874, 01263 1875, 1877, 1880, 1883, 1884, 1886, 1888, 1890, 1892, 1894, 01264 1897 01265 }; 01266 01267 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 01268 static const yytype_int16 yyrhs[] = 01269 { 01270 143, 0, -1, -1, 144, 145, -1, 146, 333, -1, 01271 340, -1, 147, -1, 146, 339, 147, -1, 1, 147, 01272 -1, 154, -1, -1, 47, 148, 130, 145, 131, -1, 01273 150, 262, 230, 265, -1, 151, 333, -1, 340, -1, 01274 152, -1, 151, 339, 152, -1, 1, 154, -1, 154, 01275 -1, -1, 47, 153, 130, 145, 131, -1, -1, 45, 01276 177, 155, 177, -1, 45, 54, 54, -1, 45, 54, 01277 64, -1, 45, 54, 63, -1, 6, 178, -1, 154, 01278 40, 158, -1, 154, 41, 158, -1, 154, 42, 158, 01279 -1, 154, 43, 158, -1, 154, 44, 154, -1, 48, 01280 130, 150, 131, -1, 156, -1, 165, 113, 159, -1, 01281 297, 87, 159, -1, 215, 132, 188, 336, 87, 159, 01282 -1, 215, 133, 52, 87, 159, -1, 215, 133, 56, 01283 87, 159, -1, 215, 85, 56, 87, 159, -1, 215, 01284 85, 52, 87, 159, -1, 298, 87, 159, -1, 172, 01285 113, 195, -1, 165, 113, 184, -1, 165, 113, 195, 01286 -1, 157, -1, 172, 113, 159, -1, 172, 113, 156, 01287 -1, 159, -1, 157, 37, 157, -1, 157, 38, 157, 01288 -1, 39, 334, 157, -1, 127, 159, -1, 182, -1, 01289 157, -1, 164, -1, 160, -1, 251, -1, 251, 332, 01290 330, 190, -1, -1, 94, 162, 238, 150, 131, -1, 01291 329, -1, 163, 190, -1, 163, 190, 161, -1, 215, 01292 133, 330, 190, -1, 215, 133, 330, 190, 161, -1, 01293 215, 85, 330, 190, -1, 215, 85, 330, 190, 161, 01294 -1, 32, 190, -1, 31, 190, -1, 30, 189, -1, 01295 21, 189, -1, 22, 189, -1, 167, -1, 89, 166, 01296 335, -1, 167, -1, 89, 166, 335, -1, 169, -1, 01297 169, 168, -1, 169, 95, 171, -1, 169, 95, 171, 01298 134, 170, -1, 169, 95, -1, 169, 95, 134, 170, 01299 -1, 95, 171, -1, 95, 171, 134, 170, -1, 95, 01300 -1, 95, 134, 170, -1, 171, -1, 89, 166, 335, 01301 -1, 168, 134, -1, 169, 168, 134, -1, 168, -1, 01302 170, 134, 168, -1, 294, -1, 295, -1, 215, 132, 01303 188, 336, -1, 215, 133, 52, -1, 215, 85, 52, 01304 -1, 215, 133, 56, -1, 215, 85, 56, -1, 86, 01305 56, -1, 298, -1, 294, -1, 295, -1, 215, 132, 01306 188, 336, -1, 215, 133, 52, -1, 215, 85, 52, 01307 -1, 215, 133, 56, -1, 215, 85, 56, -1, 86, 01308 56, -1, 298, -1, 52, -1, 56, -1, 86, 173, 01309 -1, 173, -1, 215, 85, 173, -1, 52, -1, 56, 01310 -1, 53, -1, 180, -1, 181, -1, 175, -1, 290, 01311 -1, 176, -1, 292, -1, 177, -1, -1, 178, 134, 01312 179, 177, -1, 118, -1, 119, -1, 120, -1, 69, 01313 -1, 70, -1, 71, -1, 77, -1, 78, -1, 116, 01314 -1, 73, -1, 117, -1, 74, -1, 72, -1, 83, 01315 -1, 84, -1, 121, -1, 122, -1, 123, -1, 95, 01316 -1, 124, -1, 125, -1, 68, -1, 96, -1, 127, 01317 -1, 128, -1, 66, -1, 67, -1, 81, -1, 82, 01318 -1, 135, -1, 49, -1, 50, -1, 51, -1, 47, 01319 -1, 48, -1, 45, -1, 37, -1, 7, -1, 21, 01320 -1, 16, -1, 3, -1, 5, -1, 46, -1, 26, 01321 -1, 15, -1, 14, -1, 10, -1, 9, -1, 36, 01322 -1, 20, -1, 25, -1, 4, -1, 22, -1, 34, 01323 -1, 39, -1, 38, -1, 23, -1, 8, -1, 24, 01324 -1, 30, -1, 33, -1, 32, -1, 13, -1, 35, 01325 -1, 6, -1, 17, -1, 31, -1, 11, -1, 12, 01326 -1, 18, -1, 19, -1, 172, 113, 182, -1, 172, 01327 113, 182, 44, 182, -1, 297, 87, 182, -1, 297, 01328 87, 182, 44, 182, -1, 215, 132, 188, 336, 87, 01329 182, -1, 215, 133, 52, 87, 182, -1, 215, 133, 01330 56, 87, 182, -1, 215, 85, 52, 87, 182, -1, 01331 215, 85, 56, 87, 182, -1, 86, 56, 87, 182, 01332 -1, 298, 87, 182, -1, 182, 79, 182, -1, 182, 01333 80, 182, -1, 182, 121, 182, -1, 182, 122, 182, 01334 -1, 182, 123, 182, -1, 182, 124, 182, -1, 182, 01335 125, 182, -1, 182, 68, 182, -1, 126, 59, 68, 01336 182, -1, 126, 60, 68, 182, -1, 66, 182, -1, 01337 67, 182, -1, 182, 118, 182, -1, 182, 119, 182, 01338 -1, 182, 120, 182, -1, 182, 69, 182, -1, 182, 01339 116, 182, -1, 182, 73, 182, -1, 182, 117, 182, 01340 -1, 182, 74, 182, -1, 182, 70, 182, -1, 182, 01341 71, 182, -1, 182, 72, 182, -1, 182, 77, 182, 01342 -1, 182, 78, 182, -1, 127, 182, -1, 128, 182, 01343 -1, 182, 83, 182, -1, 182, 84, 182, -1, 182, 01344 75, 182, -1, 182, 76, 182, -1, -1, 46, 334, 01345 183, 182, -1, 182, 114, 182, 334, 115, 182, -1, 01346 196, -1, 182, -1, 340, -1, 194, 337, -1, 194, 01347 134, 327, 337, -1, 327, 337, -1, 136, 188, 335, 01348 -1, 340, -1, 186, -1, 340, -1, 189, -1, 194, 01349 134, -1, 194, 134, 327, 134, -1, 327, 134, -1, 01350 164, -1, 194, 193, -1, 327, 193, -1, 194, 134, 01351 327, 193, -1, 192, -1, -1, 191, 189, -1, 97, 01352 184, -1, 134, 192, -1, 340, -1, 184, -1, 95, 01353 184, -1, 194, 134, 184, -1, 194, 134, 95, 184, 01354 -1, 194, 134, 184, -1, 194, 134, 95, 184, -1, 01355 95, 184, -1, 266, -1, 267, -1, 270, -1, 271, 01356 -1, 272, -1, 277, -1, 275, -1, 278, -1, 296, 01357 -1, 298, -1, 53, -1, -1, 216, 197, 149, 226, 01358 -1, -1, 90, 198, 335, -1, -1, -1, 90, 199, 01359 157, 200, 335, -1, 89, 150, 137, -1, 215, 85, 01360 56, -1, 86, 56, -1, 92, 185, 138, -1, 93, 01361 326, 131, -1, 30, -1, 31, 136, 189, 335, -1, 01362 31, 136, 335, -1, 31, -1, -1, 46, 334, 136, 01363 201, 157, 335, -1, 39, 136, 157, 335, -1, 39, 01364 136, 335, -1, 163, 257, -1, 252, -1, 252, 257, 01365 -1, 98, 243, -1, 217, 158, 227, 150, 229, 226, 01366 -1, 218, 158, 227, 150, 230, 226, -1, -1, -1, 01367 219, 202, 158, 228, 203, 150, 226, -1, -1, -1, 01368 220, 204, 158, 228, 205, 150, 226, -1, 221, 158, 01369 333, 260, 226, -1, 221, 333, 260, 226, -1, -1, 01370 -1, 222, 231, 25, 206, 158, 228, 207, 150, 226, 01371 -1, -1, 223, 174, 299, 208, 149, 226, -1, -1, 01372 -1, 223, 83, 157, 209, 338, 210, 149, 226, -1, 01373 -1, 224, 174, 211, 149, 226, -1, -1, 225, 175, 01374 212, 301, 149, 226, -1, -1, -1, 225, 324, 332, 01375 213, 175, 214, 301, 149, 226, -1, 21, -1, 22, 01376 -1, 23, -1, 24, -1, 196, -1, 7, -1, 11, 01377 -1, 12, -1, 18, -1, 19, -1, 16, -1, 20, 01378 -1, 3, -1, 4, -1, 5, -1, 10, -1, 338, 01379 -1, 13, -1, 338, 13, -1, 338, -1, 27, -1, 01380 230, -1, 14, 158, 227, 150, 229, -1, 340, -1, 01381 15, 150, -1, 172, -1, 165, -1, 306, -1, 89, 01382 234, 335, -1, 232, -1, 233, 134, 232, -1, 233, 01383 -1, 233, 134, 95, 306, -1, 233, 134, 95, 306, 01384 134, 233, -1, 233, 134, 95, -1, 233, 134, 95, 01385 134, 233, -1, 95, 306, -1, 95, 306, 134, 233, 01386 -1, 95, -1, 95, 134, 233, -1, 311, 134, 314, 01387 323, -1, 311, 323, -1, 314, 323, -1, 322, -1, 01388 134, 235, -1, -1, 308, 134, 317, 134, 320, 236, 01389 -1, 308, 134, 317, 134, 320, 134, 308, 236, -1, 01390 308, 134, 317, 236, -1, 308, 134, 317, 134, 308, 01391 236, -1, 308, 134, 320, 236, -1, 308, 134, -1, 01392 308, 134, 320, 134, 308, 236, -1, 308, 236, -1, 01393 317, 134, 320, 236, -1, 317, 134, 320, 134, 308, 01394 236, -1, 317, 236, -1, 317, 134, 308, 236, -1, 01395 320, 236, -1, 320, 134, 308, 236, -1, 235, -1, 01396 340, -1, 239, -1, 118, 240, 118, -1, 76, -1, 01397 118, 237, 240, 118, -1, 334, -1, 334, 139, 241, 01398 334, -1, 242, -1, 241, 134, 242, -1, 52, -1, 01399 305, -1, -1, -1, -1, 244, 245, 247, 246, 248, 01400 -1, 136, 304, 240, 137, -1, 304, -1, 111, 150, 01401 131, -1, 29, 150, 10, -1, -1, 28, 250, 238, 01402 150, 10, -1, 164, 249, -1, 251, 332, 330, 187, 01403 -1, 251, 332, 330, 187, 257, -1, 251, 332, 330, 01404 190, 249, -1, 163, 186, -1, -1, 215, 133, 330, 01405 253, 187, -1, -1, 215, 85, 330, 254, 186, -1, 01406 215, 85, 331, -1, -1, 215, 133, 255, 186, -1, 01407 -1, 215, 85, 256, 186, -1, 32, 186, -1, 32, 01408 -1, 215, 132, 188, 336, -1, -1, 130, 258, 238, 01409 150, 131, -1, -1, 26, 259, 238, 150, 10, -1, 01410 17, 194, 227, 150, 261, -1, 230, -1, 260, -1, 01411 8, 263, 264, 227, 150, 262, -1, 340, -1, 184, 01412 -1, 195, -1, 340, -1, 88, 172, -1, 340, -1, 01413 9, 150, -1, 340, -1, 293, -1, 290, -1, 292, 01414 -1, 268, -1, 62, -1, 269, -1, 268, 269, -1, 01415 100, 281, 110, -1, 101, 282, 110, -1, 102, 283, 01416 65, -1, 103, 140, 110, -1, 103, 273, 110, -1, 01417 -1, 273, 274, 140, -1, 284, -1, 274, 284, -1, 01418 105, 140, 110, -1, 105, 276, 110, -1, -1, 276, 01419 274, 140, -1, 104, 140, 110, -1, 104, 279, 110, 01420 -1, 106, 140, 110, -1, 106, 280, 110, -1, -1, 01421 279, 61, 140, -1, -1, 280, 61, 140, -1, -1, 01422 281, 284, -1, -1, 282, 284, -1, -1, 283, 284, 01423 -1, 61, -1, -1, 109, 285, 289, -1, -1, -1, 01424 -1, 107, 286, 287, 288, 150, 108, -1, 54, -1, 01425 55, -1, 57, -1, 298, -1, 99, 291, -1, 175, 01426 -1, 55, -1, 54, -1, 57, -1, 99, 282, 110, 01427 -1, 59, -1, 60, -1, 126, 59, -1, 126, 60, 01428 -1, 52, -1, 55, -1, 54, -1, 56, -1, 57, 01429 -1, 34, -1, 33, -1, 35, -1, 36, -1, 50, 01430 -1, 49, -1, 51, -1, 294, -1, 295, -1, 294, 01431 -1, 295, -1, 63, -1, 64, -1, 338, -1, -1, 01432 117, 300, 158, 338, -1, 1, 338, -1, 136, 304, 01433 335, -1, 304, 338, -1, 312, 134, 314, 323, -1, 01434 312, 323, -1, 314, 323, -1, 322, -1, 134, 302, 01435 -1, -1, 308, 134, 318, 134, 320, 303, -1, 308, 01436 134, 318, 134, 320, 134, 308, 303, -1, 308, 134, 01437 318, 303, -1, 308, 134, 318, 134, 308, 303, -1, 01438 308, 134, 320, 303, -1, 308, 134, 320, 134, 308, 01439 303, -1, 308, 303, -1, 318, 134, 320, 303, -1, 01440 318, 134, 320, 134, 308, 303, -1, 318, 303, -1, 01441 318, 134, 308, 303, -1, 320, 303, -1, 320, 134, 01442 308, 303, -1, 302, -1, -1, 56, -1, 55, -1, 01443 54, -1, 57, -1, 305, -1, 52, -1, 306, -1, 01444 89, 234, 335, -1, 307, -1, 308, 134, 307, -1, 01445 58, 184, -1, 58, 215, -1, 310, -1, 311, 134, 01446 310, -1, 309, -1, 312, 134, 309, -1, 68, -1, 01447 96, -1, 313, 52, -1, 313, -1, 52, 113, 184, 01448 -1, 52, 113, 215, -1, 316, -1, 317, 134, 316, 01449 -1, 315, -1, 318, 134, 315, -1, 123, -1, 95, 01450 -1, 319, 52, -1, 319, -1, 120, -1, 97, -1, 01451 321, 52, -1, 134, 322, -1, 340, -1, 296, -1, 01452 -1, 136, 325, 157, 335, -1, 340, -1, 327, 337, 01453 -1, 328, -1, 327, 134, 328, -1, 184, 88, 184, 01454 -1, 58, 184, -1, 96, 184, -1, 52, -1, 56, 01455 -1, 53, -1, 52, -1, 56, -1, 53, -1, 180, 01456 -1, 52, -1, 53, -1, 180, -1, 133, -1, 85, 01457 -1, -1, 339, -1, -1, 141, -1, 334, 137, -1, 01458 334, 138, -1, -1, 141, -1, 134, -1, 139, -1, 01459 141, -1, 338, -1, 339, 139, -1, -1 01460 }; 01461 01462 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 01463 static const yytype_uint16 yyrline[] = 01464 { 01465 0, 855, 855, 855, 886, 897, 906, 914, 922, 928, 01466 930, 929, 950, 983, 994, 1003, 1011, 1019, 1025, 1030, 01467 1029, 1050, 1050, 1058, 1066, 1077, 1087, 1095, 1104, 1113, 01468 1126, 1139, 1148, 1160, 1161, 1171, 1176, 1197, 1202, 1207, 01469 1217, 1222, 1232, 1241, 1250, 1259, 1262, 1271, 1283, 1284, 01470 1292, 1300, 1308, 1316, 1319, 1331, 1332, 1335, 1336, 1348, 01471 1347, 1369, 1379, 1388, 1401, 1410, 1422, 1431, 1443, 1452, 01472 1461, 1469, 1477, 1487, 1488, 1498, 1499, 1509, 1517, 1525, 01473 1533, 1542, 1550, 1559, 1567, 1576, 1584, 1595, 1596, 1606, 01474 1614, 1624, 1632, 1642, 1646, 1650, 1658, 1666, 1674, 1682, 01475 1694, 1704, 1716, 1725, 1734, 1742, 1750, 1758, 1766, 1779, 01476 1792, 1803, 1811, 1814, 1822, 1830, 1840, 1841, 1842, 1843, 01477 1848, 1859, 1860, 1863, 1871, 1874, 1882, 1882, 1892, 1893, 01478 1894, 1895, 1896, 1897, 1898, 1899, 1900, 1901, 1902, 1903, 01479 1904, 1905, 1906, 1907, 1908, 1909, 1910, 1911, 1912, 1913, 01480 1914, 1915, 1916, 1917, 1918, 1919, 1920, 1921, 1924, 1924, 01481 1924, 1925, 1925, 1926, 1926, 1926, 1927, 1927, 1927, 1927, 01482 1928, 1928, 1928, 1928, 1929, 1929, 1929, 1930, 1930, 1930, 01483 1930, 1931, 1931, 1931, 1931, 1932, 1932, 1932, 1932, 1933, 01484 1933, 1933, 1933, 1934, 1934, 1934, 1934, 1935, 1935, 1938, 01485 1947, 1957, 1962, 1972, 1998, 2003, 2008, 2013, 2023, 2033, 01486 2044, 2058, 2072, 2080, 2088, 2096, 2104, 2112, 2120, 2129, 01487 2138, 2146, 2154, 2162, 2170, 2178, 2186, 2194, 2202, 2210, 01488 2218, 2226, 2234, 2242, 2253, 2261, 2269, 2277, 2285, 2293, 01489 2301, 2309, 2309, 2319, 2329, 2335, 2347, 2348, 2352, 2360, 01490 2370, 2380, 2381, 2384, 2385, 2386, 2390, 2398, 2408, 2417, 01491 2425, 2435, 2444, 2453, 2453, 2465, 2475, 2479, 2485, 2493, 01492 2501, 2515, 2531, 2545, 2560, 2570, 2571, 2572, 2573, 2574, 01493 2575, 2576, 2577, 2578, 2579, 2580, 2589, 2588, 2616, 2616, 01494 2625, 2629, 2624, 2638, 2646, 2654, 2662, 2675, 2683, 2691, 01495 2699, 2707, 2715, 2715, 2725, 2733, 2741, 2751, 2752, 2762, 01496 2766, 2778, 2790, 2790, 2790, 2801, 2801, 2801, 2812, 2823, 01497 2832, 2834, 2831, 2898, 2897, 2919, 2924, 2918, 2943, 2942, 01498 2964, 2963, 2986, 2987, 2986, 3007, 3015, 3023, 3031, 3041, 01499 3053, 3059, 3065, 3071, 3077, 3083, 3089, 3095, 3101, 3107, 01500 3117, 3123, 3128, 3129, 3136, 3141, 3144, 3145, 3158, 3159, 01501 3169, 3170, 3173, 3181, 3191, 3199, 3209, 3217, 3226, 3235, 01502 3243, 3251, 3260, 3272, 3280, 3291, 3295, 3299, 3303, 3309, 01503 3314, 3319, 3323, 3327, 3331, 3335, 3339, 3347, 3351, 3355, 01504 3359, 3363, 3367, 3371, 3375, 3379, 3385, 3386, 3392, 3401, 01505 3410, 3421, 3425, 3435, 3442, 3451, 3459, 3465, 3468, 3473, 01506 3465, 3489, 3497, 3507, 3511, 3518, 3517, 3538, 3554, 3563, 01507 3575, 3589, 3599, 3598, 3615, 3614, 3630, 3639, 3638, 3656, 01508 3655, 3672, 3680, 3688, 3703, 3702, 3722, 3721, 3742, 3754, 01509 3755, 3758, 3777, 3780, 3788, 3796, 3799, 3803, 3806, 3814, 01510 3817, 3818, 3826, 3829, 3846, 3847, 3848, 3858, 3868, 3895, 01511 3960, 3969, 3980, 3987, 3997, 4005, 4015, 4024, 4035, 4042, 01512 4054, 4063, 4073, 4082, 4093, 4100, 4111, 4118, 4133, 4140, 01513 4151, 4158, 4169, 4176, 4205, 4207, 4206, 4223, 4229, 4234, 01514 4222, 4253, 4261, 4269, 4277, 4280, 4291, 4292, 4293, 4294, 01515 4297, 4308, 4309, 4310, 4318, 4328, 4329, 4330, 4331, 4332, 01516 4335, 4336, 4337, 4338, 4339, 4340, 4341, 4344, 4357, 4367, 01517 4375, 4385, 4386, 4389, 4398, 4397, 4406, 4418, 4428, 4436, 01518 4440, 4444, 4448, 4454, 4459, 4464, 4468, 4472, 4476, 4480, 01519 4484, 4488, 4492, 4496, 4500, 4504, 4508, 4512, 4516, 4521, 01520 4527, 4536, 4545, 4554, 4565, 4566, 4573, 4582, 4601, 4608, 01521 4621, 4633, 4645, 4653, 4670, 4678, 4694, 4695, 4698, 4703, 01522 4709, 4721, 4733, 4741, 4757, 4765, 4781, 4782, 4785, 4798, 01523 4809, 4810, 4813, 4830, 4834, 4844, 4854, 4854, 4883, 4884, 01524 4894, 4901, 4911, 4919, 4927, 4939, 4940, 4941, 4944, 4945, 01525 4946, 4947, 4950, 4951, 4952, 4955, 4960, 4967, 4968, 4971, 01526 4972, 4975, 4978, 4981, 4982, 4983, 4986, 4987, 4990, 4991, 01527 4995 01528 }; 01529 #endif 01530 01531 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE 01532 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 01533 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 01534 static const char *const yytname[] = 01535 { 01536 "\"end-of-input\"", "error", "$undefined", "keyword_class", 01537 "keyword_module", "keyword_def", "keyword_undef", "keyword_begin", 01538 "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if", 01539 "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else", 01540 "keyword_case", "keyword_when", "keyword_while", "keyword_until", 01541 "keyword_for", "keyword_break", "keyword_next", "keyword_redo", 01542 "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond", 01543 "keyword_do_block", "keyword_do_LAMBDA", "keyword_return", 01544 "keyword_yield", "keyword_super", "keyword_self", "keyword_nil", 01545 "keyword_true", "keyword_false", "keyword_and", "keyword_or", 01546 "keyword_not", "modifier_if", "modifier_unless", "modifier_while", 01547 "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined", 01548 "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__", 01549 "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", 01550 "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tSTRING_CONTENT", 01551 "tCHAR", "tNTH_REF", "tBACK_REF", "tREGEXP_END", "\"unary+\"", 01552 "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"", "\"===\"", "\"!=\"", 01553 "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"", "\"!~\"", "\"..\"", 01554 "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"", "\"::\"", 01555 "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"", "\"( arg\"", 01556 "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"", "\"**arg\"", "\"&\"", 01557 "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", 01558 "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG", 01559 "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG", 01560 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", 01561 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN", 01562 "'{'", "'}'", "'['", "'.'", "','", "'`'", "'('", "')'", "']'", "';'", 01563 "' '", "'\\n'", "$accept", "program", "$@1", "top_compstmt", "top_stmts", 01564 "top_stmt", "$@2", "bodystmt", "compstmt", "stmts", "stmt_or_begin", 01565 "$@3", "stmt", "$@4", "command_asgn", "expr", "expr_value", 01566 "command_call", "block_command", "cmd_brace_block", "@5", "fcall", 01567 "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", 01568 "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", 01569 "fitem", "undef_list", "$@6", "op", "reswords", "arg", "$@7", 01570 "arg_value", "aref_args", "paren_args", "opt_paren_args", 01571 "opt_call_args", "call_args", "command_args", "@8", "block_arg", 01572 "opt_block_arg", "args", "mrhs", "primary", "@9", "$@10", "$@11", "$@12", 01573 "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "@20", "@21", 01574 "@22", "@23", "@24", "$@25", "$@26", "primary_value", "k_begin", "k_if", 01575 "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class", 01576 "k_module", "k_def", "k_end", "then", "do", "if_tail", "opt_else", 01577 "for_var", "f_marg", "f_marg_list", "f_margs", "block_args_tail", 01578 "opt_block_args_tail", "block_param", "opt_block_param", 01579 "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@27", 01580 "@28", "@29", "f_larglist", "lambda_body", "do_block", "@30", 01581 "block_call", "method_call", "@31", "@32", "@33", "@34", "brace_block", 01582 "@35", "@36", "case_body", "cases", "opt_rescue", "exc_list", "exc_var", 01583 "opt_ensure", "literal", "strings", "string", "string1", "xstring", 01584 "regexp", "words", "word_list", "word", "symbols", "symbol_list", 01585 "qwords", "qsymbols", "qword_list", "qsym_list", "string_contents", 01586 "xstring_contents", "regexp_contents", "string_content", "@37", "@38", 01587 "@39", "@40", "string_dvar", "symbol", "sym", "dsym", "numeric", 01588 "user_variable", "keyword_variable", "var_ref", "var_lhs", "backref", 01589 "superclass", "$@41", "f_arglist", "args_tail", "opt_args_tail", 01590 "f_args", "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_kw", 01591 "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest", 01592 "f_opt", "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark", 01593 "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg", 01594 "singleton", "$@42", "assoc_list", "assocs", "assoc", "operation", 01595 "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl", 01596 "rparen", "rbracket", "trailer", "term", "terms", "none", 0 01597 }; 01598 #endif 01599 01600 # ifdef YYPRINT 01601 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 01602 token YYLEX-NUM. */ 01603 static const yytype_uint16 yytoknum[] = 01604 { 01605 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 01606 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 01607 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 01608 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 01609 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 01610 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 01611 315, 316, 317, 318, 319, 320, 130, 131, 132, 134, 01612 139, 140, 141, 138, 137, 321, 322, 142, 143, 128, 01613 129, 144, 145, 135, 136, 323, 324, 325, 326, 327, 01614 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 01615 338, 339, 340, 341, 342, 343, 344, 345, 346, 347, 01616 348, 349, 350, 61, 63, 58, 62, 60, 124, 94, 01617 38, 43, 45, 42, 47, 37, 351, 33, 126, 352, 01618 123, 125, 91, 46, 44, 96, 40, 41, 93, 59, 01619 32, 10 01620 }; 01621 # endif 01622 01623 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 01624 static const yytype_uint16 yyr1[] = 01625 { 01626 0, 142, 144, 143, 145, 146, 146, 146, 146, 147, 01627 148, 147, 149, 150, 151, 151, 151, 151, 152, 153, 01628 152, 155, 154, 154, 154, 154, 154, 154, 154, 154, 01629 154, 154, 154, 154, 154, 154, 154, 154, 154, 154, 01630 154, 154, 154, 154, 154, 154, 156, 156, 157, 157, 01631 157, 157, 157, 157, 158, 159, 159, 160, 160, 162, 01632 161, 163, 164, 164, 164, 164, 164, 164, 164, 164, 01633 164, 164, 164, 165, 165, 166, 166, 167, 167, 167, 01634 167, 167, 167, 167, 167, 167, 167, 168, 168, 169, 01635 169, 170, 170, 171, 171, 171, 171, 171, 171, 171, 01636 171, 171, 172, 172, 172, 172, 172, 172, 172, 172, 01637 172, 173, 173, 174, 174, 174, 175, 175, 175, 175, 01638 175, 176, 176, 177, 177, 178, 179, 178, 180, 180, 01639 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 01640 180, 180, 180, 180, 180, 180, 180, 180, 180, 180, 01641 180, 180, 180, 180, 180, 180, 180, 180, 181, 181, 01642 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 01643 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 01644 181, 181, 181, 181, 181, 181, 181, 181, 181, 181, 01645 181, 181, 181, 181, 181, 181, 181, 181, 181, 182, 01646 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 01647 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 01648 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 01649 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 01650 182, 183, 182, 182, 182, 184, 185, 185, 185, 185, 01651 186, 187, 187, 188, 188, 188, 188, 188, 189, 189, 01652 189, 189, 189, 191, 190, 192, 193, 193, 194, 194, 01653 194, 194, 195, 195, 195, 196, 196, 196, 196, 196, 01654 196, 196, 196, 196, 196, 196, 197, 196, 198, 196, 01655 199, 200, 196, 196, 196, 196, 196, 196, 196, 196, 01656 196, 196, 201, 196, 196, 196, 196, 196, 196, 196, 01657 196, 196, 202, 203, 196, 204, 205, 196, 196, 196, 01658 206, 207, 196, 208, 196, 209, 210, 196, 211, 196, 01659 212, 196, 213, 214, 196, 196, 196, 196, 196, 215, 01660 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 01661 226, 227, 227, 227, 228, 228, 229, 229, 230, 230, 01662 231, 231, 232, 232, 233, 233, 234, 234, 234, 234, 01663 234, 234, 234, 234, 234, 235, 235, 235, 235, 236, 01664 236, 237, 237, 237, 237, 237, 237, 237, 237, 237, 01665 237, 237, 237, 237, 237, 237, 238, 238, 239, 239, 01666 239, 240, 240, 241, 241, 242, 242, 244, 245, 246, 01667 243, 247, 247, 248, 248, 250, 249, 251, 251, 251, 01668 251, 252, 253, 252, 254, 252, 252, 255, 252, 256, 01669 252, 252, 252, 252, 258, 257, 259, 257, 260, 261, 01670 261, 262, 262, 263, 263, 263, 264, 264, 265, 265, 01671 266, 266, 266, 267, 268, 268, 268, 269, 270, 271, 01672 272, 272, 273, 273, 274, 274, 275, 275, 276, 276, 01673 277, 277, 278, 278, 279, 279, 280, 280, 281, 281, 01674 282, 282, 283, 283, 284, 285, 284, 286, 287, 288, 01675 284, 289, 289, 289, 289, 290, 291, 291, 291, 291, 01676 292, 293, 293, 293, 293, 294, 294, 294, 294, 294, 01677 295, 295, 295, 295, 295, 295, 295, 296, 296, 297, 01678 297, 298, 298, 299, 300, 299, 299, 301, 301, 302, 01679 302, 302, 302, 303, 303, 304, 304, 304, 304, 304, 01680 304, 304, 304, 304, 304, 304, 304, 304, 304, 304, 01681 305, 305, 305, 305, 306, 306, 307, 307, 308, 308, 01682 309, 310, 311, 311, 312, 312, 313, 313, 314, 314, 01683 315, 316, 317, 317, 318, 318, 319, 319, 320, 320, 01684 321, 321, 322, 323, 323, 324, 325, 324, 326, 326, 01685 327, 327, 328, 328, 328, 329, 329, 329, 330, 330, 01686 330, 330, 331, 331, 331, 332, 332, 333, 333, 334, 01687 334, 335, 336, 337, 337, 337, 338, 338, 339, 339, 01688 340 01689 }; 01690 01691 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 01692 static const yytype_uint8 yyr2[] = 01693 { 01694 0, 2, 0, 2, 2, 1, 1, 3, 2, 1, 01695 0, 5, 4, 2, 1, 1, 3, 2, 1, 0, 01696 5, 0, 4, 3, 3, 3, 2, 3, 3, 3, 01697 3, 3, 4, 1, 3, 3, 6, 5, 5, 5, 01698 5, 3, 3, 3, 3, 1, 3, 3, 1, 3, 01699 3, 3, 2, 1, 1, 1, 1, 1, 4, 0, 01700 5, 1, 2, 3, 4, 5, 4, 5, 2, 2, 01701 2, 2, 2, 1, 3, 1, 3, 1, 2, 3, 01702 5, 2, 4, 2, 4, 1, 3, 1, 3, 2, 01703 3, 1, 3, 1, 1, 4, 3, 3, 3, 3, 01704 2, 1, 1, 1, 4, 3, 3, 3, 3, 2, 01705 1, 1, 1, 2, 1, 3, 1, 1, 1, 1, 01706 1, 1, 1, 1, 1, 1, 0, 4, 1, 1, 01707 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01708 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01709 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01710 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01711 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01712 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01713 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 01714 5, 3, 5, 6, 5, 5, 5, 5, 4, 3, 01715 3, 3, 3, 3, 3, 3, 3, 3, 4, 4, 01716 2, 2, 3, 3, 3, 3, 3, 3, 3, 3, 01717 3, 3, 3, 3, 3, 2, 2, 3, 3, 3, 01718 3, 0, 4, 6, 1, 1, 1, 2, 4, 2, 01719 3, 1, 1, 1, 1, 2, 4, 2, 1, 2, 01720 2, 4, 1, 0, 2, 2, 2, 1, 1, 2, 01721 3, 4, 3, 4, 2, 1, 1, 1, 1, 1, 01722 1, 1, 1, 1, 1, 1, 0, 4, 0, 3, 01723 0, 0, 5, 3, 3, 2, 3, 3, 1, 4, 01724 3, 1, 0, 6, 4, 3, 2, 1, 2, 2, 01725 6, 6, 0, 0, 7, 0, 0, 7, 5, 4, 01726 0, 0, 9, 0, 6, 0, 0, 8, 0, 5, 01727 0, 6, 0, 0, 9, 1, 1, 1, 1, 1, 01728 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01729 1, 1, 1, 2, 1, 1, 1, 5, 1, 2, 01730 1, 1, 1, 3, 1, 3, 1, 4, 6, 3, 01731 5, 2, 4, 1, 3, 4, 2, 2, 1, 2, 01732 0, 6, 8, 4, 6, 4, 2, 6, 2, 4, 01733 6, 2, 4, 2, 4, 1, 1, 1, 3, 1, 01734 4, 1, 4, 1, 3, 1, 1, 0, 0, 0, 01735 5, 4, 1, 3, 3, 0, 5, 2, 4, 5, 01736 5, 2, 0, 5, 0, 5, 3, 0, 4, 0, 01737 4, 2, 1, 4, 0, 5, 0, 5, 5, 1, 01738 1, 6, 1, 1, 1, 1, 2, 1, 2, 1, 01739 1, 1, 1, 1, 1, 1, 2, 3, 3, 3, 01740 3, 3, 0, 3, 1, 2, 3, 3, 0, 3, 01741 3, 3, 3, 3, 0, 3, 0, 3, 0, 2, 01742 0, 2, 0, 2, 1, 0, 3, 0, 0, 0, 01743 6, 1, 1, 1, 1, 2, 1, 1, 1, 1, 01744 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, 01745 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01746 1, 1, 1, 1, 0, 4, 2, 3, 2, 4, 01747 2, 2, 1, 2, 0, 6, 8, 4, 6, 4, 01748 6, 2, 4, 6, 2, 4, 2, 4, 1, 0, 01749 1, 1, 1, 1, 1, 1, 1, 3, 1, 3, 01750 2, 2, 1, 3, 1, 3, 1, 1, 2, 1, 01751 3, 3, 1, 3, 1, 3, 1, 1, 2, 1, 01752 1, 1, 2, 2, 1, 1, 0, 4, 1, 2, 01753 1, 3, 3, 2, 2, 1, 1, 1, 1, 1, 01754 1, 1, 1, 1, 1, 1, 1, 0, 1, 0, 01755 1, 2, 2, 0, 1, 1, 1, 1, 1, 2, 01756 0 01757 }; 01758 01759 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM. 01760 Performed when YYTABLE doesn't specify something else to do. Zero 01761 means the default is an error. */ 01762 static const yytype_uint16 yydefact[] = 01763 { 01764 2, 0, 0, 1, 0, 347, 348, 349, 0, 340, 01765 341, 342, 345, 343, 344, 346, 335, 336, 337, 338, 01766 298, 263, 263, 511, 510, 512, 513, 609, 0, 609, 01767 10, 0, 515, 514, 516, 595, 597, 507, 506, 596, 01768 509, 501, 502, 454, 521, 522, 0, 0, 0, 0, 01769 290, 620, 620, 85, 407, 480, 478, 480, 482, 462, 01770 474, 468, 476, 0, 0, 0, 3, 607, 6, 9, 01771 33, 45, 48, 56, 263, 55, 0, 73, 0, 77, 01772 87, 0, 53, 244, 0, 286, 0, 0, 312, 315, 01773 607, 0, 0, 0, 0, 57, 307, 275, 276, 453, 01774 455, 277, 278, 279, 281, 280, 282, 451, 452, 450, 01775 517, 518, 283, 0, 284, 61, 5, 8, 168, 179, 01776 169, 192, 165, 185, 175, 174, 195, 196, 190, 173, 01777 172, 167, 193, 197, 198, 177, 166, 180, 184, 186, 01778 178, 171, 187, 194, 189, 188, 181, 191, 176, 164, 01779 183, 182, 163, 170, 161, 162, 158, 159, 160, 116, 01780 118, 117, 153, 154, 149, 131, 132, 133, 140, 137, 01781 139, 134, 135, 155, 156, 141, 142, 146, 150, 136, 01782 138, 128, 129, 130, 143, 144, 145, 147, 148, 151, 01783 152, 157, 121, 123, 125, 26, 119, 120, 122, 124, 01784 0, 0, 0, 0, 0, 0, 0, 0, 258, 0, 01785 245, 268, 71, 262, 620, 0, 517, 518, 0, 284, 01786 620, 590, 72, 70, 609, 69, 0, 620, 431, 68, 01787 609, 610, 0, 0, 21, 241, 0, 0, 335, 336, 01788 298, 301, 432, 0, 220, 0, 221, 295, 0, 19, 01789 0, 0, 607, 15, 18, 609, 75, 14, 609, 0, 01790 0, 613, 613, 246, 0, 0, 613, 588, 609, 0, 01791 0, 0, 83, 339, 0, 93, 94, 101, 309, 408, 01792 498, 497, 499, 496, 0, 495, 0, 0, 0, 0, 01793 0, 0, 0, 0, 0, 0, 0, 503, 504, 52, 01794 235, 236, 616, 617, 4, 618, 608, 0, 0, 0, 01795 0, 0, 0, 0, 436, 434, 421, 62, 306, 415, 01796 417, 0, 89, 0, 81, 78, 0, 0, 0, 0, 01797 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01798 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01799 0, 0, 0, 429, 620, 427, 0, 54, 0, 0, 01800 0, 0, 607, 0, 608, 0, 361, 360, 0, 0, 01801 517, 518, 284, 111, 112, 0, 0, 114, 0, 0, 01802 517, 518, 284, 328, 188, 181, 191, 176, 158, 159, 01803 160, 116, 117, 586, 330, 585, 0, 606, 605, 0, 01804 308, 456, 0, 0, 126, 593, 295, 269, 594, 265, 01805 0, 0, 0, 259, 267, 429, 620, 427, 0, 0, 01806 0, 260, 609, 0, 300, 264, 609, 254, 620, 620, 01807 253, 609, 305, 51, 23, 25, 24, 0, 302, 0, 01808 0, 0, 429, 427, 0, 17, 0, 609, 293, 13, 01809 608, 74, 289, 291, 296, 615, 614, 247, 615, 249, 01810 297, 589, 0, 100, 503, 504, 91, 86, 0, 429, 01811 620, 427, 549, 484, 487, 485, 500, 481, 457, 479, 01812 458, 459, 483, 460, 461, 0, 464, 470, 0, 471, 01813 466, 467, 0, 472, 0, 473, 0, 0, 619, 7, 01814 27, 28, 29, 30, 31, 49, 50, 620, 620, 59, 01815 63, 620, 0, 34, 43, 0, 44, 609, 0, 79, 01816 90, 47, 46, 0, 199, 268, 42, 217, 225, 230, 01817 231, 232, 227, 229, 239, 240, 233, 234, 210, 211, 01818 237, 238, 609, 226, 228, 222, 223, 224, 212, 213, 01819 214, 215, 216, 598, 600, 599, 601, 0, 263, 426, 01820 609, 598, 600, 599, 601, 0, 263, 0, 620, 352, 01821 0, 351, 0, 0, 0, 0, 0, 0, 295, 429, 01822 620, 427, 320, 325, 111, 112, 113, 0, 524, 323, 01823 523, 429, 620, 427, 0, 0, 549, 332, 598, 599, 01824 263, 35, 201, 41, 209, 0, 199, 592, 0, 270, 01825 266, 620, 598, 599, 609, 598, 599, 591, 299, 611, 01826 250, 255, 257, 304, 22, 0, 242, 0, 32, 424, 01827 422, 208, 0, 76, 16, 609, 613, 0, 84, 97, 01828 99, 609, 598, 599, 555, 552, 551, 550, 553, 0, 01829 566, 0, 577, 567, 581, 580, 576, 549, 409, 548, 01830 412, 554, 556, 558, 534, 564, 620, 569, 620, 574, 01831 534, 579, 534, 0, 532, 488, 0, 463, 465, 475, 01832 469, 477, 218, 219, 399, 609, 0, 397, 396, 0, 01833 620, 0, 274, 0, 88, 82, 0, 0, 0, 0, 01834 0, 0, 430, 66, 0, 0, 433, 0, 0, 428, 01835 64, 620, 350, 287, 620, 620, 442, 620, 353, 620, 01836 355, 313, 354, 316, 0, 0, 319, 602, 294, 609, 01837 598, 599, 0, 0, 526, 0, 0, 111, 112, 115, 01838 609, 0, 609, 549, 0, 0, 0, 252, 418, 58, 01839 251, 0, 127, 271, 261, 0, 0, 433, 0, 0, 01840 620, 609, 11, 0, 292, 248, 92, 95, 0, 560, 01841 555, 0, 373, 364, 366, 609, 362, 609, 0, 0, 01842 541, 0, 530, 584, 568, 0, 531, 0, 544, 578, 01843 0, 546, 582, 489, 491, 492, 493, 486, 494, 555, 01844 0, 395, 609, 0, 380, 562, 620, 620, 572, 380, 01845 380, 378, 401, 0, 0, 0, 0, 0, 272, 80, 01846 200, 0, 40, 206, 39, 207, 67, 425, 612, 0, 01847 37, 204, 38, 205, 65, 423, 443, 444, 620, 445, 01848 0, 620, 358, 0, 0, 356, 0, 0, 0, 318, 01849 0, 0, 433, 0, 326, 0, 0, 433, 329, 587, 01850 609, 0, 528, 333, 419, 420, 202, 0, 256, 303, 01851 20, 570, 609, 0, 371, 0, 557, 0, 0, 0, 01852 410, 533, 559, 534, 534, 565, 620, 583, 534, 575, 01853 534, 534, 0, 0, 0, 561, 0, 398, 386, 388, 01854 0, 376, 377, 0, 391, 0, 393, 0, 437, 435, 01855 0, 416, 273, 243, 36, 203, 0, 0, 447, 359, 01856 0, 12, 449, 0, 310, 311, 0, 0, 270, 620, 01857 321, 0, 525, 324, 527, 331, 549, 363, 374, 0, 01858 369, 365, 411, 0, 0, 0, 537, 0, 539, 529, 01859 0, 545, 0, 542, 547, 0, 571, 295, 429, 400, 01860 379, 380, 380, 563, 620, 380, 573, 380, 380, 405, 01861 609, 403, 406, 60, 0, 446, 0, 102, 103, 110, 01862 0, 448, 0, 314, 317, 439, 440, 438, 0, 0, 01863 0, 0, 372, 0, 367, 414, 413, 534, 534, 534, 01864 534, 490, 602, 294, 0, 383, 0, 385, 375, 0, 01865 392, 0, 389, 394, 0, 402, 109, 429, 620, 427, 01866 620, 620, 0, 327, 0, 370, 0, 538, 0, 535, 01867 540, 543, 380, 380, 380, 380, 404, 602, 108, 609, 01868 598, 599, 441, 357, 322, 334, 368, 534, 384, 0, 01869 381, 387, 390, 433, 536, 380, 382 01870 }; 01871 01872 /* YYDEFGOTO[NTERM-NUM]. */ 01873 static const yytype_int16 yydefgoto[] = 01874 { 01875 -1, 1, 2, 66, 67, 68, 236, 567, 568, 252, 01876 253, 446, 254, 437, 70, 71, 358, 72, 73, 510, 01877 690, 243, 75, 76, 255, 77, 78, 79, 467, 80, 01878 209, 377, 378, 192, 193, 194, 195, 605, 556, 197, 01879 82, 439, 211, 260, 228, 748, 426, 427, 225, 226, 01880 213, 413, 428, 516, 83, 356, 258, 259, 635, 625, 01881 360, 847, 361, 848, 732, 988, 736, 733, 931, 594, 01882 596, 746, 936, 245, 85, 86, 87, 88, 89, 90, 01883 91, 92, 93, 94, 713, 570, 721, 844, 845, 369, 01884 773, 774, 775, 960, 899, 802, 686, 687, 803, 970, 01885 971, 278, 279, 472, 778, 658, 880, 320, 511, 95, 01886 96, 711, 704, 565, 557, 318, 508, 507, 577, 987, 01887 715, 838, 917, 921, 97, 98, 99, 100, 101, 102, 01888 103, 290, 485, 104, 294, 105, 106, 292, 296, 286, 01889 284, 288, 477, 676, 675, 793, 892, 797, 107, 285, 01890 108, 109, 216, 217, 112, 218, 219, 589, 735, 744, 01891 881, 780, 745, 661, 662, 663, 664, 665, 805, 806, 01892 666, 667, 668, 669, 808, 809, 670, 671, 672, 673, 01893 674, 782, 396, 595, 265, 429, 221, 115, 629, 559, 01894 399, 304, 423, 424, 706, 457, 571, 364, 257 01895 }; 01896 01897 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 01898 STATE-NUM. */ 01899 #define YYPACT_NINF -808 01900 static const yytype_int16 yypact[] = 01901 { 01902 -808, 134, 2562, -808, 7195, -808, -808, -808, 6718, -808, 01903 -808, -808, -808, -808, -808, -808, 7308, 7308, -808, -808, 01904 7308, 3884, 3479, -808, -808, -808, -808, 455, 6585, 17, 01905 -808, 60, -808, -808, -808, 2804, 3614, -808, -808, 2939, 01906 -808, -808, -808, -808, -808, -808, 8664, 8664, 140, 4955, 01907 462, 7647, 7986, 6977, -808, 6452, -808, -808, -808, 103, 01908 115, 126, 206, 117, 8777, 8664, -808, -25, -808, 1007, 01909 -808, 322, -808, -808, 141, 372, 352, -808, 337, 9003, 01910 -808, 379, 2918, 247, 278, -808, 8890, 8890, -808, -808, 01911 5842, 9112, 9221, 9330, 6318, 33, 65, -808, -808, 410, 01912 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 01913 205, 409, -808, 441, 433, -808, -808, -808, -808, -808, 01914 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 01915 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 01916 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 01917 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 01918 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 01919 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 01920 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 01921 -808, -808, -808, -808, -808, 396, -808, -808, -808, -808, 01922 427, 8664, 519, 5094, 8664, 8664, 8664, 8664, -808, 468, 01923 2918, 500, -808, -808, 463, 304, 22, 344, 517, 363, 01924 479, -808, -808, -808, 5729, -808, 7308, 7308, -808, -808, 01925 5955, -808, 8890, 498, -808, 482, 491, 5233, -808, -808, 01926 -808, 497, 499, 141, -808, 361, 570, 458, 7421, -808, 01927 4955, 505, -25, -808, 1007, 17, 538, -808, 17, 8890, 01928 515, 188, 318, -808, 500, 523, 318, -808, 17, 617, 01929 338, 9439, 540, -808, 474, 572, 613, 674, -808, -808, 01930 -808, -808, -808, -808, 522, -808, 601, 669, 284, 576, 01931 752, 577, 58, 582, 759, 584, 68, 609, 612, -808, 01932 -808, -808, -808, -808, -808, -808, 6068, 8890, 8890, 8890, 01933 8890, 7421, 8890, 8890, -808, -808, -808, 588, -808, -808, 01934 -808, 8099, -808, 4955, 7086, 561, 8099, 8664, 8664, 8664, 01935 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 01936 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 8664, 01937 8664, 8664, 8664, 2012, 7308, 9718, 4312, 322, 109, 109, 01938 8890, 8890, -25, 689, 563, 651, -808, -808, 685, 691, 01939 53, 57, 100, 328, 393, 8890, 568, -808, 199, 708, 01940 -808, -808, -808, -808, 55, 223, 249, 279, 283, 301, 01941 316, 384, 417, -808, -808, -808, 33, -808, -808, 9795, 01942 -808, -808, 8777, 8777, -808, -808, 414, -808, -808, -808, 01943 8664, 8664, 7534, -808, -808, 9872, 7308, 9949, 8664, 8664, 01944 7760, -808, 17, 595, -808, -808, 17, -808, 580, 599, 01945 -808, 61, -808, -808, -808, -808, -808, 6718, -808, 8664, 01946 5364, 604, 9872, 9949, 8664, 1007, 607, 17, -808, -808, 01947 6181, 618, -808, 322, -808, 7873, -808, -808, 7986, -808, 01948 -808, -808, 482, 769, -808, -808, -808, 622, 9439, 10026, 01949 7308, 10103, 1417, -808, -808, -808, -808, -808, -808, -808, 01950 -808, -808, -808, -808, -808, 244, -808, -808, 611, -808, 01951 -808, -808, 347, -808, 623, -808, 8664, 8664, -808, -808, 01952 -808, -808, -808, -808, -808, -808, -808, 51, 51, -808, 01953 -808, 51, 8664, -808, 628, 634, -808, 17, 9439, 655, 01954 -808, -808, -808, 678, 1866, -808, -808, 570, 2240, 2240, 01955 2240, 2240, 727, 727, 3323, 3188, 2240, 2240, 3053, 3053, 01956 415, 415, 1674, 727, 727, 907, 907, 660, 40, 40, 01957 570, 570, 570, 4019, 3074, 4154, 3209, 499, 661, -808, 01958 17, 535, -808, 688, -808, 499, 3749, 737, 790, -808, 01959 4451, 799, 4729, 66, 66, 689, 8212, 737, 147, 10180, 01960 7308, 10257, -808, 322, -808, 769, -808, -25, -808, -808, 01961 -808, 10334, 7308, 9795, 4312, 8890, 1538, -808, -808, -808, 01962 4173, -808, 2648, -808, 2918, 6718, 2783, -808, 8664, 500, 01963 -808, 479, 2669, 3344, 17, 420, 444, -808, -808, -808, 01964 -808, 7534, 7760, -808, -808, 8890, 2918, 672, -808, -808, 01965 -808, 2918, 5364, 2, -808, 17, 318, 9439, 622, 701, 01966 469, 17, 207, 224, 711, -808, -808, -808, -808, 8664, 01967 -808, 947, -808, -808, -808, -808, -808, 1789, -808, -808, 01968 -808, -808, -808, -808, 680, -808, 687, 773, 694, -808, 01969 698, 783, 704, 791, -808, -808, 834, -808, -808, -808, 01970 -808, -808, 570, 570, -808, 1322, 5503, -808, -808, 5233, 01971 51, 5503, 721, 8325, -808, 622, 9439, 8777, 8664, 741, 01972 8777, 8777, -808, 588, 499, 722, 818, 8777, 8777, -808, 01973 588, 499, -808, -808, 8438, 827, -808, 597, -808, 827, 01974 -808, -808, -808, -808, 737, 70, -808, 67, 136, 17, 01975 148, 149, 8890, -25, -808, 8890, 4312, 701, 469, -808, 01976 17, 737, 61, 1789, 4312, -25, 6851, -808, 65, 372, 01977 -808, 8664, -808, -808, -808, 8664, 8664, 466, 8664, 8664, 01978 731, 61, -808, 736, -808, -808, -808, 567, 8664, -808, 01979 -808, 947, 350, -808, 738, 17, -808, 17, 72, 1789, 01980 -808, 42, -808, -808, -808, 272, -808, 1789, -808, -808, 01981 892, -808, -808, -808, -808, -808, -808, -808, -808, 762, 01982 9548, -808, 17, 764, 746, -808, 751, 694, -808, 758, 01983 760, -808, 761, 893, 775, 5233, 899, 8664, 776, 622, 01984 2918, 8664, -808, 2918, -808, 2918, -808, -808, -808, 8777, 01985 -808, 2918, -808, 2918, -808, -808, 628, -808, 826, -808, 01986 4842, 909, -808, 8890, 737, -808, 737, 5503, 5503, -808, 01987 8551, 4590, 155, 66, -808, -25, 737, -808, -808, -808, 01988 17, 737, -808, -808, -808, -808, 2918, 8664, 7760, -808, 01989 -808, -808, 17, 1011, 789, 1003, -808, 793, 5503, 5233, 01990 -808, -808, -808, 798, 803, -808, 694, -808, 804, -808, 01991 811, 804, 5616, 9548, 877, 792, 808, -808, 1910, -808, 01992 490, -808, -808, 1910, -808, 1368, -808, 1032, -808, -808, 01993 820, -808, 819, 2918, -808, 2918, 9657, 109, -808, -808, 01994 5503, -808, -808, 109, -808, -808, 737, 737, -808, 130, 01995 -808, 4312, -808, -808, -808, -808, 1538, -808, 821, 1011, 01996 434, -808, -808, 944, 832, 1789, -808, 892, -808, -808, 01997 892, -808, 892, -808, -808, 850, 792, -808, 10411, -808, 01998 -808, 830, 831, -808, 694, 835, -808, 837, 835, -808, 01999 443, -808, -808, -808, 910, -808, 796, 572, 613, 674, 02000 4312, -808, 4451, -808, -808, -808, -808, -808, 5503, 737, 02001 4312, 1011, 821, 1011, 838, -808, -808, 804, 839, 804, 02002 804, -808, 840, 841, 1910, -808, 1368, -808, -808, 1368, 02003 -808, 1368, -808, -808, 1032, -808, 769, 10488, 7308, 10565, 02004 790, 597, 737, -808, 737, 821, 1011, -808, 892, -808, 02005 -808, -808, 835, 844, 835, 835, -808, 74, 469, 17, 02006 146, 158, -808, -808, -808, -808, 821, 804, -808, 1368, 02007 -808, -808, -808, 176, -808, 835, -808 02008 }; 02009 02010 /* YYPGOTO[NTERM-NUM]. */ 02011 static const yytype_int16 yypgoto[] = 02012 { 02013 -808, -808, -808, -363, -808, 27, -808, -550, -21, -808, 02014 518, -808, 15, -808, -301, -51, -86, 41, -808, -268, 02015 -808, 413, -7, 888, -153, -4, -73, -808, -416, 7, 02016 1571, -315, 889, -53, -808, -5, -808, -808, 98, -808, 02017 870, -808, 735, -808, -44, 275, -340, 87, -11, -808, 02018 -386, -188, 4, -311, -20, -808, -808, -808, -808, -808, 02019 -808, -808, -808, -808, -808, -808, -808, -808, -808, -808, 02020 -808, -808, -808, 64, -808, -808, -808, -808, -808, -808, 02021 -808, -808, -808, -808, 154, -347, -526, -34, -645, -808, 02022 -785, -779, 221, 309, 374, -808, -446, -808, -665, -808, 02023 -18, -808, -808, -808, -808, -808, -808, 248, -808, -808, 02024 -808, -808, -808, -808, -808, -93, -808, -808, -535, -808, 02025 -6, -808, -808, -808, -808, -808, -808, 918, -808, -808, 02026 -808, -808, 712, -808, -808, -808, -808, -808, -808, -808, 02027 963, -808, -142, -808, -808, -808, -808, -808, 10, -808, 02028 14, -808, 1081, 1361, 928, 1531, 1552, -808, -808, 89, 02029 -464, -372, -415, -783, -518, -723, 234, 242, 133, -808, 02030 -808, -808, 289, -708, -807, 128, 255, -808, -638, -808, 02031 228, -622, -808, -808, -808, 69, -383, -808, -348, -808, 02032 639, -26, 0, 48, -598, -208, 21, -14, -2 02033 }; 02034 02035 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 02036 positive, shift that token. If negative, reduce the rule which 02037 number is the opposite. If YYTABLE_NINF, syntax error. */ 02038 #define YYTABLE_NINF -621 02039 static const yytype_int16 yytable[] = 02040 { 02041 116, 359, 283, 400, 362, 558, 325, 566, 659, 208, 02042 208, 229, 572, 208, 560, 526, 757, 69, 198, 69, 02043 214, 214, 199, 234, 214, 521, 610, 232, 251, 235, 02044 316, 117, 421, 273, 610, 357, 357, 617, 198, 357, 02045 724, 394, 199, 767, 741, 256, 786, 810, 723, 263, 02046 267, 600, 638, 306, 459, 261, 882, 660, 461, 273, 02047 272, 586, 689, 317, 363, 691, 84, 558, 84, 566, 02048 841, 273, 273, 273, 846, 617, 614, 627, -102, 889, 02049 215, 215, -103, 569, 215, 220, 220, -106, 305, 220, 02050 941, 314, -106, 720, 938, 630, 966, 447, 312, 313, 02051 649, 878, 695, 212, 222, 299, 196, 223, 327, -519, 02052 650, 305, 877, 84, 302, -74, 303, 274, 397, 488, 02053 262, 266, 569, 630, 972, -110, 196, 684, 215, 494, 02054 641, 852, 659, 776, 3, -102, -88, 896, 653, 654, 02055 -511, 884, 857, 274, 479, 840, 482, 576, 486, 890, 02056 215, 215, 486, 196, 215, 368, 379, 379, 231, -105, 02057 992, -108, 655, 350, 351, 352, 398, 314, 489, 685, 02058 517, -107, -109, -105, -107, 882, 297, 298, 495, 431, 02059 -104, 433, 251, 879, 901, 902, 856, -93, -511, -104, 02060 237, -94, 196, 659, 861, 315, 247, 966, 466, 316, 02061 587, -97, 231, -598, 850, 302, 941, 303, 453, 302, 02062 -598, 303, 414, -106, 1025, -106, 441, 208, 414, 208, 02063 208, 500, 501, 502, 503, 430, 449, 882, 214, 251, 02064 214, 972, -96, 630, -101, 610, 610, 889, 450, 617, 02065 729, 421, 777, 289, 815, 630, 256, 1046, 302, -98, 02066 303, 273, 740, 776, 874, 291, 357, 357, 357, 357, 02067 962, 505, 506, 445, 949, 967, 293, 84, 462, 763, 02068 -99, 315, -599, 305, 573, 574, 739, 227, 432, 659, 02069 819, -100, -96, -98, 985, -105, 882, -105, 215, -95, 02070 215, 215, -519, 220, 215, 220, 215, -107, 788, -107, 02071 791, 84, 251, 451, 273, 473, 452, 998, -510, 357, 02072 357, 422, 84, 425, 84, -104, 588, -104, -102, 256, 02073 -96, 69, 455, 215, 583, 515, 504, 930, 860, 456, 02074 515, 519, -339, 499, -512, 274, 575, -98, 302, -93, 02075 303, -96, 1008, 678, -96, 473, 295, 208, -96, 481, 02076 678, 474, 430, 475, -595, 776, -510, 776, -98, 312, 02077 313, -98, 513, 353, -513, -98, 1033, 522, -515, 654, 02078 84, 215, 215, 215, 215, 84, 215, 215, 851, -339, 02079 -339, 989, -512, 305, 677, 215, -514, 84, 274, 415, 02080 215, 474, 655, 475, 986, 466, 521, 464, 465, 590, 02081 319, -516, 770, 837, 645, 646, 647, 648, 473, 208, 02082 354, 355, -513, -505, 430, 74, -515, 74, 215, -596, 02083 84, 776, 994, 754, 215, 215, 414, 414, 765, 74, 02084 74, -520, 624, 74, -514, 826, 416, 417, 116, 215, 02085 1024, 1053, 834, 601, 603, 466, 442, 198, 273, -516, 02086 419, 199, 458, 564, 474, 69, 475, -103, -595, 456, 02087 -505, -505, 74, 208, -595, 321, 215, 215, 430, -505, 02088 618, 322, 659, 776, 620, 776, -110, 74, -508, 623, 02089 215, 611, 610, 327, 873, 617, 770, 680, 645, 646, 02090 647, 648, 326, 416, 443, 633, -520, 564, 273, 74, 02091 74, 444, -508, 74, 84, 688, 688, 758, 776, 688, 02092 56, 946, 948, 702, 84, 564, 951, -505, 953, 954, 02093 403, 709, -103, -596, 636, -508, -508, -109, 402, -596, 02094 404, 759, 274, -105, 215, 196, 348, 349, 350, 351, 02095 352, 564, 699, -94, 742, 444, -110, 703, 800, 717, 02096 -508, 719, 434, 867, -294, 710, 747, -107, 650, 469, 02097 705, 435, 436, 230, 766, 694, 716, -101, 993, 564, 02098 980, -109, 754, 208, 761, 406, 982, 1014, 430, -104, 02099 725, 410, 274, 473, 231, 208, 653, 654, 411, 749, 02100 430, 230, -100, -433, 722, 722, 231, 412, 750, -288, 02101 752, -294, -294, -288, 418, -599, 470, 471, 734, 414, 02102 655, 843, 840, 420, 705, 198, 74, 273, 438, 199, 02103 584, 440, 707, 466, 585, 1027, 1029, 1030, 1031, 474, 02104 116, 475, 476, 224, 84, 227, 84, 74, 327, 74, 02105 74, 705, 448, 74, 215, 74, 853, 69, -105, 855, 02106 74, -73, -433, 454, 460, 864, 215, -517, 84, 215, 02107 827, 74, 473, 74, 783, 813, 783, 747, 814, -96, 02108 816, 630, 74, 463, 468, 1054, 273, 496, 1039, 564, 02109 497, 357, 509, 764, 357, 812, 483, 487, 688, 215, 02110 760, 564, 490, 863, 493, 520, 84, -433, -518, -433, 02111 -433, 274, 498, 196, -517, -517, 576, 578, 474, 750, 02112 475, 478, 839, 842, 621, 842, 582, 842, 515, 74, 02113 74, 74, 74, 74, 74, 74, 74, -602, 327, 705, 02114 473, 726, 619, 622, 74, 628, 74, 632, 522, 74, 02115 705, 822, 824, 340, 341, -518, -518, 712, 830, 832, 02116 84, 679, -88, 84, 854, 84, 637, 923, 414, -284, 02117 274, 215, -268, 681, 215, 215, 862, 74, 693, 74, 02118 579, 215, 215, 74, 74, 708, 474, 812, 475, 480, 02119 273, 348, 349, 350, 351, 352, -602, 264, 74, 696, 02120 859, 697, 357, 591, 910, 327, 215, -424, 714, 215, 02121 84, -107, 812, 762, 783, 783, -284, -284, 84, 869, 02122 340, 341, 718, 473, 779, 74, 74, 580, 581, 919, 02123 473, 781, -98, 876, 768, 784, 926, 927, 785, 74, 02124 929, -602, 787, -602, -602, 789, 918, -598, 790, 922, 02125 592, 593, 840, 792, 196, 345, 346, 347, 348, 349, 02126 350, 351, 352, 74, -295, -269, 821, 943, 944, 474, 02127 828, 475, 484, 74, 895, 868, 474, 870, 475, 491, 02128 914, 955, 875, 273, 722, 893, 932, 958, 849, 84, 02129 898, 1017, 897, 74, 783, 900, 210, 210, 794, 795, 02130 210, 796, 903, 215, 905, 858, 273, 44, 45, 981, 02131 907, -295, -295, 908, 84, 829, 909, 215, 934, 911, 02132 -270, 84, 84, 811, 916, 84, 244, 246, 920, 804, 02133 937, 210, 210, 939, 592, 593, 959, 842, 1018, 1019, 02134 942, -104, 945, 957, 300, 301, 405, 947, 950, 407, 02135 408, 409, 84, 84, 770, 952, 645, 646, 647, 648, 02136 649, 973, -95, -271, 995, 991, 84, 956, 1001, 1020, 02137 650, 1021, 783, 996, 1004, 1006, 1016, 1022, 634, 1009, 02138 1015, 1011, 1026, 1028, 807, 327, -598, -599, 1049, 366, 02139 976, 651, 383, 74, 84, 74, 835, 1043, 653, 654, 02140 340, 341, 872, 74, 801, 84, 1036, 865, 924, 770, 02141 925, 645, 646, 647, 648, 74, 492, 74, 74, 887, 02142 933, 208, 655, 887, 1042, 935, 430, 401, 716, 842, 02143 287, 888, 395, 885, 891, 990, 961, 347, 348, 349, 02144 350, 351, 352, 963, 883, 597, 771, 0, 74, 705, 02145 0, 0, 772, 0, 84, 74, 84, 307, 308, 309, 02146 310, 311, 84, 0, 84, 770, 514, 645, 646, 647, 02147 648, 525, 0, 770, 0, 645, 646, 647, 648, 0, 02148 886, 210, 0, 0, 210, 210, 210, 300, 0, 0, 02149 983, 984, 215, 110, 969, 110, 645, 646, 647, 648, 02150 0, 0, 771, 0, 210, 0, 210, 210, 940, 74, 02151 771, 0, 74, 0, 74, 0, 0, 0, 0, 0, 02152 74, 0, 0, 74, 74, 0, 0, 564, 0, 0, 02153 74, 74, 0, 0, 0, 0, 811, 0, 887, 0, 02154 110, 811, 0, 811, 275, 0, 0, 965, 0, 968, 02155 0, 0, 0, 1023, 0, 74, 607, 609, 74, 74, 02156 0, 0, 0, 0, 0, 264, 0, 74, 0, 0, 02157 275, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02158 0, 0, 370, 380, 380, 380, 1044, 0, 1045, 997, 02159 0, 999, 0, 904, 906, 0, 1000, 807, 0, 964, 02160 609, 210, 807, 264, 807, 0, 524, 527, 528, 529, 02161 530, 531, 532, 533, 534, 535, 536, 537, 538, 539, 02162 540, 541, 542, 543, 544, 545, 546, 547, 548, 549, 02163 550, 551, 552, 0, 210, 0, 0, 0, 74, 0, 02164 0, 0, 811, 0, 811, 0, 0, 811, 1032, 811, 02165 1034, 0, 74, 0, 0, 1035, 0, 692, 0, 0, 02166 0, 0, 0, 74, 0, 0, 74, 0, 0, 0, 02167 74, 74, 1047, 0, 74, 0, 0, 0, 0, 0, 02168 0, 0, 602, 604, 0, 0, 0, 811, 0, 0, 02169 606, 210, 210, 1055, 110, 0, 210, 0, 602, 604, 02170 210, 74, 74, 807, 0, 807, 0, 0, 807, 0, 02171 807, 0, 0, 0, 0, 74, 0, 0, 0, 626, 02172 0, 525, 0, 0, 631, 0, 0, 0, 110, 0, 02173 0, 0, 0, 0, 0, 210, 0, 0, 210, 110, 02174 0, 110, 0, 74, 0, 1005, 1007, 0, 807, 1010, 02175 210, 1012, 1013, 753, 74, 0, 0, 0, 0, 0, 02176 0, 0, 275, 0, 0, 0, 609, 264, 0, 0, 02177 0, 0, 0, 111, 0, 111, 682, 683, 0, 0, 02178 0, 0, 0, 0, 799, 0, 645, 646, 647, 648, 02179 800, 0, 210, 0, 769, 0, 0, 110, 0, 0, 02180 650, 0, 110, 74, 0, 74, 0, 0, 0, 0, 02181 0, 74, 0, 74, 110, 275, 1048, 1050, 1051, 1052, 02182 111, 651, 0, 0, 276, 0, 0, 652, 653, 654, 02183 770, 0, 645, 646, 647, 648, 800, 0, 818, 1056, 02184 0, 74, 0, 0, 0, 0, 650, 110, 0, 0, 02185 276, 0, 655, 0, 0, 656, 210, 0, 0, 836, 02186 210, 0, 371, 381, 381, 381, 0, 651, 0, 0, 02187 0, 0, 210, 231, 653, 654, 0, 0, 0, 644, 02188 0, 645, 646, 647, 648, 649, 0, 0, 210, 0, 02189 0, 0, 0, 0, 0, 650, 0, 0, 655, 0, 02190 0, 210, 210, 0, 0, 0, 0, 0, 0, 0, 02191 0, 0, 0, 871, 0, 0, 651, 0, 0, 0, 02192 0, 0, 652, 653, 654, 0, 0, 0, 0, 210, 02193 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 02194 0, 110, 0, 113, 0, 113, 0, 655, 0, 0, 02195 656, 0, 0, 0, 0, 0, 0, 0, 0, 275, 02196 0, 0, 912, 657, 114, 0, 114, 0, 0, 0, 02197 0, 0, 0, 210, 111, 0, 0, 606, 820, 0, 02198 823, 825, 0, 81, 0, 81, 0, 831, 833, 0, 02199 113, 0, 0, 0, 210, 928, 0, 0, 0, 0, 02200 644, 0, 645, 646, 647, 648, 649, 0, 111, 275, 02201 0, 114, 0, 264, 0, 277, 650, 0, 0, 111, 02202 0, 111, 0, 0, 0, 0, 0, 0, 0, 0, 02203 81, 866, 0, 0, 0, 823, 825, 651, 831, 833, 02204 0, 277, 276, 652, 653, 654, 0, 0, 210, 0, 02205 0, 0, 0, 372, 382, 382, 0, 0, 0, 0, 02206 0, 110, 0, 110, 0, 0, 0, 0, 655, 0, 02207 0, 656, 367, 0, 0, 0, 0, 111, 0, 0, 02208 0, 0, 111, 0, 743, 110, 0, 0, 0, 0, 02209 0, 0, 0, 0, 111, 276, 0, 210, 0, 0, 02210 0, 913, 0, 0, 0, 0, 0, 0, 0, 915, 02211 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02212 0, 0, 0, 110, 0, 0, 0, 111, 275, 0, 02213 210, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02214 0, 0, 0, 0, 113, 0, 0, 915, 210, 0, 02215 0, 0, 327, 328, 329, 330, 331, 332, 333, 334, 02216 335, 336, 337, 338, 339, 114, 0, 340, 341, 0, 02217 0, 0, 0, 0, 0, 0, 0, 110, 113, 0, 02218 110, 0, 110, 0, 81, 0, 0, 275, 0, 113, 02219 0, 113, 0, 0, 0, 0, 0, 0, 342, 114, 02220 343, 344, 345, 346, 347, 348, 349, 350, 351, 352, 02221 114, 111, 114, 0, 0, 0, 0, 0, 81, 0, 02222 0, 111, 0, 0, 0, 231, 0, 110, 0, 81, 02223 0, 81, 0, 277, 0, 110, 0, 0, 0, 276, 02224 0, 0, 0, 0, 0, 0, 0, 113, 0, 0, 02225 0, 644, 113, 645, 646, 647, 648, 649, 0, 0, 02226 0, 0, 0, 0, 113, 0, 0, 650, 114, 0, 02227 0, 0, 0, 114, 0, 0, 0, 0, 0, 0, 02228 0, 0, 0, 0, 0, 114, 277, 81, 651, 276, 02229 0, 380, 81, 0, 652, 653, 654, 113, 210, 0, 02230 0, 0, 0, 0, 81, 0, 110, 523, 0, 0, 02231 0, 0, 0, 0, 0, 0, 0, 0, 114, 655, 02232 698, 0, 656, 0, 0, 0, 0, 0, 0, 0, 02233 0, 110, 0, 0, 0, 0, 0, 81, 110, 110, 02234 0, 111, 110, 111, 327, 328, 329, 330, 331, 332, 02235 333, 334, 335, 336, 337, 338, 339, 0, 0, 340, 02236 341, 0, 0, 0, 0, 111, 0, 0, 0, 110, 02237 110, 0, 799, 0, 645, 646, 647, 648, 800, 0, 02238 0, 113, 0, 110, 380, 0, 0, 0, 650, 0, 02239 342, 113, 343, 344, 345, 346, 347, 348, 349, 350, 02240 351, 352, 114, 111, 0, 0, 0, 977, 276, 651, 02241 -245, 110, 114, 0, 0, 652, 653, 654, 0, 0, 02242 0, 81, 110, 0, 0, 0, 0, 0, 0, 0, 02243 277, 81, 0, 0, 0, 0, 0, 0, 0, 0, 02244 655, 0, 0, 656, 0, 0, 0, 0, 0, 0, 02245 0, 0, 0, 0, 0, 0, 0, 111, 0, 0, 02246 111, 0, 111, 0, 0, 0, 0, 276, 0, 0, 02247 0, 110, 0, 110, 553, 554, 0, 0, 555, 110, 02248 277, 110, 0, 0, 0, 0, 0, 0, 162, 163, 02249 164, 165, 166, 167, 168, 169, 170, 0, 0, 171, 02250 172, 0, 0, 173, 174, 175, 176, 111, 0, 0, 02251 0, 113, 0, 113, 0, 111, 0, 177, 178, 0, 02252 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02253 0, 0, 114, 0, 114, 113, 0, 0, 179, 180, 02254 181, 182, 183, 184, 185, 186, 187, 188, 0, 189, 02255 190, 81, 0, 81, 0, 0, 114, 191, 0, 0, 02256 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02257 0, 381, 0, 113, 0, 81, 0, 0, 0, 0, 02258 0, 0, 0, 0, 0, 0, 111, 0, 0, 0, 02259 0, 0, 0, 0, 114, 0, 0, 0, 0, 277, 02260 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02261 0, 111, 0, 81, 0, 0, 0, 0, 111, 111, 02262 0, 0, 111, 0, 0, 0, 0, 113, 0, 0, 02263 113, 0, 113, 0, 0, 0, 0, 0, 798, 0, 02264 0, 0, 0, 0, 0, 0, 0, 0, 114, 111, 02265 111, 114, 0, 114, 0, 0, 0, 0, 277, 0, 02266 0, 0, 0, 111, 381, 0, 0, 81, 0, 0, 02267 81, 0, 81, 0, 0, 0, 0, 113, 523, 0, 02268 0, 0, 0, 0, 0, 113, 0, 978, 0, 0, 02269 0, 111, 0, 0, 0, 0, 0, 0, 114, 0, 02270 0, 0, 111, 0, 0, 0, 114, 0, 0, 0, 02271 0, 0, 0, 0, 0, 0, 0, 81, 327, -621, 02272 -621, -621, -621, 332, 333, 81, 0, -621, -621, 0, 02273 0, 0, 0, 340, 341, 0, 0, 0, 0, 0, 02274 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02275 0, 111, 0, 111, 0, 0, 113, 0, 0, 111, 02276 0, 111, 382, 0, 0, 0, 343, 344, 345, 346, 02277 347, 348, 349, 350, 351, 352, 0, 114, 0, 0, 02278 0, 113, 0, 0, 0, 0, 0, 0, 113, 113, 02279 0, 0, 113, 0, 0, 0, 81, 0, 0, 0, 02280 0, 0, 114, 0, 0, 0, 0, 0, 0, 114, 02281 114, 0, 0, 114, 0, 0, 0, 0, 0, 113, 02282 113, 81, 0, 0, 0, 0, 0, 0, 81, 81, 02283 0, 0, 81, 113, 0, 0, 0, 0, 0, 0, 02284 114, 114, 0, 0, 0, 0, 0, 0, 0, 0, 02285 0, 0, 0, 0, 114, 382, 0, 0, 0, 81, 02286 81, 113, 0, 0, 0, 0, 0, 0, 0, 0, 02287 0, 0, 113, 81, 0, 0, 0, 0, 979, 0, 02288 0, 0, 114, 0, 0, 0, 0, 0, 0, 0, 02289 0, 0, 0, 114, 0, 0, 0, 975, 0, 0, 02290 0, 81, 0, 0, 0, 0, 0, 0, 0, 0, 02291 0, 0, 81, 0, 0, 0, 0, 0, 0, 0, 02292 0, 113, 0, 113, 0, 0, 0, 0, 0, 113, 02293 0, 113, 0, 0, 0, 0, 0, 0, 0, 0, 02294 0, 0, 114, 0, 114, 0, 0, 0, 0, 0, 02295 114, 0, 114, 0, 0, 0, 0, 0, 0, 0, 02296 0, 81, 0, 81, 0, 0, 0, 0, 0, 81, 02297 0, 81, -620, 4, 0, 5, 6, 7, 8, 9, 02298 0, 0, 0, 10, 11, 0, 0, 0, 12, 0, 02299 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02300 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02301 0, 27, 0, 0, 0, 0, 0, 28, 29, 30, 02302 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02303 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02304 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02305 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02306 0, 49, 50, 0, 51, 52, 0, 53, 0, 0, 02307 54, 55, 56, 57, 58, 59, 60, 61, 62, -602, 02308 0, 0, 0, 0, 0, 0, 0, -602, -602, -602, 02309 0, 0, -602, -602, -602, 0, -602, 0, 63, 64, 02310 65, 0, 751, 0, 0, -602, -602, -602, -602, 0, 02311 0, -620, 0, -620, 0, 0, -602, -602, 0, -602, 02312 -602, -602, -602, -602, 0, 0, 327, 328, 329, 330, 02313 331, 332, 333, 334, 335, 336, 337, 338, 339, 0, 02314 0, 340, 341, 0, 0, 0, 0, -602, -602, -602, 02315 -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, 02316 0, 0, -602, -602, -602, 0, 755, -602, 0, 0, 02317 0, 0, 342, -602, 343, 344, 345, 346, 347, 348, 02318 349, 350, 351, 352, 0, 0, 0, -602, 0, 0, 02319 -602, 0, -106, -602, -602, -602, -602, -602, -602, -602, 02320 -602, -602, -602, -602, -602, 0, 0, 0, 0, -602, 02321 -602, -602, -602, -602, -505, 0, -602, -602, -602, 0, 02322 -602, 0, -505, -505, -505, 0, 0, -505, -505, -505, 02323 0, -505, 0, 0, 0, 0, 0, 698, 0, -505, 02324 0, -505, -505, -505, 0, 0, 0, 0, 0, 0, 02325 0, -505, -505, 0, -505, -505, -505, -505, -505, 0, 02326 0, 327, 328, 329, 330, 331, 332, 333, 334, 335, 02327 336, 337, 338, 339, 0, 0, 340, 341, 0, 0, 02328 0, 0, -505, -505, -505, -505, -505, -505, -505, -505, 02329 -505, -505, -505, -505, -505, 0, 0, -505, -505, -505, 02330 0, -505, -505, 0, 0, 0, 0, 342, -505, 343, 02331 344, 345, 346, 347, 348, 349, 350, 351, 352, 0, 02332 0, 0, -505, 0, 0, -505, 0, -505, -505, -505, 02333 -505, -505, -505, -505, -505, -505, -505, -505, -505, -505, 02334 0, 0, 0, 0, 0, -505, -505, -505, -505, -508, 02335 0, -505, -505, -505, 0, -505, 0, -508, -508, -508, 02336 0, 0, -508, -508, -508, 0, -508, 0, 0, 0, 02337 0, 0, 0, 0, -508, 0, -508, -508, -508, 0, 02338 0, 0, 0, 0, 0, 0, -508, -508, 0, -508, 02339 -508, -508, -508, -508, 0, 0, 327, 328, 329, 330, 02340 331, 332, 333, 334, 335, 336, 337, 338, 339, 0, 02341 0, 340, 341, 0, 0, 0, 0, -508, -508, -508, 02342 -508, -508, -508, -508, -508, -508, -508, -508, -508, -508, 02343 0, 0, -508, -508, -508, 0, -508, -508, 0, 0, 02344 0, 0, 342, -508, 343, 344, 345, 346, 347, 348, 02345 349, 350, 351, 352, 0, 0, 0, -508, 0, 0, 02346 -508, 0, -508, -508, -508, -508, -508, -508, -508, -508, 02347 -508, -508, -508, -508, -508, 0, 0, 0, 0, 0, 02348 -508, -508, -508, -508, -603, 0, -508, -508, -508, 0, 02349 -508, 0, -603, -603, -603, 0, 0, -603, -603, -603, 02350 0, -603, 0, 0, 0, 0, 0, 0, 0, 0, 02351 -603, -603, -603, -603, 0, 0, 0, 0, 0, 0, 02352 0, -603, -603, 0, -603, -603, -603, -603, -603, 0, 02353 0, 327, 328, 329, 330, 331, 332, 333, 334, 335, 02354 336, 337, -621, -621, 0, 0, 340, 341, 0, 0, 02355 0, 0, -603, -603, -603, -603, -603, -603, -603, -603, 02356 -603, -603, -603, -603, -603, 0, 0, -603, -603, -603, 02357 0, 0, -603, 0, 0, 0, 0, 0, -603, 343, 02358 344, 345, 346, 347, 348, 349, 350, 351, 352, 0, 02359 0, 0, -603, 0, 0, -603, 0, 0, -603, -603, 02360 -603, -603, -603, -603, -603, -603, -603, -603, -603, -603, 02361 0, 0, 0, 0, -603, -603, -603, -603, -603, -604, 02362 0, -603, -603, -603, 0, -603, 0, -604, -604, -604, 02363 0, 0, -604, -604, -604, 0, -604, 0, 0, 0, 02364 0, 0, 0, 0, 0, -604, -604, -604, -604, 0, 02365 0, 0, 0, 0, 0, 0, -604, -604, 0, -604, 02366 -604, -604, -604, -604, 0, 0, 327, 328, 329, 330, 02367 331, 332, 333, 334, 0, 336, 337, 0, 0, 0, 02368 0, 340, 341, 0, 0, 0, 0, -604, -604, -604, 02369 -604, -604, -604, -604, -604, -604, -604, -604, -604, -604, 02370 0, 0, -604, -604, -604, 0, 0, -604, 0, 0, 02371 0, 0, 0, -604, 343, 344, 345, 346, 347, 348, 02372 349, 350, 351, 352, 0, 0, 0, -604, 0, 0, 02373 -604, 0, 0, -604, -604, -604, -604, -604, -604, -604, 02374 -604, -604, -604, -604, -604, 0, 0, 0, 0, -604, 02375 -604, -604, -604, -604, -294, 0, -604, -604, -604, 0, 02376 -604, 0, -294, -294, -294, 0, 0, -294, -294, -294, 02377 0, -294, 0, 0, 0, 0, 0, 0, 0, 0, 02378 0, -294, -294, -294, 0, 0, 0, 0, 0, 0, 02379 0, -294, -294, 0, -294, -294, -294, -294, -294, 0, 02380 0, 327, 328, 329, 330, 331, 332, 333, 0, 0, 02381 336, 337, 0, 0, 0, 0, 340, 341, 0, 0, 02382 0, 0, -294, -294, -294, -294, -294, -294, -294, -294, 02383 -294, -294, -294, -294, -294, 0, 0, -294, -294, -294, 02384 0, 756, -294, 0, 0, 0, 0, 0, -294, 343, 02385 344, 345, 346, 347, 348, 349, 350, 351, 352, 0, 02386 0, 0, -294, 0, 0, -294, 0, -108, -294, -294, 02387 -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, 02388 0, 0, 0, 0, 0, -294, -294, -294, -294, -432, 02389 0, -294, -294, -294, 0, -294, 0, -432, -432, -432, 02390 0, 0, -432, -432, -432, 0, -432, 0, 0, 0, 02391 0, 0, 0, 0, 0, -432, -432, -432, 0, 0, 02392 0, 0, 0, 0, 0, 0, -432, -432, 0, -432, 02393 -432, -432, -432, -432, 0, 0, 0, 0, 0, 0, 02394 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02395 0, 0, 0, 0, 0, 0, 0, -432, -432, -432, 02396 -432, -432, -432, -432, -432, -432, -432, -432, -432, -432, 02397 0, 0, -432, -432, -432, 0, 0, -432, 0, 0, 02398 0, 0, 0, -432, 0, 0, 0, 0, 0, 0, 02399 0, 0, 0, 0, 0, 0, 0, -432, 0, 0, 02400 0, 0, 0, -432, 0, -432, -432, -432, -432, -432, 02401 -432, -432, -432, -432, -432, 0, 0, 0, 0, -432, 02402 -432, -432, -432, -432, -285, 227, -432, -432, -432, 0, 02403 -432, 0, -285, -285, -285, 0, 0, -285, -285, -285, 02404 0, -285, 0, 0, 0, 0, 0, 0, 0, 0, 02405 0, -285, -285, -285, 0, 0, 0, 0, 0, 0, 02406 0, -285, -285, 0, -285, -285, -285, -285, -285, 0, 02407 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02408 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02409 0, 0, -285, -285, -285, -285, -285, -285, -285, -285, 02410 -285, -285, -285, -285, -285, 0, 0, -285, -285, -285, 02411 0, 0, -285, 0, 0, 0, 0, 0, -285, 0, 02412 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02413 0, 0, -285, 0, 0, -285, 0, 0, -285, -285, 02414 -285, -285, -285, -285, -285, -285, -285, -285, -285, -285, 02415 0, 0, 0, 0, 0, -285, -285, -285, -285, -422, 02416 0, -285, -285, -285, 0, -285, 0, -422, -422, -422, 02417 0, 0, -422, -422, -422, 0, -422, 0, 0, 0, 02418 0, 0, 0, 0, 0, -422, -422, -422, 0, 0, 02419 0, 0, 0, 0, 0, 0, -422, -422, 0, -422, 02420 -422, -422, -422, -422, 0, 0, 0, 0, 0, 0, 02421 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02422 0, 0, 0, 0, 0, 0, 0, -422, -422, -422, 02423 -422, -422, -422, -422, -422, -422, -422, -422, -422, -422, 02424 0, 0, -422, -422, -422, 0, 0, -422, 0, 0, 02425 0, 0, 0, -422, 0, 0, 0, 0, 0, 0, 02426 0, 0, 0, 0, 0, 0, 0, -422, 0, 0, 02427 0, 0, 0, -422, 0, -422, -422, -422, -422, -422, 02428 -422, -422, -422, -422, -422, 0, 0, 0, 0, -422, 02429 -422, -422, -422, -422, -301, -422, -422, -422, -422, 0, 02430 -422, 0, -301, -301, -301, 0, 0, -301, -301, -301, 02431 0, -301, 0, 0, 0, 0, 0, 0, 0, 0, 02432 0, -301, -301, 0, 0, 0, 0, 0, 0, 0, 02433 0, -301, -301, 0, -301, -301, -301, -301, -301, 0, 02434 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02435 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02436 0, 0, -301, -301, -301, -301, -301, -301, -301, -301, 02437 -301, -301, -301, -301, -301, 0, 0, -301, -301, -301, 02438 0, 0, -301, 0, 0, 0, 0, 0, -301, 0, 02439 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02440 0, 0, -301, 0, 0, 0, 0, 0, -301, 0, 02441 -301, -301, -301, -301, -301, -301, -301, -301, -301, -301, 02442 0, 0, 0, 0, 0, -301, -301, -301, -301, -602, 02443 224, -301, -301, -301, 0, -301, 0, -602, -602, -602, 02444 0, 0, 0, -602, -602, 0, -602, 0, 0, 0, 02445 0, 0, 0, 0, 0, -602, 0, 0, 0, 0, 02446 0, 0, 0, 0, 0, 0, -602, -602, 0, -602, 02447 -602, -602, -602, -602, 0, 0, 0, 0, 0, 0, 02448 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02449 0, 0, 0, 0, 0, 0, 0, -602, -602, -602, 02450 -602, -602, -602, -602, -602, -602, -602, -602, -602, -602, 02451 0, 0, -602, -602, -602, 0, 700, 0, 0, 0, 02452 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02453 0, 0, 0, 0, 0, 0, 0, -602, 0, 0, 02454 0, 0, -106, -602, 0, -602, -602, -602, -602, -602, 02455 -602, -602, -602, -602, -602, 0, 0, 0, 0, -602, 02456 -602, -602, -602, -97, -294, 0, -602, 0, -602, 0, 02457 -602, 0, -294, -294, -294, 0, 0, 0, -294, -294, 02458 0, -294, 0, -620, 0, 0, 0, 0, 0, 0, 02459 0, -620, -620, -620, 0, 0, -620, -620, -620, 0, 02460 -620, -294, -294, 0, -294, -294, -294, -294, -294, -620, 02461 -620, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02462 -620, -620, 0, -620, -620, -620, -620, -620, 0, 0, 02463 0, 0, -294, -294, -294, -294, -294, -294, -294, -294, 02464 -294, -294, -294, -294, -294, 0, 0, -294, -294, -294, 02465 0, 701, 0, 0, 0, 0, 0, 0, 0, 0, 02466 0, 0, 0, 0, 0, 0, 0, 0, -620, 0, 02467 0, 0, -294, 0, 0, 0, 0, -108, -294, 0, 02468 -294, -294, -294, -294, -294, -294, -294, -294, -294, -294, 02469 0, -620, 0, 0, 0, -294, -294, -294, -99, 0, 02470 0, -294, 0, -294, 0, -294, 0, 0, 0, 0, 02471 0, 0, 0, -620, -620, 0, -620, 0, 0, 227, 02472 -620, 0, -620, 248, -620, 5, 6, 7, 8, 9, 02473 -620, -620, -620, 10, 11, 0, 0, -620, 12, 0, 02474 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02475 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02476 0, 27, 0, 0, 0, 0, 0, 28, 29, 249, 02477 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02478 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02479 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02480 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02481 0, 49, 50, 0, 51, 52, 0, 53, 0, 0, 02482 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 02483 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02484 0, 0, 0, 0, 0, 0, 0, 0, 63, 64, 02485 65, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02486 0, -620, 248, -620, 5, 6, 7, 8, 9, 0, 02487 0, -620, 10, 11, 0, -620, -620, 12, 0, 13, 02488 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 02489 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 02490 27, 0, 0, 0, 0, 0, 28, 29, 249, 31, 02491 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02492 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02493 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02494 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 02495 49, 50, 0, 51, 52, 0, 53, 0, 0, 54, 02496 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 02497 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02498 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 02499 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02500 -620, 248, -620, 5, 6, 7, 8, 9, 0, 0, 02501 -620, 10, 11, 0, 0, -620, 12, -620, 13, 14, 02502 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 02503 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 02504 0, 0, 0, 0, 0, 28, 29, 249, 31, 32, 02505 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 02506 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02507 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02508 0, 0, 0, 0, 0, 0, 48, 0, 0, 49, 02509 50, 0, 51, 52, 0, 53, 0, 0, 54, 55, 02510 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 02511 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02512 0, 0, 0, 0, 0, 0, 63, 64, 65, 0, 02513 0, 0, 0, 0, 0, 0, 0, 0, 0, -620, 02514 248, -620, 5, 6, 7, 8, 9, 0, 0, -620, 02515 10, 11, 0, 0, -620, 12, 0, 13, 14, 15, 02516 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02517 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02518 0, 0, 0, 0, 28, 29, 249, 31, 32, 33, 02519 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02520 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02521 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02522 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02523 0, 51, 52, 0, 53, 0, 0, 54, 55, 56, 02524 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 02525 0, 0, 0, 248, 0, 5, 6, 7, 8, 9, 02526 0, -620, -620, 10, 11, 63, 64, 65, 12, 0, 02527 13, 14, 15, 16, 17, 18, 19, 0, -620, 0, 02528 -620, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02529 0, 27, 0, 0, 0, 0, 0, 28, 29, 249, 02530 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02531 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02532 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02533 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02534 0, 49, 50, 0, 51, 52, 0, 53, 0, 0, 02535 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 02536 0, 0, 0, 0, 0, 0, 248, 0, 5, 6, 02537 7, 8, 9, 0, 0, 0, 10, 11, 63, 64, 02538 65, 12, 0, 13, 14, 15, 16, 17, 18, 19, 02539 0, -620, 0, -620, 0, 20, 21, 22, 23, 24, 02540 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 02541 28, 29, 249, 31, 32, 33, 34, 35, 36, 37, 02542 38, 39, 40, 0, 41, 42, 0, 43, 44, 45, 02543 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02544 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02545 0, 48, 0, 0, 250, 50, 0, 51, 52, 0, 02546 53, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02547 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 02548 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02549 0, 63, 64, 65, 0, 0, 0, 0, 0, 0, 02550 0, 0, -620, 0, -620, 248, -620, 5, 6, 7, 02551 8, 9, 0, 0, 0, 10, 11, 0, 0, 0, 02552 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02553 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02554 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02555 29, 249, 31, 32, 33, 34, 35, 36, 37, 38, 02556 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02557 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02558 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02559 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02560 0, 0, 54, 55, 56, 57, 58, 59, 60, 61, 02561 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02562 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02563 63, 64, 65, 0, 0, 0, 0, 0, 0, 0, 02564 0, -620, 0, -620, 248, -620, 5, 6, 7, 8, 02565 9, 0, 0, 0, 10, 11, 0, 0, 0, 12, 02566 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, 02567 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 02568 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, 02569 249, 31, 32, 33, 34, 35, 36, 37, 38, 39, 02570 40, 0, 41, 42, 0, 43, 44, 45, 0, 46, 02571 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02572 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 02573 0, 0, 49, 50, 0, 51, 52, 0, 53, 0, 02574 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 02575 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02576 0, 0, 0, 0, 0, 0, 0, 0, 0, 63, 02577 64, 65, 0, 0, -620, 4, 0, 5, 6, 7, 02578 8, 9, -620, 0, -620, 10, 11, 0, 0, 0, 02579 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02580 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02581 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02582 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 02583 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02584 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02585 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02586 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02587 0, 0, 54, 55, 56, 57, 58, 59, 60, 61, 02588 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02589 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02590 63, 64, 65, 0, 0, -620, 0, 0, 0, 0, 02591 0, 0, 0, -620, 248, -620, 5, 6, 7, 8, 02592 9, 0, 0, -620, 10, 11, 0, 0, 0, 12, 02593 0, 13, 14, 15, 16, 17, 18, 19, 0, 0, 02594 0, 0, 0, 20, 21, 22, 23, 24, 25, 26, 02595 0, 0, 27, 0, 0, 0, 0, 0, 28, 29, 02596 249, 31, 32, 33, 34, 35, 36, 37, 38, 39, 02597 40, 0, 41, 42, 0, 43, 44, 45, 0, 46, 02598 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02599 0, 0, 0, 0, 0, 0, 0, 0, 0, 48, 02600 0, 0, 49, 50, 0, 51, 52, 0, 53, 0, 02601 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 02602 0, 0, 0, 0, 0, 0, 0, 248, 0, 5, 02603 6, 7, 8, 9, 0, 0, 0, 10, 11, 63, 02604 64, 65, 12, 0, 13, 14, 15, 16, 17, 18, 02605 19, 0, -620, 0, -620, 0, 20, 21, 22, 23, 02606 24, 25, 26, 0, 0, 27, 0, 0, 0, 0, 02607 0, 28, 29, 249, 31, 32, 33, 34, 35, 36, 02608 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02609 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 02610 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02611 0, 0, 48, 0, 0, 49, 50, 0, 51, 52, 02612 0, 53, 0, 0, 54, 55, 56, 57, 58, 59, 02613 60, 61, 62, 0, -620, 0, 0, 0, 0, 0, 02614 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02615 10, 11, 63, 64, 65, 12, 0, 13, 14, 15, 02616 16, 17, 18, 19, 0, -620, 0, -620, 0, 20, 02617 21, 22, 23, 24, 25, 26, 0, 0, 200, 0, 02618 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02619 34, 35, 36, 37, 38, 39, 40, 201, 41, 42, 02620 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02621 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02622 0, 0, 0, 0, 0, 202, 0, 0, 203, 50, 02623 0, 51, 52, 0, 204, 205, 206, 54, 55, 56, 02624 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 02625 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 02626 0, 0, 0, 10, 11, 63, 207, 65, 12, 0, 02627 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02628 231, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02629 0, 27, 0, 0, 0, 0, 0, 0, 29, 0, 02630 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02631 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02632 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02633 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 02634 0, 203, 50, 0, 51, 52, 0, 0, 0, 0, 02635 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 02636 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 02637 7, 0, 9, 0, 0, 0, 10, 11, 63, 64, 02638 65, 12, 0, 13, 14, 15, 16, 17, 18, 19, 02639 0, 302, 0, 303, 0, 20, 21, 22, 23, 24, 02640 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 02641 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 02642 38, 39, 40, 0, 41, 42, 0, 43, 44, 45, 02643 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02644 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02645 0, 202, 0, 0, 203, 50, 0, 51, 52, 0, 02646 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02647 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 02648 0, 5, 6, 7, 8, 9, 0, 0, 0, 10, 02649 11, 63, 64, 65, 12, 0, 13, 14, 15, 16, 02650 17, 18, 19, 0, 0, 0, 231, 0, 20, 21, 02651 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 02652 0, 0, 0, 28, 29, 30, 31, 32, 33, 34, 02653 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02654 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02655 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02656 0, 0, 0, 0, 48, 0, 0, 49, 50, 0, 02657 51, 52, 0, 53, 0, 0, 54, 55, 56, 57, 02658 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 02659 0, 0, 0, 0, 5, 6, 7, 8, 9, 0, 02660 0, 0, 10, 11, 63, 64, 65, 12, 0, 13, 02661 14, 15, 16, 17, 18, 19, 0, 498, 0, 0, 02662 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 02663 27, 0, 0, 0, 0, 0, 28, 29, 249, 31, 02664 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02665 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02666 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02667 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 02668 49, 50, 0, 51, 52, 0, 53, 0, 0, 54, 02669 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 02670 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02671 0, 0, 0, 0, 0, 0, 0, 63, 64, 65, 02672 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02673 498, 118, 119, 120, 121, 122, 123, 124, 125, 126, 02674 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 02675 137, 138, 139, 140, 141, 0, 0, 0, 142, 143, 02676 144, 384, 385, 386, 387, 149, 150, 151, 0, 0, 02677 0, 0, 0, 152, 153, 154, 155, 388, 389, 390, 02678 391, 160, 37, 38, 392, 40, 0, 0, 0, 0, 02679 0, 0, 0, 0, 162, 163, 164, 165, 166, 167, 02680 168, 169, 170, 0, 0, 171, 172, 0, 0, 173, 02681 174, 175, 176, 0, 0, 0, 0, 0, 0, 0, 02682 0, 0, 0, 177, 178, 0, 0, 0, 0, 0, 02683 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02684 0, 0, 0, 0, 179, 180, 181, 182, 183, 184, 02685 185, 186, 187, 188, 0, 189, 190, 0, 0, 0, 02686 0, 0, 0, 191, 393, 118, 119, 120, 121, 122, 02687 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 02688 133, 134, 135, 136, 137, 138, 139, 140, 141, 0, 02689 0, 0, 142, 143, 144, 145, 146, 147, 148, 149, 02690 150, 151, 0, 0, 0, 0, 0, 152, 153, 154, 02691 155, 156, 157, 158, 159, 160, 280, 281, 161, 282, 02692 0, 0, 0, 0, 0, 0, 0, 0, 162, 163, 02693 164, 165, 166, 167, 168, 169, 170, 0, 0, 171, 02694 172, 0, 0, 173, 174, 175, 176, 0, 0, 0, 02695 0, 0, 0, 0, 0, 0, 0, 177, 178, 0, 02696 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02697 0, 0, 0, 0, 0, 0, 0, 0, 179, 180, 02698 181, 182, 183, 184, 185, 186, 187, 188, 0, 189, 02699 190, 0, 0, 0, 0, 0, 0, 191, 118, 119, 02700 120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 02701 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 02702 140, 141, 0, 0, 0, 142, 143, 144, 145, 146, 02703 147, 148, 149, 150, 151, 0, 0, 0, 0, 0, 02704 152, 153, 154, 155, 156, 157, 158, 159, 160, 233, 02705 0, 161, 0, 0, 0, 0, 0, 0, 0, 0, 02706 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, 02707 0, 0, 171, 172, 0, 0, 173, 174, 175, 176, 02708 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02709 177, 178, 0, 0, 55, 0, 0, 0, 0, 0, 02710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02711 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, 02712 188, 0, 189, 190, 0, 0, 0, 0, 0, 0, 02713 191, 118, 119, 120, 121, 122, 123, 124, 125, 126, 02714 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 02715 137, 138, 139, 140, 141, 0, 0, 0, 142, 143, 02716 144, 145, 146, 147, 148, 149, 150, 151, 0, 0, 02717 0, 0, 0, 152, 153, 154, 155, 156, 157, 158, 02718 159, 160, 0, 0, 161, 0, 0, 0, 0, 0, 02719 0, 0, 0, 0, 162, 163, 164, 165, 166, 167, 02720 168, 169, 170, 0, 0, 171, 172, 0, 0, 173, 02721 174, 175, 176, 0, 0, 0, 0, 0, 0, 0, 02722 0, 0, 0, 177, 178, 0, 0, 55, 0, 0, 02723 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02724 0, 0, 0, 0, 179, 180, 181, 182, 183, 184, 02725 185, 186, 187, 188, 0, 189, 190, 0, 0, 0, 02726 0, 0, 0, 191, 118, 119, 120, 121, 122, 123, 02727 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 02728 134, 135, 136, 137, 138, 139, 140, 141, 0, 0, 02729 0, 142, 143, 144, 145, 146, 147, 148, 149, 150, 02730 151, 0, 0, 0, 0, 0, 152, 153, 154, 155, 02731 156, 157, 158, 159, 160, 0, 0, 161, 0, 0, 02732 0, 0, 0, 0, 0, 0, 0, 162, 163, 164, 02733 165, 166, 167, 168, 169, 170, 0, 0, 171, 172, 02734 0, 0, 173, 174, 175, 176, 0, 0, 0, 0, 02735 0, 0, 0, 0, 0, 0, 177, 178, 0, 0, 02736 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02737 0, 0, 0, 0, 0, 0, 0, 179, 180, 181, 02738 182, 183, 184, 185, 186, 187, 188, 0, 189, 190, 02739 5, 6, 7, 0, 9, 0, 191, 0, 10, 11, 02740 0, 0, 0, 12, 0, 13, 14, 15, 238, 239, 02741 18, 19, 0, 0, 0, 0, 0, 240, 241, 242, 02742 23, 24, 25, 26, 0, 0, 200, 0, 0, 0, 02743 0, 0, 0, 268, 0, 0, 32, 33, 34, 35, 02744 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02745 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 02746 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02747 0, 0, 0, 269, 0, 0, 203, 50, 0, 51, 02748 52, 0, 0, 0, 0, 54, 55, 56, 57, 58, 02749 59, 60, 61, 62, 0, 0, 0, 0, 0, 5, 02750 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02751 0, 0, 12, 270, 13, 14, 15, 238, 239, 18, 02752 19, 271, 0, 0, 0, 0, 240, 241, 242, 23, 02753 24, 25, 26, 0, 0, 200, 0, 0, 0, 0, 02754 0, 0, 268, 0, 0, 32, 33, 34, 35, 36, 02755 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02756 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02757 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02758 0, 0, 269, 0, 0, 203, 50, 0, 51, 52, 02759 0, 0, 0, 0, 54, 55, 56, 57, 58, 59, 02760 60, 61, 62, 0, 0, 0, 0, 0, 5, 6, 02761 7, 8, 9, 0, 0, 0, 10, 11, 0, 0, 02762 0, 12, 270, 13, 14, 15, 16, 17, 18, 19, 02763 518, 0, 0, 0, 0, 20, 21, 22, 23, 24, 02764 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 02765 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 02766 38, 39, 40, 0, 41, 42, 0, 43, 44, 45, 02767 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02768 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02769 0, 48, 0, 0, 49, 50, 0, 51, 52, 0, 02770 53, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02771 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 02772 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02773 11, 63, 64, 65, 12, 0, 13, 14, 15, 16, 02774 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 02775 22, 23, 24, 25, 26, 0, 0, 200, 0, 0, 02776 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02777 35, 36, 37, 38, 39, 40, 201, 41, 42, 0, 02778 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02779 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02780 0, 0, 0, 0, 202, 0, 0, 203, 50, 0, 02781 51, 52, 0, 204, 205, 206, 54, 55, 56, 57, 02782 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 02783 0, 0, 0, 0, 5, 6, 7, 8, 9, 0, 02784 0, 0, 10, 11, 63, 207, 65, 12, 0, 13, 02785 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 02786 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 02787 27, 0, 0, 0, 0, 0, 28, 29, 0, 31, 02788 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02789 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02790 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02791 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 02792 49, 50, 0, 51, 52, 0, 53, 0, 0, 54, 02793 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 02794 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 02795 0, 9, 0, 0, 0, 10, 11, 63, 64, 65, 02796 12, 0, 13, 14, 15, 238, 239, 18, 19, 0, 02797 0, 0, 0, 0, 240, 241, 242, 23, 24, 25, 02798 26, 0, 0, 200, 0, 0, 0, 0, 0, 0, 02799 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 02800 39, 40, 201, 41, 42, 0, 43, 44, 45, 0, 02801 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02802 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02803 202, 0, 0, 203, 50, 0, 51, 52, 0, 608, 02804 205, 206, 54, 55, 56, 57, 58, 59, 60, 61, 02805 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02806 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02807 63, 207, 65, 12, 0, 13, 14, 15, 238, 239, 02808 18, 19, 0, 0, 0, 0, 0, 240, 241, 242, 02809 23, 24, 25, 26, 0, 0, 200, 0, 0, 0, 02810 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02811 36, 37, 38, 39, 40, 201, 41, 42, 0, 43, 02812 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02813 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02814 0, 0, 0, 202, 0, 0, 203, 50, 0, 51, 02815 52, 0, 204, 205, 0, 54, 55, 56, 57, 58, 02816 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 02817 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02818 0, 10, 11, 63, 207, 65, 12, 0, 13, 14, 02819 15, 238, 239, 18, 19, 0, 0, 0, 0, 0, 02820 240, 241, 242, 23, 24, 25, 26, 0, 0, 200, 02821 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 02822 33, 34, 35, 36, 37, 38, 39, 40, 201, 41, 02823 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02824 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02825 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 02826 50, 0, 51, 52, 0, 0, 205, 206, 54, 55, 02827 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 02828 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 02829 9, 0, 0, 0, 10, 11, 63, 207, 65, 12, 02830 0, 13, 14, 15, 238, 239, 18, 19, 0, 0, 02831 0, 0, 0, 240, 241, 242, 23, 24, 25, 26, 02832 0, 0, 200, 0, 0, 0, 0, 0, 0, 29, 02833 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 02834 40, 201, 41, 42, 0, 43, 44, 45, 0, 46, 02835 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02836 0, 0, 0, 0, 0, 0, 0, 0, 0, 202, 02837 0, 0, 203, 50, 0, 51, 52, 0, 608, 205, 02838 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 02839 0, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02840 6, 7, 0, 9, 0, 0, 0, 10, 11, 63, 02841 207, 65, 12, 0, 13, 14, 15, 238, 239, 18, 02842 19, 0, 0, 0, 0, 0, 240, 241, 242, 23, 02843 24, 25, 26, 0, 0, 200, 0, 0, 0, 0, 02844 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 02845 37, 38, 39, 40, 201, 41, 42, 0, 43, 44, 02846 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 02847 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02848 0, 0, 202, 0, 0, 203, 50, 0, 51, 52, 02849 0, 0, 205, 0, 54, 55, 56, 57, 58, 59, 02850 60, 61, 62, 0, 0, 0, 0, 0, 0, 0, 02851 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02852 10, 11, 63, 207, 65, 12, 0, 13, 14, 15, 02853 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02854 21, 22, 23, 24, 25, 26, 0, 0, 200, 0, 02855 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02856 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02857 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02858 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02859 0, 0, 0, 0, 0, 202, 0, 0, 203, 50, 02860 0, 51, 52, 0, 512, 0, 0, 54, 55, 56, 02861 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 02862 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 02863 0, 0, 0, 10, 11, 63, 207, 65, 12, 0, 02864 13, 14, 15, 238, 239, 18, 19, 0, 0, 0, 02865 0, 0, 240, 241, 242, 23, 24, 25, 26, 0, 02866 0, 200, 0, 0, 0, 0, 0, 0, 29, 0, 02867 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02868 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02869 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02870 0, 0, 0, 0, 0, 0, 0, 0, 202, 0, 02871 0, 203, 50, 0, 51, 52, 0, 204, 0, 0, 02872 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 02873 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 02874 7, 0, 9, 0, 0, 0, 10, 11, 63, 207, 02875 65, 12, 0, 13, 14, 15, 238, 239, 18, 19, 02876 0, 0, 0, 0, 0, 240, 241, 242, 23, 24, 02877 25, 26, 0, 0, 200, 0, 0, 0, 0, 0, 02878 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 02879 38, 39, 40, 0, 41, 42, 0, 43, 44, 45, 02880 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02881 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02882 0, 202, 0, 0, 203, 50, 0, 51, 52, 0, 02883 817, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02884 61, 62, 0, 0, 0, 0, 0, 0, 0, 0, 02885 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02886 11, 63, 207, 65, 12, 0, 13, 14, 15, 238, 02887 239, 18, 19, 0, 0, 0, 0, 0, 240, 241, 02888 242, 23, 24, 25, 26, 0, 0, 200, 0, 0, 02889 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02890 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02891 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02892 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02893 0, 0, 0, 0, 202, 0, 0, 203, 50, 0, 02894 51, 52, 0, 512, 0, 0, 54, 55, 56, 57, 02895 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 02896 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02897 0, 0, 10, 11, 63, 207, 65, 12, 0, 13, 02898 14, 15, 238, 239, 18, 19, 0, 0, 0, 0, 02899 0, 240, 241, 242, 23, 24, 25, 26, 0, 0, 02900 200, 0, 0, 0, 0, 0, 0, 29, 0, 0, 02901 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02902 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02903 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02904 0, 0, 0, 0, 0, 0, 0, 202, 0, 0, 02905 203, 50, 0, 51, 52, 0, 608, 0, 0, 54, 02906 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 02907 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 02908 0, 9, 0, 0, 0, 10, 11, 63, 207, 65, 02909 12, 0, 13, 14, 15, 238, 239, 18, 19, 0, 02910 0, 0, 0, 0, 240, 241, 242, 23, 24, 25, 02911 26, 0, 0, 200, 0, 0, 0, 0, 0, 0, 02912 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 02913 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02914 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02915 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02916 202, 0, 0, 203, 50, 0, 51, 52, 0, 0, 02917 0, 0, 54, 55, 56, 57, 58, 59, 60, 61, 02918 62, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02919 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02920 63, 207, 65, 12, 0, 13, 14, 15, 16, 17, 02921 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02922 23, 24, 25, 26, 0, 0, 200, 0, 0, 0, 02923 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02924 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02925 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02926 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02927 0, 0, 0, 202, 0, 0, 203, 50, 0, 51, 02928 52, 0, 0, 0, 0, 54, 55, 56, 57, 58, 02929 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 02930 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02931 0, 10, 11, 63, 207, 65, 12, 0, 13, 14, 02932 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 02933 20, 21, 22, 23, 24, 25, 26, 0, 0, 27, 02934 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 02935 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 02936 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02937 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02938 0, 0, 0, 0, 0, 0, 202, 0, 0, 203, 02939 50, 0, 51, 52, 0, 0, 0, 0, 54, 55, 02940 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 02941 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 02942 9, 0, 0, 0, 10, 11, 63, 64, 65, 12, 02943 0, 13, 14, 15, 238, 239, 18, 19, 0, 0, 02944 0, 0, 0, 240, 241, 242, 23, 24, 25, 26, 02945 0, 0, 200, 0, 0, 0, 0, 0, 0, 268, 02946 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 02947 40, 0, 41, 42, 0, 43, 44, 45, 0, 0, 02948 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02949 0, 0, 0, 0, 0, 0, 0, 0, 0, 269, 02950 0, 0, 323, 50, 0, 51, 52, 0, 324, 0, 02951 0, 54, 55, 56, 57, 58, 59, 60, 61, 62, 02952 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 02953 0, 0, 0, 10, 11, 0, 0, 0, 12, 270, 02954 13, 14, 15, 238, 239, 18, 19, 0, 0, 0, 02955 0, 0, 240, 241, 242, 23, 24, 25, 26, 0, 02956 0, 200, 0, 0, 0, 0, 0, 0, 268, 0, 02957 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02958 0, 41, 42, 0, 43, 44, 45, 0, 0, 0, 02959 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02960 0, 0, 0, 0, 0, 0, 0, 0, 365, 0, 02961 0, 49, 50, 0, 51, 52, 0, 53, 0, 0, 02962 54, 55, 56, 57, 58, 59, 60, 61, 62, 0, 02963 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02964 0, 0, 10, 11, 0, 0, 0, 12, 270, 13, 02965 14, 15, 238, 239, 18, 19, 0, 0, 0, 0, 02966 0, 240, 241, 242, 23, 24, 25, 26, 0, 0, 02967 200, 0, 0, 0, 0, 0, 0, 268, 0, 0, 02968 32, 33, 34, 373, 36, 37, 38, 374, 40, 0, 02969 41, 42, 0, 43, 44, 45, 0, 0, 0, 0, 02970 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02971 0, 0, 0, 0, 375, 0, 0, 376, 0, 0, 02972 203, 50, 0, 51, 52, 0, 0, 0, 0, 54, 02973 55, 56, 57, 58, 59, 60, 61, 62, 0, 0, 02974 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02975 0, 10, 11, 0, 0, 0, 12, 270, 13, 14, 02976 15, 238, 239, 18, 19, 0, 0, 0, 0, 0, 02977 240, 241, 242, 23, 24, 25, 26, 0, 0, 200, 02978 0, 0, 0, 0, 0, 0, 268, 0, 0, 32, 02979 33, 34, 373, 36, 37, 38, 374, 40, 0, 41, 02980 42, 0, 43, 44, 45, 0, 0, 0, 0, 0, 02981 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02982 0, 0, 0, 0, 0, 0, 376, 0, 0, 203, 02983 50, 0, 51, 52, 0, 0, 0, 0, 54, 55, 02984 56, 57, 58, 59, 60, 61, 62, 0, 0, 0, 02985 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02986 10, 11, 0, 0, 0, 12, 270, 13, 14, 15, 02987 238, 239, 18, 19, 0, 0, 0, 0, 0, 240, 02988 241, 242, 23, 24, 25, 26, 0, 0, 200, 0, 02989 0, 0, 0, 0, 0, 268, 0, 0, 32, 33, 02990 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02991 0, 43, 44, 45, 0, 0, 0, 0, 0, 0, 02992 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02993 0, 0, 0, 0, 0, 269, 0, 0, 323, 50, 02994 0, 51, 52, 0, 0, 0, 0, 54, 55, 56, 02995 57, 58, 59, 60, 61, 62, 0, 0, 0, 0, 02996 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02997 11, 0, 0, 0, 12, 270, 13, 14, 15, 238, 02998 239, 18, 19, 0, 0, 0, 0, 0, 240, 241, 02999 242, 23, 24, 25, 26, 0, 0, 200, 0, 0, 03000 0, 0, 0, 0, 268, 0, 0, 32, 33, 34, 03001 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 03002 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 03003 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03004 0, 0, 0, 0, 894, 0, 0, 203, 50, 0, 03005 51, 52, 0, 0, 0, 0, 54, 55, 56, 57, 03006 58, 59, 60, 61, 62, 0, 0, 0, 0, 0, 03007 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 03008 0, 0, 0, 12, 270, 13, 14, 15, 238, 239, 03009 18, 19, 0, 0, 0, 0, 0, 240, 241, 242, 03010 23, 24, 25, 26, 0, 0, 200, 0, 0, 0, 03011 0, 0, 0, 268, 0, 0, 32, 33, 34, 35, 03012 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 03013 44, 45, 0, 0, 0, 0, 0, 0, 0, 0, 03014 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03015 0, 0, 0, 974, 0, 0, 203, 50, 0, 51, 03016 52, 0, 0, 0, 0, 54, 55, 56, 57, 58, 03017 59, 60, 61, 62, 0, 0, 0, 0, 0, 0, 03018 561, 562, 0, 0, 563, 0, 0, 0, 0, 0, 03019 0, 0, 0, 270, 162, 163, 164, 165, 166, 167, 03020 168, 169, 170, 0, 0, 171, 172, 0, 0, 173, 03021 174, 175, 176, 0, 0, 0, 0, 0, 0, 0, 03022 0, 0, 0, 177, 178, 0, 0, 0, 0, 0, 03023 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03024 0, 0, 0, 0, 179, 180, 181, 182, 183, 184, 03025 185, 186, 187, 188, 0, 189, 190, 598, 562, 0, 03026 0, 599, 0, 191, 0, 0, 0, 0, 0, 0, 03027 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, 03028 0, 0, 171, 172, 0, 0, 173, 174, 175, 176, 03029 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03030 177, 178, 0, 0, 0, 0, 0, 0, 0, 0, 03031 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03032 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, 03033 188, 0, 189, 190, 612, 554, 0, 0, 613, 0, 03034 191, 0, 0, 0, 0, 0, 0, 0, 162, 163, 03035 164, 165, 166, 167, 168, 169, 170, 0, 0, 171, 03036 172, 0, 0, 173, 174, 175, 176, 0, 0, 0, 03037 0, 0, 0, 0, 0, 0, 0, 177, 178, 0, 03038 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03039 0, 0, 0, 0, 0, 0, 0, 0, 179, 180, 03040 181, 182, 183, 184, 185, 186, 187, 188, 0, 189, 03041 190, 615, 562, 0, 0, 616, 0, 191, 0, 0, 03042 0, 0, 0, 0, 0, 162, 163, 164, 165, 166, 03043 167, 168, 169, 170, 0, 0, 171, 172, 0, 0, 03044 173, 174, 175, 176, 0, 0, 0, 0, 0, 0, 03045 0, 0, 0, 0, 177, 178, 0, 0, 0, 0, 03046 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03047 0, 0, 0, 0, 0, 179, 180, 181, 182, 183, 03048 184, 185, 186, 187, 188, 0, 189, 190, 639, 554, 03049 0, 0, 640, 0, 191, 0, 0, 0, 0, 0, 03050 0, 0, 162, 163, 164, 165, 166, 167, 168, 169, 03051 170, 0, 0, 171, 172, 0, 0, 173, 174, 175, 03052 176, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03053 0, 177, 178, 0, 0, 0, 0, 0, 0, 0, 03054 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03055 0, 0, 179, 180, 181, 182, 183, 184, 185, 186, 03056 187, 188, 0, 189, 190, 642, 562, 0, 0, 643, 03057 0, 191, 0, 0, 0, 0, 0, 0, 0, 162, 03058 163, 164, 165, 166, 167, 168, 169, 170, 0, 0, 03059 171, 172, 0, 0, 173, 174, 175, 176, 0, 0, 03060 0, 0, 0, 0, 0, 0, 0, 0, 177, 178, 03061 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03062 0, 0, 0, 0, 0, 0, 0, 0, 0, 179, 03063 180, 181, 182, 183, 184, 185, 186, 187, 188, 0, 03064 189, 190, 727, 554, 0, 0, 728, 0, 191, 0, 03065 0, 0, 0, 0, 0, 0, 162, 163, 164, 165, 03066 166, 167, 168, 169, 170, 0, 0, 171, 172, 0, 03067 0, 173, 174, 175, 176, 0, 0, 0, 0, 0, 03068 0, 0, 0, 0, 0, 177, 178, 0, 0, 0, 03069 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03070 0, 0, 0, 0, 0, 0, 179, 180, 181, 182, 03071 183, 184, 185, 186, 187, 188, 0, 189, 190, 730, 03072 562, 0, 0, 731, 0, 191, 0, 0, 0, 0, 03073 0, 0, 0, 162, 163, 164, 165, 166, 167, 168, 03074 169, 170, 0, 0, 171, 172, 0, 0, 173, 174, 03075 175, 176, 0, 0, 0, 0, 0, 0, 0, 0, 03076 0, 0, 177, 178, 0, 0, 0, 0, 0, 0, 03077 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03078 0, 0, 0, 179, 180, 181, 182, 183, 184, 185, 03079 186, 187, 188, 0, 189, 190, 737, 554, 0, 0, 03080 738, 0, 191, 0, 0, 0, 0, 0, 0, 0, 03081 162, 163, 164, 165, 166, 167, 168, 169, 170, 0, 03082 0, 171, 172, 0, 0, 173, 174, 175, 176, 0, 03083 0, 0, 0, 0, 0, 0, 0, 0, 0, 177, 03084 178, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03085 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03086 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 03087 0, 189, 190, 1002, 554, 0, 0, 1003, 0, 191, 03088 0, 0, 0, 0, 0, 0, 0, 162, 163, 164, 03089 165, 166, 167, 168, 169, 170, 0, 0, 171, 172, 03090 0, 0, 173, 174, 175, 176, 0, 0, 0, 0, 03091 0, 0, 0, 0, 0, 0, 177, 178, 0, 0, 03092 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03093 0, 0, 0, 0, 0, 0, 0, 179, 180, 181, 03094 182, 183, 184, 185, 186, 187, 188, 0, 189, 190, 03095 1037, 554, 0, 0, 1038, 0, 191, 0, 0, 0, 03096 0, 0, 0, 0, 162, 163, 164, 165, 166, 167, 03097 168, 169, 170, 0, 0, 171, 172, 0, 0, 173, 03098 174, 175, 176, 0, 0, 0, 0, 0, 0, 0, 03099 0, 0, 0, 177, 178, 0, 0, 0, 0, 0, 03100 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03101 0, 0, 0, 0, 179, 180, 181, 182, 183, 184, 03102 185, 186, 187, 188, 0, 189, 190, 1040, 562, 0, 03103 0, 1041, 0, 191, 0, 0, 0, 0, 0, 0, 03104 0, 162, 163, 164, 165, 166, 167, 168, 169, 170, 03105 0, 0, 171, 172, 0, 0, 173, 174, 175, 176, 03106 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03107 177, 178, 0, 0, 0, 0, 0, 0, 0, 0, 03108 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03109 0, 179, 180, 181, 182, 183, 184, 185, 186, 187, 03110 188, 0, 189, 190, 0, 0, 0, 0, 0, 0, 03111 191 03112 }; 03113 03114 #define yypact_value_is_default(yystate) \ 03115 ((yystate) == (-808)) 03116 03117 #define yytable_value_is_error(yytable_value) \ 03118 ((yytable_value) == (-621)) 03119 03120 static const yytype_int16 yycheck[] = 03121 { 03122 2, 87, 55, 96, 90, 353, 79, 355, 472, 16, 03123 17, 22, 359, 20, 354, 326, 614, 2, 8, 4, 03124 16, 17, 8, 28, 20, 326, 412, 27, 49, 29, 03125 74, 4, 220, 53, 420, 86, 87, 420, 28, 90, 03126 575, 94, 28, 641, 594, 49, 668, 685, 574, 51, 03127 52, 399, 468, 67, 262, 51, 779, 472, 266, 79, 03128 53, 376, 508, 74, 90, 511, 2, 415, 4, 417, 03129 715, 91, 92, 93, 719, 458, 416, 440, 25, 787, 03130 16, 17, 25, 13, 20, 16, 17, 13, 67, 20, 03131 875, 26, 25, 27, 873, 443, 903, 250, 37, 38, 03132 58, 29, 518, 16, 17, 64, 8, 20, 68, 87, 03133 68, 90, 777, 49, 139, 113, 141, 53, 85, 61, 03134 51, 52, 13, 471, 907, 25, 28, 76, 64, 61, 03135 470, 729, 596, 651, 0, 113, 134, 802, 96, 97, 03136 85, 779, 740, 79, 286, 15, 288, 17, 290, 787, 03137 86, 87, 294, 55, 90, 91, 92, 93, 141, 13, 03138 939, 25, 120, 123, 124, 125, 133, 26, 110, 118, 03139 323, 13, 25, 25, 25, 898, 59, 60, 110, 230, 03140 25, 232, 203, 111, 806, 807, 736, 134, 133, 13, 03141 130, 134, 94, 657, 744, 130, 56, 1004, 271, 243, 03142 1, 134, 141, 136, 134, 139, 991, 141, 259, 139, 03143 136, 141, 214, 139, 993, 141, 237, 224, 220, 226, 03144 227, 307, 308, 309, 310, 227, 252, 950, 224, 250, 03145 226, 1014, 25, 581, 134, 621, 622, 945, 252, 622, 03146 580, 429, 657, 140, 690, 593, 250, 1026, 139, 25, 03147 141, 271, 592, 771, 772, 140, 307, 308, 309, 310, 03148 898, 312, 313, 248, 886, 903, 140, 203, 268, 632, 03149 134, 130, 136, 252, 360, 361, 591, 136, 230, 743, 03150 696, 134, 134, 134, 929, 139, 1009, 141, 224, 134, 03151 226, 227, 87, 224, 230, 226, 232, 139, 670, 141, 03152 672, 237, 323, 255, 324, 61, 258, 945, 85, 360, 03153 361, 224, 248, 226, 250, 139, 117, 141, 113, 323, 03154 113, 306, 134, 259, 375, 321, 311, 853, 743, 141, 03155 326, 324, 85, 306, 85, 271, 362, 113, 139, 134, 03156 141, 134, 964, 485, 137, 61, 140, 354, 141, 65, 03157 492, 107, 354, 109, 26, 873, 133, 875, 134, 37, 03158 38, 137, 321, 85, 85, 141, 1004, 326, 85, 97, 03159 306, 307, 308, 309, 310, 311, 312, 313, 725, 132, 03160 133, 931, 133, 362, 140, 321, 85, 323, 324, 85, 03161 326, 107, 120, 109, 929, 468, 697, 59, 60, 378, 03162 28, 85, 52, 714, 54, 55, 56, 57, 61, 416, 03163 132, 133, 133, 85, 416, 2, 133, 4, 354, 26, 03164 356, 939, 940, 611, 360, 361, 428, 429, 636, 16, 03165 17, 87, 437, 20, 133, 703, 132, 133, 440, 375, 03166 990, 1039, 710, 402, 403, 518, 85, 437, 468, 133, 03167 87, 437, 134, 355, 107, 440, 109, 113, 130, 141, 03168 132, 133, 49, 470, 136, 113, 402, 403, 470, 85, 03169 422, 134, 936, 991, 426, 993, 113, 64, 85, 431, 03170 416, 412, 868, 68, 134, 868, 52, 140, 54, 55, 03171 56, 57, 113, 132, 133, 447, 87, 399, 518, 86, 03172 87, 87, 85, 90, 440, 507, 508, 87, 1026, 511, 03173 100, 883, 884, 557, 450, 417, 888, 133, 890, 891, 03174 87, 565, 113, 130, 455, 132, 133, 113, 87, 136, 03175 134, 87, 468, 113, 470, 437, 121, 122, 123, 124, 03176 125, 443, 542, 134, 595, 87, 113, 558, 58, 570, 03177 133, 572, 54, 87, 85, 566, 600, 113, 68, 85, 03178 560, 63, 64, 136, 637, 517, 568, 134, 134, 471, 03179 917, 113, 760, 580, 625, 56, 923, 134, 580, 113, 03180 576, 113, 518, 61, 141, 592, 96, 97, 88, 600, 03181 592, 136, 134, 26, 573, 574, 141, 134, 600, 137, 03182 605, 132, 133, 141, 87, 136, 132, 133, 587, 611, 03183 120, 14, 15, 134, 614, 605, 203, 637, 136, 605, 03184 52, 130, 87, 696, 56, 997, 998, 999, 1000, 107, 03185 632, 109, 110, 136, 570, 136, 572, 224, 68, 226, 03186 227, 641, 137, 230, 580, 232, 732, 632, 113, 735, 03187 237, 113, 85, 138, 131, 748, 592, 85, 594, 595, 03188 704, 248, 61, 250, 666, 686, 668, 711, 689, 134, 03189 691, 1019, 259, 56, 134, 1047, 696, 68, 1018, 581, 03190 68, 732, 94, 635, 735, 685, 110, 110, 690, 625, 03191 621, 593, 110, 746, 110, 134, 632, 130, 85, 132, 03192 133, 637, 139, 605, 132, 133, 17, 56, 107, 711, 03193 109, 110, 714, 715, 134, 717, 25, 719, 714, 306, 03194 307, 308, 309, 310, 311, 312, 313, 26, 68, 729, 03195 61, 577, 137, 134, 321, 131, 323, 130, 697, 326, 03196 740, 700, 701, 83, 84, 132, 133, 10, 707, 708, 03197 686, 140, 134, 689, 733, 691, 134, 843, 760, 85, 03198 696, 697, 134, 140, 700, 701, 745, 354, 134, 356, 03199 85, 707, 708, 360, 361, 87, 107, 777, 109, 110, 03200 800, 121, 122, 123, 124, 125, 85, 52, 375, 134, 03201 742, 113, 843, 85, 815, 68, 732, 136, 8, 735, 03202 736, 113, 802, 131, 806, 807, 132, 133, 744, 761, 03203 83, 84, 13, 61, 134, 402, 403, 132, 133, 840, 03204 61, 134, 134, 775, 113, 52, 847, 848, 134, 416, 03205 851, 130, 134, 132, 133, 52, 838, 136, 134, 841, 03206 132, 133, 15, 52, 746, 118, 119, 120, 121, 122, 03207 123, 124, 125, 440, 85, 134, 115, 878, 879, 107, 03208 138, 109, 110, 450, 800, 134, 107, 131, 109, 110, 03209 829, 892, 134, 893, 853, 113, 855, 85, 724, 815, 03210 134, 85, 118, 470, 886, 134, 16, 17, 54, 55, 03211 20, 57, 134, 829, 134, 741, 916, 63, 64, 920, 03212 139, 132, 133, 10, 840, 87, 131, 843, 860, 10, 03213 134, 847, 848, 685, 88, 851, 46, 47, 9, 685, 03214 872, 51, 52, 134, 132, 133, 118, 929, 132, 133, 03215 137, 113, 134, 56, 64, 65, 201, 134, 134, 204, 03216 205, 206, 878, 879, 52, 134, 54, 55, 56, 57, 03217 58, 131, 134, 134, 10, 134, 892, 893, 108, 980, 03218 68, 982, 964, 131, 134, 134, 56, 988, 450, 134, 03219 970, 134, 134, 134, 685, 68, 136, 136, 134, 91, 03220 916, 89, 93, 570, 920, 572, 711, 1021, 96, 97, 03221 83, 84, 771, 580, 685, 931, 1014, 749, 844, 52, 03222 846, 54, 55, 56, 57, 592, 294, 594, 595, 781, 03223 856, 1018, 120, 785, 1020, 861, 1018, 99, 1020, 1021, 03224 57, 787, 94, 781, 790, 936, 898, 120, 121, 122, 03225 123, 124, 125, 900, 779, 396, 89, -1, 625, 1039, 03226 -1, -1, 95, -1, 980, 632, 982, 40, 41, 42, 03227 43, 44, 988, -1, 990, 52, 321, 54, 55, 56, 03228 57, 326, -1, 52, -1, 54, 55, 56, 57, -1, 03229 781, 201, -1, -1, 204, 205, 206, 207, -1, -1, 03230 926, 927, 1018, 2, 52, 4, 54, 55, 56, 57, 03231 -1, -1, 89, -1, 224, -1, 226, 227, 95, 686, 03232 89, -1, 689, -1, 691, -1, -1, -1, -1, -1, 03233 697, -1, -1, 700, 701, -1, -1, 1019, -1, -1, 03234 707, 708, -1, -1, -1, -1, 898, -1, 900, -1, 03235 49, 903, -1, 905, 53, -1, -1, 903, -1, 905, 03236 -1, -1, -1, 989, -1, 732, 411, 412, 735, 736, 03237 -1, -1, -1, -1, -1, 420, -1, 744, -1, -1, 03238 79, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03239 -1, -1, 91, 92, 93, 94, 1022, -1, 1024, 945, 03240 -1, 947, -1, 809, 810, -1, 952, 898, -1, 900, 03241 455, 321, 903, 458, 905, -1, 326, 327, 328, 329, 03242 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 03243 340, 341, 342, 343, 344, 345, 346, 347, 348, 349, 03244 350, 351, 352, -1, 354, -1, -1, -1, 815, -1, 03245 -1, -1, 1004, -1, 1006, -1, -1, 1009, 1004, 1011, 03246 1006, -1, 829, -1, -1, 1011, -1, 512, -1, -1, 03247 -1, -1, -1, 840, -1, -1, 843, -1, -1, -1, 03248 847, 848, 1028, -1, 851, -1, -1, -1, -1, -1, 03249 -1, -1, 402, 403, -1, -1, -1, 1049, -1, -1, 03250 410, 411, 412, 1049, 203, -1, 416, -1, 418, 419, 03251 420, 878, 879, 1004, -1, 1006, -1, -1, 1009, -1, 03252 1011, -1, -1, -1, -1, 892, -1, -1, -1, 439, 03253 -1, 576, -1, -1, 444, -1, -1, -1, 237, -1, 03254 -1, -1, -1, -1, -1, 455, -1, -1, 458, 248, 03255 -1, 250, -1, 920, -1, 961, 962, -1, 1049, 965, 03256 470, 967, 968, 608, 931, -1, -1, -1, -1, -1, 03257 -1, -1, 271, -1, -1, -1, 621, 622, -1, -1, 03258 -1, -1, -1, 2, -1, 4, 496, 497, -1, -1, 03259 -1, -1, -1, -1, 52, -1, 54, 55, 56, 57, 03260 58, -1, 512, -1, 649, -1, -1, 306, -1, -1, 03261 68, -1, 311, 980, -1, 982, -1, -1, -1, -1, 03262 -1, 988, -1, 990, 323, 324, 1032, 1033, 1034, 1035, 03263 49, 89, -1, -1, 53, -1, -1, 95, 96, 97, 03264 52, -1, 54, 55, 56, 57, 58, -1, 693, 1055, 03265 -1, 1018, -1, -1, -1, -1, 68, 356, -1, -1, 03266 79, -1, 120, -1, -1, 123, 576, -1, -1, 714, 03267 580, -1, 91, 92, 93, 94, -1, 89, -1, -1, 03268 -1, -1, 592, 141, 96, 97, -1, -1, -1, 52, 03269 -1, 54, 55, 56, 57, 58, -1, -1, 608, -1, 03270 -1, -1, -1, -1, -1, 68, -1, -1, 120, -1, 03271 -1, 621, 622, -1, -1, -1, -1, -1, -1, -1, 03272 -1, -1, -1, 768, -1, -1, 89, -1, -1, -1, 03273 -1, -1, 95, 96, 97, -1, -1, -1, -1, 649, 03274 -1, 440, -1, -1, -1, -1, -1, -1, -1, -1, 03275 -1, 450, -1, 2, -1, 4, -1, 120, -1, -1, 03276 123, -1, -1, -1, -1, -1, -1, -1, -1, 468, 03277 -1, -1, 817, 136, 2, -1, 4, -1, -1, -1, 03278 -1, -1, -1, 693, 203, -1, -1, 697, 698, -1, 03279 700, 701, -1, 2, -1, 4, -1, 707, 708, -1, 03280 49, -1, -1, -1, 714, 850, -1, -1, -1, -1, 03281 52, -1, 54, 55, 56, 57, 58, -1, 237, 518, 03282 -1, 49, -1, 868, -1, 53, 68, -1, -1, 248, 03283 -1, 250, -1, -1, -1, -1, -1, -1, -1, -1, 03284 49, 751, -1, -1, -1, 755, 756, 89, 758, 759, 03285 -1, 79, 271, 95, 96, 97, -1, -1, 768, -1, 03286 -1, -1, -1, 91, 92, 93, -1, -1, -1, -1, 03287 -1, 570, -1, 572, -1, -1, -1, -1, 120, -1, 03288 -1, 123, 91, -1, -1, -1, -1, 306, -1, -1, 03289 -1, -1, 311, -1, 136, 594, -1, -1, -1, -1, 03290 -1, -1, -1, -1, 323, 324, -1, 817, -1, -1, 03291 -1, 821, -1, -1, -1, -1, -1, -1, -1, 829, 03292 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03293 -1, -1, -1, 632, -1, -1, -1, 356, 637, -1, 03294 850, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03295 -1, -1, -1, -1, 203, -1, -1, 867, 868, -1, 03296 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03297 76, 77, 78, 79, 80, 203, -1, 83, 84, -1, 03298 -1, -1, -1, -1, -1, -1, -1, 686, 237, -1, 03299 689, -1, 691, -1, 203, -1, -1, 696, -1, 248, 03300 -1, 250, -1, -1, -1, -1, -1, -1, 114, 237, 03301 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 03302 248, 440, 250, -1, -1, -1, -1, -1, 237, -1, 03303 -1, 450, -1, -1, -1, 141, -1, 736, -1, 248, 03304 -1, 250, -1, 271, -1, 744, -1, -1, -1, 468, 03305 -1, -1, -1, -1, -1, -1, -1, 306, -1, -1, 03306 -1, 52, 311, 54, 55, 56, 57, 58, -1, -1, 03307 -1, -1, -1, -1, 323, -1, -1, 68, 306, -1, 03308 -1, -1, -1, 311, -1, -1, -1, -1, -1, -1, 03309 -1, -1, -1, -1, -1, 323, 324, 306, 89, 518, 03310 -1, 800, 311, -1, 95, 96, 97, 356, 1018, -1, 03311 -1, -1, -1, -1, 323, -1, 815, 326, -1, -1, 03312 -1, -1, -1, -1, -1, -1, -1, -1, 356, 120, 03313 44, -1, 123, -1, -1, -1, -1, -1, -1, -1, 03314 -1, 840, -1, -1, -1, -1, -1, 356, 847, 848, 03315 -1, 570, 851, 572, 68, 69, 70, 71, 72, 73, 03316 74, 75, 76, 77, 78, 79, 80, -1, -1, 83, 03317 84, -1, -1, -1, -1, 594, -1, -1, -1, 878, 03318 879, -1, 52, -1, 54, 55, 56, 57, 58, -1, 03319 -1, 440, -1, 892, 893, -1, -1, -1, 68, -1, 03320 114, 450, 116, 117, 118, 119, 120, 121, 122, 123, 03321 124, 125, 440, 632, -1, -1, -1, 916, 637, 89, 03322 134, 920, 450, -1, -1, 95, 96, 97, -1, -1, 03323 -1, 440, 931, -1, -1, -1, -1, -1, -1, -1, 03324 468, 450, -1, -1, -1, -1, -1, -1, -1, -1, 03325 120, -1, -1, 123, -1, -1, -1, -1, -1, -1, 03326 -1, -1, -1, -1, -1, -1, -1, 686, -1, -1, 03327 689, -1, 691, -1, -1, -1, -1, 696, -1, -1, 03328 -1, 980, -1, 982, 52, 53, -1, -1, 56, 988, 03329 518, 990, -1, -1, -1, -1, -1, -1, 66, 67, 03330 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 03331 78, -1, -1, 81, 82, 83, 84, 736, -1, -1, 03332 -1, 570, -1, 572, -1, 744, -1, 95, 96, -1, 03333 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03334 -1, -1, 570, -1, 572, 594, -1, -1, 116, 117, 03335 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, 03336 128, 570, -1, 572, -1, -1, 594, 135, -1, -1, 03337 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03338 -1, 800, -1, 632, -1, 594, -1, -1, -1, -1, 03339 -1, -1, -1, -1, -1, -1, 815, -1, -1, -1, 03340 -1, -1, -1, -1, 632, -1, -1, -1, -1, 637, 03341 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03342 -1, 840, -1, 632, -1, -1, -1, -1, 847, 848, 03343 -1, -1, 851, -1, -1, -1, -1, 686, -1, -1, 03344 689, -1, 691, -1, -1, -1, -1, -1, 676, -1, 03345 -1, -1, -1, -1, -1, -1, -1, -1, 686, 878, 03346 879, 689, -1, 691, -1, -1, -1, -1, 696, -1, 03347 -1, -1, -1, 892, 893, -1, -1, 686, -1, -1, 03348 689, -1, 691, -1, -1, -1, -1, 736, 697, -1, 03349 -1, -1, -1, -1, -1, 744, -1, 916, -1, -1, 03350 -1, 920, -1, -1, -1, -1, -1, -1, 736, -1, 03351 -1, -1, 931, -1, -1, -1, 744, -1, -1, -1, 03352 -1, -1, -1, -1, -1, -1, -1, 736, 68, 69, 03353 70, 71, 72, 73, 74, 744, -1, 77, 78, -1, 03354 -1, -1, -1, 83, 84, -1, -1, -1, -1, -1, 03355 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03356 -1, 980, -1, 982, -1, -1, 815, -1, -1, 988, 03357 -1, 990, 800, -1, -1, -1, 116, 117, 118, 119, 03358 120, 121, 122, 123, 124, 125, -1, 815, -1, -1, 03359 -1, 840, -1, -1, -1, -1, -1, -1, 847, 848, 03360 -1, -1, 851, -1, -1, -1, 815, -1, -1, -1, 03361 -1, -1, 840, -1, -1, -1, -1, -1, -1, 847, 03362 848, -1, -1, 851, -1, -1, -1, -1, -1, 878, 03363 879, 840, -1, -1, -1, -1, -1, -1, 847, 848, 03364 -1, -1, 851, 892, -1, -1, -1, -1, -1, -1, 03365 878, 879, -1, -1, -1, -1, -1, -1, -1, -1, 03366 -1, -1, -1, -1, 892, 893, -1, -1, -1, 878, 03367 879, 920, -1, -1, -1, -1, -1, -1, -1, -1, 03368 -1, -1, 931, 892, -1, -1, -1, -1, 916, -1, 03369 -1, -1, 920, -1, -1, -1, -1, -1, -1, -1, 03370 -1, -1, -1, 931, -1, -1, -1, 916, -1, -1, 03371 -1, 920, -1, -1, -1, -1, -1, -1, -1, -1, 03372 -1, -1, 931, -1, -1, -1, -1, -1, -1, -1, 03373 -1, 980, -1, 982, -1, -1, -1, -1, -1, 988, 03374 -1, 990, -1, -1, -1, -1, -1, -1, -1, -1, 03375 -1, -1, 980, -1, 982, -1, -1, -1, -1, -1, 03376 988, -1, 990, -1, -1, -1, -1, -1, -1, -1, 03377 -1, 980, -1, 982, -1, -1, -1, -1, -1, 988, 03378 -1, 990, 0, 1, -1, 3, 4, 5, 6, 7, 03379 -1, -1, -1, 11, 12, -1, -1, -1, 16, -1, 03380 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03381 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03382 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03383 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03384 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03385 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03386 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03387 -1, 89, 90, -1, 92, 93, -1, 95, -1, -1, 03388 98, 99, 100, 101, 102, 103, 104, 105, 106, 0, 03389 -1, -1, -1, -1, -1, -1, -1, 8, 9, 10, 03390 -1, -1, 13, 14, 15, -1, 17, -1, 126, 127, 03391 128, -1, 44, -1, -1, 26, 27, 28, 29, -1, 03392 -1, 139, -1, 141, -1, -1, 37, 38, -1, 40, 03393 41, 42, 43, 44, -1, -1, 68, 69, 70, 71, 03394 72, 73, 74, 75, 76, 77, 78, 79, 80, -1, 03395 -1, 83, 84, -1, -1, -1, -1, 68, 69, 70, 03396 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 03397 -1, -1, 83, 84, 85, -1, 87, 88, -1, -1, 03398 -1, -1, 114, 94, 116, 117, 118, 119, 120, 121, 03399 122, 123, 124, 125, -1, -1, -1, 108, -1, -1, 03400 111, -1, 113, 114, 115, 116, 117, 118, 119, 120, 03401 121, 122, 123, 124, 125, -1, -1, -1, -1, 130, 03402 131, 132, 133, 134, 0, -1, 137, 138, 139, -1, 03403 141, -1, 8, 9, 10, -1, -1, 13, 14, 15, 03404 -1, 17, -1, -1, -1, -1, -1, 44, -1, 25, 03405 -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, 03406 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03407 -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 03408 77, 78, 79, 80, -1, -1, 83, 84, -1, -1, 03409 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03410 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03411 -1, 87, 88, -1, -1, -1, -1, 114, 94, 116, 03412 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, 03413 -1, -1, 108, -1, -1, 111, -1, 113, 114, 115, 03414 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 03415 -1, -1, -1, -1, -1, 131, 132, 133, 134, 0, 03416 -1, 137, 138, 139, -1, 141, -1, 8, 9, 10, 03417 -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, 03418 -1, -1, -1, -1, 25, -1, 27, 28, 29, -1, 03419 -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 03420 41, 42, 43, 44, -1, -1, 68, 69, 70, 71, 03421 72, 73, 74, 75, 76, 77, 78, 79, 80, -1, 03422 -1, 83, 84, -1, -1, -1, -1, 68, 69, 70, 03423 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 03424 -1, -1, 83, 84, 85, -1, 87, 88, -1, -1, 03425 -1, -1, 114, 94, 116, 117, 118, 119, 120, 121, 03426 122, 123, 124, 125, -1, -1, -1, 108, -1, -1, 03427 111, -1, 113, 114, 115, 116, 117, 118, 119, 120, 03428 121, 122, 123, 124, 125, -1, -1, -1, -1, -1, 03429 131, 132, 133, 134, 0, -1, 137, 138, 139, -1, 03430 141, -1, 8, 9, 10, -1, -1, 13, 14, 15, 03431 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, 03432 26, 27, 28, 29, -1, -1, -1, -1, -1, -1, 03433 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03434 -1, 68, 69, 70, 71, 72, 73, 74, 75, 76, 03435 77, 78, 79, 80, -1, -1, 83, 84, -1, -1, 03436 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03437 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03438 -1, -1, 88, -1, -1, -1, -1, -1, 94, 116, 03439 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, 03440 -1, -1, 108, -1, -1, 111, -1, -1, 114, 115, 03441 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 03442 -1, -1, -1, -1, 130, 131, 132, 133, 134, 0, 03443 -1, 137, 138, 139, -1, 141, -1, 8, 9, 10, 03444 -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, 03445 -1, -1, -1, -1, -1, 26, 27, 28, 29, -1, 03446 -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 03447 41, 42, 43, 44, -1, -1, 68, 69, 70, 71, 03448 72, 73, 74, 75, -1, 77, 78, -1, -1, -1, 03449 -1, 83, 84, -1, -1, -1, -1, 68, 69, 70, 03450 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 03451 -1, -1, 83, 84, 85, -1, -1, 88, -1, -1, 03452 -1, -1, -1, 94, 116, 117, 118, 119, 120, 121, 03453 122, 123, 124, 125, -1, -1, -1, 108, -1, -1, 03454 111, -1, -1, 114, 115, 116, 117, 118, 119, 120, 03455 121, 122, 123, 124, 125, -1, -1, -1, -1, 130, 03456 131, 132, 133, 134, 0, -1, 137, 138, 139, -1, 03457 141, -1, 8, 9, 10, -1, -1, 13, 14, 15, 03458 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, 03459 -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, 03460 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03461 -1, 68, 69, 70, 71, 72, 73, 74, -1, -1, 03462 77, 78, -1, -1, -1, -1, 83, 84, -1, -1, 03463 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03464 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03465 -1, 87, 88, -1, -1, -1, -1, -1, 94, 116, 03466 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, 03467 -1, -1, 108, -1, -1, 111, -1, 113, 114, 115, 03468 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 03469 -1, -1, -1, -1, -1, 131, 132, 133, 134, 0, 03470 -1, 137, 138, 139, -1, 141, -1, 8, 9, 10, 03471 -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, 03472 -1, -1, -1, -1, -1, 26, 27, 28, -1, -1, 03473 -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 03474 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, 03475 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03476 -1, -1, -1, -1, -1, -1, -1, 68, 69, 70, 03477 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 03478 -1, -1, 83, 84, 85, -1, -1, 88, -1, -1, 03479 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 03480 -1, -1, -1, -1, -1, -1, -1, 108, -1, -1, 03481 -1, -1, -1, 114, -1, 116, 117, 118, 119, 120, 03482 121, 122, 123, 124, 125, -1, -1, -1, -1, 130, 03483 131, 132, 133, 134, 0, 136, 137, 138, 139, -1, 03484 141, -1, 8, 9, 10, -1, -1, 13, 14, 15, 03485 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, 03486 -1, 27, 28, 29, -1, -1, -1, -1, -1, -1, 03487 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03488 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03489 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03490 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03491 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03492 -1, -1, 88, -1, -1, -1, -1, -1, 94, -1, 03493 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03494 -1, -1, 108, -1, -1, 111, -1, -1, 114, 115, 03495 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 03496 -1, -1, -1, -1, -1, 131, 132, 133, 134, 0, 03497 -1, 137, 138, 139, -1, 141, -1, 8, 9, 10, 03498 -1, -1, 13, 14, 15, -1, 17, -1, -1, -1, 03499 -1, -1, -1, -1, -1, 26, 27, 28, -1, -1, 03500 -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 03501 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, 03502 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03503 -1, -1, -1, -1, -1, -1, -1, 68, 69, 70, 03504 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 03505 -1, -1, 83, 84, 85, -1, -1, 88, -1, -1, 03506 -1, -1, -1, 94, -1, -1, -1, -1, -1, -1, 03507 -1, -1, -1, -1, -1, -1, -1, 108, -1, -1, 03508 -1, -1, -1, 114, -1, 116, 117, 118, 119, 120, 03509 121, 122, 123, 124, 125, -1, -1, -1, -1, 130, 03510 131, 132, 133, 134, 0, 136, 137, 138, 139, -1, 03511 141, -1, 8, 9, 10, -1, -1, 13, 14, 15, 03512 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, 03513 -1, 27, 28, -1, -1, -1, -1, -1, -1, -1, 03514 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03515 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03516 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03517 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03518 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03519 -1, -1, 88, -1, -1, -1, -1, -1, 94, -1, 03520 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03521 -1, -1, 108, -1, -1, -1, -1, -1, 114, -1, 03522 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 03523 -1, -1, -1, -1, -1, 131, 132, 133, 134, 0, 03524 136, 137, 138, 139, -1, 141, -1, 8, 9, 10, 03525 -1, -1, -1, 14, 15, -1, 17, -1, -1, -1, 03526 -1, -1, -1, -1, -1, 26, -1, -1, -1, -1, 03527 -1, -1, -1, -1, -1, -1, 37, 38, -1, 40, 03528 41, 42, 43, 44, -1, -1, -1, -1, -1, -1, 03529 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03530 -1, -1, -1, -1, -1, -1, -1, 68, 69, 70, 03531 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 03532 -1, -1, 83, 84, 85, -1, 87, -1, -1, -1, 03533 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03534 -1, -1, -1, -1, -1, -1, -1, 108, -1, -1, 03535 -1, -1, 113, 114, -1, 116, 117, 118, 119, 120, 03536 121, 122, 123, 124, 125, -1, -1, -1, -1, 130, 03537 131, 132, 133, 134, 0, -1, 137, -1, 139, -1, 03538 141, -1, 8, 9, 10, -1, -1, -1, 14, 15, 03539 -1, 17, -1, 0, -1, -1, -1, -1, -1, -1, 03540 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 03541 17, 37, 38, -1, 40, 41, 42, 43, 44, 26, 03542 27, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03543 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, 03544 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03545 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03546 -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, 03547 -1, -1, -1, -1, -1, -1, -1, -1, 85, -1, 03548 -1, -1, 108, -1, -1, -1, -1, 113, 114, -1, 03549 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 03550 -1, 108, -1, -1, -1, 131, 132, 133, 134, -1, 03551 -1, 137, -1, 139, -1, 141, -1, -1, -1, -1, 03552 -1, -1, -1, 130, 131, -1, 133, -1, -1, 136, 03553 137, -1, 139, 1, 141, 3, 4, 5, 6, 7, 03554 8, 9, 10, 11, 12, -1, -1, 15, 16, -1, 03555 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03556 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03557 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03558 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03559 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03560 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03561 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03562 -1, 89, 90, -1, 92, 93, -1, 95, -1, -1, 03563 98, 99, 100, 101, 102, 103, 104, 105, 106, -1, 03564 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03565 -1, -1, -1, -1, -1, -1, -1, -1, 126, 127, 03566 128, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03567 -1, 139, 1, 141, 3, 4, 5, 6, 7, -1, 03568 -1, 10, 11, 12, -1, 14, 15, 16, -1, 18, 03569 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03570 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03571 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 03572 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03573 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03574 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03575 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03576 89, 90, -1, 92, 93, -1, 95, -1, -1, 98, 03577 99, 100, 101, 102, 103, 104, 105, 106, -1, -1, 03578 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03579 -1, -1, -1, -1, -1, -1, -1, 126, 127, 128, 03580 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03581 139, 1, 141, 3, 4, 5, 6, 7, -1, -1, 03582 10, 11, 12, -1, -1, 15, 16, 17, 18, 19, 03583 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 03584 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03585 -1, -1, -1, -1, -1, 45, 46, 47, 48, 49, 03586 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 03587 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03588 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03589 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03590 90, -1, 92, 93, -1, 95, -1, -1, 98, 99, 03591 100, 101, 102, 103, 104, 105, 106, -1, -1, -1, 03592 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03593 -1, -1, -1, -1, -1, -1, 126, 127, 128, -1, 03594 -1, -1, -1, -1, -1, -1, -1, -1, -1, 139, 03595 1, 141, 3, 4, 5, 6, 7, -1, -1, 10, 03596 11, 12, -1, -1, 15, 16, -1, 18, 19, 20, 03597 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03598 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03599 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, 03600 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03601 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03602 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03603 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03604 -1, 92, 93, -1, 95, -1, -1, 98, 99, 100, 03605 101, 102, 103, 104, 105, 106, -1, -1, -1, -1, 03606 -1, -1, -1, 1, -1, 3, 4, 5, 6, 7, 03607 -1, 9, 10, 11, 12, 126, 127, 128, 16, -1, 03608 18, 19, 20, 21, 22, 23, 24, -1, 139, -1, 03609 141, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03610 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03611 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03612 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03613 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03614 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03615 -1, 89, 90, -1, 92, 93, -1, 95, -1, -1, 03616 98, 99, 100, 101, 102, 103, 104, 105, 106, -1, 03617 -1, -1, -1, -1, -1, -1, 1, -1, 3, 4, 03618 5, 6, 7, -1, -1, -1, 11, 12, 126, 127, 03619 128, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03620 -1, 139, -1, 141, -1, 30, 31, 32, 33, 34, 03621 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03622 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 03623 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, 03624 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03625 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03626 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03627 95, -1, -1, 98, 99, 100, 101, 102, 103, 104, 03628 105, 106, -1, -1, -1, -1, -1, -1, -1, -1, 03629 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03630 -1, 126, 127, 128, -1, -1, -1, -1, -1, -1, 03631 -1, -1, 137, -1, 139, 1, 141, 3, 4, 5, 03632 6, 7, -1, -1, -1, 11, 12, -1, -1, -1, 03633 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03634 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03635 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03636 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 03637 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03638 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03639 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03640 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03641 -1, -1, 98, 99, 100, 101, 102, 103, 104, 105, 03642 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03643 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03644 126, 127, 128, -1, -1, -1, -1, -1, -1, -1, 03645 -1, 137, -1, 139, 1, 141, 3, 4, 5, 6, 03646 7, -1, -1, -1, 11, 12, -1, -1, -1, 16, 03647 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03648 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03649 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, 03650 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 03651 57, -1, 59, 60, -1, 62, 63, 64, -1, 66, 03652 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03653 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03654 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1, 03655 -1, 98, 99, 100, 101, 102, 103, 104, 105, 106, 03656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03657 -1, -1, -1, -1, -1, -1, -1, -1, -1, 126, 03658 127, 128, -1, -1, 131, 1, -1, 3, 4, 5, 03659 6, 7, 139, -1, 141, 11, 12, -1, -1, -1, 03660 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03661 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03662 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03663 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 03664 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03665 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03666 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03667 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03668 -1, -1, 98, 99, 100, 101, 102, 103, 104, 105, 03669 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03670 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03671 126, 127, 128, -1, -1, 131, -1, -1, -1, -1, 03672 -1, -1, -1, 139, 1, 141, 3, 4, 5, 6, 03673 7, -1, -1, 10, 11, 12, -1, -1, -1, 16, 03674 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03675 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03676 -1, -1, 39, -1, -1, -1, -1, -1, 45, 46, 03677 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 03678 57, -1, 59, 60, -1, 62, 63, 64, -1, 66, 03679 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03680 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03681 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1, 03682 -1, 98, 99, 100, 101, 102, 103, 104, 105, 106, 03683 -1, -1, -1, -1, -1, -1, -1, 1, -1, 3, 03684 4, 5, 6, 7, -1, -1, -1, 11, 12, 126, 03685 127, 128, 16, -1, 18, 19, 20, 21, 22, 23, 03686 24, -1, 139, -1, 141, -1, 30, 31, 32, 33, 03687 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03688 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 03689 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03690 64, -1, 66, 67, -1, -1, -1, -1, -1, -1, 03691 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03692 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03693 -1, 95, -1, -1, 98, 99, 100, 101, 102, 103, 03694 104, 105, 106, -1, 108, -1, -1, -1, -1, -1, 03695 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03696 11, 12, 126, 127, 128, 16, -1, 18, 19, 20, 03697 21, 22, 23, 24, -1, 139, -1, 141, -1, 30, 03698 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03699 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03700 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 03701 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03702 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03703 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03704 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100, 03705 101, 102, 103, 104, 105, 106, -1, -1, -1, -1, 03706 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, 03707 -1, -1, -1, 11, 12, 126, 127, 128, 16, -1, 03708 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03709 141, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03710 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, 03711 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03712 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03713 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03714 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03715 -1, 89, 90, -1, 92, 93, -1, -1, -1, -1, 03716 98, 99, 100, 101, 102, 103, 104, 105, 106, -1, 03717 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 03718 5, -1, 7, -1, -1, -1, 11, 12, 126, 127, 03719 128, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03720 -1, 139, -1, 141, -1, 30, 31, 32, 33, 34, 03721 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03722 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03723 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, 03724 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03725 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03726 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03727 -1, -1, -1, 98, 99, 100, 101, 102, 103, 104, 03728 105, 106, -1, -1, -1, -1, -1, -1, -1, -1, 03729 -1, 3, 4, 5, 6, 7, -1, -1, -1, 11, 03730 12, 126, 127, 128, 16, -1, 18, 19, 20, 21, 03731 22, 23, 24, -1, -1, -1, 141, -1, 30, 31, 03732 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03733 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 03734 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03735 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03736 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03737 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03738 92, 93, -1, 95, -1, -1, 98, 99, 100, 101, 03739 102, 103, 104, 105, 106, -1, -1, -1, -1, -1, 03740 -1, -1, -1, -1, 3, 4, 5, 6, 7, -1, 03741 -1, -1, 11, 12, 126, 127, 128, 16, -1, 18, 03742 19, 20, 21, 22, 23, 24, -1, 139, -1, -1, 03743 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03744 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 03745 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03746 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03747 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03748 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03749 89, 90, -1, 92, 93, -1, 95, -1, -1, 98, 03750 99, 100, 101, 102, 103, 104, 105, 106, -1, -1, 03751 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03752 -1, -1, -1, -1, -1, -1, -1, 126, 127, 128, 03753 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03754 139, 3, 4, 5, 6, 7, 8, 9, 10, 11, 03755 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 03756 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, 03757 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, 03758 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 03759 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, 03760 -1, -1, -1, -1, 66, 67, 68, 69, 70, 71, 03761 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 03762 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 03763 -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 03764 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03765 -1, -1, -1, -1, 116, 117, 118, 119, 120, 121, 03766 122, 123, 124, 125, -1, 127, 128, -1, -1, -1, 03767 -1, -1, -1, 135, 136, 3, 4, 5, 6, 7, 03768 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 03769 18, 19, 20, 21, 22, 23, 24, 25, 26, -1, 03770 -1, -1, 30, 31, 32, 33, 34, 35, 36, 37, 03771 38, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03772 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03773 -1, -1, -1, -1, -1, -1, -1, -1, 66, 67, 03774 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 03775 78, -1, -1, 81, 82, 83, 84, -1, -1, -1, 03776 -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, 03777 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03778 -1, -1, -1, -1, -1, -1, -1, -1, 116, 117, 03779 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, 03780 128, -1, -1, -1, -1, -1, -1, 135, 3, 4, 03781 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 03782 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 03783 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, 03784 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, 03785 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 03786 -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, 03787 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 03788 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 03789 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03790 95, 96, -1, -1, 99, -1, -1, -1, -1, -1, 03791 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03792 -1, 116, 117, 118, 119, 120, 121, 122, 123, 124, 03793 125, -1, 127, 128, -1, -1, -1, -1, -1, -1, 03794 135, 3, 4, 5, 6, 7, 8, 9, 10, 11, 03795 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 03796 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, 03797 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, 03798 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 03799 52, 53, -1, -1, 56, -1, -1, -1, -1, -1, 03800 -1, -1, -1, -1, 66, 67, 68, 69, 70, 71, 03801 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 03802 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 03803 -1, -1, -1, 95, 96, -1, -1, 99, -1, -1, 03804 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03805 -1, -1, -1, -1, 116, 117, 118, 119, 120, 121, 03806 122, 123, 124, 125, -1, 127, 128, -1, -1, -1, 03807 -1, -1, -1, 135, 3, 4, 5, 6, 7, 8, 03808 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 03809 19, 20, 21, 22, 23, 24, 25, 26, -1, -1, 03810 -1, 30, 31, 32, 33, 34, 35, 36, 37, 38, 03811 39, -1, -1, -1, -1, -1, 45, 46, 47, 48, 03812 49, 50, 51, 52, 53, -1, -1, 56, -1, -1, 03813 -1, -1, -1, -1, -1, -1, -1, 66, 67, 68, 03814 69, 70, 71, 72, 73, 74, -1, -1, 77, 78, 03815 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1, 03816 -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 03817 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03818 -1, -1, -1, -1, -1, -1, -1, 116, 117, 118, 03819 119, 120, 121, 122, 123, 124, 125, -1, 127, 128, 03820 3, 4, 5, -1, 7, -1, 135, -1, 11, 12, 03821 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22, 03822 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03823 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03824 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03825 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03826 63, 64, -1, -1, -1, -1, -1, -1, -1, -1, 03827 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03828 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03829 93, -1, -1, -1, -1, 98, 99, 100, 101, 102, 03830 103, 104, 105, 106, -1, -1, -1, -1, -1, 3, 03831 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 03832 -1, -1, 16, 126, 18, 19, 20, 21, 22, 23, 03833 24, 134, -1, -1, -1, -1, 30, 31, 32, 33, 03834 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03835 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03836 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03837 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03838 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03839 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03840 -1, -1, -1, -1, 98, 99, 100, 101, 102, 103, 03841 104, 105, 106, -1, -1, -1, -1, -1, 3, 4, 03842 5, 6, 7, -1, -1, -1, 11, 12, -1, -1, 03843 -1, 16, 126, 18, 19, 20, 21, 22, 23, 24, 03844 134, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03845 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03846 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 03847 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, 03848 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03849 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03850 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03851 95, -1, -1, 98, 99, 100, 101, 102, 103, 104, 03852 105, 106, -1, -1, -1, -1, -1, -1, -1, -1, 03853 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03854 12, 126, 127, 128, 16, -1, 18, 19, 20, 21, 03855 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03856 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03857 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03858 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 03859 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03860 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03861 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03862 92, 93, -1, 95, 96, 97, 98, 99, 100, 101, 03863 102, 103, 104, 105, 106, -1, -1, -1, -1, -1, 03864 -1, -1, -1, -1, 3, 4, 5, 6, 7, -1, 03865 -1, -1, 11, 12, 126, 127, 128, 16, -1, 18, 03866 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03867 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03868 39, -1, -1, -1, -1, -1, 45, 46, -1, 48, 03869 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03870 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03871 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03872 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03873 89, 90, -1, 92, 93, -1, 95, -1, -1, 98, 03874 99, 100, 101, 102, 103, 104, 105, 106, -1, -1, 03875 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 03876 -1, 7, -1, -1, -1, 11, 12, 126, 127, 128, 03877 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03878 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03879 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03880 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03881 56, 57, 58, 59, 60, -1, 62, 63, 64, -1, 03882 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03883 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03884 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03885 96, 97, 98, 99, 100, 101, 102, 103, 104, 105, 03886 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03887 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 03888 126, 127, 128, 16, -1, 18, 19, 20, 21, 22, 03889 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03890 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03891 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03892 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 03893 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03894 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03895 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03896 93, -1, 95, 96, -1, 98, 99, 100, 101, 102, 03897 103, 104, 105, 106, -1, -1, -1, -1, -1, -1, 03898 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 03899 -1, 11, 12, 126, 127, 128, 16, -1, 18, 19, 03900 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 03901 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03902 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03903 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 03904 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03905 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03906 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03907 90, -1, 92, 93, -1, -1, 96, 97, 98, 99, 03908 100, 101, 102, 103, 104, 105, 106, -1, -1, -1, 03909 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 03910 7, -1, -1, -1, 11, 12, 126, 127, 128, 16, 03911 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03912 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03913 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, 03914 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 03915 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, 03916 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03917 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03918 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96, 03919 -1, 98, 99, 100, 101, 102, 103, 104, 105, 106, 03920 -1, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03921 4, 5, -1, 7, -1, -1, -1, 11, 12, 126, 03922 127, 128, 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, 58, 59, 60, -1, 62, 63, 03927 64, -1, 66, 67, -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, -1, 96, -1, 98, 99, 100, 101, 102, 103, 03931 104, 105, 106, -1, -1, -1, -1, -1, -1, -1, 03932 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03933 11, 12, 126, 127, 128, 16, -1, 18, 19, 20, 03934 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03935 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03936 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03937 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03938 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03939 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03940 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03941 -1, 92, 93, -1, 95, -1, -1, 98, 99, 100, 03942 101, 102, 103, 104, 105, 106, -1, -1, -1, -1, 03943 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, 03944 -1, -1, -1, 11, 12, 126, 127, 128, 16, -1, 03945 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03946 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03947 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, 03948 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03949 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03950 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03951 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03952 -1, 89, 90, -1, 92, 93, -1, 95, -1, -1, 03953 98, 99, 100, 101, 102, 103, 104, 105, 106, -1, 03954 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 03955 5, -1, 7, -1, -1, -1, 11, 12, 126, 127, 03956 128, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03957 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03958 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03959 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03960 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, 03961 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03962 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03963 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03964 95, -1, -1, 98, 99, 100, 101, 102, 103, 104, 03965 105, 106, -1, -1, -1, -1, -1, -1, -1, -1, 03966 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03967 12, 126, 127, 128, 16, -1, 18, 19, 20, 21, 03968 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03969 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03970 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03971 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03972 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03973 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03974 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03975 92, 93, -1, 95, -1, -1, 98, 99, 100, 101, 03976 102, 103, 104, 105, 106, -1, -1, -1, -1, -1, 03977 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 03978 -1, -1, 11, 12, 126, 127, 128, 16, -1, 18, 03979 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03980 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03981 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 03982 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03983 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03984 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03985 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03986 89, 90, -1, 92, 93, -1, 95, -1, -1, 98, 03987 99, 100, 101, 102, 103, 104, 105, 106, -1, -1, 03988 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 03989 -1, 7, -1, -1, -1, 11, 12, 126, 127, 128, 03990 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03991 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03992 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03993 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03994 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03995 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03996 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03997 86, -1, -1, 89, 90, -1, 92, 93, -1, -1, 03998 -1, -1, 98, 99, 100, 101, 102, 103, 104, 105, 03999 106, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04000 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 04001 126, 127, 128, 16, -1, 18, 19, 20, 21, 22, 04002 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 04003 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 04004 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 04005 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 04006 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 04007 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04008 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 04009 93, -1, -1, -1, -1, 98, 99, 100, 101, 102, 04010 103, 104, 105, 106, -1, -1, -1, -1, -1, -1, 04011 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 04012 -1, 11, 12, 126, 127, 128, 16, -1, 18, 19, 04013 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 04014 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 04015 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 04016 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 04017 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 04018 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04019 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 04020 90, -1, 92, 93, -1, -1, -1, -1, 98, 99, 04021 100, 101, 102, 103, 104, 105, 106, -1, -1, -1, 04022 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 04023 7, -1, -1, -1, 11, 12, 126, 127, 128, 16, 04024 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 04025 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 04026 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, 04027 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 04028 57, -1, 59, 60, -1, 62, 63, 64, -1, -1, 04029 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04030 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 04031 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1, 04032 -1, 98, 99, 100, 101, 102, 103, 104, 105, 106, 04033 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, 04034 -1, -1, -1, 11, 12, -1, -1, -1, 16, 126, 04035 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 04036 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 04037 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, 04038 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 04039 -1, 59, 60, -1, 62, 63, 64, -1, -1, -1, 04040 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04041 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 04042 -1, 89, 90, -1, 92, 93, -1, 95, -1, -1, 04043 98, 99, 100, 101, 102, 103, 104, 105, 106, -1, 04044 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 04045 -1, -1, 11, 12, -1, -1, -1, 16, 126, 18, 04046 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 04047 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 04048 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 04049 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 04050 59, 60, -1, 62, 63, 64, -1, -1, -1, -1, 04051 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04052 -1, -1, -1, -1, 83, -1, -1, 86, -1, -1, 04053 89, 90, -1, 92, 93, -1, -1, -1, -1, 98, 04054 99, 100, 101, 102, 103, 104, 105, 106, -1, -1, 04055 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 04056 -1, 11, 12, -1, -1, -1, 16, 126, 18, 19, 04057 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 04058 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 04059 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 04060 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 04061 60, -1, 62, 63, 64, -1, -1, -1, -1, -1, 04062 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04063 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 04064 90, -1, 92, 93, -1, -1, -1, -1, 98, 99, 04065 100, 101, 102, 103, 104, 105, 106, -1, -1, -1, 04066 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 04067 11, 12, -1, -1, -1, 16, 126, 18, 19, 20, 04068 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 04069 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 04070 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 04071 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 04072 -1, 62, 63, 64, -1, -1, -1, -1, -1, -1, 04073 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04074 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 04075 -1, 92, 93, -1, -1, -1, -1, 98, 99, 100, 04076 101, 102, 103, 104, 105, 106, -1, -1, -1, -1, 04077 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 04078 12, -1, -1, -1, 16, 126, 18, 19, 20, 21, 04079 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 04080 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 04081 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 04082 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 04083 62, 63, 64, -1, -1, -1, -1, -1, -1, -1, 04084 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04085 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 04086 92, 93, -1, -1, -1, -1, 98, 99, 100, 101, 04087 102, 103, 104, 105, 106, -1, -1, -1, -1, -1, 04088 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 04089 -1, -1, -1, 16, 126, 18, 19, 20, 21, 22, 04090 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 04091 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 04092 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 04093 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 04094 63, 64, -1, -1, -1, -1, -1, -1, -1, -1, 04095 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04096 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 04097 93, -1, -1, -1, -1, 98, 99, 100, 101, 102, 04098 103, 104, 105, 106, -1, -1, -1, -1, -1, -1, 04099 52, 53, -1, -1, 56, -1, -1, -1, -1, -1, 04100 -1, -1, -1, 126, 66, 67, 68, 69, 70, 71, 04101 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 04102 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 04103 -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 04104 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04105 -1, -1, -1, -1, 116, 117, 118, 119, 120, 121, 04106 122, 123, 124, 125, -1, 127, 128, 52, 53, -1, 04107 -1, 56, -1, 135, -1, -1, -1, -1, -1, -1, 04108 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 04109 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 04110 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04111 95, 96, -1, -1, -1, -1, -1, -1, -1, -1, 04112 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04113 -1, 116, 117, 118, 119, 120, 121, 122, 123, 124, 04114 125, -1, 127, 128, 52, 53, -1, -1, 56, -1, 04115 135, -1, -1, -1, -1, -1, -1, -1, 66, 67, 04116 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 04117 78, -1, -1, 81, 82, 83, 84, -1, -1, -1, 04118 -1, -1, -1, -1, -1, -1, -1, 95, 96, -1, 04119 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04120 -1, -1, -1, -1, -1, -1, -1, -1, 116, 117, 04121 118, 119, 120, 121, 122, 123, 124, 125, -1, 127, 04122 128, 52, 53, -1, -1, 56, -1, 135, -1, -1, 04123 -1, -1, -1, -1, -1, 66, 67, 68, 69, 70, 04124 71, 72, 73, 74, -1, -1, 77, 78, -1, -1, 04125 81, 82, 83, 84, -1, -1, -1, -1, -1, -1, 04126 -1, -1, -1, -1, 95, 96, -1, -1, -1, -1, 04127 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04128 -1, -1, -1, -1, -1, 116, 117, 118, 119, 120, 04129 121, 122, 123, 124, 125, -1, 127, 128, 52, 53, 04130 -1, -1, 56, -1, 135, -1, -1, -1, -1, -1, 04131 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, 04132 74, -1, -1, 77, 78, -1, -1, 81, 82, 83, 04133 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04134 -1, 95, 96, -1, -1, -1, -1, -1, -1, -1, 04135 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04136 -1, -1, 116, 117, 118, 119, 120, 121, 122, 123, 04137 124, 125, -1, 127, 128, 52, 53, -1, -1, 56, 04138 -1, 135, -1, -1, -1, -1, -1, -1, -1, 66, 04139 67, 68, 69, 70, 71, 72, 73, 74, -1, -1, 04140 77, 78, -1, -1, 81, 82, 83, 84, -1, -1, 04141 -1, -1, -1, -1, -1, -1, -1, -1, 95, 96, 04142 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04143 -1, -1, -1, -1, -1, -1, -1, -1, -1, 116, 04144 117, 118, 119, 120, 121, 122, 123, 124, 125, -1, 04145 127, 128, 52, 53, -1, -1, 56, -1, 135, -1, 04146 -1, -1, -1, -1, -1, -1, 66, 67, 68, 69, 04147 70, 71, 72, 73, 74, -1, -1, 77, 78, -1, 04148 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1, 04149 -1, -1, -1, -1, -1, 95, 96, -1, -1, -1, 04150 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04151 -1, -1, -1, -1, -1, -1, 116, 117, 118, 119, 04152 120, 121, 122, 123, 124, 125, -1, 127, 128, 52, 04153 53, -1, -1, 56, -1, 135, -1, -1, -1, -1, 04154 -1, -1, -1, 66, 67, 68, 69, 70, 71, 72, 04155 73, 74, -1, -1, 77, 78, -1, -1, 81, 82, 04156 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, 04157 -1, -1, 95, 96, -1, -1, -1, -1, -1, -1, 04158 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04159 -1, -1, -1, 116, 117, 118, 119, 120, 121, 122, 04160 123, 124, 125, -1, 127, 128, 52, 53, -1, -1, 04161 56, -1, 135, -1, -1, -1, -1, -1, -1, -1, 04162 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 04163 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1, 04164 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, 04165 96, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04166 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04167 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 04168 -1, 127, 128, 52, 53, -1, -1, 56, -1, 135, 04169 -1, -1, -1, -1, -1, -1, -1, 66, 67, 68, 04170 69, 70, 71, 72, 73, 74, -1, -1, 77, 78, 04171 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1, 04172 -1, -1, -1, -1, -1, -1, 95, 96, -1, -1, 04173 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04174 -1, -1, -1, -1, -1, -1, -1, 116, 117, 118, 04175 119, 120, 121, 122, 123, 124, 125, -1, 127, 128, 04176 52, 53, -1, -1, 56, -1, 135, -1, -1, -1, 04177 -1, -1, -1, -1, 66, 67, 68, 69, 70, 71, 04178 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 04179 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 04180 -1, -1, -1, 95, 96, -1, -1, -1, -1, -1, 04181 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04182 -1, -1, -1, -1, 116, 117, 118, 119, 120, 121, 04183 122, 123, 124, 125, -1, 127, 128, 52, 53, -1, 04184 -1, 56, -1, 135, -1, -1, -1, -1, -1, -1, 04185 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 04186 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 04187 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04188 95, 96, -1, -1, -1, -1, -1, -1, -1, -1, 04189 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04190 -1, 116, 117, 118, 119, 120, 121, 122, 123, 124, 04191 125, -1, 127, 128, -1, -1, -1, -1, -1, -1, 04192 135 04193 }; 04194 04195 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 04196 symbol of state STATE-NUM. */ 04197 static const yytype_uint16 yystos[] = 04198 { 04199 0, 143, 144, 0, 1, 3, 4, 5, 6, 7, 04200 11, 12, 16, 18, 19, 20, 21, 22, 23, 24, 04201 30, 31, 32, 33, 34, 35, 36, 39, 45, 46, 04202 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 04203 57, 59, 60, 62, 63, 64, 66, 67, 86, 89, 04204 90, 92, 93, 95, 98, 99, 100, 101, 102, 103, 04205 104, 105, 106, 126, 127, 128, 145, 146, 147, 154, 04206 156, 157, 159, 160, 163, 164, 165, 167, 168, 169, 04207 171, 172, 182, 196, 215, 216, 217, 218, 219, 220, 04208 221, 222, 223, 224, 225, 251, 252, 266, 267, 268, 04209 269, 270, 271, 272, 275, 277, 278, 290, 292, 293, 04210 294, 295, 296, 297, 298, 329, 340, 147, 3, 4, 04211 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 04212 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 04213 25, 26, 30, 31, 32, 33, 34, 35, 36, 37, 04214 38, 39, 45, 46, 47, 48, 49, 50, 51, 52, 04215 53, 56, 66, 67, 68, 69, 70, 71, 72, 73, 04216 74, 77, 78, 81, 82, 83, 84, 95, 96, 116, 04217 117, 118, 119, 120, 121, 122, 123, 124, 125, 127, 04218 128, 135, 175, 176, 177, 178, 180, 181, 290, 292, 04219 39, 58, 86, 89, 95, 96, 97, 127, 164, 172, 04220 182, 184, 189, 192, 194, 215, 294, 295, 297, 298, 04221 327, 328, 189, 189, 136, 190, 191, 136, 186, 190, 04222 136, 141, 334, 54, 177, 334, 148, 130, 21, 22, 04223 30, 31, 32, 163, 182, 215, 182, 56, 1, 47, 04224 89, 150, 151, 152, 154, 166, 167, 340, 198, 199, 04225 185, 194, 327, 340, 184, 326, 327, 340, 46, 86, 04226 126, 134, 171, 196, 215, 294, 295, 298, 243, 244, 04227 54, 55, 57, 175, 282, 291, 281, 282, 283, 140, 04228 273, 140, 279, 140, 276, 140, 280, 59, 60, 159, 04229 182, 182, 139, 141, 333, 338, 339, 40, 41, 42, 04230 43, 44, 37, 38, 26, 130, 186, 190, 257, 28, 04231 249, 113, 134, 89, 95, 168, 113, 68, 69, 70, 04232 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 04233 83, 84, 114, 116, 117, 118, 119, 120, 121, 122, 04234 123, 124, 125, 85, 132, 133, 197, 157, 158, 158, 04235 202, 204, 158, 333, 339, 86, 165, 172, 215, 231, 04236 294, 295, 298, 52, 56, 83, 86, 173, 174, 215, 04237 294, 295, 298, 174, 33, 34, 35, 36, 49, 50, 04238 51, 52, 56, 136, 175, 296, 324, 85, 133, 332, 04239 257, 269, 87, 87, 134, 184, 56, 184, 184, 184, 04240 113, 88, 134, 193, 340, 85, 132, 133, 87, 87, 04241 134, 193, 189, 334, 335, 189, 188, 189, 194, 327, 04242 340, 157, 335, 157, 54, 63, 64, 155, 136, 183, 04243 130, 150, 85, 133, 87, 154, 153, 166, 137, 333, 04244 339, 335, 335, 157, 138, 134, 141, 337, 134, 337, 04245 131, 337, 334, 56, 59, 60, 168, 170, 134, 85, 04246 132, 133, 245, 61, 107, 109, 110, 284, 110, 284, 04247 110, 65, 284, 110, 110, 274, 284, 110, 61, 110, 04248 110, 110, 274, 110, 61, 110, 68, 68, 139, 147, 04249 158, 158, 158, 158, 154, 157, 157, 259, 258, 94, 04250 161, 250, 95, 159, 184, 194, 195, 166, 134, 171, 04251 134, 156, 159, 172, 182, 184, 195, 182, 182, 182, 04252 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 04253 182, 182, 182, 182, 182, 182, 182, 182, 182, 182, 04254 182, 182, 182, 52, 53, 56, 180, 256, 330, 331, 04255 188, 52, 53, 56, 180, 255, 330, 149, 150, 13, 04256 227, 338, 227, 158, 158, 333, 17, 260, 56, 85, 04257 132, 133, 25, 157, 52, 56, 173, 1, 117, 299, 04258 338, 85, 132, 133, 211, 325, 212, 332, 52, 56, 04259 330, 159, 182, 159, 182, 179, 182, 184, 95, 184, 04260 192, 327, 52, 56, 188, 52, 56, 328, 335, 137, 04261 335, 134, 134, 335, 177, 201, 182, 145, 131, 330, 04262 330, 182, 130, 335, 152, 200, 327, 134, 170, 52, 04263 56, 188, 52, 56, 52, 54, 55, 56, 57, 58, 04264 68, 89, 95, 96, 97, 120, 123, 136, 247, 302, 04265 304, 305, 306, 307, 308, 309, 312, 313, 314, 315, 04266 318, 319, 320, 321, 322, 286, 285, 140, 284, 140, 04267 140, 140, 182, 182, 76, 118, 238, 239, 340, 238, 04268 162, 238, 184, 134, 335, 170, 134, 113, 44, 334, 04269 87, 87, 186, 190, 254, 334, 336, 87, 87, 186, 04270 190, 253, 10, 226, 8, 262, 340, 150, 13, 150, 04271 27, 228, 338, 228, 260, 194, 226, 52, 56, 188, 04272 52, 56, 206, 209, 338, 300, 208, 52, 56, 173, 04273 188, 149, 157, 136, 301, 304, 213, 186, 187, 190, 04274 340, 44, 177, 184, 193, 87, 87, 336, 87, 87, 04275 327, 157, 131, 145, 335, 337, 168, 336, 113, 184, 04276 52, 89, 95, 232, 233, 234, 306, 304, 246, 134, 04277 303, 134, 323, 340, 52, 134, 323, 134, 303, 52, 04278 134, 303, 52, 287, 54, 55, 57, 289, 298, 52, 04279 58, 235, 237, 240, 308, 310, 311, 314, 316, 317, 04280 320, 322, 334, 150, 150, 238, 150, 95, 184, 170, 04281 182, 115, 159, 182, 159, 182, 161, 186, 138, 87, 04282 159, 182, 159, 182, 161, 187, 184, 195, 263, 340, 04283 15, 230, 340, 14, 229, 230, 230, 203, 205, 226, 04284 134, 227, 336, 158, 338, 158, 149, 336, 226, 335, 04285 304, 149, 338, 175, 257, 249, 182, 87, 134, 335, 04286 131, 184, 234, 134, 306, 134, 335, 240, 29, 111, 04287 248, 302, 307, 318, 320, 309, 314, 322, 308, 315, 04288 320, 308, 288, 113, 86, 215, 240, 118, 134, 236, 04289 134, 323, 323, 134, 236, 134, 236, 139, 10, 131, 04290 150, 10, 184, 182, 159, 182, 88, 264, 340, 150, 04291 9, 265, 340, 158, 226, 226, 150, 150, 184, 150, 04292 228, 210, 338, 226, 335, 226, 214, 335, 233, 134, 04293 95, 232, 137, 150, 150, 134, 303, 134, 303, 323, 04294 134, 303, 134, 303, 303, 150, 215, 56, 85, 118, 04295 235, 317, 320, 310, 314, 308, 316, 320, 308, 52, 04296 241, 242, 305, 131, 86, 172, 215, 294, 295, 298, 04297 227, 150, 227, 226, 226, 230, 260, 261, 207, 149, 04298 301, 134, 233, 134, 306, 10, 131, 308, 320, 308, 04299 308, 108, 52, 56, 134, 236, 134, 236, 323, 134, 04300 236, 134, 236, 236, 134, 334, 56, 85, 132, 133, 04301 150, 150, 150, 226, 149, 233, 134, 303, 134, 303, 04302 303, 303, 308, 320, 308, 308, 242, 52, 56, 188, 04303 52, 56, 262, 229, 226, 226, 233, 308, 236, 134, 04304 236, 236, 236, 336, 303, 308, 236 04305 }; 04306 04307 #define yyerrok (yyerrstatus = 0) 04308 #define yyclearin (yychar = YYEMPTY) 04309 #define YYEMPTY (-2) 04310 #define YYEOF 0 04311 04312 #define YYACCEPT goto yyacceptlab 04313 #define YYABORT goto yyabortlab 04314 #define YYERROR goto yyerrorlab 04315 04316 04317 /* Like YYERROR except do call yyerror. This remains here temporarily 04318 to ease the transition to the new meaning of YYERROR, for GCC. 04319 Once GCC version 2 has supplanted version 1, this can go. However, 04320 YYFAIL appears to be in use. Nevertheless, it is formally deprecated 04321 in Bison 2.4.2's NEWS entry, where a plan to phase it out is 04322 discussed. */ 04323 04324 #define YYFAIL goto yyerrlab 04325 #if defined YYFAIL 04326 /* This is here to suppress warnings from the GCC cpp's 04327 -Wunused-macros. Normally we don't worry about that warning, but 04328 some users do, and we want to make it easy for users to remove 04329 YYFAIL uses, which will produce warnings from Bison 2.5. */ 04330 #endif 04331 04332 #define YYRECOVERING() (!!yyerrstatus) 04333 04334 #define YYBACKUP(Token, Value) \ 04335 do \ 04336 if (yychar == YYEMPTY && yylen == 1) \ 04337 { \ 04338 yychar = (Token); \ 04339 yylval = (Value); \ 04340 YYPOPSTACK (1); \ 04341 goto yybackup; \ 04342 } \ 04343 else \ 04344 { \ 04345 parser_yyerror (parser, YY_("syntax error: cannot back up")); \ 04346 YYERROR; \ 04347 } \ 04348 while (YYID (0)) 04349 04350 04351 #define YYTERROR 1 04352 #define YYERRCODE 256 04353 04354 04355 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. 04356 If N is 0, then set CURRENT to the empty location which ends 04357 the previous symbol: RHS[0] (always defined). */ 04358 04359 #define YYRHSLOC(Rhs, K) ((Rhs)[K]) 04360 #ifndef YYLLOC_DEFAULT 04361 # define YYLLOC_DEFAULT(Current, Rhs, N) \ 04362 do \ 04363 if (YYID (N)) \ 04364 { \ 04365 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ 04366 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ 04367 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ 04368 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ 04369 } \ 04370 else \ 04371 { \ 04372 (Current).first_line = (Current).last_line = \ 04373 YYRHSLOC (Rhs, 0).last_line; \ 04374 (Current).first_column = (Current).last_column = \ 04375 YYRHSLOC (Rhs, 0).last_column; \ 04376 } \ 04377 while (YYID (0)) 04378 #endif 04379 04380 04381 /* This macro is provided for backward compatibility. */ 04382 04383 #ifndef YY_LOCATION_PRINT 04384 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 04385 #endif 04386 04387 04388 /* YYLEX -- calling `yylex' with the right arguments. */ 04389 04390 #ifdef YYLEX_PARAM 04391 # define YYLEX yylex (&yylval, YYLEX_PARAM) 04392 #else 04393 # define YYLEX yylex (&yylval, parser) 04394 #endif 04395 04396 /* Enable debugging if requested. */ 04397 #if YYDEBUG 04398 04399 # ifndef YYFPRINTF 04400 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 04401 # define YYFPRINTF fprintf 04402 # endif 04403 04404 # define YYDPRINTF(Args) \ 04405 do { \ 04406 if (yydebug) \ 04407 YYFPRINTF Args; \ 04408 } while (YYID (0)) 04409 04410 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 04411 do { \ 04412 if (yydebug) \ 04413 { \ 04414 YYFPRINTF (stderr, "%s ", Title); \ 04415 yy_symbol_print (stderr, \ 04416 Type, Value, parser); \ 04417 YYFPRINTF (stderr, "\n"); \ 04418 } \ 04419 } while (YYID (0)) 04420 04421 04422 /*--------------------------------. 04423 | Print this symbol on YYOUTPUT. | 04424 `--------------------------------*/ 04425 04426 /*ARGSUSED*/ 04427 #if (defined __STDC__ || defined __C99__FUNC__ \ 04428 || defined __cplusplus || defined _MSC_VER) 04429 static void 04430 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser) 04431 #else 04432 static void 04433 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser) 04434 FILE *yyoutput; 04435 int yytype; 04436 YYSTYPE const * const yyvaluep; 04437 struct parser_params *parser; 04438 #endif 04439 { 04440 if (!yyvaluep) 04441 return; 04442 YYUSE (parser); 04443 # ifdef YYPRINT 04444 if (yytype < YYNTOKENS) 04445 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 04446 # else 04447 YYUSE (yyoutput); 04448 # endif 04449 switch (yytype) 04450 { 04451 default: 04452 break; 04453 } 04454 } 04455 04456 04457 /*--------------------------------. 04458 | Print this symbol on YYOUTPUT. | 04459 `--------------------------------*/ 04460 04461 #if (defined __STDC__ || defined __C99__FUNC__ \ 04462 || defined __cplusplus || defined _MSC_VER) 04463 static void 04464 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser) 04465 #else 04466 static void 04467 yy_symbol_print (yyoutput, yytype, yyvaluep, parser) 04468 FILE *yyoutput; 04469 int yytype; 04470 YYSTYPE const * const yyvaluep; 04471 struct parser_params *parser; 04472 #endif 04473 { 04474 if (yytype < YYNTOKENS) 04475 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 04476 else 04477 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 04478 04479 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser); 04480 YYFPRINTF (yyoutput, ")"); 04481 } 04482 04483 /*------------------------------------------------------------------. 04484 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 04485 | TOP (included). | 04486 `------------------------------------------------------------------*/ 04487 04488 #if (defined __STDC__ || defined __C99__FUNC__ \ 04489 || defined __cplusplus || defined _MSC_VER) 04490 static void 04491 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop) 04492 #else 04493 static void 04494 yy_stack_print (yybottom, yytop) 04495 yytype_int16 *yybottom; 04496 yytype_int16 *yytop; 04497 #endif 04498 { 04499 YYFPRINTF (stderr, "Stack now"); 04500 for (; yybottom <= yytop; yybottom++) 04501 { 04502 int yybot = *yybottom; 04503 YYFPRINTF (stderr, " %d", yybot); 04504 } 04505 YYFPRINTF (stderr, "\n"); 04506 } 04507 04508 # define YY_STACK_PRINT(Bottom, Top) \ 04509 do { \ 04510 if (yydebug) \ 04511 yy_stack_print ((Bottom), (Top)); \ 04512 } while (YYID (0)) 04513 04514 04515 /*------------------------------------------------. 04516 | Report that the YYRULE is going to be reduced. | 04517 `------------------------------------------------*/ 04518 04519 #if (defined __STDC__ || defined __C99__FUNC__ \ 04520 || defined __cplusplus || defined _MSC_VER) 04521 static void 04522 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser) 04523 #else 04524 static void 04525 yy_reduce_print (yyvsp, yyrule, parser) 04526 YYSTYPE *yyvsp; 04527 int yyrule; 04528 struct parser_params *parser; 04529 #endif 04530 { 04531 int yynrhs = yyr2[yyrule]; 04532 int yyi; 04533 unsigned long int yylno = yyrline[yyrule]; 04534 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 04535 yyrule - 1, yylno); 04536 /* The symbols being reduced. */ 04537 for (yyi = 0; yyi < yynrhs; yyi++) 04538 { 04539 YYFPRINTF (stderr, " $%d = ", yyi + 1); 04540 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 04541 &(yyvsp[(yyi + 1) - (yynrhs)]) 04542 , parser); 04543 YYFPRINTF (stderr, "\n"); 04544 } 04545 } 04546 04547 # define YY_REDUCE_PRINT(Rule) \ 04548 do { \ 04549 if (yydebug) \ 04550 yy_reduce_print (yyvsp, Rule, parser); \ 04551 } while (YYID (0)) 04552 04553 /* Nonzero means print parse trace. It is left uninitialized so that 04554 multiple parsers can coexist. */ 04555 #ifndef yydebug 04556 int yydebug; 04557 #endif 04558 #else /* !YYDEBUG */ 04559 # define YYDPRINTF(Args) 04560 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) 04561 # define YY_STACK_PRINT(Bottom, Top) 04562 # define YY_REDUCE_PRINT(Rule) 04563 #endif /* !YYDEBUG */ 04564 04565 04566 /* YYINITDEPTH -- initial size of the parser's stacks. */ 04567 #ifndef YYINITDEPTH 04568 # define YYINITDEPTH 200 04569 #endif 04570 04571 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 04572 if the built-in stack extension method is used). 04573 04574 Do not make this value too large; the results are undefined if 04575 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 04576 evaluated with infinite-precision integer arithmetic. */ 04577 04578 #ifndef YYMAXDEPTH 04579 # define YYMAXDEPTH 10000 04580 #endif 04581 04582 04583 #if YYERROR_VERBOSE 04584 04585 # ifndef yystrlen 04586 # if defined __GLIBC__ && defined _STRING_H 04587 # define yystrlen strlen 04588 # else 04589 /* Return the length of YYSTR. */ 04590 #if (defined __STDC__ || defined __C99__FUNC__ \ 04591 || defined __cplusplus || defined _MSC_VER) 04592 static YYSIZE_T 04593 yystrlen (const char *yystr) 04594 #else 04595 static YYSIZE_T 04596 yystrlen (yystr) 04597 const char *yystr; 04598 #endif 04599 { 04600 YYSIZE_T yylen; 04601 for (yylen = 0; yystr[yylen]; yylen++) 04602 continue; 04603 return yylen; 04604 } 04605 # endif 04606 # endif 04607 04608 # ifndef yystpcpy 04609 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 04610 # define yystpcpy stpcpy 04611 # else 04612 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 04613 YYDEST. */ 04614 #if (defined __STDC__ || defined __C99__FUNC__ \ 04615 || defined __cplusplus || defined _MSC_VER) 04616 static char * 04617 yystpcpy (char *yydest, const char *yysrc) 04618 #else 04619 static char * 04620 yystpcpy (yydest, yysrc) 04621 char *yydest; 04622 const char *yysrc; 04623 #endif 04624 { 04625 char *yyd = yydest; 04626 const char *yys = yysrc; 04627 04628 while ((*yyd++ = *yys++) != '\0') 04629 continue; 04630 04631 return yyd - 1; 04632 } 04633 # endif 04634 # endif 04635 04636 # ifndef yytnamerr 04637 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary 04638 quotes and backslashes, so that it's suitable for yyerror. The 04639 heuristic is that double-quoting is unnecessary unless the string 04640 contains an apostrophe, a comma, or backslash (other than 04641 backslash-backslash). YYSTR is taken from yytname. If YYRES is 04642 null, do not copy; instead, return the length of what the result 04643 would have been. */ 04644 static YYSIZE_T 04645 yytnamerr (char *yyres, const char *yystr) 04646 { 04647 if (*yystr == '"') 04648 { 04649 YYSIZE_T yyn = 0; 04650 char const *yyp = yystr; 04651 04652 for (;;) 04653 switch (*++yyp) 04654 { 04655 case '\'': 04656 case ',': 04657 goto do_not_strip_quotes; 04658 04659 case '\\': 04660 if (*++yyp != '\\') 04661 goto do_not_strip_quotes; 04662 /* Fall through. */ 04663 default: 04664 if (yyres) 04665 yyres[yyn] = *yyp; 04666 yyn++; 04667 break; 04668 04669 case '"': 04670 if (yyres) 04671 yyres[yyn] = '\0'; 04672 return yyn; 04673 } 04674 do_not_strip_quotes: ; 04675 } 04676 04677 if (! yyres) 04678 return yystrlen (yystr); 04679 04680 return yystpcpy (yyres, yystr) - yyres; 04681 } 04682 # endif 04683 04684 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message 04685 about the unexpected token YYTOKEN for the state stack whose top is 04686 YYSSP. 04687 04688 Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is 04689 not large enough to hold the message. In that case, also set 04690 *YYMSG_ALLOC to the required number of bytes. Return 2 if the 04691 required number of bytes is too large to store. */ 04692 static int 04693 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg, 04694 yytype_int16 *yyssp, int yytoken) 04695 { 04696 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]); 04697 YYSIZE_T yysize = yysize0; 04698 YYSIZE_T yysize1; 04699 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 04700 /* Internationalized format string. */ 04701 const char *yyformat = 0; 04702 /* Arguments of yyformat. */ 04703 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 04704 /* Number of reported tokens (one for the "unexpected", one per 04705 "expected"). */ 04706 int yycount = 0; 04707 04708 /* There are many possibilities here to consider: 04709 - Assume YYFAIL is not used. It's too flawed to consider. See 04710 <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html> 04711 for details. YYERROR is fine as it does not invoke this 04712 function. 04713 - If this state is a consistent state with a default action, then 04714 the only way this function was invoked is if the default action 04715 is an error action. In that case, don't check for expected 04716 tokens because there are none. 04717 - The only way there can be no lookahead present (in yychar) is if 04718 this state is a consistent state with a default action. Thus, 04719 detecting the absence of a lookahead is sufficient to determine 04720 that there is no unexpected or expected token to report. In that 04721 case, just report a simple "syntax error". 04722 - Don't assume there isn't a lookahead just because this state is a 04723 consistent state with a default action. There might have been a 04724 previous inconsistent state, consistent state with a non-default 04725 action, or user semantic action that manipulated yychar. 04726 - Of course, the expected token list depends on states to have 04727 correct lookahead information, and it depends on the parser not 04728 to perform extra reductions after fetching a lookahead from the 04729 scanner and before detecting a syntax error. Thus, state merging 04730 (from LALR or IELR) and default reductions corrupt the expected 04731 token list. However, the list is correct for canonical LR with 04732 one exception: it will still contain any token that will not be 04733 accepted due to an error action in a later state. 04734 */ 04735 if (yytoken != YYEMPTY) 04736 { 04737 int yyn = yypact[*yyssp]; 04738 yyarg[yycount++] = yytname[yytoken]; 04739 if (!yypact_value_is_default (yyn)) 04740 { 04741 /* Start YYX at -YYN if negative to avoid negative indexes in 04742 YYCHECK. In other words, skip the first -YYN actions for 04743 this state because they are default actions. */ 04744 int yyxbegin = yyn < 0 ? -yyn : 0; 04745 /* Stay within bounds of both yycheck and yytname. */ 04746 int yychecklim = YYLAST - yyn + 1; 04747 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 04748 int yyx; 04749 04750 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 04751 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR 04752 && !yytable_value_is_error (yytable[yyx + yyn])) 04753 { 04754 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 04755 { 04756 yycount = 1; 04757 yysize = yysize0; 04758 break; 04759 } 04760 yyarg[yycount++] = yytname[yyx]; 04761 yysize1 = yysize + yytnamerr (0, yytname[yyx]); 04762 if (! (yysize <= yysize1 04763 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 04764 return 2; 04765 yysize = yysize1; 04766 } 04767 } 04768 } 04769 04770 switch (yycount) 04771 { 04772 # define YYCASE_(N, S) \ 04773 case N: \ 04774 yyformat = S; \ 04775 break 04776 YYCASE_(0, YY_("syntax error")); 04777 YYCASE_(1, YY_("syntax error, unexpected %s")); 04778 YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s")); 04779 YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s")); 04780 YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s")); 04781 YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s")); 04782 # undef YYCASE_ 04783 } 04784 04785 yysize1 = yysize + yystrlen (yyformat); 04786 if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM)) 04787 return 2; 04788 yysize = yysize1; 04789 04790 if (*yymsg_alloc < yysize) 04791 { 04792 *yymsg_alloc = 2 * yysize; 04793 if (! (yysize <= *yymsg_alloc 04794 && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM)) 04795 *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM; 04796 return 1; 04797 } 04798 04799 /* Avoid sprintf, as that infringes on the user's name space. 04800 Don't have undefined behavior even if the translation 04801 produced a string with the wrong number of "%s"s. */ 04802 { 04803 char *yyp = *yymsg; 04804 int yyi = 0; 04805 while ((*yyp = *yyformat) != '\0') 04806 if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount) 04807 { 04808 yyp += yytnamerr (yyp, yyarg[yyi++]); 04809 yyformat += 2; 04810 } 04811 else 04812 { 04813 yyp++; 04814 yyformat++; 04815 } 04816 } 04817 return 0; 04818 } 04819 #endif /* YYERROR_VERBOSE */ 04820 04821 /*-----------------------------------------------. 04822 | Release the memory associated to this symbol. | 04823 `-----------------------------------------------*/ 04824 04825 /*ARGSUSED*/ 04826 #if (defined __STDC__ || defined __C99__FUNC__ \ 04827 || defined __cplusplus || defined _MSC_VER) 04828 static void 04829 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser) 04830 #else 04831 static void 04832 yydestruct (yymsg, yytype, yyvaluep, parser) 04833 const char *yymsg; 04834 int yytype; 04835 YYSTYPE *yyvaluep; 04836 struct parser_params *parser; 04837 #endif 04838 { 04839 YYUSE (yyvaluep); 04840 YYUSE (parser); 04841 04842 if (!yymsg) 04843 yymsg = "Deleting"; 04844 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 04845 04846 switch (yytype) 04847 { 04848 04849 default: 04850 break; 04851 } 04852 } 04853 04854 04855 /* Prevent warnings from -Wmissing-prototypes. */ 04856 #ifdef YYPARSE_PARAM 04857 #if defined __STDC__ || defined __cplusplus 04858 int yyparse (void *YYPARSE_PARAM); 04859 #else 04860 int yyparse (); 04861 #endif 04862 #else /* ! YYPARSE_PARAM */ 04863 #if defined __STDC__ || defined __cplusplus 04864 int yyparse (struct parser_params *parser); 04865 #else 04866 int yyparse (); 04867 #endif 04868 #endif /* ! YYPARSE_PARAM */ 04869 04870 04871 /*----------. 04872 | yyparse. | 04873 `----------*/ 04874 04875 #ifdef YYPARSE_PARAM 04876 #if (defined __STDC__ || defined __C99__FUNC__ \ 04877 || defined __cplusplus || defined _MSC_VER) 04878 int 04879 yyparse (void *YYPARSE_PARAM) 04880 #else 04881 int 04882 yyparse (YYPARSE_PARAM) 04883 void *YYPARSE_PARAM; 04884 #endif 04885 #else /* ! YYPARSE_PARAM */ 04886 #if (defined __STDC__ || defined __C99__FUNC__ \ 04887 || defined __cplusplus || defined _MSC_VER) 04888 int 04889 yyparse (struct parser_params *parser) 04890 #else 04891 int 04892 yyparse (parser) 04893 struct parser_params *parser; 04894 #endif 04895 #endif 04896 { 04897 /* The lookahead symbol. */ 04898 int yychar; 04899 04900 /* The semantic value of the lookahead symbol. */ 04901 YYSTYPE yylval; 04902 04903 /* Number of syntax errors so far. */ 04904 int yynerrs; 04905 04906 int yystate; 04907 /* Number of tokens to shift before error messages enabled. */ 04908 int yyerrstatus; 04909 04910 /* The stacks and their tools: 04911 `yyss': related to states. 04912 `yyvs': related to semantic values. 04913 04914 Refer to the stacks thru separate pointers, to allow yyoverflow 04915 to reallocate them elsewhere. */ 04916 04917 /* The state stack. */ 04918 yytype_int16 yyssa[YYINITDEPTH]; 04919 yytype_int16 *yyss; 04920 yytype_int16 *yyssp; 04921 04922 /* The semantic value stack. */ 04923 YYSTYPE yyvsa[YYINITDEPTH]; 04924 YYSTYPE *yyvs; 04925 YYSTYPE *yyvsp; 04926 04927 YYSIZE_T yystacksize; 04928 04929 int yyn; 04930 int yyresult; 04931 /* Lookahead token as an internal (translated) token number. */ 04932 int yytoken; 04933 /* The variables used to return semantic value and location from the 04934 action routines. */ 04935 YYSTYPE yyval; 04936 04937 #if YYERROR_VERBOSE 04938 /* Buffer for error messages, and its allocated size. */ 04939 char yymsgbuf[128]; 04940 char *yymsg = yymsgbuf; 04941 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 04942 #endif 04943 04944 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 04945 04946 /* The number of symbols on the RHS of the reduced rule. 04947 Keep to zero when no symbol should be popped. */ 04948 int yylen = 0; 04949 04950 yytoken = 0; 04951 yyss = yyssa; 04952 yyvs = yyvsa; 04953 yystacksize = YYINITDEPTH; 04954 04955 YYDPRINTF ((stderr, "Starting parse\n")); 04956 04957 yystate = 0; 04958 yyerrstatus = 0; 04959 yynerrs = 0; 04960 yychar = YYEMPTY; /* Cause a token to be read. */ 04961 04962 /* Initialize stack pointers. 04963 Waste one element of value and location stack 04964 so that they stay on the same level as the state stack. 04965 The wasted elements are never initialized. */ 04966 yyssp = yyss; 04967 yyvsp = yyvs; 04968 04969 goto yysetstate; 04970 04971 /*------------------------------------------------------------. 04972 | yynewstate -- Push a new state, which is found in yystate. | 04973 `------------------------------------------------------------*/ 04974 yynewstate: 04975 /* In all cases, when you get here, the value and location stacks 04976 have just been pushed. So pushing a state here evens the stacks. */ 04977 yyssp++; 04978 04979 yysetstate: 04980 *yyssp = yystate; 04981 04982 if (yyss + yystacksize - 1 <= yyssp) 04983 { 04984 /* Get the current used size of the three stacks, in elements. */ 04985 YYSIZE_T yysize = yyssp - yyss + 1; 04986 04987 #ifdef yyoverflow 04988 { 04989 /* Give user a chance to reallocate the stack. Use copies of 04990 these so that the &'s don't force the real ones into 04991 memory. */ 04992 YYSTYPE *yyvs1 = yyvs; 04993 yytype_int16 *yyss1 = yyss; 04994 04995 /* Each stack pointer address is followed by the size of the 04996 data in use in that stack, in bytes. This used to be a 04997 conditional around just the two extra args, but that might 04998 be undefined if yyoverflow is a macro. */ 04999 yyoverflow (YY_("memory exhausted"), 05000 &yyss1, yysize * sizeof (*yyssp), 05001 &yyvs1, yysize * sizeof (*yyvsp), 05002 &yystacksize); 05003 05004 yyss = yyss1; 05005 yyvs = yyvs1; 05006 } 05007 #else /* no yyoverflow */ 05008 # ifndef YYSTACK_RELOCATE 05009 goto yyexhaustedlab; 05010 # else 05011 /* Extend the stack our own way. */ 05012 if (YYMAXDEPTH <= yystacksize) 05013 goto yyexhaustedlab; 05014 yystacksize *= 2; 05015 if (YYMAXDEPTH < yystacksize) 05016 yystacksize = YYMAXDEPTH; 05017 05018 { 05019 yytype_int16 *yyss1 = yyss; 05020 union yyalloc *yyptr = 05021 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 05022 if (! yyptr) 05023 goto yyexhaustedlab; 05024 YYSTACK_RELOCATE (yyss_alloc, yyss); 05025 YYSTACK_RELOCATE (yyvs_alloc, yyvs); 05026 # undef YYSTACK_RELOCATE 05027 if (yyss1 != yyssa) 05028 YYSTACK_FREE (yyss1); 05029 } 05030 # endif 05031 #endif /* no yyoverflow */ 05032 05033 yyssp = yyss + yysize - 1; 05034 yyvsp = yyvs + yysize - 1; 05035 05036 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 05037 (unsigned long int) yystacksize)); 05038 05039 if (yyss + yystacksize - 1 <= yyssp) 05040 YYABORT; 05041 } 05042 05043 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 05044 05045 if (yystate == YYFINAL) 05046 YYACCEPT; 05047 05048 goto yybackup; 05049 05050 /*-----------. 05051 | yybackup. | 05052 `-----------*/ 05053 yybackup: 05054 05055 /* Do appropriate processing given the current state. Read a 05056 lookahead token if we need one and don't already have one. */ 05057 05058 /* First try to decide what to do without reference to lookahead token. */ 05059 yyn = yypact[yystate]; 05060 if (yypact_value_is_default (yyn)) 05061 goto yydefault; 05062 05063 /* Not known => get a lookahead token if don't already have one. */ 05064 05065 /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */ 05066 if (yychar == YYEMPTY) 05067 { 05068 YYDPRINTF ((stderr, "Reading a token: ")); 05069 yychar = YYLEX; 05070 } 05071 05072 if (yychar <= YYEOF) 05073 { 05074 yychar = yytoken = YYEOF; 05075 YYDPRINTF ((stderr, "Now at end of input.\n")); 05076 } 05077 else 05078 { 05079 yytoken = YYTRANSLATE (yychar); 05080 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 05081 } 05082 05083 /* If the proper action on seeing token YYTOKEN is to reduce or to 05084 detect an error, take that action. */ 05085 yyn += yytoken; 05086 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 05087 goto yydefault; 05088 yyn = yytable[yyn]; 05089 if (yyn <= 0) 05090 { 05091 if (yytable_value_is_error (yyn)) 05092 goto yyerrlab; 05093 yyn = -yyn; 05094 goto yyreduce; 05095 } 05096 05097 /* Count tokens shifted since error; after three, turn off error 05098 status. */ 05099 if (yyerrstatus) 05100 yyerrstatus--; 05101 05102 /* Shift the lookahead token. */ 05103 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 05104 05105 /* Discard the shifted token. */ 05106 yychar = YYEMPTY; 05107 05108 yystate = yyn; 05109 *++yyvsp = yylval; 05110 05111 goto yynewstate; 05112 05113 05114 /*-----------------------------------------------------------. 05115 | yydefault -- do the default action for the current state. | 05116 `-----------------------------------------------------------*/ 05117 yydefault: 05118 yyn = yydefact[yystate]; 05119 if (yyn == 0) 05120 goto yyerrlab; 05121 goto yyreduce; 05122 05123 05124 /*-----------------------------. 05125 | yyreduce -- Do a reduction. | 05126 `-----------------------------*/ 05127 yyreduce: 05128 /* yyn is the number of a rule to reduce with. */ 05129 yylen = yyr2[yyn]; 05130 05131 /* If YYLEN is nonzero, implement the default value of the action: 05132 `$$ = $1'. 05133 05134 Otherwise, the following line sets YYVAL to garbage. 05135 This behavior is undocumented and Bison 05136 users should not rely upon it. Assigning to YYVAL 05137 unconditionally makes the parser a bit smaller, and it avoids a 05138 GCC warning that YYVAL may be used uninitialized. */ 05139 yyval = yyvsp[1-yylen]; 05140 05141 05142 YY_REDUCE_PRINT (yyn); 05143 switch (yyn) 05144 { 05145 case 2: 05146 05147 /* Line 1806 of yacc.c */ 05148 #line 855 "parse.y" 05149 { 05150 lex_state = EXPR_BEG; 05151 /*%%%*/ 05152 local_push(compile_for_eval || rb_parse_in_main()); 05153 /*% 05154 local_push(0); 05155 %*/ 05156 } 05157 break; 05158 05159 case 3: 05160 05161 /* Line 1806 of yacc.c */ 05162 #line 864 "parse.y" 05163 { 05164 /*%%%*/ 05165 if ((yyvsp[(2) - (2)].node) && !compile_for_eval) { 05166 /* last expression should not be void */ 05167 if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node)); 05168 else { 05169 NODE *node = (yyvsp[(2) - (2)].node); 05170 while (node->nd_next) { 05171 node = node->nd_next; 05172 } 05173 void_expr(node->nd_head); 05174 } 05175 } 05176 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node))); 05177 /*% 05178 $$ = $2; 05179 parser->result = dispatch1(program, $$); 05180 %*/ 05181 local_pop(); 05182 } 05183 break; 05184 05185 case 4: 05186 05187 /* Line 1806 of yacc.c */ 05188 #line 887 "parse.y" 05189 { 05190 /*%%%*/ 05191 void_stmts((yyvsp[(1) - (2)].node)); 05192 fixup_nodes(&deferred_nodes); 05193 /*% 05194 %*/ 05195 (yyval.node) = (yyvsp[(1) - (2)].node); 05196 } 05197 break; 05198 05199 case 5: 05200 05201 /* Line 1806 of yacc.c */ 05202 #line 898 "parse.y" 05203 { 05204 /*%%%*/ 05205 (yyval.node) = NEW_BEGIN(0); 05206 /*% 05207 $$ = dispatch2(stmts_add, dispatch0(stmts_new), 05208 dispatch0(void_stmt)); 05209 %*/ 05210 } 05211 break; 05212 05213 case 6: 05214 05215 /* Line 1806 of yacc.c */ 05216 #line 907 "parse.y" 05217 { 05218 /*%%%*/ 05219 (yyval.node) = newline_node((yyvsp[(1) - (1)].node)); 05220 /*% 05221 $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1); 05222 %*/ 05223 } 05224 break; 05225 05226 case 7: 05227 05228 /* Line 1806 of yacc.c */ 05229 #line 915 "parse.y" 05230 { 05231 /*%%%*/ 05232 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node))); 05233 /*% 05234 $$ = dispatch2(stmts_add, $1, $3); 05235 %*/ 05236 } 05237 break; 05238 05239 case 8: 05240 05241 /* Line 1806 of yacc.c */ 05242 #line 923 "parse.y" 05243 { 05244 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node)); 05245 } 05246 break; 05247 05248 case 10: 05249 05250 /* Line 1806 of yacc.c */ 05251 #line 930 "parse.y" 05252 { 05253 /*%%%*/ 05254 /* local_push(0); */ 05255 /*% 05256 %*/ 05257 } 05258 break; 05259 05260 case 11: 05261 05262 /* Line 1806 of yacc.c */ 05263 #line 937 "parse.y" 05264 { 05265 /*%%%*/ 05266 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin, 05267 (yyvsp[(4) - (5)].node)); 05268 /* NEW_PREEXE($4)); */ 05269 /* local_pop(); */ 05270 (yyval.node) = NEW_BEGIN(0); 05271 /*% 05272 $$ = dispatch1(BEGIN, $4); 05273 %*/ 05274 } 05275 break; 05276 05277 case 12: 05278 05279 /* Line 1806 of yacc.c */ 05280 #line 954 "parse.y" 05281 { 05282 /*%%%*/ 05283 (yyval.node) = (yyvsp[(1) - (4)].node); 05284 if ((yyvsp[(2) - (4)].node)) { 05285 (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node)); 05286 } 05287 else if ((yyvsp[(3) - (4)].node)) { 05288 rb_warn0("else without rescue is useless"); 05289 (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node)); 05290 } 05291 if ((yyvsp[(4) - (4)].node)) { 05292 if ((yyval.node)) { 05293 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node)); 05294 } 05295 else { 05296 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL()); 05297 } 05298 } 05299 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 05300 /*% 05301 $$ = dispatch4(bodystmt, 05302 escape_Qundef($1), 05303 escape_Qundef($2), 05304 escape_Qundef($3), 05305 escape_Qundef($4)); 05306 %*/ 05307 } 05308 break; 05309 05310 case 13: 05311 05312 /* Line 1806 of yacc.c */ 05313 #line 984 "parse.y" 05314 { 05315 /*%%%*/ 05316 void_stmts((yyvsp[(1) - (2)].node)); 05317 fixup_nodes(&deferred_nodes); 05318 /*% 05319 %*/ 05320 (yyval.node) = (yyvsp[(1) - (2)].node); 05321 } 05322 break; 05323 05324 case 14: 05325 05326 /* Line 1806 of yacc.c */ 05327 #line 995 "parse.y" 05328 { 05329 /*%%%*/ 05330 (yyval.node) = NEW_BEGIN(0); 05331 /*% 05332 $$ = dispatch2(stmts_add, dispatch0(stmts_new), 05333 dispatch0(void_stmt)); 05334 %*/ 05335 } 05336 break; 05337 05338 case 15: 05339 05340 /* Line 1806 of yacc.c */ 05341 #line 1004 "parse.y" 05342 { 05343 /*%%%*/ 05344 (yyval.node) = newline_node((yyvsp[(1) - (1)].node)); 05345 /*% 05346 $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1); 05347 %*/ 05348 } 05349 break; 05350 05351 case 16: 05352 05353 /* Line 1806 of yacc.c */ 05354 #line 1012 "parse.y" 05355 { 05356 /*%%%*/ 05357 (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node))); 05358 /*% 05359 $$ = dispatch2(stmts_add, $1, $3); 05360 %*/ 05361 } 05362 break; 05363 05364 case 17: 05365 05366 /* Line 1806 of yacc.c */ 05367 #line 1020 "parse.y" 05368 { 05369 (yyval.node) = remove_begin((yyvsp[(2) - (2)].node)); 05370 } 05371 break; 05372 05373 case 18: 05374 05375 /* Line 1806 of yacc.c */ 05376 #line 1026 "parse.y" 05377 { 05378 (yyval.node) = (yyvsp[(1) - (1)].node); 05379 } 05380 break; 05381 05382 case 19: 05383 05384 /* Line 1806 of yacc.c */ 05385 #line 1030 "parse.y" 05386 { 05387 yyerror("BEGIN is permitted only at toplevel"); 05388 /*%%%*/ 05389 /* local_push(0); */ 05390 /*% 05391 %*/ 05392 } 05393 break; 05394 05395 case 20: 05396 05397 /* Line 1806 of yacc.c */ 05398 #line 1038 "parse.y" 05399 { 05400 /*%%%*/ 05401 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin, 05402 (yyvsp[(4) - (5)].node)); 05403 /* NEW_PREEXE($4)); */ 05404 /* local_pop(); */ 05405 (yyval.node) = NEW_BEGIN(0); 05406 /*% 05407 $$ = dispatch1(BEGIN, $4); 05408 %*/ 05409 } 05410 break; 05411 05412 case 21: 05413 05414 /* Line 1806 of yacc.c */ 05415 #line 1050 "parse.y" 05416 {lex_state = EXPR_FNAME;} 05417 break; 05418 05419 case 22: 05420 05421 /* Line 1806 of yacc.c */ 05422 #line 1051 "parse.y" 05423 { 05424 /*%%%*/ 05425 (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node)); 05426 /*% 05427 $$ = dispatch2(alias, $2, $4); 05428 %*/ 05429 } 05430 break; 05431 05432 case 23: 05433 05434 /* Line 1806 of yacc.c */ 05435 #line 1059 "parse.y" 05436 { 05437 /*%%%*/ 05438 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id)); 05439 /*% 05440 $$ = dispatch2(var_alias, $2, $3); 05441 %*/ 05442 } 05443 break; 05444 05445 case 24: 05446 05447 /* Line 1806 of yacc.c */ 05448 #line 1067 "parse.y" 05449 { 05450 /*%%%*/ 05451 char buf[2]; 05452 buf[0] = '$'; 05453 buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth; 05454 (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2)); 05455 /*% 05456 $$ = dispatch2(var_alias, $2, $3); 05457 %*/ 05458 } 05459 break; 05460 05461 case 25: 05462 05463 /* Line 1806 of yacc.c */ 05464 #line 1078 "parse.y" 05465 { 05466 /*%%%*/ 05467 yyerror("can't make alias for the number variables"); 05468 (yyval.node) = NEW_BEGIN(0); 05469 /*% 05470 $$ = dispatch2(var_alias, $2, $3); 05471 $$ = dispatch1(alias_error, $$); 05472 %*/ 05473 } 05474 break; 05475 05476 case 26: 05477 05478 /* Line 1806 of yacc.c */ 05479 #line 1088 "parse.y" 05480 { 05481 /*%%%*/ 05482 (yyval.node) = (yyvsp[(2) - (2)].node); 05483 /*% 05484 $$ = dispatch1(undef, $2); 05485 %*/ 05486 } 05487 break; 05488 05489 case 27: 05490 05491 /* Line 1806 of yacc.c */ 05492 #line 1096 "parse.y" 05493 { 05494 /*%%%*/ 05495 (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0); 05496 fixpos((yyval.node), (yyvsp[(3) - (3)].node)); 05497 /*% 05498 $$ = dispatch2(if_mod, $3, $1); 05499 %*/ 05500 } 05501 break; 05502 05503 case 28: 05504 05505 /* Line 1806 of yacc.c */ 05506 #line 1105 "parse.y" 05507 { 05508 /*%%%*/ 05509 (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0); 05510 fixpos((yyval.node), (yyvsp[(3) - (3)].node)); 05511 /*% 05512 $$ = dispatch2(unless_mod, $3, $1); 05513 %*/ 05514 } 05515 break; 05516 05517 case 29: 05518 05519 /* Line 1806 of yacc.c */ 05520 #line 1114 "parse.y" 05521 { 05522 /*%%%*/ 05523 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) { 05524 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0); 05525 } 05526 else { 05527 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1); 05528 } 05529 /*% 05530 $$ = dispatch2(while_mod, $3, $1); 05531 %*/ 05532 } 05533 break; 05534 05535 case 30: 05536 05537 /* Line 1806 of yacc.c */ 05538 #line 1127 "parse.y" 05539 { 05540 /*%%%*/ 05541 if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) { 05542 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0); 05543 } 05544 else { 05545 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1); 05546 } 05547 /*% 05548 $$ = dispatch2(until_mod, $3, $1); 05549 %*/ 05550 } 05551 break; 05552 05553 case 31: 05554 05555 /* Line 1806 of yacc.c */ 05556 #line 1140 "parse.y" 05557 { 05558 /*%%%*/ 05559 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0); 05560 (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0); 05561 /*% 05562 $$ = dispatch2(rescue_mod, $1, $3); 05563 %*/ 05564 } 05565 break; 05566 05567 case 32: 05568 05569 /* Line 1806 of yacc.c */ 05570 #line 1149 "parse.y" 05571 { 05572 if (in_def || in_single) { 05573 rb_warn0("END in method; use at_exit"); 05574 } 05575 /*%%%*/ 05576 (yyval.node) = NEW_POSTEXE(NEW_NODE( 05577 NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */)); 05578 /*% 05579 $$ = dispatch1(END, $3); 05580 %*/ 05581 } 05582 break; 05583 05584 case 34: 05585 05586 /* Line 1806 of yacc.c */ 05587 #line 1162 "parse.y" 05588 { 05589 /*%%%*/ 05590 value_expr((yyvsp[(3) - (3)].node)); 05591 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05592 (yyval.node) = (yyvsp[(1) - (3)].node); 05593 /*% 05594 $$ = dispatch2(massign, $1, $3); 05595 %*/ 05596 } 05597 break; 05598 05599 case 35: 05600 05601 /* Line 1806 of yacc.c */ 05602 #line 1172 "parse.y" 05603 { 05604 value_expr((yyvsp[(3) - (3)].node)); 05605 (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node)); 05606 } 05607 break; 05608 05609 case 36: 05610 05611 /* Line 1806 of yacc.c */ 05612 #line 1177 "parse.y" 05613 { 05614 /*%%%*/ 05615 NODE *args; 05616 05617 value_expr((yyvsp[(6) - (6)].node)); 05618 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY(); 05619 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 05620 if ((yyvsp[(5) - (6)].id) == tOROP) { 05621 (yyvsp[(5) - (6)].id) = 0; 05622 } 05623 else if ((yyvsp[(5) - (6)].id) == tANDOP) { 05624 (yyvsp[(5) - (6)].id) = 1; 05625 } 05626 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args); 05627 fixpos((yyval.node), (yyvsp[(1) - (6)].node)); 05628 /*% 05629 $$ = dispatch2(aref_field, $1, escape_Qundef($3)); 05630 $$ = dispatch3(opassign, $$, $5, $6); 05631 %*/ 05632 } 05633 break; 05634 05635 case 37: 05636 05637 /* Line 1806 of yacc.c */ 05638 #line 1198 "parse.y" 05639 { 05640 value_expr((yyvsp[(5) - (5)].node)); 05641 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 05642 } 05643 break; 05644 05645 case 38: 05646 05647 /* Line 1806 of yacc.c */ 05648 #line 1203 "parse.y" 05649 { 05650 value_expr((yyvsp[(5) - (5)].node)); 05651 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 05652 } 05653 break; 05654 05655 case 39: 05656 05657 /* Line 1806 of yacc.c */ 05658 #line 1208 "parse.y" 05659 { 05660 /*%%%*/ 05661 (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id)); 05662 (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 05663 /*% 05664 $$ = dispatch2(const_path_field, $1, $3); 05665 $$ = dispatch3(opassign, $$, $4, $5); 05666 %*/ 05667 } 05668 break; 05669 05670 case 40: 05671 05672 /* Line 1806 of yacc.c */ 05673 #line 1218 "parse.y" 05674 { 05675 value_expr((yyvsp[(5) - (5)].node)); 05676 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 05677 } 05678 break; 05679 05680 case 41: 05681 05682 /* Line 1806 of yacc.c */ 05683 #line 1223 "parse.y" 05684 { 05685 /*%%%*/ 05686 rb_backref_error((yyvsp[(1) - (3)].node)); 05687 (yyval.node) = NEW_BEGIN(0); 05688 /*% 05689 $$ = dispatch2(assign, dispatch1(var_field, $1), $3); 05690 $$ = dispatch1(assign_error, $$); 05691 %*/ 05692 } 05693 break; 05694 05695 case 42: 05696 05697 /* Line 1806 of yacc.c */ 05698 #line 1233 "parse.y" 05699 { 05700 /*%%%*/ 05701 value_expr((yyvsp[(3) - (3)].node)); 05702 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05703 /*% 05704 $$ = dispatch2(assign, $1, $3); 05705 %*/ 05706 } 05707 break; 05708 05709 case 43: 05710 05711 /* Line 1806 of yacc.c */ 05712 #line 1242 "parse.y" 05713 { 05714 /*%%%*/ 05715 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05716 (yyval.node) = (yyvsp[(1) - (3)].node); 05717 /*% 05718 $$ = dispatch2(massign, $1, $3); 05719 %*/ 05720 } 05721 break; 05722 05723 case 44: 05724 05725 /* Line 1806 of yacc.c */ 05726 #line 1251 "parse.y" 05727 { 05728 /*%%%*/ 05729 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node); 05730 (yyval.node) = (yyvsp[(1) - (3)].node); 05731 /*% 05732 $$ = dispatch2(massign, $1, $3); 05733 %*/ 05734 } 05735 break; 05736 05737 case 46: 05738 05739 /* Line 1806 of yacc.c */ 05740 #line 1263 "parse.y" 05741 { 05742 /*%%%*/ 05743 value_expr((yyvsp[(3) - (3)].node)); 05744 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05745 /*% 05746 $$ = dispatch2(assign, $1, $3); 05747 %*/ 05748 } 05749 break; 05750 05751 case 47: 05752 05753 /* Line 1806 of yacc.c */ 05754 #line 1272 "parse.y" 05755 { 05756 /*%%%*/ 05757 value_expr((yyvsp[(3) - (3)].node)); 05758 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05759 /*% 05760 $$ = dispatch2(assign, $1, $3); 05761 %*/ 05762 } 05763 break; 05764 05765 case 49: 05766 05767 /* Line 1806 of yacc.c */ 05768 #line 1285 "parse.y" 05769 { 05770 /*%%%*/ 05771 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05772 /*% 05773 $$ = dispatch3(binary, $1, ripper_intern("and"), $3); 05774 %*/ 05775 } 05776 break; 05777 05778 case 50: 05779 05780 /* Line 1806 of yacc.c */ 05781 #line 1293 "parse.y" 05782 { 05783 /*%%%*/ 05784 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 05785 /*% 05786 $$ = dispatch3(binary, $1, ripper_intern("or"), $3); 05787 %*/ 05788 } 05789 break; 05790 05791 case 51: 05792 05793 /* Line 1806 of yacc.c */ 05794 #line 1301 "parse.y" 05795 { 05796 /*%%%*/ 05797 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!'); 05798 /*% 05799 $$ = dispatch2(unary, ripper_intern("not"), $3); 05800 %*/ 05801 } 05802 break; 05803 05804 case 52: 05805 05806 /* Line 1806 of yacc.c */ 05807 #line 1309 "parse.y" 05808 { 05809 /*%%%*/ 05810 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!'); 05811 /*% 05812 $$ = dispatch2(unary, ripper_id2sym('!'), $2); 05813 %*/ 05814 } 05815 break; 05816 05817 case 54: 05818 05819 /* Line 1806 of yacc.c */ 05820 #line 1320 "parse.y" 05821 { 05822 /*%%%*/ 05823 value_expr((yyvsp[(1) - (1)].node)); 05824 (yyval.node) = (yyvsp[(1) - (1)].node); 05825 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 05826 /*% 05827 $$ = $1; 05828 %*/ 05829 } 05830 break; 05831 05832 case 58: 05833 05834 /* Line 1806 of yacc.c */ 05835 #line 1337 "parse.y" 05836 { 05837 /*%%%*/ 05838 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05839 /*% 05840 $$ = dispatch3(call, $1, $2, $3); 05841 $$ = method_arg($$, $4); 05842 %*/ 05843 } 05844 break; 05845 05846 case 59: 05847 05848 /* Line 1806 of yacc.c */ 05849 #line 1348 "parse.y" 05850 { 05851 (yyvsp[(1) - (1)].vars) = dyna_push(); 05852 /*%%%*/ 05853 (yyval.num) = ruby_sourceline; 05854 /*% 05855 %*/ 05856 } 05857 break; 05858 05859 case 60: 05860 05861 /* Line 1806 of yacc.c */ 05862 #line 1358 "parse.y" 05863 { 05864 /*%%%*/ 05865 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 05866 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 05867 /*% 05868 $$ = dispatch2(brace_block, escape_Qundef($3), $4); 05869 %*/ 05870 dyna_pop((yyvsp[(1) - (5)].vars)); 05871 } 05872 break; 05873 05874 case 61: 05875 05876 /* Line 1806 of yacc.c */ 05877 #line 1370 "parse.y" 05878 { 05879 /*%%%*/ 05880 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0); 05881 nd_set_line((yyval.node), tokline); 05882 /*% 05883 %*/ 05884 } 05885 break; 05886 05887 case 62: 05888 05889 /* Line 1806 of yacc.c */ 05890 #line 1380 "parse.y" 05891 { 05892 /*%%%*/ 05893 (yyval.node) = (yyvsp[(1) - (2)].node); 05894 (yyval.node)->nd_args = (yyvsp[(2) - (2)].node); 05895 /*% 05896 $$ = dispatch2(command, $1, $2); 05897 %*/ 05898 } 05899 break; 05900 05901 case 63: 05902 05903 /* Line 1806 of yacc.c */ 05904 #line 1389 "parse.y" 05905 { 05906 /*%%%*/ 05907 block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node)); 05908 (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node); 05909 (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node); 05910 (yyval.node) = (yyvsp[(3) - (3)].node); 05911 fixpos((yyval.node), (yyvsp[(1) - (3)].node)); 05912 /*% 05913 $$ = dispatch2(command, $1, $2); 05914 $$ = method_add_block($$, $3); 05915 %*/ 05916 } 05917 break; 05918 05919 case 64: 05920 05921 /* Line 1806 of yacc.c */ 05922 #line 1402 "parse.y" 05923 { 05924 /*%%%*/ 05925 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05926 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 05927 /*% 05928 $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4); 05929 %*/ 05930 } 05931 break; 05932 05933 case 65: 05934 05935 /* Line 1806 of yacc.c */ 05936 #line 1411 "parse.y" 05937 { 05938 /*%%%*/ 05939 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node)); 05940 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node)); 05941 (yyval.node) = (yyvsp[(5) - (5)].node); 05942 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05943 /*% 05944 $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4); 05945 $$ = method_add_block($$, $5); 05946 %*/ 05947 } 05948 break; 05949 05950 case 66: 05951 05952 /* Line 1806 of yacc.c */ 05953 #line 1423 "parse.y" 05954 { 05955 /*%%%*/ 05956 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 05957 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 05958 /*% 05959 $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4); 05960 %*/ 05961 } 05962 break; 05963 05964 case 67: 05965 05966 /* Line 1806 of yacc.c */ 05967 #line 1432 "parse.y" 05968 { 05969 /*%%%*/ 05970 block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node)); 05971 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node)); 05972 (yyval.node) = (yyvsp[(5) - (5)].node); 05973 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 05974 /*% 05975 $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4); 05976 $$ = method_add_block($$, $5); 05977 %*/ 05978 } 05979 break; 05980 05981 case 68: 05982 05983 /* Line 1806 of yacc.c */ 05984 #line 1444 "parse.y" 05985 { 05986 /*%%%*/ 05987 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node)); 05988 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 05989 /*% 05990 $$ = dispatch1(super, $2); 05991 %*/ 05992 } 05993 break; 05994 05995 case 69: 05996 05997 /* Line 1806 of yacc.c */ 05998 #line 1453 "parse.y" 05999 { 06000 /*%%%*/ 06001 (yyval.node) = new_yield((yyvsp[(2) - (2)].node)); 06002 fixpos((yyval.node), (yyvsp[(2) - (2)].node)); 06003 /*% 06004 $$ = dispatch1(yield, $2); 06005 %*/ 06006 } 06007 break; 06008 06009 case 70: 06010 06011 /* Line 1806 of yacc.c */ 06012 #line 1462 "parse.y" 06013 { 06014 /*%%%*/ 06015 (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node))); 06016 /*% 06017 $$ = dispatch1(return, $2); 06018 %*/ 06019 } 06020 break; 06021 06022 case 71: 06023 06024 /* Line 1806 of yacc.c */ 06025 #line 1470 "parse.y" 06026 { 06027 /*%%%*/ 06028 (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node))); 06029 /*% 06030 $$ = dispatch1(break, $2); 06031 %*/ 06032 } 06033 break; 06034 06035 case 72: 06036 06037 /* Line 1806 of yacc.c */ 06038 #line 1478 "parse.y" 06039 { 06040 /*%%%*/ 06041 (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node))); 06042 /*% 06043 $$ = dispatch1(next, $2); 06044 %*/ 06045 } 06046 break; 06047 06048 case 74: 06049 06050 /* Line 1806 of yacc.c */ 06051 #line 1489 "parse.y" 06052 { 06053 /*%%%*/ 06054 (yyval.node) = (yyvsp[(2) - (3)].node); 06055 /*% 06056 $$ = dispatch1(mlhs_paren, $2); 06057 %*/ 06058 } 06059 break; 06060 06061 case 76: 06062 06063 /* Line 1806 of yacc.c */ 06064 #line 1500 "parse.y" 06065 { 06066 /*%%%*/ 06067 (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0); 06068 /*% 06069 $$ = dispatch1(mlhs_paren, $2); 06070 %*/ 06071 } 06072 break; 06073 06074 case 77: 06075 06076 /* Line 1806 of yacc.c */ 06077 #line 1510 "parse.y" 06078 { 06079 /*%%%*/ 06080 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0); 06081 /*% 06082 $$ = $1; 06083 %*/ 06084 } 06085 break; 06086 06087 case 78: 06088 06089 /* Line 1806 of yacc.c */ 06090 #line 1518 "parse.y" 06091 { 06092 /*%%%*/ 06093 (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0); 06094 /*% 06095 $$ = mlhs_add($1, $2); 06096 %*/ 06097 } 06098 break; 06099 06100 case 79: 06101 06102 /* Line 1806 of yacc.c */ 06103 #line 1526 "parse.y" 06104 { 06105 /*%%%*/ 06106 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06107 /*% 06108 $$ = mlhs_add_star($1, $3); 06109 %*/ 06110 } 06111 break; 06112 06113 case 80: 06114 06115 /* Line 1806 of yacc.c */ 06116 #line 1534 "parse.y" 06117 { 06118 /*%%%*/ 06119 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node))); 06120 /*% 06121 $1 = mlhs_add_star($1, $3); 06122 $$ = mlhs_add($1, $5); 06123 %*/ 06124 } 06125 break; 06126 06127 case 81: 06128 06129 /* Line 1806 of yacc.c */ 06130 #line 1543 "parse.y" 06131 { 06132 /*%%%*/ 06133 (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1); 06134 /*% 06135 $$ = mlhs_add_star($1, Qnil); 06136 %*/ 06137 } 06138 break; 06139 06140 case 82: 06141 06142 /* Line 1806 of yacc.c */ 06143 #line 1551 "parse.y" 06144 { 06145 /*%%%*/ 06146 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node))); 06147 /*% 06148 $1 = mlhs_add_star($1, Qnil); 06149 $$ = mlhs_add($1, $4); 06150 %*/ 06151 } 06152 break; 06153 06154 case 83: 06155 06156 /* Line 1806 of yacc.c */ 06157 #line 1560 "parse.y" 06158 { 06159 /*%%%*/ 06160 (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node)); 06161 /*% 06162 $$ = mlhs_add_star(mlhs_new(), $2); 06163 %*/ 06164 } 06165 break; 06166 06167 case 84: 06168 06169 /* Line 1806 of yacc.c */ 06170 #line 1568 "parse.y" 06171 { 06172 /*%%%*/ 06173 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node))); 06174 /*% 06175 $2 = mlhs_add_star(mlhs_new(), $2); 06176 $$ = mlhs_add($2, $4); 06177 %*/ 06178 } 06179 break; 06180 06181 case 85: 06182 06183 /* Line 1806 of yacc.c */ 06184 #line 1577 "parse.y" 06185 { 06186 /*%%%*/ 06187 (yyval.node) = NEW_MASGN(0, -1); 06188 /*% 06189 $$ = mlhs_add_star(mlhs_new(), Qnil); 06190 %*/ 06191 } 06192 break; 06193 06194 case 86: 06195 06196 /* Line 1806 of yacc.c */ 06197 #line 1585 "parse.y" 06198 { 06199 /*%%%*/ 06200 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node))); 06201 /*% 06202 $$ = mlhs_add_star(mlhs_new(), Qnil); 06203 $$ = mlhs_add($$, $3); 06204 %*/ 06205 } 06206 break; 06207 06208 case 88: 06209 06210 /* Line 1806 of yacc.c */ 06211 #line 1597 "parse.y" 06212 { 06213 /*%%%*/ 06214 (yyval.node) = (yyvsp[(2) - (3)].node); 06215 /*% 06216 $$ = dispatch1(mlhs_paren, $2); 06217 %*/ 06218 } 06219 break; 06220 06221 case 89: 06222 06223 /* Line 1806 of yacc.c */ 06224 #line 1607 "parse.y" 06225 { 06226 /*%%%*/ 06227 (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node)); 06228 /*% 06229 $$ = mlhs_add(mlhs_new(), $1); 06230 %*/ 06231 } 06232 break; 06233 06234 case 90: 06235 06236 /* Line 1806 of yacc.c */ 06237 #line 1615 "parse.y" 06238 { 06239 /*%%%*/ 06240 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node)); 06241 /*% 06242 $$ = mlhs_add($1, $2); 06243 %*/ 06244 } 06245 break; 06246 06247 case 91: 06248 06249 /* Line 1806 of yacc.c */ 06250 #line 1625 "parse.y" 06251 { 06252 /*%%%*/ 06253 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 06254 /*% 06255 $$ = mlhs_add(mlhs_new(), $1); 06256 %*/ 06257 } 06258 break; 06259 06260 case 92: 06261 06262 /* Line 1806 of yacc.c */ 06263 #line 1633 "parse.y" 06264 { 06265 /*%%%*/ 06266 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06267 /*% 06268 $$ = mlhs_add($1, $3); 06269 %*/ 06270 } 06271 break; 06272 06273 case 93: 06274 06275 /* Line 1806 of yacc.c */ 06276 #line 1643 "parse.y" 06277 { 06278 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 06279 } 06280 break; 06281 06282 case 94: 06283 06284 /* Line 1806 of yacc.c */ 06285 #line 1647 "parse.y" 06286 { 06287 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 06288 } 06289 break; 06290 06291 case 95: 06292 06293 /* Line 1806 of yacc.c */ 06294 #line 1651 "parse.y" 06295 { 06296 /*%%%*/ 06297 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)); 06298 /*% 06299 $$ = dispatch2(aref_field, $1, escape_Qundef($3)); 06300 %*/ 06301 } 06302 break; 06303 06304 case 96: 06305 06306 /* Line 1806 of yacc.c */ 06307 #line 1659 "parse.y" 06308 { 06309 /*%%%*/ 06310 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06311 /*% 06312 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06313 %*/ 06314 } 06315 break; 06316 06317 case 97: 06318 06319 /* Line 1806 of yacc.c */ 06320 #line 1667 "parse.y" 06321 { 06322 /*%%%*/ 06323 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06324 /*% 06325 $$ = dispatch2(const_path_field, $1, $3); 06326 %*/ 06327 } 06328 break; 06329 06330 case 98: 06331 06332 /* Line 1806 of yacc.c */ 06333 #line 1675 "parse.y" 06334 { 06335 /*%%%*/ 06336 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06337 /*% 06338 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06339 %*/ 06340 } 06341 break; 06342 06343 case 99: 06344 06345 /* Line 1806 of yacc.c */ 06346 #line 1683 "parse.y" 06347 { 06348 /*%%%*/ 06349 if (in_def || in_single) 06350 yyerror("dynamic constant assignment"); 06351 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id))); 06352 /*% 06353 if (in_def || in_single) 06354 yyerror("dynamic constant assignment"); 06355 $$ = dispatch2(const_path_field, $1, $3); 06356 %*/ 06357 } 06358 break; 06359 06360 case 100: 06361 06362 /* Line 1806 of yacc.c */ 06363 #line 1695 "parse.y" 06364 { 06365 /*%%%*/ 06366 if (in_def || in_single) 06367 yyerror("dynamic constant assignment"); 06368 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id))); 06369 /*% 06370 $$ = dispatch1(top_const_field, $2); 06371 %*/ 06372 } 06373 break; 06374 06375 case 101: 06376 06377 /* Line 1806 of yacc.c */ 06378 #line 1705 "parse.y" 06379 { 06380 /*%%%*/ 06381 rb_backref_error((yyvsp[(1) - (1)].node)); 06382 (yyval.node) = NEW_BEGIN(0); 06383 /*% 06384 $$ = dispatch1(var_field, $1); 06385 $$ = dispatch1(assign_error, $$); 06386 %*/ 06387 } 06388 break; 06389 06390 case 102: 06391 06392 /* Line 1806 of yacc.c */ 06393 #line 1717 "parse.y" 06394 { 06395 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 06396 /*%%%*/ 06397 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0); 06398 /*% 06399 $$ = dispatch1(var_field, $$); 06400 %*/ 06401 } 06402 break; 06403 06404 case 103: 06405 06406 /* Line 1806 of yacc.c */ 06407 #line 1726 "parse.y" 06408 { 06409 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 06410 /*%%%*/ 06411 if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0); 06412 /*% 06413 $$ = dispatch1(var_field, $$); 06414 %*/ 06415 } 06416 break; 06417 06418 case 104: 06419 06420 /* Line 1806 of yacc.c */ 06421 #line 1735 "parse.y" 06422 { 06423 /*%%%*/ 06424 (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node)); 06425 /*% 06426 $$ = dispatch2(aref_field, $1, escape_Qundef($3)); 06427 %*/ 06428 } 06429 break; 06430 06431 case 105: 06432 06433 /* Line 1806 of yacc.c */ 06434 #line 1743 "parse.y" 06435 { 06436 /*%%%*/ 06437 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06438 /*% 06439 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06440 %*/ 06441 } 06442 break; 06443 06444 case 106: 06445 06446 /* Line 1806 of yacc.c */ 06447 #line 1751 "parse.y" 06448 { 06449 /*%%%*/ 06450 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06451 /*% 06452 $$ = dispatch3(field, $1, ripper_intern("::"), $3); 06453 %*/ 06454 } 06455 break; 06456 06457 case 107: 06458 06459 /* Line 1806 of yacc.c */ 06460 #line 1759 "parse.y" 06461 { 06462 /*%%%*/ 06463 (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06464 /*% 06465 $$ = dispatch3(field, $1, ripper_id2sym('.'), $3); 06466 %*/ 06467 } 06468 break; 06469 06470 case 108: 06471 06472 /* Line 1806 of yacc.c */ 06473 #line 1767 "parse.y" 06474 { 06475 /*%%%*/ 06476 if (in_def || in_single) 06477 yyerror("dynamic constant assignment"); 06478 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id))); 06479 /*% 06480 $$ = dispatch2(const_path_field, $1, $3); 06481 if (in_def || in_single) { 06482 $$ = dispatch1(assign_error, $$); 06483 } 06484 %*/ 06485 } 06486 break; 06487 06488 case 109: 06489 06490 /* Line 1806 of yacc.c */ 06491 #line 1780 "parse.y" 06492 { 06493 /*%%%*/ 06494 if (in_def || in_single) 06495 yyerror("dynamic constant assignment"); 06496 (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id))); 06497 /*% 06498 $$ = dispatch1(top_const_field, $2); 06499 if (in_def || in_single) { 06500 $$ = dispatch1(assign_error, $$); 06501 } 06502 %*/ 06503 } 06504 break; 06505 06506 case 110: 06507 06508 /* Line 1806 of yacc.c */ 06509 #line 1793 "parse.y" 06510 { 06511 /*%%%*/ 06512 rb_backref_error((yyvsp[(1) - (1)].node)); 06513 (yyval.node) = NEW_BEGIN(0); 06514 /*% 06515 $$ = dispatch1(assign_error, $1); 06516 %*/ 06517 } 06518 break; 06519 06520 case 111: 06521 06522 /* Line 1806 of yacc.c */ 06523 #line 1804 "parse.y" 06524 { 06525 /*%%%*/ 06526 yyerror("class/module name must be CONSTANT"); 06527 /*% 06528 $$ = dispatch1(class_name_error, $1); 06529 %*/ 06530 } 06531 break; 06532 06533 case 113: 06534 06535 /* Line 1806 of yacc.c */ 06536 #line 1815 "parse.y" 06537 { 06538 /*%%%*/ 06539 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id)); 06540 /*% 06541 $$ = dispatch1(top_const_ref, $2); 06542 %*/ 06543 } 06544 break; 06545 06546 case 114: 06547 06548 /* Line 1806 of yacc.c */ 06549 #line 1823 "parse.y" 06550 { 06551 /*%%%*/ 06552 (yyval.node) = NEW_COLON2(0, (yyval.node)); 06553 /*% 06554 $$ = dispatch1(const_ref, $1); 06555 %*/ 06556 } 06557 break; 06558 06559 case 115: 06560 06561 /* Line 1806 of yacc.c */ 06562 #line 1831 "parse.y" 06563 { 06564 /*%%%*/ 06565 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 06566 /*% 06567 $$ = dispatch2(const_path_ref, $1, $3); 06568 %*/ 06569 } 06570 break; 06571 06572 case 119: 06573 06574 /* Line 1806 of yacc.c */ 06575 #line 1844 "parse.y" 06576 { 06577 lex_state = EXPR_ENDFN; 06578 (yyval.id) = (yyvsp[(1) - (1)].id); 06579 } 06580 break; 06581 06582 case 120: 06583 06584 /* Line 1806 of yacc.c */ 06585 #line 1849 "parse.y" 06586 { 06587 lex_state = EXPR_ENDFN; 06588 /*%%%*/ 06589 (yyval.id) = (yyvsp[(1) - (1)].id); 06590 /*% 06591 $$ = $1; 06592 %*/ 06593 } 06594 break; 06595 06596 case 123: 06597 06598 /* Line 1806 of yacc.c */ 06599 #line 1864 "parse.y" 06600 { 06601 /*%%%*/ 06602 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id))); 06603 /*% 06604 $$ = dispatch1(symbol_literal, $1); 06605 %*/ 06606 } 06607 break; 06608 06609 case 125: 06610 06611 /* Line 1806 of yacc.c */ 06612 #line 1875 "parse.y" 06613 { 06614 /*%%%*/ 06615 (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node)); 06616 /*% 06617 $$ = rb_ary_new3(1, $1); 06618 %*/ 06619 } 06620 break; 06621 06622 case 126: 06623 06624 /* Line 1806 of yacc.c */ 06625 #line 1882 "parse.y" 06626 {lex_state = EXPR_FNAME;} 06627 break; 06628 06629 case 127: 06630 06631 /* Line 1806 of yacc.c */ 06632 #line 1883 "parse.y" 06633 { 06634 /*%%%*/ 06635 (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node))); 06636 /*% 06637 rb_ary_push($1, $4); 06638 %*/ 06639 } 06640 break; 06641 06642 case 128: 06643 06644 /* Line 1806 of yacc.c */ 06645 #line 1892 "parse.y" 06646 { ifndef_ripper((yyval.id) = '|'); } 06647 break; 06648 06649 case 129: 06650 06651 /* Line 1806 of yacc.c */ 06652 #line 1893 "parse.y" 06653 { ifndef_ripper((yyval.id) = '^'); } 06654 break; 06655 06656 case 130: 06657 06658 /* Line 1806 of yacc.c */ 06659 #line 1894 "parse.y" 06660 { ifndef_ripper((yyval.id) = '&'); } 06661 break; 06662 06663 case 131: 06664 06665 /* Line 1806 of yacc.c */ 06666 #line 1895 "parse.y" 06667 { ifndef_ripper((yyval.id) = tCMP); } 06668 break; 06669 06670 case 132: 06671 06672 /* Line 1806 of yacc.c */ 06673 #line 1896 "parse.y" 06674 { ifndef_ripper((yyval.id) = tEQ); } 06675 break; 06676 06677 case 133: 06678 06679 /* Line 1806 of yacc.c */ 06680 #line 1897 "parse.y" 06681 { ifndef_ripper((yyval.id) = tEQQ); } 06682 break; 06683 06684 case 134: 06685 06686 /* Line 1806 of yacc.c */ 06687 #line 1898 "parse.y" 06688 { ifndef_ripper((yyval.id) = tMATCH); } 06689 break; 06690 06691 case 135: 06692 06693 /* Line 1806 of yacc.c */ 06694 #line 1899 "parse.y" 06695 { ifndef_ripper((yyval.id) = tNMATCH); } 06696 break; 06697 06698 case 136: 06699 06700 /* Line 1806 of yacc.c */ 06701 #line 1900 "parse.y" 06702 { ifndef_ripper((yyval.id) = '>'); } 06703 break; 06704 06705 case 137: 06706 06707 /* Line 1806 of yacc.c */ 06708 #line 1901 "parse.y" 06709 { ifndef_ripper((yyval.id) = tGEQ); } 06710 break; 06711 06712 case 138: 06713 06714 /* Line 1806 of yacc.c */ 06715 #line 1902 "parse.y" 06716 { ifndef_ripper((yyval.id) = '<'); } 06717 break; 06718 06719 case 139: 06720 06721 /* Line 1806 of yacc.c */ 06722 #line 1903 "parse.y" 06723 { ifndef_ripper((yyval.id) = tLEQ); } 06724 break; 06725 06726 case 140: 06727 06728 /* Line 1806 of yacc.c */ 06729 #line 1904 "parse.y" 06730 { ifndef_ripper((yyval.id) = tNEQ); } 06731 break; 06732 06733 case 141: 06734 06735 /* Line 1806 of yacc.c */ 06736 #line 1905 "parse.y" 06737 { ifndef_ripper((yyval.id) = tLSHFT); } 06738 break; 06739 06740 case 142: 06741 06742 /* Line 1806 of yacc.c */ 06743 #line 1906 "parse.y" 06744 { ifndef_ripper((yyval.id) = tRSHFT); } 06745 break; 06746 06747 case 143: 06748 06749 /* Line 1806 of yacc.c */ 06750 #line 1907 "parse.y" 06751 { ifndef_ripper((yyval.id) = '+'); } 06752 break; 06753 06754 case 144: 06755 06756 /* Line 1806 of yacc.c */ 06757 #line 1908 "parse.y" 06758 { ifndef_ripper((yyval.id) = '-'); } 06759 break; 06760 06761 case 145: 06762 06763 /* Line 1806 of yacc.c */ 06764 #line 1909 "parse.y" 06765 { ifndef_ripper((yyval.id) = '*'); } 06766 break; 06767 06768 case 146: 06769 06770 /* Line 1806 of yacc.c */ 06771 #line 1910 "parse.y" 06772 { ifndef_ripper((yyval.id) = '*'); } 06773 break; 06774 06775 case 147: 06776 06777 /* Line 1806 of yacc.c */ 06778 #line 1911 "parse.y" 06779 { ifndef_ripper((yyval.id) = '/'); } 06780 break; 06781 06782 case 148: 06783 06784 /* Line 1806 of yacc.c */ 06785 #line 1912 "parse.y" 06786 { ifndef_ripper((yyval.id) = '%'); } 06787 break; 06788 06789 case 149: 06790 06791 /* Line 1806 of yacc.c */ 06792 #line 1913 "parse.y" 06793 { ifndef_ripper((yyval.id) = tPOW); } 06794 break; 06795 06796 case 150: 06797 06798 /* Line 1806 of yacc.c */ 06799 #line 1914 "parse.y" 06800 { ifndef_ripper((yyval.id) = tDSTAR); } 06801 break; 06802 06803 case 151: 06804 06805 /* Line 1806 of yacc.c */ 06806 #line 1915 "parse.y" 06807 { ifndef_ripper((yyval.id) = '!'); } 06808 break; 06809 06810 case 152: 06811 06812 /* Line 1806 of yacc.c */ 06813 #line 1916 "parse.y" 06814 { ifndef_ripper((yyval.id) = '~'); } 06815 break; 06816 06817 case 153: 06818 06819 /* Line 1806 of yacc.c */ 06820 #line 1917 "parse.y" 06821 { ifndef_ripper((yyval.id) = tUPLUS); } 06822 break; 06823 06824 case 154: 06825 06826 /* Line 1806 of yacc.c */ 06827 #line 1918 "parse.y" 06828 { ifndef_ripper((yyval.id) = tUMINUS); } 06829 break; 06830 06831 case 155: 06832 06833 /* Line 1806 of yacc.c */ 06834 #line 1919 "parse.y" 06835 { ifndef_ripper((yyval.id) = tAREF); } 06836 break; 06837 06838 case 156: 06839 06840 /* Line 1806 of yacc.c */ 06841 #line 1920 "parse.y" 06842 { ifndef_ripper((yyval.id) = tASET); } 06843 break; 06844 06845 case 157: 06846 06847 /* Line 1806 of yacc.c */ 06848 #line 1921 "parse.y" 06849 { ifndef_ripper((yyval.id) = '`'); } 06850 break; 06851 06852 case 199: 06853 06854 /* Line 1806 of yacc.c */ 06855 #line 1939 "parse.y" 06856 { 06857 /*%%%*/ 06858 value_expr((yyvsp[(3) - (3)].node)); 06859 (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 06860 /*% 06861 $$ = dispatch2(assign, $1, $3); 06862 %*/ 06863 } 06864 break; 06865 06866 case 200: 06867 06868 /* Line 1806 of yacc.c */ 06869 #line 1948 "parse.y" 06870 { 06871 /*%%%*/ 06872 value_expr((yyvsp[(3) - (5)].node)); 06873 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0); 06874 (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node)); 06875 /*% 06876 $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5)); 06877 %*/ 06878 } 06879 break; 06880 06881 case 201: 06882 06883 /* Line 1806 of yacc.c */ 06884 #line 1958 "parse.y" 06885 { 06886 value_expr((yyvsp[(3) - (3)].node)); 06887 (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node)); 06888 } 06889 break; 06890 06891 case 202: 06892 06893 /* Line 1806 of yacc.c */ 06894 #line 1963 "parse.y" 06895 { 06896 /*%%%*/ 06897 value_expr((yyvsp[(3) - (5)].node)); 06898 (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0); 06899 /*% 06900 $3 = dispatch2(rescue_mod, $3, $5); 06901 %*/ 06902 (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node)); 06903 } 06904 break; 06905 06906 case 203: 06907 06908 /* Line 1806 of yacc.c */ 06909 #line 1973 "parse.y" 06910 { 06911 /*%%%*/ 06912 NODE *args; 06913 06914 value_expr((yyvsp[(6) - (6)].node)); 06915 if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY(); 06916 if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) { 06917 args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 06918 } 06919 else { 06920 args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 06921 } 06922 if ((yyvsp[(5) - (6)].id) == tOROP) { 06923 (yyvsp[(5) - (6)].id) = 0; 06924 } 06925 else if ((yyvsp[(5) - (6)].id) == tANDOP) { 06926 (yyvsp[(5) - (6)].id) = 1; 06927 } 06928 (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args); 06929 fixpos((yyval.node), (yyvsp[(1) - (6)].node)); 06930 /*% 06931 $1 = dispatch2(aref_field, $1, escape_Qundef($3)); 06932 $$ = dispatch3(opassign, $1, $5, $6); 06933 %*/ 06934 } 06935 break; 06936 06937 case 204: 06938 06939 /* Line 1806 of yacc.c */ 06940 #line 1999 "parse.y" 06941 { 06942 value_expr((yyvsp[(5) - (5)].node)); 06943 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06944 } 06945 break; 06946 06947 case 205: 06948 06949 /* Line 1806 of yacc.c */ 06950 #line 2004 "parse.y" 06951 { 06952 value_expr((yyvsp[(5) - (5)].node)); 06953 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06954 } 06955 break; 06956 06957 case 206: 06958 06959 /* Line 1806 of yacc.c */ 06960 #line 2009 "parse.y" 06961 { 06962 value_expr((yyvsp[(5) - (5)].node)); 06963 (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06964 } 06965 break; 06966 06967 case 207: 06968 06969 /* Line 1806 of yacc.c */ 06970 #line 2014 "parse.y" 06971 { 06972 /*%%%*/ 06973 (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id)); 06974 (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node)); 06975 /*% 06976 $$ = dispatch2(const_path_field, $1, $3); 06977 $$ = dispatch3(opassign, $$, $4, $5); 06978 %*/ 06979 } 06980 break; 06981 06982 case 208: 06983 06984 /* Line 1806 of yacc.c */ 06985 #line 2024 "parse.y" 06986 { 06987 /*%%%*/ 06988 (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id)); 06989 (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 06990 /*% 06991 $$ = dispatch1(top_const_field, $2); 06992 $$ = dispatch3(opassign, $$, $3, $4); 06993 %*/ 06994 } 06995 break; 06996 06997 case 209: 06998 06999 /* Line 1806 of yacc.c */ 07000 #line 2034 "parse.y" 07001 { 07002 /*%%%*/ 07003 rb_backref_error((yyvsp[(1) - (3)].node)); 07004 (yyval.node) = NEW_BEGIN(0); 07005 /*% 07006 $$ = dispatch1(var_field, $1); 07007 $$ = dispatch3(opassign, $$, $2, $3); 07008 $$ = dispatch1(assign_error, $$); 07009 %*/ 07010 } 07011 break; 07012 07013 case 210: 07014 07015 /* Line 1806 of yacc.c */ 07016 #line 2045 "parse.y" 07017 { 07018 /*%%%*/ 07019 value_expr((yyvsp[(1) - (3)].node)); 07020 value_expr((yyvsp[(3) - (3)].node)); 07021 (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07022 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) && 07023 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) { 07024 deferred_nodes = list_append(deferred_nodes, (yyval.node)); 07025 } 07026 /*% 07027 $$ = dispatch2(dot2, $1, $3); 07028 %*/ 07029 } 07030 break; 07031 07032 case 211: 07033 07034 /* Line 1806 of yacc.c */ 07035 #line 2059 "parse.y" 07036 { 07037 /*%%%*/ 07038 value_expr((yyvsp[(1) - (3)].node)); 07039 value_expr((yyvsp[(3) - (3)].node)); 07040 (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07041 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) && 07042 nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) { 07043 deferred_nodes = list_append(deferred_nodes, (yyval.node)); 07044 } 07045 /*% 07046 $$ = dispatch2(dot3, $1, $3); 07047 %*/ 07048 } 07049 break; 07050 07051 case 212: 07052 07053 /* Line 1806 of yacc.c */ 07054 #line 2073 "parse.y" 07055 { 07056 /*%%%*/ 07057 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node)); 07058 /*% 07059 $$ = dispatch3(binary, $1, ID2SYM('+'), $3); 07060 %*/ 07061 } 07062 break; 07063 07064 case 213: 07065 07066 /* Line 1806 of yacc.c */ 07067 #line 2081 "parse.y" 07068 { 07069 /*%%%*/ 07070 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node)); 07071 /*% 07072 $$ = dispatch3(binary, $1, ID2SYM('-'), $3); 07073 %*/ 07074 } 07075 break; 07076 07077 case 214: 07078 07079 /* Line 1806 of yacc.c */ 07080 #line 2089 "parse.y" 07081 { 07082 /*%%%*/ 07083 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node)); 07084 /*% 07085 $$ = dispatch3(binary, $1, ID2SYM('*'), $3); 07086 %*/ 07087 } 07088 break; 07089 07090 case 215: 07091 07092 /* Line 1806 of yacc.c */ 07093 #line 2097 "parse.y" 07094 { 07095 /*%%%*/ 07096 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node)); 07097 /*% 07098 $$ = dispatch3(binary, $1, ID2SYM('/'), $3); 07099 %*/ 07100 } 07101 break; 07102 07103 case 216: 07104 07105 /* Line 1806 of yacc.c */ 07106 #line 2105 "parse.y" 07107 { 07108 /*%%%*/ 07109 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node)); 07110 /*% 07111 $$ = dispatch3(binary, $1, ID2SYM('%'), $3); 07112 %*/ 07113 } 07114 break; 07115 07116 case 217: 07117 07118 /* Line 1806 of yacc.c */ 07119 #line 2113 "parse.y" 07120 { 07121 /*%%%*/ 07122 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node)); 07123 /*% 07124 $$ = dispatch3(binary, $1, ripper_intern("**"), $3); 07125 %*/ 07126 } 07127 break; 07128 07129 case 218: 07130 07131 /* Line 1806 of yacc.c */ 07132 #line 2121 "parse.y" 07133 { 07134 /*%%%*/ 07135 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0); 07136 /*% 07137 $$ = dispatch3(binary, $2, ripper_intern("**"), $4); 07138 $$ = dispatch2(unary, ripper_intern("-@"), $$); 07139 %*/ 07140 } 07141 break; 07142 07143 case 219: 07144 07145 /* Line 1806 of yacc.c */ 07146 #line 2130 "parse.y" 07147 { 07148 /*%%%*/ 07149 (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0); 07150 /*% 07151 $$ = dispatch3(binary, $2, ripper_intern("**"), $4); 07152 $$ = dispatch2(unary, ripper_intern("-@"), $$); 07153 %*/ 07154 } 07155 break; 07156 07157 case 220: 07158 07159 /* Line 1806 of yacc.c */ 07160 #line 2139 "parse.y" 07161 { 07162 /*%%%*/ 07163 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS); 07164 /*% 07165 $$ = dispatch2(unary, ripper_intern("+@"), $2); 07166 %*/ 07167 } 07168 break; 07169 07170 case 221: 07171 07172 /* Line 1806 of yacc.c */ 07173 #line 2147 "parse.y" 07174 { 07175 /*%%%*/ 07176 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS); 07177 /*% 07178 $$ = dispatch2(unary, ripper_intern("-@"), $2); 07179 %*/ 07180 } 07181 break; 07182 07183 case 222: 07184 07185 /* Line 1806 of yacc.c */ 07186 #line 2155 "parse.y" 07187 { 07188 /*%%%*/ 07189 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node)); 07190 /*% 07191 $$ = dispatch3(binary, $1, ID2SYM('|'), $3); 07192 %*/ 07193 } 07194 break; 07195 07196 case 223: 07197 07198 /* Line 1806 of yacc.c */ 07199 #line 2163 "parse.y" 07200 { 07201 /*%%%*/ 07202 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node)); 07203 /*% 07204 $$ = dispatch3(binary, $1, ID2SYM('^'), $3); 07205 %*/ 07206 } 07207 break; 07208 07209 case 224: 07210 07211 /* Line 1806 of yacc.c */ 07212 #line 2171 "parse.y" 07213 { 07214 /*%%%*/ 07215 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node)); 07216 /*% 07217 $$ = dispatch3(binary, $1, ID2SYM('&'), $3); 07218 %*/ 07219 } 07220 break; 07221 07222 case 225: 07223 07224 /* Line 1806 of yacc.c */ 07225 #line 2179 "parse.y" 07226 { 07227 /*%%%*/ 07228 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node)); 07229 /*% 07230 $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3); 07231 %*/ 07232 } 07233 break; 07234 07235 case 226: 07236 07237 /* Line 1806 of yacc.c */ 07238 #line 2187 "parse.y" 07239 { 07240 /*%%%*/ 07241 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node)); 07242 /*% 07243 $$ = dispatch3(binary, $1, ID2SYM('>'), $3); 07244 %*/ 07245 } 07246 break; 07247 07248 case 227: 07249 07250 /* Line 1806 of yacc.c */ 07251 #line 2195 "parse.y" 07252 { 07253 /*%%%*/ 07254 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node)); 07255 /*% 07256 $$ = dispatch3(binary, $1, ripper_intern(">="), $3); 07257 %*/ 07258 } 07259 break; 07260 07261 case 228: 07262 07263 /* Line 1806 of yacc.c */ 07264 #line 2203 "parse.y" 07265 { 07266 /*%%%*/ 07267 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node)); 07268 /*% 07269 $$ = dispatch3(binary, $1, ID2SYM('<'), $3); 07270 %*/ 07271 } 07272 break; 07273 07274 case 229: 07275 07276 /* Line 1806 of yacc.c */ 07277 #line 2211 "parse.y" 07278 { 07279 /*%%%*/ 07280 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node)); 07281 /*% 07282 $$ = dispatch3(binary, $1, ripper_intern("<="), $3); 07283 %*/ 07284 } 07285 break; 07286 07287 case 230: 07288 07289 /* Line 1806 of yacc.c */ 07290 #line 2219 "parse.y" 07291 { 07292 /*%%%*/ 07293 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node)); 07294 /*% 07295 $$ = dispatch3(binary, $1, ripper_intern("=="), $3); 07296 %*/ 07297 } 07298 break; 07299 07300 case 231: 07301 07302 /* Line 1806 of yacc.c */ 07303 #line 2227 "parse.y" 07304 { 07305 /*%%%*/ 07306 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node)); 07307 /*% 07308 $$ = dispatch3(binary, $1, ripper_intern("==="), $3); 07309 %*/ 07310 } 07311 break; 07312 07313 case 232: 07314 07315 /* Line 1806 of yacc.c */ 07316 #line 2235 "parse.y" 07317 { 07318 /*%%%*/ 07319 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node)); 07320 /*% 07321 $$ = dispatch3(binary, $1, ripper_intern("!="), $3); 07322 %*/ 07323 } 07324 break; 07325 07326 case 233: 07327 07328 /* Line 1806 of yacc.c */ 07329 #line 2243 "parse.y" 07330 { 07331 /*%%%*/ 07332 (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07333 if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) { 07334 (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node)); 07335 } 07336 /*% 07337 $$ = dispatch3(binary, $1, ripper_intern("=~"), $3); 07338 %*/ 07339 } 07340 break; 07341 07342 case 234: 07343 07344 /* Line 1806 of yacc.c */ 07345 #line 2254 "parse.y" 07346 { 07347 /*%%%*/ 07348 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node)); 07349 /*% 07350 $$ = dispatch3(binary, $1, ripper_intern("!~"), $3); 07351 %*/ 07352 } 07353 break; 07354 07355 case 235: 07356 07357 /* Line 1806 of yacc.c */ 07358 #line 2262 "parse.y" 07359 { 07360 /*%%%*/ 07361 (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!'); 07362 /*% 07363 $$ = dispatch2(unary, ID2SYM('!'), $2); 07364 %*/ 07365 } 07366 break; 07367 07368 case 236: 07369 07370 /* Line 1806 of yacc.c */ 07371 #line 2270 "parse.y" 07372 { 07373 /*%%%*/ 07374 (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~'); 07375 /*% 07376 $$ = dispatch2(unary, ID2SYM('~'), $2); 07377 %*/ 07378 } 07379 break; 07380 07381 case 237: 07382 07383 /* Line 1806 of yacc.c */ 07384 #line 2278 "parse.y" 07385 { 07386 /*%%%*/ 07387 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node)); 07388 /*% 07389 $$ = dispatch3(binary, $1, ripper_intern("<<"), $3); 07390 %*/ 07391 } 07392 break; 07393 07394 case 238: 07395 07396 /* Line 1806 of yacc.c */ 07397 #line 2286 "parse.y" 07398 { 07399 /*%%%*/ 07400 (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node)); 07401 /*% 07402 $$ = dispatch3(binary, $1, ripper_intern(">>"), $3); 07403 %*/ 07404 } 07405 break; 07406 07407 case 239: 07408 07409 /* Line 1806 of yacc.c */ 07410 #line 2294 "parse.y" 07411 { 07412 /*%%%*/ 07413 (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07414 /*% 07415 $$ = dispatch3(binary, $1, ripper_intern("&&"), $3); 07416 %*/ 07417 } 07418 break; 07419 07420 case 240: 07421 07422 /* Line 1806 of yacc.c */ 07423 #line 2302 "parse.y" 07424 { 07425 /*%%%*/ 07426 (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07427 /*% 07428 $$ = dispatch3(binary, $1, ripper_intern("||"), $3); 07429 %*/ 07430 } 07431 break; 07432 07433 case 241: 07434 07435 /* Line 1806 of yacc.c */ 07436 #line 2309 "parse.y" 07437 {in_defined = 1;} 07438 break; 07439 07440 case 242: 07441 07442 /* Line 1806 of yacc.c */ 07443 #line 2310 "parse.y" 07444 { 07445 /*%%%*/ 07446 in_defined = 0; 07447 (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node)); 07448 /*% 07449 in_defined = 0; 07450 $$ = dispatch1(defined, $4); 07451 %*/ 07452 } 07453 break; 07454 07455 case 243: 07456 07457 /* Line 1806 of yacc.c */ 07458 #line 2320 "parse.y" 07459 { 07460 /*%%%*/ 07461 value_expr((yyvsp[(1) - (6)].node)); 07462 (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node)); 07463 fixpos((yyval.node), (yyvsp[(1) - (6)].node)); 07464 /*% 07465 $$ = dispatch3(ifop, $1, $3, $6); 07466 %*/ 07467 } 07468 break; 07469 07470 case 244: 07471 07472 /* Line 1806 of yacc.c */ 07473 #line 2330 "parse.y" 07474 { 07475 (yyval.node) = (yyvsp[(1) - (1)].node); 07476 } 07477 break; 07478 07479 case 245: 07480 07481 /* Line 1806 of yacc.c */ 07482 #line 2336 "parse.y" 07483 { 07484 /*%%%*/ 07485 value_expr((yyvsp[(1) - (1)].node)); 07486 (yyval.node) = (yyvsp[(1) - (1)].node); 07487 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 07488 /*% 07489 $$ = $1; 07490 %*/ 07491 } 07492 break; 07493 07494 case 247: 07495 07496 /* Line 1806 of yacc.c */ 07497 #line 2349 "parse.y" 07498 { 07499 (yyval.node) = (yyvsp[(1) - (2)].node); 07500 } 07501 break; 07502 07503 case 248: 07504 07505 /* Line 1806 of yacc.c */ 07506 #line 2353 "parse.y" 07507 { 07508 /*%%%*/ 07509 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node))); 07510 /*% 07511 $$ = arg_add_assocs($1, $3); 07512 %*/ 07513 } 07514 break; 07515 07516 case 249: 07517 07518 /* Line 1806 of yacc.c */ 07519 #line 2361 "parse.y" 07520 { 07521 /*%%%*/ 07522 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node))); 07523 /*% 07524 $$ = arg_add_assocs(arg_new(), $1); 07525 %*/ 07526 } 07527 break; 07528 07529 case 250: 07530 07531 /* Line 1806 of yacc.c */ 07532 #line 2371 "parse.y" 07533 { 07534 /*%%%*/ 07535 (yyval.node) = (yyvsp[(2) - (3)].node); 07536 /*% 07537 $$ = dispatch1(arg_paren, escape_Qundef($2)); 07538 %*/ 07539 } 07540 break; 07541 07542 case 255: 07543 07544 /* Line 1806 of yacc.c */ 07545 #line 2387 "parse.y" 07546 { 07547 (yyval.node) = (yyvsp[(1) - (2)].node); 07548 } 07549 break; 07550 07551 case 256: 07552 07553 /* Line 1806 of yacc.c */ 07554 #line 2391 "parse.y" 07555 { 07556 /*%%%*/ 07557 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node))); 07558 /*% 07559 $$ = arg_add_assocs($1, $3); 07560 %*/ 07561 } 07562 break; 07563 07564 case 257: 07565 07566 /* Line 1806 of yacc.c */ 07567 #line 2399 "parse.y" 07568 { 07569 /*%%%*/ 07570 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node))); 07571 /*% 07572 $$ = arg_add_assocs(arg_new(), $1); 07573 %*/ 07574 } 07575 break; 07576 07577 case 258: 07578 07579 /* Line 1806 of yacc.c */ 07580 #line 2409 "parse.y" 07581 { 07582 /*%%%*/ 07583 value_expr((yyvsp[(1) - (1)].node)); 07584 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 07585 /*% 07586 $$ = arg_add(arg_new(), $1); 07587 %*/ 07588 } 07589 break; 07590 07591 case 259: 07592 07593 /* Line 1806 of yacc.c */ 07594 #line 2418 "parse.y" 07595 { 07596 /*%%%*/ 07597 (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 07598 /*% 07599 $$ = arg_add_optblock($1, $2); 07600 %*/ 07601 } 07602 break; 07603 07604 case 260: 07605 07606 /* Line 1806 of yacc.c */ 07607 #line 2426 "parse.y" 07608 { 07609 /*%%%*/ 07610 (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node))); 07611 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node)); 07612 /*% 07613 $$ = arg_add_assocs(arg_new(), $1); 07614 $$ = arg_add_optblock($$, $2); 07615 %*/ 07616 } 07617 break; 07618 07619 case 261: 07620 07621 /* Line 1806 of yacc.c */ 07622 #line 2436 "parse.y" 07623 { 07624 /*%%%*/ 07625 (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node))); 07626 (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node)); 07627 /*% 07628 $$ = arg_add_optblock(arg_add_assocs($1, $3), $4); 07629 %*/ 07630 } 07631 break; 07632 07633 case 263: 07634 07635 /* Line 1806 of yacc.c */ 07636 #line 2453 "parse.y" 07637 { 07638 (yyval.val) = cmdarg_stack; 07639 CMDARG_PUSH(1); 07640 } 07641 break; 07642 07643 case 264: 07644 07645 /* Line 1806 of yacc.c */ 07646 #line 2458 "parse.y" 07647 { 07648 /* CMDARG_POP() */ 07649 cmdarg_stack = (yyvsp[(1) - (2)].val); 07650 (yyval.node) = (yyvsp[(2) - (2)].node); 07651 } 07652 break; 07653 07654 case 265: 07655 07656 /* Line 1806 of yacc.c */ 07657 #line 2466 "parse.y" 07658 { 07659 /*%%%*/ 07660 (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node)); 07661 /*% 07662 $$ = $2; 07663 %*/ 07664 } 07665 break; 07666 07667 case 266: 07668 07669 /* Line 1806 of yacc.c */ 07670 #line 2476 "parse.y" 07671 { 07672 (yyval.node) = (yyvsp[(2) - (2)].node); 07673 } 07674 break; 07675 07676 case 267: 07677 07678 /* Line 1806 of yacc.c */ 07679 #line 2480 "parse.y" 07680 { 07681 (yyval.node) = 0; 07682 } 07683 break; 07684 07685 case 268: 07686 07687 /* Line 1806 of yacc.c */ 07688 #line 2486 "parse.y" 07689 { 07690 /*%%%*/ 07691 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 07692 /*% 07693 $$ = arg_add(arg_new(), $1); 07694 %*/ 07695 } 07696 break; 07697 07698 case 269: 07699 07700 /* Line 1806 of yacc.c */ 07701 #line 2494 "parse.y" 07702 { 07703 /*%%%*/ 07704 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node)); 07705 /*% 07706 $$ = arg_add_star(arg_new(), $2); 07707 %*/ 07708 } 07709 break; 07710 07711 case 270: 07712 07713 /* Line 1806 of yacc.c */ 07714 #line 2502 "parse.y" 07715 { 07716 /*%%%*/ 07717 NODE *n1; 07718 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) { 07719 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node)); 07720 } 07721 else { 07722 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07723 } 07724 /*% 07725 $$ = arg_add($1, $3); 07726 %*/ 07727 } 07728 break; 07729 07730 case 271: 07731 07732 /* Line 1806 of yacc.c */ 07733 #line 2516 "parse.y" 07734 { 07735 /*%%%*/ 07736 NODE *n1; 07737 if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) { 07738 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node)); 07739 } 07740 else { 07741 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); 07742 } 07743 /*% 07744 $$ = arg_add_star($1, $4); 07745 %*/ 07746 } 07747 break; 07748 07749 case 272: 07750 07751 /* Line 1806 of yacc.c */ 07752 #line 2532 "parse.y" 07753 { 07754 /*%%%*/ 07755 NODE *n1; 07756 if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) { 07757 (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node)); 07758 } 07759 else { 07760 (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 07761 } 07762 /*% 07763 $$ = mrhs_add(args2mrhs($1), $3); 07764 %*/ 07765 } 07766 break; 07767 07768 case 273: 07769 07770 /* Line 1806 of yacc.c */ 07771 #line 2546 "parse.y" 07772 { 07773 /*%%%*/ 07774 NODE *n1; 07775 if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY && 07776 (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) { 07777 (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node)); 07778 } 07779 else { 07780 (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node)); 07781 } 07782 /*% 07783 $$ = mrhs_add_star(args2mrhs($1), $4); 07784 %*/ 07785 } 07786 break; 07787 07788 case 274: 07789 07790 /* Line 1806 of yacc.c */ 07791 #line 2561 "parse.y" 07792 { 07793 /*%%%*/ 07794 (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node)); 07795 /*% 07796 $$ = mrhs_add_star(mrhs_new(), $2); 07797 %*/ 07798 } 07799 break; 07800 07801 case 285: 07802 07803 /* Line 1806 of yacc.c */ 07804 #line 2581 "parse.y" 07805 { 07806 /*%%%*/ 07807 (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0); 07808 /*% 07809 $$ = method_arg(dispatch1(fcall, $1), arg_new()); 07810 %*/ 07811 } 07812 break; 07813 07814 case 286: 07815 07816 /* Line 1806 of yacc.c */ 07817 #line 2589 "parse.y" 07818 { 07819 (yyvsp[(1) - (1)].val) = cmdarg_stack; 07820 cmdarg_stack = 0; 07821 /*%%%*/ 07822 (yyval.num) = ruby_sourceline; 07823 /*% 07824 %*/ 07825 } 07826 break; 07827 07828 case 287: 07829 07830 /* Line 1806 of yacc.c */ 07831 #line 2599 "parse.y" 07832 { 07833 cmdarg_stack = (yyvsp[(1) - (4)].val); 07834 /*%%%*/ 07835 if ((yyvsp[(3) - (4)].node) == NULL) { 07836 (yyval.node) = NEW_NIL(); 07837 } 07838 else { 07839 if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE || 07840 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE) 07841 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num)); 07842 (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node)); 07843 } 07844 nd_set_line((yyval.node), (yyvsp[(2) - (4)].num)); 07845 /*% 07846 $$ = dispatch1(begin, $3); 07847 %*/ 07848 } 07849 break; 07850 07851 case 288: 07852 07853 /* Line 1806 of yacc.c */ 07854 #line 2616 "parse.y" 07855 {lex_state = EXPR_ENDARG;} 07856 break; 07857 07858 case 289: 07859 07860 /* Line 1806 of yacc.c */ 07861 #line 2617 "parse.y" 07862 { 07863 /*%%%*/ 07864 (yyval.node) = 0; 07865 /*% 07866 $$ = dispatch1(paren, 0); 07867 %*/ 07868 } 07869 break; 07870 07871 case 290: 07872 07873 /* Line 1806 of yacc.c */ 07874 #line 2625 "parse.y" 07875 { 07876 (yyvsp[(1) - (1)].val) = cmdarg_stack; 07877 cmdarg_stack = 0; 07878 } 07879 break; 07880 07881 case 291: 07882 07883 /* Line 1806 of yacc.c */ 07884 #line 2629 "parse.y" 07885 {lex_state = EXPR_ENDARG;} 07886 break; 07887 07888 case 292: 07889 07890 /* Line 1806 of yacc.c */ 07891 #line 2630 "parse.y" 07892 { 07893 cmdarg_stack = (yyvsp[(1) - (5)].val); 07894 /*%%%*/ 07895 (yyval.node) = (yyvsp[(3) - (5)].node); 07896 /*% 07897 $$ = dispatch1(paren, $3); 07898 %*/ 07899 } 07900 break; 07901 07902 case 293: 07903 07904 /* Line 1806 of yacc.c */ 07905 #line 2639 "parse.y" 07906 { 07907 /*%%%*/ 07908 (yyval.node) = (yyvsp[(2) - (3)].node); 07909 /*% 07910 $$ = dispatch1(paren, $2); 07911 %*/ 07912 } 07913 break; 07914 07915 case 294: 07916 07917 /* Line 1806 of yacc.c */ 07918 #line 2647 "parse.y" 07919 { 07920 /*%%%*/ 07921 (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)); 07922 /*% 07923 $$ = dispatch2(const_path_ref, $1, $3); 07924 %*/ 07925 } 07926 break; 07927 07928 case 295: 07929 07930 /* Line 1806 of yacc.c */ 07931 #line 2655 "parse.y" 07932 { 07933 /*%%%*/ 07934 (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id)); 07935 /*% 07936 $$ = dispatch1(top_const_ref, $2); 07937 %*/ 07938 } 07939 break; 07940 07941 case 296: 07942 07943 /* Line 1806 of yacc.c */ 07944 #line 2663 "parse.y" 07945 { 07946 /*%%%*/ 07947 if ((yyvsp[(2) - (3)].node) == 0) { 07948 (yyval.node) = NEW_ZARRAY(); /* zero length array*/ 07949 } 07950 else { 07951 (yyval.node) = (yyvsp[(2) - (3)].node); 07952 } 07953 /*% 07954 $$ = dispatch1(array, escape_Qundef($2)); 07955 %*/ 07956 } 07957 break; 07958 07959 case 297: 07960 07961 /* Line 1806 of yacc.c */ 07962 #line 2676 "parse.y" 07963 { 07964 /*%%%*/ 07965 (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node)); 07966 /*% 07967 $$ = dispatch1(hash, escape_Qundef($2)); 07968 %*/ 07969 } 07970 break; 07971 07972 case 298: 07973 07974 /* Line 1806 of yacc.c */ 07975 #line 2684 "parse.y" 07976 { 07977 /*%%%*/ 07978 (yyval.node) = NEW_RETURN(0); 07979 /*% 07980 $$ = dispatch0(return0); 07981 %*/ 07982 } 07983 break; 07984 07985 case 299: 07986 07987 /* Line 1806 of yacc.c */ 07988 #line 2692 "parse.y" 07989 { 07990 /*%%%*/ 07991 (yyval.node) = new_yield((yyvsp[(3) - (4)].node)); 07992 /*% 07993 $$ = dispatch1(yield, dispatch1(paren, $3)); 07994 %*/ 07995 } 07996 break; 07997 07998 case 300: 07999 08000 /* Line 1806 of yacc.c */ 08001 #line 2700 "parse.y" 08002 { 08003 /*%%%*/ 08004 (yyval.node) = NEW_YIELD(0); 08005 /*% 08006 $$ = dispatch1(yield, dispatch1(paren, arg_new())); 08007 %*/ 08008 } 08009 break; 08010 08011 case 301: 08012 08013 /* Line 1806 of yacc.c */ 08014 #line 2708 "parse.y" 08015 { 08016 /*%%%*/ 08017 (yyval.node) = NEW_YIELD(0); 08018 /*% 08019 $$ = dispatch0(yield0); 08020 %*/ 08021 } 08022 break; 08023 08024 case 302: 08025 08026 /* Line 1806 of yacc.c */ 08027 #line 2715 "parse.y" 08028 {in_defined = 1;} 08029 break; 08030 08031 case 303: 08032 08033 /* Line 1806 of yacc.c */ 08034 #line 2716 "parse.y" 08035 { 08036 /*%%%*/ 08037 in_defined = 0; 08038 (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node)); 08039 /*% 08040 in_defined = 0; 08041 $$ = dispatch1(defined, $5); 08042 %*/ 08043 } 08044 break; 08045 08046 case 304: 08047 08048 /* Line 1806 of yacc.c */ 08049 #line 2726 "parse.y" 08050 { 08051 /*%%%*/ 08052 (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!'); 08053 /*% 08054 $$ = dispatch2(unary, ripper_intern("not"), $3); 08055 %*/ 08056 } 08057 break; 08058 08059 case 305: 08060 08061 /* Line 1806 of yacc.c */ 08062 #line 2734 "parse.y" 08063 { 08064 /*%%%*/ 08065 (yyval.node) = call_uni_op(cond(NEW_NIL()), '!'); 08066 /*% 08067 $$ = dispatch2(unary, ripper_intern("not"), Qnil); 08068 %*/ 08069 } 08070 break; 08071 08072 case 306: 08073 08074 /* Line 1806 of yacc.c */ 08075 #line 2742 "parse.y" 08076 { 08077 /*%%%*/ 08078 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node); 08079 (yyval.node) = (yyvsp[(2) - (2)].node); 08080 /*% 08081 $$ = method_arg(dispatch1(fcall, $1), arg_new()); 08082 $$ = method_add_block($$, $2); 08083 %*/ 08084 } 08085 break; 08086 08087 case 308: 08088 08089 /* Line 1806 of yacc.c */ 08090 #line 2753 "parse.y" 08091 { 08092 /*%%%*/ 08093 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node)); 08094 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node); 08095 (yyval.node) = (yyvsp[(2) - (2)].node); 08096 /*% 08097 $$ = method_add_block($1, $2); 08098 %*/ 08099 } 08100 break; 08101 08102 case 309: 08103 08104 /* Line 1806 of yacc.c */ 08105 #line 2763 "parse.y" 08106 { 08107 (yyval.node) = (yyvsp[(2) - (2)].node); 08108 } 08109 break; 08110 08111 case 310: 08112 08113 /* Line 1806 of yacc.c */ 08114 #line 2770 "parse.y" 08115 { 08116 /*%%%*/ 08117 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node)); 08118 fixpos((yyval.node), (yyvsp[(2) - (6)].node)); 08119 /*% 08120 $$ = dispatch3(if, $2, $4, escape_Qundef($5)); 08121 %*/ 08122 } 08123 break; 08124 08125 case 311: 08126 08127 /* Line 1806 of yacc.c */ 08128 #line 2782 "parse.y" 08129 { 08130 /*%%%*/ 08131 (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node)); 08132 fixpos((yyval.node), (yyvsp[(2) - (6)].node)); 08133 /*% 08134 $$ = dispatch3(unless, $2, $4, escape_Qundef($5)); 08135 %*/ 08136 } 08137 break; 08138 08139 case 312: 08140 08141 /* Line 1806 of yacc.c */ 08142 #line 2790 "parse.y" 08143 {COND_PUSH(1);} 08144 break; 08145 08146 case 313: 08147 08148 /* Line 1806 of yacc.c */ 08149 #line 2790 "parse.y" 08150 {COND_POP();} 08151 break; 08152 08153 case 314: 08154 08155 /* Line 1806 of yacc.c */ 08156 #line 2793 "parse.y" 08157 { 08158 /*%%%*/ 08159 (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1); 08160 fixpos((yyval.node), (yyvsp[(3) - (7)].node)); 08161 /*% 08162 $$ = dispatch2(while, $3, $6); 08163 %*/ 08164 } 08165 break; 08166 08167 case 315: 08168 08169 /* Line 1806 of yacc.c */ 08170 #line 2801 "parse.y" 08171 {COND_PUSH(1);} 08172 break; 08173 08174 case 316: 08175 08176 /* Line 1806 of yacc.c */ 08177 #line 2801 "parse.y" 08178 {COND_POP();} 08179 break; 08180 08181 case 317: 08182 08183 /* Line 1806 of yacc.c */ 08184 #line 2804 "parse.y" 08185 { 08186 /*%%%*/ 08187 (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1); 08188 fixpos((yyval.node), (yyvsp[(3) - (7)].node)); 08189 /*% 08190 $$ = dispatch2(until, $3, $6); 08191 %*/ 08192 } 08193 break; 08194 08195 case 318: 08196 08197 /* Line 1806 of yacc.c */ 08198 #line 2815 "parse.y" 08199 { 08200 /*%%%*/ 08201 (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node)); 08202 fixpos((yyval.node), (yyvsp[(2) - (5)].node)); 08203 /*% 08204 $$ = dispatch2(case, $2, $4); 08205 %*/ 08206 } 08207 break; 08208 08209 case 319: 08210 08211 /* Line 1806 of yacc.c */ 08212 #line 2824 "parse.y" 08213 { 08214 /*%%%*/ 08215 (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node)); 08216 /*% 08217 $$ = dispatch2(case, Qnil, $3); 08218 %*/ 08219 } 08220 break; 08221 08222 case 320: 08223 08224 /* Line 1806 of yacc.c */ 08225 #line 2832 "parse.y" 08226 {COND_PUSH(1);} 08227 break; 08228 08229 case 321: 08230 08231 /* Line 1806 of yacc.c */ 08232 #line 2834 "parse.y" 08233 {COND_POP();} 08234 break; 08235 08236 case 322: 08237 08238 /* Line 1806 of yacc.c */ 08239 #line 2837 "parse.y" 08240 { 08241 /*%%%*/ 08242 /* 08243 * for a, b, c in e 08244 * #=> 08245 * e.each{|*x| a, b, c = x 08246 * 08247 * for a in e 08248 * #=> 08249 * e.each{|x| a, = x} 08250 */ 08251 ID id = internal_id(); 08252 ID *tbl = ALLOC_N(ID, 2); 08253 NODE *m = NEW_ARGS_AUX(0, 0); 08254 NODE *args, *scope; 08255 08256 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) { 08257 /* if args.length == 1 && args[0].kind_of?(Array) 08258 * args = args[0] 08259 * end 08260 */ 08261 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1))); 08262 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0))); 08263 m->nd_next = block_append( 08264 NEW_IF( 08265 NEW_NODE(NODE_AND, 08266 NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0), 08267 idEq, one), 08268 NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero), 08269 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))), 08270 0), 08271 NEW_DASGN_CURR(id, 08272 NEW_CALL(NEW_DVAR(id), idAREF, zero)), 08273 0), 08274 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id))); 08275 08276 args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0)); 08277 } 08278 else { 08279 if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN || 08280 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN || 08281 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) { 08282 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id); 08283 m->nd_plen = 1; 08284 m->nd_next = (yyvsp[(2) - (9)].node); 08285 args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0)); 08286 } 08287 else { 08288 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id)); 08289 args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0)); 08290 } 08291 } 08292 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args); 08293 tbl[0] = 1; tbl[1] = id; 08294 (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope); 08295 fixpos((yyval.node), (yyvsp[(2) - (9)].node)); 08296 /*% 08297 $$ = dispatch3(for, $2, $5, $8); 08298 %*/ 08299 } 08300 break; 08301 08302 case 323: 08303 08304 /* Line 1806 of yacc.c */ 08305 #line 2898 "parse.y" 08306 { 08307 if (in_def || in_single) 08308 yyerror("class definition in method body"); 08309 local_push(0); 08310 /*%%%*/ 08311 (yyval.num) = ruby_sourceline; 08312 /*% 08313 %*/ 08314 } 08315 break; 08316 08317 case 324: 08318 08319 /* Line 1806 of yacc.c */ 08320 #line 2909 "parse.y" 08321 { 08322 /*%%%*/ 08323 (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node)); 08324 nd_set_line((yyval.node), (yyvsp[(4) - (6)].num)); 08325 /*% 08326 $$ = dispatch3(class, $2, $3, $5); 08327 %*/ 08328 local_pop(); 08329 } 08330 break; 08331 08332 case 325: 08333 08334 /* Line 1806 of yacc.c */ 08335 #line 2919 "parse.y" 08336 { 08337 (yyval.num) = in_def; 08338 in_def = 0; 08339 } 08340 break; 08341 08342 case 326: 08343 08344 /* Line 1806 of yacc.c */ 08345 #line 2924 "parse.y" 08346 { 08347 (yyval.num) = in_single; 08348 in_single = 0; 08349 local_push(0); 08350 } 08351 break; 08352 08353 case 327: 08354 08355 /* Line 1806 of yacc.c */ 08356 #line 2931 "parse.y" 08357 { 08358 /*%%%*/ 08359 (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node)); 08360 fixpos((yyval.node), (yyvsp[(3) - (8)].node)); 08361 /*% 08362 $$ = dispatch2(sclass, $3, $7); 08363 %*/ 08364 local_pop(); 08365 in_def = (yyvsp[(4) - (8)].num); 08366 in_single = (yyvsp[(6) - (8)].num); 08367 } 08368 break; 08369 08370 case 328: 08371 08372 /* Line 1806 of yacc.c */ 08373 #line 2943 "parse.y" 08374 { 08375 if (in_def || in_single) 08376 yyerror("module definition in method body"); 08377 local_push(0); 08378 /*%%%*/ 08379 (yyval.num) = ruby_sourceline; 08380 /*% 08381 %*/ 08382 } 08383 break; 08384 08385 case 329: 08386 08387 /* Line 1806 of yacc.c */ 08388 #line 2954 "parse.y" 08389 { 08390 /*%%%*/ 08391 (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node)); 08392 nd_set_line((yyval.node), (yyvsp[(3) - (5)].num)); 08393 /*% 08394 $$ = dispatch2(module, $2, $4); 08395 %*/ 08396 local_pop(); 08397 } 08398 break; 08399 08400 case 330: 08401 08402 /* Line 1806 of yacc.c */ 08403 #line 2964 "parse.y" 08404 { 08405 (yyval.id) = cur_mid; 08406 cur_mid = (yyvsp[(2) - (2)].id); 08407 in_def++; 08408 local_push(0); 08409 } 08410 break; 08411 08412 case 331: 08413 08414 /* Line 1806 of yacc.c */ 08415 #line 2973 "parse.y" 08416 { 08417 /*%%%*/ 08418 NODE *body = remove_begin((yyvsp[(5) - (6)].node)); 08419 reduce_nodes(&body); 08420 (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE); 08421 nd_set_line((yyval.node), (yyvsp[(1) - (6)].num)); 08422 /*% 08423 $$ = dispatch3(def, $2, $4, $5); 08424 %*/ 08425 local_pop(); 08426 in_def--; 08427 cur_mid = (yyvsp[(3) - (6)].id); 08428 } 08429 break; 08430 08431 case 332: 08432 08433 /* Line 1806 of yacc.c */ 08434 #line 2986 "parse.y" 08435 {lex_state = EXPR_FNAME;} 08436 break; 08437 08438 case 333: 08439 08440 /* Line 1806 of yacc.c */ 08441 #line 2987 "parse.y" 08442 { 08443 in_single++; 08444 lex_state = EXPR_ENDFN; /* force for args */ 08445 local_push(0); 08446 } 08447 break; 08448 08449 case 334: 08450 08451 /* Line 1806 of yacc.c */ 08452 #line 2995 "parse.y" 08453 { 08454 /*%%%*/ 08455 NODE *body = remove_begin((yyvsp[(8) - (9)].node)); 08456 reduce_nodes(&body); 08457 (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body); 08458 nd_set_line((yyval.node), (yyvsp[(1) - (9)].num)); 08459 /*% 08460 $$ = dispatch5(defs, $2, $3, $5, $7, $8); 08461 %*/ 08462 local_pop(); 08463 in_single--; 08464 } 08465 break; 08466 08467 case 335: 08468 08469 /* Line 1806 of yacc.c */ 08470 #line 3008 "parse.y" 08471 { 08472 /*%%%*/ 08473 (yyval.node) = NEW_BREAK(0); 08474 /*% 08475 $$ = dispatch1(break, arg_new()); 08476 %*/ 08477 } 08478 break; 08479 08480 case 336: 08481 08482 /* Line 1806 of yacc.c */ 08483 #line 3016 "parse.y" 08484 { 08485 /*%%%*/ 08486 (yyval.node) = NEW_NEXT(0); 08487 /*% 08488 $$ = dispatch1(next, arg_new()); 08489 %*/ 08490 } 08491 break; 08492 08493 case 337: 08494 08495 /* Line 1806 of yacc.c */ 08496 #line 3024 "parse.y" 08497 { 08498 /*%%%*/ 08499 (yyval.node) = NEW_REDO(); 08500 /*% 08501 $$ = dispatch0(redo); 08502 %*/ 08503 } 08504 break; 08505 08506 case 338: 08507 08508 /* Line 1806 of yacc.c */ 08509 #line 3032 "parse.y" 08510 { 08511 /*%%%*/ 08512 (yyval.node) = NEW_RETRY(); 08513 /*% 08514 $$ = dispatch0(retry); 08515 %*/ 08516 } 08517 break; 08518 08519 case 339: 08520 08521 /* Line 1806 of yacc.c */ 08522 #line 3042 "parse.y" 08523 { 08524 /*%%%*/ 08525 value_expr((yyvsp[(1) - (1)].node)); 08526 (yyval.node) = (yyvsp[(1) - (1)].node); 08527 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 08528 /*% 08529 $$ = $1; 08530 %*/ 08531 } 08532 break; 08533 08534 case 340: 08535 08536 /* Line 1806 of yacc.c */ 08537 #line 3054 "parse.y" 08538 { 08539 token_info_push("begin"); 08540 } 08541 break; 08542 08543 case 341: 08544 08545 /* Line 1806 of yacc.c */ 08546 #line 3060 "parse.y" 08547 { 08548 token_info_push("if"); 08549 } 08550 break; 08551 08552 case 342: 08553 08554 /* Line 1806 of yacc.c */ 08555 #line 3066 "parse.y" 08556 { 08557 token_info_push("unless"); 08558 } 08559 break; 08560 08561 case 343: 08562 08563 /* Line 1806 of yacc.c */ 08564 #line 3072 "parse.y" 08565 { 08566 token_info_push("while"); 08567 } 08568 break; 08569 08570 case 344: 08571 08572 /* Line 1806 of yacc.c */ 08573 #line 3078 "parse.y" 08574 { 08575 token_info_push("until"); 08576 } 08577 break; 08578 08579 case 345: 08580 08581 /* Line 1806 of yacc.c */ 08582 #line 3084 "parse.y" 08583 { 08584 token_info_push("case"); 08585 } 08586 break; 08587 08588 case 346: 08589 08590 /* Line 1806 of yacc.c */ 08591 #line 3090 "parse.y" 08592 { 08593 token_info_push("for"); 08594 } 08595 break; 08596 08597 case 347: 08598 08599 /* Line 1806 of yacc.c */ 08600 #line 3096 "parse.y" 08601 { 08602 token_info_push("class"); 08603 } 08604 break; 08605 08606 case 348: 08607 08608 /* Line 1806 of yacc.c */ 08609 #line 3102 "parse.y" 08610 { 08611 token_info_push("module"); 08612 } 08613 break; 08614 08615 case 349: 08616 08617 /* Line 1806 of yacc.c */ 08618 #line 3108 "parse.y" 08619 { 08620 token_info_push("def"); 08621 /*%%%*/ 08622 (yyval.num) = ruby_sourceline; 08623 /*% 08624 %*/ 08625 } 08626 break; 08627 08628 case 350: 08629 08630 /* Line 1806 of yacc.c */ 08631 #line 3118 "parse.y" 08632 { 08633 token_info_pop("end"); 08634 } 08635 break; 08636 08637 case 357: 08638 08639 /* Line 1806 of yacc.c */ 08640 #line 3148 "parse.y" 08641 { 08642 /*%%%*/ 08643 (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node)); 08644 fixpos((yyval.node), (yyvsp[(2) - (5)].node)); 08645 /*% 08646 $$ = dispatch3(elsif, $2, $4, escape_Qundef($5)); 08647 %*/ 08648 } 08649 break; 08650 08651 case 359: 08652 08653 /* Line 1806 of yacc.c */ 08654 #line 3160 "parse.y" 08655 { 08656 /*%%%*/ 08657 (yyval.node) = (yyvsp[(2) - (2)].node); 08658 /*% 08659 $$ = dispatch1(else, $2); 08660 %*/ 08661 } 08662 break; 08663 08664 case 362: 08665 08666 /* Line 1806 of yacc.c */ 08667 #line 3174 "parse.y" 08668 { 08669 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 08670 /*%%%*/ 08671 /*% 08672 $$ = dispatch1(mlhs_paren, $$); 08673 %*/ 08674 } 08675 break; 08676 08677 case 363: 08678 08679 /* Line 1806 of yacc.c */ 08680 #line 3182 "parse.y" 08681 { 08682 /*%%%*/ 08683 (yyval.node) = (yyvsp[(2) - (3)].node); 08684 /*% 08685 $$ = dispatch1(mlhs_paren, $2); 08686 %*/ 08687 } 08688 break; 08689 08690 case 364: 08691 08692 /* Line 1806 of yacc.c */ 08693 #line 3192 "parse.y" 08694 { 08695 /*%%%*/ 08696 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 08697 /*% 08698 $$ = mlhs_add(mlhs_new(), $1); 08699 %*/ 08700 } 08701 break; 08702 08703 case 365: 08704 08705 /* Line 1806 of yacc.c */ 08706 #line 3200 "parse.y" 08707 { 08708 /*%%%*/ 08709 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 08710 /*% 08711 $$ = mlhs_add($1, $3); 08712 %*/ 08713 } 08714 break; 08715 08716 case 366: 08717 08718 /* Line 1806 of yacc.c */ 08719 #line 3210 "parse.y" 08720 { 08721 /*%%%*/ 08722 (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0); 08723 /*% 08724 $$ = $1; 08725 %*/ 08726 } 08727 break; 08728 08729 case 367: 08730 08731 /* Line 1806 of yacc.c */ 08732 #line 3218 "parse.y" 08733 { 08734 (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0); 08735 /*%%%*/ 08736 (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node)); 08737 /*% 08738 $$ = mlhs_add_star($1, $$); 08739 %*/ 08740 } 08741 break; 08742 08743 case 368: 08744 08745 /* Line 1806 of yacc.c */ 08746 #line 3227 "parse.y" 08747 { 08748 (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0); 08749 /*%%%*/ 08750 (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node))); 08751 /*% 08752 $$ = mlhs_add_star($1, $$); 08753 %*/ 08754 } 08755 break; 08756 08757 case 369: 08758 08759 /* Line 1806 of yacc.c */ 08760 #line 3236 "parse.y" 08761 { 08762 /*%%%*/ 08763 (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1); 08764 /*% 08765 $$ = mlhs_add_star($1, Qnil); 08766 %*/ 08767 } 08768 break; 08769 08770 case 370: 08771 08772 /* Line 1806 of yacc.c */ 08773 #line 3244 "parse.y" 08774 { 08775 /*%%%*/ 08776 (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node))); 08777 /*% 08778 $$ = mlhs_add_star($1, $5); 08779 %*/ 08780 } 08781 break; 08782 08783 case 371: 08784 08785 /* Line 1806 of yacc.c */ 08786 #line 3252 "parse.y" 08787 { 08788 (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0); 08789 /*%%%*/ 08790 (yyval.node) = NEW_MASGN(0, (yyval.node)); 08791 /*% 08792 $$ = mlhs_add_star(mlhs_new(), $$); 08793 %*/ 08794 } 08795 break; 08796 08797 case 372: 08798 08799 /* Line 1806 of yacc.c */ 08800 #line 3261 "parse.y" 08801 { 08802 (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0); 08803 /*%%%*/ 08804 (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node))); 08805 /*% 08806 #if 0 08807 TODO: Check me 08808 #endif 08809 $$ = mlhs_add_star($$, $4); 08810 %*/ 08811 } 08812 break; 08813 08814 case 373: 08815 08816 /* Line 1806 of yacc.c */ 08817 #line 3273 "parse.y" 08818 { 08819 /*%%%*/ 08820 (yyval.node) = NEW_MASGN(0, -1); 08821 /*% 08822 $$ = mlhs_add_star(mlhs_new(), Qnil); 08823 %*/ 08824 } 08825 break; 08826 08827 case 374: 08828 08829 /* Line 1806 of yacc.c */ 08830 #line 3281 "parse.y" 08831 { 08832 /*%%%*/ 08833 (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node))); 08834 /*% 08835 $$ = mlhs_add_star(mlhs_new(), Qnil); 08836 %*/ 08837 } 08838 break; 08839 08840 case 375: 08841 08842 /* Line 1806 of yacc.c */ 08843 #line 3292 "parse.y" 08844 { 08845 (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id)); 08846 } 08847 break; 08848 08849 case 376: 08850 08851 /* Line 1806 of yacc.c */ 08852 #line 3296 "parse.y" 08853 { 08854 (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id)); 08855 } 08856 break; 08857 08858 case 377: 08859 08860 /* Line 1806 of yacc.c */ 08861 #line 3300 "parse.y" 08862 { 08863 (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id)); 08864 } 08865 break; 08866 08867 case 378: 08868 08869 /* Line 1806 of yacc.c */ 08870 #line 3304 "parse.y" 08871 { 08872 (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id)); 08873 } 08874 break; 08875 08876 case 379: 08877 08878 /* Line 1806 of yacc.c */ 08879 #line 3310 "parse.y" 08880 { 08881 (yyval.node) = (yyvsp[(2) - (2)].node); 08882 } 08883 break; 08884 08885 case 380: 08886 08887 /* Line 1806 of yacc.c */ 08888 #line 3314 "parse.y" 08889 { 08890 (yyval.node) = new_args_tail(Qnone, Qnone, Qnone); 08891 } 08892 break; 08893 08894 case 381: 08895 08896 /* Line 1806 of yacc.c */ 08897 #line 3320 "parse.y" 08898 { 08899 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node)); 08900 } 08901 break; 08902 08903 case 382: 08904 08905 /* Line 1806 of yacc.c */ 08906 #line 3324 "parse.y" 08907 { 08908 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node)); 08909 } 08910 break; 08911 08912 case 383: 08913 08914 /* Line 1806 of yacc.c */ 08915 #line 3328 "parse.y" 08916 { 08917 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node)); 08918 } 08919 break; 08920 08921 case 384: 08922 08923 /* Line 1806 of yacc.c */ 08924 #line 3332 "parse.y" 08925 { 08926 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 08927 } 08928 break; 08929 08930 case 385: 08931 08932 /* Line 1806 of yacc.c */ 08933 #line 3336 "parse.y" 08934 { 08935 (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node)); 08936 } 08937 break; 08938 08939 case 386: 08940 08941 /* Line 1806 of yacc.c */ 08942 #line 3340 "parse.y" 08943 { 08944 (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone)); 08945 /*%%%*/ 08946 /*% 08947 dispatch1(excessed_comma, $$); 08948 %*/ 08949 } 08950 break; 08951 08952 case 387: 08953 08954 /* Line 1806 of yacc.c */ 08955 #line 3348 "parse.y" 08956 { 08957 (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 08958 } 08959 break; 08960 08961 case 388: 08962 08963 /* Line 1806 of yacc.c */ 08964 #line 3352 "parse.y" 08965 { 08966 (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node)); 08967 } 08968 break; 08969 08970 case 389: 08971 08972 /* Line 1806 of yacc.c */ 08973 #line 3356 "parse.y" 08974 { 08975 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node)); 08976 } 08977 break; 08978 08979 case 390: 08980 08981 /* Line 1806 of yacc.c */ 08982 #line 3360 "parse.y" 08983 { 08984 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 08985 } 08986 break; 08987 08988 case 391: 08989 08990 /* Line 1806 of yacc.c */ 08991 #line 3364 "parse.y" 08992 { 08993 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node)); 08994 } 08995 break; 08996 08997 case 392: 08998 08999 /* Line 1806 of yacc.c */ 09000 #line 3368 "parse.y" 09001 { 09002 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node)); 09003 } 09004 break; 09005 09006 case 393: 09007 09008 /* Line 1806 of yacc.c */ 09009 #line 3372 "parse.y" 09010 { 09011 (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node)); 09012 } 09013 break; 09014 09015 case 394: 09016 09017 /* Line 1806 of yacc.c */ 09018 #line 3376 "parse.y" 09019 { 09020 (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node)); 09021 } 09022 break; 09023 09024 case 395: 09025 09026 /* Line 1806 of yacc.c */ 09027 #line 3380 "parse.y" 09028 { 09029 (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node)); 09030 } 09031 break; 09032 09033 case 397: 09034 09035 /* Line 1806 of yacc.c */ 09036 #line 3387 "parse.y" 09037 { 09038 command_start = TRUE; 09039 } 09040 break; 09041 09042 case 398: 09043 09044 /* Line 1806 of yacc.c */ 09045 #line 3393 "parse.y" 09046 { 09047 /*%%%*/ 09048 (yyval.node) = 0; 09049 /*% 09050 $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil), 09051 escape_Qundef($2)); 09052 %*/ 09053 } 09054 break; 09055 09056 case 399: 09057 09058 /* Line 1806 of yacc.c */ 09059 #line 3402 "parse.y" 09060 { 09061 /*%%%*/ 09062 (yyval.node) = 0; 09063 /*% 09064 $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil), 09065 Qnil); 09066 %*/ 09067 } 09068 break; 09069 09070 case 400: 09071 09072 /* Line 1806 of yacc.c */ 09073 #line 3411 "parse.y" 09074 { 09075 /*%%%*/ 09076 (yyval.node) = (yyvsp[(2) - (4)].node); 09077 /*% 09078 $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3)); 09079 %*/ 09080 } 09081 break; 09082 09083 case 401: 09084 09085 /* Line 1806 of yacc.c */ 09086 #line 3422 "parse.y" 09087 { 09088 (yyval.node) = 0; 09089 } 09090 break; 09091 09092 case 402: 09093 09094 /* Line 1806 of yacc.c */ 09095 #line 3426 "parse.y" 09096 { 09097 /*%%%*/ 09098 (yyval.node) = 0; 09099 /*% 09100 $$ = $3; 09101 %*/ 09102 } 09103 break; 09104 09105 case 405: 09106 09107 /* Line 1806 of yacc.c */ 09108 #line 3452 "parse.y" 09109 { 09110 new_bv(get_id((yyvsp[(1) - (1)].id))); 09111 /*%%%*/ 09112 /*% 09113 $$ = get_value($1); 09114 %*/ 09115 } 09116 break; 09117 09118 case 406: 09119 09120 /* Line 1806 of yacc.c */ 09121 #line 3460 "parse.y" 09122 { 09123 (yyval.node) = 0; 09124 } 09125 break; 09126 09127 case 407: 09128 09129 /* Line 1806 of yacc.c */ 09130 #line 3465 "parse.y" 09131 { 09132 (yyval.vars) = dyna_push(); 09133 } 09134 break; 09135 09136 case 408: 09137 09138 /* Line 1806 of yacc.c */ 09139 #line 3468 "parse.y" 09140 { 09141 (yyval.num) = lpar_beg; 09142 lpar_beg = ++paren_nest; 09143 } 09144 break; 09145 09146 case 409: 09147 09148 /* Line 1806 of yacc.c */ 09149 #line 3473 "parse.y" 09150 { 09151 (yyval.num) = ruby_sourceline; 09152 } 09153 break; 09154 09155 case 410: 09156 09157 /* Line 1806 of yacc.c */ 09158 #line 3477 "parse.y" 09159 { 09160 lpar_beg = (yyvsp[(2) - (5)].num); 09161 /*%%%*/ 09162 (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node)); 09163 nd_set_line((yyval.node), (yyvsp[(4) - (5)].num)); 09164 /*% 09165 $$ = dispatch2(lambda, $3, $5); 09166 %*/ 09167 dyna_pop((yyvsp[(1) - (5)].vars)); 09168 } 09169 break; 09170 09171 case 411: 09172 09173 /* Line 1806 of yacc.c */ 09174 #line 3490 "parse.y" 09175 { 09176 /*%%%*/ 09177 (yyval.node) = (yyvsp[(2) - (4)].node); 09178 /*% 09179 $$ = dispatch1(paren, $2); 09180 %*/ 09181 } 09182 break; 09183 09184 case 412: 09185 09186 /* Line 1806 of yacc.c */ 09187 #line 3498 "parse.y" 09188 { 09189 /*%%%*/ 09190 (yyval.node) = (yyvsp[(1) - (1)].node); 09191 /*% 09192 $$ = $1; 09193 %*/ 09194 } 09195 break; 09196 09197 case 413: 09198 09199 /* Line 1806 of yacc.c */ 09200 #line 3508 "parse.y" 09201 { 09202 (yyval.node) = (yyvsp[(2) - (3)].node); 09203 } 09204 break; 09205 09206 case 414: 09207 09208 /* Line 1806 of yacc.c */ 09209 #line 3512 "parse.y" 09210 { 09211 (yyval.node) = (yyvsp[(2) - (3)].node); 09212 } 09213 break; 09214 09215 case 415: 09216 09217 /* Line 1806 of yacc.c */ 09218 #line 3518 "parse.y" 09219 { 09220 (yyvsp[(1) - (1)].vars) = dyna_push(); 09221 /*%%%*/ 09222 (yyval.num) = ruby_sourceline; 09223 /*% %*/ 09224 } 09225 break; 09226 09227 case 416: 09228 09229 /* Line 1806 of yacc.c */ 09230 #line 3527 "parse.y" 09231 { 09232 /*%%%*/ 09233 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09234 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09235 /*% 09236 $$ = dispatch2(do_block, escape_Qundef($3), $4); 09237 %*/ 09238 dyna_pop((yyvsp[(1) - (5)].vars)); 09239 } 09240 break; 09241 09242 case 417: 09243 09244 /* Line 1806 of yacc.c */ 09245 #line 3539 "parse.y" 09246 { 09247 /*%%%*/ 09248 if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) { 09249 compile_error(PARSER_ARG "block given to yield"); 09250 } 09251 else { 09252 block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node)); 09253 } 09254 (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node); 09255 (yyval.node) = (yyvsp[(2) - (2)].node); 09256 fixpos((yyval.node), (yyvsp[(1) - (2)].node)); 09257 /*% 09258 $$ = method_add_block($1, $2); 09259 %*/ 09260 } 09261 break; 09262 09263 case 418: 09264 09265 /* Line 1806 of yacc.c */ 09266 #line 3555 "parse.y" 09267 { 09268 /*%%%*/ 09269 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node)); 09270 /*% 09271 $$ = dispatch3(call, $1, $2, $3); 09272 $$ = method_optarg($$, $4); 09273 %*/ 09274 } 09275 break; 09276 09277 case 419: 09278 09279 /* Line 1806 of yacc.c */ 09280 #line 3564 "parse.y" 09281 { 09282 /*%%%*/ 09283 block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node)); 09284 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node)); 09285 (yyval.node) = (yyvsp[(5) - (5)].node); 09286 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 09287 /*% 09288 $$ = dispatch4(command_call, $1, $2, $3, $4); 09289 $$ = method_add_block($$, $5); 09290 %*/ 09291 } 09292 break; 09293 09294 case 420: 09295 09296 /* Line 1806 of yacc.c */ 09297 #line 3576 "parse.y" 09298 { 09299 /*%%%*/ 09300 block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node)); 09301 (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node)); 09302 (yyval.node) = (yyvsp[(5) - (5)].node); 09303 fixpos((yyval.node), (yyvsp[(1) - (5)].node)); 09304 /*% 09305 $$ = dispatch4(command_call, $1, $2, $3, $4); 09306 $$ = method_add_block($$, $5); 09307 %*/ 09308 } 09309 break; 09310 09311 case 421: 09312 09313 /* Line 1806 of yacc.c */ 09314 #line 3590 "parse.y" 09315 { 09316 /*%%%*/ 09317 (yyval.node) = (yyvsp[(1) - (2)].node); 09318 (yyval.node)->nd_args = (yyvsp[(2) - (2)].node); 09319 /*% 09320 $$ = method_arg(dispatch1(fcall, $1), $2); 09321 %*/ 09322 } 09323 break; 09324 09325 case 422: 09326 09327 /* Line 1806 of yacc.c */ 09328 #line 3599 "parse.y" 09329 { 09330 /*%%%*/ 09331 (yyval.num) = ruby_sourceline; 09332 /*% %*/ 09333 } 09334 break; 09335 09336 case 423: 09337 09338 /* Line 1806 of yacc.c */ 09339 #line 3605 "parse.y" 09340 { 09341 /*%%%*/ 09342 (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node)); 09343 nd_set_line((yyval.node), (yyvsp[(4) - (5)].num)); 09344 /*% 09345 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 09346 $$ = method_optarg($$, $5); 09347 %*/ 09348 } 09349 break; 09350 09351 case 424: 09352 09353 /* Line 1806 of yacc.c */ 09354 #line 3615 "parse.y" 09355 { 09356 /*%%%*/ 09357 (yyval.num) = ruby_sourceline; 09358 /*% %*/ 09359 } 09360 break; 09361 09362 case 425: 09363 09364 /* Line 1806 of yacc.c */ 09365 #line 3621 "parse.y" 09366 { 09367 /*%%%*/ 09368 (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node)); 09369 nd_set_line((yyval.node), (yyvsp[(4) - (5)].num)); 09370 /*% 09371 $$ = dispatch3(call, $1, ripper_id2sym('.'), $3); 09372 $$ = method_optarg($$, $5); 09373 %*/ 09374 } 09375 break; 09376 09377 case 426: 09378 09379 /* Line 1806 of yacc.c */ 09380 #line 3631 "parse.y" 09381 { 09382 /*%%%*/ 09383 (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0); 09384 /*% 09385 $$ = dispatch3(call, $1, ripper_intern("::"), $3); 09386 %*/ 09387 } 09388 break; 09389 09390 case 427: 09391 09392 /* Line 1806 of yacc.c */ 09393 #line 3639 "parse.y" 09394 { 09395 /*%%%*/ 09396 (yyval.num) = ruby_sourceline; 09397 /*% %*/ 09398 } 09399 break; 09400 09401 case 428: 09402 09403 /* Line 1806 of yacc.c */ 09404 #line 3645 "parse.y" 09405 { 09406 /*%%%*/ 09407 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node)); 09408 nd_set_line((yyval.node), (yyvsp[(3) - (4)].num)); 09409 /*% 09410 $$ = dispatch3(call, $1, ripper_id2sym('.'), 09411 ripper_intern("call")); 09412 $$ = method_optarg($$, $4); 09413 %*/ 09414 } 09415 break; 09416 09417 case 429: 09418 09419 /* Line 1806 of yacc.c */ 09420 #line 3656 "parse.y" 09421 { 09422 /*%%%*/ 09423 (yyval.num) = ruby_sourceline; 09424 /*% %*/ 09425 } 09426 break; 09427 09428 case 430: 09429 09430 /* Line 1806 of yacc.c */ 09431 #line 3662 "parse.y" 09432 { 09433 /*%%%*/ 09434 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node)); 09435 nd_set_line((yyval.node), (yyvsp[(3) - (4)].num)); 09436 /*% 09437 $$ = dispatch3(call, $1, ripper_intern("::"), 09438 ripper_intern("call")); 09439 $$ = method_optarg($$, $4); 09440 %*/ 09441 } 09442 break; 09443 09444 case 431: 09445 09446 /* Line 1806 of yacc.c */ 09447 #line 3673 "parse.y" 09448 { 09449 /*%%%*/ 09450 (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node)); 09451 /*% 09452 $$ = dispatch1(super, $2); 09453 %*/ 09454 } 09455 break; 09456 09457 case 432: 09458 09459 /* Line 1806 of yacc.c */ 09460 #line 3681 "parse.y" 09461 { 09462 /*%%%*/ 09463 (yyval.node) = NEW_ZSUPER(); 09464 /*% 09465 $$ = dispatch0(zsuper); 09466 %*/ 09467 } 09468 break; 09469 09470 case 433: 09471 09472 /* Line 1806 of yacc.c */ 09473 #line 3689 "parse.y" 09474 { 09475 /*%%%*/ 09476 if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF) 09477 (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node)); 09478 else 09479 (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node)); 09480 fixpos((yyval.node), (yyvsp[(1) - (4)].node)); 09481 /*% 09482 $$ = dispatch2(aref, $1, escape_Qundef($3)); 09483 %*/ 09484 } 09485 break; 09486 09487 case 434: 09488 09489 /* Line 1806 of yacc.c */ 09490 #line 3703 "parse.y" 09491 { 09492 (yyvsp[(1) - (1)].vars) = dyna_push(); 09493 /*%%%*/ 09494 (yyval.num) = ruby_sourceline; 09495 /*% 09496 %*/ 09497 } 09498 break; 09499 09500 case 435: 09501 09502 /* Line 1806 of yacc.c */ 09503 #line 3712 "parse.y" 09504 { 09505 /*%%%*/ 09506 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09507 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09508 /*% 09509 $$ = dispatch2(brace_block, escape_Qundef($3), $4); 09510 %*/ 09511 dyna_pop((yyvsp[(1) - (5)].vars)); 09512 } 09513 break; 09514 09515 case 436: 09516 09517 /* Line 1806 of yacc.c */ 09518 #line 3722 "parse.y" 09519 { 09520 (yyvsp[(1) - (1)].vars) = dyna_push(); 09521 /*%%%*/ 09522 (yyval.num) = ruby_sourceline; 09523 /*% 09524 %*/ 09525 } 09526 break; 09527 09528 case 437: 09529 09530 /* Line 1806 of yacc.c */ 09531 #line 3731 "parse.y" 09532 { 09533 /*%%%*/ 09534 (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node)); 09535 nd_set_line((yyval.node), (yyvsp[(2) - (5)].num)); 09536 /*% 09537 $$ = dispatch2(do_block, escape_Qundef($3), $4); 09538 %*/ 09539 dyna_pop((yyvsp[(1) - (5)].vars)); 09540 } 09541 break; 09542 09543 case 438: 09544 09545 /* Line 1806 of yacc.c */ 09546 #line 3745 "parse.y" 09547 { 09548 /*%%%*/ 09549 (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node)); 09550 /*% 09551 $$ = dispatch3(when, $2, $4, escape_Qundef($5)); 09552 %*/ 09553 } 09554 break; 09555 09556 case 441: 09557 09558 /* Line 1806 of yacc.c */ 09559 #line 3761 "parse.y" 09560 { 09561 /*%%%*/ 09562 if ((yyvsp[(3) - (6)].node)) { 09563 (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO()); 09564 (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node)); 09565 } 09566 (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 09567 fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node)); 09568 /*% 09569 $$ = dispatch4(rescue, 09570 escape_Qundef($2), 09571 escape_Qundef($3), 09572 escape_Qundef($5), 09573 escape_Qundef($6)); 09574 %*/ 09575 } 09576 break; 09577 09578 case 443: 09579 09580 /* Line 1806 of yacc.c */ 09581 #line 3781 "parse.y" 09582 { 09583 /*%%%*/ 09584 (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node)); 09585 /*% 09586 $$ = rb_ary_new3(1, $1); 09587 %*/ 09588 } 09589 break; 09590 09591 case 444: 09592 09593 /* Line 1806 of yacc.c */ 09594 #line 3789 "parse.y" 09595 { 09596 /*%%%*/ 09597 if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node); 09598 /*% 09599 $$ = $1; 09600 %*/ 09601 } 09602 break; 09603 09604 case 446: 09605 09606 /* Line 1806 of yacc.c */ 09607 #line 3800 "parse.y" 09608 { 09609 (yyval.node) = (yyvsp[(2) - (2)].node); 09610 } 09611 break; 09612 09613 case 448: 09614 09615 /* Line 1806 of yacc.c */ 09616 #line 3807 "parse.y" 09617 { 09618 /*%%%*/ 09619 (yyval.node) = (yyvsp[(2) - (2)].node); 09620 /*% 09621 $$ = dispatch1(ensure, $2); 09622 %*/ 09623 } 09624 break; 09625 09626 case 451: 09627 09628 /* Line 1806 of yacc.c */ 09629 #line 3819 "parse.y" 09630 { 09631 /*%%%*/ 09632 (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id))); 09633 /*% 09634 $$ = dispatch1(symbol_literal, $1); 09635 %*/ 09636 } 09637 break; 09638 09639 case 453: 09640 09641 /* Line 1806 of yacc.c */ 09642 #line 3830 "parse.y" 09643 { 09644 /*%%%*/ 09645 NODE *node = (yyvsp[(1) - (1)].node); 09646 if (!node) { 09647 node = NEW_STR(STR_NEW0()); 09648 } 09649 else { 09650 node = evstr2dstr(node); 09651 } 09652 (yyval.node) = node; 09653 /*% 09654 $$ = $1; 09655 %*/ 09656 } 09657 break; 09658 09659 case 456: 09660 09661 /* Line 1806 of yacc.c */ 09662 #line 3849 "parse.y" 09663 { 09664 /*%%%*/ 09665 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09666 /*% 09667 $$ = dispatch2(string_concat, $1, $2); 09668 %*/ 09669 } 09670 break; 09671 09672 case 457: 09673 09674 /* Line 1806 of yacc.c */ 09675 #line 3859 "parse.y" 09676 { 09677 /*%%%*/ 09678 (yyval.node) = (yyvsp[(2) - (3)].node); 09679 /*% 09680 $$ = dispatch1(string_literal, $2); 09681 %*/ 09682 } 09683 break; 09684 09685 case 458: 09686 09687 /* Line 1806 of yacc.c */ 09688 #line 3869 "parse.y" 09689 { 09690 /*%%%*/ 09691 NODE *node = (yyvsp[(2) - (3)].node); 09692 if (!node) { 09693 node = NEW_XSTR(STR_NEW0()); 09694 } 09695 else { 09696 switch (nd_type(node)) { 09697 case NODE_STR: 09698 nd_set_type(node, NODE_XSTR); 09699 break; 09700 case NODE_DSTR: 09701 nd_set_type(node, NODE_DXSTR); 09702 break; 09703 default: 09704 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node)); 09705 break; 09706 } 09707 } 09708 (yyval.node) = node; 09709 /*% 09710 $$ = dispatch1(xstring_literal, $2); 09711 %*/ 09712 } 09713 break; 09714 09715 case 459: 09716 09717 /* Line 1806 of yacc.c */ 09718 #line 3896 "parse.y" 09719 { 09720 /*%%%*/ 09721 int options = (yyvsp[(3) - (3)].num); 09722 NODE *node = (yyvsp[(2) - (3)].node); 09723 NODE *list, *prev; 09724 if (!node) { 09725 node = NEW_LIT(reg_compile(STR_NEW0(), options)); 09726 } 09727 else switch (nd_type(node)) { 09728 case NODE_STR: 09729 { 09730 VALUE src = node->nd_lit; 09731 nd_set_type(node, NODE_LIT); 09732 node->nd_lit = reg_compile(src, options); 09733 } 09734 break; 09735 default: 09736 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node)); 09737 case NODE_DSTR: 09738 if (options & RE_OPTION_ONCE) { 09739 nd_set_type(node, NODE_DREGX_ONCE); 09740 } 09741 else { 09742 nd_set_type(node, NODE_DREGX); 09743 } 09744 node->nd_cflag = options & RE_OPTION_MASK; 09745 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options); 09746 for (list = (prev = node)->nd_next; list; list = list->nd_next) { 09747 if (nd_type(list->nd_head) == NODE_STR) { 09748 VALUE tail = list->nd_head->nd_lit; 09749 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) { 09750 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit; 09751 if (!literal_concat0(parser, lit, tail)) { 09752 node = 0; 09753 break; 09754 } 09755 rb_str_resize(tail, 0); 09756 prev->nd_next = list->nd_next; 09757 rb_gc_force_recycle((VALUE)list->nd_head); 09758 rb_gc_force_recycle((VALUE)list); 09759 list = prev; 09760 } 09761 else { 09762 prev = list; 09763 } 09764 } 09765 else { 09766 prev = 0; 09767 } 09768 } 09769 if (!node->nd_next) { 09770 VALUE src = node->nd_lit; 09771 nd_set_type(node, NODE_LIT); 09772 node->nd_lit = reg_compile(src, options); 09773 } 09774 break; 09775 } 09776 (yyval.node) = node; 09777 /*% 09778 $$ = dispatch2(regexp_literal, $2, $3); 09779 %*/ 09780 } 09781 break; 09782 09783 case 460: 09784 09785 /* Line 1806 of yacc.c */ 09786 #line 3961 "parse.y" 09787 { 09788 /*%%%*/ 09789 (yyval.node) = NEW_ZARRAY(); 09790 /*% 09791 $$ = dispatch0(words_new); 09792 $$ = dispatch1(array, $$); 09793 %*/ 09794 } 09795 break; 09796 09797 case 461: 09798 09799 /* Line 1806 of yacc.c */ 09800 #line 3970 "parse.y" 09801 { 09802 /*%%%*/ 09803 (yyval.node) = (yyvsp[(2) - (3)].node); 09804 /*% 09805 $$ = dispatch1(array, $2); 09806 %*/ 09807 } 09808 break; 09809 09810 case 462: 09811 09812 /* Line 1806 of yacc.c */ 09813 #line 3980 "parse.y" 09814 { 09815 /*%%%*/ 09816 (yyval.node) = 0; 09817 /*% 09818 $$ = dispatch0(words_new); 09819 %*/ 09820 } 09821 break; 09822 09823 case 463: 09824 09825 /* Line 1806 of yacc.c */ 09826 #line 3988 "parse.y" 09827 { 09828 /*%%%*/ 09829 (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node))); 09830 /*% 09831 $$ = dispatch2(words_add, $1, $2); 09832 %*/ 09833 } 09834 break; 09835 09836 case 465: 09837 09838 /* Line 1806 of yacc.c */ 09839 #line 4006 "parse.y" 09840 { 09841 /*%%%*/ 09842 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 09843 /*% 09844 $$ = dispatch2(word_add, $1, $2); 09845 %*/ 09846 } 09847 break; 09848 09849 case 466: 09850 09851 /* Line 1806 of yacc.c */ 09852 #line 4016 "parse.y" 09853 { 09854 /*%%%*/ 09855 (yyval.node) = NEW_ZARRAY(); 09856 /*% 09857 $$ = dispatch0(symbols_new); 09858 $$ = dispatch1(array, $$); 09859 %*/ 09860 } 09861 break; 09862 09863 case 467: 09864 09865 /* Line 1806 of yacc.c */ 09866 #line 4025 "parse.y" 09867 { 09868 /*%%%*/ 09869 (yyval.node) = (yyvsp[(2) - (3)].node); 09870 /*% 09871 $$ = dispatch1(array, $2); 09872 %*/ 09873 } 09874 break; 09875 09876 case 468: 09877 09878 /* Line 1806 of yacc.c */ 09879 #line 4035 "parse.y" 09880 { 09881 /*%%%*/ 09882 (yyval.node) = 0; 09883 /*% 09884 $$ = dispatch0(symbols_new); 09885 %*/ 09886 } 09887 break; 09888 09889 case 469: 09890 09891 /* Line 1806 of yacc.c */ 09892 #line 4043 "parse.y" 09893 { 09894 /*%%%*/ 09895 (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node)); 09896 nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM); 09897 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node)); 09898 /*% 09899 $$ = dispatch2(symbols_add, $1, $2); 09900 %*/ 09901 } 09902 break; 09903 09904 case 470: 09905 09906 /* Line 1806 of yacc.c */ 09907 #line 4055 "parse.y" 09908 { 09909 /*%%%*/ 09910 (yyval.node) = NEW_ZARRAY(); 09911 /*% 09912 $$ = dispatch0(qwords_new); 09913 $$ = dispatch1(array, $$); 09914 %*/ 09915 } 09916 break; 09917 09918 case 471: 09919 09920 /* Line 1806 of yacc.c */ 09921 #line 4064 "parse.y" 09922 { 09923 /*%%%*/ 09924 (yyval.node) = (yyvsp[(2) - (3)].node); 09925 /*% 09926 $$ = dispatch1(array, $2); 09927 %*/ 09928 } 09929 break; 09930 09931 case 472: 09932 09933 /* Line 1806 of yacc.c */ 09934 #line 4074 "parse.y" 09935 { 09936 /*%%%*/ 09937 (yyval.node) = NEW_ZARRAY(); 09938 /*% 09939 $$ = dispatch0(qsymbols_new); 09940 $$ = dispatch1(array, $$); 09941 %*/ 09942 } 09943 break; 09944 09945 case 473: 09946 09947 /* Line 1806 of yacc.c */ 09948 #line 4083 "parse.y" 09949 { 09950 /*%%%*/ 09951 (yyval.node) = (yyvsp[(2) - (3)].node); 09952 /*% 09953 $$ = dispatch1(array, $2); 09954 %*/ 09955 } 09956 break; 09957 09958 case 474: 09959 09960 /* Line 1806 of yacc.c */ 09961 #line 4093 "parse.y" 09962 { 09963 /*%%%*/ 09964 (yyval.node) = 0; 09965 /*% 09966 $$ = dispatch0(qwords_new); 09967 %*/ 09968 } 09969 break; 09970 09971 case 475: 09972 09973 /* Line 1806 of yacc.c */ 09974 #line 4101 "parse.y" 09975 { 09976 /*%%%*/ 09977 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node)); 09978 /*% 09979 $$ = dispatch2(qwords_add, $1, $2); 09980 %*/ 09981 } 09982 break; 09983 09984 case 476: 09985 09986 /* Line 1806 of yacc.c */ 09987 #line 4111 "parse.y" 09988 { 09989 /*%%%*/ 09990 (yyval.node) = 0; 09991 /*% 09992 $$ = dispatch0(qsymbols_new); 09993 %*/ 09994 } 09995 break; 09996 09997 case 477: 09998 09999 /* Line 1806 of yacc.c */ 10000 #line 4119 "parse.y" 10001 { 10002 /*%%%*/ 10003 VALUE lit; 10004 lit = (yyvsp[(2) - (3)].node)->nd_lit; 10005 (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit)); 10006 nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT); 10007 (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node)); 10008 /*% 10009 $$ = dispatch2(qsymbols_add, $1, $2); 10010 %*/ 10011 } 10012 break; 10013 10014 case 478: 10015 10016 /* Line 1806 of yacc.c */ 10017 #line 4133 "parse.y" 10018 { 10019 /*%%%*/ 10020 (yyval.node) = 0; 10021 /*% 10022 $$ = dispatch0(string_content); 10023 %*/ 10024 } 10025 break; 10026 10027 case 479: 10028 10029 /* Line 1806 of yacc.c */ 10030 #line 4141 "parse.y" 10031 { 10032 /*%%%*/ 10033 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 10034 /*% 10035 $$ = dispatch2(string_add, $1, $2); 10036 %*/ 10037 } 10038 break; 10039 10040 case 480: 10041 10042 /* Line 1806 of yacc.c */ 10043 #line 4151 "parse.y" 10044 { 10045 /*%%%*/ 10046 (yyval.node) = 0; 10047 /*% 10048 $$ = dispatch0(xstring_new); 10049 %*/ 10050 } 10051 break; 10052 10053 case 481: 10054 10055 /* Line 1806 of yacc.c */ 10056 #line 4159 "parse.y" 10057 { 10058 /*%%%*/ 10059 (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node)); 10060 /*% 10061 $$ = dispatch2(xstring_add, $1, $2); 10062 %*/ 10063 } 10064 break; 10065 10066 case 482: 10067 10068 /* Line 1806 of yacc.c */ 10069 #line 4169 "parse.y" 10070 { 10071 /*%%%*/ 10072 (yyval.node) = 0; 10073 /*% 10074 $$ = dispatch0(regexp_new); 10075 %*/ 10076 } 10077 break; 10078 10079 case 483: 10080 10081 /* Line 1806 of yacc.c */ 10082 #line 4177 "parse.y" 10083 { 10084 /*%%%*/ 10085 NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node); 10086 if (!head) { 10087 (yyval.node) = tail; 10088 } 10089 else if (!tail) { 10090 (yyval.node) = head; 10091 } 10092 else { 10093 switch (nd_type(head)) { 10094 case NODE_STR: 10095 nd_set_type(head, NODE_DSTR); 10096 break; 10097 case NODE_DSTR: 10098 break; 10099 default: 10100 head = list_append(NEW_DSTR(Qnil), head); 10101 break; 10102 } 10103 (yyval.node) = list_append(head, tail); 10104 } 10105 /*% 10106 $$ = dispatch2(regexp_add, $1, $2); 10107 %*/ 10108 } 10109 break; 10110 10111 case 485: 10112 10113 /* Line 1806 of yacc.c */ 10114 #line 4207 "parse.y" 10115 { 10116 (yyval.node) = lex_strterm; 10117 lex_strterm = 0; 10118 lex_state = EXPR_BEG; 10119 } 10120 break; 10121 10122 case 486: 10123 10124 /* Line 1806 of yacc.c */ 10125 #line 4213 "parse.y" 10126 { 10127 /*%%%*/ 10128 lex_strterm = (yyvsp[(2) - (3)].node); 10129 (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node)); 10130 /*% 10131 lex_strterm = $<node>2; 10132 $$ = dispatch1(string_dvar, $3); 10133 %*/ 10134 } 10135 break; 10136 10137 case 487: 10138 10139 /* Line 1806 of yacc.c */ 10140 #line 4223 "parse.y" 10141 { 10142 (yyvsp[(1) - (1)].val) = cond_stack; 10143 (yyval.val) = cmdarg_stack; 10144 cond_stack = 0; 10145 cmdarg_stack = 0; 10146 } 10147 break; 10148 10149 case 488: 10150 10151 /* Line 1806 of yacc.c */ 10152 #line 4229 "parse.y" 10153 { 10154 (yyval.node) = lex_strterm; 10155 lex_strterm = 0; 10156 lex_state = EXPR_BEG; 10157 } 10158 break; 10159 10160 case 489: 10161 10162 /* Line 1806 of yacc.c */ 10163 #line 4234 "parse.y" 10164 { 10165 (yyval.num) = brace_nest; 10166 brace_nest = 0; 10167 } 10168 break; 10169 10170 case 490: 10171 10172 /* Line 1806 of yacc.c */ 10173 #line 4239 "parse.y" 10174 { 10175 cond_stack = (yyvsp[(1) - (6)].val); 10176 cmdarg_stack = (yyvsp[(2) - (6)].val); 10177 lex_strterm = (yyvsp[(3) - (6)].node); 10178 brace_nest = (yyvsp[(4) - (6)].num); 10179 /*%%%*/ 10180 if ((yyvsp[(5) - (6)].node)) (yyvsp[(5) - (6)].node)->flags &= ~NODE_FL_NEWLINE; 10181 (yyval.node) = new_evstr((yyvsp[(5) - (6)].node)); 10182 /*% 10183 $$ = dispatch1(string_embexpr, $5); 10184 %*/ 10185 } 10186 break; 10187 10188 case 491: 10189 10190 /* Line 1806 of yacc.c */ 10191 #line 4254 "parse.y" 10192 { 10193 /*%%%*/ 10194 (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id)); 10195 /*% 10196 $$ = dispatch1(var_ref, $1); 10197 %*/ 10198 } 10199 break; 10200 10201 case 492: 10202 10203 /* Line 1806 of yacc.c */ 10204 #line 4262 "parse.y" 10205 { 10206 /*%%%*/ 10207 (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id)); 10208 /*% 10209 $$ = dispatch1(var_ref, $1); 10210 %*/ 10211 } 10212 break; 10213 10214 case 493: 10215 10216 /* Line 1806 of yacc.c */ 10217 #line 4270 "parse.y" 10218 { 10219 /*%%%*/ 10220 (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id)); 10221 /*% 10222 $$ = dispatch1(var_ref, $1); 10223 %*/ 10224 } 10225 break; 10226 10227 case 495: 10228 10229 /* Line 1806 of yacc.c */ 10230 #line 4281 "parse.y" 10231 { 10232 lex_state = EXPR_END; 10233 /*%%%*/ 10234 (yyval.id) = (yyvsp[(2) - (2)].id); 10235 /*% 10236 $$ = dispatch1(symbol, $2); 10237 %*/ 10238 } 10239 break; 10240 10241 case 500: 10242 10243 /* Line 1806 of yacc.c */ 10244 #line 4298 "parse.y" 10245 { 10246 lex_state = EXPR_END; 10247 /*%%%*/ 10248 (yyval.node) = dsym_node((yyvsp[(2) - (3)].node)); 10249 /*% 10250 $$ = dispatch1(dyna_symbol, $2); 10251 %*/ 10252 } 10253 break; 10254 10255 case 503: 10256 10257 /* Line 1806 of yacc.c */ 10258 #line 4311 "parse.y" 10259 { 10260 /*%%%*/ 10261 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node)); 10262 /*% 10263 $$ = dispatch2(unary, ripper_intern("-@"), $2); 10264 %*/ 10265 } 10266 break; 10267 10268 case 504: 10269 10270 /* Line 1806 of yacc.c */ 10271 #line 4319 "parse.y" 10272 { 10273 /*%%%*/ 10274 (yyval.node) = negate_lit((yyvsp[(2) - (2)].node)); 10275 /*% 10276 $$ = dispatch2(unary, ripper_intern("-@"), $2); 10277 %*/ 10278 } 10279 break; 10280 10281 case 510: 10282 10283 /* Line 1806 of yacc.c */ 10284 #line 4335 "parse.y" 10285 {ifndef_ripper((yyval.id) = keyword_nil);} 10286 break; 10287 10288 case 511: 10289 10290 /* Line 1806 of yacc.c */ 10291 #line 4336 "parse.y" 10292 {ifndef_ripper((yyval.id) = keyword_self);} 10293 break; 10294 10295 case 512: 10296 10297 /* Line 1806 of yacc.c */ 10298 #line 4337 "parse.y" 10299 {ifndef_ripper((yyval.id) = keyword_true);} 10300 break; 10301 10302 case 513: 10303 10304 /* Line 1806 of yacc.c */ 10305 #line 4338 "parse.y" 10306 {ifndef_ripper((yyval.id) = keyword_false);} 10307 break; 10308 10309 case 514: 10310 10311 /* Line 1806 of yacc.c */ 10312 #line 4339 "parse.y" 10313 {ifndef_ripper((yyval.id) = keyword__FILE__);} 10314 break; 10315 10316 case 515: 10317 10318 /* Line 1806 of yacc.c */ 10319 #line 4340 "parse.y" 10320 {ifndef_ripper((yyval.id) = keyword__LINE__);} 10321 break; 10322 10323 case 516: 10324 10325 /* Line 1806 of yacc.c */ 10326 #line 4341 "parse.y" 10327 {ifndef_ripper((yyval.id) = keyword__ENCODING__);} 10328 break; 10329 10330 case 517: 10331 10332 /* Line 1806 of yacc.c */ 10333 #line 4345 "parse.y" 10334 { 10335 /*%%%*/ 10336 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0); 10337 /*% 10338 if (id_is_var(get_id($1))) { 10339 $$ = dispatch1(var_ref, $1); 10340 } 10341 else { 10342 $$ = dispatch1(vcall, $1); 10343 } 10344 %*/ 10345 } 10346 break; 10347 10348 case 518: 10349 10350 /* Line 1806 of yacc.c */ 10351 #line 4358 "parse.y" 10352 { 10353 /*%%%*/ 10354 if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0); 10355 /*% 10356 $$ = dispatch1(var_ref, $1); 10357 %*/ 10358 } 10359 break; 10360 10361 case 519: 10362 10363 /* Line 1806 of yacc.c */ 10364 #line 4368 "parse.y" 10365 { 10366 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 10367 /*%%%*/ 10368 /*% 10369 $$ = dispatch1(var_field, $$); 10370 %*/ 10371 } 10372 break; 10373 10374 case 520: 10375 10376 /* Line 1806 of yacc.c */ 10377 #line 4376 "parse.y" 10378 { 10379 (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0); 10380 /*%%%*/ 10381 /*% 10382 $$ = dispatch1(var_field, $$); 10383 %*/ 10384 } 10385 break; 10386 10387 case 523: 10388 10389 /* Line 1806 of yacc.c */ 10390 #line 4390 "parse.y" 10391 { 10392 /*%%%*/ 10393 (yyval.node) = 0; 10394 /*% 10395 $$ = Qnil; 10396 %*/ 10397 } 10398 break; 10399 10400 case 524: 10401 10402 /* Line 1806 of yacc.c */ 10403 #line 4398 "parse.y" 10404 { 10405 lex_state = EXPR_BEG; 10406 command_start = TRUE; 10407 } 10408 break; 10409 10410 case 525: 10411 10412 /* Line 1806 of yacc.c */ 10413 #line 4403 "parse.y" 10414 { 10415 (yyval.node) = (yyvsp[(3) - (4)].node); 10416 } 10417 break; 10418 10419 case 526: 10420 10421 /* Line 1806 of yacc.c */ 10422 #line 4407 "parse.y" 10423 { 10424 /*%%%*/ 10425 yyerrok; 10426 (yyval.node) = 0; 10427 /*% 10428 yyerrok; 10429 $$ = Qnil; 10430 %*/ 10431 } 10432 break; 10433 10434 case 527: 10435 10436 /* Line 1806 of yacc.c */ 10437 #line 4419 "parse.y" 10438 { 10439 /*%%%*/ 10440 (yyval.node) = (yyvsp[(2) - (3)].node); 10441 /*% 10442 $$ = dispatch1(paren, $2); 10443 %*/ 10444 lex_state = EXPR_BEG; 10445 command_start = TRUE; 10446 } 10447 break; 10448 10449 case 528: 10450 10451 /* Line 1806 of yacc.c */ 10452 #line 4429 "parse.y" 10453 { 10454 (yyval.node) = (yyvsp[(1) - (2)].node); 10455 lex_state = EXPR_BEG; 10456 command_start = TRUE; 10457 } 10458 break; 10459 10460 case 529: 10461 10462 /* Line 1806 of yacc.c */ 10463 #line 4437 "parse.y" 10464 { 10465 (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id)); 10466 } 10467 break; 10468 10469 case 530: 10470 10471 /* Line 1806 of yacc.c */ 10472 #line 4441 "parse.y" 10473 { 10474 (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id)); 10475 } 10476 break; 10477 10478 case 531: 10479 10480 /* Line 1806 of yacc.c */ 10481 #line 4445 "parse.y" 10482 { 10483 (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id)); 10484 } 10485 break; 10486 10487 case 532: 10488 10489 /* Line 1806 of yacc.c */ 10490 #line 4449 "parse.y" 10491 { 10492 (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id)); 10493 } 10494 break; 10495 10496 case 533: 10497 10498 /* Line 1806 of yacc.c */ 10499 #line 4455 "parse.y" 10500 { 10501 (yyval.node) = (yyvsp[(2) - (2)].node); 10502 } 10503 break; 10504 10505 case 534: 10506 10507 /* Line 1806 of yacc.c */ 10508 #line 4459 "parse.y" 10509 { 10510 (yyval.node) = new_args_tail(Qnone, Qnone, Qnone); 10511 } 10512 break; 10513 10514 case 535: 10515 10516 /* Line 1806 of yacc.c */ 10517 #line 4465 "parse.y" 10518 { 10519 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node)); 10520 } 10521 break; 10522 10523 case 536: 10524 10525 /* Line 1806 of yacc.c */ 10526 #line 4469 "parse.y" 10527 { 10528 (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node)); 10529 } 10530 break; 10531 10532 case 537: 10533 10534 /* Line 1806 of yacc.c */ 10535 #line 4473 "parse.y" 10536 { 10537 (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node)); 10538 } 10539 break; 10540 10541 case 538: 10542 10543 /* Line 1806 of yacc.c */ 10544 #line 4477 "parse.y" 10545 { 10546 (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 10547 } 10548 break; 10549 10550 case 539: 10551 10552 /* Line 1806 of yacc.c */ 10553 #line 4481 "parse.y" 10554 { 10555 (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node)); 10556 } 10557 break; 10558 10559 case 540: 10560 10561 /* Line 1806 of yacc.c */ 10562 #line 4485 "parse.y" 10563 { 10564 (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 10565 } 10566 break; 10567 10568 case 541: 10569 10570 /* Line 1806 of yacc.c */ 10571 #line 4489 "parse.y" 10572 { 10573 (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node)); 10574 } 10575 break; 10576 10577 case 542: 10578 10579 /* Line 1806 of yacc.c */ 10580 #line 4493 "parse.y" 10581 { 10582 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node)); 10583 } 10584 break; 10585 10586 case 543: 10587 10588 /* Line 1806 of yacc.c */ 10589 #line 4497 "parse.y" 10590 { 10591 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node)); 10592 } 10593 break; 10594 10595 case 544: 10596 10597 /* Line 1806 of yacc.c */ 10598 #line 4501 "parse.y" 10599 { 10600 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node)); 10601 } 10602 break; 10603 10604 case 545: 10605 10606 /* Line 1806 of yacc.c */ 10607 #line 4505 "parse.y" 10608 { 10609 (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node)); 10610 } 10611 break; 10612 10613 case 546: 10614 10615 /* Line 1806 of yacc.c */ 10616 #line 4509 "parse.y" 10617 { 10618 (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node)); 10619 } 10620 break; 10621 10622 case 547: 10623 10624 /* Line 1806 of yacc.c */ 10625 #line 4513 "parse.y" 10626 { 10627 (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node)); 10628 } 10629 break; 10630 10631 case 548: 10632 10633 /* Line 1806 of yacc.c */ 10634 #line 4517 "parse.y" 10635 { 10636 (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node)); 10637 } 10638 break; 10639 10640 case 549: 10641 10642 /* Line 1806 of yacc.c */ 10643 #line 4521 "parse.y" 10644 { 10645 (yyval.node) = new_args_tail(Qnone, Qnone, Qnone); 10646 (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node)); 10647 } 10648 break; 10649 10650 case 550: 10651 10652 /* Line 1806 of yacc.c */ 10653 #line 4528 "parse.y" 10654 { 10655 /*%%%*/ 10656 yyerror("formal argument cannot be a constant"); 10657 (yyval.id) = 0; 10658 /*% 10659 $$ = dispatch1(param_error, $1); 10660 %*/ 10661 } 10662 break; 10663 10664 case 551: 10665 10666 /* Line 1806 of yacc.c */ 10667 #line 4537 "parse.y" 10668 { 10669 /*%%%*/ 10670 yyerror("formal argument cannot be an instance variable"); 10671 (yyval.id) = 0; 10672 /*% 10673 $$ = dispatch1(param_error, $1); 10674 %*/ 10675 } 10676 break; 10677 10678 case 552: 10679 10680 /* Line 1806 of yacc.c */ 10681 #line 4546 "parse.y" 10682 { 10683 /*%%%*/ 10684 yyerror("formal argument cannot be a global variable"); 10685 (yyval.id) = 0; 10686 /*% 10687 $$ = dispatch1(param_error, $1); 10688 %*/ 10689 } 10690 break; 10691 10692 case 553: 10693 10694 /* Line 1806 of yacc.c */ 10695 #line 4555 "parse.y" 10696 { 10697 /*%%%*/ 10698 yyerror("formal argument cannot be a class variable"); 10699 (yyval.id) = 0; 10700 /*% 10701 $$ = dispatch1(param_error, $1); 10702 %*/ 10703 } 10704 break; 10705 10706 case 555: 10707 10708 /* Line 1806 of yacc.c */ 10709 #line 4567 "parse.y" 10710 { 10711 formal_argument(get_id((yyvsp[(1) - (1)].id))); 10712 (yyval.id) = (yyvsp[(1) - (1)].id); 10713 } 10714 break; 10715 10716 case 556: 10717 10718 /* Line 1806 of yacc.c */ 10719 #line 4574 "parse.y" 10720 { 10721 arg_var(get_id((yyvsp[(1) - (1)].id))); 10722 /*%%%*/ 10723 (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1); 10724 /*% 10725 $$ = get_value($1); 10726 %*/ 10727 } 10728 break; 10729 10730 case 557: 10731 10732 /* Line 1806 of yacc.c */ 10733 #line 4583 "parse.y" 10734 { 10735 ID tid = internal_id(); 10736 arg_var(tid); 10737 /*%%%*/ 10738 if (dyna_in_block()) { 10739 (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid); 10740 } 10741 else { 10742 (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid); 10743 } 10744 (yyval.node) = NEW_ARGS_AUX(tid, 1); 10745 (yyval.node)->nd_next = (yyvsp[(2) - (3)].node); 10746 /*% 10747 $$ = dispatch1(mlhs_paren, $2); 10748 %*/ 10749 } 10750 break; 10751 10752 case 559: 10753 10754 /* Line 1806 of yacc.c */ 10755 #line 4609 "parse.y" 10756 { 10757 /*%%%*/ 10758 (yyval.node) = (yyvsp[(1) - (3)].node); 10759 (yyval.node)->nd_plen++; 10760 (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next); 10761 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node)); 10762 /*% 10763 $$ = rb_ary_push($1, $3); 10764 %*/ 10765 } 10766 break; 10767 10768 case 560: 10769 10770 /* Line 1806 of yacc.c */ 10771 #line 4622 "parse.y" 10772 { 10773 arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id)))); 10774 (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node)); 10775 /*%%%*/ 10776 (yyval.node) = NEW_KW_ARG(0, (yyval.node)); 10777 /*% 10778 $$ = rb_assoc_new($$, $2); 10779 %*/ 10780 } 10781 break; 10782 10783 case 561: 10784 10785 /* Line 1806 of yacc.c */ 10786 #line 4634 "parse.y" 10787 { 10788 arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id)))); 10789 (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node)); 10790 /*%%%*/ 10791 (yyval.node) = NEW_KW_ARG(0, (yyval.node)); 10792 /*% 10793 $$ = rb_assoc_new($$, $2); 10794 %*/ 10795 } 10796 break; 10797 10798 case 562: 10799 10800 /* Line 1806 of yacc.c */ 10801 #line 4646 "parse.y" 10802 { 10803 /*%%%*/ 10804 (yyval.node) = (yyvsp[(1) - (1)].node); 10805 /*% 10806 $$ = rb_ary_new3(1, $1); 10807 %*/ 10808 } 10809 break; 10810 10811 case 563: 10812 10813 /* Line 1806 of yacc.c */ 10814 #line 4654 "parse.y" 10815 { 10816 /*%%%*/ 10817 NODE *kws = (yyvsp[(1) - (3)].node); 10818 10819 while (kws->nd_next) { 10820 kws = kws->nd_next; 10821 } 10822 kws->nd_next = (yyvsp[(3) - (3)].node); 10823 (yyval.node) = (yyvsp[(1) - (3)].node); 10824 /*% 10825 $$ = rb_ary_push($1, $3); 10826 %*/ 10827 } 10828 break; 10829 10830 case 564: 10831 10832 /* Line 1806 of yacc.c */ 10833 #line 4671 "parse.y" 10834 { 10835 /*%%%*/ 10836 (yyval.node) = (yyvsp[(1) - (1)].node); 10837 /*% 10838 $$ = rb_ary_new3(1, $1); 10839 %*/ 10840 } 10841 break; 10842 10843 case 565: 10844 10845 /* Line 1806 of yacc.c */ 10846 #line 4679 "parse.y" 10847 { 10848 /*%%%*/ 10849 NODE *kws = (yyvsp[(1) - (3)].node); 10850 10851 while (kws->nd_next) { 10852 kws = kws->nd_next; 10853 } 10854 kws->nd_next = (yyvsp[(3) - (3)].node); 10855 (yyval.node) = (yyvsp[(1) - (3)].node); 10856 /*% 10857 $$ = rb_ary_push($1, $3); 10858 %*/ 10859 } 10860 break; 10861 10862 case 568: 10863 10864 /* Line 1806 of yacc.c */ 10865 #line 4699 "parse.y" 10866 { 10867 shadowing_lvar(get_id((yyvsp[(2) - (2)].id))); 10868 (yyval.id) = (yyvsp[(2) - (2)].id); 10869 } 10870 break; 10871 10872 case 569: 10873 10874 /* Line 1806 of yacc.c */ 10875 #line 4704 "parse.y" 10876 { 10877 (yyval.id) = internal_id(); 10878 } 10879 break; 10880 10881 case 570: 10882 10883 /* Line 1806 of yacc.c */ 10884 #line 4710 "parse.y" 10885 { 10886 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id)))); 10887 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node)); 10888 /*%%%*/ 10889 (yyval.node) = NEW_OPT_ARG(0, (yyval.node)); 10890 /*% 10891 $$ = rb_assoc_new($$, $3); 10892 %*/ 10893 } 10894 break; 10895 10896 case 571: 10897 10898 /* Line 1806 of yacc.c */ 10899 #line 4722 "parse.y" 10900 { 10901 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id)))); 10902 (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node)); 10903 /*%%%*/ 10904 (yyval.node) = NEW_OPT_ARG(0, (yyval.node)); 10905 /*% 10906 $$ = rb_assoc_new($$, $3); 10907 %*/ 10908 } 10909 break; 10910 10911 case 572: 10912 10913 /* Line 1806 of yacc.c */ 10914 #line 4734 "parse.y" 10915 { 10916 /*%%%*/ 10917 (yyval.node) = (yyvsp[(1) - (1)].node); 10918 /*% 10919 $$ = rb_ary_new3(1, $1); 10920 %*/ 10921 } 10922 break; 10923 10924 case 573: 10925 10926 /* Line 1806 of yacc.c */ 10927 #line 4742 "parse.y" 10928 { 10929 /*%%%*/ 10930 NODE *opts = (yyvsp[(1) - (3)].node); 10931 10932 while (opts->nd_next) { 10933 opts = opts->nd_next; 10934 } 10935 opts->nd_next = (yyvsp[(3) - (3)].node); 10936 (yyval.node) = (yyvsp[(1) - (3)].node); 10937 /*% 10938 $$ = rb_ary_push($1, $3); 10939 %*/ 10940 } 10941 break; 10942 10943 case 574: 10944 10945 /* Line 1806 of yacc.c */ 10946 #line 4758 "parse.y" 10947 { 10948 /*%%%*/ 10949 (yyval.node) = (yyvsp[(1) - (1)].node); 10950 /*% 10951 $$ = rb_ary_new3(1, $1); 10952 %*/ 10953 } 10954 break; 10955 10956 case 575: 10957 10958 /* Line 1806 of yacc.c */ 10959 #line 4766 "parse.y" 10960 { 10961 /*%%%*/ 10962 NODE *opts = (yyvsp[(1) - (3)].node); 10963 10964 while (opts->nd_next) { 10965 opts = opts->nd_next; 10966 } 10967 opts->nd_next = (yyvsp[(3) - (3)].node); 10968 (yyval.node) = (yyvsp[(1) - (3)].node); 10969 /*% 10970 $$ = rb_ary_push($1, $3); 10971 %*/ 10972 } 10973 break; 10974 10975 case 578: 10976 10977 /* Line 1806 of yacc.c */ 10978 #line 4786 "parse.y" 10979 { 10980 /*%%%*/ 10981 if (!is_local_id((yyvsp[(2) - (2)].id))) 10982 yyerror("rest argument must be local variable"); 10983 /*% %*/ 10984 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id)))); 10985 /*%%%*/ 10986 (yyval.id) = (yyvsp[(2) - (2)].id); 10987 /*% 10988 $$ = dispatch1(rest_param, $2); 10989 %*/ 10990 } 10991 break; 10992 10993 case 579: 10994 10995 /* Line 1806 of yacc.c */ 10996 #line 4799 "parse.y" 10997 { 10998 /*%%%*/ 10999 (yyval.id) = internal_id(); 11000 arg_var((yyval.id)); 11001 /*% 11002 $$ = dispatch1(rest_param, Qnil); 11003 %*/ 11004 } 11005 break; 11006 11007 case 582: 11008 11009 /* Line 1806 of yacc.c */ 11010 #line 4814 "parse.y" 11011 { 11012 /*%%%*/ 11013 if (!is_local_id((yyvsp[(2) - (2)].id))) 11014 yyerror("block argument must be local variable"); 11015 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id))) 11016 yyerror("duplicated block argument name"); 11017 /*% %*/ 11018 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id)))); 11019 /*%%%*/ 11020 (yyval.id) = (yyvsp[(2) - (2)].id); 11021 /*% 11022 $$ = dispatch1(blockarg, $2); 11023 %*/ 11024 } 11025 break; 11026 11027 case 583: 11028 11029 /* Line 1806 of yacc.c */ 11030 #line 4831 "parse.y" 11031 { 11032 (yyval.id) = (yyvsp[(2) - (2)].id); 11033 } 11034 break; 11035 11036 case 584: 11037 11038 /* Line 1806 of yacc.c */ 11039 #line 4835 "parse.y" 11040 { 11041 /*%%%*/ 11042 (yyval.id) = 0; 11043 /*% 11044 $$ = Qundef; 11045 %*/ 11046 } 11047 break; 11048 11049 case 585: 11050 11051 /* Line 1806 of yacc.c */ 11052 #line 4845 "parse.y" 11053 { 11054 /*%%%*/ 11055 value_expr((yyvsp[(1) - (1)].node)); 11056 (yyval.node) = (yyvsp[(1) - (1)].node); 11057 if (!(yyval.node)) (yyval.node) = NEW_NIL(); 11058 /*% 11059 $$ = $1; 11060 %*/ 11061 } 11062 break; 11063 11064 case 586: 11065 11066 /* Line 1806 of yacc.c */ 11067 #line 4854 "parse.y" 11068 {lex_state = EXPR_BEG;} 11069 break; 11070 11071 case 587: 11072 11073 /* Line 1806 of yacc.c */ 11074 #line 4855 "parse.y" 11075 { 11076 /*%%%*/ 11077 if ((yyvsp[(3) - (4)].node) == 0) { 11078 yyerror("can't define singleton method for ()."); 11079 } 11080 else { 11081 switch (nd_type((yyvsp[(3) - (4)].node))) { 11082 case NODE_STR: 11083 case NODE_DSTR: 11084 case NODE_XSTR: 11085 case NODE_DXSTR: 11086 case NODE_DREGX: 11087 case NODE_LIT: 11088 case NODE_ARRAY: 11089 case NODE_ZARRAY: 11090 yyerror("can't define singleton method for literals"); 11091 default: 11092 value_expr((yyvsp[(3) - (4)].node)); 11093 break; 11094 } 11095 } 11096 (yyval.node) = (yyvsp[(3) - (4)].node); 11097 /*% 11098 $$ = dispatch1(paren, $3); 11099 %*/ 11100 } 11101 break; 11102 11103 case 589: 11104 11105 /* Line 1806 of yacc.c */ 11106 #line 4885 "parse.y" 11107 { 11108 /*%%%*/ 11109 (yyval.node) = (yyvsp[(1) - (2)].node); 11110 /*% 11111 $$ = dispatch1(assoclist_from_args, $1); 11112 %*/ 11113 } 11114 break; 11115 11116 case 591: 11117 11118 /* Line 1806 of yacc.c */ 11119 #line 4902 "parse.y" 11120 { 11121 /*%%%*/ 11122 (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node)); 11123 /*% 11124 $$ = rb_ary_push($1, $3); 11125 %*/ 11126 } 11127 break; 11128 11129 case 592: 11130 11131 /* Line 1806 of yacc.c */ 11132 #line 4912 "parse.y" 11133 { 11134 /*%%%*/ 11135 (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node)); 11136 /*% 11137 $$ = dispatch2(assoc_new, $1, $3); 11138 %*/ 11139 } 11140 break; 11141 11142 case 593: 11143 11144 /* Line 1806 of yacc.c */ 11145 #line 4920 "parse.y" 11146 { 11147 /*%%%*/ 11148 (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node)); 11149 /*% 11150 $$ = dispatch2(assoc_new, $1, $2); 11151 %*/ 11152 } 11153 break; 11154 11155 case 594: 11156 11157 /* Line 1806 of yacc.c */ 11158 #line 4928 "parse.y" 11159 { 11160 /*%%%*/ 11161 (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node)); 11162 /*% 11163 $$ = dispatch1(assoc_splat, $2); 11164 %*/ 11165 } 11166 break; 11167 11168 case 616: 11169 11170 /* Line 1806 of yacc.c */ 11171 #line 4986 "parse.y" 11172 {yyerrok;} 11173 break; 11174 11175 case 619: 11176 11177 /* Line 1806 of yacc.c */ 11178 #line 4991 "parse.y" 11179 {yyerrok;} 11180 break; 11181 11182 case 620: 11183 11184 /* Line 1806 of yacc.c */ 11185 #line 4995 "parse.y" 11186 { 11187 /*%%%*/ 11188 (yyval.node) = 0; 11189 /*% 11190 $$ = Qundef; 11191 %*/ 11192 } 11193 break; 11194 11195 11196 11197 /* Line 1806 of yacc.c */ 11198 #line 11197 "parse.c" 11199 default: break; 11200 } 11201 /* User semantic actions sometimes alter yychar, and that requires 11202 that yytoken be updated with the new translation. We take the 11203 approach of translating immediately before every use of yytoken. 11204 One alternative is translating here after every semantic action, 11205 but that translation would be missed if the semantic action invokes 11206 YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or 11207 if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an 11208 incorrect destructor might then be invoked immediately. In the 11209 case of YYERROR or YYBACKUP, subsequent parser actions might lead 11210 to an incorrect destructor call or verbose syntax error message 11211 before the lookahead is translated. */ 11212 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 11213 11214 YYPOPSTACK (yylen); 11215 yylen = 0; 11216 YY_STACK_PRINT (yyss, yyssp); 11217 11218 *++yyvsp = yyval; 11219 11220 /* Now `shift' the result of the reduction. Determine what state 11221 that goes to, based on the state we popped back to and the rule 11222 number reduced by. */ 11223 11224 yyn = yyr1[yyn]; 11225 11226 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 11227 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 11228 yystate = yytable[yystate]; 11229 else 11230 yystate = yydefgoto[yyn - YYNTOKENS]; 11231 11232 goto yynewstate; 11233 11234 11235 /*------------------------------------. 11236 | yyerrlab -- here on detecting error | 11237 `------------------------------------*/ 11238 yyerrlab: 11239 /* Make sure we have latest lookahead translation. See comments at 11240 user semantic actions for why this is necessary. */ 11241 yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar); 11242 11243 /* If not already recovering from an error, report this error. */ 11244 if (!yyerrstatus) 11245 { 11246 ++yynerrs; 11247 #if ! YYERROR_VERBOSE 11248 parser_yyerror (parser, YY_("syntax error")); 11249 #else 11250 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \ 11251 yyssp, yytoken) 11252 { 11253 char const *yymsgp = YY_("syntax error"); 11254 int yysyntax_error_status; 11255 yysyntax_error_status = YYSYNTAX_ERROR; 11256 if (yysyntax_error_status == 0) 11257 yymsgp = yymsg; 11258 else if (yysyntax_error_status == 1) 11259 { 11260 if (yymsg != yymsgbuf) 11261 YYSTACK_FREE (yymsg); 11262 yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc); 11263 if (!yymsg) 11264 { 11265 yymsg = yymsgbuf; 11266 yymsg_alloc = sizeof yymsgbuf; 11267 yysyntax_error_status = 2; 11268 } 11269 else 11270 { 11271 yysyntax_error_status = YYSYNTAX_ERROR; 11272 yymsgp = yymsg; 11273 } 11274 } 11275 parser_yyerror (parser, yymsgp); 11276 if (yysyntax_error_status == 2) 11277 goto yyexhaustedlab; 11278 } 11279 # undef YYSYNTAX_ERROR 11280 #endif 11281 } 11282 11283 11284 11285 if (yyerrstatus == 3) 11286 { 11287 /* If just tried and failed to reuse lookahead token after an 11288 error, discard it. */ 11289 11290 if (yychar <= YYEOF) 11291 { 11292 /* Return failure if at end of input. */ 11293 if (yychar == YYEOF) 11294 YYABORT; 11295 } 11296 else 11297 { 11298 yydestruct ("Error: discarding", 11299 yytoken, &yylval, parser); 11300 yychar = YYEMPTY; 11301 } 11302 } 11303 11304 /* Else will try to reuse lookahead token after shifting the error 11305 token. */ 11306 goto yyerrlab1; 11307 11308 11309 /*---------------------------------------------------. 11310 | yyerrorlab -- error raised explicitly by YYERROR. | 11311 `---------------------------------------------------*/ 11312 yyerrorlab: 11313 11314 /* Pacify compilers like GCC when the user code never invokes 11315 YYERROR and the label yyerrorlab therefore never appears in user 11316 code. */ 11317 if (/*CONSTCOND*/ 0) 11318 goto yyerrorlab; 11319 11320 /* Do not reclaim the symbols of the rule which action triggered 11321 this YYERROR. */ 11322 YYPOPSTACK (yylen); 11323 yylen = 0; 11324 YY_STACK_PRINT (yyss, yyssp); 11325 yystate = *yyssp; 11326 goto yyerrlab1; 11327 11328 11329 /*-------------------------------------------------------------. 11330 | yyerrlab1 -- common code for both syntax error and YYERROR. | 11331 `-------------------------------------------------------------*/ 11332 yyerrlab1: 11333 yyerrstatus = 3; /* Each real token shifted decrements this. */ 11334 11335 for (;;) 11336 { 11337 yyn = yypact[yystate]; 11338 if (!yypact_value_is_default (yyn)) 11339 { 11340 yyn += YYTERROR; 11341 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 11342 { 11343 yyn = yytable[yyn]; 11344 if (0 < yyn) 11345 break; 11346 } 11347 } 11348 11349 /* Pop the current state because it cannot handle the error token. */ 11350 if (yyssp == yyss) 11351 YYABORT; 11352 11353 11354 yydestruct ("Error: popping", 11355 yystos[yystate], yyvsp, parser); 11356 YYPOPSTACK (1); 11357 yystate = *yyssp; 11358 YY_STACK_PRINT (yyss, yyssp); 11359 } 11360 11361 *++yyvsp = yylval; 11362 11363 11364 /* Shift the error token. */ 11365 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 11366 11367 yystate = yyn; 11368 goto yynewstate; 11369 11370 11371 /*-------------------------------------. 11372 | yyacceptlab -- YYACCEPT comes here. | 11373 `-------------------------------------*/ 11374 yyacceptlab: 11375 yyresult = 0; 11376 goto yyreturn; 11377 11378 /*-----------------------------------. 11379 | yyabortlab -- YYABORT comes here. | 11380 `-----------------------------------*/ 11381 yyabortlab: 11382 yyresult = 1; 11383 goto yyreturn; 11384 11385 #if !defined(yyoverflow) || YYERROR_VERBOSE 11386 /*-------------------------------------------------. 11387 | yyexhaustedlab -- memory exhaustion comes here. | 11388 `-------------------------------------------------*/ 11389 yyexhaustedlab: 11390 parser_yyerror (parser, YY_("memory exhausted")); 11391 yyresult = 2; 11392 /* Fall through. */ 11393 #endif 11394 11395 yyreturn: 11396 if (yychar != YYEMPTY) 11397 { 11398 /* Make sure we have latest lookahead translation. See comments at 11399 user semantic actions for why this is necessary. */ 11400 yytoken = YYTRANSLATE (yychar); 11401 yydestruct ("Cleanup: discarding lookahead", 11402 yytoken, &yylval, parser); 11403 } 11404 /* Do not reclaim the symbols of the rule which action triggered 11405 this YYABORT or YYACCEPT. */ 11406 YYPOPSTACK (yylen); 11407 YY_STACK_PRINT (yyss, yyssp); 11408 while (yyssp != yyss) 11409 { 11410 yydestruct ("Cleanup: popping", 11411 yystos[*yyssp], yyvsp, parser); 11412 YYPOPSTACK (1); 11413 } 11414 #ifndef yyoverflow 11415 if (yyss != yyssa) 11416 YYSTACK_FREE (yyss); 11417 #endif 11418 #if YYERROR_VERBOSE 11419 if (yymsg != yymsgbuf) 11420 YYSTACK_FREE (yymsg); 11421 #endif 11422 /* Make sure YYID is used. */ 11423 return YYID (yyresult); 11424 } 11425 11426 11427 11428 /* Line 2067 of yacc.c */ 11429 #line 5003 "parse.y" 11430 11431 # undef parser 11432 # undef yylex 11433 # undef yylval 11434 # define yylval (*((YYSTYPE*)(parser->parser_yylval))) 11435 11436 static int parser_regx_options(struct parser_params*); 11437 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**); 11438 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc); 11439 static int parser_parse_string(struct parser_params*,NODE*); 11440 static int parser_here_document(struct parser_params*,NODE*); 11441 11442 11443 # define nextc() parser_nextc(parser) 11444 # define pushback(c) parser_pushback(parser, (c)) 11445 # define newtok() parser_newtok(parser) 11446 # define tokspace(n) parser_tokspace(parser, (n)) 11447 # define tokadd(c) parser_tokadd(parser, (c)) 11448 # define tok_hex(numlen) parser_tok_hex(parser, (numlen)) 11449 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e)) 11450 # define tokadd_escape(e) parser_tokadd_escape(parser, (e)) 11451 # define regx_options() parser_regx_options(parser) 11452 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e)) 11453 # define parse_string(n) parser_parse_string(parser,(n)) 11454 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc)) 11455 # define here_document(n) parser_here_document(parser,(n)) 11456 # define heredoc_identifier() parser_heredoc_identifier(parser) 11457 # define heredoc_restore(n) parser_heredoc_restore(parser,(n)) 11458 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i)) 11459 11460 #ifndef RIPPER 11461 # define set_yylval_str(x) (yylval.node = NEW_STR(x)) 11462 # define set_yylval_num(x) (yylval.num = (x)) 11463 # define set_yylval_id(x) (yylval.id = (x)) 11464 # define set_yylval_name(x) (yylval.id = (x)) 11465 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x)) 11466 # define set_yylval_node(x) (yylval.node = (x)) 11467 # define yylval_id() (yylval.id) 11468 #else 11469 static inline VALUE 11470 ripper_yylval_id(ID x) 11471 { 11472 return (VALUE)NEW_LASGN(x, ID2SYM(x)); 11473 } 11474 # define set_yylval_str(x) (void)(x) 11475 # define set_yylval_num(x) (void)(x) 11476 # define set_yylval_id(x) (void)(x) 11477 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x)) 11478 # define set_yylval_literal(x) (void)(x) 11479 # define set_yylval_node(x) (void)(x) 11480 # define yylval_id() yylval.id 11481 #endif 11482 11483 #ifndef RIPPER 11484 #define ripper_flush(p) (void)(p) 11485 #else 11486 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p) 11487 11488 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)) 11489 11490 static int 11491 ripper_has_scan_event(struct parser_params *parser) 11492 { 11493 11494 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp"); 11495 return lex_p > parser->tokp; 11496 } 11497 11498 static VALUE 11499 ripper_scan_event_val(struct parser_params *parser, int t) 11500 { 11501 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp); 11502 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str); 11503 ripper_flush(parser); 11504 return rval; 11505 } 11506 11507 static void 11508 ripper_dispatch_scan_event(struct parser_params *parser, int t) 11509 { 11510 if (!ripper_has_scan_event(parser)) return; 11511 yylval_rval = ripper_scan_event_val(parser, t); 11512 } 11513 11514 static void 11515 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t) 11516 { 11517 if (!ripper_has_scan_event(parser)) return; 11518 (void)ripper_scan_event_val(parser, t); 11519 } 11520 11521 static void 11522 ripper_dispatch_delayed_token(struct parser_params *parser, int t) 11523 { 11524 int saved_line = ruby_sourceline; 11525 const char *saved_tokp = parser->tokp; 11526 11527 ruby_sourceline = parser->delayed_line; 11528 parser->tokp = lex_pbeg + parser->delayed_col; 11529 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed); 11530 parser->delayed = Qnil; 11531 ruby_sourceline = saved_line; 11532 parser->tokp = saved_tokp; 11533 } 11534 #endif /* RIPPER */ 11535 11536 #include "ruby/regex.h" 11537 #include "ruby/util.h" 11538 11539 /* We remove any previous definition of `SIGN_EXTEND_CHAR', 11540 since ours (we hope) works properly with all combinations of 11541 machines, compilers, `char' and `unsigned char' argument types. 11542 (Per Bothner suggested the basic approach.) */ 11543 #undef SIGN_EXTEND_CHAR 11544 #if __STDC__ 11545 # define SIGN_EXTEND_CHAR(c) ((signed char)(c)) 11546 #else /* not __STDC__ */ 11547 /* As in Harbison and Steele. */ 11548 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128) 11549 #endif 11550 11551 #define parser_encoding_name() (current_enc->name) 11552 #define parser_mbclen() mbclen((lex_p-1),lex_pend,current_enc) 11553 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc) 11554 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p))) 11555 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc)) 11556 11557 #define parser_isascii() ISASCII(*(lex_p-1)) 11558 11559 #ifndef RIPPER 11560 static int 11561 token_info_get_column(struct parser_params *parser, const char *token) 11562 { 11563 int column = 1; 11564 const char *p, *pend = lex_p - strlen(token); 11565 for (p = lex_pbeg; p < pend; p++) { 11566 if (*p == '\t') { 11567 column = (((column - 1) / 8) + 1) * 8; 11568 } 11569 column++; 11570 } 11571 return column; 11572 } 11573 11574 static int 11575 token_info_has_nonspaces(struct parser_params *parser, const char *token) 11576 { 11577 const char *p, *pend = lex_p - strlen(token); 11578 for (p = lex_pbeg; p < pend; p++) { 11579 if (*p != ' ' && *p != '\t') { 11580 return 1; 11581 } 11582 } 11583 return 0; 11584 } 11585 11586 #undef token_info_push 11587 static void 11588 token_info_push(struct parser_params *parser, const char *token) 11589 { 11590 token_info *ptinfo; 11591 11592 if (!parser->parser_token_info_enabled) return; 11593 ptinfo = ALLOC(token_info); 11594 ptinfo->token = token; 11595 ptinfo->linenum = ruby_sourceline; 11596 ptinfo->column = token_info_get_column(parser, token); 11597 ptinfo->nonspc = token_info_has_nonspaces(parser, token); 11598 ptinfo->next = parser->parser_token_info; 11599 11600 parser->parser_token_info = ptinfo; 11601 } 11602 11603 #undef token_info_pop 11604 static void 11605 token_info_pop(struct parser_params *parser, const char *token) 11606 { 11607 int linenum; 11608 token_info *ptinfo = parser->parser_token_info; 11609 11610 if (!ptinfo) return; 11611 parser->parser_token_info = ptinfo->next; 11612 if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */ 11613 goto finish; 11614 } 11615 linenum = ruby_sourceline; 11616 if (linenum == ptinfo->linenum) { /* SKIP */ 11617 goto finish; 11618 } 11619 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */ 11620 goto finish; 11621 } 11622 if (parser->parser_token_info_enabled) { 11623 rb_compile_warn(ruby_sourcefile, linenum, 11624 "mismatched indentations at '%s' with '%s' at %d", 11625 token, ptinfo->token, ptinfo->linenum); 11626 } 11627 11628 finish: 11629 xfree(ptinfo); 11630 } 11631 #endif /* RIPPER */ 11632 11633 static int 11634 parser_yyerror(struct parser_params *parser, const char *msg) 11635 { 11636 #ifndef RIPPER 11637 const int max_line_margin = 30; 11638 const char *p, *pe; 11639 char *buf; 11640 long len; 11641 int i; 11642 11643 compile_error(PARSER_ARG "%s", msg); 11644 p = lex_p; 11645 while (lex_pbeg <= p) { 11646 if (*p == '\n') break; 11647 p--; 11648 } 11649 p++; 11650 11651 pe = lex_p; 11652 while (pe < lex_pend) { 11653 if (*pe == '\n') break; 11654 pe++; 11655 } 11656 11657 len = pe - p; 11658 if (len > 4) { 11659 char *p2; 11660 const char *pre = "", *post = ""; 11661 11662 if (len > max_line_margin * 2 + 10) { 11663 if (lex_p - p > max_line_margin) { 11664 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline)); 11665 pre = "..."; 11666 } 11667 if (pe - lex_p > max_line_margin) { 11668 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline)); 11669 post = "..."; 11670 } 11671 len = pe - p; 11672 } 11673 buf = ALLOCA_N(char, len+2); 11674 MEMCPY(buf, p, char, len); 11675 buf[len] = '\0'; 11676 rb_compile_error_with_enc(NULL, 0, (void *)current_enc, "%s%s%s", pre, buf, post); 11677 11678 i = (int)(lex_p - p); 11679 p2 = buf; pe = buf + len; 11680 11681 while (p2 < pe) { 11682 if (*p2 != '\t') *p2 = ' '; 11683 p2++; 11684 } 11685 buf[i] = '^'; 11686 buf[i+1] = '\0'; 11687 rb_compile_error_append("%s%s", pre, buf); 11688 } 11689 #else 11690 dispatch1(parse_error, STR_NEW2(msg)); 11691 #endif /* !RIPPER */ 11692 return 0; 11693 } 11694 11695 static void parser_prepare(struct parser_params *parser); 11696 11697 #ifndef RIPPER 11698 static VALUE 11699 debug_lines(VALUE fname) 11700 { 11701 ID script_lines; 11702 CONST_ID(script_lines, "SCRIPT_LINES__"); 11703 if (rb_const_defined_at(rb_cObject, script_lines)) { 11704 VALUE hash = rb_const_get_at(rb_cObject, script_lines); 11705 if (RB_TYPE_P(hash, T_HASH)) { 11706 VALUE lines = rb_ary_new(); 11707 rb_hash_aset(hash, fname, lines); 11708 return lines; 11709 } 11710 } 11711 return 0; 11712 } 11713 11714 static VALUE 11715 coverage(VALUE fname, int n) 11716 { 11717 VALUE coverages = rb_get_coverages(); 11718 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) { 11719 VALUE lines = rb_ary_new2(n); 11720 int i; 11721 RBASIC(lines)->klass = 0; 11722 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil; 11723 RARRAY(lines)->as.heap.len = n; 11724 rb_hash_aset(coverages, fname, lines); 11725 return lines; 11726 } 11727 return 0; 11728 } 11729 11730 static int 11731 e_option_supplied(struct parser_params *parser) 11732 { 11733 return strcmp(ruby_sourcefile, "-e") == 0; 11734 } 11735 11736 static VALUE 11737 yycompile0(VALUE arg) 11738 { 11739 int n; 11740 NODE *tree; 11741 struct parser_params *parser = (struct parser_params *)arg; 11742 11743 if (!compile_for_eval && rb_safe_level() == 0) { 11744 ruby_debug_lines = debug_lines(ruby_sourcefile_string); 11745 if (ruby_debug_lines && ruby_sourceline > 0) { 11746 VALUE str = STR_NEW0(); 11747 n = ruby_sourceline; 11748 do { 11749 rb_ary_push(ruby_debug_lines, str); 11750 } while (--n); 11751 } 11752 11753 if (!e_option_supplied(parser)) { 11754 ruby_coverage = coverage(ruby_sourcefile_string, ruby_sourceline); 11755 } 11756 } 11757 11758 parser_prepare(parser); 11759 deferred_nodes = 0; 11760 #ifndef RIPPER 11761 parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose); 11762 #endif 11763 #ifndef RIPPER 11764 if (RUBY_DTRACE_PARSE_BEGIN_ENABLED()) { 11765 RUBY_DTRACE_PARSE_BEGIN(parser->parser_ruby_sourcefile, 11766 parser->parser_ruby_sourceline); 11767 } 11768 #endif 11769 n = yyparse((void*)parser); 11770 #ifndef RIPPER 11771 if (RUBY_DTRACE_PARSE_END_ENABLED()) { 11772 RUBY_DTRACE_PARSE_END(parser->parser_ruby_sourcefile, 11773 parser->parser_ruby_sourceline); 11774 } 11775 #endif 11776 ruby_debug_lines = 0; 11777 ruby_coverage = 0; 11778 compile_for_eval = 0; 11779 11780 lex_strterm = 0; 11781 lex_p = lex_pbeg = lex_pend = 0; 11782 lex_lastline = lex_nextline = 0; 11783 if (parser->nerr) { 11784 return 0; 11785 } 11786 tree = ruby_eval_tree; 11787 if (!tree) { 11788 tree = NEW_NIL(); 11789 } 11790 else if (ruby_eval_tree_begin) { 11791 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body); 11792 } 11793 return (VALUE)tree; 11794 } 11795 11796 static NODE* 11797 yycompile(struct parser_params *parser, VALUE fname, int line) 11798 { 11799 ruby_sourcefile_string = rb_str_new_frozen(fname); 11800 ruby_sourcefile = RSTRING_PTR(fname); 11801 ruby_sourceline = line - 1; 11802 return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser); 11803 } 11804 #endif /* !RIPPER */ 11805 11806 static rb_encoding * 11807 must_be_ascii_compatible(VALUE s) 11808 { 11809 rb_encoding *enc = rb_enc_get(s); 11810 if (!rb_enc_asciicompat(enc)) { 11811 rb_raise(rb_eArgError, "invalid source encoding"); 11812 } 11813 return enc; 11814 } 11815 11816 static VALUE 11817 lex_get_str(struct parser_params *parser, VALUE s) 11818 { 11819 char *beg, *end, *pend; 11820 rb_encoding *enc = must_be_ascii_compatible(s); 11821 11822 beg = RSTRING_PTR(s); 11823 if (lex_gets_ptr) { 11824 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil; 11825 beg += lex_gets_ptr; 11826 } 11827 pend = RSTRING_PTR(s) + RSTRING_LEN(s); 11828 end = beg; 11829 while (end < pend) { 11830 if (*end++ == '\n') break; 11831 } 11832 lex_gets_ptr = end - RSTRING_PTR(s); 11833 return rb_enc_str_new(beg, end - beg, enc); 11834 } 11835 11836 static VALUE 11837 lex_getline(struct parser_params *parser) 11838 { 11839 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input); 11840 if (NIL_P(line)) return line; 11841 must_be_ascii_compatible(line); 11842 #ifndef RIPPER 11843 if (ruby_debug_lines) { 11844 rb_enc_associate(line, current_enc); 11845 rb_ary_push(ruby_debug_lines, line); 11846 } 11847 if (ruby_coverage) { 11848 rb_ary_push(ruby_coverage, Qnil); 11849 } 11850 #endif 11851 return line; 11852 } 11853 11854 #ifdef RIPPER 11855 static rb_data_type_t parser_data_type; 11856 #else 11857 static const rb_data_type_t parser_data_type; 11858 11859 static NODE* 11860 parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line) 11861 { 11862 struct parser_params *parser; 11863 NODE *node; 11864 11865 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 11866 lex_gets = lex_get_str; 11867 lex_gets_ptr = 0; 11868 lex_input = s; 11869 lex_pbeg = lex_p = lex_pend = 0; 11870 compile_for_eval = rb_parse_in_eval(); 11871 11872 node = yycompile(parser, fname, line); 11873 RB_GC_GUARD(vparser); /* prohibit tail call optimization */ 11874 11875 return node; 11876 } 11877 11878 NODE* 11879 rb_compile_string(const char *f, VALUE s, int line) 11880 { 11881 must_be_ascii_compatible(s); 11882 return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), s, line); 11883 } 11884 11885 NODE* 11886 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 11887 { 11888 return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line); 11889 } 11890 11891 NODE* 11892 rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line) 11893 { 11894 must_be_ascii_compatible(s); 11895 return parser_compile_string(vparser, f, s, line); 11896 } 11897 11898 NODE* 11899 rb_compile_cstr(const char *f, const char *s, int len, int line) 11900 { 11901 VALUE str = rb_str_new(s, len); 11902 return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), str, line); 11903 } 11904 11905 NODE* 11906 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line) 11907 { 11908 VALUE str = rb_str_new(s, len); 11909 return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line); 11910 } 11911 11912 static VALUE 11913 lex_io_gets(struct parser_params *parser, VALUE io) 11914 { 11915 return rb_io_gets(io); 11916 } 11917 11918 NODE* 11919 rb_compile_file(const char *f, VALUE file, int start) 11920 { 11921 VALUE volatile vparser = rb_parser_new(); 11922 11923 return rb_parser_compile_file(vparser, f, file, start); 11924 } 11925 11926 NODE* 11927 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start) 11928 { 11929 return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start); 11930 } 11931 11932 NODE* 11933 rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start) 11934 { 11935 struct parser_params *parser; 11936 NODE *node; 11937 11938 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 11939 lex_gets = lex_io_gets; 11940 lex_input = file; 11941 lex_pbeg = lex_p = lex_pend = 0; 11942 compile_for_eval = rb_parse_in_eval(); 11943 11944 node = yycompile(parser, fname, start); 11945 RB_GC_GUARD(vparser); /* prohibit tail call optimization */ 11946 11947 return node; 11948 } 11949 #endif /* !RIPPER */ 11950 11951 #define STR_FUNC_ESCAPE 0x01 11952 #define STR_FUNC_EXPAND 0x02 11953 #define STR_FUNC_REGEXP 0x04 11954 #define STR_FUNC_QWORDS 0x08 11955 #define STR_FUNC_SYMBOL 0x10 11956 #define STR_FUNC_INDENT 0x20 11957 11958 enum string_type { 11959 str_squote = (0), 11960 str_dquote = (STR_FUNC_EXPAND), 11961 str_xquote = (STR_FUNC_EXPAND), 11962 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND), 11963 str_sword = (STR_FUNC_QWORDS), 11964 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND), 11965 str_ssym = (STR_FUNC_SYMBOL), 11966 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND) 11967 }; 11968 11969 static VALUE 11970 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0) 11971 { 11972 VALUE str; 11973 11974 str = rb_enc_str_new(p, n, enc); 11975 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { 11976 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 11977 } 11978 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) { 11979 rb_enc_associate(str, rb_ascii8bit_encoding()); 11980 } 11981 } 11982 11983 return str; 11984 } 11985 11986 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend) 11987 #define lex_eol_p() (lex_p >= lex_pend) 11988 #define peek(c) peek_n((c), 0) 11989 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n]) 11990 11991 static inline int 11992 parser_nextc(struct parser_params *parser) 11993 { 11994 int c; 11995 11996 if (lex_p == lex_pend) { 11997 VALUE v = lex_nextline; 11998 lex_nextline = 0; 11999 if (!v) { 12000 if (parser->eofp) 12001 return -1; 12002 12003 if (!lex_input || NIL_P(v = lex_getline(parser))) { 12004 parser->eofp = Qtrue; 12005 lex_goto_eol(parser); 12006 return -1; 12007 } 12008 } 12009 { 12010 #ifdef RIPPER 12011 if (parser->tokp < lex_pend) { 12012 if (NIL_P(parser->delayed)) { 12013 parser->delayed = rb_str_buf_new(1024); 12014 rb_enc_associate(parser->delayed, current_enc); 12015 rb_str_buf_cat(parser->delayed, 12016 parser->tokp, lex_pend - parser->tokp); 12017 parser->delayed_line = ruby_sourceline; 12018 parser->delayed_col = (int)(parser->tokp - lex_pbeg); 12019 } 12020 else { 12021 rb_str_buf_cat(parser->delayed, 12022 parser->tokp, lex_pend - parser->tokp); 12023 } 12024 } 12025 #endif 12026 if (heredoc_end > 0) { 12027 ruby_sourceline = heredoc_end; 12028 heredoc_end = 0; 12029 } 12030 ruby_sourceline++; 12031 parser->line_count++; 12032 lex_pbeg = lex_p = RSTRING_PTR(v); 12033 lex_pend = lex_p + RSTRING_LEN(v); 12034 ripper_flush(parser); 12035 lex_lastline = v; 12036 } 12037 } 12038 c = (unsigned char)*lex_p++; 12039 if (c == '\r' && peek('\n')) { 12040 lex_p++; 12041 c = '\n'; 12042 } 12043 12044 return c; 12045 } 12046 12047 static void 12048 parser_pushback(struct parser_params *parser, int c) 12049 { 12050 if (c == -1) return; 12051 lex_p--; 12052 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') { 12053 lex_p--; 12054 } 12055 } 12056 12057 #define was_bol() (lex_p == lex_pbeg + 1) 12058 12059 #define tokfix() (tokenbuf[tokidx]='\0') 12060 #define tok() tokenbuf 12061 #define toklen() tokidx 12062 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0) 12063 12064 static char* 12065 parser_newtok(struct parser_params *parser) 12066 { 12067 tokidx = 0; 12068 tokline = ruby_sourceline; 12069 if (!tokenbuf) { 12070 toksiz = 60; 12071 tokenbuf = ALLOC_N(char, 60); 12072 } 12073 if (toksiz > 4096) { 12074 toksiz = 60; 12075 REALLOC_N(tokenbuf, char, 60); 12076 } 12077 return tokenbuf; 12078 } 12079 12080 static char * 12081 parser_tokspace(struct parser_params *parser, int n) 12082 { 12083 tokidx += n; 12084 12085 if (tokidx >= toksiz) { 12086 do {toksiz *= 2;} while (toksiz < tokidx); 12087 REALLOC_N(tokenbuf, char, toksiz); 12088 } 12089 return &tokenbuf[tokidx-n]; 12090 } 12091 12092 static void 12093 parser_tokadd(struct parser_params *parser, int c) 12094 { 12095 tokenbuf[tokidx++] = (char)c; 12096 if (tokidx >= toksiz) { 12097 toksiz *= 2; 12098 REALLOC_N(tokenbuf, char, toksiz); 12099 } 12100 } 12101 12102 static int 12103 parser_tok_hex(struct parser_params *parser, size_t *numlen) 12104 { 12105 int c; 12106 12107 c = scan_hex(lex_p, 2, numlen); 12108 if (!*numlen) { 12109 yyerror("invalid hex escape"); 12110 return 0; 12111 } 12112 lex_p += *numlen; 12113 return c; 12114 } 12115 12116 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n)) 12117 12118 /* return value is for ?\u3042 */ 12119 static int 12120 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, 12121 int string_literal, int symbol_literal, int regexp_literal) 12122 { 12123 /* 12124 * If string_literal is true, then we allow multiple codepoints 12125 * in \u{}, and add the codepoints to the current token. 12126 * Otherwise we're parsing a character literal and return a single 12127 * codepoint without adding it 12128 */ 12129 12130 int codepoint; 12131 size_t numlen; 12132 12133 if (regexp_literal) { tokadd('\\'); tokadd('u'); } 12134 12135 if (peek('{')) { /* handle \u{...} form */ 12136 do { 12137 if (regexp_literal) { tokadd(*lex_p); } 12138 nextc(); 12139 codepoint = scan_hex(lex_p, 6, &numlen); 12140 if (numlen == 0) { 12141 yyerror("invalid Unicode escape"); 12142 return 0; 12143 } 12144 if (codepoint > 0x10ffff) { 12145 yyerror("invalid Unicode codepoint (too large)"); 12146 return 0; 12147 } 12148 lex_p += numlen; 12149 if (regexp_literal) { 12150 tokcopy((int)numlen); 12151 } 12152 else if (codepoint >= 0x80) { 12153 *encp = rb_utf8_encoding(); 12154 if (string_literal) tokaddmbc(codepoint, *encp); 12155 } 12156 else if (string_literal) { 12157 tokadd(codepoint); 12158 } 12159 } while (string_literal && (peek(' ') || peek('\t'))); 12160 12161 if (!peek('}')) { 12162 yyerror("unterminated Unicode escape"); 12163 return 0; 12164 } 12165 12166 if (regexp_literal) { tokadd('}'); } 12167 nextc(); 12168 } 12169 else { /* handle \uxxxx form */ 12170 codepoint = scan_hex(lex_p, 4, &numlen); 12171 if (numlen < 4) { 12172 yyerror("invalid Unicode escape"); 12173 return 0; 12174 } 12175 lex_p += 4; 12176 if (regexp_literal) { 12177 tokcopy(4); 12178 } 12179 else if (codepoint >= 0x80) { 12180 *encp = rb_utf8_encoding(); 12181 if (string_literal) tokaddmbc(codepoint, *encp); 12182 } 12183 else if (string_literal) { 12184 tokadd(codepoint); 12185 } 12186 } 12187 12188 return codepoint; 12189 } 12190 12191 #define ESCAPE_CONTROL 1 12192 #define ESCAPE_META 2 12193 12194 static int 12195 parser_read_escape(struct parser_params *parser, int flags, 12196 rb_encoding **encp) 12197 { 12198 int c; 12199 size_t numlen; 12200 12201 switch (c = nextc()) { 12202 case '\\': /* Backslash */ 12203 return c; 12204 12205 case 'n': /* newline */ 12206 return '\n'; 12207 12208 case 't': /* horizontal tab */ 12209 return '\t'; 12210 12211 case 'r': /* carriage-return */ 12212 return '\r'; 12213 12214 case 'f': /* form-feed */ 12215 return '\f'; 12216 12217 case 'v': /* vertical tab */ 12218 return '\13'; 12219 12220 case 'a': /* alarm(bell) */ 12221 return '\007'; 12222 12223 case 'e': /* escape */ 12224 return 033; 12225 12226 case '0': case '1': case '2': case '3': /* octal constant */ 12227 case '4': case '5': case '6': case '7': 12228 pushback(c); 12229 c = scan_oct(lex_p, 3, &numlen); 12230 lex_p += numlen; 12231 return c; 12232 12233 case 'x': /* hex constant */ 12234 c = tok_hex(&numlen); 12235 if (numlen == 0) return 0; 12236 return c; 12237 12238 case 'b': /* backspace */ 12239 return '\010'; 12240 12241 case 's': /* space */ 12242 return ' '; 12243 12244 case 'M': 12245 if (flags & ESCAPE_META) goto eof; 12246 if ((c = nextc()) != '-') { 12247 pushback(c); 12248 goto eof; 12249 } 12250 if ((c = nextc()) == '\\') { 12251 if (peek('u')) goto eof; 12252 return read_escape(flags|ESCAPE_META, encp) | 0x80; 12253 } 12254 else if (c == -1 || !ISASCII(c)) goto eof; 12255 else { 12256 return ((c & 0xff) | 0x80); 12257 } 12258 12259 case 'C': 12260 if ((c = nextc()) != '-') { 12261 pushback(c); 12262 goto eof; 12263 } 12264 case 'c': 12265 if (flags & ESCAPE_CONTROL) goto eof; 12266 if ((c = nextc())== '\\') { 12267 if (peek('u')) goto eof; 12268 c = read_escape(flags|ESCAPE_CONTROL, encp); 12269 } 12270 else if (c == '?') 12271 return 0177; 12272 else if (c == -1 || !ISASCII(c)) goto eof; 12273 return c & 0x9f; 12274 12275 eof: 12276 case -1: 12277 yyerror("Invalid escape character syntax"); 12278 return '\0'; 12279 12280 default: 12281 return c; 12282 } 12283 } 12284 12285 static void 12286 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc) 12287 { 12288 int len = rb_enc_codelen(c, enc); 12289 rb_enc_mbcput(c, tokspace(len), enc); 12290 } 12291 12292 static int 12293 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp) 12294 { 12295 int c; 12296 int flags = 0; 12297 size_t numlen; 12298 12299 first: 12300 switch (c = nextc()) { 12301 case '\n': 12302 return 0; /* just ignore */ 12303 12304 case '0': case '1': case '2': case '3': /* octal constant */ 12305 case '4': case '5': case '6': case '7': 12306 { 12307 ruby_scan_oct(--lex_p, 3, &numlen); 12308 if (numlen == 0) goto eof; 12309 lex_p += numlen; 12310 tokcopy((int)numlen + 1); 12311 } 12312 return 0; 12313 12314 case 'x': /* hex constant */ 12315 { 12316 tok_hex(&numlen); 12317 if (numlen == 0) return -1; 12318 tokcopy((int)numlen + 2); 12319 } 12320 return 0; 12321 12322 case 'M': 12323 if (flags & ESCAPE_META) goto eof; 12324 if ((c = nextc()) != '-') { 12325 pushback(c); 12326 goto eof; 12327 } 12328 tokcopy(3); 12329 flags |= ESCAPE_META; 12330 goto escaped; 12331 12332 case 'C': 12333 if (flags & ESCAPE_CONTROL) goto eof; 12334 if ((c = nextc()) != '-') { 12335 pushback(c); 12336 goto eof; 12337 } 12338 tokcopy(3); 12339 goto escaped; 12340 12341 case 'c': 12342 if (flags & ESCAPE_CONTROL) goto eof; 12343 tokcopy(2); 12344 flags |= ESCAPE_CONTROL; 12345 escaped: 12346 if ((c = nextc()) == '\\') { 12347 goto first; 12348 } 12349 else if (c == -1) goto eof; 12350 tokadd(c); 12351 return 0; 12352 12353 eof: 12354 case -1: 12355 yyerror("Invalid escape character syntax"); 12356 return -1; 12357 12358 default: 12359 tokadd('\\'); 12360 tokadd(c); 12361 } 12362 return 0; 12363 } 12364 12365 static int 12366 parser_regx_options(struct parser_params *parser) 12367 { 12368 int kcode = 0; 12369 int kopt = 0; 12370 int options = 0; 12371 int c, opt, kc; 12372 12373 newtok(); 12374 while (c = nextc(), ISALPHA(c)) { 12375 if (c == 'o') { 12376 options |= RE_OPTION_ONCE; 12377 } 12378 else if (rb_char_to_option_kcode(c, &opt, &kc)) { 12379 if (kc >= 0) { 12380 if (kc != rb_ascii8bit_encindex()) kcode = c; 12381 kopt = opt; 12382 } 12383 else { 12384 options |= opt; 12385 } 12386 } 12387 else { 12388 tokadd(c); 12389 } 12390 } 12391 options |= kopt; 12392 pushback(c); 12393 if (toklen()) { 12394 tokfix(); 12395 compile_error(PARSER_ARG "unknown regexp option%s - %s", 12396 toklen() > 1 ? "s" : "", tok()); 12397 } 12398 return options | RE_OPTION_ENCODING(kcode); 12399 } 12400 12401 static void 12402 dispose_string(VALUE str) 12403 { 12404 rb_str_free(str); 12405 rb_gc_force_recycle(str); 12406 } 12407 12408 static int 12409 parser_tokadd_mbchar(struct parser_params *parser, int c) 12410 { 12411 int len = parser_precise_mbclen(); 12412 if (!MBCLEN_CHARFOUND_P(len)) { 12413 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name()); 12414 return -1; 12415 } 12416 tokadd(c); 12417 lex_p += --len; 12418 if (len > 0) tokcopy(len); 12419 return c; 12420 } 12421 12422 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c)) 12423 12424 static inline int 12425 simple_re_meta(int c) 12426 { 12427 switch (c) { 12428 case '$': case '*': case '+': case '.': 12429 case '?': case '^': case '|': 12430 case ')': case ']': case '}': case '>': 12431 return TRUE; 12432 default: 12433 return FALSE; 12434 } 12435 } 12436 12437 static int 12438 parser_tokadd_string(struct parser_params *parser, 12439 int func, int term, int paren, long *nest, 12440 rb_encoding **encp) 12441 { 12442 int c; 12443 int has_nonascii = 0; 12444 rb_encoding *enc = *encp; 12445 char *errbuf = 0; 12446 static const char mixed_msg[] = "%s mixed within %s source"; 12447 12448 #define mixed_error(enc1, enc2) if (!errbuf) { \ 12449 size_t len = sizeof(mixed_msg) - 4; \ 12450 len += strlen(rb_enc_name(enc1)); \ 12451 len += strlen(rb_enc_name(enc2)); \ 12452 errbuf = ALLOCA_N(char, len); \ 12453 snprintf(errbuf, len, mixed_msg, \ 12454 rb_enc_name(enc1), \ 12455 rb_enc_name(enc2)); \ 12456 yyerror(errbuf); \ 12457 } 12458 #define mixed_escape(beg, enc1, enc2) do { \ 12459 const char *pos = lex_p; \ 12460 lex_p = (beg); \ 12461 mixed_error((enc1), (enc2)); \ 12462 lex_p = pos; \ 12463 } while (0) 12464 12465 while ((c = nextc()) != -1) { 12466 if (paren && c == paren) { 12467 ++*nest; 12468 } 12469 else if (c == term) { 12470 if (!nest || !*nest) { 12471 pushback(c); 12472 break; 12473 } 12474 --*nest; 12475 } 12476 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) { 12477 int c2 = *lex_p; 12478 if (c2 == '$' || c2 == '@' || c2 == '{') { 12479 pushback(c); 12480 break; 12481 } 12482 } 12483 else if (c == '\\') { 12484 const char *beg = lex_p - 1; 12485 c = nextc(); 12486 switch (c) { 12487 case '\n': 12488 if (func & STR_FUNC_QWORDS) break; 12489 if (func & STR_FUNC_EXPAND) continue; 12490 tokadd('\\'); 12491 break; 12492 12493 case '\\': 12494 if (func & STR_FUNC_ESCAPE) tokadd(c); 12495 break; 12496 12497 case 'u': 12498 if ((func & STR_FUNC_EXPAND) == 0) { 12499 tokadd('\\'); 12500 break; 12501 } 12502 parser_tokadd_utf8(parser, &enc, 1, 12503 func & STR_FUNC_SYMBOL, 12504 func & STR_FUNC_REGEXP); 12505 if (has_nonascii && enc != *encp) { 12506 mixed_escape(beg, enc, *encp); 12507 } 12508 continue; 12509 12510 default: 12511 if (c == -1) return -1; 12512 if (!ISASCII(c)) { 12513 if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\'); 12514 goto non_ascii; 12515 } 12516 if (func & STR_FUNC_REGEXP) { 12517 if (c == term && !simple_re_meta(c)) { 12518 tokadd(c); 12519 continue; 12520 } 12521 pushback(c); 12522 if ((c = tokadd_escape(&enc)) < 0) 12523 return -1; 12524 if (has_nonascii && enc != *encp) { 12525 mixed_escape(beg, enc, *encp); 12526 } 12527 continue; 12528 } 12529 else if (func & STR_FUNC_EXPAND) { 12530 pushback(c); 12531 if (func & STR_FUNC_ESCAPE) tokadd('\\'); 12532 c = read_escape(0, &enc); 12533 } 12534 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 12535 /* ignore backslashed spaces in %w */ 12536 } 12537 else if (c != term && !(paren && c == paren)) { 12538 tokadd('\\'); 12539 pushback(c); 12540 continue; 12541 } 12542 } 12543 } 12544 else if (!parser_isascii()) { 12545 non_ascii: 12546 has_nonascii = 1; 12547 if (enc != *encp) { 12548 mixed_error(enc, *encp); 12549 continue; 12550 } 12551 if (tokadd_mbchar(c) == -1) return -1; 12552 continue; 12553 } 12554 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 12555 pushback(c); 12556 break; 12557 } 12558 if (c & 0x80) { 12559 has_nonascii = 1; 12560 if (enc != *encp) { 12561 mixed_error(enc, *encp); 12562 continue; 12563 } 12564 } 12565 tokadd(c); 12566 } 12567 *encp = enc; 12568 return c; 12569 } 12570 12571 #define NEW_STRTERM(func, term, paren) \ 12572 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0) 12573 12574 #ifdef RIPPER 12575 static void 12576 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc) 12577 { 12578 if (!NIL_P(parser->delayed)) { 12579 ptrdiff_t len = lex_p - parser->tokp; 12580 if (len > 0) { 12581 rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc); 12582 } 12583 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12584 parser->tokp = lex_p; 12585 } 12586 } 12587 12588 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc)) 12589 #else 12590 #define flush_string_content(enc) ((void)(enc)) 12591 #endif 12592 12593 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32]; 12594 /* this can be shared with ripper, since it's independent from struct 12595 * parser_params. */ 12596 #ifndef RIPPER 12597 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0) 12598 #define SPECIAL_PUNCT(idx) ( \ 12599 BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \ 12600 BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \ 12601 BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \ 12602 BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \ 12603 BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \ 12604 BIT('0', idx)) 12605 const unsigned int ruby_global_name_punct_bits[] = { 12606 SPECIAL_PUNCT(0), 12607 SPECIAL_PUNCT(1), 12608 SPECIAL_PUNCT(2), 12609 }; 12610 #undef BIT 12611 #undef SPECIAL_PUNCT 12612 #endif 12613 12614 static inline int 12615 is_global_name_punct(const char c) 12616 { 12617 if (c <= 0x20 || 0x7e < c) return 0; 12618 return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1; 12619 } 12620 12621 static int 12622 parser_peek_variable_name(struct parser_params *parser) 12623 { 12624 int c; 12625 const char *p = lex_p; 12626 12627 if (p + 1 >= lex_pend) return 0; 12628 c = *p++; 12629 switch (c) { 12630 case '$': 12631 if ((c = *p) == '-') { 12632 if (++p >= lex_pend) return 0; 12633 c = *p; 12634 } 12635 else if (is_global_name_punct(c) || ISDIGIT(c)) { 12636 return tSTRING_DVAR; 12637 } 12638 break; 12639 case '@': 12640 if ((c = *p) == '@') { 12641 if (++p >= lex_pend) return 0; 12642 c = *p; 12643 } 12644 break; 12645 case '{': 12646 lex_p = p; 12647 command_start = TRUE; 12648 return tSTRING_DBEG; 12649 default: 12650 return 0; 12651 } 12652 if (!ISASCII(c) || c == '_' || ISALPHA(c)) 12653 return tSTRING_DVAR; 12654 return 0; 12655 } 12656 12657 static int 12658 parser_parse_string(struct parser_params *parser, NODE *quote) 12659 { 12660 int func = (int)quote->nd_func; 12661 int term = nd_term(quote); 12662 int paren = nd_paren(quote); 12663 int c, space = 0; 12664 rb_encoding *enc = current_enc; 12665 12666 if (func == -1) return tSTRING_END; 12667 c = nextc(); 12668 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 12669 do {c = nextc();} while (ISSPACE(c)); 12670 space = 1; 12671 } 12672 if (c == term && !quote->nd_nest) { 12673 if (func & STR_FUNC_QWORDS) { 12674 quote->nd_func = -1; 12675 return ' '; 12676 } 12677 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END; 12678 set_yylval_num(regx_options()); 12679 return tREGEXP_END; 12680 } 12681 if (space) { 12682 pushback(c); 12683 return ' '; 12684 } 12685 newtok(); 12686 if ((func & STR_FUNC_EXPAND) && c == '#') { 12687 int t = parser_peek_variable_name(parser); 12688 if (t) return t; 12689 tokadd('#'); 12690 c = nextc(); 12691 } 12692 pushback(c); 12693 if (tokadd_string(func, term, paren, "e->nd_nest, 12694 &enc) == -1) { 12695 ruby_sourceline = nd_line(quote); 12696 if (func & STR_FUNC_REGEXP) { 12697 if (parser->eofp) 12698 compile_error(PARSER_ARG "unterminated regexp meets end of file"); 12699 return tREGEXP_END; 12700 } 12701 else { 12702 if (parser->eofp) 12703 compile_error(PARSER_ARG "unterminated string meets end of file"); 12704 return tSTRING_END; 12705 } 12706 } 12707 12708 tokfix(); 12709 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 12710 flush_string_content(enc); 12711 12712 return tSTRING_CONTENT; 12713 } 12714 12715 static int 12716 parser_heredoc_identifier(struct parser_params *parser) 12717 { 12718 int c = nextc(), term, func = 0; 12719 long len; 12720 12721 if (c == '-') { 12722 c = nextc(); 12723 func = STR_FUNC_INDENT; 12724 } 12725 switch (c) { 12726 case '\'': 12727 func |= str_squote; goto quoted; 12728 case '"': 12729 func |= str_dquote; goto quoted; 12730 case '`': 12731 func |= str_xquote; 12732 quoted: 12733 newtok(); 12734 tokadd(func); 12735 term = c; 12736 while ((c = nextc()) != -1 && c != term) { 12737 if (tokadd_mbchar(c) == -1) return 0; 12738 } 12739 if (c == -1) { 12740 compile_error(PARSER_ARG "unterminated here document identifier"); 12741 return 0; 12742 } 12743 break; 12744 12745 default: 12746 if (!parser_is_identchar()) { 12747 pushback(c); 12748 if (func & STR_FUNC_INDENT) { 12749 pushback('-'); 12750 } 12751 return 0; 12752 } 12753 newtok(); 12754 term = '"'; 12755 tokadd(func |= str_dquote); 12756 do { 12757 if (tokadd_mbchar(c) == -1) return 0; 12758 } while ((c = nextc()) != -1 && parser_is_identchar()); 12759 pushback(c); 12760 break; 12761 } 12762 12763 tokfix(); 12764 #ifdef RIPPER 12765 ripper_dispatch_scan_event(parser, tHEREDOC_BEG); 12766 #endif 12767 len = lex_p - lex_pbeg; 12768 lex_goto_eol(parser); 12769 lex_strterm = rb_node_newnode(NODE_HEREDOC, 12770 STR_NEW(tok(), toklen()), /* nd_lit */ 12771 len, /* nd_nth */ 12772 lex_lastline); /* nd_orig */ 12773 nd_set_line(lex_strterm, ruby_sourceline); 12774 ripper_flush(parser); 12775 return term == '`' ? tXSTRING_BEG : tSTRING_BEG; 12776 } 12777 12778 static void 12779 parser_heredoc_restore(struct parser_params *parser, NODE *here) 12780 { 12781 VALUE line; 12782 12783 line = here->nd_orig; 12784 lex_lastline = line; 12785 lex_pbeg = RSTRING_PTR(line); 12786 lex_pend = lex_pbeg + RSTRING_LEN(line); 12787 lex_p = lex_pbeg + here->nd_nth; 12788 heredoc_end = ruby_sourceline; 12789 ruby_sourceline = nd_line(here); 12790 dispose_string(here->nd_lit); 12791 rb_gc_force_recycle((VALUE)here); 12792 ripper_flush(parser); 12793 } 12794 12795 static int 12796 parser_whole_match_p(struct parser_params *parser, 12797 const char *eos, long len, int indent) 12798 { 12799 const char *p = lex_pbeg; 12800 long n; 12801 12802 if (indent) { 12803 while (*p && ISSPACE(*p)) p++; 12804 } 12805 n = lex_pend - (p + len); 12806 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE; 12807 return strncmp(eos, p, len) == 0; 12808 } 12809 12810 #ifdef RIPPER 12811 static void 12812 ripper_dispatch_heredoc_end(struct parser_params *parser) 12813 { 12814 if (!NIL_P(parser->delayed)) 12815 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12816 lex_goto_eol(parser); 12817 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END); 12818 } 12819 12820 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser) 12821 #else 12822 #define dispatch_heredoc_end() ((void)0) 12823 #endif 12824 12825 static int 12826 parser_here_document(struct parser_params *parser, NODE *here) 12827 { 12828 int c, func, indent = 0; 12829 const char *eos, *p, *pend; 12830 long len; 12831 VALUE str = 0; 12832 rb_encoding *enc = current_enc; 12833 12834 eos = RSTRING_PTR(here->nd_lit); 12835 len = RSTRING_LEN(here->nd_lit) - 1; 12836 indent = (func = *eos++) & STR_FUNC_INDENT; 12837 12838 if ((c = nextc()) == -1) { 12839 error: 12840 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos); 12841 #ifdef RIPPER 12842 if (NIL_P(parser->delayed)) { 12843 ripper_dispatch_scan_event(parser, tSTRING_CONTENT); 12844 } 12845 else { 12846 if (str || 12847 ((len = lex_p - parser->tokp) > 0 && 12848 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) { 12849 rb_str_append(parser->delayed, str); 12850 } 12851 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 12852 } 12853 lex_goto_eol(parser); 12854 #endif 12855 restore: 12856 heredoc_restore(lex_strterm); 12857 lex_strterm = 0; 12858 return 0; 12859 } 12860 if (was_bol() && whole_match_p(eos, len, indent)) { 12861 dispatch_heredoc_end(); 12862 heredoc_restore(lex_strterm); 12863 return tSTRING_END; 12864 } 12865 12866 if (!(func & STR_FUNC_EXPAND)) { 12867 do { 12868 p = RSTRING_PTR(lex_lastline); 12869 pend = lex_pend; 12870 if (pend > p) { 12871 switch (pend[-1]) { 12872 case '\n': 12873 if (--pend == p || pend[-1] != '\r') { 12874 pend++; 12875 break; 12876 } 12877 case '\r': 12878 --pend; 12879 } 12880 } 12881 if (str) 12882 rb_str_cat(str, p, pend - p); 12883 else 12884 str = STR_NEW(p, pend - p); 12885 if (pend < lex_pend) rb_str_cat(str, "\n", 1); 12886 lex_goto_eol(parser); 12887 if (nextc() == -1) { 12888 if (str) { 12889 dispose_string(str); 12890 str = 0; 12891 } 12892 goto error; 12893 } 12894 } while (!whole_match_p(eos, len, indent)); 12895 } 12896 else { 12897 /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/ 12898 newtok(); 12899 if (c == '#') { 12900 int t = parser_peek_variable_name(parser); 12901 if (t) return t; 12902 tokadd('#'); 12903 c = nextc(); 12904 } 12905 do { 12906 pushback(c); 12907 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) { 12908 if (parser->eofp) goto error; 12909 goto restore; 12910 } 12911 if (c != '\n') { 12912 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 12913 flush_string_content(enc); 12914 return tSTRING_CONTENT; 12915 } 12916 tokadd(nextc()); 12917 /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/ 12918 if ((c = nextc()) == -1) goto error; 12919 } while (!whole_match_p(eos, len, indent)); 12920 str = STR_NEW3(tok(), toklen(), enc, func); 12921 } 12922 dispatch_heredoc_end(); 12923 heredoc_restore(lex_strterm); 12924 lex_strterm = NEW_STRTERM(-1, 0, 0); 12925 set_yylval_str(str); 12926 return tSTRING_CONTENT; 12927 } 12928 12929 #include "lex.c" 12930 12931 static void 12932 arg_ambiguous_gen(struct parser_params *parser) 12933 { 12934 #ifndef RIPPER 12935 rb_warning0("ambiguous first argument; put parentheses or even spaces"); 12936 #else 12937 dispatch0(arg_ambiguous); 12938 #endif 12939 } 12940 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1) 12941 12942 static ID 12943 formal_argument_gen(struct parser_params *parser, ID lhs) 12944 { 12945 #ifndef RIPPER 12946 if (!is_local_id(lhs)) 12947 yyerror("formal argument must be local variable"); 12948 #endif 12949 shadowing_lvar(lhs); 12950 return lhs; 12951 } 12952 12953 static int 12954 lvar_defined_gen(struct parser_params *parser, ID id) 12955 { 12956 return (dyna_in_block() && dvar_defined_get(id)) || local_id(id); 12957 } 12958 12959 /* emacsen -*- hack */ 12960 static long 12961 parser_encode_length(struct parser_params *parser, const char *name, long len) 12962 { 12963 long nlen; 12964 12965 if (len > 5 && name[nlen = len - 5] == '-') { 12966 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0) 12967 return nlen; 12968 } 12969 if (len > 4 && name[nlen = len - 4] == '-') { 12970 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0) 12971 return nlen; 12972 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 && 12973 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0)) 12974 /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */ 12975 return nlen; 12976 } 12977 return len; 12978 } 12979 12980 static void 12981 parser_set_encode(struct parser_params *parser, const char *name) 12982 { 12983 int idx = rb_enc_find_index(name); 12984 rb_encoding *enc; 12985 VALUE excargs[3]; 12986 12987 if (idx < 0) { 12988 excargs[1] = rb_sprintf("unknown encoding name: %s", name); 12989 error: 12990 excargs[0] = rb_eArgError; 12991 excargs[2] = rb_make_backtrace(); 12992 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline)); 12993 rb_exc_raise(rb_make_exception(3, excargs)); 12994 } 12995 enc = rb_enc_from_index(idx); 12996 if (!rb_enc_asciicompat(enc)) { 12997 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc)); 12998 goto error; 12999 } 13000 parser->enc = enc; 13001 #ifndef RIPPER 13002 if (ruby_debug_lines) { 13003 long i, n = RARRAY_LEN(ruby_debug_lines); 13004 const VALUE *p = RARRAY_PTR(ruby_debug_lines); 13005 for (i = 0; i < n; ++i) { 13006 rb_enc_associate_index(*p, idx); 13007 } 13008 } 13009 #endif 13010 } 13011 13012 static int 13013 comment_at_top(struct parser_params *parser) 13014 { 13015 const char *p = lex_pbeg, *pend = lex_p - 1; 13016 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0; 13017 while (p < pend) { 13018 if (!ISSPACE(*p)) return 0; 13019 p++; 13020 } 13021 return 1; 13022 } 13023 13024 #ifndef RIPPER 13025 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len); 13026 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val); 13027 13028 static void 13029 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val) 13030 { 13031 if (!comment_at_top(parser)) { 13032 return; 13033 } 13034 parser_set_encode(parser, val); 13035 } 13036 13037 static void 13038 parser_set_token_info(struct parser_params *parser, const char *name, const char *val) 13039 { 13040 int *p = &parser->parser_token_info_enabled; 13041 13042 switch (*val) { 13043 case 't': case 'T': 13044 if (strcasecmp(val, "true") == 0) { 13045 *p = TRUE; 13046 return; 13047 } 13048 break; 13049 case 'f': case 'F': 13050 if (strcasecmp(val, "false") == 0) { 13051 *p = FALSE; 13052 return; 13053 } 13054 break; 13055 } 13056 rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val); 13057 } 13058 13059 struct magic_comment { 13060 const char *name; 13061 rb_magic_comment_setter_t func; 13062 rb_magic_comment_length_t length; 13063 }; 13064 13065 static const struct magic_comment magic_comments[] = { 13066 {"coding", magic_comment_encoding, parser_encode_length}, 13067 {"encoding", magic_comment_encoding, parser_encode_length}, 13068 {"warn_indent", parser_set_token_info}, 13069 }; 13070 #endif 13071 13072 static const char * 13073 magic_comment_marker(const char *str, long len) 13074 { 13075 long i = 2; 13076 13077 while (i < len) { 13078 switch (str[i]) { 13079 case '-': 13080 if (str[i-1] == '*' && str[i-2] == '-') { 13081 return str + i + 1; 13082 } 13083 i += 2; 13084 break; 13085 case '*': 13086 if (i + 1 >= len) return 0; 13087 if (str[i+1] != '-') { 13088 i += 4; 13089 } 13090 else if (str[i-1] != '-') { 13091 i += 2; 13092 } 13093 else { 13094 return str + i + 2; 13095 } 13096 break; 13097 default: 13098 i += 3; 13099 break; 13100 } 13101 } 13102 return 0; 13103 } 13104 13105 static int 13106 parser_magic_comment(struct parser_params *parser, const char *str, long len) 13107 { 13108 VALUE name = 0, val = 0; 13109 const char *beg, *end, *vbeg, *vend; 13110 #define str_copy(_s, _p, _n) ((_s) \ 13111 ? (void)(rb_str_resize((_s), (_n)), \ 13112 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \ 13113 : (void)((_s) = STR_NEW((_p), (_n)))) 13114 13115 if (len <= 7) return FALSE; 13116 if (!(beg = magic_comment_marker(str, len))) return FALSE; 13117 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE; 13118 str = beg; 13119 len = end - beg - 3; 13120 13121 /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */ 13122 while (len > 0) { 13123 #ifndef RIPPER 13124 const struct magic_comment *p = magic_comments; 13125 #endif 13126 char *s; 13127 int i; 13128 long n = 0; 13129 13130 for (; len > 0 && *str; str++, --len) { 13131 switch (*str) { 13132 case '\'': case '"': case ':': case ';': 13133 continue; 13134 } 13135 if (!ISSPACE(*str)) break; 13136 } 13137 for (beg = str; len > 0; str++, --len) { 13138 switch (*str) { 13139 case '\'': case '"': case ':': case ';': 13140 break; 13141 default: 13142 if (ISSPACE(*str)) break; 13143 continue; 13144 } 13145 break; 13146 } 13147 for (end = str; len > 0 && ISSPACE(*str); str++, --len); 13148 if (!len) break; 13149 if (*str != ':') continue; 13150 13151 do str++; while (--len > 0 && ISSPACE(*str)); 13152 if (!len) break; 13153 if (*str == '"') { 13154 for (vbeg = ++str; --len > 0 && *str != '"'; str++) { 13155 if (*str == '\\') { 13156 --len; 13157 ++str; 13158 } 13159 } 13160 vend = str; 13161 if (len) { 13162 --len; 13163 ++str; 13164 } 13165 } 13166 else { 13167 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++); 13168 vend = str; 13169 } 13170 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++; 13171 13172 n = end - beg; 13173 str_copy(name, beg, n); 13174 s = RSTRING_PTR(name); 13175 for (i = 0; i < n; ++i) { 13176 if (s[i] == '-') s[i] = '_'; 13177 } 13178 #ifndef RIPPER 13179 do { 13180 if (STRNCASECMP(p->name, s, n) == 0) { 13181 n = vend - vbeg; 13182 if (p->length) { 13183 n = (*p->length)(parser, vbeg, n); 13184 } 13185 str_copy(val, vbeg, n); 13186 (*p->func)(parser, s, RSTRING_PTR(val)); 13187 break; 13188 } 13189 } while (++p < magic_comments + numberof(magic_comments)); 13190 #else 13191 str_copy(val, vbeg, vend - vbeg); 13192 dispatch2(magic_comment, name, val); 13193 #endif 13194 } 13195 13196 return TRUE; 13197 } 13198 13199 static void 13200 set_file_encoding(struct parser_params *parser, const char *str, const char *send) 13201 { 13202 int sep = 0; 13203 const char *beg = str; 13204 VALUE s; 13205 13206 for (;;) { 13207 if (send - str <= 6) return; 13208 switch (str[6]) { 13209 case 'C': case 'c': str += 6; continue; 13210 case 'O': case 'o': str += 5; continue; 13211 case 'D': case 'd': str += 4; continue; 13212 case 'I': case 'i': str += 3; continue; 13213 case 'N': case 'n': str += 2; continue; 13214 case 'G': case 'g': str += 1; continue; 13215 case '=': case ':': 13216 sep = 1; 13217 str += 6; 13218 break; 13219 default: 13220 str += 6; 13221 if (ISSPACE(*str)) break; 13222 continue; 13223 } 13224 if (STRNCASECMP(str-6, "coding", 6) == 0) break; 13225 } 13226 for (;;) { 13227 do { 13228 if (++str >= send) return; 13229 } while (ISSPACE(*str)); 13230 if (sep) break; 13231 if (*str != '=' && *str != ':') return; 13232 sep = 1; 13233 str++; 13234 } 13235 beg = str; 13236 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send); 13237 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg)); 13238 parser_set_encode(parser, RSTRING_PTR(s)); 13239 rb_str_resize(s, 0); 13240 } 13241 13242 static void 13243 parser_prepare(struct parser_params *parser) 13244 { 13245 int c = nextc(); 13246 switch (c) { 13247 case '#': 13248 if (peek('!')) parser->has_shebang = 1; 13249 break; 13250 case 0xef: /* UTF-8 BOM marker */ 13251 if (lex_pend - lex_p >= 2 && 13252 (unsigned char)lex_p[0] == 0xbb && 13253 (unsigned char)lex_p[1] == 0xbf) { 13254 parser->enc = rb_utf8_encoding(); 13255 lex_p += 2; 13256 lex_pbeg = lex_p; 13257 return; 13258 } 13259 break; 13260 case EOF: 13261 return; 13262 } 13263 pushback(c); 13264 parser->enc = rb_enc_get(lex_lastline); 13265 } 13266 13267 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY) 13268 #define IS_END() IS_lex_state(EXPR_END_ANY) 13269 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY) 13270 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c)) 13271 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG()) 13272 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1)) 13273 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT) 13274 13275 #ifndef RIPPER 13276 #define ambiguous_operator(op, syn) ( \ 13277 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \ 13278 rb_warning0("even though it seems like "syn"")) 13279 #else 13280 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn)) 13281 #endif 13282 #define warn_balanced(op, syn) ((void) \ 13283 (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \ 13284 space_seen && !ISSPACE(c) && \ 13285 (ambiguous_operator(op, syn), 0))) 13286 13287 static int 13288 parser_yylex(struct parser_params *parser) 13289 { 13290 register int c; 13291 int space_seen = 0; 13292 int cmd_state; 13293 enum lex_state_e last_state; 13294 rb_encoding *enc; 13295 int mb; 13296 #ifdef RIPPER 13297 int fallthru = FALSE; 13298 #endif 13299 13300 if (lex_strterm) { 13301 int token; 13302 if (nd_type(lex_strterm) == NODE_HEREDOC) { 13303 token = here_document(lex_strterm); 13304 if (token == tSTRING_END) { 13305 lex_strterm = 0; 13306 lex_state = EXPR_END; 13307 } 13308 } 13309 else { 13310 token = parse_string(lex_strterm); 13311 if (token == tSTRING_END || token == tREGEXP_END) { 13312 rb_gc_force_recycle((VALUE)lex_strterm); 13313 lex_strterm = 0; 13314 lex_state = EXPR_END; 13315 } 13316 } 13317 return token; 13318 } 13319 cmd_state = command_start; 13320 command_start = FALSE; 13321 retry: 13322 last_state = lex_state; 13323 switch (c = nextc()) { 13324 case '\0': /* NUL */ 13325 case '\004': /* ^D */ 13326 case '\032': /* ^Z */ 13327 case -1: /* end of script. */ 13328 return 0; 13329 13330 /* white spaces */ 13331 case ' ': case '\t': case '\f': case '\r': 13332 case '\13': /* '\v' */ 13333 space_seen = 1; 13334 #ifdef RIPPER 13335 while ((c = nextc())) { 13336 switch (c) { 13337 case ' ': case '\t': case '\f': case '\r': 13338 case '\13': /* '\v' */ 13339 break; 13340 default: 13341 goto outofloop; 13342 } 13343 } 13344 outofloop: 13345 pushback(c); 13346 ripper_dispatch_scan_event(parser, tSP); 13347 #endif 13348 goto retry; 13349 13350 case '#': /* it's a comment */ 13351 /* no magic_comment in shebang line */ 13352 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) { 13353 if (comment_at_top(parser)) { 13354 set_file_encoding(parser, lex_p, lex_pend); 13355 } 13356 } 13357 lex_p = lex_pend; 13358 #ifdef RIPPER 13359 ripper_dispatch_scan_event(parser, tCOMMENT); 13360 fallthru = TRUE; 13361 #endif 13362 /* fall through */ 13363 case '\n': 13364 if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT)) { 13365 #ifdef RIPPER 13366 if (!fallthru) { 13367 ripper_dispatch_scan_event(parser, tIGNORED_NL); 13368 } 13369 fallthru = FALSE; 13370 #endif 13371 goto retry; 13372 } 13373 while ((c = nextc())) { 13374 switch (c) { 13375 case ' ': case '\t': case '\f': case '\r': 13376 case '\13': /* '\v' */ 13377 space_seen = 1; 13378 break; 13379 case '.': { 13380 if ((c = nextc()) != '.') { 13381 pushback(c); 13382 pushback('.'); 13383 goto retry; 13384 } 13385 } 13386 default: 13387 --ruby_sourceline; 13388 lex_nextline = lex_lastline; 13389 case -1: /* EOF no decrement*/ 13390 lex_goto_eol(parser); 13391 #ifdef RIPPER 13392 if (c != -1) { 13393 parser->tokp = lex_p; 13394 } 13395 #endif 13396 goto normal_newline; 13397 } 13398 } 13399 normal_newline: 13400 command_start = TRUE; 13401 lex_state = EXPR_BEG; 13402 return '\n'; 13403 13404 case '*': 13405 if ((c = nextc()) == '*') { 13406 if ((c = nextc()) == '=') { 13407 set_yylval_id(tPOW); 13408 lex_state = EXPR_BEG; 13409 return tOP_ASGN; 13410 } 13411 pushback(c); 13412 if (IS_SPCARG(c)) { 13413 rb_warning0("`**' interpreted as argument prefix"); 13414 c = tDSTAR; 13415 } 13416 else if (IS_BEG()) { 13417 c = tDSTAR; 13418 } 13419 else { 13420 warn_balanced("**", "argument prefix"); 13421 c = tPOW; 13422 } 13423 } 13424 else { 13425 if (c == '=') { 13426 set_yylval_id('*'); 13427 lex_state = EXPR_BEG; 13428 return tOP_ASGN; 13429 } 13430 pushback(c); 13431 if (IS_SPCARG(c)) { 13432 rb_warning0("`*' interpreted as argument prefix"); 13433 c = tSTAR; 13434 } 13435 else if (IS_BEG()) { 13436 c = tSTAR; 13437 } 13438 else { 13439 warn_balanced("*", "argument prefix"); 13440 c = '*'; 13441 } 13442 } 13443 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG; 13444 return c; 13445 13446 case '!': 13447 c = nextc(); 13448 if (IS_AFTER_OPERATOR()) { 13449 lex_state = EXPR_ARG; 13450 if (c == '@') { 13451 return '!'; 13452 } 13453 } 13454 else { 13455 lex_state = EXPR_BEG; 13456 } 13457 if (c == '=') { 13458 return tNEQ; 13459 } 13460 if (c == '~') { 13461 return tNMATCH; 13462 } 13463 pushback(c); 13464 return '!'; 13465 13466 case '=': 13467 if (was_bol()) { 13468 /* skip embedded rd document */ 13469 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) { 13470 #ifdef RIPPER 13471 int first_p = TRUE; 13472 13473 lex_goto_eol(parser); 13474 ripper_dispatch_scan_event(parser, tEMBDOC_BEG); 13475 #endif 13476 for (;;) { 13477 lex_goto_eol(parser); 13478 #ifdef RIPPER 13479 if (!first_p) { 13480 ripper_dispatch_scan_event(parser, tEMBDOC); 13481 } 13482 first_p = FALSE; 13483 #endif 13484 c = nextc(); 13485 if (c == -1) { 13486 compile_error(PARSER_ARG "embedded document meets end of file"); 13487 return 0; 13488 } 13489 if (c != '=') continue; 13490 if (strncmp(lex_p, "end", 3) == 0 && 13491 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) { 13492 break; 13493 } 13494 } 13495 lex_goto_eol(parser); 13496 #ifdef RIPPER 13497 ripper_dispatch_scan_event(parser, tEMBDOC_END); 13498 #endif 13499 goto retry; 13500 } 13501 } 13502 13503 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG; 13504 if ((c = nextc()) == '=') { 13505 if ((c = nextc()) == '=') { 13506 return tEQQ; 13507 } 13508 pushback(c); 13509 return tEQ; 13510 } 13511 if (c == '~') { 13512 return tMATCH; 13513 } 13514 else if (c == '>') { 13515 return tASSOC; 13516 } 13517 pushback(c); 13518 return '='; 13519 13520 case '<': 13521 last_state = lex_state; 13522 c = nextc(); 13523 if (c == '<' && 13524 !IS_lex_state(EXPR_DOT | EXPR_CLASS) && 13525 !IS_END() && 13526 (!IS_ARG() || space_seen)) { 13527 int token = heredoc_identifier(); 13528 if (token) return token; 13529 } 13530 if (IS_AFTER_OPERATOR()) { 13531 lex_state = EXPR_ARG; 13532 } 13533 else { 13534 if (IS_lex_state(EXPR_CLASS)) 13535 command_start = TRUE; 13536 lex_state = EXPR_BEG; 13537 } 13538 if (c == '=') { 13539 if ((c = nextc()) == '>') { 13540 return tCMP; 13541 } 13542 pushback(c); 13543 return tLEQ; 13544 } 13545 if (c == '<') { 13546 if ((c = nextc()) == '=') { 13547 set_yylval_id(tLSHFT); 13548 lex_state = EXPR_BEG; 13549 return tOP_ASGN; 13550 } 13551 pushback(c); 13552 warn_balanced("<<", "here document"); 13553 return tLSHFT; 13554 } 13555 pushback(c); 13556 return '<'; 13557 13558 case '>': 13559 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG; 13560 if ((c = nextc()) == '=') { 13561 return tGEQ; 13562 } 13563 if (c == '>') { 13564 if ((c = nextc()) == '=') { 13565 set_yylval_id(tRSHFT); 13566 lex_state = EXPR_BEG; 13567 return tOP_ASGN; 13568 } 13569 pushback(c); 13570 return tRSHFT; 13571 } 13572 pushback(c); 13573 return '>'; 13574 13575 case '"': 13576 lex_strterm = NEW_STRTERM(str_dquote, '"', 0); 13577 return tSTRING_BEG; 13578 13579 case '`': 13580 if (IS_lex_state(EXPR_FNAME)) { 13581 lex_state = EXPR_ENDFN; 13582 return c; 13583 } 13584 if (IS_lex_state(EXPR_DOT)) { 13585 if (cmd_state) 13586 lex_state = EXPR_CMDARG; 13587 else 13588 lex_state = EXPR_ARG; 13589 return c; 13590 } 13591 lex_strterm = NEW_STRTERM(str_xquote, '`', 0); 13592 return tXSTRING_BEG; 13593 13594 case '\'': 13595 lex_strterm = NEW_STRTERM(str_squote, '\'', 0); 13596 return tSTRING_BEG; 13597 13598 case '?': 13599 if (IS_END()) { 13600 lex_state = EXPR_VALUE; 13601 return '?'; 13602 } 13603 c = nextc(); 13604 if (c == -1) { 13605 compile_error(PARSER_ARG "incomplete character syntax"); 13606 return 0; 13607 } 13608 if (rb_enc_isspace(c, current_enc)) { 13609 if (!IS_ARG()) { 13610 int c2 = 0; 13611 switch (c) { 13612 case ' ': 13613 c2 = 's'; 13614 break; 13615 case '\n': 13616 c2 = 'n'; 13617 break; 13618 case '\t': 13619 c2 = 't'; 13620 break; 13621 case '\v': 13622 c2 = 'v'; 13623 break; 13624 case '\r': 13625 c2 = 'r'; 13626 break; 13627 case '\f': 13628 c2 = 'f'; 13629 break; 13630 } 13631 if (c2) { 13632 rb_warnI("invalid character syntax; use ?\\%c", c2); 13633 } 13634 } 13635 ternary: 13636 pushback(c); 13637 lex_state = EXPR_VALUE; 13638 return '?'; 13639 } 13640 newtok(); 13641 enc = current_enc; 13642 if (!parser_isascii()) { 13643 if (tokadd_mbchar(c) == -1) return 0; 13644 } 13645 else if ((rb_enc_isalnum(c, current_enc) || c == '_') && 13646 lex_p < lex_pend && is_identchar(lex_p, lex_pend, current_enc)) { 13647 goto ternary; 13648 } 13649 else if (c == '\\') { 13650 if (peek('u')) { 13651 nextc(); 13652 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0); 13653 if (0x80 <= c) { 13654 tokaddmbc(c, enc); 13655 } 13656 else { 13657 tokadd(c); 13658 } 13659 } 13660 else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) { 13661 nextc(); 13662 if (tokadd_mbchar(c) == -1) return 0; 13663 } 13664 else { 13665 c = read_escape(0, &enc); 13666 tokadd(c); 13667 } 13668 } 13669 else { 13670 tokadd(c); 13671 } 13672 tokfix(); 13673 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0)); 13674 lex_state = EXPR_END; 13675 return tCHAR; 13676 13677 case '&': 13678 if ((c = nextc()) == '&') { 13679 lex_state = EXPR_BEG; 13680 if ((c = nextc()) == '=') { 13681 set_yylval_id(tANDOP); 13682 lex_state = EXPR_BEG; 13683 return tOP_ASGN; 13684 } 13685 pushback(c); 13686 return tANDOP; 13687 } 13688 else if (c == '=') { 13689 set_yylval_id('&'); 13690 lex_state = EXPR_BEG; 13691 return tOP_ASGN; 13692 } 13693 pushback(c); 13694 if (IS_SPCARG(c)) { 13695 rb_warning0("`&' interpreted as argument prefix"); 13696 c = tAMPER; 13697 } 13698 else if (IS_BEG()) { 13699 c = tAMPER; 13700 } 13701 else { 13702 warn_balanced("&", "argument prefix"); 13703 c = '&'; 13704 } 13705 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG; 13706 return c; 13707 13708 case '|': 13709 if ((c = nextc()) == '|') { 13710 lex_state = EXPR_BEG; 13711 if ((c = nextc()) == '=') { 13712 set_yylval_id(tOROP); 13713 lex_state = EXPR_BEG; 13714 return tOP_ASGN; 13715 } 13716 pushback(c); 13717 return tOROP; 13718 } 13719 if (c == '=') { 13720 set_yylval_id('|'); 13721 lex_state = EXPR_BEG; 13722 return tOP_ASGN; 13723 } 13724 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG; 13725 pushback(c); 13726 return '|'; 13727 13728 case '+': 13729 c = nextc(); 13730 if (IS_AFTER_OPERATOR()) { 13731 lex_state = EXPR_ARG; 13732 if (c == '@') { 13733 return tUPLUS; 13734 } 13735 pushback(c); 13736 return '+'; 13737 } 13738 if (c == '=') { 13739 set_yylval_id('+'); 13740 lex_state = EXPR_BEG; 13741 return tOP_ASGN; 13742 } 13743 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 13744 lex_state = EXPR_BEG; 13745 pushback(c); 13746 if (c != -1 && ISDIGIT(c)) { 13747 c = '+'; 13748 goto start_num; 13749 } 13750 return tUPLUS; 13751 } 13752 lex_state = EXPR_BEG; 13753 pushback(c); 13754 warn_balanced("+", "unary operator"); 13755 return '+'; 13756 13757 case '-': 13758 c = nextc(); 13759 if (IS_AFTER_OPERATOR()) { 13760 lex_state = EXPR_ARG; 13761 if (c == '@') { 13762 return tUMINUS; 13763 } 13764 pushback(c); 13765 return '-'; 13766 } 13767 if (c == '=') { 13768 set_yylval_id('-'); 13769 lex_state = EXPR_BEG; 13770 return tOP_ASGN; 13771 } 13772 if (c == '>') { 13773 lex_state = EXPR_ENDFN; 13774 return tLAMBDA; 13775 } 13776 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 13777 lex_state = EXPR_BEG; 13778 pushback(c); 13779 if (c != -1 && ISDIGIT(c)) { 13780 return tUMINUS_NUM; 13781 } 13782 return tUMINUS; 13783 } 13784 lex_state = EXPR_BEG; 13785 pushback(c); 13786 warn_balanced("-", "unary operator"); 13787 return '-'; 13788 13789 case '.': 13790 lex_state = EXPR_BEG; 13791 if ((c = nextc()) == '.') { 13792 if ((c = nextc()) == '.') { 13793 return tDOT3; 13794 } 13795 pushback(c); 13796 return tDOT2; 13797 } 13798 pushback(c); 13799 if (c != -1 && ISDIGIT(c)) { 13800 yyerror("no .<digit> floating literal anymore; put 0 before dot"); 13801 } 13802 lex_state = EXPR_DOT; 13803 return '.'; 13804 13805 start_num: 13806 case '0': case '1': case '2': case '3': case '4': 13807 case '5': case '6': case '7': case '8': case '9': 13808 { 13809 int is_float, seen_point, seen_e, nondigit; 13810 13811 is_float = seen_point = seen_e = nondigit = 0; 13812 lex_state = EXPR_END; 13813 newtok(); 13814 if (c == '-' || c == '+') { 13815 tokadd(c); 13816 c = nextc(); 13817 } 13818 if (c == '0') { 13819 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0) 13820 int start = toklen(); 13821 c = nextc(); 13822 if (c == 'x' || c == 'X') { 13823 /* hexadecimal */ 13824 c = nextc(); 13825 if (c != -1 && ISXDIGIT(c)) { 13826 do { 13827 if (c == '_') { 13828 if (nondigit) break; 13829 nondigit = c; 13830 continue; 13831 } 13832 if (!ISXDIGIT(c)) break; 13833 nondigit = 0; 13834 tokadd(c); 13835 } while ((c = nextc()) != -1); 13836 } 13837 pushback(c); 13838 tokfix(); 13839 if (toklen() == start) { 13840 no_digits(); 13841 } 13842 else if (nondigit) goto trailing_uc; 13843 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE)); 13844 return tINTEGER; 13845 } 13846 if (c == 'b' || c == 'B') { 13847 /* binary */ 13848 c = nextc(); 13849 if (c == '0' || c == '1') { 13850 do { 13851 if (c == '_') { 13852 if (nondigit) break; 13853 nondigit = c; 13854 continue; 13855 } 13856 if (c != '0' && c != '1') break; 13857 nondigit = 0; 13858 tokadd(c); 13859 } while ((c = nextc()) != -1); 13860 } 13861 pushback(c); 13862 tokfix(); 13863 if (toklen() == start) { 13864 no_digits(); 13865 } 13866 else if (nondigit) goto trailing_uc; 13867 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE)); 13868 return tINTEGER; 13869 } 13870 if (c == 'd' || c == 'D') { 13871 /* decimal */ 13872 c = nextc(); 13873 if (c != -1 && ISDIGIT(c)) { 13874 do { 13875 if (c == '_') { 13876 if (nondigit) break; 13877 nondigit = c; 13878 continue; 13879 } 13880 if (!ISDIGIT(c)) break; 13881 nondigit = 0; 13882 tokadd(c); 13883 } while ((c = nextc()) != -1); 13884 } 13885 pushback(c); 13886 tokfix(); 13887 if (toklen() == start) { 13888 no_digits(); 13889 } 13890 else if (nondigit) goto trailing_uc; 13891 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 13892 return tINTEGER; 13893 } 13894 if (c == '_') { 13895 /* 0_0 */ 13896 goto octal_number; 13897 } 13898 if (c == 'o' || c == 'O') { 13899 /* prefixed octal */ 13900 c = nextc(); 13901 if (c == -1 || c == '_' || !ISDIGIT(c)) { 13902 no_digits(); 13903 } 13904 } 13905 if (c >= '0' && c <= '7') { 13906 /* octal */ 13907 octal_number: 13908 do { 13909 if (c == '_') { 13910 if (nondigit) break; 13911 nondigit = c; 13912 continue; 13913 } 13914 if (c < '0' || c > '9') break; 13915 if (c > '7') goto invalid_octal; 13916 nondigit = 0; 13917 tokadd(c); 13918 } while ((c = nextc()) != -1); 13919 if (toklen() > start) { 13920 pushback(c); 13921 tokfix(); 13922 if (nondigit) goto trailing_uc; 13923 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE)); 13924 return tINTEGER; 13925 } 13926 if (nondigit) { 13927 pushback(c); 13928 goto trailing_uc; 13929 } 13930 } 13931 if (c > '7' && c <= '9') { 13932 invalid_octal: 13933 yyerror("Invalid octal digit"); 13934 } 13935 else if (c == '.' || c == 'e' || c == 'E') { 13936 tokadd('0'); 13937 } 13938 else { 13939 pushback(c); 13940 set_yylval_literal(INT2FIX(0)); 13941 return tINTEGER; 13942 } 13943 } 13944 13945 for (;;) { 13946 switch (c) { 13947 case '0': case '1': case '2': case '3': case '4': 13948 case '5': case '6': case '7': case '8': case '9': 13949 nondigit = 0; 13950 tokadd(c); 13951 break; 13952 13953 case '.': 13954 if (nondigit) goto trailing_uc; 13955 if (seen_point || seen_e) { 13956 goto decode_num; 13957 } 13958 else { 13959 int c0 = nextc(); 13960 if (c0 == -1 || !ISDIGIT(c0)) { 13961 pushback(c0); 13962 goto decode_num; 13963 } 13964 c = c0; 13965 } 13966 tokadd('.'); 13967 tokadd(c); 13968 is_float++; 13969 seen_point++; 13970 nondigit = 0; 13971 break; 13972 13973 case 'e': 13974 case 'E': 13975 if (nondigit) { 13976 pushback(c); 13977 c = nondigit; 13978 goto decode_num; 13979 } 13980 if (seen_e) { 13981 goto decode_num; 13982 } 13983 tokadd(c); 13984 seen_e++; 13985 is_float++; 13986 nondigit = c; 13987 c = nextc(); 13988 if (c != '-' && c != '+') continue; 13989 tokadd(c); 13990 nondigit = c; 13991 break; 13992 13993 case '_': /* `_' in number just ignored */ 13994 if (nondigit) goto decode_num; 13995 nondigit = c; 13996 break; 13997 13998 default: 13999 goto decode_num; 14000 } 14001 c = nextc(); 14002 } 14003 14004 decode_num: 14005 pushback(c); 14006 if (nondigit) { 14007 char tmp[30]; 14008 trailing_uc: 14009 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit); 14010 yyerror(tmp); 14011 } 14012 tokfix(); 14013 if (is_float) { 14014 double d = strtod(tok(), 0); 14015 if (errno == ERANGE) { 14016 rb_warningS("Float %s out of range", tok()); 14017 errno = 0; 14018 } 14019 set_yylval_literal(DBL2NUM(d)); 14020 return tFLOAT; 14021 } 14022 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 14023 return tINTEGER; 14024 } 14025 14026 case ')': 14027 case ']': 14028 paren_nest--; 14029 case '}': 14030 COND_LEXPOP(); 14031 CMDARG_LEXPOP(); 14032 if (c == ')') 14033 lex_state = EXPR_ENDFN; 14034 else 14035 lex_state = EXPR_ENDARG; 14036 if (c == '}') { 14037 if (!brace_nest--) c = tSTRING_DEND; 14038 } 14039 return c; 14040 14041 case ':': 14042 c = nextc(); 14043 if (c == ':') { 14044 if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) { 14045 lex_state = EXPR_BEG; 14046 return tCOLON3; 14047 } 14048 lex_state = EXPR_DOT; 14049 return tCOLON2; 14050 } 14051 if (IS_END() || ISSPACE(c)) { 14052 pushback(c); 14053 warn_balanced(":", "symbol literal"); 14054 lex_state = EXPR_BEG; 14055 return ':'; 14056 } 14057 switch (c) { 14058 case '\'': 14059 lex_strterm = NEW_STRTERM(str_ssym, c, 0); 14060 break; 14061 case '"': 14062 lex_strterm = NEW_STRTERM(str_dsym, c, 0); 14063 break; 14064 default: 14065 pushback(c); 14066 break; 14067 } 14068 lex_state = EXPR_FNAME; 14069 return tSYMBEG; 14070 14071 case '/': 14072 if (IS_lex_state(EXPR_BEG_ANY)) { 14073 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 14074 return tREGEXP_BEG; 14075 } 14076 if ((c = nextc()) == '=') { 14077 set_yylval_id('/'); 14078 lex_state = EXPR_BEG; 14079 return tOP_ASGN; 14080 } 14081 pushback(c); 14082 if (IS_SPCARG(c)) { 14083 (void)arg_ambiguous(); 14084 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 14085 return tREGEXP_BEG; 14086 } 14087 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG; 14088 warn_balanced("/", "regexp literal"); 14089 return '/'; 14090 14091 case '^': 14092 if ((c = nextc()) == '=') { 14093 set_yylval_id('^'); 14094 lex_state = EXPR_BEG; 14095 return tOP_ASGN; 14096 } 14097 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG; 14098 pushback(c); 14099 return '^'; 14100 14101 case ';': 14102 lex_state = EXPR_BEG; 14103 command_start = TRUE; 14104 return ';'; 14105 14106 case ',': 14107 lex_state = EXPR_BEG; 14108 return ','; 14109 14110 case '~': 14111 if (IS_AFTER_OPERATOR()) { 14112 if ((c = nextc()) != '@') { 14113 pushback(c); 14114 } 14115 lex_state = EXPR_ARG; 14116 } 14117 else { 14118 lex_state = EXPR_BEG; 14119 } 14120 return '~'; 14121 14122 case '(': 14123 if (IS_BEG()) { 14124 c = tLPAREN; 14125 } 14126 else if (IS_SPCARG(-1)) { 14127 c = tLPAREN_ARG; 14128 } 14129 paren_nest++; 14130 COND_PUSH(0); 14131 CMDARG_PUSH(0); 14132 lex_state = EXPR_BEG; 14133 return c; 14134 14135 case '[': 14136 paren_nest++; 14137 if (IS_AFTER_OPERATOR()) { 14138 lex_state = EXPR_ARG; 14139 if ((c = nextc()) == ']') { 14140 if ((c = nextc()) == '=') { 14141 return tASET; 14142 } 14143 pushback(c); 14144 return tAREF; 14145 } 14146 pushback(c); 14147 return '['; 14148 } 14149 else if (IS_BEG()) { 14150 c = tLBRACK; 14151 } 14152 else if (IS_ARG() && space_seen) { 14153 c = tLBRACK; 14154 } 14155 lex_state = EXPR_BEG; 14156 COND_PUSH(0); 14157 CMDARG_PUSH(0); 14158 return c; 14159 14160 case '{': 14161 ++brace_nest; 14162 if (lpar_beg && lpar_beg == paren_nest) { 14163 lex_state = EXPR_BEG; 14164 lpar_beg = 0; 14165 --paren_nest; 14166 COND_PUSH(0); 14167 CMDARG_PUSH(0); 14168 return tLAMBEG; 14169 } 14170 if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN)) 14171 c = '{'; /* block (primary) */ 14172 else if (IS_lex_state(EXPR_ENDARG)) 14173 c = tLBRACE_ARG; /* block (expr) */ 14174 else 14175 c = tLBRACE; /* hash */ 14176 COND_PUSH(0); 14177 CMDARG_PUSH(0); 14178 lex_state = EXPR_BEG; 14179 if (c != tLBRACE) command_start = TRUE; 14180 return c; 14181 14182 case '\\': 14183 c = nextc(); 14184 if (c == '\n') { 14185 space_seen = 1; 14186 #ifdef RIPPER 14187 ripper_dispatch_scan_event(parser, tSP); 14188 #endif 14189 goto retry; /* skip \\n */ 14190 } 14191 pushback(c); 14192 return '\\'; 14193 14194 case '%': 14195 if (IS_lex_state(EXPR_BEG_ANY)) { 14196 int term; 14197 int paren; 14198 14199 c = nextc(); 14200 quotation: 14201 if (c == -1 || !ISALNUM(c)) { 14202 term = c; 14203 c = 'Q'; 14204 } 14205 else { 14206 term = nextc(); 14207 if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) { 14208 yyerror("unknown type of %string"); 14209 return 0; 14210 } 14211 } 14212 if (c == -1 || term == -1) { 14213 compile_error(PARSER_ARG "unterminated quoted string meets end of file"); 14214 return 0; 14215 } 14216 paren = term; 14217 if (term == '(') term = ')'; 14218 else if (term == '[') term = ']'; 14219 else if (term == '{') term = '}'; 14220 else if (term == '<') term = '>'; 14221 else paren = 0; 14222 14223 switch (c) { 14224 case 'Q': 14225 lex_strterm = NEW_STRTERM(str_dquote, term, paren); 14226 return tSTRING_BEG; 14227 14228 case 'q': 14229 lex_strterm = NEW_STRTERM(str_squote, term, paren); 14230 return tSTRING_BEG; 14231 14232 case 'W': 14233 lex_strterm = NEW_STRTERM(str_dword, term, paren); 14234 do {c = nextc();} while (ISSPACE(c)); 14235 pushback(c); 14236 return tWORDS_BEG; 14237 14238 case 'w': 14239 lex_strterm = NEW_STRTERM(str_sword, term, paren); 14240 do {c = nextc();} while (ISSPACE(c)); 14241 pushback(c); 14242 return tQWORDS_BEG; 14243 14244 case 'I': 14245 lex_strterm = NEW_STRTERM(str_dword, term, paren); 14246 do {c = nextc();} while (ISSPACE(c)); 14247 pushback(c); 14248 return tSYMBOLS_BEG; 14249 14250 case 'i': 14251 lex_strterm = NEW_STRTERM(str_sword, term, paren); 14252 do {c = nextc();} while (ISSPACE(c)); 14253 pushback(c); 14254 return tQSYMBOLS_BEG; 14255 14256 case 'x': 14257 lex_strterm = NEW_STRTERM(str_xquote, term, paren); 14258 return tXSTRING_BEG; 14259 14260 case 'r': 14261 lex_strterm = NEW_STRTERM(str_regexp, term, paren); 14262 return tREGEXP_BEG; 14263 14264 case 's': 14265 lex_strterm = NEW_STRTERM(str_ssym, term, paren); 14266 lex_state = EXPR_FNAME; 14267 return tSYMBEG; 14268 14269 default: 14270 yyerror("unknown type of %string"); 14271 return 0; 14272 } 14273 } 14274 if ((c = nextc()) == '=') { 14275 set_yylval_id('%'); 14276 lex_state = EXPR_BEG; 14277 return tOP_ASGN; 14278 } 14279 if (IS_SPCARG(c)) { 14280 goto quotation; 14281 } 14282 lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG; 14283 pushback(c); 14284 warn_balanced("%%", "string literal"); 14285 return '%'; 14286 14287 case '$': 14288 lex_state = EXPR_END; 14289 newtok(); 14290 c = nextc(); 14291 switch (c) { 14292 case '_': /* $_: last read line string */ 14293 c = nextc(); 14294 if (parser_is_identchar()) { 14295 tokadd('$'); 14296 tokadd('_'); 14297 break; 14298 } 14299 pushback(c); 14300 c = '_'; 14301 /* fall through */ 14302 case '~': /* $~: match-data */ 14303 case '*': /* $*: argv */ 14304 case '$': /* $$: pid */ 14305 case '?': /* $?: last status */ 14306 case '!': /* $!: error string */ 14307 case '@': /* $@: error position */ 14308 case '/': /* $/: input record separator */ 14309 case '\\': /* $\: output record separator */ 14310 case ';': /* $;: field separator */ 14311 case ',': /* $,: output field separator */ 14312 case '.': /* $.: last read line number */ 14313 case '=': /* $=: ignorecase */ 14314 case ':': /* $:: load path */ 14315 case '<': /* $<: reading filename */ 14316 case '>': /* $>: default output handle */ 14317 case '\"': /* $": already loaded files */ 14318 tokadd('$'); 14319 tokadd(c); 14320 tokfix(); 14321 set_yylval_name(rb_intern(tok())); 14322 return tGVAR; 14323 14324 case '-': 14325 tokadd('$'); 14326 tokadd(c); 14327 c = nextc(); 14328 if (parser_is_identchar()) { 14329 if (tokadd_mbchar(c) == -1) return 0; 14330 } 14331 else { 14332 pushback(c); 14333 } 14334 gvar: 14335 tokfix(); 14336 set_yylval_name(rb_intern(tok())); 14337 return tGVAR; 14338 14339 case '&': /* $&: last match */ 14340 case '`': /* $`: string before last match */ 14341 case '\'': /* $': string after last match */ 14342 case '+': /* $+: string matches last paren. */ 14343 if (IS_lex_state_for(last_state, EXPR_FNAME)) { 14344 tokadd('$'); 14345 tokadd(c); 14346 goto gvar; 14347 } 14348 set_yylval_node(NEW_BACK_REF(c)); 14349 return tBACK_REF; 14350 14351 case '1': case '2': case '3': 14352 case '4': case '5': case '6': 14353 case '7': case '8': case '9': 14354 tokadd('$'); 14355 do { 14356 tokadd(c); 14357 c = nextc(); 14358 } while (c != -1 && ISDIGIT(c)); 14359 pushback(c); 14360 if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar; 14361 tokfix(); 14362 set_yylval_node(NEW_NTH_REF(atoi(tok()+1))); 14363 return tNTH_REF; 14364 14365 default: 14366 if (!parser_is_identchar()) { 14367 pushback(c); 14368 compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c); 14369 return 0; 14370 } 14371 case '0': 14372 tokadd('$'); 14373 } 14374 break; 14375 14376 case '@': 14377 c = nextc(); 14378 newtok(); 14379 tokadd('@'); 14380 if (c == '@') { 14381 tokadd('@'); 14382 c = nextc(); 14383 } 14384 if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) { 14385 pushback(c); 14386 if (tokidx == 1) { 14387 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c); 14388 } 14389 else { 14390 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c); 14391 } 14392 return 0; 14393 } 14394 break; 14395 14396 case '_': 14397 if (was_bol() && whole_match_p("__END__", 7, 0)) { 14398 ruby__end__seen = 1; 14399 parser->eofp = Qtrue; 14400 #ifndef RIPPER 14401 return -1; 14402 #else 14403 lex_goto_eol(parser); 14404 ripper_dispatch_scan_event(parser, k__END__); 14405 return 0; 14406 #endif 14407 } 14408 newtok(); 14409 break; 14410 14411 default: 14412 if (!parser_is_identchar()) { 14413 compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c); 14414 goto retry; 14415 } 14416 14417 newtok(); 14418 break; 14419 } 14420 14421 mb = ENC_CODERANGE_7BIT; 14422 do { 14423 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN; 14424 if (tokadd_mbchar(c) == -1) return 0; 14425 c = nextc(); 14426 } while (parser_is_identchar()); 14427 switch (tok()[0]) { 14428 case '@': case '$': 14429 pushback(c); 14430 break; 14431 default: 14432 if ((c == '!' || c == '?') && !peek('=')) { 14433 tokadd(c); 14434 } 14435 else { 14436 pushback(c); 14437 } 14438 } 14439 tokfix(); 14440 14441 { 14442 int result = 0; 14443 14444 last_state = lex_state; 14445 switch (tok()[0]) { 14446 case '$': 14447 lex_state = EXPR_END; 14448 result = tGVAR; 14449 break; 14450 case '@': 14451 lex_state = EXPR_END; 14452 if (tok()[1] == '@') 14453 result = tCVAR; 14454 else 14455 result = tIVAR; 14456 break; 14457 14458 default: 14459 if (toklast() == '!' || toklast() == '?') { 14460 result = tFID; 14461 } 14462 else { 14463 if (IS_lex_state(EXPR_FNAME)) { 14464 if ((c = nextc()) == '=' && !peek('~') && !peek('>') && 14465 (!peek('=') || (peek_n('>', 1)))) { 14466 result = tIDENTIFIER; 14467 tokadd(c); 14468 tokfix(); 14469 } 14470 else { 14471 pushback(c); 14472 } 14473 } 14474 if (result == 0 && ISUPPER(tok()[0])) { 14475 result = tCONSTANT; 14476 } 14477 else { 14478 result = tIDENTIFIER; 14479 } 14480 } 14481 14482 if (IS_LABEL_POSSIBLE()) { 14483 if (IS_LABEL_SUFFIX(0)) { 14484 lex_state = EXPR_BEG; 14485 nextc(); 14486 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb))); 14487 return tLABEL; 14488 } 14489 } 14490 if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) { 14491 const struct kwtable *kw; 14492 14493 /* See if it is a reserved word. */ 14494 kw = rb_reserved_word(tok(), toklen()); 14495 if (kw) { 14496 enum lex_state_e state = lex_state; 14497 lex_state = kw->state; 14498 if (state == EXPR_FNAME) { 14499 set_yylval_name(rb_intern(kw->name)); 14500 return kw->id[0]; 14501 } 14502 if (lex_state == EXPR_BEG) { 14503 command_start = TRUE; 14504 } 14505 if (kw->id[0] == keyword_do) { 14506 if (lpar_beg && lpar_beg == paren_nest) { 14507 lpar_beg = 0; 14508 --paren_nest; 14509 return keyword_do_LAMBDA; 14510 } 14511 if (COND_P()) return keyword_do_cond; 14512 if (CMDARG_P() && state != EXPR_CMDARG) 14513 return keyword_do_block; 14514 if (state & (EXPR_BEG | EXPR_ENDARG)) 14515 return keyword_do_block; 14516 return keyword_do; 14517 } 14518 if (state & (EXPR_BEG | EXPR_VALUE)) 14519 return kw->id[0]; 14520 else { 14521 if (kw->id[0] != kw->id[1]) 14522 lex_state = EXPR_BEG; 14523 return kw->id[1]; 14524 } 14525 } 14526 } 14527 14528 if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) { 14529 if (cmd_state) { 14530 lex_state = EXPR_CMDARG; 14531 } 14532 else { 14533 lex_state = EXPR_ARG; 14534 } 14535 } 14536 else if (lex_state == EXPR_FNAME) { 14537 lex_state = EXPR_ENDFN; 14538 } 14539 else { 14540 lex_state = EXPR_END; 14541 } 14542 } 14543 { 14544 ID ident = TOK_INTERN(!ENC_SINGLE(mb)); 14545 14546 set_yylval_name(ident); 14547 if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) && 14548 is_local_id(ident) && lvar_defined(ident)) { 14549 lex_state = EXPR_END; 14550 } 14551 } 14552 return result; 14553 } 14554 } 14555 14556 #if YYPURE 14557 static int 14558 yylex(void *lval, void *p) 14559 #else 14560 yylex(void *p) 14561 #endif 14562 { 14563 struct parser_params *parser = (struct parser_params*)p; 14564 int t; 14565 14566 #if YYPURE 14567 parser->parser_yylval = lval; 14568 parser->parser_yylval->val = Qundef; 14569 #endif 14570 t = parser_yylex(parser); 14571 #ifdef RIPPER 14572 if (!NIL_P(parser->delayed)) { 14573 ripper_dispatch_delayed_token(parser, t); 14574 return t; 14575 } 14576 if (t != 0) 14577 ripper_dispatch_scan_event(parser, t); 14578 #endif 14579 14580 return t; 14581 } 14582 14583 #ifndef RIPPER 14584 static NODE* 14585 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2) 14586 { 14587 NODE *n = (rb_node_newnode)(type, a0, a1, a2); 14588 nd_set_line(n, ruby_sourceline); 14589 return n; 14590 } 14591 14592 static enum node_type 14593 nodetype(NODE *node) /* for debug */ 14594 { 14595 return (enum node_type)nd_type(node); 14596 } 14597 14598 static int 14599 nodeline(NODE *node) 14600 { 14601 return nd_line(node); 14602 } 14603 14604 static NODE* 14605 newline_node(NODE *node) 14606 { 14607 if (node) { 14608 node = remove_begin(node); 14609 node->flags |= NODE_FL_NEWLINE; 14610 } 14611 return node; 14612 } 14613 14614 static void 14615 fixpos(NODE *node, NODE *orig) 14616 { 14617 if (!node) return; 14618 if (!orig) return; 14619 if (orig == (NODE*)1) return; 14620 nd_set_line(node, nd_line(orig)); 14621 } 14622 14623 static void 14624 parser_warning(struct parser_params *parser, NODE *node, const char *mesg) 14625 { 14626 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg); 14627 } 14628 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg)) 14629 14630 static void 14631 parser_warn(struct parser_params *parser, NODE *node, const char *mesg) 14632 { 14633 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg); 14634 } 14635 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg)) 14636 14637 static NODE* 14638 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail) 14639 { 14640 NODE *end, *h = head, *nd; 14641 14642 if (tail == 0) return head; 14643 14644 if (h == 0) return tail; 14645 switch (nd_type(h)) { 14646 case NODE_LIT: 14647 case NODE_STR: 14648 case NODE_SELF: 14649 case NODE_TRUE: 14650 case NODE_FALSE: 14651 case NODE_NIL: 14652 parser_warning(h, "unused literal ignored"); 14653 return tail; 14654 default: 14655 h = end = NEW_BLOCK(head); 14656 end->nd_end = end; 14657 fixpos(end, head); 14658 head = end; 14659 break; 14660 case NODE_BLOCK: 14661 end = h->nd_end; 14662 break; 14663 } 14664 14665 nd = end->nd_head; 14666 switch (nd_type(nd)) { 14667 case NODE_RETURN: 14668 case NODE_BREAK: 14669 case NODE_NEXT: 14670 case NODE_REDO: 14671 case NODE_RETRY: 14672 if (RTEST(ruby_verbose)) { 14673 parser_warning(tail, "statement not reached"); 14674 } 14675 break; 14676 14677 default: 14678 break; 14679 } 14680 14681 if (nd_type(tail) != NODE_BLOCK) { 14682 tail = NEW_BLOCK(tail); 14683 tail->nd_end = tail; 14684 } 14685 end->nd_next = tail; 14686 h->nd_end = tail->nd_end; 14687 return head; 14688 } 14689 14690 /* append item to the list */ 14691 static NODE* 14692 list_append_gen(struct parser_params *parser, NODE *list, NODE *item) 14693 { 14694 NODE *last; 14695 14696 if (list == 0) return NEW_LIST(item); 14697 if (list->nd_next) { 14698 last = list->nd_next->nd_end; 14699 } 14700 else { 14701 last = list; 14702 } 14703 14704 list->nd_alen += 1; 14705 last->nd_next = NEW_LIST(item); 14706 list->nd_next->nd_end = last->nd_next; 14707 return list; 14708 } 14709 14710 /* concat two lists */ 14711 static NODE* 14712 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 14713 { 14714 NODE *last; 14715 14716 if (head->nd_next) { 14717 last = head->nd_next->nd_end; 14718 } 14719 else { 14720 last = head; 14721 } 14722 14723 head->nd_alen += tail->nd_alen; 14724 last->nd_next = tail; 14725 if (tail->nd_next) { 14726 head->nd_next->nd_end = tail->nd_next->nd_end; 14727 } 14728 else { 14729 head->nd_next->nd_end = tail; 14730 } 14731 14732 return head; 14733 } 14734 14735 static int 14736 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail) 14737 { 14738 if (NIL_P(tail)) return 1; 14739 if (!rb_enc_compatible(head, tail)) { 14740 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)", 14741 rb_enc_name(rb_enc_get(head)), 14742 rb_enc_name(rb_enc_get(tail))); 14743 rb_str_resize(head, 0); 14744 rb_str_resize(tail, 0); 14745 return 0; 14746 } 14747 rb_str_buf_append(head, tail); 14748 return 1; 14749 } 14750 14751 /* concat two string literals */ 14752 static NODE * 14753 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 14754 { 14755 enum node_type htype; 14756 NODE *headlast; 14757 VALUE lit; 14758 14759 if (!head) return tail; 14760 if (!tail) return head; 14761 14762 htype = nd_type(head); 14763 if (htype == NODE_EVSTR) { 14764 NODE *node = NEW_DSTR(Qnil); 14765 head = list_append(node, head); 14766 htype = NODE_DSTR; 14767 } 14768 switch (nd_type(tail)) { 14769 case NODE_STR: 14770 if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) && 14771 nd_type(headlast) == NODE_STR) { 14772 htype = NODE_STR; 14773 lit = headlast->nd_lit; 14774 } 14775 else { 14776 lit = head->nd_lit; 14777 } 14778 if (htype == NODE_STR) { 14779 if (!literal_concat0(parser, lit, tail->nd_lit)) { 14780 error: 14781 rb_gc_force_recycle((VALUE)head); 14782 rb_gc_force_recycle((VALUE)tail); 14783 return 0; 14784 } 14785 rb_gc_force_recycle((VALUE)tail); 14786 } 14787 else { 14788 list_append(head, tail); 14789 } 14790 break; 14791 14792 case NODE_DSTR: 14793 if (htype == NODE_STR) { 14794 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) 14795 goto error; 14796 tail->nd_lit = head->nd_lit; 14797 rb_gc_force_recycle((VALUE)head); 14798 head = tail; 14799 } 14800 else if (NIL_P(tail->nd_lit)) { 14801 append: 14802 head->nd_alen += tail->nd_alen - 1; 14803 head->nd_next->nd_end->nd_next = tail->nd_next; 14804 head->nd_next->nd_end = tail->nd_next->nd_end; 14805 rb_gc_force_recycle((VALUE)tail); 14806 } 14807 else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) && 14808 nd_type(headlast) == NODE_STR) { 14809 lit = headlast->nd_lit; 14810 if (!literal_concat0(parser, lit, tail->nd_lit)) 14811 goto error; 14812 tail->nd_lit = Qnil; 14813 goto append; 14814 } 14815 else { 14816 nd_set_type(tail, NODE_ARRAY); 14817 tail->nd_head = NEW_STR(tail->nd_lit); 14818 list_concat(head, tail); 14819 } 14820 break; 14821 14822 case NODE_EVSTR: 14823 if (htype == NODE_STR) { 14824 nd_set_type(head, NODE_DSTR); 14825 head->nd_alen = 1; 14826 } 14827 list_append(head, tail); 14828 break; 14829 } 14830 return head; 14831 } 14832 14833 static NODE * 14834 evstr2dstr_gen(struct parser_params *parser, NODE *node) 14835 { 14836 if (nd_type(node) == NODE_EVSTR) { 14837 node = list_append(NEW_DSTR(Qnil), node); 14838 } 14839 return node; 14840 } 14841 14842 static NODE * 14843 new_evstr_gen(struct parser_params *parser, NODE *node) 14844 { 14845 NODE *head = node; 14846 14847 if (node) { 14848 switch (nd_type(node)) { 14849 case NODE_STR: case NODE_DSTR: case NODE_EVSTR: 14850 return node; 14851 } 14852 } 14853 return NEW_EVSTR(head); 14854 } 14855 14856 static NODE * 14857 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1) 14858 { 14859 value_expr(recv); 14860 value_expr(arg1); 14861 return NEW_CALL(recv, id, NEW_LIST(arg1)); 14862 } 14863 14864 static NODE * 14865 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id) 14866 { 14867 value_expr(recv); 14868 return NEW_CALL(recv, id, 0); 14869 } 14870 14871 static NODE* 14872 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2) 14873 { 14874 value_expr(node1); 14875 value_expr(node2); 14876 if (node1) { 14877 switch (nd_type(node1)) { 14878 case NODE_DREGX: 14879 case NODE_DREGX_ONCE: 14880 return NEW_MATCH2(node1, node2); 14881 14882 case NODE_LIT: 14883 if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) { 14884 return NEW_MATCH2(node1, node2); 14885 } 14886 } 14887 } 14888 14889 if (node2) { 14890 switch (nd_type(node2)) { 14891 case NODE_DREGX: 14892 case NODE_DREGX_ONCE: 14893 return NEW_MATCH3(node2, node1); 14894 14895 case NODE_LIT: 14896 if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) { 14897 return NEW_MATCH3(node2, node1); 14898 } 14899 } 14900 } 14901 14902 return NEW_CALL(node1, tMATCH, NEW_LIST(node2)); 14903 } 14904 14905 static NODE* 14906 gettable_gen(struct parser_params *parser, ID id) 14907 { 14908 switch (id) { 14909 case keyword_self: 14910 return NEW_SELF(); 14911 case keyword_nil: 14912 return NEW_NIL(); 14913 case keyword_true: 14914 return NEW_TRUE(); 14915 case keyword_false: 14916 return NEW_FALSE(); 14917 case keyword__FILE__: 14918 return NEW_STR(rb_str_dup(ruby_sourcefile_string)); 14919 case keyword__LINE__: 14920 return NEW_LIT(INT2FIX(tokline)); 14921 case keyword__ENCODING__: 14922 return NEW_LIT(rb_enc_from_encoding(current_enc)); 14923 } 14924 switch (id_type(id)) { 14925 case ID_LOCAL: 14926 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id); 14927 if (local_id(id)) return NEW_LVAR(id); 14928 /* method call without arguments */ 14929 return NEW_VCALL(id); 14930 case ID_GLOBAL: 14931 return NEW_GVAR(id); 14932 case ID_INSTANCE: 14933 return NEW_IVAR(id); 14934 case ID_CONST: 14935 return NEW_CONST(id); 14936 case ID_CLASS: 14937 return NEW_CVAR(id); 14938 } 14939 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); 14940 return 0; 14941 } 14942 #else /* !RIPPER */ 14943 static int 14944 id_is_var_gen(struct parser_params *parser, ID id) 14945 { 14946 if (is_notop_id(id)) { 14947 switch (id & ID_SCOPE_MASK) { 14948 case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS: 14949 return 1; 14950 case ID_LOCAL: 14951 if (dyna_in_block() && dvar_defined(id)) return 1; 14952 if (local_id(id)) return 1; 14953 /* method call without arguments */ 14954 return 0; 14955 } 14956 } 14957 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); 14958 return 0; 14959 } 14960 #endif /* !RIPPER */ 14961 14962 #if PARSER_DEBUG 14963 static const char * 14964 lex_state_name(enum lex_state_e state) 14965 { 14966 static const char names[][12] = { 14967 "EXPR_BEG", "EXPR_END", "EXPR_ENDARG", "EXPR_ENDFN", "EXPR_ARG", 14968 "EXPR_CMDARG", "EXPR_MID", "EXPR_FNAME", "EXPR_DOT", "EXPR_CLASS", 14969 "EXPR_VALUE", 14970 }; 14971 14972 if ((unsigned)state & ~(~0u << EXPR_MAX_STATE)) 14973 return names[ffs(state)]; 14974 return NULL; 14975 } 14976 #endif 14977 14978 #ifdef RIPPER 14979 static VALUE 14980 assignable_gen(struct parser_params *parser, VALUE lhs) 14981 #else 14982 static NODE* 14983 assignable_gen(struct parser_params *parser, ID id, NODE *val) 14984 #endif 14985 { 14986 #ifdef RIPPER 14987 ID id = get_id(lhs); 14988 # define assignable_result(x) get_value(lhs) 14989 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs) 14990 #else 14991 # define assignable_result(x) (x) 14992 #endif 14993 if (!id) return assignable_result(0); 14994 switch (id) { 14995 case keyword_self: 14996 yyerror("Can't change the value of self"); 14997 goto error; 14998 case keyword_nil: 14999 yyerror("Can't assign to nil"); 15000 goto error; 15001 case keyword_true: 15002 yyerror("Can't assign to true"); 15003 goto error; 15004 case keyword_false: 15005 yyerror("Can't assign to false"); 15006 goto error; 15007 case keyword__FILE__: 15008 yyerror("Can't assign to __FILE__"); 15009 goto error; 15010 case keyword__LINE__: 15011 yyerror("Can't assign to __LINE__"); 15012 goto error; 15013 case keyword__ENCODING__: 15014 yyerror("Can't assign to __ENCODING__"); 15015 goto error; 15016 } 15017 switch (id_type(id)) { 15018 case ID_LOCAL: 15019 if (dyna_in_block()) { 15020 if (dvar_curr(id)) { 15021 return assignable_result(NEW_DASGN_CURR(id, val)); 15022 } 15023 else if (dvar_defined(id)) { 15024 return assignable_result(NEW_DASGN(id, val)); 15025 } 15026 else if (local_id(id)) { 15027 return assignable_result(NEW_LASGN(id, val)); 15028 } 15029 else { 15030 dyna_var(id); 15031 return assignable_result(NEW_DASGN_CURR(id, val)); 15032 } 15033 } 15034 else { 15035 if (!local_id(id)) { 15036 local_var(id); 15037 } 15038 return assignable_result(NEW_LASGN(id, val)); 15039 } 15040 break; 15041 case ID_GLOBAL: 15042 return assignable_result(NEW_GASGN(id, val)); 15043 case ID_INSTANCE: 15044 return assignable_result(NEW_IASGN(id, val)); 15045 case ID_CONST: 15046 if (!in_def && !in_single) 15047 return assignable_result(NEW_CDECL(id, val, 0)); 15048 yyerror("dynamic constant assignment"); 15049 break; 15050 case ID_CLASS: 15051 return assignable_result(NEW_CVASGN(id, val)); 15052 default: 15053 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id)); 15054 } 15055 error: 15056 return assignable_result(0); 15057 #undef assignable_result 15058 #undef parser_yyerror 15059 } 15060 15061 static int 15062 is_private_local_id(ID name) 15063 { 15064 VALUE s; 15065 if (name == idUScore) return 1; 15066 if (!is_local_id(name)) return 0; 15067 s = rb_id2str(name); 15068 if (!s) return 0; 15069 return RSTRING_PTR(s)[0] == '_'; 15070 } 15071 15072 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1)) 15073 15074 static ID 15075 shadowing_lvar_gen(struct parser_params *parser, ID name) 15076 { 15077 if (is_private_local_id(name)) return name; 15078 if (dyna_in_block()) { 15079 if (dvar_curr(name)) { 15080 yyerror("duplicated argument name"); 15081 } 15082 else if (dvar_defined_get(name) || local_id(name)) { 15083 rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); 15084 vtable_add(lvtbl->vars, name); 15085 if (lvtbl->used) { 15086 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED); 15087 } 15088 } 15089 } 15090 else { 15091 if (local_id(name)) { 15092 yyerror("duplicated argument name"); 15093 } 15094 } 15095 return name; 15096 } 15097 15098 static void 15099 new_bv_gen(struct parser_params *parser, ID name) 15100 { 15101 if (!name) return; 15102 if (!is_local_id(name)) { 15103 compile_error(PARSER_ARG "invalid local variable - %s", 15104 rb_id2name(name)); 15105 return; 15106 } 15107 shadowing_lvar(name); 15108 dyna_var(name); 15109 } 15110 15111 #ifndef RIPPER 15112 static NODE * 15113 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx) 15114 { 15115 if (recv && nd_type(recv) == NODE_SELF) 15116 recv = (NODE *)1; 15117 return NEW_ATTRASGN(recv, tASET, idx); 15118 } 15119 15120 static void 15121 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2) 15122 { 15123 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) { 15124 compile_error(PARSER_ARG "both block arg and actual block given"); 15125 } 15126 } 15127 15128 static const char id_type_names[][9] = { 15129 "LOCAL", 15130 "INSTANCE", 15131 "", /* INSTANCE2 */ 15132 "GLOBAL", 15133 "ATTRSET", 15134 "CONST", 15135 "CLASS", 15136 "JUNK", 15137 }; 15138 15139 ID 15140 rb_id_attrset(ID id) 15141 { 15142 if (!is_notop_id(id)) { 15143 switch (id) { 15144 case tAREF: case tASET: 15145 return tASET; /* only exception */ 15146 } 15147 rb_name_error(id, "cannot make operator ID :%s attrset", rb_id2name(id)); 15148 } 15149 else { 15150 int scope = (int)(id & ID_SCOPE_MASK); 15151 switch (scope) { 15152 case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL: 15153 case ID_CONST: case ID_CLASS: case ID_JUNK: 15154 break; 15155 case ID_ATTRSET: 15156 return id; 15157 default: 15158 rb_name_error(id, "cannot make %s ID %+"PRIsVALUE" attrset", 15159 id_type_names[scope], ID2SYM(id)); 15160 15161 } 15162 } 15163 id &= ~ID_SCOPE_MASK; 15164 id |= ID_ATTRSET; 15165 return id; 15166 } 15167 15168 static NODE * 15169 attrset_gen(struct parser_params *parser, NODE *recv, ID id) 15170 { 15171 if (recv && nd_type(recv) == NODE_SELF) 15172 recv = (NODE *)1; 15173 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0); 15174 } 15175 15176 static void 15177 rb_backref_error_gen(struct parser_params *parser, NODE *node) 15178 { 15179 switch (nd_type(node)) { 15180 case NODE_NTH_REF: 15181 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth); 15182 break; 15183 case NODE_BACK_REF: 15184 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth); 15185 break; 15186 } 15187 } 15188 15189 static NODE * 15190 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2) 15191 { 15192 if (!node2) return node1; 15193 switch (nd_type(node1)) { 15194 case NODE_BLOCK_PASS: 15195 if (node1->nd_head) 15196 node1->nd_head = arg_concat(node1->nd_head, node2); 15197 else 15198 node1->nd_head = NEW_LIST(node2); 15199 return node1; 15200 case NODE_ARGSPUSH: 15201 if (nd_type(node2) != NODE_ARRAY) break; 15202 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2); 15203 nd_set_type(node1, NODE_ARGSCAT); 15204 return node1; 15205 case NODE_ARGSCAT: 15206 if (nd_type(node2) != NODE_ARRAY || 15207 nd_type(node1->nd_body) != NODE_ARRAY) break; 15208 node1->nd_body = list_concat(node1->nd_body, node2); 15209 return node1; 15210 } 15211 return NEW_ARGSCAT(node1, node2); 15212 } 15213 15214 static NODE * 15215 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2) 15216 { 15217 if (!node1) return NEW_LIST(node2); 15218 switch (nd_type(node1)) { 15219 case NODE_ARRAY: 15220 return list_append(node1, node2); 15221 case NODE_BLOCK_PASS: 15222 node1->nd_head = arg_append(node1->nd_head, node2); 15223 return node1; 15224 case NODE_ARGSPUSH: 15225 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2); 15226 nd_set_type(node1, NODE_ARGSCAT); 15227 return node1; 15228 } 15229 return NEW_ARGSPUSH(node1, node2); 15230 } 15231 15232 static NODE * 15233 splat_array(NODE* node) 15234 { 15235 if (nd_type(node) == NODE_SPLAT) node = node->nd_head; 15236 if (nd_type(node) == NODE_ARRAY) return node; 15237 return 0; 15238 } 15239 15240 static NODE * 15241 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs) 15242 { 15243 if (!lhs) return 0; 15244 15245 switch (nd_type(lhs)) { 15246 case NODE_GASGN: 15247 case NODE_IASGN: 15248 case NODE_IASGN2: 15249 case NODE_LASGN: 15250 case NODE_DASGN: 15251 case NODE_DASGN_CURR: 15252 case NODE_MASGN: 15253 case NODE_CDECL: 15254 case NODE_CVASGN: 15255 lhs->nd_value = rhs; 15256 break; 15257 15258 case NODE_ATTRASGN: 15259 case NODE_CALL: 15260 lhs->nd_args = arg_append(lhs->nd_args, rhs); 15261 break; 15262 15263 default: 15264 /* should not happen */ 15265 break; 15266 } 15267 15268 return lhs; 15269 } 15270 15271 static int 15272 value_expr_gen(struct parser_params *parser, NODE *node) 15273 { 15274 int cond = 0; 15275 15276 if (!node) { 15277 rb_warning0("empty expression"); 15278 } 15279 while (node) { 15280 switch (nd_type(node)) { 15281 case NODE_DEFN: 15282 case NODE_DEFS: 15283 parser_warning(node, "void value expression"); 15284 return FALSE; 15285 15286 case NODE_RETURN: 15287 case NODE_BREAK: 15288 case NODE_NEXT: 15289 case NODE_REDO: 15290 case NODE_RETRY: 15291 if (!cond) yyerror("void value expression"); 15292 /* or "control never reach"? */ 15293 return FALSE; 15294 15295 case NODE_BLOCK: 15296 while (node->nd_next) { 15297 node = node->nd_next; 15298 } 15299 node = node->nd_head; 15300 break; 15301 15302 case NODE_BEGIN: 15303 node = node->nd_body; 15304 break; 15305 15306 case NODE_IF: 15307 if (!node->nd_body) { 15308 node = node->nd_else; 15309 break; 15310 } 15311 else if (!node->nd_else) { 15312 node = node->nd_body; 15313 break; 15314 } 15315 if (!value_expr(node->nd_body)) return FALSE; 15316 node = node->nd_else; 15317 break; 15318 15319 case NODE_AND: 15320 case NODE_OR: 15321 cond = 1; 15322 node = node->nd_2nd; 15323 break; 15324 15325 default: 15326 return TRUE; 15327 } 15328 } 15329 15330 return TRUE; 15331 } 15332 15333 static void 15334 void_expr_gen(struct parser_params *parser, NODE *node) 15335 { 15336 const char *useless = 0; 15337 15338 if (!RTEST(ruby_verbose)) return; 15339 15340 if (!node) return; 15341 switch (nd_type(node)) { 15342 case NODE_CALL: 15343 switch (node->nd_mid) { 15344 case '+': 15345 case '-': 15346 case '*': 15347 case '/': 15348 case '%': 15349 case tPOW: 15350 case tUPLUS: 15351 case tUMINUS: 15352 case '|': 15353 case '^': 15354 case '&': 15355 case tCMP: 15356 case '>': 15357 case tGEQ: 15358 case '<': 15359 case tLEQ: 15360 case tEQ: 15361 case tNEQ: 15362 useless = rb_id2name(node->nd_mid); 15363 break; 15364 } 15365 break; 15366 15367 case NODE_LVAR: 15368 case NODE_DVAR: 15369 case NODE_GVAR: 15370 case NODE_IVAR: 15371 case NODE_CVAR: 15372 case NODE_NTH_REF: 15373 case NODE_BACK_REF: 15374 useless = "a variable"; 15375 break; 15376 case NODE_CONST: 15377 useless = "a constant"; 15378 break; 15379 case NODE_LIT: 15380 case NODE_STR: 15381 case NODE_DSTR: 15382 case NODE_DREGX: 15383 case NODE_DREGX_ONCE: 15384 useless = "a literal"; 15385 break; 15386 case NODE_COLON2: 15387 case NODE_COLON3: 15388 useless = "::"; 15389 break; 15390 case NODE_DOT2: 15391 useless = ".."; 15392 break; 15393 case NODE_DOT3: 15394 useless = "..."; 15395 break; 15396 case NODE_SELF: 15397 useless = "self"; 15398 break; 15399 case NODE_NIL: 15400 useless = "nil"; 15401 break; 15402 case NODE_TRUE: 15403 useless = "true"; 15404 break; 15405 case NODE_FALSE: 15406 useless = "false"; 15407 break; 15408 case NODE_DEFINED: 15409 useless = "defined?"; 15410 break; 15411 } 15412 15413 if (useless) { 15414 int line = ruby_sourceline; 15415 15416 ruby_sourceline = nd_line(node); 15417 rb_warnS("possibly useless use of %s in void context", useless); 15418 ruby_sourceline = line; 15419 } 15420 } 15421 15422 static void 15423 void_stmts_gen(struct parser_params *parser, NODE *node) 15424 { 15425 if (!RTEST(ruby_verbose)) return; 15426 if (!node) return; 15427 if (nd_type(node) != NODE_BLOCK) return; 15428 15429 for (;;) { 15430 if (!node->nd_next) return; 15431 void_expr0(node->nd_head); 15432 node = node->nd_next; 15433 } 15434 } 15435 15436 static NODE * 15437 remove_begin(NODE *node) 15438 { 15439 NODE **n = &node, *n1 = node; 15440 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) { 15441 *n = n1 = n1->nd_body; 15442 } 15443 return node; 15444 } 15445 15446 static void 15447 reduce_nodes_gen(struct parser_params *parser, NODE **body) 15448 { 15449 NODE *node = *body; 15450 15451 if (!node) { 15452 *body = NEW_NIL(); 15453 return; 15454 } 15455 #define subnodes(n1, n2) \ 15456 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \ 15457 (!node->n2) ? (body = &node->n1, 1) : \ 15458 (reduce_nodes(&node->n1), body = &node->n2, 1)) 15459 15460 while (node) { 15461 int newline = (int)(node->flags & NODE_FL_NEWLINE); 15462 switch (nd_type(node)) { 15463 end: 15464 case NODE_NIL: 15465 *body = 0; 15466 return; 15467 case NODE_RETURN: 15468 *body = node = node->nd_stts; 15469 if (newline && node) node->flags |= NODE_FL_NEWLINE; 15470 continue; 15471 case NODE_BEGIN: 15472 *body = node = node->nd_body; 15473 if (newline && node) node->flags |= NODE_FL_NEWLINE; 15474 continue; 15475 case NODE_BLOCK: 15476 body = &node->nd_end->nd_head; 15477 break; 15478 case NODE_IF: 15479 if (subnodes(nd_body, nd_else)) break; 15480 return; 15481 case NODE_CASE: 15482 body = &node->nd_body; 15483 break; 15484 case NODE_WHEN: 15485 if (!subnodes(nd_body, nd_next)) goto end; 15486 break; 15487 case NODE_ENSURE: 15488 if (!subnodes(nd_head, nd_resq)) goto end; 15489 break; 15490 case NODE_RESCUE: 15491 if (node->nd_else) { 15492 body = &node->nd_resq; 15493 break; 15494 } 15495 if (!subnodes(nd_head, nd_resq)) goto end; 15496 break; 15497 default: 15498 return; 15499 } 15500 node = *body; 15501 if (newline && node) node->flags |= NODE_FL_NEWLINE; 15502 } 15503 15504 #undef subnodes 15505 } 15506 15507 static int 15508 is_static_content(NODE *node) 15509 { 15510 if (!node) return 1; 15511 switch (nd_type(node)) { 15512 case NODE_HASH: 15513 if (!(node = node->nd_head)) break; 15514 case NODE_ARRAY: 15515 do { 15516 if (!is_static_content(node->nd_head)) return 0; 15517 } while ((node = node->nd_next) != 0); 15518 case NODE_LIT: 15519 case NODE_STR: 15520 case NODE_NIL: 15521 case NODE_TRUE: 15522 case NODE_FALSE: 15523 case NODE_ZARRAY: 15524 break; 15525 default: 15526 return 0; 15527 } 15528 return 1; 15529 } 15530 15531 static int 15532 assign_in_cond(struct parser_params *parser, NODE *node) 15533 { 15534 switch (nd_type(node)) { 15535 case NODE_MASGN: 15536 yyerror("multiple assignment in conditional"); 15537 return 1; 15538 15539 case NODE_LASGN: 15540 case NODE_DASGN: 15541 case NODE_DASGN_CURR: 15542 case NODE_GASGN: 15543 case NODE_IASGN: 15544 break; 15545 15546 default: 15547 return 0; 15548 } 15549 15550 if (!node->nd_value) return 1; 15551 if (is_static_content(node->nd_value)) { 15552 /* reports always */ 15553 parser_warn(node->nd_value, "found = in conditional, should be =="); 15554 } 15555 return 1; 15556 } 15557 15558 static void 15559 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 15560 { 15561 if (!e_option_supplied(parser)) parser_warn(node, str); 15562 } 15563 15564 static void 15565 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 15566 { 15567 if (!e_option_supplied(parser)) parser_warning(node, str); 15568 } 15569 15570 static void 15571 fixup_nodes(NODE **rootnode) 15572 { 15573 NODE *node, *next, *head; 15574 15575 for (node = *rootnode; node; node = next) { 15576 enum node_type type; 15577 VALUE val; 15578 15579 next = node->nd_next; 15580 head = node->nd_head; 15581 rb_gc_force_recycle((VALUE)node); 15582 *rootnode = next; 15583 switch (type = nd_type(head)) { 15584 case NODE_DOT2: 15585 case NODE_DOT3: 15586 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit, 15587 type == NODE_DOT3); 15588 rb_gc_force_recycle((VALUE)head->nd_beg); 15589 rb_gc_force_recycle((VALUE)head->nd_end); 15590 nd_set_type(head, NODE_LIT); 15591 head->nd_lit = val; 15592 break; 15593 default: 15594 break; 15595 } 15596 } 15597 } 15598 15599 static NODE *cond0(struct parser_params*,NODE*); 15600 15601 static NODE* 15602 range_op(struct parser_params *parser, NODE *node) 15603 { 15604 enum node_type type; 15605 15606 if (node == 0) return 0; 15607 15608 type = nd_type(node); 15609 value_expr(node); 15610 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) { 15611 warn_unless_e_option(parser, node, "integer literal in conditional range"); 15612 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$.")))); 15613 } 15614 return cond0(parser, node); 15615 } 15616 15617 static int 15618 literal_node(NODE *node) 15619 { 15620 if (!node) return 1; /* same as NODE_NIL */ 15621 switch (nd_type(node)) { 15622 case NODE_LIT: 15623 case NODE_STR: 15624 case NODE_DSTR: 15625 case NODE_EVSTR: 15626 case NODE_DREGX: 15627 case NODE_DREGX_ONCE: 15628 case NODE_DSYM: 15629 return 2; 15630 case NODE_TRUE: 15631 case NODE_FALSE: 15632 case NODE_NIL: 15633 return 1; 15634 } 15635 return 0; 15636 } 15637 15638 static NODE* 15639 cond0(struct parser_params *parser, NODE *node) 15640 { 15641 if (node == 0) return 0; 15642 assign_in_cond(parser, node); 15643 15644 switch (nd_type(node)) { 15645 case NODE_DSTR: 15646 case NODE_EVSTR: 15647 case NODE_STR: 15648 rb_warn0("string literal in condition"); 15649 break; 15650 15651 case NODE_DREGX: 15652 case NODE_DREGX_ONCE: 15653 warning_unless_e_option(parser, node, "regex literal in condition"); 15654 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_"))); 15655 15656 case NODE_AND: 15657 case NODE_OR: 15658 node->nd_1st = cond0(parser, node->nd_1st); 15659 node->nd_2nd = cond0(parser, node->nd_2nd); 15660 break; 15661 15662 case NODE_DOT2: 15663 case NODE_DOT3: 15664 node->nd_beg = range_op(parser, node->nd_beg); 15665 node->nd_end = range_op(parser, node->nd_end); 15666 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2); 15667 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3); 15668 if (!e_option_supplied(parser)) { 15669 int b = literal_node(node->nd_beg); 15670 int e = literal_node(node->nd_end); 15671 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) { 15672 parser_warn(node, "range literal in condition"); 15673 } 15674 } 15675 break; 15676 15677 case NODE_DSYM: 15678 parser_warning(node, "literal in condition"); 15679 break; 15680 15681 case NODE_LIT: 15682 if (RB_TYPE_P(node->nd_lit, T_REGEXP)) { 15683 warn_unless_e_option(parser, node, "regex literal in condition"); 15684 nd_set_type(node, NODE_MATCH); 15685 } 15686 else { 15687 parser_warning(node, "literal in condition"); 15688 } 15689 default: 15690 break; 15691 } 15692 return node; 15693 } 15694 15695 static NODE* 15696 cond_gen(struct parser_params *parser, NODE *node) 15697 { 15698 if (node == 0) return 0; 15699 return cond0(parser, node); 15700 } 15701 15702 static NODE* 15703 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right) 15704 { 15705 value_expr(left); 15706 if (left && (enum node_type)nd_type(left) == type) { 15707 NODE *node = left, *second; 15708 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) { 15709 node = second; 15710 } 15711 node->nd_2nd = NEW_NODE(type, second, right, 0); 15712 return left; 15713 } 15714 return NEW_NODE(type, left, right, 0); 15715 } 15716 15717 static void 15718 no_blockarg(struct parser_params *parser, NODE *node) 15719 { 15720 if (node && nd_type(node) == NODE_BLOCK_PASS) { 15721 compile_error(PARSER_ARG "block argument should not be given"); 15722 } 15723 } 15724 15725 static NODE * 15726 ret_args_gen(struct parser_params *parser, NODE *node) 15727 { 15728 if (node) { 15729 no_blockarg(parser, node); 15730 if (nd_type(node) == NODE_ARRAY) { 15731 if (node->nd_next == 0) { 15732 node = node->nd_head; 15733 } 15734 else { 15735 nd_set_type(node, NODE_VALUES); 15736 } 15737 } 15738 } 15739 return node; 15740 } 15741 15742 static NODE * 15743 new_yield_gen(struct parser_params *parser, NODE *node) 15744 { 15745 if (node) no_blockarg(parser, node); 15746 15747 return NEW_YIELD(node); 15748 } 15749 15750 static NODE* 15751 negate_lit(NODE *node) 15752 { 15753 switch (TYPE(node->nd_lit)) { 15754 case T_FIXNUM: 15755 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit)); 15756 break; 15757 case T_BIGNUM: 15758 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0); 15759 break; 15760 case T_FLOAT: 15761 #if USE_FLONUM 15762 if (FLONUM_P(node->nd_lit)) { 15763 node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit)); 15764 } 15765 else { 15766 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit); 15767 } 15768 #else 15769 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit); 15770 #endif 15771 break; 15772 default: 15773 break; 15774 } 15775 return node; 15776 } 15777 15778 static NODE * 15779 arg_blk_pass(NODE *node1, NODE *node2) 15780 { 15781 if (node2) { 15782 node2->nd_head = node1; 15783 return node2; 15784 } 15785 return node1; 15786 } 15787 15788 15789 static NODE* 15790 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail) 15791 { 15792 int saved_line = ruby_sourceline; 15793 struct rb_args_info *args = tail->nd_ainfo; 15794 15795 args->pre_args_num = m ? rb_long2int(m->nd_plen) : 0; 15796 args->pre_init = m ? m->nd_next : 0; 15797 15798 args->post_args_num = p ? rb_long2int(p->nd_plen) : 0; 15799 args->post_init = p ? p->nd_next : 0; 15800 args->first_post_arg = p ? p->nd_pid : 0; 15801 15802 args->rest_arg = r; 15803 15804 args->opt_args = o; 15805 15806 ruby_sourceline = saved_line; 15807 15808 return tail; 15809 } 15810 15811 static NODE* 15812 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b) 15813 { 15814 int saved_line = ruby_sourceline; 15815 struct rb_args_info *args; 15816 NODE *kw_rest_arg = 0; 15817 NODE *node; 15818 15819 args = ALLOC(struct rb_args_info); 15820 MEMZERO(args, struct rb_args_info, 1); 15821 node = NEW_NODE(NODE_ARGS, 0, 0, args); 15822 15823 args->block_arg = b; 15824 args->kw_args = k; 15825 if (k && !kr) kr = internal_id(); 15826 if (kr) { 15827 arg_var(kr); 15828 kw_rest_arg = NEW_DVAR(kr); 15829 } 15830 args->kw_rest_arg = kw_rest_arg; 15831 15832 ruby_sourceline = saved_line; 15833 return node; 15834 } 15835 15836 static NODE* 15837 dsym_node_gen(struct parser_params *parser, NODE *node) 15838 { 15839 VALUE lit; 15840 15841 if (!node) { 15842 return NEW_LIT(ID2SYM(idNULL)); 15843 } 15844 15845 switch (nd_type(node)) { 15846 case NODE_DSTR: 15847 nd_set_type(node, NODE_DSYM); 15848 break; 15849 case NODE_STR: 15850 lit = node->nd_lit; 15851 node->nd_lit = ID2SYM(rb_intern_str(lit)); 15852 nd_set_type(node, NODE_LIT); 15853 break; 15854 default: 15855 node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node)); 15856 break; 15857 } 15858 return node; 15859 } 15860 #endif /* !RIPPER */ 15861 15862 #ifndef RIPPER 15863 static NODE * 15864 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs) 15865 { 15866 NODE *asgn; 15867 15868 if (lhs) { 15869 ID vid = lhs->nd_vid; 15870 if (op == tOROP) { 15871 lhs->nd_value = rhs; 15872 asgn = NEW_OP_ASGN_OR(gettable(vid), lhs); 15873 if (is_asgn_or_id(vid)) { 15874 asgn->nd_aid = vid; 15875 } 15876 } 15877 else if (op == tANDOP) { 15878 lhs->nd_value = rhs; 15879 asgn = NEW_OP_ASGN_AND(gettable(vid), lhs); 15880 } 15881 else { 15882 asgn = lhs; 15883 asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs)); 15884 } 15885 } 15886 else { 15887 asgn = NEW_BEGIN(0); 15888 } 15889 return asgn; 15890 } 15891 15892 static NODE * 15893 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs) 15894 { 15895 NODE *asgn; 15896 15897 if (op == tOROP) { 15898 op = 0; 15899 } 15900 else if (op == tANDOP) { 15901 op = 1; 15902 } 15903 asgn = NEW_OP_ASGN2(lhs, attr, op, rhs); 15904 fixpos(asgn, lhs); 15905 return asgn; 15906 } 15907 15908 static NODE * 15909 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs) 15910 { 15911 NODE *asgn; 15912 15913 if (op == tOROP) { 15914 op = 0; 15915 } 15916 else if (op == tANDOP) { 15917 op = 1; 15918 } 15919 if (lhs) { 15920 asgn = NEW_OP_CDECL(lhs, op, rhs); 15921 } 15922 else { 15923 asgn = NEW_BEGIN(0); 15924 } 15925 fixpos(asgn, lhs); 15926 return asgn; 15927 } 15928 #else 15929 static VALUE 15930 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs) 15931 { 15932 return dispatch3(opassign, lhs, op, rhs); 15933 } 15934 15935 static VALUE 15936 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs) 15937 { 15938 VALUE recv = dispatch3(field, lhs, type, attr); 15939 return dispatch3(opassign, recv, op, rhs); 15940 } 15941 #endif 15942 15943 static void 15944 warn_unused_var(struct parser_params *parser, struct local_vars *local) 15945 { 15946 int i, cnt; 15947 ID *v, *u; 15948 15949 if (!local->used) return; 15950 v = local->vars->tbl; 15951 u = local->used->tbl; 15952 cnt = local->used->pos; 15953 if (cnt != local->vars->pos) { 15954 rb_bug("local->used->pos != local->vars->pos"); 15955 } 15956 for (i = 0; i < cnt; ++i) { 15957 if (!v[i] || (u[i] & LVAR_USED)) continue; 15958 if (is_private_local_id(v[i])) continue; 15959 rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i])); 15960 } 15961 } 15962 15963 static void 15964 local_push_gen(struct parser_params *parser, int inherit_dvars) 15965 { 15966 struct local_vars *local; 15967 15968 local = ALLOC(struct local_vars); 15969 local->prev = lvtbl; 15970 local->args = vtable_alloc(0); 15971 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE); 15972 local->used = !(inherit_dvars && 15973 (ifndef_ripper(compile_for_eval || e_option_supplied(parser))+0)) && 15974 RTEST(ruby_verbose) ? vtable_alloc(0) : 0; 15975 local->cmdargs = cmdarg_stack; 15976 cmdarg_stack = 0; 15977 lvtbl = local; 15978 } 15979 15980 static void 15981 local_pop_gen(struct parser_params *parser) 15982 { 15983 struct local_vars *local = lvtbl->prev; 15984 if (lvtbl->used) { 15985 warn_unused_var(parser, lvtbl); 15986 vtable_free(lvtbl->used); 15987 } 15988 vtable_free(lvtbl->args); 15989 vtable_free(lvtbl->vars); 15990 cmdarg_stack = lvtbl->cmdargs; 15991 xfree(lvtbl); 15992 lvtbl = local; 15993 } 15994 15995 #ifndef RIPPER 15996 static ID* 15997 local_tbl_gen(struct parser_params *parser) 15998 { 15999 int cnt_args = vtable_size(lvtbl->args); 16000 int cnt_vars = vtable_size(lvtbl->vars); 16001 int cnt = cnt_args + cnt_vars; 16002 int i, j; 16003 ID *buf; 16004 16005 if (cnt <= 0) return 0; 16006 buf = ALLOC_N(ID, cnt + 1); 16007 MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args); 16008 /* remove IDs duplicated to warn shadowing */ 16009 for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) { 16010 ID id = lvtbl->vars->tbl[i]; 16011 if (!vtable_included(lvtbl->args, id)) { 16012 buf[j++] = id; 16013 } 16014 } 16015 if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1); 16016 buf[0] = cnt; 16017 return buf; 16018 } 16019 #endif 16020 16021 static int 16022 arg_var_gen(struct parser_params *parser, ID id) 16023 { 16024 vtable_add(lvtbl->args, id); 16025 return vtable_size(lvtbl->args) - 1; 16026 } 16027 16028 static int 16029 local_var_gen(struct parser_params *parser, ID id) 16030 { 16031 vtable_add(lvtbl->vars, id); 16032 if (lvtbl->used) { 16033 vtable_add(lvtbl->used, (ID)ruby_sourceline); 16034 } 16035 return vtable_size(lvtbl->vars) - 1; 16036 } 16037 16038 static int 16039 local_id_gen(struct parser_params *parser, ID id) 16040 { 16041 struct vtable *vars, *args, *used; 16042 16043 vars = lvtbl->vars; 16044 args = lvtbl->args; 16045 used = lvtbl->used; 16046 16047 while (vars && POINTER_P(vars->prev)) { 16048 vars = vars->prev; 16049 args = args->prev; 16050 if (used) used = used->prev; 16051 } 16052 16053 if (vars && vars->prev == DVARS_INHERIT) { 16054 return rb_local_defined(id); 16055 } 16056 else if (vtable_included(args, id)) { 16057 return 1; 16058 } 16059 else { 16060 int i = vtable_included(vars, id); 16061 if (i && used) used->tbl[i-1] |= LVAR_USED; 16062 return i != 0; 16063 } 16064 } 16065 16066 static const struct vtable * 16067 dyna_push_gen(struct parser_params *parser) 16068 { 16069 lvtbl->args = vtable_alloc(lvtbl->args); 16070 lvtbl->vars = vtable_alloc(lvtbl->vars); 16071 if (lvtbl->used) { 16072 lvtbl->used = vtable_alloc(lvtbl->used); 16073 } 16074 return lvtbl->args; 16075 } 16076 16077 static void 16078 dyna_pop_1(struct parser_params *parser) 16079 { 16080 struct vtable *tmp; 16081 16082 if ((tmp = lvtbl->used) != 0) { 16083 warn_unused_var(parser, lvtbl); 16084 lvtbl->used = lvtbl->used->prev; 16085 vtable_free(tmp); 16086 } 16087 tmp = lvtbl->args; 16088 lvtbl->args = lvtbl->args->prev; 16089 vtable_free(tmp); 16090 tmp = lvtbl->vars; 16091 lvtbl->vars = lvtbl->vars->prev; 16092 vtable_free(tmp); 16093 } 16094 16095 static void 16096 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs) 16097 { 16098 while (lvtbl->args != lvargs) { 16099 dyna_pop_1(parser); 16100 if (!lvtbl->args) { 16101 struct local_vars *local = lvtbl->prev; 16102 xfree(lvtbl); 16103 lvtbl = local; 16104 } 16105 } 16106 dyna_pop_1(parser); 16107 } 16108 16109 static int 16110 dyna_in_block_gen(struct parser_params *parser) 16111 { 16112 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE; 16113 } 16114 16115 static int 16116 dvar_defined_gen(struct parser_params *parser, ID id, int get) 16117 { 16118 struct vtable *vars, *args, *used; 16119 int i; 16120 16121 args = lvtbl->args; 16122 vars = lvtbl->vars; 16123 used = lvtbl->used; 16124 16125 while (POINTER_P(vars)) { 16126 if (vtable_included(args, id)) { 16127 return 1; 16128 } 16129 if ((i = vtable_included(vars, id)) != 0) { 16130 if (used) used->tbl[i-1] |= LVAR_USED; 16131 return 1; 16132 } 16133 args = args->prev; 16134 vars = vars->prev; 16135 if (get) used = 0; 16136 if (used) used = used->prev; 16137 } 16138 16139 if (vars == DVARS_INHERIT) { 16140 return rb_dvar_defined(id); 16141 } 16142 16143 return 0; 16144 } 16145 16146 static int 16147 dvar_curr_gen(struct parser_params *parser, ID id) 16148 { 16149 return (vtable_included(lvtbl->args, id) || 16150 vtable_included(lvtbl->vars, id)); 16151 } 16152 16153 #ifndef RIPPER 16154 static void 16155 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options) 16156 { 16157 int c = RE_OPTION_ENCODING_IDX(options); 16158 16159 if (c) { 16160 int opt, idx; 16161 rb_char_to_option_kcode(c, &opt, &idx); 16162 if (idx != ENCODING_GET(str) && 16163 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 16164 goto error; 16165 } 16166 ENCODING_SET(str, idx); 16167 } 16168 else if (RE_OPTION_ENCODING_NONE(options)) { 16169 if (!ENCODING_IS_ASCII8BIT(str) && 16170 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 16171 c = 'n'; 16172 goto error; 16173 } 16174 rb_enc_associate(str, rb_ascii8bit_encoding()); 16175 } 16176 else if (current_enc == rb_usascii_encoding()) { 16177 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 16178 /* raise in re.c */ 16179 rb_enc_associate(str, rb_usascii_encoding()); 16180 } 16181 else { 16182 rb_enc_associate(str, rb_ascii8bit_encoding()); 16183 } 16184 } 16185 return; 16186 16187 error: 16188 compile_error(PARSER_ARG 16189 "regexp encoding option '%c' differs from source encoding '%s'", 16190 c, rb_enc_name(rb_enc_get(str))); 16191 } 16192 16193 static int 16194 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options) 16195 { 16196 VALUE err; 16197 reg_fragment_setenc(str, options); 16198 err = rb_reg_check_preprocess(str); 16199 if (err != Qnil) { 16200 err = rb_obj_as_string(err); 16201 compile_error(PARSER_ARG "%s", RSTRING_PTR(err)); 16202 RB_GC_GUARD(err); 16203 return 0; 16204 } 16205 return 1; 16206 } 16207 16208 typedef struct { 16209 struct parser_params* parser; 16210 rb_encoding *enc; 16211 NODE *succ_block; 16212 NODE *fail_block; 16213 int num; 16214 } reg_named_capture_assign_t; 16215 16216 static int 16217 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, 16218 int back_num, int *back_refs, OnigRegex regex, void *arg0) 16219 { 16220 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0; 16221 struct parser_params* parser = arg->parser; 16222 rb_encoding *enc = arg->enc; 16223 long len = name_end - name; 16224 const char *s = (const char *)name; 16225 ID var; 16226 16227 arg->num++; 16228 16229 if (arg->succ_block == 0) { 16230 arg->succ_block = NEW_BEGIN(0); 16231 arg->fail_block = NEW_BEGIN(0); 16232 } 16233 16234 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) || 16235 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) || 16236 !rb_enc_symname2_p(s, len, enc)) { 16237 return ST_CONTINUE; 16238 } 16239 var = rb_intern3(s, len, enc); 16240 if (dvar_defined(var) || local_id(var)) { 16241 rb_warningS("named capture conflicts a local variable - %s", 16242 rb_id2name(var)); 16243 } 16244 arg->succ_block = block_append(arg->succ_block, 16245 newline_node(node_assign(assignable(var,0), 16246 NEW_CALL( 16247 gettable(rb_intern("$~")), 16248 idAREF, 16249 NEW_LIST(NEW_LIT(ID2SYM(var)))) 16250 ))); 16251 arg->fail_block = block_append(arg->fail_block, 16252 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil)))); 16253 return ST_CONTINUE; 16254 } 16255 16256 static NODE * 16257 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match) 16258 { 16259 reg_named_capture_assign_t arg; 16260 16261 arg.parser = parser; 16262 arg.enc = rb_enc_get(regexp); 16263 arg.succ_block = 0; 16264 arg.fail_block = 0; 16265 arg.num = 0; 16266 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg); 16267 16268 if (arg.num == 0) 16269 return match; 16270 16271 return 16272 block_append( 16273 newline_node(match), 16274 NEW_IF(gettable(rb_intern("$~")), 16275 block_append( 16276 newline_node(arg.succ_block), 16277 newline_node( 16278 NEW_CALL( 16279 gettable(rb_intern("$~")), 16280 rb_intern("begin"), 16281 NEW_LIST(NEW_LIT(INT2FIX(0)))))), 16282 block_append( 16283 newline_node(arg.fail_block), 16284 newline_node( 16285 NEW_LIT(Qnil))))); 16286 } 16287 16288 static VALUE 16289 reg_compile_gen(struct parser_params* parser, VALUE str, int options) 16290 { 16291 VALUE re; 16292 VALUE err; 16293 16294 reg_fragment_setenc(str, options); 16295 err = rb_errinfo(); 16296 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline); 16297 if (NIL_P(re)) { 16298 ID mesg = rb_intern("mesg"); 16299 VALUE m = rb_attr_get(rb_errinfo(), mesg); 16300 rb_set_errinfo(err); 16301 if (!NIL_P(err)) { 16302 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m); 16303 } 16304 else { 16305 compile_error(PARSER_ARG "%s", RSTRING_PTR(m)); 16306 } 16307 return Qnil; 16308 } 16309 return re; 16310 } 16311 16312 void 16313 rb_gc_mark_parser(void) 16314 { 16315 } 16316 16317 NODE* 16318 rb_parser_append_print(VALUE vparser, NODE *node) 16319 { 16320 NODE *prelude = 0; 16321 NODE *scope = node; 16322 struct parser_params *parser; 16323 16324 if (!node) return node; 16325 16326 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 16327 16328 node = node->nd_body; 16329 16330 if (nd_type(node) == NODE_PRELUDE) { 16331 prelude = node; 16332 node = node->nd_body; 16333 } 16334 16335 node = block_append(node, 16336 NEW_FCALL(rb_intern("print"), 16337 NEW_ARRAY(NEW_GVAR(rb_intern("$_"))))); 16338 if (prelude) { 16339 prelude->nd_body = node; 16340 scope->nd_body = prelude; 16341 } 16342 else { 16343 scope->nd_body = node; 16344 } 16345 16346 return scope; 16347 } 16348 16349 NODE * 16350 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split) 16351 { 16352 NODE *prelude = 0; 16353 NODE *scope = node; 16354 struct parser_params *parser; 16355 16356 if (!node) return node; 16357 16358 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 16359 16360 node = node->nd_body; 16361 16362 if (nd_type(node) == NODE_PRELUDE) { 16363 prelude = node; 16364 node = node->nd_body; 16365 } 16366 if (split) { 16367 node = block_append(NEW_GASGN(rb_intern("$F"), 16368 NEW_CALL(NEW_GVAR(rb_intern("$_")), 16369 rb_intern("split"), 0)), 16370 node); 16371 } 16372 if (chop) { 16373 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")), 16374 rb_intern("chop!"), 0), node); 16375 } 16376 16377 node = NEW_OPT_N(node); 16378 16379 if (prelude) { 16380 prelude->nd_body = node; 16381 scope->nd_body = prelude; 16382 } 16383 else { 16384 scope->nd_body = node; 16385 } 16386 16387 return scope; 16388 } 16389 16390 static const struct { 16391 ID token; 16392 const char *name; 16393 } op_tbl[] = { 16394 {tDOT2, ".."}, 16395 {tDOT3, "..."}, 16396 {tPOW, "**"}, 16397 {tDSTAR, "**"}, 16398 {tUPLUS, "+@"}, 16399 {tUMINUS, "-@"}, 16400 {tCMP, "<=>"}, 16401 {tGEQ, ">="}, 16402 {tLEQ, "<="}, 16403 {tEQ, "=="}, 16404 {tEQQ, "==="}, 16405 {tNEQ, "!="}, 16406 {tMATCH, "=~"}, 16407 {tNMATCH, "!~"}, 16408 {tAREF, "[]"}, 16409 {tASET, "[]="}, 16410 {tLSHFT, "<<"}, 16411 {tRSHFT, ">>"}, 16412 {tCOLON2, "::"}, 16413 }; 16414 16415 #define op_tbl_count numberof(op_tbl) 16416 16417 #ifndef ENABLE_SELECTOR_NAMESPACE 16418 #define ENABLE_SELECTOR_NAMESPACE 0 16419 #endif 16420 16421 static struct symbols { 16422 ID last_id; 16423 st_table *sym_id; 16424 st_table *id_str; 16425 #if ENABLE_SELECTOR_NAMESPACE 16426 st_table *ivar2_id; 16427 st_table *id_ivar2; 16428 #endif 16429 VALUE op_sym[tLAST_OP_ID]; 16430 } global_symbols = {tLAST_TOKEN}; 16431 16432 static const struct st_hash_type symhash = { 16433 rb_str_hash_cmp, 16434 rb_str_hash, 16435 }; 16436 16437 #if ENABLE_SELECTOR_NAMESPACE 16438 struct ivar2_key { 16439 ID id; 16440 VALUE klass; 16441 }; 16442 16443 static int 16444 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2) 16445 { 16446 if (key1->id == key2->id && key1->klass == key2->klass) { 16447 return 0; 16448 } 16449 return 1; 16450 } 16451 16452 static int 16453 ivar2_hash(struct ivar2_key *key) 16454 { 16455 return (key->id << 8) ^ (key->klass >> 2); 16456 } 16457 16458 static const struct st_hash_type ivar2_hash_type = { 16459 ivar2_cmp, 16460 ivar2_hash, 16461 }; 16462 #endif 16463 16464 void 16465 Init_sym(void) 16466 { 16467 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000); 16468 global_symbols.id_str = st_init_numtable_with_size(1000); 16469 #if ENABLE_SELECTOR_NAMESPACE 16470 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000); 16471 global_symbols.id_ivar2 = st_init_numtable_with_size(1000); 16472 #endif 16473 16474 (void)nodetype; 16475 (void)nodeline; 16476 #if PARSER_DEBUG 16477 (void)lex_state_name(-1); 16478 #endif 16479 16480 Init_id(); 16481 } 16482 16483 void 16484 rb_gc_mark_symbols(void) 16485 { 16486 rb_mark_tbl(global_symbols.id_str); 16487 rb_gc_mark_locations(global_symbols.op_sym, 16488 global_symbols.op_sym + numberof(global_symbols.op_sym)); 16489 } 16490 #endif /* !RIPPER */ 16491 16492 static ID 16493 internal_id_gen(struct parser_params *parser) 16494 { 16495 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars); 16496 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1; 16497 return ID_INTERNAL | (id << ID_SCOPE_SHIFT); 16498 } 16499 16500 #ifndef RIPPER 16501 static int 16502 is_special_global_name(const char *m, const char *e, rb_encoding *enc) 16503 { 16504 int mb = 0; 16505 16506 if (m >= e) return 0; 16507 if (is_global_name_punct(*m)) { 16508 ++m; 16509 } 16510 else if (*m == '-') { 16511 ++m; 16512 if (m < e && is_identchar(m, e, enc)) { 16513 if (!ISASCII(*m)) mb = 1; 16514 m += rb_enc_mbclen(m, e, enc); 16515 } 16516 } 16517 else { 16518 if (!rb_enc_isdigit(*m, enc)) return 0; 16519 do { 16520 if (!ISASCII(*m)) mb = 1; 16521 ++m; 16522 } while (m < e && rb_enc_isdigit(*m, enc)); 16523 } 16524 return m == e ? mb + 1 : 0; 16525 } 16526 16527 int 16528 rb_symname_p(const char *name) 16529 { 16530 return rb_enc_symname_p(name, rb_ascii8bit_encoding()); 16531 } 16532 16533 int 16534 rb_enc_symname_p(const char *name, rb_encoding *enc) 16535 { 16536 return rb_enc_symname2_p(name, strlen(name), enc); 16537 } 16538 16539 #define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST)) 16540 #define IDSET_ATTRSET_FOR_INTERN (~(~0U<<(1<<ID_SCOPE_SHIFT)) & ~(1U<<ID_ATTRSET)) 16541 16542 static int 16543 rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_atttset) 16544 { 16545 const char *m = name; 16546 const char *e = m + len; 16547 int type = ID_JUNK; 16548 16549 if (!m || len <= 0) return -1; 16550 switch (*m) { 16551 case '\0': 16552 return -1; 16553 16554 case '$': 16555 type = ID_GLOBAL; 16556 if (is_special_global_name(++m, e, enc)) return type; 16557 goto id; 16558 16559 case '@': 16560 type = ID_INSTANCE; 16561 if (*++m == '@') { 16562 ++m; 16563 type = ID_CLASS; 16564 } 16565 goto id; 16566 16567 case '<': 16568 switch (*++m) { 16569 case '<': ++m; break; 16570 case '=': if (*++m == '>') ++m; break; 16571 default: break; 16572 } 16573 break; 16574 16575 case '>': 16576 switch (*++m) { 16577 case '>': case '=': ++m; break; 16578 } 16579 break; 16580 16581 case '=': 16582 switch (*++m) { 16583 case '~': ++m; break; 16584 case '=': if (*++m == '=') ++m; break; 16585 default: return -1; 16586 } 16587 break; 16588 16589 case '*': 16590 if (*++m == '*') ++m; 16591 break; 16592 16593 case '+': case '-': 16594 if (*++m == '@') ++m; 16595 break; 16596 16597 case '|': case '^': case '&': case '/': case '%': case '~': case '`': 16598 ++m; 16599 break; 16600 16601 case '[': 16602 if (*++m != ']') return -1; 16603 if (*++m == '=') ++m; 16604 break; 16605 16606 case '!': 16607 if (len == 1) return ID_JUNK; 16608 switch (*++m) { 16609 case '=': case '~': ++m; break; 16610 default: return -1; 16611 } 16612 break; 16613 16614 default: 16615 type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL; 16616 id: 16617 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m))) 16618 return -1; 16619 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc); 16620 if (m >= e) break; 16621 switch (*m) { 16622 case '!': case '?': 16623 if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1; 16624 type = ID_JUNK; 16625 ++m; 16626 if (m + 1 < e || *m != '=') break; 16627 /* fall through */ 16628 case '=': 16629 if (!(allowed_atttset & (1U << type))) return -1; 16630 type = ID_ATTRSET; 16631 ++m; 16632 break; 16633 } 16634 break; 16635 } 16636 return m == e ? type : -1; 16637 } 16638 16639 int 16640 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc) 16641 { 16642 return rb_enc_symname_type(name, len, enc, IDSET_ATTRSET_FOR_SYNTAX) != -1; 16643 } 16644 16645 static int 16646 rb_str_symname_type(VALUE name, unsigned int allowed_atttset) 16647 { 16648 const char *ptr = StringValuePtr(name); 16649 long len = RSTRING_LEN(name); 16650 int type = rb_enc_symname_type(ptr, len, rb_enc_get(name), allowed_atttset); 16651 RB_GC_GUARD(name); 16652 return type; 16653 } 16654 16655 static ID 16656 register_symid(ID id, const char *name, long len, rb_encoding *enc) 16657 { 16658 VALUE str = rb_enc_str_new(name, len, enc); 16659 return register_symid_str(id, str); 16660 } 16661 16662 static ID 16663 register_symid_str(ID id, VALUE str) 16664 { 16665 OBJ_FREEZE(str); 16666 st_add_direct(global_symbols.sym_id, (st_data_t)str, id); 16667 st_add_direct(global_symbols.id_str, id, (st_data_t)str); 16668 return id; 16669 } 16670 16671 static int 16672 sym_check_asciionly(VALUE str) 16673 { 16674 if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE; 16675 switch (rb_enc_str_coderange(str)) { 16676 case ENC_CODERANGE_BROKEN: 16677 rb_raise(rb_eEncodingError, "invalid encoding symbol"); 16678 case ENC_CODERANGE_7BIT: 16679 return TRUE; 16680 } 16681 return FALSE; 16682 } 16683 16684 /* 16685 * _str_ itself will be registered at the global symbol table. _str_ 16686 * can be modified before the registration, since the encoding will be 16687 * set to ASCII-8BIT if it is a special global name. 16688 */ 16689 static ID intern_str(VALUE str); 16690 16691 ID 16692 rb_intern3(const char *name, long len, rb_encoding *enc) 16693 { 16694 VALUE str; 16695 st_data_t data; 16696 struct RString fake_str; 16697 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED; 16698 fake_str.basic.klass = rb_cString; 16699 fake_str.as.heap.len = len; 16700 fake_str.as.heap.ptr = (char *)name; 16701 fake_str.as.heap.aux.capa = len; 16702 str = (VALUE)&fake_str; 16703 rb_enc_associate(str, enc); 16704 OBJ_FREEZE(str); 16705 16706 if (st_lookup(global_symbols.sym_id, str, &data)) 16707 return (ID)data; 16708 16709 str = rb_enc_str_new(name, len, enc); /* make true string */ 16710 return intern_str(str); 16711 } 16712 16713 static ID 16714 intern_str(VALUE str) 16715 { 16716 const char *name, *m, *e; 16717 long len, last; 16718 rb_encoding *enc, *symenc; 16719 unsigned char c; 16720 ID id; 16721 int mb; 16722 16723 RSTRING_GETMEM(str, name, len); 16724 m = name; 16725 e = m + len; 16726 enc = rb_enc_get(str); 16727 symenc = enc; 16728 16729 if (!len || (rb_cString && !rb_enc_asciicompat(enc))) { 16730 junk: 16731 id = ID_JUNK; 16732 goto new_id; 16733 } 16734 last = len-1; 16735 id = 0; 16736 switch (*m) { 16737 case '$': 16738 if (len < 2) goto junk; 16739 id |= ID_GLOBAL; 16740 if ((mb = is_special_global_name(++m, e, enc)) != 0) { 16741 if (!--mb) symenc = rb_usascii_encoding(); 16742 goto new_id; 16743 } 16744 break; 16745 case '@': 16746 if (m[1] == '@') { 16747 if (len < 3) goto junk; 16748 m++; 16749 id |= ID_CLASS; 16750 } 16751 else { 16752 if (len < 2) goto junk; 16753 id |= ID_INSTANCE; 16754 } 16755 m++; 16756 break; 16757 default: 16758 c = m[0]; 16759 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) { 16760 /* operators */ 16761 int i; 16762 16763 if (len == 1) { 16764 id = c; 16765 goto id_register; 16766 } 16767 for (i = 0; i < op_tbl_count; i++) { 16768 if (*op_tbl[i].name == *m && 16769 strcmp(op_tbl[i].name, m) == 0) { 16770 id = op_tbl[i].token; 16771 goto id_register; 16772 } 16773 } 16774 } 16775 break; 16776 } 16777 if (name[last] == '=') { 16778 /* attribute assignment */ 16779 if (last > 1 && name[last-1] == '=') 16780 goto junk; 16781 id = rb_intern3(name, last, enc); 16782 if (id > tLAST_OP_ID && !is_attrset_id(id)) { 16783 enc = rb_enc_get(rb_id2str(id)); 16784 id = rb_id_attrset(id); 16785 goto id_register; 16786 } 16787 id = ID_ATTRSET; 16788 } 16789 else if (id == 0) { 16790 if (rb_enc_isupper(m[0], enc)) { 16791 id = ID_CONST; 16792 } 16793 else { 16794 id = ID_LOCAL; 16795 } 16796 } 16797 if (!rb_enc_isdigit(*m, enc)) { 16798 while (m <= name + last && is_identchar(m, e, enc)) { 16799 if (ISASCII(*m)) { 16800 m++; 16801 } 16802 else { 16803 m += rb_enc_mbclen(m, e, enc); 16804 } 16805 } 16806 } 16807 if (id != ID_ATTRSET && m - name < len) id = ID_JUNK; 16808 if (sym_check_asciionly(str)) symenc = rb_usascii_encoding(); 16809 new_id: 16810 if (symenc != enc) rb_enc_associate(str, symenc); 16811 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) { 16812 if (len > 20) { 16813 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)", 16814 name); 16815 } 16816 else { 16817 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)", 16818 (int)len, name); 16819 } 16820 } 16821 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT; 16822 id_register: 16823 return register_symid_str(id, str); 16824 } 16825 16826 ID 16827 rb_intern2(const char *name, long len) 16828 { 16829 return rb_intern3(name, len, rb_usascii_encoding()); 16830 } 16831 16832 #undef rb_intern 16833 ID 16834 rb_intern(const char *name) 16835 { 16836 return rb_intern2(name, strlen(name)); 16837 } 16838 16839 ID 16840 rb_intern_str(VALUE str) 16841 { 16842 st_data_t id; 16843 16844 if (st_lookup(global_symbols.sym_id, str, &id)) 16845 return (ID)id; 16846 return intern_str(rb_str_dup(str)); 16847 } 16848 16849 VALUE 16850 rb_id2str(ID id) 16851 { 16852 st_data_t data; 16853 16854 if (id < tLAST_TOKEN) { 16855 int i = 0; 16856 16857 if (id < INT_MAX && rb_ispunct((int)id)) { 16858 VALUE str = global_symbols.op_sym[i = (int)id]; 16859 if (!str) { 16860 char name[2]; 16861 name[0] = (char)id; 16862 name[1] = 0; 16863 str = rb_usascii_str_new(name, 1); 16864 OBJ_FREEZE(str); 16865 global_symbols.op_sym[i] = str; 16866 } 16867 return str; 16868 } 16869 for (i = 0; i < op_tbl_count; i++) { 16870 if (op_tbl[i].token == id) { 16871 VALUE str = global_symbols.op_sym[i]; 16872 if (!str) { 16873 str = rb_usascii_str_new2(op_tbl[i].name); 16874 OBJ_FREEZE(str); 16875 global_symbols.op_sym[i] = str; 16876 } 16877 return str; 16878 } 16879 } 16880 } 16881 16882 if (st_lookup(global_symbols.id_str, id, &data)) { 16883 VALUE str = (VALUE)data; 16884 if (RBASIC(str)->klass == 0) 16885 RBASIC(str)->klass = rb_cString; 16886 return str; 16887 } 16888 16889 if (is_attrset_id(id)) { 16890 ID id_stem = (id & ~ID_SCOPE_MASK); 16891 VALUE str; 16892 16893 do { 16894 if (!!(str = rb_id2str(id_stem | ID_LOCAL))) break; 16895 if (!!(str = rb_id2str(id_stem | ID_CONST))) break; 16896 if (!!(str = rb_id2str(id_stem | ID_INSTANCE))) break; 16897 if (!!(str = rb_id2str(id_stem | ID_GLOBAL))) break; 16898 if (!!(str = rb_id2str(id_stem | ID_CLASS))) break; 16899 if (!!(str = rb_id2str(id_stem | ID_JUNK))) break; 16900 return 0; 16901 } while (0); 16902 str = rb_str_dup(str); 16903 rb_str_cat(str, "=", 1); 16904 register_symid_str(id, str); 16905 if (st_lookup(global_symbols.id_str, id, &data)) { 16906 VALUE str = (VALUE)data; 16907 if (RBASIC(str)->klass == 0) 16908 RBASIC(str)->klass = rb_cString; 16909 return str; 16910 } 16911 } 16912 return 0; 16913 } 16914 16915 const char * 16916 rb_id2name(ID id) 16917 { 16918 VALUE str = rb_id2str(id); 16919 16920 if (!str) return 0; 16921 return RSTRING_PTR(str); 16922 } 16923 16924 static int 16925 symbols_i(VALUE sym, ID value, VALUE ary) 16926 { 16927 rb_ary_push(ary, ID2SYM(value)); 16928 return ST_CONTINUE; 16929 } 16930 16931 /* 16932 * call-seq: 16933 * Symbol.all_symbols => array 16934 * 16935 * Returns an array of all the symbols currently in Ruby's symbol 16936 * table. 16937 * 16938 * Symbol.all_symbols.size #=> 903 16939 * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink, 16940 * :chown, :EOFError, :$;, :String, 16941 * :LOCK_SH, :"setuid?", :$<, 16942 * :default_proc, :compact, :extend, 16943 * :Tms, :getwd, :$=, :ThreadGroup, 16944 * :wait2, :$>] 16945 */ 16946 16947 VALUE 16948 rb_sym_all_symbols(void) 16949 { 16950 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries); 16951 16952 st_foreach(global_symbols.sym_id, symbols_i, ary); 16953 return ary; 16954 } 16955 16956 int 16957 rb_is_const_id(ID id) 16958 { 16959 return is_const_id(id); 16960 } 16961 16962 int 16963 rb_is_class_id(ID id) 16964 { 16965 return is_class_id(id); 16966 } 16967 16968 int 16969 rb_is_global_id(ID id) 16970 { 16971 return is_global_id(id); 16972 } 16973 16974 int 16975 rb_is_instance_id(ID id) 16976 { 16977 return is_instance_id(id); 16978 } 16979 16980 int 16981 rb_is_attrset_id(ID id) 16982 { 16983 return is_attrset_id(id); 16984 } 16985 16986 int 16987 rb_is_local_id(ID id) 16988 { 16989 return is_local_id(id); 16990 } 16991 16992 int 16993 rb_is_junk_id(ID id) 16994 { 16995 return is_junk_id(id); 16996 } 16997 17009 ID 17010 rb_check_id(volatile VALUE *namep) 17011 { 17012 st_data_t id; 17013 VALUE tmp; 17014 VALUE name = *namep; 17015 17016 if (SYMBOL_P(name)) { 17017 return SYM2ID(name); 17018 } 17019 else if (!RB_TYPE_P(name, T_STRING)) { 17020 tmp = rb_check_string_type(name); 17021 if (NIL_P(tmp)) { 17022 tmp = rb_inspect(name); 17023 rb_raise(rb_eTypeError, "%s is not a symbol", 17024 RSTRING_PTR(tmp)); 17025 } 17026 name = tmp; 17027 *namep = name; 17028 } 17029 17030 sym_check_asciionly(name); 17031 17032 if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) 17033 return (ID)id; 17034 17035 if (rb_is_attrset_name(name)) { 17036 struct RString fake_str; 17037 const VALUE localname = (VALUE)&fake_str; 17038 /* make local name by chopping '=' */ 17039 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED; 17040 fake_str.basic.klass = rb_cString; 17041 fake_str.as.heap.len = RSTRING_LEN(name) - 1; 17042 fake_str.as.heap.ptr = RSTRING_PTR(name); 17043 fake_str.as.heap.aux.capa = fake_str.as.heap.len; 17044 rb_enc_copy(localname, name); 17045 OBJ_FREEZE(localname); 17046 17047 if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) { 17048 return rb_id_attrset((ID)id); 17049 } 17050 RB_GC_GUARD(name); 17051 } 17052 17053 return (ID)0; 17054 } 17055 17056 ID 17057 rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc) 17058 { 17059 st_data_t id; 17060 struct RString fake_str; 17061 const VALUE name = (VALUE)&fake_str; 17062 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED; 17063 fake_str.basic.klass = rb_cString; 17064 fake_str.as.heap.len = len; 17065 fake_str.as.heap.ptr = (char *)ptr; 17066 fake_str.as.heap.aux.capa = len; 17067 rb_enc_associate(name, enc); 17068 17069 sym_check_asciionly(name); 17070 17071 if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) 17072 return (ID)id; 17073 17074 if (rb_is_attrset_name(name)) { 17075 fake_str.as.heap.len = len - 1; 17076 if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) { 17077 return rb_id_attrset((ID)id); 17078 } 17079 } 17080 17081 return (ID)0; 17082 } 17083 17084 int 17085 rb_is_const_name(VALUE name) 17086 { 17087 return rb_str_symname_type(name, 0) == ID_CONST; 17088 } 17089 17090 int 17091 rb_is_class_name(VALUE name) 17092 { 17093 return rb_str_symname_type(name, 0) == ID_CLASS; 17094 } 17095 17096 int 17097 rb_is_global_name(VALUE name) 17098 { 17099 return rb_str_symname_type(name, 0) == ID_GLOBAL; 17100 } 17101 17102 int 17103 rb_is_instance_name(VALUE name) 17104 { 17105 return rb_str_symname_type(name, 0) == ID_INSTANCE; 17106 } 17107 17108 int 17109 rb_is_attrset_name(VALUE name) 17110 { 17111 return rb_str_symname_type(name, IDSET_ATTRSET_FOR_INTERN) == ID_ATTRSET; 17112 } 17113 17114 int 17115 rb_is_local_name(VALUE name) 17116 { 17117 return rb_str_symname_type(name, 0) == ID_LOCAL; 17118 } 17119 17120 int 17121 rb_is_method_name(VALUE name) 17122 { 17123 switch (rb_str_symname_type(name, 0)) { 17124 case ID_LOCAL: case ID_ATTRSET: case ID_JUNK: 17125 return TRUE; 17126 } 17127 return FALSE; 17128 } 17129 17130 int 17131 rb_is_junk_name(VALUE name) 17132 { 17133 return rb_str_symname_type(name, IDSET_ATTRSET_FOR_SYNTAX) == -1; 17134 } 17135 17136 #endif /* !RIPPER */ 17137 17138 static void 17139 parser_initialize(struct parser_params *parser) 17140 { 17141 parser->eofp = Qfalse; 17142 17143 parser->parser_lex_strterm = 0; 17144 parser->parser_cond_stack = 0; 17145 parser->parser_cmdarg_stack = 0; 17146 parser->parser_class_nest = 0; 17147 parser->parser_paren_nest = 0; 17148 parser->parser_lpar_beg = 0; 17149 parser->parser_brace_nest = 0; 17150 parser->parser_in_single = 0; 17151 parser->parser_in_def = 0; 17152 parser->parser_in_defined = 0; 17153 parser->parser_compile_for_eval = 0; 17154 parser->parser_cur_mid = 0; 17155 parser->parser_tokenbuf = NULL; 17156 parser->parser_tokidx = 0; 17157 parser->parser_toksiz = 0; 17158 parser->parser_heredoc_end = 0; 17159 parser->parser_command_start = TRUE; 17160 parser->parser_deferred_nodes = 0; 17161 parser->parser_lex_pbeg = 0; 17162 parser->parser_lex_p = 0; 17163 parser->parser_lex_pend = 0; 17164 parser->parser_lvtbl = 0; 17165 parser->parser_ruby__end__seen = 0; 17166 parser->parser_ruby_sourcefile = 0; 17167 parser->parser_ruby_sourcefile_string = Qnil; 17168 #ifndef RIPPER 17169 parser->is_ripper = 0; 17170 parser->parser_eval_tree_begin = 0; 17171 parser->parser_eval_tree = 0; 17172 #else 17173 parser->is_ripper = 1; 17174 parser->delayed = Qnil; 17175 17176 parser->result = Qnil; 17177 parser->parsing_thread = Qnil; 17178 parser->toplevel_p = TRUE; 17179 #endif 17180 #ifdef YYMALLOC 17181 parser->heap = NULL; 17182 #endif 17183 parser->enc = rb_utf8_encoding(); 17184 } 17185 17186 #ifdef RIPPER 17187 #define parser_mark ripper_parser_mark 17188 #define parser_free ripper_parser_free 17189 #endif 17190 17191 static void 17192 parser_mark(void *ptr) 17193 { 17194 struct parser_params *p = (struct parser_params*)ptr; 17195 17196 rb_gc_mark((VALUE)p->parser_lex_strterm); 17197 rb_gc_mark((VALUE)p->parser_deferred_nodes); 17198 rb_gc_mark(p->parser_lex_input); 17199 rb_gc_mark(p->parser_lex_lastline); 17200 rb_gc_mark(p->parser_lex_nextline); 17201 rb_gc_mark(p->parser_ruby_sourcefile_string); 17202 #ifndef RIPPER 17203 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ; 17204 rb_gc_mark((VALUE)p->parser_eval_tree) ; 17205 rb_gc_mark(p->debug_lines); 17206 #else 17207 rb_gc_mark(p->delayed); 17208 rb_gc_mark(p->value); 17209 rb_gc_mark(p->result); 17210 rb_gc_mark(p->parsing_thread); 17211 #endif 17212 #ifdef YYMALLOC 17213 rb_gc_mark((VALUE)p->heap); 17214 #endif 17215 } 17216 17217 static void 17218 parser_free(void *ptr) 17219 { 17220 struct parser_params *p = (struct parser_params*)ptr; 17221 struct local_vars *local, *prev; 17222 17223 if (p->parser_tokenbuf) { 17224 xfree(p->parser_tokenbuf); 17225 } 17226 for (local = p->parser_lvtbl; local; local = prev) { 17227 if (local->vars) xfree(local->vars); 17228 prev = local->prev; 17229 xfree(local); 17230 } 17231 xfree(p); 17232 } 17233 17234 static size_t 17235 parser_memsize(const void *ptr) 17236 { 17237 struct parser_params *p = (struct parser_params*)ptr; 17238 struct local_vars *local; 17239 size_t size = sizeof(*p); 17240 17241 if (!ptr) return 0; 17242 size += p->parser_toksiz; 17243 for (local = p->parser_lvtbl; local; local = local->prev) { 17244 size += sizeof(*local); 17245 if (local->vars) size += local->vars->capa * sizeof(ID); 17246 } 17247 return size; 17248 } 17249 17250 static 17251 #ifndef RIPPER 17252 const 17253 #endif 17254 rb_data_type_t parser_data_type = { 17255 "parser", 17256 { 17257 parser_mark, 17258 parser_free, 17259 parser_memsize, 17260 }, 17261 }; 17262 17263 #ifndef RIPPER 17264 #undef rb_reserved_word 17265 17266 const struct kwtable * 17267 rb_reserved_word(const char *str, unsigned int len) 17268 { 17269 return reserved_word(str, len); 17270 } 17271 17272 static struct parser_params * 17273 parser_new(void) 17274 { 17275 struct parser_params *p; 17276 17277 p = ALLOC_N(struct parser_params, 1); 17278 MEMZERO(p, struct parser_params, 1); 17279 parser_initialize(p); 17280 return p; 17281 } 17282 17283 VALUE 17284 rb_parser_new(void) 17285 { 17286 struct parser_params *p = parser_new(); 17287 17288 return TypedData_Wrap_Struct(0, &parser_data_type, p); 17289 } 17290 17291 /* 17292 * call-seq: 17293 * ripper#end_seen? -> Boolean 17294 * 17295 * Return true if parsed source ended by +\_\_END\_\_+. 17296 */ 17297 VALUE 17298 rb_parser_end_seen_p(VALUE vparser) 17299 { 17300 struct parser_params *parser; 17301 17302 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 17303 return ruby__end__seen ? Qtrue : Qfalse; 17304 } 17305 17306 /* 17307 * call-seq: 17308 * ripper#encoding -> encoding 17309 * 17310 * Return encoding of the source. 17311 */ 17312 VALUE 17313 rb_parser_encoding(VALUE vparser) 17314 { 17315 struct parser_params *parser; 17316 17317 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 17318 return rb_enc_from_encoding(current_enc); 17319 } 17320 17321 /* 17322 * call-seq: 17323 * ripper.yydebug -> true or false 17324 * 17325 * Get yydebug. 17326 */ 17327 VALUE 17328 rb_parser_get_yydebug(VALUE self) 17329 { 17330 struct parser_params *parser; 17331 17332 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 17333 return yydebug ? Qtrue : Qfalse; 17334 } 17335 17336 /* 17337 * call-seq: 17338 * ripper.yydebug = flag 17339 * 17340 * Set yydebug. 17341 */ 17342 VALUE 17343 rb_parser_set_yydebug(VALUE self, VALUE flag) 17344 { 17345 struct parser_params *parser; 17346 17347 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 17348 yydebug = RTEST(flag); 17349 return flag; 17350 } 17351 17352 #ifdef YYMALLOC 17353 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE)) 17354 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0) 17355 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \ 17356 (n)->u3.cnt = (c), (p)) 17357 17358 void * 17359 rb_parser_malloc(struct parser_params *parser, size_t size) 17360 { 17361 size_t cnt = HEAPCNT(1, size); 17362 NODE *n = NEWHEAP(); 17363 void *ptr = xmalloc(size); 17364 17365 return ADD2HEAP(n, cnt, ptr); 17366 } 17367 17368 void * 17369 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size) 17370 { 17371 size_t cnt = HEAPCNT(nelem, size); 17372 NODE *n = NEWHEAP(); 17373 void *ptr = xcalloc(nelem, size); 17374 17375 return ADD2HEAP(n, cnt, ptr); 17376 } 17377 17378 void * 17379 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size) 17380 { 17381 NODE *n; 17382 size_t cnt = HEAPCNT(1, size); 17383 17384 if (ptr && (n = parser->heap) != NULL) { 17385 do { 17386 if (n->u1.node == ptr) { 17387 n->u1.node = ptr = xrealloc(ptr, size); 17388 if (n->u3.cnt) n->u3.cnt = cnt; 17389 return ptr; 17390 } 17391 } while ((n = n->u2.node) != NULL); 17392 } 17393 n = NEWHEAP(); 17394 ptr = xrealloc(ptr, size); 17395 return ADD2HEAP(n, cnt, ptr); 17396 } 17397 17398 void 17399 rb_parser_free(struct parser_params *parser, void *ptr) 17400 { 17401 NODE **prev = &parser->heap, *n; 17402 17403 while ((n = *prev) != NULL) { 17404 if (n->u1.node == ptr) { 17405 *prev = n->u2.node; 17406 rb_gc_force_recycle((VALUE)n); 17407 break; 17408 } 17409 prev = &n->u2.node; 17410 } 17411 xfree(ptr); 17412 } 17413 #endif 17414 #endif 17415 17416 #ifdef RIPPER 17417 #ifdef RIPPER_DEBUG 17418 extern int rb_is_pointer_to_heap(VALUE); 17419 17420 /* :nodoc: */ 17421 static VALUE 17422 ripper_validate_object(VALUE self, VALUE x) 17423 { 17424 if (x == Qfalse) return x; 17425 if (x == Qtrue) return x; 17426 if (x == Qnil) return x; 17427 if (x == Qundef) 17428 rb_raise(rb_eArgError, "Qundef given"); 17429 if (FIXNUM_P(x)) return x; 17430 if (SYMBOL_P(x)) return x; 17431 if (!rb_is_pointer_to_heap(x)) 17432 rb_raise(rb_eArgError, "invalid pointer: %p", x); 17433 switch (TYPE(x)) { 17434 case T_STRING: 17435 case T_OBJECT: 17436 case T_ARRAY: 17437 case T_BIGNUM: 17438 case T_FLOAT: 17439 return x; 17440 case T_NODE: 17441 if (nd_type(x) != NODE_LASGN) { 17442 rb_raise(rb_eArgError, "NODE given: %p", x); 17443 } 17444 return ((NODE *)x)->nd_rval; 17445 default: 17446 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)", 17447 x, rb_obj_classname(x)); 17448 } 17449 return x; 17450 } 17451 #endif 17452 17453 #define validate(x) ((x) = get_value(x)) 17454 17455 static VALUE 17456 ripper_dispatch0(struct parser_params *parser, ID mid) 17457 { 17458 return rb_funcall(parser->value, mid, 0); 17459 } 17460 17461 static VALUE 17462 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a) 17463 { 17464 validate(a); 17465 return rb_funcall(parser->value, mid, 1, a); 17466 } 17467 17468 static VALUE 17469 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b) 17470 { 17471 validate(a); 17472 validate(b); 17473 return rb_funcall(parser->value, mid, 2, a, b); 17474 } 17475 17476 static VALUE 17477 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c) 17478 { 17479 validate(a); 17480 validate(b); 17481 validate(c); 17482 return rb_funcall(parser->value, mid, 3, a, b, c); 17483 } 17484 17485 static VALUE 17486 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d) 17487 { 17488 validate(a); 17489 validate(b); 17490 validate(c); 17491 validate(d); 17492 return rb_funcall(parser->value, mid, 4, a, b, c, d); 17493 } 17494 17495 static VALUE 17496 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e) 17497 { 17498 validate(a); 17499 validate(b); 17500 validate(c); 17501 validate(d); 17502 validate(e); 17503 return rb_funcall(parser->value, mid, 5, a, b, c, d, e); 17504 } 17505 17506 static VALUE 17507 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g) 17508 { 17509 validate(a); 17510 validate(b); 17511 validate(c); 17512 validate(d); 17513 validate(e); 17514 validate(f); 17515 validate(g); 17516 return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g); 17517 } 17518 17519 static const struct kw_assoc { 17520 ID id; 17521 const char *name; 17522 } keyword_to_name[] = { 17523 {keyword_class, "class"}, 17524 {keyword_module, "module"}, 17525 {keyword_def, "def"}, 17526 {keyword_undef, "undef"}, 17527 {keyword_begin, "begin"}, 17528 {keyword_rescue, "rescue"}, 17529 {keyword_ensure, "ensure"}, 17530 {keyword_end, "end"}, 17531 {keyword_if, "if"}, 17532 {keyword_unless, "unless"}, 17533 {keyword_then, "then"}, 17534 {keyword_elsif, "elsif"}, 17535 {keyword_else, "else"}, 17536 {keyword_case, "case"}, 17537 {keyword_when, "when"}, 17538 {keyword_while, "while"}, 17539 {keyword_until, "until"}, 17540 {keyword_for, "for"}, 17541 {keyword_break, "break"}, 17542 {keyword_next, "next"}, 17543 {keyword_redo, "redo"}, 17544 {keyword_retry, "retry"}, 17545 {keyword_in, "in"}, 17546 {keyword_do, "do"}, 17547 {keyword_do_cond, "do"}, 17548 {keyword_do_block, "do"}, 17549 {keyword_return, "return"}, 17550 {keyword_yield, "yield"}, 17551 {keyword_super, "super"}, 17552 {keyword_self, "self"}, 17553 {keyword_nil, "nil"}, 17554 {keyword_true, "true"}, 17555 {keyword_false, "false"}, 17556 {keyword_and, "and"}, 17557 {keyword_or, "or"}, 17558 {keyword_not, "not"}, 17559 {modifier_if, "if"}, 17560 {modifier_unless, "unless"}, 17561 {modifier_while, "while"}, 17562 {modifier_until, "until"}, 17563 {modifier_rescue, "rescue"}, 17564 {keyword_alias, "alias"}, 17565 {keyword_defined, "defined?"}, 17566 {keyword_BEGIN, "BEGIN"}, 17567 {keyword_END, "END"}, 17568 {keyword__LINE__, "__LINE__"}, 17569 {keyword__FILE__, "__FILE__"}, 17570 {keyword__ENCODING__, "__ENCODING__"}, 17571 {0, NULL} 17572 }; 17573 17574 static const char* 17575 keyword_id_to_str(ID id) 17576 { 17577 const struct kw_assoc *a; 17578 17579 for (a = keyword_to_name; a->id; a++) { 17580 if (a->id == id) 17581 return a->name; 17582 } 17583 return NULL; 17584 } 17585 17586 #undef ripper_id2sym 17587 static VALUE 17588 ripper_id2sym(ID id) 17589 { 17590 const char *name; 17591 char buf[8]; 17592 17593 if (id <= 256) { 17594 buf[0] = (char)id; 17595 buf[1] = '\0'; 17596 return ID2SYM(rb_intern2(buf, 1)); 17597 } 17598 if ((name = keyword_id_to_str(id))) { 17599 return ID2SYM(rb_intern(name)); 17600 } 17601 switch (id) { 17602 case tOROP: 17603 name = "||"; 17604 break; 17605 case tANDOP: 17606 name = "&&"; 17607 break; 17608 default: 17609 name = rb_id2name(id); 17610 if (!name) { 17611 rb_bug("cannot convert ID to string: %ld", (unsigned long)id); 17612 } 17613 return ID2SYM(id); 17614 } 17615 return ID2SYM(rb_intern(name)); 17616 } 17617 17618 static ID 17619 ripper_get_id(VALUE v) 17620 { 17621 NODE *nd; 17622 if (!RB_TYPE_P(v, T_NODE)) return 0; 17623 nd = (NODE *)v; 17624 if (nd_type(nd) != NODE_LASGN) return 0; 17625 return nd->nd_vid; 17626 } 17627 17628 static VALUE 17629 ripper_get_value(VALUE v) 17630 { 17631 NODE *nd; 17632 if (v == Qundef) return Qnil; 17633 if (!RB_TYPE_P(v, T_NODE)) return v; 17634 nd = (NODE *)v; 17635 if (nd_type(nd) != NODE_LASGN) return Qnil; 17636 return nd->nd_rval; 17637 } 17638 17639 static void 17640 ripper_compile_error(struct parser_params *parser, const char *fmt, ...) 17641 { 17642 VALUE str; 17643 va_list args; 17644 17645 va_start(args, fmt); 17646 str = rb_vsprintf(fmt, args); 17647 va_end(args); 17648 rb_funcall(parser->value, rb_intern("compile_error"), 1, str); 17649 } 17650 17651 static void 17652 ripper_warn0(struct parser_params *parser, const char *fmt) 17653 { 17654 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt)); 17655 } 17656 17657 static void 17658 ripper_warnI(struct parser_params *parser, const char *fmt, int a) 17659 { 17660 rb_funcall(parser->value, rb_intern("warn"), 2, 17661 STR_NEW2(fmt), INT2NUM(a)); 17662 } 17663 17664 static void 17665 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str) 17666 { 17667 rb_funcall(parser->value, rb_intern("warn"), 2, 17668 STR_NEW2(fmt), STR_NEW2(str)); 17669 } 17670 17671 static void 17672 ripper_warning0(struct parser_params *parser, const char *fmt) 17673 { 17674 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt)); 17675 } 17676 17677 static void 17678 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str) 17679 { 17680 rb_funcall(parser->value, rb_intern("warning"), 2, 17681 STR_NEW2(fmt), STR_NEW2(str)); 17682 } 17683 17684 static VALUE 17685 ripper_lex_get_generic(struct parser_params *parser, VALUE src) 17686 { 17687 return rb_io_gets(src); 17688 } 17689 17690 static VALUE 17691 ripper_s_allocate(VALUE klass) 17692 { 17693 struct parser_params *p; 17694 VALUE self; 17695 17696 p = ALLOC_N(struct parser_params, 1); 17697 MEMZERO(p, struct parser_params, 1); 17698 self = TypedData_Wrap_Struct(klass, &parser_data_type, p); 17699 p->value = self; 17700 return self; 17701 } 17702 17703 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0) 17704 17705 /* 17706 * call-seq: 17707 * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper 17708 * 17709 * Create a new Ripper object. 17710 * _src_ must be a String, an IO, or an Object which has #gets method. 17711 * 17712 * This method does not starts parsing. 17713 * See also Ripper#parse and Ripper.parse. 17714 */ 17715 static VALUE 17716 ripper_initialize(int argc, VALUE *argv, VALUE self) 17717 { 17718 struct parser_params *parser; 17719 VALUE src, fname, lineno; 17720 17721 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 17722 rb_scan_args(argc, argv, "12", &src, &fname, &lineno); 17723 if (RB_TYPE_P(src, T_FILE)) { 17724 parser->parser_lex_gets = ripper_lex_get_generic; 17725 } 17726 else { 17727 StringValue(src); 17728 parser->parser_lex_gets = lex_get_str; 17729 } 17730 parser->parser_lex_input = src; 17731 parser->eofp = Qfalse; 17732 if (NIL_P(fname)) { 17733 fname = STR_NEW2("(ripper)"); 17734 } 17735 else { 17736 StringValue(fname); 17737 } 17738 parser_initialize(parser); 17739 17740 parser->parser_ruby_sourcefile_string = fname; 17741 parser->parser_ruby_sourcefile = RSTRING_PTR(fname); 17742 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1; 17743 17744 return Qnil; 17745 } 17746 17747 struct ripper_args { 17748 struct parser_params *parser; 17749 int argc; 17750 VALUE *argv; 17751 }; 17752 17753 static VALUE 17754 ripper_parse0(VALUE parser_v) 17755 { 17756 struct parser_params *parser; 17757 17758 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 17759 parser_prepare(parser); 17760 ripper_yyparse((void*)parser); 17761 return parser->result; 17762 } 17763 17764 static VALUE 17765 ripper_ensure(VALUE parser_v) 17766 { 17767 struct parser_params *parser; 17768 17769 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 17770 parser->parsing_thread = Qnil; 17771 return Qnil; 17772 } 17773 17774 /* 17775 * call-seq: 17776 * ripper#parse 17777 * 17778 * Start parsing and returns the value of the root action. 17779 */ 17780 static VALUE 17781 ripper_parse(VALUE self) 17782 { 17783 struct parser_params *parser; 17784 17785 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 17786 if (!ripper_initialized_p(parser)) { 17787 rb_raise(rb_eArgError, "method called for uninitialized object"); 17788 } 17789 if (!NIL_P(parser->parsing_thread)) { 17790 if (parser->parsing_thread == rb_thread_current()) 17791 rb_raise(rb_eArgError, "Ripper#parse is not reentrant"); 17792 else 17793 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe"); 17794 } 17795 parser->parsing_thread = rb_thread_current(); 17796 rb_ensure(ripper_parse0, self, ripper_ensure, self); 17797 17798 return parser->result; 17799 } 17800 17801 /* 17802 * call-seq: 17803 * ripper#column -> Integer 17804 * 17805 * Return column number of current parsing line. 17806 * This number starts from 0. 17807 */ 17808 static VALUE 17809 ripper_column(VALUE self) 17810 { 17811 struct parser_params *parser; 17812 long col; 17813 17814 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 17815 if (!ripper_initialized_p(parser)) { 17816 rb_raise(rb_eArgError, "method called for uninitialized object"); 17817 } 17818 if (NIL_P(parser->parsing_thread)) return Qnil; 17819 col = parser->tokp - parser->parser_lex_pbeg; 17820 return LONG2NUM(col); 17821 } 17822 17823 /* 17824 * call-seq: 17825 * ripper#filename -> String 17826 * 17827 * Return current parsing filename. 17828 */ 17829 static VALUE 17830 ripper_filename(VALUE self) 17831 { 17832 struct parser_params *parser; 17833 17834 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 17835 if (!ripper_initialized_p(parser)) { 17836 rb_raise(rb_eArgError, "method called for uninitialized object"); 17837 } 17838 return parser->parser_ruby_sourcefile_string; 17839 } 17840 17841 /* 17842 * call-seq: 17843 * ripper#lineno -> Integer 17844 * 17845 * Return line number of current parsing line. 17846 * This number starts from 1. 17847 */ 17848 static VALUE 17849 ripper_lineno(VALUE self) 17850 { 17851 struct parser_params *parser; 17852 17853 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 17854 if (!ripper_initialized_p(parser)) { 17855 rb_raise(rb_eArgError, "method called for uninitialized object"); 17856 } 17857 if (NIL_P(parser->parsing_thread)) return Qnil; 17858 return INT2NUM(parser->parser_ruby_sourceline); 17859 } 17860 17861 #ifdef RIPPER_DEBUG 17862 /* :nodoc: */ 17863 static VALUE 17864 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg) 17865 { 17866 StringValue(msg); 17867 if (obj == Qundef) { 17868 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg)); 17869 } 17870 return Qnil; 17871 } 17872 17873 /* :nodoc: */ 17874 static VALUE 17875 ripper_value(VALUE self, VALUE obj) 17876 { 17877 return ULONG2NUM(obj); 17878 } 17879 #endif 17880 17881 17882 void 17883 Init_ripper(void) 17884 { 17885 parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new()); 17886 17887 ripper_init_eventids1(); 17888 ripper_init_eventids2(); 17889 /* ensure existing in symbol table */ 17890 (void)rb_intern("||"); 17891 (void)rb_intern("&&"); 17892 17893 InitVM(ripper); 17894 } 17895 17896 void 17897 InitVM_ripper(void) 17898 { 17899 VALUE Ripper; 17900 17901 Ripper = rb_define_class("Ripper", rb_cObject); 17902 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION)); 17903 rb_define_alloc_func(Ripper, ripper_s_allocate); 17904 rb_define_method(Ripper, "initialize", ripper_initialize, -1); 17905 rb_define_method(Ripper, "parse", ripper_parse, 0); 17906 rb_define_method(Ripper, "column", ripper_column, 0); 17907 rb_define_method(Ripper, "filename", ripper_filename, 0); 17908 rb_define_method(Ripper, "lineno", ripper_lineno, 0); 17909 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0); 17910 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0); 17911 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0); 17912 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1); 17913 #ifdef RIPPER_DEBUG 17914 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2); 17915 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1); 17916 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1); 17917 #endif 17918 17919 ripper_init_eventids1_table(Ripper); 17920 ripper_init_eventids2_table(Ripper); 17921 17922 # if 0 17923 /* Hack to let RDoc document SCRIPT_LINES__ */ 17924 17925 /* 17926 * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded 17927 * after the assignment will be added as an Array of lines with the file 17928 * name as the key. 17929 */ 17930 rb_define_global_const("SCRIPT_LINES__", Qnil); 17931 #endif 17932 17933 } 17934 #endif /* RIPPER */ 17935 17936
1.7.6.1