|
Ruby
1.9.3p385(2013-02-06revision39114)
|
00001 /* A Bison parser, made by GNU Bison 2.3. */ 00002 00003 /* Skeleton implementation for Bison's Yacc-like parsers in C 00004 00005 Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006 00006 Free Software Foundation, Inc. 00007 00008 This program is free software; you can redistribute it and/or modify 00009 it under the terms of the GNU General Public License as published by 00010 the Free Software Foundation; either version 2, or (at your option) 00011 any later version. 00012 00013 This program is distributed in the hope that it will be useful, 00014 but WITHOUT ANY WARRANTY; without even the implied warranty of 00015 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00016 GNU General Public License for more details. 00017 00018 You should have received a copy of the GNU General Public License 00019 along with this program; if not, write to the Free Software 00020 Foundation, Inc., 51 Franklin Street, Fifth Floor, 00021 Boston, MA 02110-1301, USA. */ 00022 00023 /* As a special exception, you may create a larger work that contains 00024 part or all of the Bison parser skeleton and distribute that work 00025 under terms of your choice, so long as that work isn't itself a 00026 parser generator using the skeleton or a modified version thereof 00027 as a parser skeleton. Alternatively, if you modify or redistribute 00028 the parser skeleton itself, you may (at your option) remove this 00029 special exception, which will cause the skeleton and the resulting 00030 Bison output files to be licensed under the GNU General Public 00031 License without this special exception. 00032 00033 This special exception was added by the Free Software Foundation in 00034 version 2.2 of Bison. */ 00035 00036 /* C LALR(1) parser skeleton written by Richard Stallman, by 00037 simplifying the original so-called "semantic" parser. */ 00038 00039 /* All symbols defined below should begin with yy or YY, to avoid 00040 infringing on user name space. This should be done even for local 00041 variables, as they might otherwise be expanded by user macros. 00042 There are some unavoidable exceptions within include files to 00043 define necessary library symbols; they are noted "INFRINGES ON 00044 USER NAME SPACE" below. */ 00045 00046 /* Identify Bison output. */ 00047 #define YYBISON 1 00048 00049 /* Bison version. */ 00050 #define YYBISON_VERSION "2.3" 00051 00052 /* Skeleton name. */ 00053 #define YYSKELETON_NAME "yacc.c" 00054 00055 /* Pure parsers. */ 00056 #define YYPURE 1 00057 00058 /* Using locations. */ 00059 #define YYLSP_NEEDED 0 00060 00061 00062 00063 /* Tokens. */ 00064 #ifndef YYTOKENTYPE 00065 # define YYTOKENTYPE 00066 /* Put the tokens into the symbol table, so that GDB and other debuggers 00067 know about them. */ 00068 enum yytokentype { 00069 keyword_class = 258, 00070 keyword_module = 259, 00071 keyword_def = 260, 00072 keyword_undef = 261, 00073 keyword_begin = 262, 00074 keyword_rescue = 263, 00075 keyword_ensure = 264, 00076 keyword_end = 265, 00077 keyword_if = 266, 00078 keyword_unless = 267, 00079 keyword_then = 268, 00080 keyword_elsif = 269, 00081 keyword_else = 270, 00082 keyword_case = 271, 00083 keyword_when = 272, 00084 keyword_while = 273, 00085 keyword_until = 274, 00086 keyword_for = 275, 00087 keyword_break = 276, 00088 keyword_next = 277, 00089 keyword_redo = 278, 00090 keyword_retry = 279, 00091 keyword_in = 280, 00092 keyword_do = 281, 00093 keyword_do_cond = 282, 00094 keyword_do_block = 283, 00095 keyword_do_LAMBDA = 284, 00096 keyword_return = 285, 00097 keyword_yield = 286, 00098 keyword_super = 287, 00099 keyword_self = 288, 00100 keyword_nil = 289, 00101 keyword_true = 290, 00102 keyword_false = 291, 00103 keyword_and = 292, 00104 keyword_or = 293, 00105 keyword_not = 294, 00106 modifier_if = 295, 00107 modifier_unless = 296, 00108 modifier_while = 297, 00109 modifier_until = 298, 00110 modifier_rescue = 299, 00111 keyword_alias = 300, 00112 keyword_defined = 301, 00113 keyword_BEGIN = 302, 00114 keyword_END = 303, 00115 keyword__LINE__ = 304, 00116 keyword__FILE__ = 305, 00117 keyword__ENCODING__ = 306, 00118 tIDENTIFIER = 307, 00119 tFID = 308, 00120 tGVAR = 309, 00121 tIVAR = 310, 00122 tCONSTANT = 311, 00123 tCVAR = 312, 00124 tLABEL = 313, 00125 tINTEGER = 314, 00126 tFLOAT = 315, 00127 tSTRING_CONTENT = 316, 00128 tCHAR = 317, 00129 tNTH_REF = 318, 00130 tBACK_REF = 319, 00131 tREGEXP_END = 320, 00132 tUPLUS = 321, 00133 tUMINUS = 322, 00134 tPOW = 323, 00135 tCMP = 324, 00136 tEQ = 325, 00137 tEQQ = 326, 00138 tNEQ = 327, 00139 tGEQ = 328, 00140 tLEQ = 329, 00141 tANDOP = 330, 00142 tOROP = 331, 00143 tMATCH = 332, 00144 tNMATCH = 333, 00145 tDOT2 = 334, 00146 tDOT3 = 335, 00147 tAREF = 336, 00148 tASET = 337, 00149 tLSHFT = 338, 00150 tRSHFT = 339, 00151 tCOLON2 = 340, 00152 tCOLON3 = 341, 00153 tOP_ASGN = 342, 00154 tASSOC = 343, 00155 tLPAREN = 344, 00156 tLPAREN_ARG = 345, 00157 tRPAREN = 346, 00158 tLBRACK = 347, 00159 tLBRACE = 348, 00160 tLBRACE_ARG = 349, 00161 tSTAR = 350, 00162 tAMPER = 351, 00163 tLAMBDA = 352, 00164 tSYMBEG = 353, 00165 tSTRING_BEG = 354, 00166 tXSTRING_BEG = 355, 00167 tREGEXP_BEG = 356, 00168 tWORDS_BEG = 357, 00169 tQWORDS_BEG = 358, 00170 tSTRING_DBEG = 359, 00171 tSTRING_DVAR = 360, 00172 tSTRING_END = 361, 00173 tLAMBEG = 362, 00174 tLOWEST = 363, 00175 tUMINUS_NUM = 364, 00176 idNULL = 365, 00177 idRespond_to = 366, 00178 idIFUNC = 367, 00179 idCFUNC = 368, 00180 id_core_set_method_alias = 369, 00181 id_core_set_variable_alias = 370, 00182 id_core_undef_method = 371, 00183 id_core_define_method = 372, 00184 id_core_define_singleton_method = 373, 00185 id_core_set_postexe = 374, 00186 tLAST_TOKEN = 375 00187 }; 00188 #endif 00189 /* Tokens. */ 00190 #define keyword_class 258 00191 #define keyword_module 259 00192 #define keyword_def 260 00193 #define keyword_undef 261 00194 #define keyword_begin 262 00195 #define keyword_rescue 263 00196 #define keyword_ensure 264 00197 #define keyword_end 265 00198 #define keyword_if 266 00199 #define keyword_unless 267 00200 #define keyword_then 268 00201 #define keyword_elsif 269 00202 #define keyword_else 270 00203 #define keyword_case 271 00204 #define keyword_when 272 00205 #define keyword_while 273 00206 #define keyword_until 274 00207 #define keyword_for 275 00208 #define keyword_break 276 00209 #define keyword_next 277 00210 #define keyword_redo 278 00211 #define keyword_retry 279 00212 #define keyword_in 280 00213 #define keyword_do 281 00214 #define keyword_do_cond 282 00215 #define keyword_do_block 283 00216 #define keyword_do_LAMBDA 284 00217 #define keyword_return 285 00218 #define keyword_yield 286 00219 #define keyword_super 287 00220 #define keyword_self 288 00221 #define keyword_nil 289 00222 #define keyword_true 290 00223 #define keyword_false 291 00224 #define keyword_and 292 00225 #define keyword_or 293 00226 #define keyword_not 294 00227 #define modifier_if 295 00228 #define modifier_unless 296 00229 #define modifier_while 297 00230 #define modifier_until 298 00231 #define modifier_rescue 299 00232 #define keyword_alias 300 00233 #define keyword_defined 301 00234 #define keyword_BEGIN 302 00235 #define keyword_END 303 00236 #define keyword__LINE__ 304 00237 #define keyword__FILE__ 305 00238 #define keyword__ENCODING__ 306 00239 #define tIDENTIFIER 307 00240 #define tFID 308 00241 #define tGVAR 309 00242 #define tIVAR 310 00243 #define tCONSTANT 311 00244 #define tCVAR 312 00245 #define tLABEL 313 00246 #define tINTEGER 314 00247 #define tFLOAT 315 00248 #define tSTRING_CONTENT 316 00249 #define tCHAR 317 00250 #define tNTH_REF 318 00251 #define tBACK_REF 319 00252 #define tREGEXP_END 320 00253 #define tUPLUS 321 00254 #define tUMINUS 322 00255 #define tPOW 323 00256 #define tCMP 324 00257 #define tEQ 325 00258 #define tEQQ 326 00259 #define tNEQ 327 00260 #define tGEQ 328 00261 #define tLEQ 329 00262 #define tANDOP 330 00263 #define tOROP 331 00264 #define tMATCH 332 00265 #define tNMATCH 333 00266 #define tDOT2 334 00267 #define tDOT3 335 00268 #define tAREF 336 00269 #define tASET 337 00270 #define tLSHFT 338 00271 #define tRSHFT 339 00272 #define tCOLON2 340 00273 #define tCOLON3 341 00274 #define tOP_ASGN 342 00275 #define tASSOC 343 00276 #define tLPAREN 344 00277 #define tLPAREN_ARG 345 00278 #define tRPAREN 346 00279 #define tLBRACK 347 00280 #define tLBRACE 348 00281 #define tLBRACE_ARG 349 00282 #define tSTAR 350 00283 #define tAMPER 351 00284 #define tLAMBDA 352 00285 #define tSYMBEG 353 00286 #define tSTRING_BEG 354 00287 #define tXSTRING_BEG 355 00288 #define tREGEXP_BEG 356 00289 #define tWORDS_BEG 357 00290 #define tQWORDS_BEG 358 00291 #define tSTRING_DBEG 359 00292 #define tSTRING_DVAR 360 00293 #define tSTRING_END 361 00294 #define tLAMBEG 362 00295 #define tLOWEST 363 00296 #define tUMINUS_NUM 364 00297 #define idNULL 365 00298 #define idRespond_to 366 00299 #define idIFUNC 367 00300 #define idCFUNC 368 00301 #define id_core_set_method_alias 369 00302 #define id_core_set_variable_alias 370 00303 #define id_core_undef_method 371 00304 #define id_core_define_method 372 00305 #define id_core_define_singleton_method 373 00306 #define id_core_set_postexe 374 00307 #define tLAST_TOKEN 375 00308 00309 00310 00311 00312 /* Copy the first part of user declarations. */ 00313 #line 12 "ripper.y" 00314 00315 00316 #define YYDEBUG 1 00317 #define YYERROR_VERBOSE 1 00318 #define YYSTACK_USE_ALLOCA 0 00319 00320 #include "ruby/ruby.h" 00321 #include "ruby/st.h" 00322 #include "ruby/encoding.h" 00323 #include "internal.h" 00324 #include "node.h" 00325 #include "parse.h" 00326 #include "id.h" 00327 #include "regenc.h" 00328 #include <stdio.h> 00329 #include <errno.h> 00330 #include <ctype.h> 00331 00332 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0])) 00333 00334 #define YYMALLOC(size) rb_parser_malloc(parser, (size)) 00335 #define YYREALLOC(ptr, size) rb_parser_realloc(parser, (ptr), (size)) 00336 #define YYCALLOC(nelem, size) rb_parser_calloc(parser, (nelem), (size)) 00337 #define YYFREE(ptr) rb_parser_free(parser, (ptr)) 00338 #define malloc YYMALLOC 00339 #define realloc YYREALLOC 00340 #define calloc YYCALLOC 00341 #define free YYFREE 00342 00343 #ifndef RIPPER 00344 static ID register_symid(ID, const char *, long, rb_encoding *); 00345 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc) 00346 #include "id.c" 00347 #endif 00348 00349 #define is_notop_id(id) ((id)>tLAST_TOKEN) 00350 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL) 00351 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL) 00352 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE) 00353 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET) 00354 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST) 00355 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS) 00356 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK) 00357 00358 #define is_asgn_or_id(id) ((is_notop_id(id)) && \ 00359 (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \ 00360 ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \ 00361 ((id)&ID_SCOPE_MASK) == ID_CLASS)) 00362 00363 enum lex_state_e { 00364 EXPR_BEG, /* ignore newline, +/- is a sign. */ 00365 EXPR_END, /* newline significant, +/- is an operator. */ 00366 EXPR_ENDARG, /* ditto, and unbound braces. */ 00367 EXPR_ENDFN, /* ditto, and unbound braces. */ 00368 EXPR_ARG, /* newline significant, +/- is an operator. */ 00369 EXPR_CMDARG, /* newline significant, +/- is an operator. */ 00370 EXPR_MID, /* newline significant, +/- is an operator. */ 00371 EXPR_FNAME, /* ignore newline, no reserved words. */ 00372 EXPR_DOT, /* right after `.' or `::', no reserved words. */ 00373 EXPR_CLASS, /* immediate after `class', no here document. */ 00374 EXPR_VALUE, /* alike EXPR_BEG but label is disallowed. */ 00375 EXPR_MAX_STATE 00376 }; 00377 00378 typedef VALUE stack_type; 00379 00380 # define BITSTACK_PUSH(stack, n) ((stack) = ((stack)<<1)|((n)&1)) 00381 # define BITSTACK_POP(stack) ((stack) = (stack) >> 1) 00382 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1)) 00383 # define BITSTACK_SET_P(stack) ((stack)&1) 00384 00385 #define COND_PUSH(n) BITSTACK_PUSH(cond_stack, (n)) 00386 #define COND_POP() BITSTACK_POP(cond_stack) 00387 #define COND_LEXPOP() BITSTACK_LEXPOP(cond_stack) 00388 #define COND_P() BITSTACK_SET_P(cond_stack) 00389 00390 #define CMDARG_PUSH(n) BITSTACK_PUSH(cmdarg_stack, (n)) 00391 #define CMDARG_POP() BITSTACK_POP(cmdarg_stack) 00392 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack) 00393 #define CMDARG_P() BITSTACK_SET_P(cmdarg_stack) 00394 00395 struct vtable { 00396 ID *tbl; 00397 int pos; 00398 int capa; 00399 struct vtable *prev; 00400 }; 00401 00402 struct local_vars { 00403 struct vtable *args; 00404 struct vtable *vars; 00405 struct vtable *used; 00406 struct local_vars *prev; 00407 }; 00408 00409 #define DVARS_INHERIT ((void*)1) 00410 #define DVARS_TOPSCOPE NULL 00411 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl)) 00412 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3) 00413 00414 static int 00415 vtable_size(const struct vtable *tbl) 00416 { 00417 if (POINTER_P(tbl)) { 00418 return tbl->pos; 00419 } 00420 else { 00421 return 0; 00422 } 00423 } 00424 00425 #define VTBL_DEBUG 0 00426 00427 static struct vtable * 00428 vtable_alloc(struct vtable *prev) 00429 { 00430 struct vtable *tbl = ALLOC(struct vtable); 00431 tbl->pos = 0; 00432 tbl->capa = 8; 00433 tbl->tbl = ALLOC_N(ID, tbl->capa); 00434 tbl->prev = prev; 00435 if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl); 00436 return tbl; 00437 } 00438 00439 static void 00440 vtable_free(struct vtable *tbl) 00441 { 00442 if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl); 00443 if (POINTER_P(tbl)) { 00444 if (tbl->tbl) { 00445 xfree(tbl->tbl); 00446 } 00447 xfree(tbl); 00448 } 00449 } 00450 00451 static void 00452 vtable_add(struct vtable *tbl, ID id) 00453 { 00454 if (!POINTER_P(tbl)) { 00455 rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl); 00456 } 00457 if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id)); 00458 00459 if (tbl->pos == tbl->capa) { 00460 tbl->capa = tbl->capa * 2; 00461 REALLOC_N(tbl->tbl, ID, tbl->capa); 00462 } 00463 tbl->tbl[tbl->pos++] = id; 00464 } 00465 00466 static int 00467 vtable_included(const struct vtable * tbl, ID id) 00468 { 00469 int i; 00470 00471 if (POINTER_P(tbl)) { 00472 for (i = 0; i < tbl->pos; i++) { 00473 if (tbl->tbl[i] == id) { 00474 return i+1; 00475 } 00476 } 00477 } 00478 return 0; 00479 } 00480 00481 00482 #ifndef RIPPER 00483 typedef struct token_info { 00484 const char *token; 00485 int linenum; 00486 int column; 00487 int nonspc; 00488 struct token_info *next; 00489 } token_info; 00490 #endif 00491 00492 /* 00493 Structure of Lexer Buffer: 00494 00495 lex_pbeg tokp lex_p lex_pend 00496 | | | | 00497 |-----------+--------------+------------| 00498 |<------------>| 00499 token 00500 */ 00501 struct parser_params { 00502 int is_ripper; 00503 NODE *heap; 00504 00505 YYSTYPE *parser_yylval; 00506 VALUE eofp; 00507 00508 NODE *parser_lex_strterm; 00509 enum lex_state_e parser_lex_state; 00510 stack_type parser_cond_stack; 00511 stack_type parser_cmdarg_stack; 00512 int parser_class_nest; 00513 int parser_paren_nest; 00514 int parser_lpar_beg; 00515 int parser_in_single; 00516 int parser_in_def; 00517 int parser_compile_for_eval; 00518 VALUE parser_cur_mid; 00519 int parser_in_defined; 00520 char *parser_tokenbuf; 00521 int parser_tokidx; 00522 int parser_toksiz; 00523 VALUE parser_lex_input; 00524 VALUE parser_lex_lastline; 00525 VALUE parser_lex_nextline; 00526 const char *parser_lex_pbeg; 00527 const char *parser_lex_p; 00528 const char *parser_lex_pend; 00529 int parser_heredoc_end; 00530 int parser_command_start; 00531 NODE *parser_deferred_nodes; 00532 long parser_lex_gets_ptr; 00533 VALUE (*parser_lex_gets)(struct parser_params*,VALUE); 00534 struct local_vars *parser_lvtbl; 00535 int parser_ruby__end__seen; 00536 int line_count; 00537 int has_shebang; 00538 char *parser_ruby_sourcefile; /* current source file */ 00539 int parser_ruby_sourceline; /* current line no. */ 00540 rb_encoding *enc; 00541 rb_encoding *utf8; 00542 00543 int parser_yydebug; 00544 00545 #ifndef RIPPER 00546 /* Ruby core only */ 00547 NODE *parser_eval_tree_begin; 00548 NODE *parser_eval_tree; 00549 VALUE debug_lines; 00550 VALUE coverage; 00551 int nerr; 00552 00553 int parser_token_info_enabled; 00554 token_info *parser_token_info; 00555 #else 00556 /* Ripper only */ 00557 VALUE parser_ruby_sourcefile_string; 00558 const char *tokp; 00559 VALUE delayed; 00560 int delayed_line; 00561 int delayed_col; 00562 00563 VALUE value; 00564 VALUE result; 00565 VALUE parsing_thread; 00566 int toplevel_p; 00567 #endif 00568 }; 00569 00570 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \ 00571 (parser->utf8 = rb_utf8_encoding())) 00572 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc) 00573 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc) 00574 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc) 00575 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc) 00576 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT) 00577 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc) 00578 00579 static int parser_yyerror(struct parser_params*, const char*); 00580 #define yyerror(msg) parser_yyerror(parser, (msg)) 00581 00582 #define YYLEX_PARAM parser 00583 00584 #define lex_strterm (parser->parser_lex_strterm) 00585 #define lex_state (parser->parser_lex_state) 00586 #define cond_stack (parser->parser_cond_stack) 00587 #define cmdarg_stack (parser->parser_cmdarg_stack) 00588 #define class_nest (parser->parser_class_nest) 00589 #define paren_nest (parser->parser_paren_nest) 00590 #define lpar_beg (parser->parser_lpar_beg) 00591 #define in_single (parser->parser_in_single) 00592 #define in_def (parser->parser_in_def) 00593 #define compile_for_eval (parser->parser_compile_for_eval) 00594 #define cur_mid (parser->parser_cur_mid) 00595 #define in_defined (parser->parser_in_defined) 00596 #define tokenbuf (parser->parser_tokenbuf) 00597 #define tokidx (parser->parser_tokidx) 00598 #define toksiz (parser->parser_toksiz) 00599 #define lex_input (parser->parser_lex_input) 00600 #define lex_lastline (parser->parser_lex_lastline) 00601 #define lex_nextline (parser->parser_lex_nextline) 00602 #define lex_pbeg (parser->parser_lex_pbeg) 00603 #define lex_p (parser->parser_lex_p) 00604 #define lex_pend (parser->parser_lex_pend) 00605 #define heredoc_end (parser->parser_heredoc_end) 00606 #define command_start (parser->parser_command_start) 00607 #define deferred_nodes (parser->parser_deferred_nodes) 00608 #define lex_gets_ptr (parser->parser_lex_gets_ptr) 00609 #define lex_gets (parser->parser_lex_gets) 00610 #define lvtbl (parser->parser_lvtbl) 00611 #define ruby__end__seen (parser->parser_ruby__end__seen) 00612 #define ruby_sourceline (parser->parser_ruby_sourceline) 00613 #define ruby_sourcefile (parser->parser_ruby_sourcefile) 00614 #define current_enc (parser->enc) 00615 #define yydebug (parser->parser_yydebug) 00616 #ifdef RIPPER 00617 #else 00618 #define ruby_eval_tree (parser->parser_eval_tree) 00619 #define ruby_eval_tree_begin (parser->parser_eval_tree_begin) 00620 #define ruby_debug_lines (parser->debug_lines) 00621 #define ruby_coverage (parser->coverage) 00622 #endif 00623 00624 static int yylex(void*, void*); 00625 00626 #ifndef RIPPER 00627 #define yyparse ruby_yyparse 00628 00629 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE); 00630 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3)) 00631 00632 static NODE *cond_gen(struct parser_params*,NODE*); 00633 #define cond(node) cond_gen(parser, (node)) 00634 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*); 00635 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2)) 00636 00637 static NODE *newline_node(NODE*); 00638 static void fixpos(NODE*,NODE*); 00639 00640 static int value_expr_gen(struct parser_params*,NODE*); 00641 static void void_expr_gen(struct parser_params*,NODE*); 00642 static NODE *remove_begin(NODE*); 00643 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node)) 00644 #define void_expr0(node) void_expr_gen(parser, (node)) 00645 #define void_expr(node) void_expr0((node) = remove_begin(node)) 00646 static void void_stmts_gen(struct parser_params*,NODE*); 00647 #define void_stmts(node) void_stmts_gen(parser, (node)) 00648 static void reduce_nodes_gen(struct parser_params*,NODE**); 00649 #define reduce_nodes(n) reduce_nodes_gen(parser,(n)) 00650 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*); 00651 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2)) 00652 00653 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*); 00654 #define block_append(h,t) block_append_gen(parser,(h),(t)) 00655 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*); 00656 #define list_append(l,i) list_append_gen(parser,(l),(i)) 00657 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*); 00658 #define list_concat(h,t) list_concat_gen(parser,(h),(t)) 00659 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*); 00660 #define arg_append(h,t) arg_append_gen(parser,(h),(t)) 00661 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*); 00662 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t)) 00663 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*); 00664 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t)) 00665 static int literal_concat0(struct parser_params *, VALUE, VALUE); 00666 static NODE *new_evstr_gen(struct parser_params*,NODE*); 00667 #define new_evstr(n) new_evstr_gen(parser,(n)) 00668 static NODE *evstr2dstr_gen(struct parser_params*,NODE*); 00669 #define evstr2dstr(n) evstr2dstr_gen(parser,(n)) 00670 static NODE *splat_array(NODE*); 00671 00672 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*); 00673 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1)) 00674 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID); 00675 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id)) 00676 00677 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID); 00678 #define new_args(f,o,r,p,b) new_args_gen(parser, (f),(o),(r),(p),(b)) 00679 00680 static NODE *negate_lit(NODE*); 00681 static NODE *ret_args_gen(struct parser_params*,NODE*); 00682 #define ret_args(node) ret_args_gen(parser, (node)) 00683 static NODE *arg_blk_pass(NODE*,NODE*); 00684 static NODE *new_yield_gen(struct parser_params*,NODE*); 00685 #define new_yield(node) new_yield_gen(parser, (node)) 00686 00687 static NODE *gettable_gen(struct parser_params*,ID); 00688 #define gettable(id) gettable_gen(parser,(id)) 00689 static NODE *assignable_gen(struct parser_params*,ID,NODE*); 00690 #define assignable(id,node) assignable_gen(parser, (id), (node)) 00691 00692 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*); 00693 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2)) 00694 static NODE *attrset_gen(struct parser_params*,NODE*,ID); 00695 #define attrset(node,id) attrset_gen(parser, (node), (id)) 00696 00697 static void rb_backref_error_gen(struct parser_params*,NODE*); 00698 #define rb_backref_error(n) rb_backref_error_gen(parser,(n)) 00699 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*); 00700 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2)) 00701 00702 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*); 00703 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2)) 00704 00705 static ID *local_tbl_gen(struct parser_params*); 00706 #define local_tbl() local_tbl_gen(parser) 00707 00708 static void fixup_nodes(NODE **); 00709 00710 static VALUE reg_compile_gen(struct parser_params*, VALUE, int); 00711 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options)) 00712 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int); 00713 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options)) 00714 static int reg_fragment_check_gen(struct parser_params*, VALUE, int); 00715 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options)) 00716 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match); 00717 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match)) 00718 00719 #define get_id(id) (id) 00720 #define get_value(val) (val) 00721 #else 00722 #define remove_begin(node) (node) 00723 #define rb_dvar_defined(id) 0 00724 #define rb_local_defined(id) 0 00725 static ID ripper_get_id(VALUE); 00726 #define get_id(id) ripper_get_id(id) 00727 static VALUE ripper_get_value(VALUE); 00728 #define get_value(val) ripper_get_value(val) 00729 static VALUE assignable_gen(struct parser_params*,VALUE); 00730 #define assignable(lhs,node) assignable_gen(parser, (lhs)) 00731 static int id_is_var_gen(struct parser_params *parser, ID id); 00732 #define id_is_var(id) id_is_var_gen(parser, (id)) 00733 #endif /* !RIPPER */ 00734 00735 static ID formal_argument_gen(struct parser_params*, ID); 00736 #define formal_argument(id) formal_argument_gen(parser, (id)) 00737 static ID shadowing_lvar_gen(struct parser_params*,ID); 00738 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name)) 00739 static void new_bv_gen(struct parser_params*,ID); 00740 #define new_bv(id) new_bv_gen(parser, (id)) 00741 00742 static void local_push_gen(struct parser_params*,int); 00743 #define local_push(top) local_push_gen(parser,(top)) 00744 static void local_pop_gen(struct parser_params*); 00745 #define local_pop() local_pop_gen(parser) 00746 static int local_var_gen(struct parser_params*, ID); 00747 #define local_var(id) local_var_gen(parser, (id)); 00748 static int arg_var_gen(struct parser_params*, ID); 00749 #define arg_var(id) arg_var_gen(parser, (id)) 00750 static int local_id_gen(struct parser_params*, ID); 00751 #define local_id(id) local_id_gen(parser, (id)) 00752 static ID internal_id_gen(struct parser_params*); 00753 #define internal_id() internal_id_gen(parser) 00754 00755 static const struct vtable *dyna_push_gen(struct parser_params *); 00756 #define dyna_push() dyna_push_gen(parser) 00757 static void dyna_pop_gen(struct parser_params*, const struct vtable *); 00758 #define dyna_pop(node) dyna_pop_gen(parser, (node)) 00759 static int dyna_in_block_gen(struct parser_params*); 00760 #define dyna_in_block() dyna_in_block_gen(parser) 00761 #define dyna_var(id) local_var(id) 00762 static int dvar_defined_gen(struct parser_params*,ID,int); 00763 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0) 00764 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1) 00765 static int dvar_curr_gen(struct parser_params*,ID); 00766 #define dvar_curr(id) dvar_curr_gen(parser, (id)) 00767 00768 static int lvar_defined_gen(struct parser_params*, ID); 00769 #define lvar_defined(id) lvar_defined_gen(parser, (id)) 00770 00771 #define RE_OPTION_ONCE (1<<16) 00772 #define RE_OPTION_ENCODING_SHIFT 8 00773 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT) 00774 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff) 00775 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE) 00776 #define RE_OPTION_MASK 0xff 00777 #define RE_OPTION_ARG_ENCODING_NONE 32 00778 00779 #define NODE_STRTERM NODE_ZARRAY /* nothing to gc */ 00780 #define NODE_HEREDOC NODE_ARRAY /* 1, 3 to gc */ 00781 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1)) 00782 #define nd_func u1.id 00783 #if SIZEOF_SHORT == 2 00784 #define nd_term(node) ((signed short)(node)->u2.id) 00785 #else 00786 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2) 00787 #endif 00788 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2) 00789 #define nd_nest u3.cnt 00790 00791 /****** Ripper *******/ 00792 00793 #ifdef RIPPER 00794 #define RIPPER_VERSION "0.1.0" 00795 00796 #include "eventids1.c" 00797 #include "eventids2.c" 00798 static ID ripper_id_gets; 00799 00800 static VALUE ripper_dispatch0(struct parser_params*,ID); 00801 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE); 00802 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE); 00803 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE); 00804 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE); 00805 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE); 00806 00807 #define dispatch0(n) ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n)) 00808 #define dispatch1(n,a) ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a)) 00809 #define dispatch2(n,a,b) ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b)) 00810 #define dispatch3(n,a,b,c) ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c)) 00811 #define dispatch4(n,a,b,c,d) ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d)) 00812 #define dispatch5(n,a,b,c,d,e) ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e)) 00813 00814 #define yyparse ripper_yyparse 00815 00816 #define ripper_intern(s) ID2SYM(rb_intern(s)) 00817 static VALUE ripper_id2sym(ID); 00818 #ifdef __GNUC__ 00819 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \ 00820 ID2SYM(id) : ripper_id2sym(id)) 00821 #endif 00822 00823 #define arg_new() dispatch0(args_new) 00824 #define arg_add(l,a) dispatch2(args_add, (l), (a)) 00825 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a)) 00826 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b)) 00827 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b))) 00828 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v)) 00829 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b)) 00830 00831 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a)) 00832 #define mrhs_new() dispatch0(mrhs_new) 00833 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a)) 00834 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a)) 00835 00836 #define mlhs_new() dispatch0(mlhs_new) 00837 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a)) 00838 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a)) 00839 00840 #define params_new(pars, opts, rest, pars2, blk) \ 00841 dispatch5(params, (pars), (opts), (rest), (pars2), (blk)) 00842 00843 #define blockvar_new(p,v) dispatch2(block_var, (p), (v)) 00844 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a)) 00845 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a)) 00846 00847 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a))) 00848 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a)) 00849 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b)) 00850 00851 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x)) 00852 00853 #define FIXME 0 00854 00855 #endif /* RIPPER */ 00856 00857 #ifndef RIPPER 00858 # define ifndef_ripper(x) (x) 00859 #else 00860 # define ifndef_ripper(x) 00861 #endif 00862 00863 #ifndef RIPPER 00864 # define rb_warn0(fmt) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt)) 00865 # define rb_warnI(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00866 # define rb_warnS(fmt,a) rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00867 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt)) 00868 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a)) 00869 #else 00870 # define rb_warn0(fmt) ripper_warn0(parser, (fmt)) 00871 # define rb_warnI(fmt,a) ripper_warnI(parser, (fmt), (a)) 00872 # define rb_warnS(fmt,a) ripper_warnS(parser, (fmt), (a)) 00873 # define rb_warning0(fmt) ripper_warning0(parser, (fmt)) 00874 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a)) 00875 static void ripper_warn0(struct parser_params*, const char*); 00876 static void ripper_warnI(struct parser_params*, const char*, int); 00877 #if 0 00878 static void ripper_warnS(struct parser_params*, const char*, const char*); 00879 #endif 00880 static void ripper_warning0(struct parser_params*, const char*); 00881 static void ripper_warningS(struct parser_params*, const char*, const char*); 00882 #endif 00883 00884 #ifdef RIPPER 00885 static void ripper_compile_error(struct parser_params*, const char *fmt, ...); 00886 # define rb_compile_error ripper_compile_error 00887 # define compile_error ripper_compile_error 00888 # define PARSER_ARG parser, 00889 #else 00890 # define rb_compile_error rb_compile_error_with_enc 00891 # define compile_error parser->nerr++,rb_compile_error_with_enc 00892 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc, 00893 #endif 00894 00895 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150, 00896 for instance). This is too low for Ruby to parse some files, such as 00897 date/format.rb, therefore bump the value up to at least Bison's default. */ 00898 #ifdef OLD_YACC 00899 #ifndef YYMAXDEPTH 00900 #define YYMAXDEPTH 10000 00901 #endif 00902 #endif 00903 00904 #ifndef RIPPER 00905 static void token_info_push(struct parser_params*, const char *token); 00906 static void token_info_pop(struct parser_params*, const char *token); 00907 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0) 00908 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0) 00909 #else 00910 #define token_info_push(token) /* nothing */ 00911 #define token_info_pop(token) /* nothing */ 00912 #endif 00913 00914 00915 /* Enabling traces. */ 00916 #ifndef YYDEBUG 00917 # define YYDEBUG 1 00918 #endif 00919 00920 /* Enabling verbose error messages. */ 00921 #ifdef YYERROR_VERBOSE 00922 # undef YYERROR_VERBOSE 00923 # define YYERROR_VERBOSE 1 00924 #else 00925 # define YYERROR_VERBOSE 0 00926 #endif 00927 00928 /* Enabling the token table. */ 00929 #ifndef YYTOKEN_TABLE 00930 # define YYTOKEN_TABLE 0 00931 #endif 00932 00933 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED 00934 typedef union YYSTYPE 00935 #line 616 "ripper.y" 00936 { 00937 VALUE val; 00938 NODE *node; 00939 ID id; 00940 int num; 00941 const struct vtable *vars; 00942 } 00943 /* Line 187 of yacc.c. */ 00944 #line 945 "parse.c" 00945 YYSTYPE; 00946 # define yystype YYSTYPE /* obsolescent; will be withdrawn */ 00947 # define YYSTYPE_IS_DECLARED 1 00948 # define YYSTYPE_IS_TRIVIAL 1 00949 #endif 00950 00951 00952 00953 /* Copy the second part of user declarations. */ 00954 00955 00956 /* Line 216 of yacc.c. */ 00957 #line 958 "parse.c" 00958 00959 #ifdef short 00960 # undef short 00961 #endif 00962 00963 #ifdef YYTYPE_UINT8 00964 typedef YYTYPE_UINT8 yytype_uint8; 00965 #else 00966 typedef unsigned char yytype_uint8; 00967 #endif 00968 00969 #ifdef YYTYPE_INT8 00970 typedef YYTYPE_INT8 yytype_int8; 00971 #elif (defined __STDC__ || defined __C99__FUNC__ \ 00972 || defined __cplusplus || defined _MSC_VER) 00973 typedef signed char yytype_int8; 00974 #else 00975 typedef short int yytype_int8; 00976 #endif 00977 00978 #ifdef YYTYPE_UINT16 00979 typedef YYTYPE_UINT16 yytype_uint16; 00980 #else 00981 typedef unsigned short int yytype_uint16; 00982 #endif 00983 00984 #ifdef YYTYPE_INT16 00985 typedef YYTYPE_INT16 yytype_int16; 00986 #else 00987 typedef short int yytype_int16; 00988 #endif 00989 00990 #ifndef YYSIZE_T 00991 # ifdef __SIZE_TYPE__ 00992 # define YYSIZE_T __SIZE_TYPE__ 00993 # elif defined size_t 00994 # define YYSIZE_T size_t 00995 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \ 00996 || defined __cplusplus || defined _MSC_VER) 00997 # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ 00998 # define YYSIZE_T size_t 00999 # else 01000 # define YYSIZE_T unsigned int 01001 # endif 01002 #endif 01003 01004 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1) 01005 01006 #ifndef YY_ 01007 # if YYENABLE_NLS 01008 # if ENABLE_NLS 01009 # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ 01010 # define YY_(msgid) dgettext ("bison-runtime", msgid) 01011 # endif 01012 # endif 01013 # ifndef YY_ 01014 # define YY_(msgid) msgid 01015 # endif 01016 #endif 01017 01018 /* Suppress unused-variable warnings by "using" E. */ 01019 #if ! defined lint || defined __GNUC__ 01020 # define YYUSE(e) ((void) (e)) 01021 #else 01022 # define YYUSE(e) /* empty */ 01023 #endif 01024 01025 /* Identity function, used to suppress warnings about constant conditions. */ 01026 #ifndef lint 01027 # define YYID(n) (n) 01028 #else 01029 #if (defined __STDC__ || defined __C99__FUNC__ \ 01030 || defined __cplusplus || defined _MSC_VER) 01031 static int 01032 YYID (int i) 01033 #else 01034 static int 01035 YYID (i) 01036 int i; 01037 #endif 01038 { 01039 return i; 01040 } 01041 #endif 01042 01043 #if ! defined yyoverflow || YYERROR_VERBOSE 01044 01045 /* The parser invokes alloca or malloc; define the necessary symbols. */ 01046 01047 # ifdef YYSTACK_USE_ALLOCA 01048 # if YYSTACK_USE_ALLOCA 01049 # ifdef __GNUC__ 01050 # define YYSTACK_ALLOC __builtin_alloca 01051 # elif defined __BUILTIN_VA_ARG_INCR 01052 # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ 01053 # elif defined _AIX 01054 # define YYSTACK_ALLOC __alloca 01055 # elif defined _MSC_VER 01056 # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ 01057 # define alloca _alloca 01058 # else 01059 # define YYSTACK_ALLOC alloca 01060 # if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 01061 || defined __cplusplus || defined _MSC_VER) 01062 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 01063 # ifndef _STDLIB_H 01064 # define _STDLIB_H 1 01065 # endif 01066 # endif 01067 # endif 01068 # endif 01069 # endif 01070 01071 # ifdef YYSTACK_ALLOC 01072 /* Pacify GCC's `empty if-body' warning. */ 01073 # define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0)) 01074 # ifndef YYSTACK_ALLOC_MAXIMUM 01075 /* The OS might guarantee only one guard page at the bottom of the stack, 01076 and a page size can be as small as 4096 bytes. So we cannot safely 01077 invoke alloca (N) if N exceeds 4096. Use a slightly smaller number 01078 to allow for a few compiler-allocated temporary stack slots. */ 01079 # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ 01080 # endif 01081 # else 01082 # define YYSTACK_ALLOC YYMALLOC 01083 # define YYSTACK_FREE YYFREE 01084 # ifndef YYSTACK_ALLOC_MAXIMUM 01085 # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM 01086 # endif 01087 # if (defined __cplusplus && ! defined _STDLIB_H \ 01088 && ! ((defined YYMALLOC || defined malloc) \ 01089 && (defined YYFREE || defined free))) 01090 # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ 01091 # ifndef _STDLIB_H 01092 # define _STDLIB_H 1 01093 # endif 01094 # endif 01095 # ifndef YYMALLOC 01096 # define YYMALLOC malloc 01097 # if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 01098 || defined __cplusplus || defined _MSC_VER) 01099 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ 01100 # endif 01101 # endif 01102 # ifndef YYFREE 01103 # define YYFREE free 01104 # if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \ 01105 || defined __cplusplus || defined _MSC_VER) 01106 void free (void *); /* INFRINGES ON USER NAME SPACE */ 01107 # endif 01108 # endif 01109 # endif 01110 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */ 01111 01112 01113 #if (! defined yyoverflow \ 01114 && (! defined __cplusplus \ 01115 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) 01116 01117 /* A type that is properly aligned for any stack member. */ 01118 union yyalloc 01119 { 01120 yytype_int16 yyss; 01121 YYSTYPE yyvs; 01122 }; 01123 01124 /* The size of the maximum gap between one aligned stack and the next. */ 01125 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1) 01126 01127 /* The size of an array large to enough to hold all stacks, each with 01128 N elements. */ 01129 # define YYSTACK_BYTES(N) \ 01130 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \ 01131 + YYSTACK_GAP_MAXIMUM) 01132 01133 /* Copy COUNT objects from FROM to TO. The source and destination do 01134 not overlap. */ 01135 # ifndef YYCOPY 01136 # if defined __GNUC__ && 1 < __GNUC__ 01137 # define YYCOPY(To, From, Count) \ 01138 __builtin_memcpy (To, From, (Count) * sizeof (*(From))) 01139 # else 01140 # define YYCOPY(To, From, Count) \ 01141 do \ 01142 { \ 01143 YYSIZE_T yyi; \ 01144 for (yyi = 0; yyi < (Count); yyi++) \ 01145 (To)[yyi] = (From)[yyi]; \ 01146 } \ 01147 while (YYID (0)) 01148 # endif 01149 # endif 01150 01151 /* Relocate STACK from its old location to the new one. The 01152 local variables YYSIZE and YYSTACKSIZE give the old and new number of 01153 elements in the stack, and YYPTR gives the new location of the 01154 stack. Advance YYPTR to a properly aligned location for the next 01155 stack. */ 01156 # define YYSTACK_RELOCATE(Stack) \ 01157 do \ 01158 { \ 01159 YYSIZE_T yynewbytes; \ 01160 YYCOPY (&yyptr->Stack, Stack, yysize); \ 01161 Stack = &yyptr->Stack; \ 01162 yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \ 01163 yyptr += yynewbytes / sizeof (*yyptr); \ 01164 } \ 01165 while (YYID (0)) 01166 01167 #endif 01168 01169 /* YYFINAL -- State number of the termination state. */ 01170 #define YYFINAL 3 01171 /* YYLAST -- Last index in YYTABLE. */ 01172 #define YYLAST 10748 01173 01174 /* YYNTOKENS -- Number of terminals. */ 01175 #define YYNTOKENS 148 01176 /* YYNNTS -- Number of nonterminals. */ 01177 #define YYNNTS 174 01178 /* YYNRULES -- Number of rules. */ 01179 #define YYNRULES 573 01180 /* YYNRULES -- Number of states. */ 01181 #define YYNSTATES 991 01182 01183 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */ 01184 #define YYUNDEFTOK 2 01185 #define YYMAXUTOK 375 01186 01187 #define YYTRANSLATE(YYX) \ 01188 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK) 01189 01190 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */ 01191 static const yytype_uint8 yytranslate[] = 01192 { 01193 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01194 147, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01195 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01196 2, 2, 146, 123, 2, 2, 2, 121, 116, 2, 01197 142, 143, 119, 117, 140, 118, 139, 120, 2, 2, 01198 2, 2, 2, 2, 2, 2, 2, 2, 111, 145, 01199 113, 109, 112, 110, 2, 2, 2, 2, 2, 2, 01200 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01201 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01202 2, 138, 2, 144, 115, 2, 141, 2, 2, 2, 01203 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01204 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01205 2, 2, 2, 136, 114, 137, 124, 2, 2, 2, 01206 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01207 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01208 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01209 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01210 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01211 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01212 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01213 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01214 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01215 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01216 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01217 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 01218 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 01219 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 01220 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 01221 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 01222 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 01223 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 01224 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 01225 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 01226 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 01227 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 01228 95, 96, 97, 98, 99, 100, 101, 102, 103, 104, 01229 105, 106, 107, 108, 122, 125, 126, 127, 128, 129, 01230 130, 131, 132, 133, 134, 135 01231 }; 01232 01233 #if YYDEBUG 01234 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in 01235 YYRHS. */ 01236 static const yytype_uint16 yyprhs[] = 01237 { 01238 0, 0, 3, 4, 7, 10, 12, 14, 18, 21, 01239 23, 24, 30, 35, 38, 40, 42, 46, 49, 50, 01240 55, 59, 63, 67, 70, 74, 78, 82, 86, 90, 01241 95, 97, 101, 105, 112, 118, 124, 130, 136, 140, 01242 144, 148, 152, 154, 158, 162, 164, 168, 172, 176, 01243 179, 181, 183, 185, 187, 189, 194, 199, 200, 206, 01244 209, 213, 218, 224, 229, 235, 238, 241, 244, 247, 01245 250, 252, 256, 258, 262, 264, 267, 271, 277, 280, 01246 285, 288, 293, 295, 299, 301, 305, 308, 312, 314, 01247 318, 320, 322, 327, 331, 335, 339, 343, 346, 348, 01248 350, 352, 357, 361, 365, 369, 373, 376, 378, 380, 01249 382, 385, 387, 391, 393, 395, 397, 399, 401, 403, 01250 405, 407, 409, 411, 412, 417, 419, 421, 423, 425, 01251 427, 429, 431, 433, 435, 437, 439, 441, 443, 445, 01252 447, 449, 451, 453, 455, 457, 459, 461, 463, 465, 01253 467, 469, 471, 473, 475, 477, 479, 481, 483, 485, 01254 487, 489, 491, 493, 495, 497, 499, 501, 503, 505, 01255 507, 509, 511, 513, 515, 517, 519, 521, 523, 525, 01256 527, 529, 531, 533, 535, 537, 539, 541, 543, 545, 01257 547, 549, 551, 553, 555, 557, 561, 567, 571, 577, 01258 584, 590, 596, 602, 608, 613, 617, 621, 625, 629, 01259 633, 637, 641, 645, 649, 654, 659, 662, 665, 669, 01260 673, 677, 681, 685, 689, 693, 697, 701, 705, 709, 01261 713, 717, 720, 723, 727, 731, 735, 739, 740, 745, 01262 752, 754, 756, 758, 761, 766, 769, 773, 775, 777, 01263 779, 781, 784, 789, 792, 794, 797, 800, 805, 807, 01264 808, 811, 814, 817, 819, 821, 824, 828, 833, 837, 01265 842, 845, 847, 849, 851, 853, 855, 857, 859, 861, 01266 863, 864, 869, 870, 875, 879, 883, 886, 890, 894, 01267 896, 901, 905, 907, 908, 915, 920, 924, 927, 929, 01268 932, 935, 942, 949, 950, 951, 959, 960, 961, 969, 01269 975, 980, 981, 982, 992, 993, 1000, 1001, 1002, 1011, 01270 1012, 1018, 1019, 1026, 1027, 1028, 1038, 1040, 1042, 1044, 01271 1046, 1048, 1050, 1052, 1054, 1056, 1058, 1060, 1062, 1064, 01272 1066, 1068, 1070, 1072, 1074, 1077, 1079, 1081, 1083, 1089, 01273 1091, 1094, 1096, 1098, 1100, 1104, 1106, 1110, 1112, 1117, 01274 1124, 1128, 1134, 1137, 1142, 1144, 1148, 1155, 1164, 1169, 01275 1176, 1181, 1184, 1191, 1194, 1199, 1206, 1209, 1214, 1217, 01276 1222, 1224, 1226, 1228, 1232, 1234, 1239, 1241, 1244, 1246, 01277 1250, 1252, 1254, 1255, 1256, 1261, 1266, 1268, 1272, 1276, 01278 1277, 1283, 1286, 1291, 1296, 1299, 1304, 1309, 1313, 1317, 01279 1321, 1324, 1326, 1331, 1332, 1338, 1339, 1345, 1351, 1353, 01280 1355, 1362, 1364, 1366, 1368, 1370, 1373, 1375, 1378, 1380, 01281 1382, 1384, 1386, 1388, 1390, 1392, 1395, 1399, 1403, 1407, 01282 1411, 1415, 1416, 1420, 1422, 1425, 1429, 1433, 1434, 1438, 01283 1439, 1442, 1443, 1446, 1447, 1450, 1452, 1453, 1457, 1458, 01284 1459, 1465, 1467, 1469, 1471, 1473, 1476, 1478, 1480, 1482, 01285 1484, 1488, 1490, 1492, 1495, 1498, 1500, 1502, 1504, 1506, 01286 1508, 1510, 1512, 1514, 1516, 1518, 1520, 1522, 1524, 1526, 01287 1528, 1530, 1532, 1534, 1536, 1537, 1542, 1545, 1549, 1552, 01288 1559, 1568, 1573, 1580, 1585, 1592, 1595, 1600, 1607, 1610, 01289 1615, 1618, 1623, 1625, 1626, 1628, 1630, 1632, 1634, 1636, 01290 1638, 1640, 1644, 1646, 1650, 1654, 1658, 1660, 1664, 1666, 01291 1670, 1672, 1674, 1677, 1679, 1681, 1683, 1686, 1689, 1691, 01292 1693, 1694, 1699, 1701, 1704, 1706, 1710, 1714, 1717, 1719, 01293 1721, 1723, 1725, 1727, 1729, 1731, 1733, 1735, 1737, 1739, 01294 1741, 1742, 1744, 1745, 1747, 1750, 1753, 1754, 1756, 1758, 01295 1760, 1762, 1764, 1767 01296 }; 01297 01298 /* YYRHS -- A `-1'-separated list of the rules' RHS. */ 01299 static const yytype_int16 yyrhs[] = 01300 { 01301 149, 0, -1, -1, 150, 151, -1, 152, 314, -1, 01302 321, -1, 153, -1, 152, 320, 153, -1, 1, 153, 01303 -1, 158, -1, -1, 47, 154, 136, 151, 137, -1, 01304 156, 256, 231, 259, -1, 157, 314, -1, 321, -1, 01305 158, -1, 157, 320, 158, -1, 1, 158, -1, -1, 01306 45, 180, 159, 180, -1, 45, 54, 54, -1, 45, 01307 54, 64, -1, 45, 54, 63, -1, 6, 181, -1, 01308 158, 40, 162, -1, 158, 41, 162, -1, 158, 42, 01309 162, -1, 158, 43, 162, -1, 158, 44, 158, -1, 01310 48, 136, 156, 137, -1, 160, -1, 168, 109, 163, 01311 -1, 286, 87, 163, -1, 216, 138, 191, 317, 87, 01312 163, -1, 216, 139, 52, 87, 163, -1, 216, 139, 01313 56, 87, 163, -1, 216, 85, 56, 87, 163, -1, 01314 216, 85, 52, 87, 163, -1, 287, 87, 163, -1, 01315 175, 109, 198, -1, 168, 109, 187, -1, 168, 109, 01316 198, -1, 161, -1, 175, 109, 163, -1, 175, 109, 01317 160, -1, 163, -1, 161, 37, 161, -1, 161, 38, 01318 161, -1, 39, 315, 161, -1, 123, 163, -1, 185, 01319 -1, 161, -1, 167, -1, 164, -1, 249, -1, 249, 01320 139, 311, 193, -1, 249, 85, 311, 193, -1, -1, 01321 94, 166, 237, 156, 137, -1, 310, 193, -1, 310, 01322 193, 165, -1, 216, 139, 311, 193, -1, 216, 139, 01323 311, 193, 165, -1, 216, 85, 311, 193, -1, 216, 01324 85, 311, 193, 165, -1, 32, 193, -1, 31, 193, 01325 -1, 30, 192, -1, 21, 192, -1, 22, 192, -1, 01326 170, -1, 89, 169, 316, -1, 170, -1, 89, 169, 01327 316, -1, 172, -1, 172, 171, -1, 172, 95, 174, 01328 -1, 172, 95, 174, 140, 173, -1, 172, 95, -1, 01329 172, 95, 140, 173, -1, 95, 174, -1, 95, 174, 01330 140, 173, -1, 95, -1, 95, 140, 173, -1, 174, 01331 -1, 89, 169, 316, -1, 171, 140, -1, 172, 171, 01332 140, -1, 171, -1, 173, 140, 171, -1, 283, -1, 01333 284, -1, 216, 138, 191, 317, -1, 216, 139, 52, 01334 -1, 216, 85, 52, -1, 216, 139, 56, -1, 216, 01335 85, 56, -1, 86, 56, -1, 287, -1, 283, -1, 01336 284, -1, 216, 138, 191, 317, -1, 216, 139, 52, 01337 -1, 216, 85, 52, -1, 216, 139, 56, -1, 216, 01338 85, 56, -1, 86, 56, -1, 287, -1, 52, -1, 01339 56, -1, 86, 176, -1, 176, -1, 216, 85, 176, 01340 -1, 52, -1, 56, -1, 53, -1, 183, -1, 184, 01341 -1, 178, -1, 279, -1, 179, -1, 281, -1, 180, 01342 -1, -1, 181, 140, 182, 180, -1, 114, -1, 115, 01343 -1, 116, -1, 69, -1, 70, -1, 71, -1, 77, 01344 -1, 78, -1, 112, -1, 73, -1, 113, -1, 74, 01345 -1, 72, -1, 83, -1, 84, -1, 117, -1, 118, 01346 -1, 119, -1, 95, -1, 120, -1, 121, -1, 68, 01347 -1, 123, -1, 124, -1, 66, -1, 67, -1, 81, 01348 -1, 82, -1, 141, -1, 49, -1, 50, -1, 51, 01349 -1, 47, -1, 48, -1, 45, -1, 37, -1, 7, 01350 -1, 21, -1, 16, -1, 3, -1, 5, -1, 46, 01351 -1, 26, -1, 15, -1, 14, -1, 10, -1, 9, 01352 -1, 36, -1, 20, -1, 25, -1, 4, -1, 22, 01353 -1, 34, -1, 39, -1, 38, -1, 23, -1, 8, 01354 -1, 24, -1, 30, -1, 33, -1, 32, -1, 13, 01355 -1, 35, -1, 6, -1, 17, -1, 31, -1, 11, 01356 -1, 12, -1, 18, -1, 19, -1, 175, 109, 185, 01357 -1, 175, 109, 185, 44, 185, -1, 286, 87, 185, 01358 -1, 286, 87, 185, 44, 185, -1, 216, 138, 191, 01359 317, 87, 185, -1, 216, 139, 52, 87, 185, -1, 01360 216, 139, 56, 87, 185, -1, 216, 85, 52, 87, 01361 185, -1, 216, 85, 56, 87, 185, -1, 86, 56, 01362 87, 185, -1, 287, 87, 185, -1, 185, 79, 185, 01363 -1, 185, 80, 185, -1, 185, 117, 185, -1, 185, 01364 118, 185, -1, 185, 119, 185, -1, 185, 120, 185, 01365 -1, 185, 121, 185, -1, 185, 68, 185, -1, 122, 01366 59, 68, 185, -1, 122, 60, 68, 185, -1, 66, 01367 185, -1, 67, 185, -1, 185, 114, 185, -1, 185, 01368 115, 185, -1, 185, 116, 185, -1, 185, 69, 185, 01369 -1, 185, 112, 185, -1, 185, 73, 185, -1, 185, 01370 113, 185, -1, 185, 74, 185, -1, 185, 70, 185, 01371 -1, 185, 71, 185, -1, 185, 72, 185, -1, 185, 01372 77, 185, -1, 185, 78, 185, -1, 123, 185, -1, 01373 124, 185, -1, 185, 83, 185, -1, 185, 84, 185, 01374 -1, 185, 75, 185, -1, 185, 76, 185, -1, -1, 01375 46, 315, 186, 185, -1, 185, 110, 185, 315, 111, 01376 185, -1, 199, -1, 185, -1, 321, -1, 197, 318, 01377 -1, 197, 140, 308, 318, -1, 308, 318, -1, 142, 01378 191, 316, -1, 321, -1, 189, -1, 321, -1, 192, 01379 -1, 197, 140, -1, 197, 140, 308, 140, -1, 308, 01380 140, -1, 167, -1, 197, 196, -1, 308, 196, -1, 01381 197, 140, 308, 196, -1, 195, -1, -1, 194, 192, 01382 -1, 96, 187, -1, 140, 195, -1, 321, -1, 187, 01383 -1, 95, 187, -1, 197, 140, 187, -1, 197, 140, 01384 95, 187, -1, 197, 140, 187, -1, 197, 140, 95, 01385 187, -1, 95, 187, -1, 260, -1, 261, -1, 264, 01386 -1, 265, -1, 266, -1, 269, -1, 285, -1, 287, 01387 -1, 53, -1, -1, 217, 200, 155, 227, -1, -1, 01388 90, 161, 201, 316, -1, 89, 156, 143, -1, 216, 01389 85, 56, -1, 86, 56, -1, 92, 188, 144, -1, 01390 93, 307, 137, -1, 30, -1, 31, 142, 192, 316, 01391 -1, 31, 142, 316, -1, 31, -1, -1, 46, 315, 01392 142, 202, 161, 316, -1, 39, 142, 161, 316, -1, 01393 39, 142, 316, -1, 310, 251, -1, 250, -1, 250, 01394 251, -1, 97, 242, -1, 218, 162, 228, 156, 230, 01395 227, -1, 219, 162, 228, 156, 231, 227, -1, -1, 01396 -1, 220, 203, 162, 229, 204, 156, 227, -1, -1, 01397 -1, 221, 205, 162, 229, 206, 156, 227, -1, 222, 01398 162, 314, 254, 227, -1, 222, 314, 254, 227, -1, 01399 -1, -1, 223, 232, 25, 207, 162, 229, 208, 156, 01400 227, -1, -1, 224, 177, 288, 209, 155, 227, -1, 01401 -1, -1, 224, 83, 161, 210, 319, 211, 155, 227, 01402 -1, -1, 225, 177, 212, 155, 227, -1, -1, 226, 01403 178, 213, 290, 155, 227, -1, -1, -1, 226, 305, 01404 313, 214, 178, 215, 290, 155, 227, -1, 21, -1, 01405 22, -1, 23, -1, 24, -1, 199, -1, 7, -1, 01406 11, -1, 12, -1, 18, -1, 19, -1, 16, -1, 01407 20, -1, 3, -1, 4, -1, 5, -1, 10, -1, 01408 319, -1, 13, -1, 319, 13, -1, 319, -1, 27, 01409 -1, 231, -1, 14, 162, 228, 156, 230, -1, 321, 01410 -1, 15, 156, -1, 175, -1, 168, -1, 293, -1, 01411 89, 235, 316, -1, 233, -1, 234, 140, 233, -1, 01412 234, -1, 234, 140, 95, 293, -1, 234, 140, 95, 01413 293, 140, 234, -1, 234, 140, 95, -1, 234, 140, 01414 95, 140, 234, -1, 95, 293, -1, 95, 293, 140, 01415 234, -1, 95, -1, 95, 140, 234, -1, 295, 140, 01416 298, 140, 301, 304, -1, 295, 140, 298, 140, 301, 01417 140, 295, 304, -1, 295, 140, 298, 304, -1, 295, 01418 140, 298, 140, 295, 304, -1, 295, 140, 301, 304, 01419 -1, 295, 140, -1, 295, 140, 301, 140, 295, 304, 01420 -1, 295, 304, -1, 298, 140, 301, 304, -1, 298, 01421 140, 301, 140, 295, 304, -1, 298, 304, -1, 298, 01422 140, 295, 304, -1, 301, 304, -1, 301, 140, 295, 01423 304, -1, 303, -1, 321, -1, 238, -1, 114, 239, 01424 114, -1, 76, -1, 114, 236, 239, 114, -1, 321, 01425 -1, 145, 240, -1, 241, -1, 240, 140, 241, -1, 01426 52, -1, 292, -1, -1, -1, 243, 244, 245, 246, 01427 -1, 142, 291, 239, 316, -1, 291, -1, 107, 156, 01428 137, -1, 29, 156, 10, -1, -1, 28, 248, 237, 01429 156, 10, -1, 167, 247, -1, 249, 139, 311, 190, 01430 -1, 249, 85, 311, 190, -1, 310, 189, -1, 216, 01431 139, 311, 190, -1, 216, 85, 311, 189, -1, 216, 01432 85, 312, -1, 216, 139, 189, -1, 216, 85, 189, 01433 -1, 32, 189, -1, 32, -1, 216, 138, 191, 317, 01434 -1, -1, 136, 252, 237, 156, 137, -1, -1, 26, 01435 253, 237, 156, 10, -1, 17, 197, 228, 156, 255, 01436 -1, 231, -1, 254, -1, 8, 257, 258, 228, 156, 01437 256, -1, 321, -1, 187, -1, 198, -1, 321, -1, 01438 88, 175, -1, 321, -1, 9, 156, -1, 321, -1, 01439 282, -1, 279, -1, 281, -1, 262, -1, 62, -1, 01440 263, -1, 262, 263, -1, 99, 271, 106, -1, 100, 01441 272, 106, -1, 101, 273, 65, -1, 102, 146, 106, 01442 -1, 102, 267, 106, -1, -1, 267, 268, 146, -1, 01443 274, -1, 268, 274, -1, 103, 146, 106, -1, 103, 01444 270, 106, -1, -1, 270, 61, 146, -1, -1, 271, 01445 274, -1, -1, 272, 274, -1, -1, 273, 274, -1, 01446 61, -1, -1, 105, 275, 278, -1, -1, -1, 104, 01447 276, 277, 156, 137, -1, 54, -1, 55, -1, 57, 01448 -1, 287, -1, 98, 280, -1, 178, -1, 55, -1, 01449 54, -1, 57, -1, 98, 272, 106, -1, 59, -1, 01450 60, -1, 122, 59, -1, 122, 60, -1, 52, -1, 01451 55, -1, 54, -1, 56, -1, 57, -1, 34, -1, 01452 33, -1, 35, -1, 36, -1, 50, -1, 49, -1, 01453 51, -1, 283, -1, 284, -1, 283, -1, 284, -1, 01454 63, -1, 64, -1, 319, -1, -1, 113, 289, 162, 01455 319, -1, 1, 319, -1, 142, 291, 316, -1, 291, 01456 319, -1, 295, 140, 299, 140, 301, 304, -1, 295, 01457 140, 299, 140, 301, 140, 295, 304, -1, 295, 140, 01458 299, 304, -1, 295, 140, 299, 140, 295, 304, -1, 01459 295, 140, 301, 304, -1, 295, 140, 301, 140, 295, 01460 304, -1, 295, 304, -1, 299, 140, 301, 304, -1, 01461 299, 140, 301, 140, 295, 304, -1, 299, 304, -1, 01462 299, 140, 295, 304, -1, 301, 304, -1, 301, 140, 01463 295, 304, -1, 303, -1, -1, 56, -1, 55, -1, 01464 54, -1, 57, -1, 292, -1, 52, -1, 293, -1, 01465 89, 235, 316, -1, 294, -1, 295, 140, 294, -1, 01466 52, 109, 187, -1, 52, 109, 216, -1, 297, -1, 01467 298, 140, 297, -1, 296, -1, 299, 140, 296, -1, 01468 119, -1, 95, -1, 300, 52, -1, 300, -1, 116, 01469 -1, 96, -1, 302, 52, -1, 140, 303, -1, 321, 01470 -1, 285, -1, -1, 142, 306, 161, 316, -1, 321, 01471 -1, 308, 318, -1, 309, -1, 308, 140, 309, -1, 01472 187, 88, 187, -1, 58, 187, -1, 52, -1, 56, 01473 -1, 53, -1, 52, -1, 56, -1, 53, -1, 183, 01474 -1, 52, -1, 53, -1, 183, -1, 139, -1, 85, 01475 -1, -1, 320, -1, -1, 147, -1, 315, 143, -1, 01476 315, 144, -1, -1, 147, -1, 140, -1, 145, -1, 01477 147, -1, 319, -1, 320, 145, -1, -1 01478 }; 01479 01480 /* YYRLINE[YYN] -- source line where rule number YYN was defined. */ 01481 static const yytype_uint16 yyrline[] = 01482 { 01483 0, 782, 782, 782, 813, 824, 833, 841, 849, 855, 01484 857, 856, 880, 913, 924, 933, 941, 949, 955, 955, 01485 963, 971, 982, 992, 1000, 1009, 1018, 1031, 1044, 1053, 01486 1065, 1066, 1076, 1105, 1126, 1143, 1160, 1171, 1188, 1198, 01487 1207, 1216, 1225, 1228, 1237, 1249, 1250, 1258, 1266, 1274, 01488 1282, 1285, 1297, 1298, 1301, 1302, 1311, 1323, 1322, 1344, 01489 1353, 1365, 1374, 1386, 1395, 1407, 1416, 1425, 1433, 1441, 01490 1451, 1452, 1462, 1463, 1473, 1481, 1489, 1497, 1506, 1514, 01491 1523, 1531, 1540, 1548, 1559, 1560, 1570, 1578, 1588, 1596, 01492 1606, 1610, 1614, 1622, 1630, 1638, 1646, 1658, 1668, 1680, 01493 1689, 1698, 1706, 1714, 1722, 1730, 1743, 1756, 1767, 1775, 01494 1778, 1786, 1794, 1804, 1805, 1806, 1807, 1812, 1823, 1824, 01495 1827, 1835, 1838, 1846, 1846, 1856, 1857, 1858, 1859, 1860, 01496 1861, 1862, 1863, 1864, 1865, 1866, 1867, 1868, 1869, 1870, 01497 1871, 1872, 1873, 1874, 1875, 1876, 1877, 1878, 1879, 1880, 01498 1881, 1882, 1883, 1884, 1887, 1887, 1887, 1888, 1888, 1889, 01499 1889, 1889, 1890, 1890, 1890, 1890, 1891, 1891, 1891, 1891, 01500 1892, 1892, 1892, 1893, 1893, 1893, 1893, 1894, 1894, 1894, 01501 1894, 1895, 1895, 1895, 1895, 1896, 1896, 1896, 1896, 1897, 01502 1897, 1897, 1897, 1898, 1898, 1901, 1910, 1920, 1949, 1980, 01503 2006, 2023, 2040, 2057, 2068, 2079, 2090, 2104, 2118, 2126, 01504 2134, 2142, 2150, 2158, 2166, 2175, 2184, 2192, 2200, 2208, 01505 2216, 2224, 2232, 2240, 2248, 2256, 2264, 2272, 2280, 2288, 01506 2299, 2307, 2315, 2323, 2331, 2339, 2347, 2355, 2355, 2365, 01507 2375, 2381, 2393, 2394, 2398, 2406, 2416, 2426, 2427, 2430, 01508 2431, 2432, 2436, 2444, 2454, 2463, 2471, 2481, 2490, 2499, 01509 2499, 2511, 2521, 2525, 2531, 2539, 2547, 2561, 2577, 2591, 01510 2606, 2616, 2617, 2618, 2619, 2620, 2621, 2622, 2623, 2624, 01511 2633, 2632, 2657, 2657, 2666, 2674, 2682, 2690, 2703, 2711, 01512 2719, 2727, 2735, 2743, 2743, 2753, 2761, 2769, 2780, 2781, 01513 2792, 2796, 2808, 2820, 2820, 2820, 2831, 2831, 2831, 2842, 01514 2853, 2862, 2864, 2861, 2928, 2927, 2949, 2954, 2948, 2973, 01515 2972, 2994, 2993, 3016, 3017, 3016, 3037, 3045, 3053, 3061, 01516 3071, 3083, 3089, 3095, 3101, 3107, 3113, 3119, 3125, 3131, 01517 3137, 3147, 3153, 3158, 3159, 3166, 3171, 3174, 3175, 3188, 01518 3189, 3199, 3200, 3203, 3211, 3221, 3229, 3239, 3247, 3256, 01519 3265, 3273, 3281, 3290, 3302, 3310, 3320, 3328, 3336, 3344, 01520 3352, 3360, 3369, 3377, 3385, 3393, 3401, 3409, 3417, 3425, 01521 3433, 3443, 3444, 3450, 3459, 3468, 3479, 3480, 3490, 3497, 01522 3506, 3514, 3520, 3523, 3520, 3541, 3549, 3559, 3563, 3570, 01523 3569, 3590, 3606, 3615, 3626, 3635, 3645, 3655, 3663, 3674, 01524 3685, 3693, 3701, 3716, 3715, 3735, 3734, 3755, 3767, 3768, 01525 3771, 3790, 3793, 3801, 3809, 3812, 3816, 3819, 3827, 3830, 01526 3831, 3839, 3842, 3859, 3860, 3861, 3871, 3881, 3908, 3973, 01527 3982, 3993, 4000, 4010, 4018, 4028, 4037, 4048, 4055, 4066, 01528 4073, 4084, 4091, 4102, 4109, 4138, 4140, 4139, 4156, 4162, 01529 4155, 4181, 4189, 4197, 4205, 4208, 4219, 4220, 4221, 4222, 01530 4225, 4255, 4256, 4257, 4265, 4275, 4276, 4277, 4278, 4279, 01531 4282, 4283, 4284, 4285, 4286, 4287, 4288, 4291, 4304, 4314, 01532 4322, 4332, 4333, 4336, 4345, 4344, 4352, 4364, 4374, 4382, 01533 4390, 4398, 4406, 4414, 4422, 4430, 4438, 4446, 4454, 4462, 01534 4470, 4478, 4486, 4495, 4504, 4513, 4522, 4531, 4542, 4543, 01535 4550, 4559, 4578, 4585, 4598, 4610, 4622, 4630, 4646, 4654, 01536 4670, 4671, 4674, 4687, 4698, 4699, 4702, 4719, 4723, 4733, 01537 4743, 4743, 4772, 4773, 4783, 4790, 4800, 4808, 4818, 4819, 01538 4820, 4823, 4824, 4825, 4826, 4829, 4830, 4831, 4834, 4839, 01539 4846, 4847, 4850, 4851, 4854, 4857, 4860, 4861, 4862, 4865, 01540 4866, 4869, 4870, 4874 01541 }; 01542 #endif 01543 01544 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE 01545 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. 01546 First, the terminals, then, starting at YYNTOKENS, nonterminals. */ 01547 static const char *const yytname[] = 01548 { 01549 "$end", "error", "$undefined", "keyword_class", "keyword_module", 01550 "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue", 01551 "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless", 01552 "keyword_then", "keyword_elsif", "keyword_else", "keyword_case", 01553 "keyword_when", "keyword_while", "keyword_until", "keyword_for", 01554 "keyword_break", "keyword_next", "keyword_redo", "keyword_retry", 01555 "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block", 01556 "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super", 01557 "keyword_self", "keyword_nil", "keyword_true", "keyword_false", 01558 "keyword_and", "keyword_or", "keyword_not", "modifier_if", 01559 "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue", 01560 "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END", 01561 "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__", 01562 "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL", 01563 "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF", 01564 "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ", 01565 "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH", 01566 "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2", 01567 "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN", 01568 "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA", 01569 "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG", 01570 "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG", 01571 "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'", 01572 "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL", 01573 "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias", 01574 "id_core_set_variable_alias", "id_core_undef_method", 01575 "id_core_define_method", "id_core_define_singleton_method", 01576 "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','", 01577 "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program", 01578 "@1", "top_compstmt", "top_stmts", "top_stmt", "@2", "bodystmt", 01579 "compstmt", "stmts", "stmt", "@3", "command_asgn", "expr", "expr_value", 01580 "command_call", "block_command", "cmd_brace_block", "@4", "command", 01581 "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", 01582 "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", 01583 "fitem", "undef_list", "@5", "op", "reswords", "arg", "@6", "arg_value", 01584 "aref_args", "paren_args", "opt_paren_args", "opt_call_args", 01585 "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args", 01586 "mrhs", "primary", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15", 01587 "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "primary_value", 01588 "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for", 01589 "k_class", "k_module", "k_def", "k_end", "then", "do", "if_tail", 01590 "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs", "block_param", 01591 "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar", 01592 "lambda", "@24", "@25", "f_larglist", "lambda_body", "do_block", "@26", 01593 "block_call", "method_call", "brace_block", "@27", "@28", "case_body", 01594 "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal", 01595 "strings", "string", "string1", "xstring", "regexp", "words", 01596 "word_list", "word", "qwords", "qword_list", "string_contents", 01597 "xstring_contents", "regexp_contents", "string_content", "@29", "@30", 01598 "@31", "string_dvar", "symbol", "sym", "dsym", "numeric", 01599 "user_variable", "keyword_variable", "var_ref", "var_lhs", "backref", 01600 "superclass", "@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg", 01601 "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg", 01602 "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg", 01603 "opt_f_block_arg", "singleton", "@33", "assoc_list", "assocs", "assoc", 01604 "operation", "operation2", "operation3", "dot_or_colon", "opt_terms", 01605 "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0 01606 }; 01607 #endif 01608 01609 # ifdef YYPRINT 01610 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to 01611 token YYLEX-NUM. */ 01612 static const yytype_uint16 yytoknum[] = 01613 { 01614 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 01615 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 01616 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 01617 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 01618 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 01619 305, 306, 307, 308, 309, 310, 311, 312, 313, 314, 01620 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 01621 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 01622 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 01623 345, 346, 347, 348, 349, 350, 351, 352, 353, 354, 01624 355, 356, 357, 358, 359, 360, 361, 362, 363, 61, 01625 63, 58, 62, 60, 124, 94, 38, 43, 45, 42, 01626 47, 37, 364, 33, 126, 365, 366, 367, 368, 369, 01627 370, 371, 372, 373, 374, 375, 123, 125, 91, 46, 01628 44, 96, 40, 41, 93, 59, 32, 10 01629 }; 01630 # endif 01631 01632 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */ 01633 static const yytype_uint16 yyr1[] = 01634 { 01635 0, 148, 150, 149, 151, 152, 152, 152, 152, 153, 01636 154, 153, 155, 156, 157, 157, 157, 157, 159, 158, 01637 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 01638 158, 158, 158, 158, 158, 158, 158, 158, 158, 158, 01639 158, 158, 158, 160, 160, 161, 161, 161, 161, 161, 01640 161, 162, 163, 163, 164, 164, 164, 166, 165, 167, 01641 167, 167, 167, 167, 167, 167, 167, 167, 167, 167, 01642 168, 168, 169, 169, 170, 170, 170, 170, 170, 170, 01643 170, 170, 170, 170, 171, 171, 172, 172, 173, 173, 01644 174, 174, 174, 174, 174, 174, 174, 174, 174, 175, 01645 175, 175, 175, 175, 175, 175, 175, 175, 176, 176, 01646 177, 177, 177, 178, 178, 178, 178, 178, 179, 179, 01647 180, 180, 181, 182, 181, 183, 183, 183, 183, 183, 01648 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 01649 183, 183, 183, 183, 183, 183, 183, 183, 183, 183, 01650 183, 183, 183, 183, 184, 184, 184, 184, 184, 184, 01651 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01652 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01653 184, 184, 184, 184, 184, 184, 184, 184, 184, 184, 01654 184, 184, 184, 184, 184, 185, 185, 185, 185, 185, 01655 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 01656 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 01657 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 01658 185, 185, 185, 185, 185, 185, 185, 186, 185, 185, 01659 185, 187, 188, 188, 188, 188, 189, 190, 190, 191, 01660 191, 191, 191, 191, 192, 192, 192, 192, 192, 194, 01661 193, 195, 196, 196, 197, 197, 197, 197, 198, 198, 01662 198, 199, 199, 199, 199, 199, 199, 199, 199, 199, 01663 200, 199, 201, 199, 199, 199, 199, 199, 199, 199, 01664 199, 199, 199, 202, 199, 199, 199, 199, 199, 199, 01665 199, 199, 199, 203, 204, 199, 205, 206, 199, 199, 01666 199, 207, 208, 199, 209, 199, 210, 211, 199, 212, 01667 199, 213, 199, 214, 215, 199, 199, 199, 199, 199, 01668 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 01669 226, 227, 228, 228, 228, 229, 229, 230, 230, 231, 01670 231, 232, 232, 233, 233, 234, 234, 235, 235, 235, 01671 235, 235, 235, 235, 235, 235, 236, 236, 236, 236, 01672 236, 236, 236, 236, 236, 236, 236, 236, 236, 236, 01673 236, 237, 237, 238, 238, 238, 239, 239, 240, 240, 01674 241, 241, 243, 244, 242, 245, 245, 246, 246, 248, 01675 247, 249, 249, 249, 250, 250, 250, 250, 250, 250, 01676 250, 250, 250, 252, 251, 253, 251, 254, 255, 255, 01677 256, 256, 257, 257, 257, 258, 258, 259, 259, 260, 01678 260, 260, 261, 262, 262, 262, 263, 264, 265, 266, 01679 266, 267, 267, 268, 268, 269, 269, 270, 270, 271, 01680 271, 272, 272, 273, 273, 274, 275, 274, 276, 277, 01681 274, 278, 278, 278, 278, 279, 280, 280, 280, 280, 01682 281, 282, 282, 282, 282, 283, 283, 283, 283, 283, 01683 284, 284, 284, 284, 284, 284, 284, 285, 285, 286, 01684 286, 287, 287, 288, 289, 288, 288, 290, 290, 291, 01685 291, 291, 291, 291, 291, 291, 291, 291, 291, 291, 01686 291, 291, 291, 291, 292, 292, 292, 292, 293, 293, 01687 294, 294, 295, 295, 296, 297, 298, 298, 299, 299, 01688 300, 300, 301, 301, 302, 302, 303, 304, 304, 305, 01689 306, 305, 307, 307, 308, 308, 309, 309, 310, 310, 01690 310, 311, 311, 311, 311, 312, 312, 312, 313, 313, 01691 314, 314, 315, 315, 316, 317, 318, 318, 318, 319, 01692 319, 320, 320, 321 01693 }; 01694 01695 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */ 01696 static const yytype_uint8 yyr2[] = 01697 { 01698 0, 2, 0, 2, 2, 1, 1, 3, 2, 1, 01699 0, 5, 4, 2, 1, 1, 3, 2, 0, 4, 01700 3, 3, 3, 2, 3, 3, 3, 3, 3, 4, 01701 1, 3, 3, 6, 5, 5, 5, 5, 3, 3, 01702 3, 3, 1, 3, 3, 1, 3, 3, 3, 2, 01703 1, 1, 1, 1, 1, 4, 4, 0, 5, 2, 01704 3, 4, 5, 4, 5, 2, 2, 2, 2, 2, 01705 1, 3, 1, 3, 1, 2, 3, 5, 2, 4, 01706 2, 4, 1, 3, 1, 3, 2, 3, 1, 3, 01707 1, 1, 4, 3, 3, 3, 3, 2, 1, 1, 01708 1, 4, 3, 3, 3, 3, 2, 1, 1, 1, 01709 2, 1, 3, 1, 1, 1, 1, 1, 1, 1, 01710 1, 1, 1, 0, 4, 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, 1, 01714 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01715 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01716 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01717 1, 1, 1, 1, 1, 3, 5, 3, 5, 6, 01718 5, 5, 5, 5, 4, 3, 3, 3, 3, 3, 01719 3, 3, 3, 3, 4, 4, 2, 2, 3, 3, 01720 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 01721 3, 2, 2, 3, 3, 3, 3, 0, 4, 6, 01722 1, 1, 1, 2, 4, 2, 3, 1, 1, 1, 01723 1, 2, 4, 2, 1, 2, 2, 4, 1, 0, 01724 2, 2, 2, 1, 1, 2, 3, 4, 3, 4, 01725 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01726 0, 4, 0, 4, 3, 3, 2, 3, 3, 1, 01727 4, 3, 1, 0, 6, 4, 3, 2, 1, 2, 01728 2, 6, 6, 0, 0, 7, 0, 0, 7, 5, 01729 4, 0, 0, 9, 0, 6, 0, 0, 8, 0, 01730 5, 0, 6, 0, 0, 9, 1, 1, 1, 1, 01731 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01732 1, 1, 1, 1, 2, 1, 1, 1, 5, 1, 01733 2, 1, 1, 1, 3, 1, 3, 1, 4, 6, 01734 3, 5, 2, 4, 1, 3, 6, 8, 4, 6, 01735 4, 2, 6, 2, 4, 6, 2, 4, 2, 4, 01736 1, 1, 1, 3, 1, 4, 1, 2, 1, 3, 01737 1, 1, 0, 0, 4, 4, 1, 3, 3, 0, 01738 5, 2, 4, 4, 2, 4, 4, 3, 3, 3, 01739 2, 1, 4, 0, 5, 0, 5, 5, 1, 1, 01740 6, 1, 1, 1, 1, 2, 1, 2, 1, 1, 01741 1, 1, 1, 1, 1, 2, 3, 3, 3, 3, 01742 3, 0, 3, 1, 2, 3, 3, 0, 3, 0, 01743 2, 0, 2, 0, 2, 1, 0, 3, 0, 0, 01744 5, 1, 1, 1, 1, 2, 1, 1, 1, 1, 01745 3, 1, 1, 2, 2, 1, 1, 1, 1, 1, 01746 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01747 1, 1, 1, 1, 0, 4, 2, 3, 2, 6, 01748 8, 4, 6, 4, 6, 2, 4, 6, 2, 4, 01749 2, 4, 1, 0, 1, 1, 1, 1, 1, 1, 01750 1, 3, 1, 3, 3, 3, 1, 3, 1, 3, 01751 1, 1, 2, 1, 1, 1, 2, 2, 1, 1, 01752 0, 4, 1, 2, 1, 3, 3, 2, 1, 1, 01753 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 01754 0, 1, 0, 1, 2, 2, 0, 1, 1, 1, 01755 1, 1, 2, 0 01756 }; 01757 01758 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state 01759 STATE-NUM when YYTABLE doesn't specify something else to do. Zero 01760 means the default is an error. */ 01761 static const yytype_uint16 yydefact[] = 01762 { 01763 2, 0, 0, 1, 0, 338, 339, 340, 0, 331, 01764 332, 333, 336, 334, 335, 337, 326, 327, 328, 329, 01765 289, 259, 259, 481, 480, 482, 483, 562, 0, 562, 01766 10, 0, 485, 484, 486, 475, 550, 477, 476, 478, 01767 479, 471, 472, 433, 491, 492, 0, 0, 0, 0, 01768 0, 573, 573, 82, 392, 451, 449, 451, 453, 441, 01769 447, 0, 0, 0, 3, 560, 6, 9, 30, 42, 01770 45, 53, 52, 0, 70, 0, 74, 84, 0, 50, 01771 240, 0, 280, 0, 0, 303, 306, 560, 0, 0, 01772 0, 0, 54, 298, 271, 272, 432, 434, 273, 274, 01773 275, 276, 430, 431, 429, 487, 488, 277, 0, 278, 01774 259, 5, 8, 164, 175, 165, 188, 161, 181, 171, 01775 170, 191, 192, 186, 169, 168, 163, 189, 193, 194, 01776 173, 162, 176, 180, 182, 174, 167, 183, 190, 185, 01777 184, 177, 187, 172, 160, 179, 178, 159, 166, 157, 01778 158, 154, 155, 156, 113, 115, 114, 149, 150, 146, 01779 128, 129, 130, 137, 134, 136, 131, 132, 151, 152, 01780 138, 139, 143, 133, 135, 125, 126, 127, 140, 141, 01781 142, 144, 145, 147, 148, 153, 118, 120, 122, 23, 01782 116, 117, 119, 121, 0, 0, 0, 0, 0, 0, 01783 0, 254, 0, 241, 264, 68, 258, 573, 0, 487, 01784 488, 0, 278, 573, 544, 69, 67, 562, 66, 0, 01785 573, 410, 65, 562, 563, 0, 0, 18, 237, 0, 01786 0, 326, 327, 289, 292, 411, 216, 0, 0, 217, 01787 286, 0, 0, 0, 560, 15, 562, 72, 14, 282, 01788 0, 566, 566, 242, 0, 0, 566, 542, 562, 0, 01789 0, 0, 80, 330, 0, 90, 91, 98, 300, 393, 01790 468, 467, 469, 466, 0, 465, 0, 0, 0, 0, 01791 0, 0, 0, 473, 474, 49, 231, 232, 569, 570, 01792 4, 571, 561, 0, 0, 0, 0, 0, 0, 0, 01793 399, 401, 0, 86, 0, 78, 75, 0, 0, 0, 01794 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01795 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 01796 0, 0, 0, 0, 0, 573, 0, 0, 51, 0, 01797 0, 0, 0, 560, 0, 561, 0, 352, 351, 0, 01798 0, 487, 488, 278, 108, 109, 0, 0, 111, 0, 01799 0, 487, 488, 278, 319, 184, 177, 187, 172, 154, 01800 155, 156, 113, 114, 540, 321, 539, 0, 0, 0, 01801 415, 413, 299, 435, 0, 0, 404, 59, 297, 123, 01802 547, 286, 265, 261, 0, 0, 0, 255, 263, 0, 01803 573, 0, 0, 0, 0, 256, 562, 0, 291, 260, 01804 562, 250, 573, 573, 249, 562, 296, 48, 20, 22, 01805 21, 0, 293, 0, 0, 0, 0, 0, 0, 17, 01806 562, 284, 13, 561, 71, 562, 287, 568, 567, 243, 01807 568, 245, 288, 543, 0, 97, 473, 474, 88, 83, 01808 0, 0, 573, 0, 513, 455, 458, 456, 470, 452, 01809 436, 450, 437, 438, 454, 439, 440, 0, 443, 445, 01810 0, 446, 0, 0, 572, 7, 24, 25, 26, 27, 01811 28, 46, 47, 573, 0, 31, 40, 0, 41, 562, 01812 0, 76, 87, 44, 43, 0, 195, 264, 39, 213, 01813 221, 226, 227, 228, 223, 225, 235, 236, 229, 230, 01814 206, 207, 233, 234, 562, 222, 224, 218, 219, 220, 01815 208, 209, 210, 211, 212, 551, 556, 552, 557, 409, 01816 259, 407, 562, 551, 553, 552, 554, 408, 259, 0, 01817 573, 343, 0, 342, 0, 0, 0, 0, 0, 0, 01818 286, 0, 573, 0, 311, 316, 108, 109, 110, 0, 01819 494, 314, 493, 0, 573, 0, 0, 0, 513, 559, 01820 558, 323, 551, 552, 259, 259, 573, 573, 32, 197, 01821 38, 205, 57, 60, 0, 195, 546, 0, 266, 262, 01822 573, 555, 552, 562, 551, 552, 545, 290, 564, 246, 01823 251, 253, 295, 19, 0, 238, 0, 29, 0, 573, 01824 204, 73, 16, 283, 566, 0, 81, 94, 96, 562, 01825 551, 552, 519, 516, 515, 514, 517, 0, 531, 535, 01826 534, 530, 513, 0, 396, 518, 520, 522, 573, 528, 01827 573, 533, 573, 0, 512, 459, 0, 442, 444, 448, 01828 214, 215, 384, 573, 0, 382, 381, 270, 0, 85, 01829 79, 0, 0, 0, 0, 0, 0, 406, 63, 0, 01830 412, 0, 0, 248, 405, 61, 247, 341, 281, 573, 01831 573, 421, 573, 344, 573, 346, 304, 345, 307, 0, 01832 0, 310, 555, 285, 562, 551, 552, 0, 0, 496, 01833 0, 0, 108, 109, 112, 562, 0, 562, 513, 0, 01834 0, 0, 403, 56, 402, 55, 0, 0, 0, 573, 01835 124, 267, 257, 0, 0, 412, 0, 0, 573, 562, 01836 11, 244, 89, 92, 0, 519, 0, 364, 355, 357, 01837 562, 353, 573, 0, 0, 394, 0, 505, 538, 0, 01838 508, 532, 0, 510, 536, 0, 461, 462, 463, 457, 01839 464, 519, 0, 573, 0, 573, 526, 573, 573, 380, 01840 386, 0, 0, 268, 77, 196, 0, 37, 202, 36, 01841 203, 64, 565, 0, 34, 200, 35, 201, 62, 422, 01842 423, 573, 424, 0, 573, 349, 0, 0, 347, 0, 01843 0, 0, 309, 0, 0, 412, 0, 317, 0, 0, 01844 412, 320, 541, 562, 0, 498, 324, 0, 0, 198, 01845 0, 0, 252, 294, 524, 562, 0, 362, 0, 521, 01846 562, 0, 0, 523, 573, 573, 537, 573, 529, 573, 01847 573, 0, 0, 390, 387, 388, 391, 0, 383, 371, 01848 373, 0, 376, 0, 378, 400, 269, 239, 33, 199, 01849 0, 0, 426, 350, 0, 12, 428, 0, 301, 302, 01850 0, 0, 266, 573, 312, 0, 495, 315, 497, 322, 01851 513, 416, 414, 0, 354, 365, 0, 360, 356, 395, 01852 398, 397, 0, 501, 0, 503, 0, 509, 0, 506, 01853 511, 460, 0, 525, 0, 385, 573, 573, 573, 527, 01854 573, 573, 0, 425, 0, 99, 100, 107, 0, 427, 01855 0, 305, 308, 418, 419, 417, 0, 0, 0, 58, 01856 0, 363, 0, 358, 573, 573, 573, 573, 286, 0, 01857 389, 0, 368, 0, 370, 377, 0, 374, 379, 106, 01858 0, 573, 0, 573, 573, 0, 318, 0, 361, 0, 01859 502, 0, 499, 504, 507, 555, 285, 573, 573, 573, 01860 573, 555, 105, 562, 551, 552, 420, 348, 313, 325, 01861 359, 573, 369, 0, 366, 372, 375, 412, 500, 573, 01862 367 01863 }; 01864 01865 /* YYDEFGOTO[NTERM-NUM]. */ 01866 static const yytype_int16 yydefgoto[] = 01867 { 01868 -1, 1, 2, 64, 65, 66, 229, 539, 540, 244, 01869 245, 421, 68, 69, 339, 70, 71, 583, 719, 72, 01870 73, 246, 74, 75, 76, 449, 77, 202, 358, 359, 01871 186, 187, 188, 189, 584, 536, 191, 79, 423, 204, 01872 250, 529, 674, 410, 411, 218, 219, 206, 397, 412, 01873 488, 80, 337, 435, 604, 341, 800, 342, 801, 697, 01874 926, 701, 698, 875, 566, 568, 711, 880, 237, 82, 01875 83, 84, 85, 86, 87, 88, 89, 90, 91, 678, 01876 542, 686, 797, 798, 350, 738, 739, 740, 763, 654, 01877 655, 764, 844, 845, 268, 269, 454, 633, 745, 301, 01878 483, 92, 93, 388, 577, 576, 549, 925, 680, 791, 01879 861, 865, 94, 95, 96, 97, 98, 99, 100, 280, 01880 467, 101, 282, 276, 274, 278, 459, 646, 645, 755, 01881 759, 102, 275, 103, 104, 209, 210, 107, 211, 212, 01882 561, 700, 709, 710, 635, 636, 637, 638, 639, 766, 01883 767, 640, 641, 642, 643, 836, 747, 377, 567, 255, 01884 413, 214, 238, 608, 531, 571, 290, 407, 408, 670, 01885 439, 543, 345, 248 01886 }; 01887 01888 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing 01889 STATE-NUM. */ 01890 #define YYPACT_NINF -747 01891 static const yytype_int16 yypact[] = 01892 { 01893 -747, 81, 2552, -747, 7102, -747, -747, -747, 6615, -747, 01894 -747, -747, -747, -747, -747, -747, 7320, 7320, -747, -747, 01895 7320, 3237, 2814, -747, -747, -747, -747, 100, 6476, -31, 01896 -747, -26, -747, -747, -747, 5715, 2955, -747, -747, 5842, 01897 -747, -747, -747, -747, -747, -747, 8519, 8519, 83, 4434, 01898 8628, 7538, 7865, 6878, -747, 6337, -747, -747, -747, -24, 01899 29, 252, 8737, 8519, -747, 193, -747, 1104, -747, 458, 01900 -747, -747, 129, 77, -747, 69, 8846, -747, 139, 2797, 01901 22, 41, -747, 8628, 8628, -747, -747, 5078, 8951, 9056, 01902 9161, 5588, 33, 46, -747, -747, 157, -747, -747, -747, 01903 -747, -747, -747, -747, -747, 25, 58, -747, 179, 613, 01904 51, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01905 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01906 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01907 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01908 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01909 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01910 -747, -747, -747, -747, -747, -747, -747, -747, -747, -747, 01911 -747, -747, -747, -747, -747, -747, -747, -747, -747, 134, 01912 -747, -747, -747, -747, 182, 8519, 279, 4564, 8519, 8519, 01913 8519, -747, 263, 2797, 260, -747, -747, 237, 207, 43, 01914 206, 298, 254, 265, -747, -747, -747, 4969, -747, 7320, 01915 7320, -747, -747, 5208, -747, 8628, 661, -747, 272, 287, 01916 4694, -747, -747, -747, 295, 307, -747, 304, 51, 416, 01917 619, 7211, 4434, 384, 193, 1104, -31, 399, -747, 458, 01918 419, 221, 300, -747, 260, 430, 300, -747, -31, 497, 01919 501, 9266, 442, -747, 351, 366, 383, 409, -747, -747, 01920 -747, -747, -747, -747, 644, -747, 754, 813, 605, 464, 01921 819, 478, 68, 530, 532, -747, -747, -747, -747, -747, 01922 -747, -747, 5317, 8628, 8628, 8628, 8628, 7211, 8628, 8628, 01923 -747, -747, 7974, -747, 4434, 6990, 470, 7974, 8519, 8519, 01924 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 01925 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 8519, 01926 8519, 8519, 8519, 8519, 9548, 7320, 9625, 3609, 458, 86, 01927 86, 8628, 8628, 193, 597, 480, 562, -747, -747, 454, 01928 601, 54, 76, 99, 331, 349, 8628, 481, -747, 45, 01929 473, -747, -747, -747, -747, 217, 286, 305, 318, 321, 01930 347, 363, 376, 381, -747, -747, -747, 391, 10549, 10549, 01931 -747, -747, -747, -747, 8737, 8737, -747, 535, -747, -747, 01932 -747, 388, -747, -747, 8519, 8519, 7429, -747, -747, 9702, 01933 7320, 9779, 8519, 8519, 7647, -747, -31, 492, -747, -747, 01934 -31, -747, 506, 539, -747, 106, -747, -747, -747, -747, 01935 -747, 6615, -747, 8519, 4029, 508, 9702, 9779, 8519, 1104, 01936 -31, -747, -747, 5445, 541, -31, -747, 7756, -747, -747, 01937 7865, -747, -747, -747, 272, 510, -747, -747, -747, 543, 01938 9266, 9856, 7320, 9933, 774, -747, -747, -747, -747, -747, 01939 -747, -747, -747, -747, -747, -747, -747, 313, -747, -747, 01940 491, -747, 8519, 8519, -747, -747, -747, -747, -747, -747, 01941 -747, -747, -747, 32, 8519, -747, 545, 546, -747, -31, 01942 9266, 551, -747, -747, -747, 566, 9473, -747, -747, 416, 01943 2184, 2184, 2184, 2184, 781, 781, 2273, 2938, 2184, 2184, 01944 1364, 1364, 662, 662, 2656, 781, 781, 927, 927, 768, 01945 397, 397, 416, 416, 416, 3378, 6083, 3464, 6197, -747, 01946 307, -747, -31, 647, -747, 660, -747, -747, 3096, 650, 01947 688, -747, 3754, 685, 4174, 56, 56, 597, 8083, 650, 01948 112, 10010, 7320, 10087, -747, 458, -747, 510, -747, 193, 01949 -747, -747, -747, 10164, 7320, 10241, 3609, 8628, 1131, -747, 01950 -747, -747, -747, -747, 1739, 1739, 32, 32, -747, 10608, 01951 -747, 2797, -747, -747, 6615, 10627, -747, 8519, 260, -747, 01952 265, 5969, 2673, -31, 490, 500, -747, -747, -747, -747, 01953 7429, 7647, -747, -747, 8628, 2797, 570, -747, 307, 307, 01954 2797, 213, 1104, -747, 300, 9266, 543, 505, 282, -31, 01955 38, 261, 603, -747, -747, -747, -747, 972, -747, -747, 01956 -747, -747, 1223, 66, -747, -747, -747, -747, 580, -747, 01957 583, 683, 589, 687, -747, -747, 893, -747, -747, -747, 01958 416, 416, -747, 576, 4839, -747, -747, 604, 8192, -747, 01959 543, 9266, 8737, 8519, 630, 8737, 8737, -747, 535, 608, 01960 677, 8737, 8737, -747, -747, 535, -747, -747, -747, 8301, 01961 740, -747, 588, -747, 740, -747, -747, -747, -747, 650, 01962 44, -747, 239, 257, -31, 141, 145, 8628, 193, -747, 01963 8628, 3609, 505, 282, -747, -31, 650, 106, 1223, 3609, 01964 193, 6754, -747, -747, -747, -747, 4839, 4694, 8519, 32, 01965 -747, -747, -747, 8519, 8519, 507, 8519, 8519, 636, 106, 01966 -747, -747, -747, 291, 8519, -747, 972, 457, -747, 651, 01967 -31, -747, 639, 4839, 4694, -747, 1223, -747, -747, 1223, 01968 -747, -747, 598, -747, -747, 4694, -747, -747, -747, -747, 01969 -747, 681, 1017, 639, 679, 654, -747, 656, 657, -747, 01970 -747, 789, 8519, 664, 543, 2797, 8519, -747, 2797, -747, 01971 2797, -747, -747, 8737, -747, 2797, -747, 2797, -747, 545, 01972 -747, 713, -747, 4304, 796, -747, 8628, 650, -747, 650, 01973 4839, 4839, -747, 8410, 3899, 189, 56, -747, 193, 650, 01974 -747, -747, -747, -31, 650, -747, -747, 799, 673, 2797, 01975 4694, 8519, 7647, -747, -747, -31, 884, 671, 1079, -747, 01976 -31, 803, 686, -747, 676, 678, -747, 684, -747, 694, 01977 684, 690, 9371, -747, 699, -747, -747, 711, -747, 1251, 01978 -747, 1251, -747, 598, -747, -747, 700, 2797, -747, 2797, 01979 9476, 86, -747, -747, 4839, -747, -747, 86, -747, -747, 01980 650, 650, -747, 365, -747, 3609, -747, -747, -747, -747, 01981 1131, -747, -747, 706, -747, 707, 884, 716, -747, -747, 01982 -747, -747, 1223, -747, 598, -747, 598, -747, 598, -747, 01983 -747, -747, 790, 520, 1017, -747, 708, 715, 684, -747, 01984 717, 684, 797, -747, 523, 366, 383, 409, 3609, -747, 01985 3754, -747, -747, -747, -747, -747, 4839, 650, 3609, -747, 01986 884, 707, 884, 721, 684, 727, 684, 684, -747, 10318, 01987 -747, 1251, -747, 598, -747, -747, 598, -747, -747, 510, 01988 10395, 7320, 10472, 688, 588, 650, -747, 650, 707, 884, 01989 -747, 598, -747, -747, -747, 730, 731, 684, 735, 684, 01990 684, 55, 282, -31, 128, 158, -747, -747, -747, -747, 01991 707, 684, -747, 598, -747, -747, -747, 163, -747, 684, 01992 -747 01993 }; 01994 01995 /* YYPGOTO[NTERM-NUM]. */ 01996 static const yytype_int16 yypgoto[] = 01997 { 01998 -747, -747, -747, 452, -747, 28, -747, -545, 277, -747, 01999 39, -747, -293, 184, -58, 71, -747, -169, -747, -7, 02000 791, -142, -13, -37, -747, -396, -29, 1623, -312, 788, 02001 -54, -747, -25, -747, -747, 20, -747, 1066, -747, -45, 02002 -747, 11, 47, -324, 115, 5, -747, -322, -196, 53, 02003 -295, 8, -747, -747, -747, -747, -747, -747, -747, -747, 02004 -747, -747, -747, -747, -747, -747, -747, -747, 2, -747, 02005 -747, -747, -747, -747, -747, -747, -747, -747, -747, 205, 02006 -338, -516, -72, -618, -747, -722, -671, 147, -747, -489, 02007 -747, -600, -747, -12, -747, -747, -747, -747, -747, -747, 02008 -747, -747, -747, 798, -747, -747, -531, -747, -50, -747, 02009 -747, -747, -747, -747, -747, 811, -747, -747, -747, -747, 02010 -747, -747, -747, -747, 856, -747, -140, -747, -747, -747, 02011 -747, 7, -747, 12, -747, 1268, 1605, 823, 1289, 1575, 02012 -747, -747, 35, -387, -697, -568, -690, 273, -696, -746, 02013 72, 181, -747, -526, -747, -449, 270, -747, -747, -747, 02014 97, -360, 758, -276, -747, -747, -56, -4, 278, -585, 02015 -214, 6, -18, -2 02016 }; 02017 02018 /* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If 02019 positive, shift that token. If negative, reduce the rule which 02020 number is the opposite. If zero, do what YYDEFACT says. 02021 If YYTABLE_NINF, syntax error. */ 02022 #define YYTABLE_NINF -574 02023 static const yytype_int16 yytable[] = 02024 { 02025 111, 273, 544, 227, 81, 644, 81, 254, 725, 201, 02026 201, 532, 498, 201, 493, 192, 689, 405, 208, 208, 02027 193, 706, 208, 225, 262, 228, 340, 222, 190, 343, 02028 688, 344, 112, 221, 733, 192, 247, 375, 441, 306, 02029 193, 67, 443, 67, 596, 558, 559, 292, 190, 253, 02030 257, 81, 208, 838, 616, 264, 833, 541, 530, 741, 02031 538, 263, 794, -93, 208, 846, 799, 634, -103, 207, 02032 207, 291, 380, 207, 589, 190, 593, 380, 264, -99, 02033 596, 3, 589, 685, 263, 208, 208, 716, 717, 208, 02034 349, 360, 360, 291, 660, 743, 263, 263, 263, 541, 02035 430, -100, 574, 575, 251, 909, 888, -330, 652, 805, 02036 230, 190, -489, 213, 213, 387, 224, 213, 378, 644, 02037 810, 386, 279, 530, -107, 538, 334, 768, 619, 470, 02038 -489, 205, 215, 285, -99, 216, 461, -106, 464, 240, 02039 468, -102, 830, 298, 299, -490, 653, -93, 252, 256, 02040 390, 609, -99, 392, 393, 885, 809, 300, 560, 833, 02041 -330, -330, 489, 847, 814, -90, -102, -100, 741, 827, 02042 -104, -104, 379, 744, 471, 281, -101, 609, -93, 335, 02043 336, -93, 381, 644, 803, -93, 302, 381, 432, 288, 02044 288, 289, 289, 220, -90, 909, 838, -551, -91, 81, 02045 -103, 288, -103, 289, 769, 398, 833, 846, 888, 303, 02046 201, 398, 201, 201, -101, 931, -91, 405, 414, 208, 02047 835, 208, 208, 839, 448, 208, 433, 208, 694, 247, 02048 820, 288, 81, 289, 249, 476, 477, 478, 479, -98, 02049 705, 596, 223, 81, 81, 742, 221, 224, 307, 386, 02050 291, 704, -97, 224, 444, 923, 56, 486, 741, 644, 02051 741, 958, 497, 264, -103, 774, 384, 338, 338, 263, 02052 207, 338, 207, -102, 389, -102, 491, 609, 589, 589, 02053 429, -93, -105, 545, 546, -95, -95, 547, 980, 609, 02054 874, 247, 399, -490, 81, 208, 208, 208, 208, 81, 02055 208, 208, -481, -104, 208, -104, 81, 264, -101, 208, 02056 -101, 283, 284, 263, 213, -100, 213, -412, 741, 933, 02057 475, 813, -71, 907, 223, 910, 243, 648, 201, -92, 02058 927, 67, 406, 414, 409, 391, 480, 208, 288, 81, 02059 289, 403, 924, 208, 208, 400, 401, 537, 395, 291, 02060 586, 588, 804, -85, 528, 487, -481, -548, 208, 254, 02061 487, 437, 741, -107, 741, 562, 935, -285, 438, 493, 02062 -95, -480, 394, 485, 455, -549, -412, 396, 494, -94, 02063 793, -551, 548, 957, 790, 402, 208, 208, 987, 426, 02064 -482, 741, 588, 201, 722, 254, 603, -96, 414, -552, 02065 731, -95, 208, -483, -95, 404, -485, 415, -95, 417, 02066 398, 398, 537, 448, 422, 968, -475, 456, 457, 528, 02067 -285, -285, 111, 424, -552, -480, 81, -412, 192, -412, 02068 -412, 644, -484, 193, -478, 81, 451, 217, 537, 657, 02069 440, 190, 400, 427, -482, 201, 528, 438, -486, 220, 02070 414, -487, 264, 448, 208, 578, 580, -483, 263, 647, 02071 -485, -475, 596, 67, 537, 308, -478, -548, -488, -475, 02072 -475, 528, 612, -548, 243, 428, 569, 338, 338, 338, 02073 338, 656, 481, 482, 308, -549, -484, -478, -478, 452, 02074 453, -549, 264, 590, -278, 298, 299, -106, 263, 781, 02075 589, 416, -486, 497, -487, -487, 788, 425, -70, 735, 02076 664, 623, 624, 625, 626, -475, 331, 332, 333, 243, 02077 -478, -488, -488, 918, 434, 338, 338, 431, 669, 920, 02078 570, -555, 722, 556, 614, 668, 676, 557, 681, 551, 02079 555, 667, 721, 675, 81, 201, 81, -278, -278, 673, 02080 414, 687, 687, 445, 208, 588, 254, 201, 563, 720, 02081 446, 447, 414, 436, 537, 699, 208, 442, 81, 208, 02082 465, 528, 676, 676, 656, 656, 537, 726, 732, 713, 02083 715, 243, 450, 528, 469, 673, 673, 727, 398, 669, 02084 -555, 192, 552, 553, 821, -286, 193, 826, 472, -102, 02085 473, 690, 796, 793, 190, 939, 208, 676, 950, -104, 02086 492, 564, 565, 773, 548, 669, -101, 264, 550, 667, 02087 673, 712, 714, 263, 448, 474, 554, 973, 761, 582, 02088 623, 624, 625, 626, 789, 598, 748, 649, 748, 806, 02089 748, -555, 808, -555, -555, 607, 600, -551, -286, -286, 02090 735, 770, 623, 624, 625, 626, 81, 816, 564, 565, 02091 677, 951, 952, 264, 208, 627, 455, 208, 208, 263, 02092 463, 628, 629, 208, 208, 662, 609, 792, 795, 601, 02093 795, -85, 795, 615, 597, -264, 658, 627, 599, 824, 02094 669, 661, 630, 602, 629, 631, 679, 728, 683, 208, 02095 385, 669, 208, 81, 807, 455, 428, 730, 611, 456, 02096 457, 81, 734, 613, 630, 418, 815, 656, 81, 81, 02097 746, 762, -107, 749, 419, 420, 398, 856, -106, 752, 02098 308, 190, 487, 494, 671, 751, 777, 779, 867, 754, 02099 770, 776, 784, 786, -265, 81, 81, 672, 456, 457, 02100 458, 707, 782, -98, 691, 793, -102, 81, 872, -97, 02101 110, 770, 110, 748, 783, 748, 748, 659, 735, -104, 02102 623, 624, 625, 626, 110, 110, 822, 254, 110, 329, 02103 330, 331, 332, 333, 762, 208, -101, -93, 729, 862, 02104 842, 828, 866, 848, 849, 81, 851, 853, 208, 855, 02105 -95, 860, 81, 81, -266, 864, 81, 110, 110, 881, 02106 882, 886, 687, 890, 876, 455, 892, -92, 894, 682, 02107 110, 684, 81, 891, 896, 905, 622, 901, 623, 624, 02108 625, 626, 748, 748, 898, 748, 308, 748, 748, 904, 02109 -267, 110, 110, 929, 903, 110, 938, 930, 941, 308, 02110 263, 321, 322, 949, 858, 943, 932, 946, 456, 457, 02111 460, 959, 914, 627, 321, 322, 81, 961, 263, 628, 02112 629, 795, -551, -552, 455, 983, 606, 81, 364, 347, 02113 455, 338, 977, 825, 338, 329, 330, 331, 332, 333, 02114 630, 382, 940, 631, 802, 326, 327, 328, 329, 330, 02115 331, 332, 333, 976, 748, 748, 748, 383, 748, 748, 02116 750, 811, 753, 277, 376, 928, 632, 456, 457, 462, 02117 81, 906, 81, 456, 457, 466, 765, 834, 81, 0, 02118 81, 771, 748, 748, 748, 748, 735, 0, 623, 624, 02119 625, 626, 0, 0, 201, 0, 0, 756, 757, 414, 02120 758, 681, 795, 208, 0, 110, 44, 45, 0, 528, 02121 0, 0, 0, 537, 0, 748, 748, 748, 748, 669, 02122 528, 0, 0, 736, 0, 110, 0, 110, 110, 748, 02123 338, 110, 0, 110, 0, 812, 0, 748, 110, 0, 02124 0, 0, 0, 817, 818, 308, 0, 0, 0, 110, 02125 110, 0, 868, 0, 869, 0, 0, 823, 0, 0, 02126 321, 322, 0, 0, 877, 0, 0, 0, 829, 879, 02127 831, 832, 837, 0, 735, 840, 623, 624, 625, 626, 02128 0, 0, 841, 0, 0, 850, 0, 852, 854, 0, 02129 0, 0, 0, 328, 329, 330, 331, 332, 333, 0, 02130 110, 110, 110, 110, 110, 110, 110, 110, 0, 0, 02131 110, 736, 110, 0, 0, 110, 0, 737, 0, 843, 02132 863, 623, 624, 625, 626, 921, 922, 870, 871, 0, 02133 0, 873, 203, 203, 0, 0, 203, 0, 0, 0, 02134 0, 878, 0, 110, 0, 110, 0, 883, 0, 110, 02135 110, 0, 0, 884, 893, 895, 0, 897, 889, 899, 02136 900, 0, 236, 239, 110, 0, 0, 203, 203, 0, 02137 0, 0, 0, 0, 908, 0, 911, 0, 286, 287, 02138 0, 735, 956, 623, 624, 625, 626, 0, 0, 0, 02139 0, 919, 110, 110, 293, 294, 295, 296, 297, 0, 02140 0, 0, 0, 0, 0, 0, 0, 0, 110, 0, 02141 978, 0, 979, 0, 0, 934, 0, 936, 736, 0, 02142 0, 937, 0, 0, 887, 0, 942, 944, 945, 0, 02143 947, 948, 110, 622, 0, 623, 624, 625, 626, 0, 02144 0, 110, 0, 0, 0, 953, 0, 954, 0, 0, 02145 0, 0, 0, 955, 960, 962, 963, 964, 0, 0, 02146 110, 0, 0, 0, 967, 0, 969, 0, 0, 970, 02147 627, 0, 0, 0, 0, 0, 628, 629, 0, 0, 02148 0, 0, 0, 0, 981, 0, 0, 982, 984, 985, 02149 986, 0, 0, 0, 0, 0, 0, 630, 0, 0, 02150 631, 988, 0, 0, 0, 0, 989, 0, 0, 990, 02151 0, 203, 0, 0, 203, 203, 286, 0, 0, 0, 02152 105, 0, 105, 708, 0, 622, 0, 623, 624, 625, 02153 626, 0, 0, 203, 0, 203, 203, 0, 0, 0, 02154 0, 108, 0, 108, 0, 0, 0, 0, 0, 0, 02155 110, 0, 110, 761, 0, 623, 624, 625, 626, 0, 02156 110, 0, 627, 0, 0, 0, 0, 105, 628, 629, 02157 0, 265, 110, 0, 110, 110, 0, 0, 0, 0, 02158 0, 0, 0, 0, 0, 0, 0, 0, 108, 630, 02159 627, 0, 631, 0, 265, 0, 628, 629, 0, 0, 02160 0, 0, 0, 0, 0, 0, 351, 361, 361, 361, 02161 0, 0, 110, 0, 0, 0, 0, 630, 203, 0, 02162 631, 0, 0, 496, 499, 500, 501, 502, 503, 504, 02163 505, 506, 507, 508, 509, 510, 511, 512, 513, 514, 02164 515, 516, 517, 518, 519, 520, 521, 522, 523, 524, 02165 0, 203, 0, 0, 0, 0, 0, 0, 0, 0, 02166 0, 0, 110, 0, 0, 0, 0, 0, 0, 0, 02167 110, 0, 0, 110, 110, 0, 0, 0, 0, 110, 02168 110, 0, 308, 309, 310, 311, 312, 313, 314, 315, 02169 316, 317, 318, -574, -574, 0, 0, 321, 322, 0, 02170 579, 581, 0, 0, 0, 110, 0, 0, 110, 110, 02171 585, 203, 203, 0, 0, 105, 203, 110, 579, 581, 02172 203, 0, 0, 0, 110, 110, 324, 325, 326, 327, 02173 328, 329, 330, 331, 332, 333, 108, 0, 0, 605, 02174 0, 0, 0, 0, 610, 0, 0, 0, 105, 0, 02175 0, 110, 110, 203, 0, 0, 203, 0, 0, 105, 02176 105, 0, 0, 110, 0, 0, 0, 0, 203, 108, 02177 0, 0, 0, 0, 0, 0, 0, 0, 0, 265, 02178 108, 108, 0, 0, 0, 0, 0, 0, 650, 651, 02179 0, 110, 0, 0, 0, 0, 0, 0, 0, 0, 02180 203, 110, 0, 0, 110, 0, 0, 0, 110, 110, 02181 105, 0, 110, 0, 0, 105, 0, 0, 0, 0, 02182 0, 0, 105, 265, 0, 0, 0, 109, 110, 109, 02183 0, 108, 0, 0, 0, 0, 108, 0, 0, 0, 02184 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 02185 0, 0, 0, 0, 0, 105, 0, 106, 0, 106, 02186 0, 0, 0, 0, 203, 0, 0, 0, 203, 0, 02187 0, 0, 110, 0, 109, 78, 108, 78, 267, 0, 02188 203, 0, 0, 110, 0, 0, 0, 0, 0, 0, 02189 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02190 0, 267, 0, 203, 106, 0, 0, 0, 266, 0, 02191 0, 0, 0, 353, 363, 363, 203, 203, 0, 0, 02192 0, 0, 78, 0, 0, 0, 110, 0, 110, 0, 02193 0, 266, 0, 0, 110, 0, 110, 0, 0, 0, 02194 0, 0, 105, 352, 362, 362, 362, 0, 0, 0, 02195 0, 105, 0, 0, 0, 0, 0, 0, 0, 110, 02196 0, 348, 0, 108, 0, 0, 0, 0, 265, 0, 02197 0, 0, 108, 0, 203, 0, 0, 0, 585, 775, 02198 0, 778, 780, 0, 0, 0, 0, 785, 787, -573, 02199 0, 0, 0, 0, 0, 203, 0, -573, -573, -573, 02200 0, 0, -573, -573, -573, 0, -573, 0, 265, 0, 02201 0, 0, 0, 0, 0, 0, -573, 0, 0, 0, 02202 0, 0, 109, 0, 0, 0, -573, -573, 0, -573, 02203 -573, -573, -573, -573, 819, 0, 0, 0, 0, 778, 02204 780, 0, 785, 787, 0, 0, 0, 0, 0, 0, 02205 203, 0, 106, 0, 0, 109, 0, 0, 0, 0, 02206 105, 0, 105, 0, 0, 0, 109, 109, 0, 0, 02207 78, 0, 0, 0, -573, 0, 0, 0, 0, 0, 02208 0, 108, 0, 108, 105, 106, 267, 0, 203, 0, 02209 0, 0, 857, 0, 0, 0, 106, 106, 0, 859, 02210 0, 0, 0, 78, 0, 108, 0, 0, 0, 0, 02211 0, 0, 0, 0, 78, 78, 266, 109, 0, 203, 02212 0, 0, 109, 0, 0, 0, -573, 0, -573, 109, 02213 267, 220, -573, 265, -573, 0, -573, 859, 203, 0, 02214 0, 0, 0, 0, 0, 0, 0, 106, 0, 0, 02215 0, 0, 106, 0, 0, 0, 0, 0, 0, 106, 02216 266, 0, 109, 0, 0, 78, 0, 0, 0, 0, 02217 78, 0, 105, 0, 0, 0, 0, 78, 0, 265, 02218 495, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02219 0, 0, 106, 108, 0, 0, 0, 0, 0, 0, 02220 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02221 78, 0, 0, 0, 0, 0, 0, 0, 0, 105, 02222 0, 0, 0, 0, 0, 0, 0, 105, 0, 0, 02223 0, 0, 0, 0, 105, 105, 0, 0, 0, 0, 02224 108, 0, 0, 0, 0, 0, 0, 0, 108, 109, 02225 0, 0, 0, 0, 0, 108, 108, 0, 109, 0, 02226 0, 105, 105, 0, 0, 0, 0, 203, 0, 0, 02227 0, 0, 0, 105, 0, 267, 0, 0, 0, 106, 02228 0, 0, 108, 108, 0, 0, 0, 0, 106, 0, 02229 0, 0, 0, 0, 108, 0, 0, 78, 0, 0, 02230 0, 0, 0, 0, 0, 266, 78, 0, 0, 0, 02231 0, 105, 0, 0, 0, 267, 0, 0, 105, 105, 02232 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 02233 0, 0, 108, 0, 0, 0, 0, 0, 105, 108, 02234 108, 0, 0, 108, 0, 266, 0, 0, 0, 0, 02235 0, 0, 0, 0, 0, 0, 0, 0, 0, 108, 02236 361, 0, 0, 0, 0, 0, 0, 109, 0, 109, 02237 0, 0, 0, 0, 0, 0, 0, 0, 915, 0, 02238 0, 0, 105, 0, 0, 0, 0, 0, 0, 0, 02239 0, 109, 0, 105, 0, 0, 0, 106, 0, 106, 02240 0, 0, 0, 108, 0, 0, 0, 0, 0, 0, 02241 0, 0, 0, 0, 108, 78, 0, 78, 0, 0, 02242 0, 106, 0, 0, 0, 0, 0, 0, 0, 0, 02243 0, 0, 0, 0, 0, 0, 105, 0, 105, 78, 02244 267, 0, 0, 0, 105, 0, 105, 0, 0, 0, 02245 0, 0, 0, 0, 0, 0, 0, 108, 0, 108, 02246 0, 0, 0, 0, 0, 108, 0, 108, 0, 0, 02247 266, 760, 0, 0, 0, 0, 0, 0, 0, 109, 02248 0, 0, 0, 0, 0, 0, 267, 0, 0, 0, 02249 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02250 0, 0, 308, -574, -574, -574, -574, 313, 314, 106, 02251 0, -574, -574, 0, 0, 0, 266, 321, 322, 0, 02252 0, 0, 0, 0, 0, 0, 109, 78, 0, 0, 02253 0, 0, 0, 0, 109, 495, 0, 0, 0, 0, 02254 0, 109, 109, 0, 0, 0, 324, 325, 326, 327, 02255 328, 329, 330, 331, 332, 333, 106, 0, 0, 0, 02256 0, 0, 0, 0, 106, 0, 0, 0, 109, 109, 02257 0, 106, 106, 0, 78, 0, 0, 0, 0, 0, 02258 109, 0, 78, 0, 0, 0, 0, 0, 0, 78, 02259 78, 308, 309, 310, 311, 312, 313, 314, 106, 106, 02260 317, 318, 0, 0, 0, 0, 321, 322, 0, 0, 02261 106, 0, 0, 0, 0, 0, 78, 78, 109, 0, 02262 0, 0, 0, 0, 0, 109, 109, 0, 78, 109, 02263 0, 0, 0, 0, 0, 324, 325, 326, 327, 328, 02264 329, 330, 331, 332, 333, 109, 0, 0, 106, 0, 02265 0, 0, 0, 0, 0, 106, 106, 0, 0, 106, 02266 0, 0, 0, 0, 0, 0, 78, 363, 0, 0, 02267 0, 0, 0, 78, 78, 106, 0, 78, 0, 0, 02268 0, 0, 0, 0, 0, 917, 0, 0, 0, 109, 02269 0, 0, 0, 78, 0, 0, 0, 362, 0, 0, 02270 109, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02271 0, 0, 0, 0, 0, 916, 0, 0, 0, 106, 02272 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02273 106, 0, 0, 913, 0, 0, 0, 78, 0, 0, 02274 0, 0, 0, 109, 0, 109, 0, 0, 78, 0, 02275 0, 109, 0, 109, 0, 0, 0, 0, 0, 0, 02276 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02277 0, 0, 0, 106, 0, 106, 0, 0, 0, 0, 02278 0, 106, 0, 106, 0, 0, 0, 0, 0, 0, 02279 0, 78, 0, 78, 0, 0, 0, 0, 0, 78, 02280 0, 78, -573, 4, 0, 5, 6, 7, 8, 9, 02281 0, 0, 0, 10, 11, 0, 0, 0, 12, 0, 02282 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02283 0, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02284 0, 27, 0, 0, 0, 0, 0, 28, 29, 30, 02285 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02286 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02287 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02288 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02289 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02290 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02291 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02292 0, 0, 0, -285, 61, 62, 63, 0, 0, 0, 02293 0, -285, -285, -285, 0, 0, -285, -285, -285, 0, 02294 -285, 0, 0, 0, 0, 0, 0, -573, 0, -573, 02295 -285, -285, -285, 0, 0, 0, 0, 0, 0, 0, 02296 -285, -285, 0, -285, -285, -285, -285, -285, 0, 0, 02297 0, 0, 0, 0, 308, 309, 310, 311, 312, 313, 02298 314, 315, 316, 317, 318, 319, 320, 0, 0, 321, 02299 322, -285, -285, -285, -285, -285, -285, -285, -285, -285, 02300 -285, -285, -285, -285, 0, 0, -285, -285, -285, 0, 02301 724, -285, 0, 0, 0, 0, 323, -285, 324, 325, 02302 326, 327, 328, 329, 330, 331, 332, 333, 0, 0, 02303 -285, 0, -105, -285, -285, -285, -285, -285, -285, -285, 02304 -285, -285, -285, -285, -285, 0, 0, 0, 0, 0, 02305 0, 0, 0, 224, 0, 0, 0, 0, 0, 0, 02306 -285, -285, -285, -285, -411, 0, -285, -285, -285, 0, 02307 -285, 0, -411, -411, -411, 0, 0, -411, -411, -411, 02308 0, -411, 0, 0, 0, 0, 0, 0, 0, 0, 02309 -411, -411, -411, 0, 0, 0, 0, 0, 0, 0, 02310 0, -411, -411, 0, -411, -411, -411, -411, -411, 0, 02311 0, 0, 0, 0, 0, 308, 309, 310, 311, 312, 02312 313, 314, 315, 316, 317, 318, 319, 320, 0, 0, 02313 321, 322, -411, -411, -411, -411, -411, -411, -411, -411, 02314 -411, -411, -411, -411, -411, 0, 0, -411, -411, -411, 02315 0, 0, -411, 0, 0, 0, 0, 323, -411, 324, 02316 325, 326, 327, 328, 329, 330, 331, 332, 333, 0, 02317 0, 0, 0, 0, -411, 0, -411, -411, -411, -411, 02318 -411, -411, -411, -411, -411, -411, 0, 0, 0, 0, 02319 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02320 -411, -411, -411, -411, -411, -279, 220, -411, -411, -411, 02321 0, -411, 0, -279, -279, -279, 0, 0, -279, -279, 02322 -279, 0, -279, 0, 0, 0, 0, 0, 0, 0, 02323 0, 0, -279, -279, -279, 0, 0, 0, 0, 0, 02324 0, 0, -279, -279, 0, -279, -279, -279, -279, -279, 02325 0, 0, 0, 0, 0, 0, 308, 309, 310, 311, 02326 312, 313, 314, 315, 0, 317, 318, 0, 0, 0, 02327 0, 321, 322, -279, -279, -279, -279, -279, -279, -279, 02328 -279, -279, -279, -279, -279, -279, 0, 0, -279, -279, 02329 -279, 0, 0, -279, 0, 0, 0, 0, 0, -279, 02330 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 02331 0, 0, -279, 0, 0, -279, -279, -279, -279, -279, 02332 -279, -279, -279, -279, -279, -279, -279, 0, 0, 0, 02333 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02334 0, 0, -279, -279, -279, -279, -573, 0, -279, -279, 02335 -279, 0, -279, 0, -573, -573, -573, 0, 0, -573, 02336 -573, -573, 0, -573, 0, 0, 0, 0, 0, 0, 02337 0, 0, -573, -573, -573, 0, 0, 0, 0, 0, 02338 0, 0, 0, -573, -573, 0, -573, -573, -573, -573, 02339 -573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02340 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02341 0, 0, 0, 0, -573, -573, -573, -573, -573, -573, 02342 -573, -573, -573, -573, -573, -573, -573, 0, 0, -573, 02343 -573, -573, 0, 0, -573, 0, 0, 0, 0, 0, 02344 -573, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02345 0, 0, 0, 0, 0, 0, -573, 0, -573, -573, 02346 -573, -573, -573, -573, -573, -573, -573, -573, 0, 0, 02347 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02348 0, 0, -573, -573, -573, -573, -573, -292, 220, -573, 02349 -573, -573, 0, -573, 0, -292, -292, -292, 0, 0, 02350 -292, -292, -292, 0, -292, 0, 0, 0, 0, 0, 02351 0, 0, 0, 0, -292, -292, 0, 0, 0, 0, 02352 0, 0, 0, 0, -292, -292, 0, -292, -292, -292, 02353 -292, -292, 0, 0, 0, 0, 0, 0, 0, 0, 02354 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02355 0, 0, 0, 0, 0, -292, -292, -292, -292, -292, 02356 -292, -292, -292, -292, -292, -292, -292, -292, 0, 0, 02357 -292, -292, -292, 0, 0, -292, 0, 0, 0, 0, 02358 0, -292, 0, 0, 0, 0, 0, 0, 0, 0, 02359 0, 0, 0, 0, 0, 0, 0, -292, 0, -292, 02360 -292, -292, -292, -292, -292, -292, -292, -292, -292, 0, 02361 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02362 0, 0, 0, 0, -292, -292, -292, -292, -555, 217, 02363 -292, -292, -292, 0, -292, 0, -555, -555, -555, 0, 02364 0, 0, -555, -555, 0, -555, 0, 0, 0, 0, 02365 0, 0, 0, 0, -555, 0, 0, 0, 0, 0, 02366 0, 0, 0, 0, 0, -555, -555, 0, -555, -555, 02367 -555, -555, -555, 0, 0, 0, 0, 0, 0, 0, 02368 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02369 0, 0, 0, 0, 0, 0, -555, -555, -555, -555, 02370 -555, -555, -555, -555, -555, -555, -555, -555, -555, 0, 02371 0, -555, -555, -555, -285, 665, 0, 0, 0, 0, 02372 0, 0, -285, -285, -285, 0, 0, 0, -285, -285, 02373 0, -285, 0, 0, 0, 0, 0, -103, -555, 0, 02374 -555, -555, -555, -555, -555, -555, -555, -555, -555, -555, 02375 0, -285, -285, 0, -285, -285, -285, -285, -285, 0, 02376 0, 0, 0, 0, -555, -555, -555, -555, -94, 0, 02377 0, -555, 0, -555, 0, -555, 0, 0, 0, 0, 02378 0, 0, -285, -285, -285, -285, -285, -285, -285, -285, 02379 -285, -285, -285, -285, -285, 0, 0, -285, -285, -285, 02380 0, 666, 0, 0, 0, 0, 0, 0, 0, 0, 02381 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02382 0, 0, 0, -105, -285, 0, -285, -285, -285, -285, 02383 -285, -285, -285, -285, -285, -285, 0, 0, 0, 0, 02384 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02385 0, -285, -285, -285, -96, 0, 0, -285, 0, -285, 02386 241, -285, 5, 6, 7, 8, 9, -573, -573, -573, 02387 10, 11, 0, 0, -573, 12, 0, 13, 14, 15, 02388 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02389 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02390 0, 0, 0, 0, 28, 29, 0, 31, 32, 33, 02391 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02392 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02393 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02394 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02395 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02396 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02397 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02398 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 02399 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02400 0, 0, 0, 0, -573, 241, -573, 5, 6, 7, 02401 8, 9, 0, 0, -573, 10, 11, 0, -573, -573, 02402 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02403 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02404 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02405 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02406 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02407 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02408 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02409 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02410 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02411 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02412 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02413 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02414 0, 0, 0, 0, 0, 0, 0, 0, 0, -573, 02415 241, -573, 5, 6, 7, 8, 9, 0, 0, -573, 02416 10, 11, 0, 0, -573, 12, -573, 13, 14, 15, 02417 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02418 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02419 0, 0, 0, 0, 28, 29, 0, 31, 32, 33, 02420 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02421 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02422 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02423 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02424 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02425 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02426 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02427 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 02428 4, 0, 5, 6, 7, 8, 9, 0, 0, 0, 02429 10, 11, 0, 0, -573, 12, -573, 13, 14, 15, 02430 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02431 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02432 0, 0, 0, 0, 28, 29, 30, 31, 32, 33, 02433 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02434 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02435 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02436 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02437 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02438 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02439 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02440 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 02441 0, 0, 0, 0, 0, 0, -573, 0, 0, 0, 02442 0, 0, 0, 0, -573, 241, -573, 5, 6, 7, 02443 8, 9, 0, 0, -573, 10, 11, 0, 0, -573, 02444 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02445 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02446 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02447 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02448 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02449 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02450 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02451 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02452 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02453 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02454 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02455 0, 0, 0, 0, 0, 241, 0, 5, 6, 7, 02456 8, 9, 0, -573, -573, 10, 11, 0, 0, -573, 02457 12, -573, 13, 14, 15, 16, 17, 18, 19, 0, 02458 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02459 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02460 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02461 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02462 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02463 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02464 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02465 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02466 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02467 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02468 0, 0, 0, 0, 0, 241, 0, 5, 6, 7, 02469 8, 9, 0, 0, 0, 10, 11, 0, 0, -573, 02470 12, -573, 13, 14, 15, 16, 17, 18, 19, 0, 02471 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02472 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02473 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02474 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02475 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02476 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02477 48, 0, 0, 242, 50, 0, 51, 52, 0, 53, 02478 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02479 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02480 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02481 0, 0, 0, 0, 0, 241, 0, 5, 6, 7, 02482 8, 9, 0, 0, 0, 10, 11, -573, 0, -573, 02483 12, -573, 13, 14, 15, 16, 17, 18, 19, 0, 02484 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02485 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02486 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02487 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02488 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02489 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02490 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02491 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02492 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02493 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02494 0, 0, 0, 0, 0, 241, 0, 5, 6, 7, 02495 8, 9, 0, 0, 0, 10, 11, -573, 0, -573, 02496 12, -573, 13, 14, 15, 16, 17, 18, 19, 0, 02497 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02498 26, 0, 0, 27, 0, 0, 0, 0, 0, 28, 02499 29, 0, 31, 32, 33, 34, 35, 36, 37, 38, 02500 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02501 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02502 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02503 48, 0, 0, 49, 50, 0, 51, 52, 0, 53, 02504 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02505 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02506 0, 0, 0, 0, 0, 0, 61, 62, 63, 0, 02507 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02508 0, -573, 0, 0, 0, 0, 0, 0, 0, -573, 02509 241, -573, 5, 6, 7, 8, 9, 0, 0, -573, 02510 10, 11, 0, 0, 0, 12, 0, 13, 14, 15, 02511 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02512 21, 22, 23, 24, 25, 26, 0, 0, 27, 0, 02513 0, 0, 0, 0, 28, 29, 0, 31, 32, 33, 02514 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02515 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02516 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02517 0, 0, 0, 0, 0, 48, 0, 0, 49, 50, 02518 0, 51, 52, 0, 53, 0, 54, 55, 56, 57, 02519 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02520 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02521 0, 61, 62, 63, 0, 0, 0, 0, 0, 0, 02522 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02523 10, 11, 0, 0, -573, 12, -573, 13, 14, 15, 02524 16, 17, 18, 19, 0, 0, 0, 0, 0, 20, 02525 21, 22, 23, 24, 25, 26, 0, 0, 194, 0, 02526 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02527 34, 35, 36, 37, 38, 39, 40, 195, 41, 42, 02528 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02529 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02530 0, 0, 0, 0, 0, 196, 0, 0, 197, 50, 02531 0, 51, 52, 0, 198, 199, 54, 55, 56, 57, 02532 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02533 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02534 11, 61, 200, 63, 12, 0, 13, 14, 15, 16, 02535 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 02536 22, 23, 24, 25, 26, 0, 224, 27, 0, 0, 02537 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02538 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02539 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02540 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02541 0, 0, 0, 0, 196, 0, 0, 197, 50, 0, 02542 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02543 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02544 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02545 61, 62, 63, 0, 0, 0, 0, 0, 0, 0, 02546 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02547 11, 0, 0, 288, 12, 289, 13, 14, 15, 16, 02548 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 02549 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 02550 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02551 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02552 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02553 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02554 0, 0, 0, 0, 196, 0, 0, 197, 50, 0, 02555 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02556 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02557 5, 6, 7, 8, 9, 0, 0, 0, 10, 11, 02558 61, 62, 63, 12, 0, 13, 14, 15, 16, 17, 02559 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02560 23, 24, 25, 26, 0, 224, 27, 0, 0, 0, 02561 0, 0, 28, 29, 30, 31, 32, 33, 34, 35, 02562 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02563 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02564 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02565 0, 0, 0, 48, 0, 0, 49, 50, 0, 51, 02566 52, 0, 53, 0, 54, 55, 56, 57, 58, 59, 02567 60, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02568 0, 0, 0, 0, 0, 0, 0, 0, 0, 61, 02569 62, 63, 0, 0, 0, 0, 0, 0, 5, 6, 02570 7, 8, 9, 0, 0, 0, 10, 11, 0, 0, 02571 0, 12, 474, 13, 14, 15, 16, 17, 18, 19, 02572 0, 0, 0, 0, 0, 20, 21, 22, 23, 24, 02573 25, 26, 0, 0, 27, 0, 0, 0, 0, 0, 02574 28, 29, 0, 31, 32, 33, 34, 35, 36, 37, 02575 38, 39, 40, 0, 41, 42, 0, 43, 44, 45, 02576 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02577 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02578 0, 48, 0, 0, 49, 50, 0, 51, 52, 0, 02579 53, 0, 54, 55, 56, 57, 58, 59, 60, 0, 02580 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02581 0, 0, 0, 0, 0, 0, 0, 61, 62, 63, 02582 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02583 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02584 474, 113, 114, 115, 116, 117, 118, 119, 120, 121, 02585 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 02586 132, 133, 134, 135, 136, 0, 0, 0, 137, 138, 02587 139, 365, 366, 367, 368, 144, 145, 146, 0, 0, 02588 0, 0, 0, 147, 148, 149, 150, 369, 370, 371, 02589 372, 155, 37, 38, 373, 40, 0, 0, 0, 0, 02590 0, 0, 0, 0, 157, 158, 159, 160, 161, 162, 02591 163, 164, 165, 0, 0, 166, 167, 0, 0, 168, 02592 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 02593 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 02594 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02595 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 02596 0, 183, 184, 0, 0, 0, 0, 0, -548, -548, 02597 -548, 0, -548, 0, 0, 0, -548, -548, 0, 185, 02598 374, -548, 0, -548, -548, -548, -548, -548, -548, -548, 02599 0, -548, 0, 0, 0, -548, -548, -548, -548, -548, 02600 -548, -548, 0, 0, -548, 0, 0, 0, 0, 0, 02601 0, -548, 0, 0, -548, -548, -548, -548, -548, -548, 02602 -548, -548, -548, -548, -548, -548, 0, -548, -548, -548, 02603 0, -548, -548, 0, 0, 0, 0, 0, 0, 0, 02604 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02605 0, -548, 0, 0, -548, -548, 0, -548, -548, 0, 02606 -548, -548, -548, -548, -548, -548, -548, -548, -548, 0, 02607 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02608 0, 0, 0, 0, 0, 0, 0, -548, -548, -548, 02609 0, 0, 0, 0, 0, -549, -549, -549, 0, -549, 02610 0, -548, 0, -549, -549, 0, 0, -548, -549, 0, 02611 -549, -549, -549, -549, -549, -549, -549, 0, -549, 0, 02612 0, 0, -549, -549, -549, -549, -549, -549, -549, 0, 02613 0, -549, 0, 0, 0, 0, 0, 0, -549, 0, 02614 0, -549, -549, -549, -549, -549, -549, -549, -549, -549, 02615 -549, -549, -549, 0, -549, -549, -549, 0, -549, -549, 02616 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02617 0, 0, 0, 0, 0, 0, 0, 0, -549, 0, 02618 0, -549, -549, 0, -549, -549, 0, -549, -549, -549, 02619 -549, -549, -549, -549, -549, -549, 0, 0, 0, 0, 02620 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02621 0, 0, 0, 0, -549, -549, -549, 0, 0, 0, 02622 0, 0, -551, -551, -551, 0, -551, 0, -549, 0, 02623 -551, -551, 0, 0, -549, -551, 0, -551, -551, -551, 02624 -551, -551, -551, -551, 0, 0, 0, 0, 0, -551, 02625 -551, -551, -551, -551, -551, -551, 0, 0, -551, 0, 02626 0, 0, 0, 0, 0, -551, 0, 0, -551, -551, 02627 -551, -551, -551, -551, -551, -551, -551, -551, -551, -551, 02628 0, -551, -551, -551, 0, -551, -551, 0, 0, 0, 02629 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02630 0, 0, 0, 0, 0, -551, 723, 0, -551, -551, 02631 0, -551, -551, 0, -551, -551, -551, -551, -551, -551, 02632 -551, -551, -551, 0, 0, 0, 0, 0, -103, 0, 02633 0, 0, 0, 0, 0, 0, -553, -553, -553, 0, 02634 -553, -551, -551, -551, -553, -553, 0, 0, 0, -553, 02635 0, -553, -553, -553, -553, -553, -553, -553, 0, 0, 02636 0, -551, 0, -553, -553, -553, -553, -553, -553, -553, 02637 0, 0, -553, 0, 0, 0, 0, 0, 0, -553, 02638 0, 0, -553, -553, -553, -553, -553, -553, -553, -553, 02639 -553, -553, -553, -553, 0, -553, -553, -553, 0, -553, 02640 -553, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02641 0, 0, 0, 0, 0, 0, 0, 0, 0, -553, 02642 0, 0, -553, -553, 0, -553, -553, 0, -553, -553, 02643 -553, -553, -553, -553, -553, -553, -553, 0, 0, 0, 02644 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02645 -554, -554, -554, 0, -554, -553, -553, -553, -554, -554, 02646 0, 0, 0, -554, 0, -554, -554, -554, -554, -554, 02647 -554, -554, 0, 0, 0, -553, 0, -554, -554, -554, 02648 -554, -554, -554, -554, 0, 0, -554, 0, 0, 0, 02649 0, 0, 0, -554, 0, 0, -554, -554, -554, -554, 02650 -554, -554, -554, -554, -554, -554, -554, -554, 0, -554, 02651 -554, -554, 0, -554, -554, 0, 0, 0, 0, 0, 02652 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02653 0, 0, 0, -554, 0, 0, -554, -554, 0, -554, 02654 -554, 0, -554, -554, -554, -554, -554, -554, -554, -554, 02655 -554, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02656 0, 0, 0, 0, 0, 0, 0, 0, 0, -554, 02657 -554, -554, 0, 0, 0, 0, 0, 0, 0, 0, 02658 0, 0, 0, 0, 0, 0, 0, 0, 0, -554, 02659 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 02660 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 02661 133, 134, 135, 136, 0, 0, 0, 137, 138, 139, 02662 140, 141, 142, 143, 144, 145, 146, 0, 0, 0, 02663 0, 0, 147, 148, 149, 150, 151, 152, 153, 154, 02664 155, 270, 271, 156, 272, 0, 0, 0, 0, 0, 02665 0, 0, 0, 157, 158, 159, 160, 161, 162, 163, 02666 164, 165, 0, 0, 166, 167, 0, 0, 168, 169, 02667 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 02668 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 02669 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 02670 174, 175, 176, 177, 178, 179, 180, 181, 182, 0, 02671 183, 184, 0, 0, 0, 0, 0, 0, 0, 0, 02672 0, 0, 0, 0, 0, 0, 0, 0, 185, 113, 02673 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 02674 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 02675 134, 135, 136, 0, 0, 0, 137, 138, 139, 140, 02676 141, 142, 143, 144, 145, 146, 0, 0, 0, 0, 02677 0, 147, 148, 149, 150, 151, 152, 153, 154, 155, 02678 226, 0, 156, 0, 0, 0, 0, 0, 0, 0, 02679 0, 0, 157, 158, 159, 160, 161, 162, 163, 164, 02680 165, 0, 0, 166, 167, 0, 0, 168, 169, 170, 02681 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02682 0, 172, 0, 0, 55, 0, 0, 0, 0, 0, 02683 0, 0, 0, 0, 0, 0, 0, 0, 173, 174, 02684 175, 176, 177, 178, 179, 180, 181, 182, 0, 183, 02685 184, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02686 0, 0, 0, 0, 0, 0, 0, 185, 113, 114, 02687 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 02688 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 02689 135, 136, 0, 0, 0, 137, 138, 139, 140, 141, 02690 142, 143, 144, 145, 146, 0, 0, 0, 0, 0, 02691 147, 148, 149, 150, 151, 152, 153, 154, 155, 0, 02692 0, 156, 0, 0, 0, 0, 0, 0, 0, 0, 02693 0, 157, 158, 159, 160, 161, 162, 163, 164, 165, 02694 0, 0, 166, 167, 0, 0, 168, 169, 170, 171, 02695 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02696 172, 0, 0, 55, 0, 0, 0, 0, 0, 0, 02697 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, 02698 176, 177, 178, 179, 180, 181, 182, 0, 183, 184, 02699 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02700 0, 0, 0, 0, 0, 0, 185, 113, 114, 115, 02701 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 02702 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 02703 136, 0, 0, 0, 137, 138, 139, 140, 141, 142, 02704 143, 144, 145, 146, 0, 0, 0, 0, 0, 147, 02705 148, 149, 150, 151, 152, 153, 154, 155, 0, 0, 02706 156, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02707 157, 158, 159, 160, 161, 162, 163, 164, 165, 0, 02708 0, 166, 167, 0, 0, 168, 169, 170, 171, 0, 02709 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 02710 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02711 0, 0, 0, 0, 0, 0, 173, 174, 175, 176, 02712 177, 178, 179, 180, 181, 182, 0, 183, 184, 0, 02713 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02714 11, 0, 0, 0, 12, 185, 13, 14, 15, 231, 02715 232, 18, 19, 0, 0, 0, 0, 0, 233, 234, 02716 235, 23, 24, 25, 26, 0, 0, 194, 0, 0, 02717 0, 0, 0, 0, 258, 0, 0, 32, 33, 34, 02718 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02719 43, 44, 45, 0, 0, 0, 0, 0, 0, 0, 02720 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02721 0, 0, 0, 0, 259, 0, 0, 197, 50, 0, 02722 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02723 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02724 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02725 260, 10, 11, 0, 0, 0, 12, 0, 13, 14, 02726 15, 231, 232, 18, 19, 0, 0, 0, 261, 0, 02727 233, 234, 235, 23, 24, 25, 26, 0, 0, 194, 02728 0, 0, 0, 0, 0, 0, 258, 0, 0, 32, 02729 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 02730 42, 0, 43, 44, 45, 0, 0, 0, 0, 0, 02731 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02732 0, 0, 0, 0, 0, 0, 259, 0, 0, 197, 02733 50, 0, 51, 52, 0, 0, 0, 54, 55, 56, 02734 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 02735 0, 0, 0, 0, 0, 5, 6, 7, 8, 9, 02736 0, 0, 260, 10, 11, 0, 0, 0, 12, 0, 02737 13, 14, 15, 16, 17, 18, 19, 0, 0, 0, 02738 490, 0, 20, 21, 22, 23, 24, 25, 26, 0, 02739 0, 27, 0, 0, 0, 0, 0, 28, 29, 30, 02740 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02741 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02742 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02743 0, 0, 0, 0, 0, 0, 0, 0, 48, 0, 02744 0, 49, 50, 0, 51, 52, 0, 53, 0, 54, 02745 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02746 0, 0, 0, 0, 5, 6, 7, 8, 9, 0, 02747 0, 0, 10, 11, 61, 62, 63, 12, 0, 13, 02748 14, 15, 16, 17, 18, 19, 0, 0, 0, 0, 02749 0, 20, 21, 22, 23, 24, 25, 26, 0, 0, 02750 27, 0, 0, 0, 0, 0, 28, 29, 0, 31, 02751 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02752 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02753 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02754 0, 0, 0, 0, 0, 0, 0, 48, 0, 0, 02755 49, 50, 0, 51, 52, 0, 53, 0, 54, 55, 02756 56, 57, 58, 59, 60, 0, 0, 0, 0, 0, 02757 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02758 0, 10, 11, 61, 62, 63, 12, 0, 13, 14, 02759 15, 16, 17, 18, 19, 0, 0, 0, 0, 0, 02760 20, 21, 22, 23, 24, 25, 26, 0, 0, 194, 02761 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 02762 33, 34, 35, 36, 37, 38, 39, 40, 195, 41, 02763 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02764 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02765 0, 0, 0, 0, 0, 0, 196, 0, 0, 197, 02766 50, 0, 51, 52, 0, 198, 199, 54, 55, 56, 02767 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 02768 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02769 10, 11, 61, 200, 63, 12, 0, 13, 14, 15, 02770 231, 232, 18, 19, 0, 0, 0, 0, 0, 233, 02771 234, 235, 23, 24, 25, 26, 0, 0, 194, 0, 02772 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02773 34, 35, 36, 37, 38, 39, 40, 195, 41, 42, 02774 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02775 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02776 0, 0, 0, 0, 0, 196, 0, 0, 197, 50, 02777 0, 51, 52, 0, 587, 199, 54, 55, 56, 57, 02778 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02779 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02780 11, 61, 200, 63, 12, 0, 13, 14, 15, 231, 02781 232, 18, 19, 0, 0, 0, 0, 0, 233, 234, 02782 235, 23, 24, 25, 26, 0, 0, 194, 0, 0, 02783 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02784 35, 36, 37, 38, 39, 40, 195, 41, 42, 0, 02785 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02786 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02787 0, 0, 0, 0, 196, 0, 0, 197, 50, 0, 02788 51, 52, 0, 198, 0, 54, 55, 56, 57, 58, 02789 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02790 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02791 61, 200, 63, 12, 0, 13, 14, 15, 231, 232, 02792 18, 19, 0, 0, 0, 0, 0, 233, 234, 235, 02793 23, 24, 25, 26, 0, 0, 194, 0, 0, 0, 02794 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02795 36, 37, 38, 39, 40, 195, 41, 42, 0, 43, 02796 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02797 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02798 0, 0, 0, 196, 0, 0, 197, 50, 0, 51, 02799 52, 0, 0, 199, 54, 55, 56, 57, 58, 59, 02800 60, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02801 6, 7, 0, 9, 0, 0, 0, 10, 11, 61, 02802 200, 63, 12, 0, 13, 14, 15, 231, 232, 18, 02803 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02804 24, 25, 26, 0, 0, 194, 0, 0, 0, 0, 02805 0, 0, 29, 0, 0, 32, 33, 34, 35, 36, 02806 37, 38, 39, 40, 195, 41, 42, 0, 43, 44, 02807 45, 0, 46, 47, 0, 0, 0, 0, 0, 0, 02808 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02809 0, 0, 196, 0, 0, 197, 50, 0, 51, 52, 02810 0, 587, 0, 54, 55, 56, 57, 58, 59, 60, 02811 0, 0, 0, 0, 0, 0, 0, 0, 5, 6, 02812 7, 0, 9, 0, 0, 0, 10, 11, 61, 200, 02813 63, 12, 0, 13, 14, 15, 231, 232, 18, 19, 02814 0, 0, 0, 0, 0, 233, 234, 235, 23, 24, 02815 25, 26, 0, 0, 194, 0, 0, 0, 0, 0, 02816 0, 29, 0, 0, 32, 33, 34, 35, 36, 37, 02817 38, 39, 40, 195, 41, 42, 0, 43, 44, 45, 02818 0, 46, 47, 0, 0, 0, 0, 0, 0, 0, 02819 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02820 0, 196, 0, 0, 197, 50, 0, 51, 52, 0, 02821 0, 0, 54, 55, 56, 57, 58, 59, 60, 0, 02822 0, 0, 0, 0, 0, 0, 0, 5, 6, 7, 02823 0, 9, 0, 0, 0, 10, 11, 61, 200, 63, 02824 12, 0, 13, 14, 15, 16, 17, 18, 19, 0, 02825 0, 0, 0, 0, 20, 21, 22, 23, 24, 25, 02826 26, 0, 0, 194, 0, 0, 0, 0, 0, 0, 02827 29, 0, 0, 32, 33, 34, 35, 36, 37, 38, 02828 39, 40, 0, 41, 42, 0, 43, 44, 45, 0, 02829 46, 47, 0, 0, 0, 0, 0, 0, 0, 0, 02830 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02831 196, 0, 0, 197, 50, 0, 51, 52, 0, 484, 02832 0, 54, 55, 56, 57, 58, 59, 60, 0, 0, 02833 0, 0, 0, 0, 0, 0, 5, 6, 7, 0, 02834 9, 0, 0, 0, 10, 11, 61, 200, 63, 12, 02835 0, 13, 14, 15, 231, 232, 18, 19, 0, 0, 02836 0, 0, 0, 233, 234, 235, 23, 24, 25, 26, 02837 0, 0, 194, 0, 0, 0, 0, 0, 0, 29, 02838 0, 0, 32, 33, 34, 35, 36, 37, 38, 39, 02839 40, 0, 41, 42, 0, 43, 44, 45, 0, 46, 02840 47, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02841 0, 0, 0, 0, 0, 0, 0, 0, 0, 196, 02842 0, 0, 197, 50, 0, 51, 52, 0, 198, 0, 02843 54, 55, 56, 57, 58, 59, 60, 0, 0, 0, 02844 0, 0, 0, 0, 0, 5, 6, 7, 0, 9, 02845 0, 0, 0, 10, 11, 61, 200, 63, 12, 0, 02846 13, 14, 15, 231, 232, 18, 19, 0, 0, 0, 02847 0, 0, 233, 234, 235, 23, 24, 25, 26, 0, 02848 0, 194, 0, 0, 0, 0, 0, 0, 29, 0, 02849 0, 32, 33, 34, 35, 36, 37, 38, 39, 40, 02850 0, 41, 42, 0, 43, 44, 45, 0, 46, 47, 02851 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02852 0, 0, 0, 0, 0, 0, 0, 0, 196, 0, 02853 0, 197, 50, 0, 51, 52, 0, 772, 0, 54, 02854 55, 56, 57, 58, 59, 60, 0, 0, 0, 0, 02855 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02856 0, 0, 10, 11, 61, 200, 63, 12, 0, 13, 02857 14, 15, 231, 232, 18, 19, 0, 0, 0, 0, 02858 0, 233, 234, 235, 23, 24, 25, 26, 0, 0, 02859 194, 0, 0, 0, 0, 0, 0, 29, 0, 0, 02860 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02861 41, 42, 0, 43, 44, 45, 0, 46, 47, 0, 02862 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02863 0, 0, 0, 0, 0, 0, 0, 196, 0, 0, 02864 197, 50, 0, 51, 52, 0, 484, 0, 54, 55, 02865 56, 57, 58, 59, 60, 0, 0, 0, 0, 0, 02866 0, 0, 0, 5, 6, 7, 0, 9, 0, 0, 02867 0, 10, 11, 61, 200, 63, 12, 0, 13, 14, 02868 15, 231, 232, 18, 19, 0, 0, 0, 0, 0, 02869 233, 234, 235, 23, 24, 25, 26, 0, 0, 194, 02870 0, 0, 0, 0, 0, 0, 29, 0, 0, 32, 02871 33, 34, 35, 36, 37, 38, 39, 40, 0, 41, 02872 42, 0, 43, 44, 45, 0, 46, 47, 0, 0, 02873 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02874 0, 0, 0, 0, 0, 0, 196, 0, 0, 197, 02875 50, 0, 51, 52, 0, 587, 0, 54, 55, 56, 02876 57, 58, 59, 60, 0, 0, 0, 0, 0, 0, 02877 0, 0, 5, 6, 7, 0, 9, 0, 0, 0, 02878 10, 11, 61, 200, 63, 12, 0, 13, 14, 15, 02879 231, 232, 18, 19, 0, 0, 0, 0, 0, 233, 02880 234, 235, 23, 24, 25, 26, 0, 0, 194, 0, 02881 0, 0, 0, 0, 0, 29, 0, 0, 32, 33, 02882 34, 35, 36, 37, 38, 39, 40, 0, 41, 42, 02883 0, 43, 44, 45, 0, 46, 47, 0, 0, 0, 02884 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02885 0, 0, 0, 0, 0, 196, 0, 0, 197, 50, 02886 0, 51, 52, 0, 0, 0, 54, 55, 56, 57, 02887 58, 59, 60, 0, 0, 0, 0, 0, 0, 0, 02888 0, 5, 6, 7, 0, 9, 0, 0, 0, 10, 02889 11, 61, 200, 63, 12, 0, 13, 14, 15, 16, 02890 17, 18, 19, 0, 0, 0, 0, 0, 20, 21, 02891 22, 23, 24, 25, 26, 0, 0, 27, 0, 0, 02892 0, 0, 0, 0, 29, 0, 0, 32, 33, 34, 02893 35, 36, 37, 38, 39, 40, 0, 41, 42, 0, 02894 43, 44, 45, 0, 46, 47, 0, 0, 0, 0, 02895 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02896 0, 0, 0, 0, 196, 0, 0, 197, 50, 0, 02897 51, 52, 0, 0, 0, 54, 55, 56, 57, 58, 02898 59, 60, 0, 0, 0, 0, 0, 0, 0, 0, 02899 5, 6, 7, 0, 9, 0, 0, 0, 10, 11, 02900 61, 62, 63, 12, 0, 13, 14, 15, 16, 17, 02901 18, 19, 0, 0, 0, 0, 0, 20, 21, 22, 02902 23, 24, 25, 26, 0, 0, 194, 0, 0, 0, 02903 0, 0, 0, 29, 0, 0, 32, 33, 34, 35, 02904 36, 37, 38, 39, 40, 0, 41, 42, 0, 43, 02905 44, 45, 0, 46, 47, 0, 0, 0, 0, 0, 02906 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02907 0, 0, 0, 196, 0, 0, 197, 50, 0, 51, 02908 52, 0, 0, 0, 54, 55, 56, 57, 58, 59, 02909 60, 0, 0, 0, 0, 0, 0, 0, 0, 5, 02910 6, 7, 0, 9, 0, 0, 0, 10, 11, 61, 02911 200, 63, 12, 0, 13, 14, 15, 231, 232, 18, 02912 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02913 24, 25, 26, 0, 0, 194, 0, 0, 0, 0, 02914 0, 0, 258, 0, 0, 32, 33, 34, 35, 36, 02915 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02916 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02917 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02918 0, 0, 259, 0, 0, 304, 50, 0, 51, 52, 02919 0, 305, 0, 54, 55, 56, 57, 58, 59, 60, 02920 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02921 0, 0, 10, 11, 0, 0, 0, 12, 260, 13, 02922 14, 15, 231, 232, 18, 19, 0, 0, 0, 0, 02923 0, 233, 234, 235, 23, 24, 25, 26, 0, 0, 02924 194, 0, 0, 0, 0, 0, 0, 258, 0, 0, 02925 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02926 41, 42, 0, 43, 44, 45, 0, 0, 0, 0, 02927 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02928 0, 0, 0, 0, 0, 0, 0, 346, 0, 0, 02929 49, 50, 0, 51, 52, 0, 53, 0, 54, 55, 02930 56, 57, 58, 59, 60, 0, 0, 0, 0, 5, 02931 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02932 0, 0, 12, 260, 13, 14, 15, 231, 232, 18, 02933 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02934 24, 25, 26, 0, 0, 194, 0, 0, 0, 0, 02935 0, 0, 258, 0, 0, 32, 33, 34, 354, 36, 02936 37, 38, 355, 40, 0, 41, 42, 0, 43, 44, 02937 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02938 0, 0, 0, 0, 0, 0, 0, 0, 0, 356, 02939 0, 0, 357, 0, 0, 197, 50, 0, 51, 52, 02940 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02941 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02942 0, 0, 10, 11, 0, 0, 0, 12, 260, 13, 02943 14, 15, 231, 232, 18, 19, 0, 0, 0, 0, 02944 0, 233, 234, 235, 23, 24, 25, 26, 0, 0, 02945 194, 0, 0, 0, 0, 0, 0, 258, 0, 0, 02946 32, 33, 34, 354, 36, 37, 38, 355, 40, 0, 02947 41, 42, 0, 43, 44, 45, 0, 0, 0, 0, 02948 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02949 0, 0, 0, 0, 0, 0, 0, 357, 0, 0, 02950 197, 50, 0, 51, 52, 0, 0, 0, 54, 55, 02951 56, 57, 58, 59, 60, 0, 0, 0, 0, 5, 02952 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02953 0, 0, 12, 260, 13, 14, 15, 231, 232, 18, 02954 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02955 24, 25, 26, 0, 0, 194, 0, 0, 0, 0, 02956 0, 0, 258, 0, 0, 32, 33, 34, 35, 36, 02957 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02958 45, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02959 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02960 0, 0, 259, 0, 0, 304, 50, 0, 51, 52, 02961 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02962 0, 0, 0, 0, 5, 6, 7, 0, 9, 0, 02963 0, 0, 10, 11, 0, 0, 0, 12, 260, 13, 02964 14, 15, 231, 232, 18, 19, 0, 0, 0, 0, 02965 0, 233, 234, 235, 23, 24, 25, 26, 0, 0, 02966 194, 0, 0, 0, 0, 0, 0, 258, 0, 0, 02967 32, 33, 34, 35, 36, 37, 38, 39, 40, 0, 02968 41, 42, 0, 43, 44, 45, 0, 0, 0, 0, 02969 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02970 0, 0, 0, 0, 0, 0, 0, 902, 0, 0, 02971 197, 50, 0, 51, 52, 0, 0, 0, 54, 55, 02972 56, 57, 58, 59, 60, 0, 0, 0, 0, 5, 02973 6, 7, 0, 9, 0, 0, 0, 10, 11, 0, 02974 0, 0, 12, 260, 13, 14, 15, 231, 232, 18, 02975 19, 0, 0, 0, 0, 0, 233, 234, 235, 23, 02976 24, 25, 26, 0, 0, 194, 0, 663, 0, 0, 02977 0, 0, 258, 0, 0, 32, 33, 34, 35, 36, 02978 37, 38, 39, 40, 0, 41, 42, 0, 43, 44, 02979 45, 308, 309, 310, 311, 312, 313, 314, 315, 316, 02980 317, 318, 319, 320, 0, 0, 321, 322, 0, 0, 02981 0, 0, 912, 0, 0, 197, 50, 0, 51, 52, 02982 0, 0, 0, 54, 55, 56, 57, 58, 59, 60, 02983 0, 0, 0, 323, 0, 324, 325, 326, 327, 328, 02984 329, 330, 331, 332, 333, 0, 0, 0, 260, 0, 02985 525, 526, 0, 0, 527, 0, 0, 0, 0, 0, 02986 0, 0, 0, -241, 157, 158, 159, 160, 161, 162, 02987 163, 164, 165, 0, 0, 166, 167, 0, 0, 168, 02988 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 02989 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 02990 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02991 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 02992 0, 183, 184, 0, 0, 0, 0, 533, 534, 0, 02993 0, 535, 0, 0, 0, 0, 0, 0, 0, 185, 02994 220, 157, 158, 159, 160, 161, 162, 163, 164, 165, 02995 0, 0, 166, 167, 0, 0, 168, 169, 170, 171, 02996 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02997 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 02998 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, 02999 176, 177, 178, 179, 180, 181, 182, 0, 183, 184, 03000 0, 0, 0, 0, 591, 526, 0, 0, 592, 0, 03001 0, 0, 0, 0, 0, 0, 185, 220, 157, 158, 03002 159, 160, 161, 162, 163, 164, 165, 0, 0, 166, 03003 167, 0, 0, 168, 169, 170, 171, 0, 0, 0, 03004 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 03005 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03006 0, 0, 0, 0, 173, 174, 175, 176, 177, 178, 03007 179, 180, 181, 182, 0, 183, 184, 0, 0, 0, 03008 0, 594, 534, 0, 0, 595, 0, 0, 0, 0, 03009 0, 0, 0, 185, 220, 157, 158, 159, 160, 161, 03010 162, 163, 164, 165, 0, 0, 166, 167, 0, 0, 03011 168, 169, 170, 171, 0, 0, 0, 0, 0, 0, 03012 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 03013 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03014 0, 173, 174, 175, 176, 177, 178, 179, 180, 181, 03015 182, 0, 183, 184, 0, 0, 0, 0, 617, 526, 03016 0, 0, 618, 0, 0, 0, 0, 0, 0, 0, 03017 185, 220, 157, 158, 159, 160, 161, 162, 163, 164, 03018 165, 0, 0, 166, 167, 0, 0, 168, 169, 170, 03019 171, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03020 0, 172, 0, 0, 0, 0, 0, 0, 0, 0, 03021 0, 0, 0, 0, 0, 0, 0, 0, 173, 174, 03022 175, 176, 177, 178, 179, 180, 181, 182, 0, 183, 03023 184, 0, 0, 0, 0, 620, 534, 0, 0, 621, 03024 0, 0, 0, 0, 0, 0, 0, 185, 220, 157, 03025 158, 159, 160, 161, 162, 163, 164, 165, 0, 0, 03026 166, 167, 0, 0, 168, 169, 170, 171, 0, 0, 03027 0, 0, 0, 0, 0, 0, 0, 0, 172, 0, 03028 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03029 0, 0, 0, 0, 0, 173, 174, 175, 176, 177, 03030 178, 179, 180, 181, 182, 0, 183, 184, 0, 0, 03031 0, 0, 692, 526, 0, 0, 693, 0, 0, 0, 03032 0, 0, 0, 0, 185, 220, 157, 158, 159, 160, 03033 161, 162, 163, 164, 165, 0, 0, 166, 167, 0, 03034 0, 168, 169, 170, 171, 0, 0, 0, 0, 0, 03035 0, 0, 0, 0, 0, 172, 0, 0, 0, 0, 03036 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03037 0, 0, 173, 174, 175, 176, 177, 178, 179, 180, 03038 181, 182, 0, 183, 184, 0, 0, 0, 0, 695, 03039 534, 0, 0, 696, 0, 0, 0, 0, 0, 0, 03040 0, 185, 220, 157, 158, 159, 160, 161, 162, 163, 03041 164, 165, 0, 0, 166, 167, 0, 0, 168, 169, 03042 170, 171, 0, 0, 0, 0, 0, 0, 0, 0, 03043 0, 0, 172, 0, 0, 0, 0, 0, 0, 0, 03044 0, 0, 0, 0, 0, 0, 0, 0, 0, 173, 03045 174, 175, 176, 177, 178, 179, 180, 181, 182, 0, 03046 183, 184, 0, 0, 0, 0, 702, 526, 0, 0, 03047 703, 0, 0, 0, 0, 0, 0, 0, 185, 220, 03048 157, 158, 159, 160, 161, 162, 163, 164, 165, 0, 03049 0, 166, 167, 0, 0, 168, 169, 170, 171, 0, 03050 0, 0, 0, 0, 0, 0, 0, 0, 0, 172, 03051 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03052 0, 0, 0, 0, 0, 0, 173, 174, 175, 176, 03053 177, 178, 179, 180, 181, 182, 0, 183, 184, 0, 03054 0, 0, 0, 572, 534, 0, 0, 573, 0, 0, 03055 0, 0, 0, 0, 0, 185, 220, 157, 158, 159, 03056 160, 161, 162, 163, 164, 165, 0, 0, 166, 167, 03057 0, 0, 168, 169, 170, 171, 0, 0, 0, 0, 03058 0, 0, 0, 0, 0, 0, 172, 0, 0, 0, 03059 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03060 0, 0, 0, 173, 174, 175, 176, 177, 178, 179, 03061 180, 181, 182, 0, 183, 184, 0, 0, 0, 0, 03062 965, 526, 0, 0, 966, 0, 0, 0, 0, 0, 03063 0, 0, 185, 220, 157, 158, 159, 160, 161, 162, 03064 163, 164, 165, 0, 0, 166, 167, 0, 0, 168, 03065 169, 170, 171, 0, 0, 0, 0, 0, 0, 0, 03066 0, 0, 0, 172, 0, 0, 0, 0, 0, 0, 03067 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03068 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 03069 0, 183, 184, 0, 0, 0, 0, 971, 526, 0, 03070 0, 972, 0, 0, 0, 0, 0, 0, 0, 185, 03071 220, 157, 158, 159, 160, 161, 162, 163, 164, 165, 03072 0, 0, 166, 167, 0, 0, 168, 169, 170, 171, 03073 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03074 172, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03075 0, 0, 0, 0, 0, 0, 0, 173, 174, 175, 03076 176, 177, 178, 179, 180, 181, 182, 0, 183, 184, 03077 0, 0, 0, 0, 974, 534, 0, 0, 975, 0, 03078 0, 0, 0, 0, 0, 0, 185, 220, 157, 158, 03079 159, 160, 161, 162, 163, 164, 165, 0, 0, 166, 03080 167, 0, 0, 168, 169, 170, 171, 0, 0, 0, 03081 0, 0, 0, 0, 0, 0, 0, 172, 0, 0, 03082 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 03083 0, 0, 0, 0, 173, 174, 175, 176, 177, 178, 03084 179, 180, 181, 182, 0, 183, 184, 0, 0, 0, 03085 0, 572, 534, 0, 0, 573, 0, 0, 0, 0, 03086 0, 0, 0, 185, 220, 157, 158, 159, 160, 161, 03087 162, 163, 164, 165, 0, 0, 166, 167, 0, 0, 03088 168, 169, 170, 171, 0, 0, 0, 0, 0, 0, 03089 0, 0, 0, 0, 172, 0, 0, 0, 0, 0, 03090 0, 0, 718, 0, 0, 0, 0, 0, 0, 0, 03091 0, 173, 174, 175, 176, 177, 178, 179, 180, 181, 03092 182, 663, 183, 184, 0, 0, 308, 309, 310, 311, 03093 312, 313, 314, 315, 316, 317, 318, 319, 320, 0, 03094 185, 321, 322, 0, 0, 308, 309, 310, 311, 312, 03095 313, 314, 315, 316, 317, 318, 319, 320, 0, 0, 03096 321, 322, 0, 0, 0, 0, 0, 0, 323, 0, 03097 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 03098 0, 0, 0, 0, 0, 0, 0, 323, 0, 324, 03099 325, 326, 327, 328, 329, 330, 331, 332, 333 03100 }; 03101 03102 static const yytype_int16 yycheck[] = 03103 { 03104 2, 55, 340, 28, 2, 454, 4, 52, 593, 16, 03105 17, 335, 307, 20, 307, 8, 547, 213, 16, 17, 03106 8, 566, 20, 27, 53, 29, 84, 22, 8, 87, 03107 546, 87, 4, 22, 619, 28, 49, 91, 252, 76, 03108 28, 2, 256, 4, 404, 357, 1, 65, 28, 51, 03109 52, 49, 50, 749, 450, 53, 746, 13, 334, 627, 03110 336, 53, 680, 25, 62, 762, 684, 454, 13, 16, 03111 17, 65, 26, 20, 396, 55, 400, 26, 76, 25, 03112 440, 0, 404, 27, 76, 83, 84, 576, 577, 87, 03113 88, 89, 90, 87, 490, 29, 88, 89, 90, 13, 03114 242, 25, 378, 379, 51, 851, 828, 85, 76, 694, 03115 136, 91, 87, 16, 17, 110, 147, 20, 85, 568, 03116 705, 110, 146, 399, 25, 401, 85, 653, 452, 61, 03117 87, 16, 17, 62, 109, 20, 276, 25, 278, 56, 03118 280, 13, 742, 37, 38, 87, 114, 109, 51, 52, 03119 195, 427, 109, 198, 199, 826, 701, 28, 113, 849, 03120 138, 139, 304, 763, 709, 140, 25, 109, 736, 737, 03121 25, 13, 139, 107, 106, 146, 13, 453, 140, 138, 03122 139, 143, 136, 632, 140, 147, 109, 136, 244, 145, 03123 145, 147, 147, 142, 140, 941, 892, 142, 140, 197, 03124 145, 145, 147, 147, 653, 207, 896, 904, 930, 140, 03125 217, 213, 219, 220, 25, 886, 140, 413, 220, 217, 03126 746, 219, 220, 749, 261, 223, 244, 225, 552, 242, 03127 719, 145, 230, 147, 50, 293, 294, 295, 296, 140, 03128 564, 601, 142, 241, 242, 632, 235, 147, 109, 238, 03129 244, 563, 140, 147, 258, 873, 99, 302, 826, 708, 03130 828, 932, 307, 261, 25, 661, 87, 83, 84, 261, 03131 217, 87, 219, 145, 140, 147, 305, 553, 600, 601, 03132 241, 140, 25, 341, 342, 140, 25, 343, 959, 565, 03133 806, 304, 85, 87, 292, 293, 294, 295, 296, 297, 03134 298, 299, 85, 145, 302, 147, 304, 305, 145, 307, 03135 147, 59, 60, 305, 217, 109, 219, 26, 886, 887, 03136 292, 708, 109, 849, 142, 851, 49, 467, 335, 140, 03137 875, 292, 217, 335, 219, 56, 297, 335, 145, 337, 03138 147, 87, 873, 341, 342, 138, 139, 336, 88, 343, 03139 395, 396, 690, 140, 334, 302, 139, 26, 356, 404, 03140 307, 140, 930, 109, 932, 359, 892, 85, 147, 662, 03141 109, 85, 109, 302, 61, 26, 85, 140, 307, 140, 03142 15, 142, 17, 928, 679, 87, 384, 385, 973, 85, 03143 85, 959, 437, 400, 590, 440, 421, 140, 400, 142, 03144 614, 140, 400, 85, 143, 140, 85, 223, 147, 225, 03145 412, 413, 401, 450, 142, 941, 85, 104, 105, 399, 03146 138, 139, 424, 136, 142, 139, 424, 136, 421, 138, 03147 139, 880, 85, 421, 85, 433, 85, 142, 427, 484, 03148 140, 421, 138, 139, 139, 452, 426, 147, 85, 142, 03149 452, 85, 450, 490, 452, 384, 385, 139, 450, 146, 03150 139, 85, 822, 424, 453, 68, 85, 136, 85, 138, 03151 139, 451, 433, 142, 197, 87, 85, 293, 294, 295, 03152 296, 483, 298, 299, 68, 136, 139, 138, 139, 138, 03153 139, 142, 490, 396, 85, 37, 38, 109, 490, 668, 03154 822, 223, 139, 548, 138, 139, 675, 230, 109, 52, 03155 514, 54, 55, 56, 57, 139, 119, 120, 121, 242, 03156 139, 138, 139, 861, 246, 341, 342, 143, 532, 867, 03157 139, 26, 728, 52, 437, 530, 538, 56, 540, 85, 03158 356, 530, 587, 538, 542, 552, 544, 138, 139, 538, 03159 552, 545, 546, 56, 552, 600, 601, 564, 85, 584, 03160 59, 60, 564, 144, 553, 559, 564, 137, 566, 567, 03161 106, 551, 574, 575, 576, 577, 565, 87, 615, 574, 03162 575, 304, 140, 563, 106, 574, 575, 87, 590, 593, 03163 85, 584, 138, 139, 87, 85, 584, 140, 68, 109, 03164 68, 548, 14, 15, 584, 85, 604, 609, 85, 109, 03165 140, 138, 139, 658, 17, 619, 109, 615, 56, 608, 03166 609, 574, 575, 615, 661, 145, 25, 951, 52, 94, 03167 54, 55, 56, 57, 679, 143, 638, 146, 640, 697, 03168 642, 136, 700, 138, 139, 137, 140, 142, 138, 139, 03169 52, 653, 54, 55, 56, 57, 654, 711, 138, 139, 03170 10, 138, 139, 661, 662, 89, 61, 665, 666, 661, 03171 65, 95, 96, 671, 672, 109, 952, 679, 680, 140, 03172 682, 140, 684, 140, 406, 140, 140, 89, 410, 734, 03173 694, 140, 116, 415, 96, 119, 8, 600, 13, 697, 03174 87, 705, 700, 701, 698, 61, 87, 137, 430, 104, 03175 105, 709, 109, 435, 116, 54, 710, 719, 716, 717, 03176 140, 145, 109, 140, 63, 64, 728, 772, 109, 140, 03177 68, 711, 679, 662, 87, 52, 665, 666, 796, 52, 03178 742, 111, 671, 672, 140, 743, 744, 87, 104, 105, 03179 106, 567, 144, 140, 549, 15, 109, 755, 803, 140, 03180 2, 763, 4, 765, 87, 767, 768, 489, 52, 109, 03181 54, 55, 56, 57, 16, 17, 140, 822, 20, 117, 03182 118, 119, 120, 121, 145, 783, 109, 140, 604, 791, 03183 109, 140, 794, 114, 140, 793, 140, 140, 796, 10, 03184 140, 88, 800, 801, 140, 9, 804, 49, 50, 10, 03185 137, 140, 806, 10, 808, 61, 140, 140, 140, 542, 03186 62, 544, 820, 137, 140, 114, 52, 137, 54, 55, 03187 56, 57, 834, 835, 140, 837, 68, 839, 840, 140, 03188 140, 83, 84, 137, 842, 87, 56, 140, 140, 68, 03189 842, 83, 84, 56, 783, 140, 140, 140, 104, 105, 03190 106, 140, 860, 89, 83, 84, 864, 140, 860, 95, 03191 96, 873, 142, 142, 61, 140, 424, 875, 90, 88, 03192 61, 697, 954, 736, 700, 117, 118, 119, 120, 121, 03193 116, 93, 904, 119, 689, 114, 115, 116, 117, 118, 03194 119, 120, 121, 953, 906, 907, 908, 96, 910, 911, 03195 640, 706, 642, 57, 91, 880, 142, 104, 105, 106, 03196 918, 849, 920, 104, 105, 106, 653, 746, 926, -1, 03197 928, 654, 934, 935, 936, 937, 52, -1, 54, 55, 03198 56, 57, -1, -1, 951, -1, -1, 54, 55, 951, 03199 57, 953, 954, 951, -1, 197, 63, 64, -1, 939, 03200 -1, -1, -1, 952, -1, 967, 968, 969, 970, 973, 03201 950, -1, -1, 89, -1, 217, -1, 219, 220, 981, 03202 796, 223, -1, 225, -1, 707, -1, 989, 230, -1, 03203 -1, -1, -1, 716, 717, 68, -1, -1, -1, 241, 03204 242, -1, 797, -1, 799, -1, -1, 729, -1, -1, 03205 83, 84, -1, -1, 809, -1, -1, -1, 740, 814, 03206 743, 744, 749, -1, 52, 752, 54, 55, 56, 57, 03207 -1, -1, 755, -1, -1, 765, -1, 767, 768, -1, 03208 -1, -1, -1, 116, 117, 118, 119, 120, 121, -1, 03209 292, 293, 294, 295, 296, 297, 298, 299, -1, -1, 03210 302, 89, 304, -1, -1, 307, -1, 95, -1, 52, 03211 793, 54, 55, 56, 57, 870, 871, 800, 801, -1, 03212 -1, 804, 16, 17, -1, -1, 20, -1, -1, -1, 03213 -1, 813, -1, 335, -1, 337, -1, 820, -1, 341, 03214 342, -1, -1, 825, 834, 835, -1, 837, 830, 839, 03215 840, -1, 46, 47, 356, -1, -1, 51, 52, -1, 03216 -1, -1, -1, -1, 851, -1, 853, -1, 62, 63, 03217 -1, 52, 927, 54, 55, 56, 57, -1, -1, -1, 03218 -1, 864, 384, 385, 40, 41, 42, 43, 44, -1, 03219 -1, -1, -1, -1, -1, -1, -1, -1, 400, -1, 03220 955, -1, 957, -1, -1, 892, -1, 894, 89, -1, 03221 -1, 898, -1, -1, 95, -1, 906, 907, 908, -1, 03222 910, 911, 424, 52, -1, 54, 55, 56, 57, -1, 03223 -1, 433, -1, -1, -1, 918, -1, 920, -1, -1, 03224 -1, -1, -1, 926, 934, 935, 936, 937, -1, -1, 03225 452, -1, -1, -1, 941, -1, 943, -1, -1, 946, 03226 89, -1, -1, -1, -1, -1, 95, 96, -1, -1, 03227 -1, -1, -1, -1, 961, -1, -1, 967, 968, 969, 03228 970, -1, -1, -1, -1, -1, -1, 116, -1, -1, 03229 119, 981, -1, -1, -1, -1, 983, -1, -1, 989, 03230 -1, 195, -1, -1, 198, 199, 200, -1, -1, -1, 03231 2, -1, 4, 142, -1, 52, -1, 54, 55, 56, 03232 57, -1, -1, 217, -1, 219, 220, -1, -1, -1, 03233 -1, 2, -1, 4, -1, -1, -1, -1, -1, -1, 03234 542, -1, 544, 52, -1, 54, 55, 56, 57, -1, 03235 552, -1, 89, -1, -1, -1, -1, 49, 95, 96, 03236 -1, 53, 564, -1, 566, 567, -1, -1, -1, -1, 03237 -1, -1, -1, -1, -1, -1, -1, -1, 49, 116, 03238 89, -1, 119, -1, 76, -1, 95, 96, -1, -1, 03239 -1, -1, -1, -1, -1, -1, 88, 89, 90, 91, 03240 -1, -1, 604, -1, -1, -1, -1, 116, 302, -1, 03241 119, -1, -1, 307, 308, 309, 310, 311, 312, 313, 03242 314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 03243 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 03244 -1, 335, -1, -1, -1, -1, -1, -1, -1, -1, 03245 -1, -1, 654, -1, -1, -1, -1, -1, -1, -1, 03246 662, -1, -1, 665, 666, -1, -1, -1, -1, 671, 03247 672, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03248 76, 77, 78, 79, 80, -1, -1, 83, 84, -1, 03249 384, 385, -1, -1, -1, 697, -1, -1, 700, 701, 03250 394, 395, 396, -1, -1, 197, 400, 709, 402, 403, 03251 404, -1, -1, -1, 716, 717, 112, 113, 114, 115, 03252 116, 117, 118, 119, 120, 121, 197, -1, -1, 423, 03253 -1, -1, -1, -1, 428, -1, -1, -1, 230, -1, 03254 -1, 743, 744, 437, -1, -1, 440, -1, -1, 241, 03255 242, -1, -1, 755, -1, -1, -1, -1, 452, 230, 03256 -1, -1, -1, -1, -1, -1, -1, -1, -1, 261, 03257 241, 242, -1, -1, -1, -1, -1, -1, 472, 473, 03258 -1, 783, -1, -1, -1, -1, -1, -1, -1, -1, 03259 484, 793, -1, -1, 796, -1, -1, -1, 800, 801, 03260 292, -1, 804, -1, -1, 297, -1, -1, -1, -1, 03261 -1, -1, 304, 305, -1, -1, -1, 2, 820, 4, 03262 -1, 292, -1, -1, -1, -1, 297, -1, -1, -1, 03263 -1, -1, -1, 304, -1, -1, -1, -1, -1, -1, 03264 -1, -1, -1, -1, -1, 337, -1, 2, -1, 4, 03265 -1, -1, -1, -1, 548, -1, -1, -1, 552, -1, 03266 -1, -1, 864, -1, 49, 2, 337, 4, 53, -1, 03267 564, -1, -1, 875, -1, -1, -1, -1, -1, -1, 03268 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03269 -1, 76, -1, 587, 49, -1, -1, -1, 53, -1, 03270 -1, -1, -1, 88, 89, 90, 600, 601, -1, -1, 03271 -1, -1, 49, -1, -1, -1, 918, -1, 920, -1, 03272 -1, 76, -1, -1, 926, -1, 928, -1, -1, -1, 03273 -1, -1, 424, 88, 89, 90, 91, -1, -1, -1, 03274 -1, 433, -1, -1, -1, -1, -1, -1, -1, 951, 03275 -1, 88, -1, 424, -1, -1, -1, -1, 450, -1, 03276 -1, -1, 433, -1, 658, -1, -1, -1, 662, 663, 03277 -1, 665, 666, -1, -1, -1, -1, 671, 672, 0, 03278 -1, -1, -1, -1, -1, 679, -1, 8, 9, 10, 03279 -1, -1, 13, 14, 15, -1, 17, -1, 490, -1, 03280 -1, -1, -1, -1, -1, -1, 27, -1, -1, -1, 03281 -1, -1, 197, -1, -1, -1, 37, 38, -1, 40, 03282 41, 42, 43, 44, 718, -1, -1, -1, -1, 723, 03283 724, -1, 726, 727, -1, -1, -1, -1, -1, -1, 03284 734, -1, 197, -1, -1, 230, -1, -1, -1, -1, 03285 542, -1, 544, -1, -1, -1, 241, 242, -1, -1, 03286 197, -1, -1, -1, 85, -1, -1, -1, -1, -1, 03287 -1, 542, -1, 544, 566, 230, 261, -1, 772, -1, 03288 -1, -1, 776, -1, -1, -1, 241, 242, -1, 783, 03289 -1, -1, -1, 230, -1, 566, -1, -1, -1, -1, 03290 -1, -1, -1, -1, 241, 242, 261, 292, -1, 803, 03291 -1, -1, 297, -1, -1, -1, 137, -1, 139, 304, 03292 305, 142, 143, 615, 145, -1, 147, 821, 822, -1, 03293 -1, -1, -1, -1, -1, -1, -1, 292, -1, -1, 03294 -1, -1, 297, -1, -1, -1, -1, -1, -1, 304, 03295 305, -1, 337, -1, -1, 292, -1, -1, -1, -1, 03296 297, -1, 654, -1, -1, -1, -1, 304, -1, 661, 03297 307, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03298 -1, -1, 337, 654, -1, -1, -1, -1, -1, -1, 03299 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03300 337, -1, -1, -1, -1, -1, -1, -1, -1, 701, 03301 -1, -1, -1, -1, -1, -1, -1, 709, -1, -1, 03302 -1, -1, -1, -1, 716, 717, -1, -1, -1, -1, 03303 701, -1, -1, -1, -1, -1, -1, -1, 709, 424, 03304 -1, -1, -1, -1, -1, 716, 717, -1, 433, -1, 03305 -1, 743, 744, -1, -1, -1, -1, 951, -1, -1, 03306 -1, -1, -1, 755, -1, 450, -1, -1, -1, 424, 03307 -1, -1, 743, 744, -1, -1, -1, -1, 433, -1, 03308 -1, -1, -1, -1, 755, -1, -1, 424, -1, -1, 03309 -1, -1, -1, -1, -1, 450, 433, -1, -1, -1, 03310 -1, 793, -1, -1, -1, 490, -1, -1, 800, 801, 03311 -1, -1, 804, -1, -1, -1, -1, -1, -1, -1, 03312 -1, -1, 793, -1, -1, -1, -1, -1, 820, 800, 03313 801, -1, -1, 804, -1, 490, -1, -1, -1, -1, 03314 -1, -1, -1, -1, -1, -1, -1, -1, -1, 820, 03315 842, -1, -1, -1, -1, -1, -1, 542, -1, 544, 03316 -1, -1, -1, -1, -1, -1, -1, -1, 860, -1, 03317 -1, -1, 864, -1, -1, -1, -1, -1, -1, -1, 03318 -1, 566, -1, 875, -1, -1, -1, 542, -1, 544, 03319 -1, -1, -1, 864, -1, -1, -1, -1, -1, -1, 03320 -1, -1, -1, -1, 875, 542, -1, 544, -1, -1, 03321 -1, 566, -1, -1, -1, -1, -1, -1, -1, -1, 03322 -1, -1, -1, -1, -1, -1, 918, -1, 920, 566, 03323 615, -1, -1, -1, 926, -1, 928, -1, -1, -1, 03324 -1, -1, -1, -1, -1, -1, -1, 918, -1, 920, 03325 -1, -1, -1, -1, -1, 926, -1, 928, -1, -1, 03326 615, 646, -1, -1, -1, -1, -1, -1, -1, 654, 03327 -1, -1, -1, -1, -1, -1, 661, -1, -1, -1, 03328 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03329 -1, -1, 68, 69, 70, 71, 72, 73, 74, 654, 03330 -1, 77, 78, -1, -1, -1, 661, 83, 84, -1, 03331 -1, -1, -1, -1, -1, -1, 701, 654, -1, -1, 03332 -1, -1, -1, -1, 709, 662, -1, -1, -1, -1, 03333 -1, 716, 717, -1, -1, -1, 112, 113, 114, 115, 03334 116, 117, 118, 119, 120, 121, 701, -1, -1, -1, 03335 -1, -1, -1, -1, 709, -1, -1, -1, 743, 744, 03336 -1, 716, 717, -1, 701, -1, -1, -1, -1, -1, 03337 755, -1, 709, -1, -1, -1, -1, -1, -1, 716, 03338 717, 68, 69, 70, 71, 72, 73, 74, 743, 744, 03339 77, 78, -1, -1, -1, -1, 83, 84, -1, -1, 03340 755, -1, -1, -1, -1, -1, 743, 744, 793, -1, 03341 -1, -1, -1, -1, -1, 800, 801, -1, 755, 804, 03342 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, 03343 117, 118, 119, 120, 121, 820, -1, -1, 793, -1, 03344 -1, -1, -1, -1, -1, 800, 801, -1, -1, 804, 03345 -1, -1, -1, -1, -1, -1, 793, 842, -1, -1, 03346 -1, -1, -1, 800, 801, 820, -1, 804, -1, -1, 03347 -1, -1, -1, -1, -1, 860, -1, -1, -1, 864, 03348 -1, -1, -1, 820, -1, -1, -1, 842, -1, -1, 03349 875, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03350 -1, -1, -1, -1, -1, 860, -1, -1, -1, 864, 03351 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03352 875, -1, -1, 860, -1, -1, -1, 864, -1, -1, 03353 -1, -1, -1, 918, -1, 920, -1, -1, 875, -1, 03354 -1, 926, -1, 928, -1, -1, -1, -1, -1, -1, 03355 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03356 -1, -1, -1, 918, -1, 920, -1, -1, -1, -1, 03357 -1, 926, -1, 928, -1, -1, -1, -1, -1, -1, 03358 -1, 918, -1, 920, -1, -1, -1, -1, -1, 926, 03359 -1, 928, 0, 1, -1, 3, 4, 5, 6, 7, 03360 -1, -1, -1, 11, 12, -1, -1, -1, 16, -1, 03361 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03362 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03363 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03364 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03365 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03366 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03367 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03368 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03369 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03370 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03371 -1, -1, -1, 0, 122, 123, 124, -1, -1, -1, 03372 -1, 8, 9, 10, -1, -1, 13, 14, 15, -1, 03373 17, -1, -1, -1, -1, -1, -1, 145, -1, 147, 03374 27, 28, 29, -1, -1, -1, -1, -1, -1, -1, 03375 37, 38, -1, 40, 41, 42, 43, 44, -1, -1, 03376 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73, 03377 74, 75, 76, 77, 78, 79, 80, -1, -1, 83, 03378 84, 68, 69, 70, 71, 72, 73, 74, 75, 76, 03379 77, 78, 79, 80, -1, -1, 83, 84, 85, -1, 03380 87, 88, -1, -1, -1, -1, 110, 94, 112, 113, 03381 114, 115, 116, 117, 118, 119, 120, 121, -1, -1, 03382 107, -1, 109, 110, 111, 112, 113, 114, 115, 116, 03383 117, 118, 119, 120, 121, -1, -1, -1, -1, -1, 03384 -1, -1, -1, 147, -1, -1, -1, -1, -1, -1, 03385 137, 138, 139, 140, 0, -1, 143, 144, 145, -1, 03386 147, -1, 8, 9, 10, -1, -1, 13, 14, 15, 03387 -1, 17, -1, -1, -1, -1, -1, -1, -1, -1, 03388 26, 27, 28, -1, -1, -1, -1, -1, -1, -1, 03389 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03390 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72, 03391 73, 74, 75, 76, 77, 78, 79, 80, -1, -1, 03392 83, 84, 68, 69, 70, 71, 72, 73, 74, 75, 03393 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03394 -1, -1, 88, -1, -1, -1, -1, 110, 94, 112, 03395 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 03396 -1, -1, -1, -1, 110, -1, 112, 113, 114, 115, 03397 116, 117, 118, 119, 120, 121, -1, -1, -1, -1, 03398 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03399 136, 137, 138, 139, 140, 0, 142, 143, 144, 145, 03400 -1, 147, -1, 8, 9, 10, -1, -1, 13, 14, 03401 15, -1, 17, -1, -1, -1, -1, -1, -1, -1, 03402 -1, -1, 27, 28, 29, -1, -1, -1, -1, -1, 03403 -1, -1, 37, 38, -1, 40, 41, 42, 43, 44, 03404 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71, 03405 72, 73, 74, 75, -1, 77, 78, -1, -1, -1, 03406 -1, 83, 84, 68, 69, 70, 71, 72, 73, 74, 03407 75, 76, 77, 78, 79, 80, -1, -1, 83, 84, 03408 85, -1, -1, 88, -1, -1, -1, -1, -1, 94, 03409 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 03410 -1, -1, 107, -1, -1, 110, 111, 112, 113, 114, 03411 115, 116, 117, 118, 119, 120, 121, -1, -1, -1, 03412 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03413 -1, -1, 137, 138, 139, 140, 0, -1, 143, 144, 03414 145, -1, 147, -1, 8, 9, 10, -1, -1, 13, 03415 14, 15, -1, 17, -1, -1, -1, -1, -1, -1, 03416 -1, -1, 26, 27, 28, -1, -1, -1, -1, -1, 03417 -1, -1, -1, 37, 38, -1, 40, 41, 42, 43, 03418 44, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03419 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03420 -1, -1, -1, -1, 68, 69, 70, 71, 72, 73, 03421 74, 75, 76, 77, 78, 79, 80, -1, -1, 83, 03422 84, 85, -1, -1, 88, -1, -1, -1, -1, -1, 03423 94, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03424 -1, -1, -1, -1, -1, -1, 110, -1, 112, 113, 03425 114, 115, 116, 117, 118, 119, 120, 121, -1, -1, 03426 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03427 -1, -1, 136, 137, 138, 139, 140, 0, 142, 143, 03428 144, 145, -1, 147, -1, 8, 9, 10, -1, -1, 03429 13, 14, 15, -1, 17, -1, -1, -1, -1, -1, 03430 -1, -1, -1, -1, 27, 28, -1, -1, -1, -1, 03431 -1, -1, -1, -1, 37, 38, -1, 40, 41, 42, 03432 43, 44, -1, -1, -1, -1, -1, -1, -1, -1, 03433 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03434 -1, -1, -1, -1, -1, 68, 69, 70, 71, 72, 03435 73, 74, 75, 76, 77, 78, 79, 80, -1, -1, 03436 83, 84, 85, -1, -1, 88, -1, -1, -1, -1, 03437 -1, 94, -1, -1, -1, -1, -1, -1, -1, -1, 03438 -1, -1, -1, -1, -1, -1, -1, 110, -1, 112, 03439 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 03440 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03441 -1, -1, -1, -1, 137, 138, 139, 140, 0, 142, 03442 143, 144, 145, -1, 147, -1, 8, 9, 10, -1, 03443 -1, -1, 14, 15, -1, 17, -1, -1, -1, -1, 03444 -1, -1, -1, -1, 26, -1, -1, -1, -1, -1, 03445 -1, -1, -1, -1, -1, 37, 38, -1, 40, 41, 03446 42, 43, 44, -1, -1, -1, -1, -1, -1, -1, 03447 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03448 -1, -1, -1, -1, -1, -1, 68, 69, 70, 71, 03449 72, 73, 74, 75, 76, 77, 78, 79, 80, -1, 03450 -1, 83, 84, 85, 0, 87, -1, -1, -1, -1, 03451 -1, -1, 8, 9, 10, -1, -1, -1, 14, 15, 03452 -1, 17, -1, -1, -1, -1, -1, 109, 110, -1, 03453 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 03454 -1, 37, 38, -1, 40, 41, 42, 43, 44, -1, 03455 -1, -1, -1, -1, 136, 137, 138, 139, 140, -1, 03456 -1, 143, -1, 145, -1, 147, -1, -1, -1, -1, 03457 -1, -1, 68, 69, 70, 71, 72, 73, 74, 75, 03458 76, 77, 78, 79, 80, -1, -1, 83, 84, 85, 03459 -1, 87, -1, -1, -1, -1, -1, -1, -1, -1, 03460 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03461 -1, -1, -1, 109, 110, -1, 112, 113, 114, 115, 03462 116, 117, 118, 119, 120, 121, -1, -1, -1, -1, 03463 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03464 -1, 137, 138, 139, 140, -1, -1, 143, -1, 145, 03465 1, 147, 3, 4, 5, 6, 7, 8, 9, 10, 03466 11, 12, -1, -1, 15, 16, -1, 18, 19, 20, 03467 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03468 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03469 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50, 03470 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03471 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03472 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03473 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03474 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03475 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03476 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03477 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1, 03478 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03479 -1, -1, -1, -1, 145, 1, 147, 3, 4, 5, 03480 6, 7, -1, -1, 10, 11, 12, -1, 14, 15, 03481 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03482 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03483 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03484 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03485 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03486 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03487 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03488 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03489 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03490 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03491 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03492 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03493 -1, -1, -1, -1, -1, -1, -1, -1, -1, 145, 03494 1, 147, 3, 4, 5, 6, 7, -1, -1, 10, 03495 11, 12, -1, -1, 15, 16, 17, 18, 19, 20, 03496 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03497 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03498 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50, 03499 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03500 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03501 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03502 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03503 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03504 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03505 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03506 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1, 03507 1, -1, 3, 4, 5, 6, 7, -1, -1, -1, 03508 11, 12, -1, -1, 145, 16, 147, 18, 19, 20, 03509 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03510 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03511 -1, -1, -1, -1, 45, 46, 47, 48, 49, 50, 03512 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03513 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03514 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03515 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03516 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03517 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03518 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03519 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1, 03520 -1, -1, -1, -1, -1, -1, 137, -1, -1, -1, 03521 -1, -1, -1, -1, 145, 1, 147, 3, 4, 5, 03522 6, 7, -1, -1, 10, 11, 12, -1, -1, 15, 03523 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03524 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03525 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03526 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03527 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03528 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03529 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03530 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03531 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03532 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03533 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03534 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, 03535 6, 7, -1, 9, 10, 11, 12, -1, -1, 145, 03536 16, 147, 18, 19, 20, 21, 22, 23, 24, -1, 03537 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03538 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03539 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03540 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03541 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03542 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03543 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03544 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03545 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03546 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03547 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, 03548 6, 7, -1, -1, -1, 11, 12, -1, -1, 145, 03549 16, 147, 18, 19, 20, 21, 22, 23, 24, -1, 03550 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03551 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03552 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03553 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03554 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03555 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03556 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03557 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03558 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03559 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03560 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, 03561 6, 7, -1, -1, -1, 11, 12, 143, -1, 145, 03562 16, 147, 18, 19, 20, 21, 22, 23, 24, -1, 03563 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03564 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03565 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03566 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03567 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03568 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03569 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03570 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03571 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03572 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03573 -1, -1, -1, -1, -1, 1, -1, 3, 4, 5, 03574 6, 7, -1, -1, -1, 11, 12, 143, -1, 145, 03575 16, 147, 18, 19, 20, 21, 22, 23, 24, -1, 03576 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03577 36, -1, -1, 39, -1, -1, -1, -1, -1, 45, 03578 46, -1, 48, 49, 50, 51, 52, 53, 54, 55, 03579 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03580 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03581 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03582 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03583 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03584 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03585 -1, -1, -1, -1, -1, -1, 122, 123, 124, -1, 03586 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03587 -1, 137, -1, -1, -1, -1, -1, -1, -1, 145, 03588 1, 147, 3, 4, 5, 6, 7, -1, -1, 10, 03589 11, 12, -1, -1, -1, 16, -1, 18, 19, 20, 03590 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03591 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03592 -1, -1, -1, -1, 45, 46, -1, 48, 49, 50, 03593 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03594 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03595 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03596 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03597 -1, 92, 93, -1, 95, -1, 97, 98, 99, 100, 03598 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03599 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03600 -1, 122, 123, 124, -1, -1, -1, -1, -1, -1, 03601 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03602 11, 12, -1, -1, 145, 16, 147, 18, 19, 20, 03603 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03604 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03605 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03606 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 03607 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03608 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03609 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03610 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100, 03611 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03612 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03613 12, 122, 123, 124, 16, -1, 18, 19, 20, 21, 03614 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03615 32, 33, 34, 35, 36, -1, 147, 39, -1, -1, 03616 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03617 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03618 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03619 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03620 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03621 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03622 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03623 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03624 122, 123, 124, -1, -1, -1, -1, -1, -1, -1, 03625 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03626 12, -1, -1, 145, 16, 147, 18, 19, 20, 21, 03627 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03628 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03629 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03630 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03631 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03632 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03633 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03634 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03635 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03636 3, 4, 5, 6, 7, -1, -1, -1, 11, 12, 03637 122, 123, 124, 16, -1, 18, 19, 20, 21, 22, 03638 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03639 33, 34, 35, 36, -1, 147, 39, -1, -1, -1, 03640 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 03641 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03642 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03643 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03644 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03645 93, -1, 95, -1, 97, 98, 99, 100, 101, 102, 03646 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03647 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 03648 123, 124, -1, -1, -1, -1, -1, -1, 3, 4, 03649 5, 6, 7, -1, -1, -1, 11, 12, -1, -1, 03650 -1, 16, 145, 18, 19, 20, 21, 22, 23, 24, 03651 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03652 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03653 45, 46, -1, 48, 49, 50, 51, 52, 53, 54, 03654 55, 56, 57, -1, 59, 60, -1, 62, 63, 64, 03655 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03656 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03657 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03658 95, -1, 97, 98, 99, 100, 101, 102, 103, -1, 03659 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03660 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 03661 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03662 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03663 145, 3, 4, 5, 6, 7, 8, 9, 10, 11, 03664 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 03665 22, 23, 24, 25, 26, -1, -1, -1, 30, 31, 03666 32, 33, 34, 35, 36, 37, 38, 39, -1, -1, 03667 -1, -1, -1, 45, 46, 47, 48, 49, 50, 51, 03668 52, 53, 54, 55, 56, 57, -1, -1, -1, -1, 03669 -1, -1, -1, -1, 66, 67, 68, 69, 70, 71, 03670 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 03671 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 03672 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, 03673 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03674 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 03675 -1, 123, 124, -1, -1, -1, -1, -1, 3, 4, 03676 5, -1, 7, -1, -1, -1, 11, 12, -1, 141, 03677 142, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03678 -1, 26, -1, -1, -1, 30, 31, 32, 33, 34, 03679 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03680 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03681 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 03682 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03683 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03684 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03685 95, 96, 97, 98, 99, 100, 101, 102, 103, -1, 03686 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03687 -1, -1, -1, -1, -1, -1, -1, 122, 123, 124, 03688 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, 03689 -1, 136, -1, 11, 12, -1, -1, 142, 16, -1, 03690 18, 19, 20, 21, 22, 23, 24, -1, 26, -1, 03691 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03692 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, 03693 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03694 58, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03695 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03696 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03697 -1, 89, 90, -1, 92, 93, -1, 95, 96, 97, 03698 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03699 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03700 -1, -1, -1, -1, 122, 123, 124, -1, -1, -1, 03701 -1, -1, 3, 4, 5, -1, 7, -1, 136, -1, 03702 11, 12, -1, -1, 142, 16, -1, 18, 19, 20, 03703 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03704 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03705 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03706 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 03707 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03708 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03709 -1, -1, -1, -1, -1, 86, 87, -1, 89, 90, 03710 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100, 03711 101, 102, 103, -1, -1, -1, -1, -1, 109, -1, 03712 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 03713 7, 122, 123, 124, 11, 12, -1, -1, -1, 16, 03714 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03715 -1, 142, -1, 30, 31, 32, 33, 34, 35, 36, 03716 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, 03717 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 03718 57, 58, 59, 60, -1, 62, 63, 64, -1, 66, 03719 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03720 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03721 -1, -1, 89, 90, -1, 92, 93, -1, 95, 96, 03722 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, 03723 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03724 3, 4, 5, -1, 7, 122, 123, 124, 11, 12, 03725 -1, -1, -1, 16, -1, 18, 19, 20, 21, 22, 03726 23, 24, -1, -1, -1, 142, -1, 30, 31, 32, 03727 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03728 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03729 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 03730 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03731 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03732 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03733 93, -1, 95, 96, 97, 98, 99, 100, 101, 102, 03734 103, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03735 -1, -1, -1, -1, -1, -1, -1, -1, -1, 122, 03736 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, 03737 -1, -1, -1, -1, -1, -1, -1, -1, -1, 142, 03738 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 03739 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 03740 23, 24, 25, 26, -1, -1, -1, 30, 31, 32, 03741 33, 34, 35, 36, 37, 38, 39, -1, -1, -1, 03742 -1, -1, 45, 46, 47, 48, 49, 50, 51, 52, 03743 53, 54, 55, 56, 57, -1, -1, -1, -1, -1, 03744 -1, -1, -1, 66, 67, 68, 69, 70, 71, 72, 03745 73, 74, -1, -1, 77, 78, -1, -1, 81, 82, 03746 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, 03747 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, 03748 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, 03749 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 03750 123, 124, -1, -1, -1, -1, -1, -1, -1, -1, 03751 -1, -1, -1, -1, -1, -1, -1, -1, 141, 3, 03752 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 03753 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 03754 24, 25, 26, -1, -1, -1, 30, 31, 32, 33, 03755 34, 35, 36, 37, 38, 39, -1, -1, -1, -1, 03756 -1, 45, 46, 47, 48, 49, 50, 51, 52, 53, 03757 54, -1, 56, -1, -1, -1, -1, -1, -1, -1, 03758 -1, -1, 66, 67, 68, 69, 70, 71, 72, 73, 03759 74, -1, -1, 77, 78, -1, -1, 81, 82, 83, 03760 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03761 -1, 95, -1, -1, 98, -1, -1, -1, -1, -1, 03762 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113, 03763 114, 115, 116, 117, 118, 119, 120, 121, -1, 123, 03764 124, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03765 -1, -1, -1, -1, -1, -1, -1, 141, 3, 4, 03766 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 03767 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 03768 25, 26, -1, -1, -1, 30, 31, 32, 33, 34, 03769 35, 36, 37, 38, 39, -1, -1, -1, -1, -1, 03770 45, 46, 47, 48, 49, 50, 51, 52, 53, -1, 03771 -1, 56, -1, -1, -1, -1, -1, -1, -1, -1, 03772 -1, 66, 67, 68, 69, 70, 71, 72, 73, 74, 03773 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 03774 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03775 95, -1, -1, 98, -1, -1, -1, -1, -1, -1, 03776 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, 03777 115, 116, 117, 118, 119, 120, 121, -1, 123, 124, 03778 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03779 -1, -1, -1, -1, -1, -1, 141, 3, 4, 5, 03780 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 03781 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 03782 26, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03783 36, 37, 38, 39, -1, -1, -1, -1, -1, 45, 03784 46, 47, 48, 49, 50, 51, 52, 53, -1, -1, 03785 56, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03786 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 03787 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1, 03788 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, 03789 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03790 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, 03791 116, 117, 118, 119, 120, 121, -1, 123, 124, -1, 03792 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03793 12, -1, -1, -1, 16, 141, 18, 19, 20, 21, 03794 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03795 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03796 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03797 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03798 62, 63, 64, -1, -1, -1, -1, -1, -1, -1, 03799 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03800 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03801 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03802 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03803 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 03804 122, 11, 12, -1, -1, -1, 16, -1, 18, 19, 03805 20, 21, 22, 23, 24, -1, -1, -1, 140, -1, 03806 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03807 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03808 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 03809 60, -1, 62, 63, 64, -1, -1, -1, -1, -1, 03810 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03811 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03812 90, -1, 92, 93, -1, -1, -1, 97, 98, 99, 03813 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03814 -1, -1, -1, -1, -1, 3, 4, 5, 6, 7, 03815 -1, -1, 122, 11, 12, -1, -1, -1, 16, -1, 03816 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03817 140, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03818 -1, 39, -1, -1, -1, -1, -1, 45, 46, 47, 03819 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03820 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03821 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03822 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03823 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03824 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03825 -1, -1, -1, -1, 3, 4, 5, 6, 7, -1, 03826 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18, 03827 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03828 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03829 39, -1, -1, -1, -1, -1, 45, 46, -1, 48, 03830 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03831 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03832 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03833 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03834 89, 90, -1, 92, 93, -1, 95, -1, 97, 98, 03835 99, 100, 101, 102, 103, -1, -1, -1, -1, -1, 03836 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 03837 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19, 03838 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 03839 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03840 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03841 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 03842 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03843 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03844 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03845 90, -1, 92, 93, -1, 95, 96, 97, 98, 99, 03846 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03847 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03848 11, 12, 122, 123, 124, 16, -1, 18, 19, 20, 03849 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03850 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03851 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03852 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 03853 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03854 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03855 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03856 -1, 92, 93, -1, 95, 96, 97, 98, 99, 100, 03857 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03858 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03859 12, 122, 123, 124, 16, -1, 18, 19, 20, 21, 03860 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03861 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03862 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03863 52, 53, 54, 55, 56, 57, 58, 59, 60, -1, 03864 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03865 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03866 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03867 92, 93, -1, 95, -1, 97, 98, 99, 100, 101, 03868 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03869 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 03870 122, 123, 124, 16, -1, 18, 19, 20, 21, 22, 03871 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03872 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03873 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03874 53, 54, 55, 56, 57, 58, 59, 60, -1, 62, 03875 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03876 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03877 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03878 93, -1, -1, 96, 97, 98, 99, 100, 101, 102, 03879 103, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03880 4, 5, -1, 7, -1, -1, -1, 11, 12, 122, 03881 123, 124, 16, -1, 18, 19, 20, 21, 22, 23, 03882 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03883 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03884 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03885 54, 55, 56, 57, 58, 59, 60, -1, 62, 63, 03886 64, -1, 66, 67, -1, -1, -1, -1, -1, -1, 03887 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03888 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03889 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103, 03890 -1, -1, -1, -1, -1, -1, -1, -1, 3, 4, 03891 5, -1, 7, -1, -1, -1, 11, 12, 122, 123, 03892 124, 16, -1, 18, 19, 20, 21, 22, 23, 24, 03893 -1, -1, -1, -1, -1, 30, 31, 32, 33, 34, 03894 35, 36, -1, -1, 39, -1, -1, -1, -1, -1, 03895 -1, 46, -1, -1, 49, 50, 51, 52, 53, 54, 03896 55, 56, 57, 58, 59, 60, -1, 62, 63, 64, 03897 -1, 66, 67, -1, -1, -1, -1, -1, -1, -1, 03898 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03899 -1, 86, -1, -1, 89, 90, -1, 92, 93, -1, 03900 -1, -1, 97, 98, 99, 100, 101, 102, 103, -1, 03901 -1, -1, -1, -1, -1, -1, -1, 3, 4, 5, 03902 -1, 7, -1, -1, -1, 11, 12, 122, 123, 124, 03903 16, -1, 18, 19, 20, 21, 22, 23, 24, -1, 03904 -1, -1, -1, -1, 30, 31, 32, 33, 34, 35, 03905 36, -1, -1, 39, -1, -1, -1, -1, -1, -1, 03906 46, -1, -1, 49, 50, 51, 52, 53, 54, 55, 03907 56, 57, -1, 59, 60, -1, 62, 63, 64, -1, 03908 66, 67, -1, -1, -1, -1, -1, -1, -1, -1, 03909 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03910 86, -1, -1, 89, 90, -1, 92, 93, -1, 95, 03911 -1, 97, 98, 99, 100, 101, 102, 103, -1, -1, 03912 -1, -1, -1, -1, -1, -1, 3, 4, 5, -1, 03913 7, -1, -1, -1, 11, 12, 122, 123, 124, 16, 03914 -1, 18, 19, 20, 21, 22, 23, 24, -1, -1, 03915 -1, -1, -1, 30, 31, 32, 33, 34, 35, 36, 03916 -1, -1, 39, -1, -1, -1, -1, -1, -1, 46, 03917 -1, -1, 49, 50, 51, 52, 53, 54, 55, 56, 03918 57, -1, 59, 60, -1, 62, 63, 64, -1, 66, 03919 67, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03920 -1, -1, -1, -1, -1, -1, -1, -1, -1, 86, 03921 -1, -1, 89, 90, -1, 92, 93, -1, 95, -1, 03922 97, 98, 99, 100, 101, 102, 103, -1, -1, -1, 03923 -1, -1, -1, -1, -1, 3, 4, 5, -1, 7, 03924 -1, -1, -1, 11, 12, 122, 123, 124, 16, -1, 03925 18, 19, 20, 21, 22, 23, 24, -1, -1, -1, 03926 -1, -1, 30, 31, 32, 33, 34, 35, 36, -1, 03927 -1, 39, -1, -1, -1, -1, -1, -1, 46, -1, 03928 -1, 49, 50, 51, 52, 53, 54, 55, 56, 57, 03929 -1, 59, 60, -1, 62, 63, 64, -1, 66, 67, 03930 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03931 -1, -1, -1, -1, -1, -1, -1, -1, 86, -1, 03932 -1, 89, 90, -1, 92, 93, -1, 95, -1, 97, 03933 98, 99, 100, 101, 102, 103, -1, -1, -1, -1, 03934 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 03935 -1, -1, 11, 12, 122, 123, 124, 16, -1, 18, 03936 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 03937 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 03938 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 03939 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 03940 59, 60, -1, 62, 63, 64, -1, 66, 67, -1, 03941 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03942 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 03943 89, 90, -1, 92, 93, -1, 95, -1, 97, 98, 03944 99, 100, 101, 102, 103, -1, -1, -1, -1, -1, 03945 -1, -1, -1, 3, 4, 5, -1, 7, -1, -1, 03946 -1, 11, 12, 122, 123, 124, 16, -1, 18, 19, 03947 20, 21, 22, 23, 24, -1, -1, -1, -1, -1, 03948 30, 31, 32, 33, 34, 35, 36, -1, -1, 39, 03949 -1, -1, -1, -1, -1, -1, 46, -1, -1, 49, 03950 50, 51, 52, 53, 54, 55, 56, 57, -1, 59, 03951 60, -1, 62, 63, 64, -1, 66, 67, -1, -1, 03952 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03953 -1, -1, -1, -1, -1, -1, 86, -1, -1, 89, 03954 90, -1, 92, 93, -1, 95, -1, 97, 98, 99, 03955 100, 101, 102, 103, -1, -1, -1, -1, -1, -1, 03956 -1, -1, 3, 4, 5, -1, 7, -1, -1, -1, 03957 11, 12, 122, 123, 124, 16, -1, 18, 19, 20, 03958 21, 22, 23, 24, -1, -1, -1, -1, -1, 30, 03959 31, 32, 33, 34, 35, 36, -1, -1, 39, -1, 03960 -1, -1, -1, -1, -1, 46, -1, -1, 49, 50, 03961 51, 52, 53, 54, 55, 56, 57, -1, 59, 60, 03962 -1, 62, 63, 64, -1, 66, 67, -1, -1, -1, 03963 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03964 -1, -1, -1, -1, -1, 86, -1, -1, 89, 90, 03965 -1, 92, 93, -1, -1, -1, 97, 98, 99, 100, 03966 101, 102, 103, -1, -1, -1, -1, -1, -1, -1, 03967 -1, 3, 4, 5, -1, 7, -1, -1, -1, 11, 03968 12, 122, 123, 124, 16, -1, 18, 19, 20, 21, 03969 22, 23, 24, -1, -1, -1, -1, -1, 30, 31, 03970 32, 33, 34, 35, 36, -1, -1, 39, -1, -1, 03971 -1, -1, -1, -1, 46, -1, -1, 49, 50, 51, 03972 52, 53, 54, 55, 56, 57, -1, 59, 60, -1, 03973 62, 63, 64, -1, 66, 67, -1, -1, -1, -1, 03974 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03975 -1, -1, -1, -1, 86, -1, -1, 89, 90, -1, 03976 92, 93, -1, -1, -1, 97, 98, 99, 100, 101, 03977 102, 103, -1, -1, -1, -1, -1, -1, -1, -1, 03978 3, 4, 5, -1, 7, -1, -1, -1, 11, 12, 03979 122, 123, 124, 16, -1, 18, 19, 20, 21, 22, 03980 23, 24, -1, -1, -1, -1, -1, 30, 31, 32, 03981 33, 34, 35, 36, -1, -1, 39, -1, -1, -1, 03982 -1, -1, -1, 46, -1, -1, 49, 50, 51, 52, 03983 53, 54, 55, 56, 57, -1, 59, 60, -1, 62, 03984 63, 64, -1, 66, 67, -1, -1, -1, -1, -1, 03985 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03986 -1, -1, -1, 86, -1, -1, 89, 90, -1, 92, 03987 93, -1, -1, -1, 97, 98, 99, 100, 101, 102, 03988 103, -1, -1, -1, -1, -1, -1, -1, -1, 3, 03989 4, 5, -1, 7, -1, -1, -1, 11, 12, 122, 03990 123, 124, 16, -1, 18, 19, 20, 21, 22, 23, 03991 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 03992 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 03993 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 03994 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 03995 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03996 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 03997 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 03998 -1, 95, -1, 97, 98, 99, 100, 101, 102, 103, 03999 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 04000 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18, 04001 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 04002 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 04003 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 04004 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 04005 59, 60, -1, 62, 63, 64, -1, -1, -1, -1, 04006 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04007 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 04008 89, 90, -1, 92, 93, -1, 95, -1, 97, 98, 04009 99, 100, 101, 102, 103, -1, -1, -1, -1, 3, 04010 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 04011 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23, 04012 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 04013 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 04014 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 04015 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 04016 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04017 -1, -1, -1, -1, -1, -1, -1, -1, -1, 83, 04018 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 04019 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 04020 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 04021 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18, 04022 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 04023 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 04024 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 04025 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 04026 59, 60, -1, 62, 63, 64, -1, -1, -1, -1, 04027 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04028 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 04029 89, 90, -1, 92, 93, -1, -1, -1, 97, 98, 04030 99, 100, 101, 102, 103, -1, -1, -1, -1, 3, 04031 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 04032 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23, 04033 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 04034 34, 35, 36, -1, -1, 39, -1, -1, -1, -1, 04035 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 04036 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 04037 64, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04038 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04039 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 04040 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 04041 -1, -1, -1, -1, 3, 4, 5, -1, 7, -1, 04042 -1, -1, 11, 12, -1, -1, -1, 16, 122, 18, 04043 19, 20, 21, 22, 23, 24, -1, -1, -1, -1, 04044 -1, 30, 31, 32, 33, 34, 35, 36, -1, -1, 04045 39, -1, -1, -1, -1, -1, -1, 46, -1, -1, 04046 49, 50, 51, 52, 53, 54, 55, 56, 57, -1, 04047 59, 60, -1, 62, 63, 64, -1, -1, -1, -1, 04048 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04049 -1, -1, -1, -1, -1, -1, -1, 86, -1, -1, 04050 89, 90, -1, 92, 93, -1, -1, -1, 97, 98, 04051 99, 100, 101, 102, 103, -1, -1, -1, -1, 3, 04052 4, 5, -1, 7, -1, -1, -1, 11, 12, -1, 04053 -1, -1, 16, 122, 18, 19, 20, 21, 22, 23, 04054 24, -1, -1, -1, -1, -1, 30, 31, 32, 33, 04055 34, 35, 36, -1, -1, 39, -1, 44, -1, -1, 04056 -1, -1, 46, -1, -1, 49, 50, 51, 52, 53, 04057 54, 55, 56, 57, -1, 59, 60, -1, 62, 63, 04058 64, 68, 69, 70, 71, 72, 73, 74, 75, 76, 04059 77, 78, 79, 80, -1, -1, 83, 84, -1, -1, 04060 -1, -1, 86, -1, -1, 89, 90, -1, 92, 93, 04061 -1, -1, -1, 97, 98, 99, 100, 101, 102, 103, 04062 -1, -1, -1, 110, -1, 112, 113, 114, 115, 116, 04063 117, 118, 119, 120, 121, -1, -1, -1, 122, -1, 04064 52, 53, -1, -1, 56, -1, -1, -1, -1, -1, 04065 -1, -1, -1, 140, 66, 67, 68, 69, 70, 71, 04066 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 04067 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 04068 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, 04069 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04070 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 04071 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1, 04072 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141, 04073 142, 66, 67, 68, 69, 70, 71, 72, 73, 74, 04074 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 04075 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04076 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04077 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, 04078 115, 116, 117, 118, 119, 120, 121, -1, 123, 124, 04079 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1, 04080 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67, 04081 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 04082 78, -1, -1, 81, 82, 83, 84, -1, -1, -1, 04083 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, 04084 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04085 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117, 04086 118, 119, 120, 121, -1, 123, 124, -1, -1, -1, 04087 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1, 04088 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70, 04089 71, 72, 73, 74, -1, -1, 77, 78, -1, -1, 04090 81, 82, 83, 84, -1, -1, -1, -1, -1, -1, 04091 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, 04092 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04093 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, 04094 121, -1, 123, 124, -1, -1, -1, -1, 52, 53, 04095 -1, -1, 56, -1, -1, -1, -1, -1, -1, -1, 04096 141, 142, 66, 67, 68, 69, 70, 71, 72, 73, 04097 74, -1, -1, 77, 78, -1, -1, 81, 82, 83, 04098 84, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04099 -1, 95, -1, -1, -1, -1, -1, -1, -1, -1, 04100 -1, -1, -1, -1, -1, -1, -1, -1, 112, 113, 04101 114, 115, 116, 117, 118, 119, 120, 121, -1, 123, 04102 124, -1, -1, -1, -1, 52, 53, -1, -1, 56, 04103 -1, -1, -1, -1, -1, -1, -1, 141, 142, 66, 04104 67, 68, 69, 70, 71, 72, 73, 74, -1, -1, 04105 77, 78, -1, -1, 81, 82, 83, 84, -1, -1, 04106 -1, -1, -1, -1, -1, -1, -1, -1, 95, -1, 04107 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04108 -1, -1, -1, -1, -1, 112, 113, 114, 115, 116, 04109 117, 118, 119, 120, 121, -1, 123, 124, -1, -1, 04110 -1, -1, 52, 53, -1, -1, 56, -1, -1, -1, 04111 -1, -1, -1, -1, 141, 142, 66, 67, 68, 69, 04112 70, 71, 72, 73, 74, -1, -1, 77, 78, -1, 04113 -1, 81, 82, 83, 84, -1, -1, -1, -1, -1, 04114 -1, -1, -1, -1, -1, 95, -1, -1, -1, -1, 04115 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04116 -1, -1, 112, 113, 114, 115, 116, 117, 118, 119, 04117 120, 121, -1, 123, 124, -1, -1, -1, -1, 52, 04118 53, -1, -1, 56, -1, -1, -1, -1, -1, -1, 04119 -1, 141, 142, 66, 67, 68, 69, 70, 71, 72, 04120 73, 74, -1, -1, 77, 78, -1, -1, 81, 82, 04121 83, 84, -1, -1, -1, -1, -1, -1, -1, -1, 04122 -1, -1, 95, -1, -1, -1, -1, -1, -1, -1, 04123 -1, -1, -1, -1, -1, -1, -1, -1, -1, 112, 04124 113, 114, 115, 116, 117, 118, 119, 120, 121, -1, 04125 123, 124, -1, -1, -1, -1, 52, 53, -1, -1, 04126 56, -1, -1, -1, -1, -1, -1, -1, 141, 142, 04127 66, 67, 68, 69, 70, 71, 72, 73, 74, -1, 04128 -1, 77, 78, -1, -1, 81, 82, 83, 84, -1, 04129 -1, -1, -1, -1, -1, -1, -1, -1, -1, 95, 04130 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04131 -1, -1, -1, -1, -1, -1, 112, 113, 114, 115, 04132 116, 117, 118, 119, 120, 121, -1, 123, 124, -1, 04133 -1, -1, -1, 52, 53, -1, -1, 56, -1, -1, 04134 -1, -1, -1, -1, -1, 141, 142, 66, 67, 68, 04135 69, 70, 71, 72, 73, 74, -1, -1, 77, 78, 04136 -1, -1, 81, 82, 83, 84, -1, -1, -1, -1, 04137 -1, -1, -1, -1, -1, -1, 95, -1, -1, -1, 04138 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04139 -1, -1, -1, 112, 113, 114, 115, 116, 117, 118, 04140 119, 120, 121, -1, 123, 124, -1, -1, -1, -1, 04141 52, 53, -1, -1, 56, -1, -1, -1, -1, -1, 04142 -1, -1, 141, 142, 66, 67, 68, 69, 70, 71, 04143 72, 73, 74, -1, -1, 77, 78, -1, -1, 81, 04144 82, 83, 84, -1, -1, -1, -1, -1, -1, -1, 04145 -1, -1, -1, 95, -1, -1, -1, -1, -1, -1, 04146 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04147 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 04148 -1, 123, 124, -1, -1, -1, -1, 52, 53, -1, 04149 -1, 56, -1, -1, -1, -1, -1, -1, -1, 141, 04150 142, 66, 67, 68, 69, 70, 71, 72, 73, 74, 04151 -1, -1, 77, 78, -1, -1, 81, 82, 83, 84, 04152 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04153 95, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04154 -1, -1, -1, -1, -1, -1, -1, 112, 113, 114, 04155 115, 116, 117, 118, 119, 120, 121, -1, 123, 124, 04156 -1, -1, -1, -1, 52, 53, -1, -1, 56, -1, 04157 -1, -1, -1, -1, -1, -1, 141, 142, 66, 67, 04158 68, 69, 70, 71, 72, 73, 74, -1, -1, 77, 04159 78, -1, -1, 81, 82, 83, 84, -1, -1, -1, 04160 -1, -1, -1, -1, -1, -1, -1, 95, -1, -1, 04161 -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, 04162 -1, -1, -1, -1, 112, 113, 114, 115, 116, 117, 04163 118, 119, 120, 121, -1, 123, 124, -1, -1, -1, 04164 -1, 52, 53, -1, -1, 56, -1, -1, -1, -1, 04165 -1, -1, -1, 141, 142, 66, 67, 68, 69, 70, 04166 71, 72, 73, 74, -1, -1, 77, 78, -1, -1, 04167 81, 82, 83, 84, -1, -1, -1, -1, -1, -1, 04168 -1, -1, -1, -1, 95, -1, -1, -1, -1, -1, 04169 -1, -1, 44, -1, -1, -1, -1, -1, -1, -1, 04170 -1, 112, 113, 114, 115, 116, 117, 118, 119, 120, 04171 121, 44, 123, 124, -1, -1, 68, 69, 70, 71, 04172 72, 73, 74, 75, 76, 77, 78, 79, 80, -1, 04173 141, 83, 84, -1, -1, 68, 69, 70, 71, 72, 04174 73, 74, 75, 76, 77, 78, 79, 80, -1, -1, 04175 83, 84, -1, -1, -1, -1, -1, -1, 110, -1, 04176 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 04177 -1, -1, -1, -1, -1, -1, -1, 110, -1, 112, 04178 113, 114, 115, 116, 117, 118, 119, 120, 121 04179 }; 04180 04181 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing 04182 symbol of state STATE-NUM. */ 04183 static const yytype_uint16 yystos[] = 04184 { 04185 0, 149, 150, 0, 1, 3, 4, 5, 6, 7, 04186 11, 12, 16, 18, 19, 20, 21, 22, 23, 24, 04187 30, 31, 32, 33, 34, 35, 36, 39, 45, 46, 04188 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 04189 57, 59, 60, 62, 63, 64, 66, 67, 86, 89, 04190 90, 92, 93, 95, 97, 98, 99, 100, 101, 102, 04191 103, 122, 123, 124, 151, 152, 153, 158, 160, 161, 04192 163, 164, 167, 168, 170, 171, 172, 174, 175, 185, 04193 199, 216, 217, 218, 219, 220, 221, 222, 223, 224, 04194 225, 226, 249, 250, 260, 261, 262, 263, 264, 265, 04195 266, 269, 279, 281, 282, 283, 284, 285, 286, 287, 04196 310, 321, 153, 3, 4, 5, 6, 7, 8, 9, 04197 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 04198 20, 21, 22, 23, 24, 25, 26, 30, 31, 32, 04199 33, 34, 35, 36, 37, 38, 39, 45, 46, 47, 04200 48, 49, 50, 51, 52, 53, 56, 66, 67, 68, 04201 69, 70, 71, 72, 73, 74, 77, 78, 81, 82, 04202 83, 84, 95, 112, 113, 114, 115, 116, 117, 118, 04203 119, 120, 121, 123, 124, 141, 178, 179, 180, 181, 04204 183, 184, 279, 281, 39, 58, 86, 89, 95, 96, 04205 123, 167, 175, 185, 187, 192, 195, 197, 216, 283, 04206 284, 286, 287, 308, 309, 192, 192, 142, 193, 194, 04207 142, 189, 193, 142, 147, 315, 54, 180, 315, 154, 04208 136, 21, 22, 30, 31, 32, 185, 216, 310, 185, 04209 56, 1, 89, 156, 157, 158, 169, 170, 321, 161, 04210 188, 197, 308, 321, 187, 307, 308, 321, 46, 86, 04211 122, 140, 174, 199, 216, 283, 284, 287, 242, 243, 04212 54, 55, 57, 178, 272, 280, 271, 272, 273, 146, 04213 267, 146, 270, 59, 60, 163, 185, 185, 145, 147, 04214 314, 319, 320, 40, 41, 42, 43, 44, 37, 38, 04215 28, 247, 109, 140, 89, 95, 171, 109, 68, 69, 04216 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 04217 80, 83, 84, 110, 112, 113, 114, 115, 116, 117, 04218 118, 119, 120, 121, 85, 138, 139, 200, 161, 162, 04219 162, 203, 205, 162, 314, 320, 86, 168, 175, 216, 04220 232, 283, 284, 287, 52, 56, 83, 86, 176, 177, 04221 216, 283, 284, 287, 177, 33, 34, 35, 36, 49, 04222 50, 51, 52, 56, 142, 178, 285, 305, 85, 139, 04223 26, 136, 251, 263, 87, 87, 189, 193, 251, 140, 04224 187, 56, 187, 187, 109, 88, 140, 196, 321, 85, 04225 138, 139, 87, 87, 140, 196, 192, 315, 316, 192, 04226 191, 192, 197, 308, 321, 161, 316, 161, 54, 63, 04227 64, 159, 142, 186, 136, 156, 85, 139, 87, 158, 04228 169, 143, 314, 320, 316, 201, 144, 140, 147, 318, 04229 140, 318, 137, 318, 315, 56, 59, 60, 171, 173, 04230 140, 85, 138, 139, 244, 61, 104, 105, 106, 274, 04231 106, 274, 106, 65, 274, 106, 106, 268, 274, 106, 04232 61, 106, 68, 68, 145, 153, 162, 162, 162, 162, 04233 158, 161, 161, 248, 95, 163, 187, 197, 198, 169, 04234 140, 174, 140, 160, 163, 175, 185, 187, 198, 185, 04235 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 04236 185, 185, 185, 185, 185, 185, 185, 185, 185, 185, 04237 185, 185, 185, 185, 185, 52, 53, 56, 183, 189, 04238 311, 312, 191, 52, 53, 56, 183, 189, 311, 155, 04239 156, 13, 228, 319, 228, 162, 162, 314, 17, 254, 04240 56, 85, 138, 139, 25, 161, 52, 56, 176, 1, 04241 113, 288, 319, 85, 138, 139, 212, 306, 213, 85, 04242 139, 313, 52, 56, 311, 311, 253, 252, 163, 185, 04243 163, 185, 94, 165, 182, 185, 187, 95, 187, 195, 04244 308, 52, 56, 191, 52, 56, 309, 316, 143, 316, 04245 140, 140, 316, 180, 202, 185, 151, 137, 311, 311, 04246 185, 316, 158, 316, 308, 140, 173, 52, 56, 191, 04247 52, 56, 52, 54, 55, 56, 57, 89, 95, 96, 04248 116, 119, 142, 245, 291, 292, 293, 294, 295, 296, 04249 299, 300, 301, 302, 303, 276, 275, 146, 274, 146, 04250 185, 185, 76, 114, 237, 238, 321, 187, 140, 316, 04251 173, 140, 109, 44, 315, 87, 87, 189, 193, 315, 04252 317, 87, 87, 189, 190, 193, 321, 10, 227, 8, 04253 256, 321, 156, 13, 156, 27, 229, 319, 229, 254, 04254 197, 227, 52, 56, 191, 52, 56, 207, 210, 319, 04255 289, 209, 52, 56, 176, 191, 155, 161, 142, 290, 04256 291, 214, 190, 193, 190, 193, 237, 237, 44, 166, 04257 180, 187, 196, 87, 87, 317, 87, 87, 308, 161, 04258 137, 318, 171, 317, 109, 52, 89, 95, 233, 234, 04259 235, 293, 291, 29, 107, 246, 140, 304, 321, 140, 04260 304, 52, 140, 304, 52, 277, 54, 55, 57, 278, 04261 287, 52, 145, 236, 239, 295, 297, 298, 301, 303, 04262 321, 156, 95, 187, 173, 185, 111, 163, 185, 163, 04263 185, 165, 144, 87, 163, 185, 163, 185, 165, 187, 04264 198, 257, 321, 15, 231, 321, 14, 230, 231, 231, 04265 204, 206, 227, 140, 228, 317, 162, 319, 162, 155, 04266 317, 227, 316, 291, 155, 319, 178, 156, 156, 185, 04267 237, 87, 140, 316, 187, 235, 140, 293, 140, 316, 04268 239, 156, 156, 294, 299, 301, 303, 295, 296, 301, 04269 295, 156, 109, 52, 240, 241, 292, 239, 114, 140, 04270 304, 140, 304, 140, 304, 10, 187, 185, 163, 185, 04271 88, 258, 321, 156, 9, 259, 321, 162, 227, 227, 04272 156, 156, 187, 156, 229, 211, 319, 227, 316, 227, 04273 215, 10, 137, 156, 316, 234, 140, 95, 233, 316, 04274 10, 137, 140, 304, 140, 304, 140, 304, 140, 304, 04275 304, 137, 86, 216, 140, 114, 298, 301, 295, 297, 04276 301, 295, 86, 175, 216, 283, 284, 287, 228, 156, 04277 228, 227, 227, 231, 254, 255, 208, 155, 290, 137, 04278 140, 234, 140, 293, 295, 301, 295, 295, 56, 85, 04279 241, 140, 304, 140, 304, 304, 140, 304, 304, 56, 04280 85, 138, 139, 156, 156, 156, 227, 155, 234, 140, 04281 304, 140, 304, 304, 304, 52, 56, 295, 301, 295, 04282 295, 52, 56, 191, 52, 56, 256, 230, 227, 227, 04283 234, 295, 304, 140, 304, 304, 304, 317, 304, 295, 04284 304 04285 }; 04286 04287 #define yyerrok (yyerrstatus = 0) 04288 #define yyclearin (yychar = YYEMPTY) 04289 #define YYEMPTY (-2) 04290 #define YYEOF 0 04291 04292 #define YYACCEPT goto yyacceptlab 04293 #define YYABORT goto yyabortlab 04294 #define YYERROR goto yyerrorlab 04295 04296 04297 /* Like YYERROR except do call yyerror. This remains here temporarily 04298 to ease the transition to the new meaning of YYERROR, for GCC. 04299 Once GCC version 2 has supplanted version 1, this can go. */ 04300 04301 #define YYFAIL goto yyerrlab 04302 04303 #define YYRECOVERING() (!!yyerrstatus) 04304 04305 #define YYBACKUP(Token, Value) \ 04306 do \ 04307 if (yychar == YYEMPTY && yylen == 1) \ 04308 { \ 04309 yychar = (Token); \ 04310 yylval = (Value); \ 04311 yytoken = YYTRANSLATE (yychar); \ 04312 YYPOPSTACK (1); \ 04313 goto yybackup; \ 04314 } \ 04315 else \ 04316 { \ 04317 parser_yyerror (parser, YY_("syntax error: cannot back up")); \ 04318 YYERROR; \ 04319 } \ 04320 while (YYID (0)) 04321 04322 04323 #define YYTERROR 1 04324 #define YYERRCODE 256 04325 04326 04327 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N]. 04328 If N is 0, then set CURRENT to the empty location which ends 04329 the previous symbol: RHS[0] (always defined). */ 04330 04331 #define YYRHSLOC(Rhs, K) ((Rhs)[K]) 04332 #ifndef YYLLOC_DEFAULT 04333 # define YYLLOC_DEFAULT(Current, Rhs, N) \ 04334 do \ 04335 if (YYID (N)) \ 04336 { \ 04337 (Current).first_line = YYRHSLOC (Rhs, 1).first_line; \ 04338 (Current).first_column = YYRHSLOC (Rhs, 1).first_column; \ 04339 (Current).last_line = YYRHSLOC (Rhs, N).last_line; \ 04340 (Current).last_column = YYRHSLOC (Rhs, N).last_column; \ 04341 } \ 04342 else \ 04343 { \ 04344 (Current).first_line = (Current).last_line = \ 04345 YYRHSLOC (Rhs, 0).last_line; \ 04346 (Current).first_column = (Current).last_column = \ 04347 YYRHSLOC (Rhs, 0).last_column; \ 04348 } \ 04349 while (YYID (0)) 04350 #endif 04351 04352 04353 /* YY_LOCATION_PRINT -- Print the location on the stream. 04354 This macro was not mandated originally: define only if we know 04355 we won't break user code: when these are the locations we know. */ 04356 04357 #ifndef YY_LOCATION_PRINT 04358 # if YYLTYPE_IS_TRIVIAL 04359 # define YY_LOCATION_PRINT(File, Loc) \ 04360 fprintf (File, "%d.%d-%d.%d", \ 04361 (Loc).first_line, (Loc).first_column, \ 04362 (Loc).last_line, (Loc).last_column) 04363 # else 04364 # define YY_LOCATION_PRINT(File, Loc) ((void) 0) 04365 # endif 04366 #endif 04367 04368 04369 /* YYLEX -- calling `yylex' with the right arguments. */ 04370 04371 #ifdef YYLEX_PARAM 04372 # define YYLEX yylex (&yylval, YYLEX_PARAM) 04373 #else 04374 # define YYLEX yylex (&yylval) 04375 #endif 04376 04377 /* Enable debugging if requested. */ 04378 #if YYDEBUG 04379 04380 # ifndef YYFPRINTF 04381 # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ 04382 # define YYFPRINTF fprintf 04383 # endif 04384 04385 # define YYDPRINTF(Args) \ 04386 do { \ 04387 if (yydebug) \ 04388 YYFPRINTF Args; \ 04389 } while (YYID (0)) 04390 04391 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) \ 04392 do { \ 04393 if (yydebug) \ 04394 { \ 04395 YYFPRINTF (stderr, "%s ", Title); \ 04396 yy_symbol_print (stderr, \ 04397 Type, Value, parser); \ 04398 YYFPRINTF (stderr, "\n"); \ 04399 } \ 04400 } while (YYID (0)) 04401 04402 04403 /*--------------------------------. 04404 | Print this symbol on YYOUTPUT. | 04405 `--------------------------------*/ 04406 04407 /*ARGSUSED*/ 04408 #if (defined __STDC__ || defined __C99__FUNC__ \ 04409 || defined __cplusplus || defined _MSC_VER) 04410 static void 04411 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser) 04412 #else 04413 static void 04414 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser) 04415 FILE *yyoutput; 04416 int yytype; 04417 YYSTYPE const * const yyvaluep; 04418 struct parser_params *parser; 04419 #endif 04420 { 04421 if (!yyvaluep) 04422 return; 04423 YYUSE (parser); 04424 # ifdef YYPRINT 04425 if (yytype < YYNTOKENS) 04426 YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep); 04427 # else 04428 YYUSE (yyoutput); 04429 # endif 04430 switch (yytype) 04431 { 04432 default: 04433 break; 04434 } 04435 } 04436 04437 04438 /*--------------------------------. 04439 | Print this symbol on YYOUTPUT. | 04440 `--------------------------------*/ 04441 04442 #if (defined __STDC__ || defined __C99__FUNC__ \ 04443 || defined __cplusplus || defined _MSC_VER) 04444 static void 04445 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser) 04446 #else 04447 static void 04448 yy_symbol_print (yyoutput, yytype, yyvaluep, parser) 04449 FILE *yyoutput; 04450 int yytype; 04451 YYSTYPE const * const yyvaluep; 04452 struct parser_params *parser; 04453 #endif 04454 { 04455 if (yytype < YYNTOKENS) 04456 YYFPRINTF (yyoutput, "token %s (", yytname[yytype]); 04457 else 04458 YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]); 04459 04460 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser); 04461 YYFPRINTF (yyoutput, ")"); 04462 } 04463 04464 /*------------------------------------------------------------------. 04465 | yy_stack_print -- Print the state stack from its BOTTOM up to its | 04466 | TOP (included). | 04467 `------------------------------------------------------------------*/ 04468 04469 #if (defined __STDC__ || defined __C99__FUNC__ \ 04470 || defined __cplusplus || defined _MSC_VER) 04471 static void 04472 yy_stack_print (yytype_int16 *bottom, yytype_int16 *top) 04473 #else 04474 static void 04475 yy_stack_print (bottom, top) 04476 yytype_int16 *bottom; 04477 yytype_int16 *top; 04478 #endif 04479 { 04480 YYFPRINTF (stderr, "Stack now"); 04481 for (; bottom <= top; ++bottom) 04482 YYFPRINTF (stderr, " %d", *bottom); 04483 YYFPRINTF (stderr, "\n"); 04484 } 04485 04486 # define YY_STACK_PRINT(Bottom, Top) \ 04487 do { \ 04488 if (yydebug) \ 04489 yy_stack_print ((Bottom), (Top)); \ 04490 } while (YYID (0)) 04491 04492 04493 /*------------------------------------------------. 04494 | Report that the YYRULE is going to be reduced. | 04495 `------------------------------------------------*/ 04496 04497 #if (defined __STDC__ || defined __C99__FUNC__ \ 04498 || defined __cplusplus || defined _MSC_VER) 04499 static void 04500 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser) 04501 #else 04502 static void 04503 yy_reduce_print (yyvsp, yyrule, parser) 04504 YYSTYPE *yyvsp; 04505 int yyrule; 04506 struct parser_params *parser; 04507 #endif 04508 { 04509 int yynrhs = yyr2[yyrule]; 04510 int yyi; 04511 unsigned long int yylno = yyrline[yyrule]; 04512 YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n", 04513 yyrule - 1, yylno); 04514 /* The symbols being reduced. */ 04515 for (yyi = 0; yyi < yynrhs; yyi++) 04516 { 04517 fprintf (stderr, " $%d = ", yyi + 1); 04518 yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi], 04519 &(yyvsp[(yyi + 1) - (yynrhs)]) 04520 , parser); 04521 fprintf (stderr, "\n"); 04522 } 04523 } 04524 04525 # define YY_REDUCE_PRINT(Rule) \ 04526 do { \ 04527 if (yydebug) \ 04528 yy_reduce_print (yyvsp, Rule, parser); \ 04529 } while (YYID (0)) 04530 04531 /* Nonzero means print parse trace. It is left uninitialized so that 04532 multiple parsers can coexist. */ 04533 #ifndef yydebug 04534 int yydebug; 04535 #endif 04536 #else /* !YYDEBUG */ 04537 # define YYDPRINTF(Args) 04538 # define YY_SYMBOL_PRINT(Title, Type, Value, Location) 04539 # define YY_STACK_PRINT(Bottom, Top) 04540 # define YY_REDUCE_PRINT(Rule) 04541 #endif /* !YYDEBUG */ 04542 04543 04544 /* YYINITDEPTH -- initial size of the parser's stacks. */ 04545 #ifndef YYINITDEPTH 04546 # define YYINITDEPTH 200 04547 #endif 04548 04549 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only 04550 if the built-in stack extension method is used). 04551 04552 Do not make this value too large; the results are undefined if 04553 YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) 04554 evaluated with infinite-precision integer arithmetic. */ 04555 04556 #ifndef YYMAXDEPTH 04557 # define YYMAXDEPTH 10000 04558 #endif 04559 04560 04561 04562 #if YYERROR_VERBOSE 04563 04564 # ifndef yystrlen 04565 # if defined __GLIBC__ && defined _STRING_H 04566 # define yystrlen strlen 04567 # else 04568 /* Return the length of YYSTR. */ 04569 #if (defined __STDC__ || defined __C99__FUNC__ \ 04570 || defined __cplusplus || defined _MSC_VER) 04571 static YYSIZE_T 04572 yystrlen (const char *yystr) 04573 #else 04574 static YYSIZE_T 04575 yystrlen (yystr) 04576 const char *yystr; 04577 #endif 04578 { 04579 YYSIZE_T yylen; 04580 for (yylen = 0; yystr[yylen]; yylen++) 04581 continue; 04582 return yylen; 04583 } 04584 # endif 04585 # endif 04586 04587 # ifndef yystpcpy 04588 # if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE 04589 # define yystpcpy stpcpy 04590 # else 04591 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in 04592 YYDEST. */ 04593 #if (defined __STDC__ || defined __C99__FUNC__ \ 04594 || defined __cplusplus || defined _MSC_VER) 04595 static char * 04596 yystpcpy (char *yydest, const char *yysrc) 04597 #else 04598 static char * 04599 yystpcpy (yydest, yysrc) 04600 char *yydest; 04601 const char *yysrc; 04602 #endif 04603 { 04604 char *yyd = yydest; 04605 const char *yys = yysrc; 04606 04607 while ((*yyd++ = *yys++) != '\0') 04608 continue; 04609 04610 return yyd - 1; 04611 } 04612 # endif 04613 # endif 04614 04615 # ifndef yytnamerr 04616 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary 04617 quotes and backslashes, so that it's suitable for yyerror. The 04618 heuristic is that double-quoting is unnecessary unless the string 04619 contains an apostrophe, a comma, or backslash (other than 04620 backslash-backslash). YYSTR is taken from yytname. If YYRES is 04621 null, do not copy; instead, return the length of what the result 04622 would have been. */ 04623 static YYSIZE_T 04624 yytnamerr (char *yyres, const char *yystr) 04625 { 04626 if (*yystr == '"') 04627 { 04628 YYSIZE_T yyn = 0; 04629 char const *yyp = yystr; 04630 04631 for (;;) 04632 switch (*++yyp) 04633 { 04634 case '\'': 04635 case ',': 04636 goto do_not_strip_quotes; 04637 04638 case '\\': 04639 if (*++yyp != '\\') 04640 goto do_not_strip_quotes; 04641 /* Fall through. */ 04642 default: 04643 if (yyres) 04644 yyres[yyn] = *yyp; 04645 yyn++; 04646 break; 04647 04648 case '"': 04649 if (yyres) 04650 yyres[yyn] = '\0'; 04651 return yyn; 04652 } 04653 do_not_strip_quotes: ; 04654 } 04655 04656 if (! yyres) 04657 return yystrlen (yystr); 04658 04659 return yystpcpy (yyres, yystr) - yyres; 04660 } 04661 # endif 04662 04663 /* Copy into YYRESULT an error message about the unexpected token 04664 YYCHAR while in state YYSTATE. Return the number of bytes copied, 04665 including the terminating null byte. If YYRESULT is null, do not 04666 copy anything; just return the number of bytes that would be 04667 copied. As a special case, return 0 if an ordinary "syntax error" 04668 message will do. Return YYSIZE_MAXIMUM if overflow occurs during 04669 size calculation. */ 04670 static YYSIZE_T 04671 yysyntax_error (char *yyresult, int yystate, int yychar) 04672 { 04673 int yyn = yypact[yystate]; 04674 04675 if (! (YYPACT_NINF < yyn && yyn <= YYLAST)) 04676 return 0; 04677 else 04678 { 04679 int yytype = YYTRANSLATE (yychar); 04680 YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]); 04681 YYSIZE_T yysize = yysize0; 04682 YYSIZE_T yysize1; 04683 int yysize_overflow = 0; 04684 enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 }; 04685 char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM]; 04686 int yyx; 04687 04688 # if 0 04689 /* This is so xgettext sees the translatable formats that are 04690 constructed on the fly. */ 04691 YY_("syntax error, unexpected %s"); 04692 YY_("syntax error, unexpected %s, expecting %s"); 04693 YY_("syntax error, unexpected %s, expecting %s or %s"); 04694 YY_("syntax error, unexpected %s, expecting %s or %s or %s"); 04695 YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"); 04696 # endif 04697 char *yyfmt; 04698 char const *yyf; 04699 static char const yyunexpected[] = "syntax error, unexpected %s"; 04700 static char const yyexpecting[] = ", expecting %s"; 04701 static char const yyor[] = " or %s"; 04702 char yyformat[sizeof yyunexpected 04703 + sizeof yyexpecting - 1 04704 + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2) 04705 * (sizeof yyor - 1))]; 04706 char const *yyprefix = yyexpecting; 04707 04708 /* Start YYX at -YYN if negative to avoid negative indexes in 04709 YYCHECK. */ 04710 int yyxbegin = yyn < 0 ? -yyn : 0; 04711 04712 /* Stay within bounds of both yycheck and yytname. */ 04713 int yychecklim = YYLAST - yyn + 1; 04714 int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS; 04715 int yycount = 1; 04716 04717 yyarg[0] = yytname[yytype]; 04718 yyfmt = yystpcpy (yyformat, yyunexpected); 04719 04720 for (yyx = yyxbegin; yyx < yyxend; ++yyx) 04721 if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR) 04722 { 04723 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM) 04724 { 04725 yycount = 1; 04726 yysize = yysize0; 04727 yyformat[sizeof yyunexpected - 1] = '\0'; 04728 break; 04729 } 04730 yyarg[yycount++] = yytname[yyx]; 04731 yysize1 = yysize + yytnamerr (0, yytname[yyx]); 04732 yysize_overflow |= (yysize1 < yysize); 04733 yysize = yysize1; 04734 yyfmt = yystpcpy (yyfmt, yyprefix); 04735 yyprefix = yyor; 04736 } 04737 04738 yyf = YY_(yyformat); 04739 yysize1 = yysize + yystrlen (yyf); 04740 yysize_overflow |= (yysize1 < yysize); 04741 yysize = yysize1; 04742 04743 if (yysize_overflow) 04744 return YYSIZE_MAXIMUM; 04745 04746 if (yyresult) 04747 { 04748 /* Avoid sprintf, as that infringes on the user's name space. 04749 Don't have undefined behavior even if the translation 04750 produced a string with the wrong number of "%s"s. */ 04751 char *yyp = yyresult; 04752 int yyi = 0; 04753 while ((*yyp = *yyf) != '\0') 04754 { 04755 if (*yyp == '%' && yyf[1] == 's' && yyi < yycount) 04756 { 04757 yyp += yytnamerr (yyp, yyarg[yyi++]); 04758 yyf += 2; 04759 } 04760 else 04761 { 04762 yyp++; 04763 yyf++; 04764 } 04765 } 04766 } 04767 return yysize; 04768 } 04769 } 04770 #endif /* YYERROR_VERBOSE */ 04771 04772 04773 /*-----------------------------------------------. 04774 | Release the memory associated to this symbol. | 04775 `-----------------------------------------------*/ 04776 04777 /*ARGSUSED*/ 04778 #if (defined __STDC__ || defined __C99__FUNC__ \ 04779 || defined __cplusplus || defined _MSC_VER) 04780 static void 04781 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser) 04782 #else 04783 static void 04784 yydestruct (yymsg, yytype, yyvaluep, parser) 04785 const char *yymsg; 04786 int yytype; 04787 YYSTYPE *yyvaluep; 04788 struct parser_params *parser; 04789 #endif 04790 { 04791 YYUSE (yyvaluep); 04792 YYUSE (parser); 04793 04794 if (!yymsg) 04795 yymsg = "Deleting"; 04796 YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp); 04797 04798 switch (yytype) 04799 { 04800 04801 default: 04802 break; 04803 } 04804 } 04805 04806 04807 /* Prevent warnings from -Wmissing-prototypes. */ 04808 04809 #ifdef YYPARSE_PARAM 04810 #if defined __STDC__ || defined __cplusplus 04811 int yyparse (void *YYPARSE_PARAM); 04812 #else 04813 int yyparse (); 04814 #endif 04815 #else /* ! YYPARSE_PARAM */ 04816 #if defined __STDC__ || defined __cplusplus 04817 int yyparse (struct parser_params *parser); 04818 #else 04819 int yyparse (); 04820 #endif 04821 #endif /* ! YYPARSE_PARAM */ 04822 04823 04824 04825 04826 04827 04828 /*----------. 04829 | yyparse. | 04830 `----------*/ 04831 04832 #ifdef YYPARSE_PARAM 04833 #if (defined __STDC__ || defined __C99__FUNC__ \ 04834 || defined __cplusplus || defined _MSC_VER) 04835 int 04836 yyparse (void *YYPARSE_PARAM) 04837 #else 04838 int 04839 yyparse (YYPARSE_PARAM) 04840 void *YYPARSE_PARAM; 04841 #endif 04842 #else /* ! YYPARSE_PARAM */ 04843 #if (defined __STDC__ || defined __C99__FUNC__ \ 04844 || defined __cplusplus || defined _MSC_VER) 04845 int 04846 yyparse (struct parser_params *parser) 04847 #else 04848 int 04849 yyparse (parser) 04850 struct parser_params *parser; 04851 #endif 04852 #endif 04853 { 04854 /* The look-ahead symbol. */ 04855 int yychar; 04856 04857 /* The semantic value of the look-ahead symbol. */ 04858 YYSTYPE yylval; 04859 04860 /* Number of syntax errors so far. */ 04861 int yynerrs; 04862 04863 int yystate; 04864 int yyn; 04865 int yyresult; 04866 /* Number of tokens to shift before error messages enabled. */ 04867 int yyerrstatus; 04868 /* Look-ahead token as an internal (translated) token number. */ 04869 int yytoken = 0; 04870 #if YYERROR_VERBOSE 04871 /* Buffer for error messages, and its allocated size. */ 04872 char yymsgbuf[128]; 04873 char *yymsg = yymsgbuf; 04874 YYSIZE_T yymsg_alloc = sizeof yymsgbuf; 04875 #endif 04876 04877 /* Three stacks and their tools: 04878 `yyss': related to states, 04879 `yyvs': related to semantic values, 04880 `yyls': related to locations. 04881 04882 Refer to the stacks thru separate pointers, to allow yyoverflow 04883 to reallocate them elsewhere. */ 04884 04885 /* The state stack. */ 04886 yytype_int16 yyssa[YYINITDEPTH]; 04887 yytype_int16 *yyss = yyssa; 04888 yytype_int16 *yyssp; 04889 04890 /* The semantic value stack. */ 04891 YYSTYPE yyvsa[YYINITDEPTH]; 04892 YYSTYPE *yyvs = yyvsa; 04893 YYSTYPE *yyvsp; 04894 04895 04896 04897 #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) 04898 04899 YYSIZE_T yystacksize = YYINITDEPTH; 04900 04901 /* The variables used to return semantic value and location from the 04902 action routines. */ 04903 YYSTYPE yyval; 04904 04905 04906 /* The number of symbols on the RHS of the reduced rule. 04907 Keep to zero when no symbol should be popped. */ 04908 int yylen = 0; 04909 04910 YYDPRINTF ((stderr, "Starting parse\n")); 04911 04912 yystate = 0; 04913 yyerrstatus = 0; 04914 yynerrs = 0; 04915 yychar = YYEMPTY; /* Cause a token to be read. */ 04916 04917 /* Initialize stack pointers. 04918 Waste one element of value and location stack 04919 so that they stay on the same level as the state stack. 04920 The wasted elements are never initialized. */ 04921 04922 yyssp = yyss; 04923 yyvsp = yyvs; 04924 04925 goto yysetstate; 04926 04927 /*------------------------------------------------------------. 04928 | yynewstate -- Push a new state, which is found in yystate. | 04929 `------------------------------------------------------------*/ 04930 yynewstate: 04931 /* In all cases, when you get here, the value and location stacks 04932 have just been pushed. So pushing a state here evens the stacks. */ 04933 yyssp++; 04934 04935 yysetstate: 04936 *yyssp = yystate; 04937 04938 if (yyss + yystacksize - 1 <= yyssp) 04939 { 04940 /* Get the current used size of the three stacks, in elements. */ 04941 YYSIZE_T yysize = yyssp - yyss + 1; 04942 04943 #ifdef yyoverflow 04944 { 04945 /* Give user a chance to reallocate the stack. Use copies of 04946 these so that the &'s don't force the real ones into 04947 memory. */ 04948 YYSTYPE *yyvs1 = yyvs; 04949 yytype_int16 *yyss1 = yyss; 04950 04951 04952 /* Each stack pointer address is followed by the size of the 04953 data in use in that stack, in bytes. This used to be a 04954 conditional around just the two extra args, but that might 04955 be undefined if yyoverflow is a macro. */ 04956 yyoverflow (YY_("memory exhausted"), 04957 &yyss1, yysize * sizeof (*yyssp), 04958 &yyvs1, yysize * sizeof (*yyvsp), 04959 04960 &yystacksize); 04961 04962 yyss = yyss1; 04963 yyvs = yyvs1; 04964 } 04965 #else /* no yyoverflow */ 04966 # ifndef YYSTACK_RELOCATE 04967 goto yyexhaustedlab; 04968 # else 04969 /* Extend the stack our own way. */ 04970 if (YYMAXDEPTH <= yystacksize) 04971 goto yyexhaustedlab; 04972 yystacksize *= 2; 04973 if (YYMAXDEPTH < yystacksize) 04974 yystacksize = YYMAXDEPTH; 04975 04976 { 04977 yytype_int16 *yyss1 = yyss; 04978 union yyalloc *yyptr = 04979 (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize)); 04980 if (! yyptr) 04981 goto yyexhaustedlab; 04982 YYSTACK_RELOCATE (yyss); 04983 YYSTACK_RELOCATE (yyvs); 04984 04985 # undef YYSTACK_RELOCATE 04986 if (yyss1 != yyssa) 04987 YYSTACK_FREE (yyss1); 04988 } 04989 # endif 04990 #endif /* no yyoverflow */ 04991 04992 yyssp = yyss + yysize - 1; 04993 yyvsp = yyvs + yysize - 1; 04994 04995 04996 YYDPRINTF ((stderr, "Stack size increased to %lu\n", 04997 (unsigned long int) yystacksize)); 04998 04999 if (yyss + yystacksize - 1 <= yyssp) 05000 YYABORT; 05001 } 05002 05003 YYDPRINTF ((stderr, "Entering state %d\n", yystate)); 05004 05005 goto yybackup; 05006 05007 /*-----------. 05008 | yybackup. | 05009 `-----------*/ 05010 yybackup: 05011 05012 /* Do appropriate processing given the current state. Read a 05013 look-ahead token if we need one and don't already have one. */ 05014 05015 /* First try to decide what to do without reference to look-ahead token. */ 05016 yyn = yypact[yystate]; 05017 if (yyn == YYPACT_NINF) 05018 goto yydefault; 05019 05020 /* Not known => get a look-ahead token if don't already have one. */ 05021 05022 /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol. */ 05023 if (yychar == YYEMPTY) 05024 { 05025 YYDPRINTF ((stderr, "Reading a token: ")); 05026 yychar = YYLEX; 05027 } 05028 05029 if (yychar <= YYEOF) 05030 { 05031 yychar = yytoken = YYEOF; 05032 YYDPRINTF ((stderr, "Now at end of input.\n")); 05033 } 05034 else 05035 { 05036 yytoken = YYTRANSLATE (yychar); 05037 YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); 05038 } 05039 05040 /* If the proper action on seeing token YYTOKEN is to reduce or to 05041 detect an error, take that action. */ 05042 yyn += yytoken; 05043 if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) 05044 goto yydefault; 05045 yyn = yytable[yyn]; 05046 if (yyn <= 0) 05047 { 05048 if (yyn == 0 || yyn == YYTABLE_NINF) 05049 goto yyerrlab; 05050 yyn = -yyn; 05051 goto yyreduce; 05052 } 05053 05054 if (yyn == YYFINAL) 05055 YYACCEPT; 05056 05057 /* Count tokens shifted since error; after three, turn off error 05058 status. */ 05059 if (yyerrstatus) 05060 yyerrstatus--; 05061 05062 /* Shift the look-ahead token. */ 05063 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); 05064 05065 /* Discard the shifted token unless it is eof. */ 05066 if (yychar != YYEOF) 05067 yychar = YYEMPTY; 05068 05069 yystate = yyn; 05070 *++yyvsp = yylval; 05071 05072 goto yynewstate; 05073 05074 05075 /*-----------------------------------------------------------. 05076 | yydefault -- do the default action for the current state. | 05077 `-----------------------------------------------------------*/ 05078 yydefault: 05079 yyn = yydefact[yystate]; 05080 if (yyn == 0) 05081 goto yyerrlab; 05082 goto yyreduce; 05083 05084 05085 /*-----------------------------. 05086 | yyreduce -- Do a reduction. | 05087 `-----------------------------*/ 05088 yyreduce: 05089 /* yyn is the number of a rule to reduce with. */ 05090 yylen = yyr2[yyn]; 05091 05092 /* If YYLEN is nonzero, implement the default value of the action: 05093 `$$ = $1'. 05094 05095 Otherwise, the following line sets YYVAL to garbage. 05096 This behavior is undocumented and Bison 05097 users should not rely upon it. Assigning to YYVAL 05098 unconditionally makes the parser a bit smaller, and it avoids a 05099 GCC warning that YYVAL may be used uninitialized. */ 05100 yyval = yyvsp[1-yylen]; 05101 05102 05103 YY_REDUCE_PRINT (yyn); 05104 switch (yyn) 05105 { 05106 case 2: 05107 #line 782 "ripper.y" 05108 { 05109 lex_state = EXPR_BEG; 05110 #if 0 05111 local_push(compile_for_eval || rb_parse_in_main()); 05112 #endif 05113 local_push(0); 05114 05115 ;} 05116 break; 05117 05118 case 3: 05119 #line 791 "ripper.y" 05120 { 05121 #if 0 05122 if ((yyvsp[(2) - (2)].val) && !compile_for_eval) { 05123 /* last expression should not be void */ 05124 if (nd_type((yyvsp[(2) - (2)].val)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].val)); 05125 else { 05126 NODE *node = (yyvsp[(2) - (2)].val); 05127 while (node->nd_next) { 05128 node = node->nd_next; 05129 } 05130 void_expr(node->nd_head); 05131 } 05132 } 05133 ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].val))); 05134 #endif 05135 (yyval.val) = (yyvsp[(2) - (2)].val); 05136 parser->result = dispatch1(program, (yyval.val)); 05137 05138 local_pop(); 05139 ;} 05140 break; 05141 05142 case 4: 05143 #line 814 "ripper.y" 05144 { 05145 #if 0 05146 void_stmts((yyvsp[(1) - (2)].val)); 05147 fixup_nodes(&deferred_nodes); 05148 #endif 05149 05150 (yyval.val) = (yyvsp[(1) - (2)].val); 05151 ;} 05152 break; 05153 05154 case 5: 05155 #line 825 "ripper.y" 05156 { 05157 #if 0 05158 (yyval.val) = NEW_BEGIN(0); 05159 #endif 05160 (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), 05161 dispatch0(void_stmt)); 05162 05163 ;} 05164 break; 05165 05166 case 6: 05167 #line 834 "ripper.y" 05168 { 05169 #if 0 05170 (yyval.val) = newline_node((yyvsp[(1) - (1)].val)); 05171 #endif 05172 (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val)); 05173 05174 ;} 05175 break; 05176 05177 case 7: 05178 #line 842 "ripper.y" 05179 { 05180 #if 0 05181 (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val))); 05182 #endif 05183 (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05184 05185 ;} 05186 break; 05187 05188 case 8: 05189 #line 850 "ripper.y" 05190 { 05191 (yyval.val) = remove_begin((yyvsp[(2) - (2)].val)); 05192 ;} 05193 break; 05194 05195 case 10: 05196 #line 857 "ripper.y" 05197 { 05198 if (in_def || in_single) { 05199 yyerror("BEGIN in method"); 05200 } 05201 #if 0 05202 /* local_push(0); */ 05203 #endif 05204 05205 ;} 05206 break; 05207 05208 case 11: 05209 #line 867 "ripper.y" 05210 { 05211 #if 0 05212 ruby_eval_tree_begin = block_append(ruby_eval_tree_begin, 05213 (yyvsp[(4) - (5)].val)); 05214 /* NEW_PREEXE($4)); */ 05215 /* local_pop(); */ 05216 (yyval.val) = NEW_BEGIN(0); 05217 #endif 05218 (yyval.val) = dispatch1(BEGIN, (yyvsp[(4) - (5)].val)); 05219 05220 ;} 05221 break; 05222 05223 case 12: 05224 #line 884 "ripper.y" 05225 { 05226 #if 0 05227 (yyval.val) = (yyvsp[(1) - (4)].val); 05228 if ((yyvsp[(2) - (4)].val)) { 05229 (yyval.val) = NEW_RESCUE((yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val)); 05230 } 05231 else if ((yyvsp[(3) - (4)].val)) { 05232 rb_warn0("else without rescue is useless"); 05233 (yyval.val) = block_append((yyval.val), (yyvsp[(3) - (4)].val)); 05234 } 05235 if ((yyvsp[(4) - (4)].val)) { 05236 if ((yyval.val)) { 05237 (yyval.val) = NEW_ENSURE((yyval.val), (yyvsp[(4) - (4)].val)); 05238 } 05239 else { 05240 (yyval.val) = block_append((yyvsp[(4) - (4)].val), NEW_NIL()); 05241 } 05242 } 05243 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 05244 #endif 05245 (yyval.val) = dispatch4(bodystmt, 05246 escape_Qundef((yyvsp[(1) - (4)].val)), 05247 escape_Qundef((yyvsp[(2) - (4)].val)), 05248 escape_Qundef((yyvsp[(3) - (4)].val)), 05249 escape_Qundef((yyvsp[(4) - (4)].val))); 05250 05251 ;} 05252 break; 05253 05254 case 13: 05255 #line 914 "ripper.y" 05256 { 05257 #if 0 05258 void_stmts((yyvsp[(1) - (2)].val)); 05259 fixup_nodes(&deferred_nodes); 05260 #endif 05261 05262 (yyval.val) = (yyvsp[(1) - (2)].val); 05263 ;} 05264 break; 05265 05266 case 14: 05267 #line 925 "ripper.y" 05268 { 05269 #if 0 05270 (yyval.val) = NEW_BEGIN(0); 05271 #endif 05272 (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), 05273 dispatch0(void_stmt)); 05274 05275 ;} 05276 break; 05277 05278 case 15: 05279 #line 934 "ripper.y" 05280 { 05281 #if 0 05282 (yyval.val) = newline_node((yyvsp[(1) - (1)].val)); 05283 #endif 05284 (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val)); 05285 05286 ;} 05287 break; 05288 05289 case 16: 05290 #line 942 "ripper.y" 05291 { 05292 #if 0 05293 (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val))); 05294 #endif 05295 (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05296 05297 ;} 05298 break; 05299 05300 case 17: 05301 #line 950 "ripper.y" 05302 { 05303 (yyval.val) = remove_begin((yyvsp[(2) - (2)].val)); 05304 ;} 05305 break; 05306 05307 case 18: 05308 #line 955 "ripper.y" 05309 {lex_state = EXPR_FNAME;;} 05310 break; 05311 05312 case 19: 05313 #line 956 "ripper.y" 05314 { 05315 #if 0 05316 (yyval.val) = NEW_ALIAS((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val)); 05317 #endif 05318 (yyval.val) = dispatch2(alias, (yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val)); 05319 05320 ;} 05321 break; 05322 05323 case 20: 05324 #line 964 "ripper.y" 05325 { 05326 #if 0 05327 (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05328 #endif 05329 (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05330 05331 ;} 05332 break; 05333 05334 case 21: 05335 #line 972 "ripper.y" 05336 { 05337 #if 0 05338 char buf[2]; 05339 buf[0] = '$'; 05340 buf[1] = (char)(yyvsp[(3) - (3)].val)->nd_nth; 05341 (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), rb_intern2(buf, 2)); 05342 #endif 05343 (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05344 05345 ;} 05346 break; 05347 05348 case 22: 05349 #line 983 "ripper.y" 05350 { 05351 #if 0 05352 yyerror("can't make alias for the number variables"); 05353 (yyval.val) = NEW_BEGIN(0); 05354 #endif 05355 (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05356 (yyval.val) = dispatch1(alias_error, (yyval.val)); 05357 05358 ;} 05359 break; 05360 05361 case 23: 05362 #line 993 "ripper.y" 05363 { 05364 #if 0 05365 (yyval.val) = (yyvsp[(2) - (2)].val); 05366 #endif 05367 (yyval.val) = dispatch1(undef, (yyvsp[(2) - (2)].val)); 05368 05369 ;} 05370 break; 05371 05372 case 24: 05373 #line 1001 "ripper.y" 05374 { 05375 #if 0 05376 (yyval.val) = NEW_IF(cond((yyvsp[(3) - (3)].val)), remove_begin((yyvsp[(1) - (3)].val)), 0); 05377 fixpos((yyval.val), (yyvsp[(3) - (3)].val)); 05378 #endif 05379 (yyval.val) = dispatch2(if_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val)); 05380 05381 ;} 05382 break; 05383 05384 case 25: 05385 #line 1010 "ripper.y" 05386 { 05387 #if 0 05388 (yyval.val) = NEW_UNLESS(cond((yyvsp[(3) - (3)].val)), remove_begin((yyvsp[(1) - (3)].val)), 0); 05389 fixpos((yyval.val), (yyvsp[(3) - (3)].val)); 05390 #endif 05391 (yyval.val) = dispatch2(unless_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val)); 05392 05393 ;} 05394 break; 05395 05396 case 26: 05397 #line 1019 "ripper.y" 05398 { 05399 #if 0 05400 if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) { 05401 (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0); 05402 } 05403 else { 05404 (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1); 05405 } 05406 #endif 05407 (yyval.val) = dispatch2(while_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val)); 05408 05409 ;} 05410 break; 05411 05412 case 27: 05413 #line 1032 "ripper.y" 05414 { 05415 #if 0 05416 if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) { 05417 (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0); 05418 } 05419 else { 05420 (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1); 05421 } 05422 #endif 05423 (yyval.val) = dispatch2(until_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val)); 05424 05425 ;} 05426 break; 05427 05428 case 28: 05429 #line 1045 "ripper.y" 05430 { 05431 #if 0 05432 NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].val)), 0); 05433 (yyval.val) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].val)), resq, 0); 05434 #endif 05435 (yyval.val) = dispatch2(rescue_mod, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05436 05437 ;} 05438 break; 05439 05440 case 29: 05441 #line 1054 "ripper.y" 05442 { 05443 if (in_def || in_single) { 05444 rb_warn0("END in method; use at_exit"); 05445 } 05446 #if 0 05447 (yyval.val) = NEW_POSTEXE(NEW_NODE( 05448 NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].val) /* body */, 0 /* args */)); 05449 #endif 05450 (yyval.val) = dispatch1(END, (yyvsp[(3) - (4)].val)); 05451 05452 ;} 05453 break; 05454 05455 case 31: 05456 #line 1067 "ripper.y" 05457 { 05458 #if 0 05459 value_expr((yyvsp[(3) - (3)].val)); 05460 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05461 (yyval.val) = (yyvsp[(1) - (3)].val); 05462 #endif 05463 (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05464 05465 ;} 05466 break; 05467 05468 case 32: 05469 #line 1077 "ripper.y" 05470 { 05471 #if 0 05472 value_expr((yyvsp[(3) - (3)].val)); 05473 if ((yyvsp[(1) - (3)].val)) { 05474 ID vid = (yyvsp[(1) - (3)].val)->nd_vid; 05475 if ((yyvsp[(2) - (3)].val) == tOROP) { 05476 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05477 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].val)); 05478 if (is_asgn_or_id(vid)) { 05479 (yyval.val)->nd_aid = vid; 05480 } 05481 } 05482 else if ((yyvsp[(2) - (3)].val) == tANDOP) { 05483 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05484 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].val)); 05485 } 05486 else { 05487 (yyval.val) = (yyvsp[(1) - (3)].val); 05488 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].val), NEW_LIST((yyvsp[(3) - (3)].val))); 05489 } 05490 } 05491 else { 05492 (yyval.val) = NEW_BEGIN(0); 05493 } 05494 #endif 05495 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 05496 05497 ;} 05498 break; 05499 05500 case 33: 05501 #line 1106 "ripper.y" 05502 { 05503 #if 0 05504 NODE *args; 05505 05506 value_expr((yyvsp[(6) - (6)].val)); 05507 if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY(); 05508 args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 05509 if ((yyvsp[(5) - (6)].val) == tOROP) { 05510 (yyvsp[(5) - (6)].val) = 0; 05511 } 05512 else if ((yyvsp[(5) - (6)].val) == tANDOP) { 05513 (yyvsp[(5) - (6)].val) = 1; 05514 } 05515 (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args); 05516 fixpos((yyval.val), (yyvsp[(1) - (6)].val)); 05517 #endif 05518 (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val))); 05519 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 05520 05521 ;} 05522 break; 05523 05524 case 34: 05525 #line 1127 "ripper.y" 05526 { 05527 #if 0 05528 value_expr((yyvsp[(5) - (5)].val)); 05529 if ((yyvsp[(4) - (5)].val) == tOROP) { 05530 (yyvsp[(4) - (5)].val) = 0; 05531 } 05532 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 05533 (yyvsp[(4) - (5)].val) = 1; 05534 } 05535 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05536 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05537 #endif 05538 (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val)); 05539 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05540 05541 ;} 05542 break; 05543 05544 case 35: 05545 #line 1144 "ripper.y" 05546 { 05547 #if 0 05548 value_expr((yyvsp[(5) - (5)].val)); 05549 if ((yyvsp[(4) - (5)].val) == tOROP) { 05550 (yyvsp[(4) - (5)].val) = 0; 05551 } 05552 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 05553 (yyvsp[(4) - (5)].val) = 1; 05554 } 05555 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05556 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05557 #endif 05558 (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val)); 05559 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05560 05561 ;} 05562 break; 05563 05564 case 36: 05565 #line 1161 "ripper.y" 05566 { 05567 #if 0 05568 yyerror("constant re-assignment"); 05569 (yyval.val) = 0; 05570 #endif 05571 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val)); 05572 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05573 (yyval.val) = dispatch1(assign_error, (yyval.val)); 05574 05575 ;} 05576 break; 05577 05578 case 37: 05579 #line 1172 "ripper.y" 05580 { 05581 #if 0 05582 value_expr((yyvsp[(5) - (5)].val)); 05583 if ((yyvsp[(4) - (5)].val) == tOROP) { 05584 (yyvsp[(4) - (5)].val) = 0; 05585 } 05586 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 05587 (yyvsp[(4) - (5)].val) = 1; 05588 } 05589 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05590 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05591 #endif 05592 (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val)); 05593 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 05594 05595 ;} 05596 break; 05597 05598 case 38: 05599 #line 1189 "ripper.y" 05600 { 05601 #if 0 05602 rb_backref_error((yyvsp[(1) - (3)].val)); 05603 (yyval.val) = NEW_BEGIN(0); 05604 #endif 05605 (yyval.val) = dispatch2(assign, dispatch1(var_field, (yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val)); 05606 (yyval.val) = dispatch1(assign_error, (yyval.val)); 05607 05608 ;} 05609 break; 05610 05611 case 39: 05612 #line 1199 "ripper.y" 05613 { 05614 #if 0 05615 value_expr((yyvsp[(3) - (3)].val)); 05616 (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05617 #endif 05618 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05619 05620 ;} 05621 break; 05622 05623 case 40: 05624 #line 1208 "ripper.y" 05625 { 05626 #if 0 05627 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05628 (yyval.val) = (yyvsp[(1) - (3)].val); 05629 #endif 05630 (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05631 05632 ;} 05633 break; 05634 05635 case 41: 05636 #line 1217 "ripper.y" 05637 { 05638 #if 0 05639 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 05640 (yyval.val) = (yyvsp[(1) - (3)].val); 05641 #endif 05642 (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05643 05644 ;} 05645 break; 05646 05647 case 43: 05648 #line 1229 "ripper.y" 05649 { 05650 #if 0 05651 value_expr((yyvsp[(3) - (3)].val)); 05652 (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05653 #endif 05654 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05655 05656 ;} 05657 break; 05658 05659 case 44: 05660 #line 1238 "ripper.y" 05661 { 05662 #if 0 05663 value_expr((yyvsp[(3) - (3)].val)); 05664 (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05665 #endif 05666 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05667 05668 ;} 05669 break; 05670 05671 case 46: 05672 #line 1251 "ripper.y" 05673 { 05674 #if 0 05675 (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05676 #endif 05677 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("and"), (yyvsp[(3) - (3)].val)); 05678 05679 ;} 05680 break; 05681 05682 case 47: 05683 #line 1259 "ripper.y" 05684 { 05685 #if 0 05686 (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05687 #endif 05688 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("or"), (yyvsp[(3) - (3)].val)); 05689 05690 ;} 05691 break; 05692 05693 case 48: 05694 #line 1267 "ripper.y" 05695 { 05696 #if 0 05697 (yyval.val) = call_uni_op(cond((yyvsp[(3) - (3)].val)), '!'); 05698 #endif 05699 (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (3)].val)); 05700 05701 ;} 05702 break; 05703 05704 case 49: 05705 #line 1275 "ripper.y" 05706 { 05707 #if 0 05708 (yyval.val) = call_uni_op(cond((yyvsp[(2) - (2)].val)), '!'); 05709 #endif 05710 (yyval.val) = dispatch2(unary, ripper_id2sym('!'), (yyvsp[(2) - (2)].val)); 05711 05712 ;} 05713 break; 05714 05715 case 51: 05716 #line 1286 "ripper.y" 05717 { 05718 #if 0 05719 value_expr((yyvsp[(1) - (1)].val)); 05720 (yyval.val) = (yyvsp[(1) - (1)].val); 05721 if (!(yyval.val)) (yyval.val) = NEW_NIL(); 05722 #endif 05723 (yyval.val) = (yyvsp[(1) - (1)].val); 05724 05725 ;} 05726 break; 05727 05728 case 55: 05729 #line 1303 "ripper.y" 05730 { 05731 #if 0 05732 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05733 #endif 05734 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val)); 05735 (yyval.val) = method_arg((yyval.val), (yyvsp[(4) - (4)].val)); 05736 05737 ;} 05738 break; 05739 05740 case 56: 05741 #line 1312 "ripper.y" 05742 { 05743 #if 0 05744 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05745 #endif 05746 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val)); 05747 (yyval.val) = method_arg((yyval.val), (yyvsp[(4) - (4)].val)); 05748 05749 ;} 05750 break; 05751 05752 case 57: 05753 #line 1323 "ripper.y" 05754 { 05755 (yyvsp[(1) - (1)].vars) = dyna_push(); 05756 #if 0 05757 (yyval.num) = ruby_sourceline; 05758 #endif 05759 05760 ;} 05761 break; 05762 05763 case 58: 05764 #line 1333 "ripper.y" 05765 { 05766 #if 0 05767 (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val)); 05768 nd_set_line((yyval.val), (yyvsp[(2) - (5)].num)); 05769 #endif 05770 (yyval.val) = dispatch2(brace_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val)); 05771 05772 dyna_pop((yyvsp[(1) - (5)].vars)); 05773 ;} 05774 break; 05775 05776 case 59: 05777 #line 1345 "ripper.y" 05778 { 05779 #if 0 05780 (yyval.val) = NEW_FCALL((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 05781 fixpos((yyval.val), (yyvsp[(2) - (2)].val)); 05782 #endif 05783 (yyval.val) = dispatch2(command, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 05784 05785 ;} 05786 break; 05787 05788 case 60: 05789 #line 1354 "ripper.y" 05790 { 05791 #if 0 05792 block_dup_check((yyvsp[(2) - (3)].val),(yyvsp[(3) - (3)].val)); 05793 (yyvsp[(3) - (3)].val)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 05794 (yyval.val) = (yyvsp[(3) - (3)].val); 05795 fixpos((yyval.val), (yyvsp[(2) - (3)].val)); 05796 #endif 05797 (yyval.val) = dispatch2(command, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 05798 (yyval.val) = method_add_block((yyval.val), (yyvsp[(3) - (3)].val)); 05799 05800 ;} 05801 break; 05802 05803 case 61: 05804 #line 1366 "ripper.y" 05805 { 05806 #if 0 05807 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05808 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 05809 #endif 05810 (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05811 05812 ;} 05813 break; 05814 05815 case 62: 05816 #line 1375 "ripper.y" 05817 { 05818 #if 0 05819 block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val)); 05820 (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val)); 05821 (yyval.val) = (yyvsp[(5) - (5)].val); 05822 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05823 #endif 05824 (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val)); 05825 (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val)); 05826 05827 ;} 05828 break; 05829 05830 case 63: 05831 #line 1387 "ripper.y" 05832 { 05833 #if 0 05834 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05835 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 05836 #endif 05837 (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 05838 05839 ;} 05840 break; 05841 05842 case 64: 05843 #line 1396 "ripper.y" 05844 { 05845 #if 0 05846 block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val)); 05847 (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val)); 05848 (yyval.val) = (yyvsp[(5) - (5)].val); 05849 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 05850 #endif 05851 (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val)); 05852 (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val)); 05853 05854 ;} 05855 break; 05856 05857 case 65: 05858 #line 1408 "ripper.y" 05859 { 05860 #if 0 05861 (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val)); 05862 fixpos((yyval.val), (yyvsp[(2) - (2)].val)); 05863 #endif 05864 (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val)); 05865 05866 ;} 05867 break; 05868 05869 case 66: 05870 #line 1417 "ripper.y" 05871 { 05872 #if 0 05873 (yyval.val) = new_yield((yyvsp[(2) - (2)].val)); 05874 fixpos((yyval.val), (yyvsp[(2) - (2)].val)); 05875 #endif 05876 (yyval.val) = dispatch1(yield, (yyvsp[(2) - (2)].val)); 05877 05878 ;} 05879 break; 05880 05881 case 67: 05882 #line 1426 "ripper.y" 05883 { 05884 #if 0 05885 (yyval.val) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].val))); 05886 #endif 05887 (yyval.val) = dispatch1(return, (yyvsp[(2) - (2)].val)); 05888 05889 ;} 05890 break; 05891 05892 case 68: 05893 #line 1434 "ripper.y" 05894 { 05895 #if 0 05896 (yyval.val) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].val))); 05897 #endif 05898 (yyval.val) = dispatch1(break, (yyvsp[(2) - (2)].val)); 05899 05900 ;} 05901 break; 05902 05903 case 69: 05904 #line 1442 "ripper.y" 05905 { 05906 #if 0 05907 (yyval.val) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].val))); 05908 #endif 05909 (yyval.val) = dispatch1(next, (yyvsp[(2) - (2)].val)); 05910 05911 ;} 05912 break; 05913 05914 case 71: 05915 #line 1453 "ripper.y" 05916 { 05917 #if 0 05918 (yyval.val) = (yyvsp[(2) - (3)].val); 05919 #endif 05920 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 05921 05922 ;} 05923 break; 05924 05925 case 73: 05926 #line 1464 "ripper.y" 05927 { 05928 #if 0 05929 (yyval.val) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].val)), 0); 05930 #endif 05931 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 05932 05933 ;} 05934 break; 05935 05936 case 74: 05937 #line 1474 "ripper.y" 05938 { 05939 #if 0 05940 (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0); 05941 #endif 05942 (yyval.val) = (yyvsp[(1) - (1)].val); 05943 05944 ;} 05945 break; 05946 05947 case 75: 05948 #line 1482 "ripper.y" 05949 { 05950 #if 0 05951 (yyval.val) = NEW_MASGN(list_append((yyvsp[(1) - (2)].val),(yyvsp[(2) - (2)].val)), 0); 05952 #endif 05953 (yyval.val) = mlhs_add((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 05954 05955 ;} 05956 break; 05957 05958 case 76: 05959 #line 1490 "ripper.y" 05960 { 05961 #if 0 05962 (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05963 #endif 05964 (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 05965 05966 ;} 05967 break; 05968 05969 case 77: 05970 #line 1498 "ripper.y" 05971 { 05972 #if 0 05973 (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG((yyvsp[(3) - (5)].val),(yyvsp[(5) - (5)].val))); 05974 #endif 05975 (yyvsp[(1) - (5)].val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val)); 05976 (yyval.val) = mlhs_add((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val)); 05977 05978 ;} 05979 break; 05980 05981 case 78: 05982 #line 1507 "ripper.y" 05983 { 05984 #if 0 05985 (yyval.val) = NEW_MASGN((yyvsp[(1) - (2)].val), -1); 05986 #endif 05987 (yyval.val) = mlhs_add_star((yyvsp[(1) - (2)].val), Qnil); 05988 05989 ;} 05990 break; 05991 05992 case 79: 05993 #line 1515 "ripper.y" 05994 { 05995 #if 0 05996 (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), NEW_POSTARG(-1, (yyvsp[(4) - (4)].val))); 05997 #endif 05998 (yyvsp[(1) - (4)].val) = mlhs_add_star((yyvsp[(1) - (4)].val), Qnil); 05999 (yyval.val) = mlhs_add((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 06000 06001 ;} 06002 break; 06003 06004 case 80: 06005 #line 1524 "ripper.y" 06006 { 06007 #if 0 06008 (yyval.val) = NEW_MASGN(0, (yyvsp[(2) - (2)].val)); 06009 #endif 06010 (yyval.val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (2)].val)); 06011 06012 ;} 06013 break; 06014 06015 case 81: 06016 #line 1532 "ripper.y" 06017 { 06018 #if 0 06019 (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].val),(yyvsp[(4) - (4)].val))); 06020 #endif 06021 (yyvsp[(2) - (4)].val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (4)].val)); 06022 (yyval.val) = mlhs_add((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val)); 06023 06024 ;} 06025 break; 06026 06027 case 82: 06028 #line 1541 "ripper.y" 06029 { 06030 #if 0 06031 (yyval.val) = NEW_MASGN(0, -1); 06032 #endif 06033 (yyval.val) = mlhs_add_star(mlhs_new(), Qnil); 06034 06035 ;} 06036 break; 06037 06038 case 83: 06039 #line 1549 "ripper.y" 06040 { 06041 #if 0 06042 (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val))); 06043 #endif 06044 (yyval.val) = mlhs_add_star(mlhs_new(), Qnil); 06045 (yyval.val) = mlhs_add((yyval.val), (yyvsp[(3) - (3)].val)); 06046 06047 ;} 06048 break; 06049 06050 case 85: 06051 #line 1561 "ripper.y" 06052 { 06053 #if 0 06054 (yyval.val) = (yyvsp[(2) - (3)].val); 06055 #endif 06056 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 06057 06058 ;} 06059 break; 06060 06061 case 86: 06062 #line 1571 "ripper.y" 06063 { 06064 #if 0 06065 (yyval.val) = NEW_LIST((yyvsp[(1) - (2)].val)); 06066 #endif 06067 (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (2)].val)); 06068 06069 ;} 06070 break; 06071 06072 case 87: 06073 #line 1579 "ripper.y" 06074 { 06075 #if 0 06076 (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 06077 #endif 06078 (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 06079 06080 ;} 06081 break; 06082 06083 case 88: 06084 #line 1589 "ripper.y" 06085 { 06086 #if 0 06087 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 06088 #endif 06089 (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val)); 06090 06091 ;} 06092 break; 06093 06094 case 89: 06095 #line 1597 "ripper.y" 06096 { 06097 #if 0 06098 (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06099 #endif 06100 (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06101 06102 ;} 06103 break; 06104 06105 case 90: 06106 #line 1607 "ripper.y" 06107 { 06108 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 06109 ;} 06110 break; 06111 06112 case 91: 06113 #line 1611 "ripper.y" 06114 { 06115 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 06116 ;} 06117 break; 06118 06119 case 92: 06120 #line 1615 "ripper.y" 06121 { 06122 #if 0 06123 (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)); 06124 #endif 06125 (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val))); 06126 06127 ;} 06128 break; 06129 06130 case 93: 06131 #line 1623 "ripper.y" 06132 { 06133 #if 0 06134 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06135 #endif 06136 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val)); 06137 06138 ;} 06139 break; 06140 06141 case 94: 06142 #line 1631 "ripper.y" 06143 { 06144 #if 0 06145 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06146 #endif 06147 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06148 06149 ;} 06150 break; 06151 06152 case 95: 06153 #line 1639 "ripper.y" 06154 { 06155 #if 0 06156 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06157 #endif 06158 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val)); 06159 06160 ;} 06161 break; 06162 06163 case 96: 06164 #line 1647 "ripper.y" 06165 { 06166 #if 0 06167 if (in_def || in_single) 06168 yyerror("dynamic constant assignment"); 06169 (yyval.val) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val))); 06170 #endif 06171 if (in_def || in_single) 06172 yyerror("dynamic constant assignment"); 06173 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06174 06175 ;} 06176 break; 06177 06178 case 97: 06179 #line 1659 "ripper.y" 06180 { 06181 #if 0 06182 if (in_def || in_single) 06183 yyerror("dynamic constant assignment"); 06184 (yyval.val) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].val))); 06185 #endif 06186 (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (2)].val)); 06187 06188 ;} 06189 break; 06190 06191 case 98: 06192 #line 1669 "ripper.y" 06193 { 06194 #if 0 06195 rb_backref_error((yyvsp[(1) - (1)].val)); 06196 (yyval.val) = NEW_BEGIN(0); 06197 #endif 06198 (yyval.val) = dispatch1(var_field, (yyvsp[(1) - (1)].val)); 06199 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06200 06201 ;} 06202 break; 06203 06204 case 99: 06205 #line 1681 "ripper.y" 06206 { 06207 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 06208 #if 0 06209 if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0); 06210 #endif 06211 (yyval.val) = dispatch1(var_field, (yyval.val)); 06212 06213 ;} 06214 break; 06215 06216 case 100: 06217 #line 1690 "ripper.y" 06218 { 06219 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 06220 #if 0 06221 if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0); 06222 #endif 06223 (yyval.val) = dispatch1(var_field, (yyval.val)); 06224 06225 ;} 06226 break; 06227 06228 case 101: 06229 #line 1699 "ripper.y" 06230 { 06231 #if 0 06232 (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)); 06233 #endif 06234 (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val))); 06235 06236 ;} 06237 break; 06238 06239 case 102: 06240 #line 1707 "ripper.y" 06241 { 06242 #if 0 06243 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06244 #endif 06245 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val)); 06246 06247 ;} 06248 break; 06249 06250 case 103: 06251 #line 1715 "ripper.y" 06252 { 06253 #if 0 06254 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06255 #endif 06256 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_intern("::"), (yyvsp[(3) - (3)].val)); 06257 06258 ;} 06259 break; 06260 06261 case 104: 06262 #line 1723 "ripper.y" 06263 { 06264 #if 0 06265 (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06266 #endif 06267 (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val)); 06268 06269 ;} 06270 break; 06271 06272 case 105: 06273 #line 1731 "ripper.y" 06274 { 06275 #if 0 06276 if (in_def || in_single) 06277 yyerror("dynamic constant assignment"); 06278 (yyval.val) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val))); 06279 #endif 06280 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06281 if (in_def || in_single) { 06282 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06283 } 06284 06285 ;} 06286 break; 06287 06288 case 106: 06289 #line 1744 "ripper.y" 06290 { 06291 #if 0 06292 if (in_def || in_single) 06293 yyerror("dynamic constant assignment"); 06294 (yyval.val) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].val))); 06295 #endif 06296 (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (2)].val)); 06297 if (in_def || in_single) { 06298 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06299 } 06300 06301 ;} 06302 break; 06303 06304 case 107: 06305 #line 1757 "ripper.y" 06306 { 06307 #if 0 06308 rb_backref_error((yyvsp[(1) - (1)].val)); 06309 (yyval.val) = NEW_BEGIN(0); 06310 #endif 06311 (yyval.val) = dispatch1(assign_error, (yyvsp[(1) - (1)].val)); 06312 06313 ;} 06314 break; 06315 06316 case 108: 06317 #line 1768 "ripper.y" 06318 { 06319 #if 0 06320 yyerror("class/module name must be CONSTANT"); 06321 #endif 06322 (yyval.val) = dispatch1(class_name_error, (yyvsp[(1) - (1)].val)); 06323 06324 ;} 06325 break; 06326 06327 case 110: 06328 #line 1779 "ripper.y" 06329 { 06330 #if 0 06331 (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val)); 06332 #endif 06333 (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val)); 06334 06335 ;} 06336 break; 06337 06338 case 111: 06339 #line 1787 "ripper.y" 06340 { 06341 #if 0 06342 (yyval.val) = NEW_COLON2(0, (yyval.val)); 06343 #endif 06344 (yyval.val) = dispatch1(const_ref, (yyvsp[(1) - (1)].val)); 06345 06346 ;} 06347 break; 06348 06349 case 112: 06350 #line 1795 "ripper.y" 06351 { 06352 #if 0 06353 (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06354 #endif 06355 (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06356 06357 ;} 06358 break; 06359 06360 case 116: 06361 #line 1808 "ripper.y" 06362 { 06363 lex_state = EXPR_ENDFN; 06364 (yyval.val) = (yyvsp[(1) - (1)].val); 06365 ;} 06366 break; 06367 06368 case 117: 06369 #line 1813 "ripper.y" 06370 { 06371 lex_state = EXPR_ENDFN; 06372 #if 0 06373 (yyval.val) = (yyvsp[(1) - (1)].id); 06374 #endif 06375 (yyval.val) = (yyvsp[(1) - (1)].val); 06376 06377 ;} 06378 break; 06379 06380 case 120: 06381 #line 1828 "ripper.y" 06382 { 06383 #if 0 06384 (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val))); 06385 #endif 06386 (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val)); 06387 06388 ;} 06389 break; 06390 06391 case 122: 06392 #line 1839 "ripper.y" 06393 { 06394 #if 0 06395 (yyval.val) = NEW_UNDEF((yyvsp[(1) - (1)].val)); 06396 #endif 06397 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 06398 06399 ;} 06400 break; 06401 06402 case 123: 06403 #line 1846 "ripper.y" 06404 {lex_state = EXPR_FNAME;;} 06405 break; 06406 06407 case 124: 06408 #line 1847 "ripper.y" 06409 { 06410 #if 0 06411 (yyval.val) = block_append((yyvsp[(1) - (4)].val), NEW_UNDEF((yyvsp[(4) - (4)].val))); 06412 #endif 06413 rb_ary_push((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 06414 06415 ;} 06416 break; 06417 06418 case 125: 06419 #line 1856 "ripper.y" 06420 { ifndef_ripper((yyval.val) = '|'); ;} 06421 break; 06422 06423 case 126: 06424 #line 1857 "ripper.y" 06425 { ifndef_ripper((yyval.val) = '^'); ;} 06426 break; 06427 06428 case 127: 06429 #line 1858 "ripper.y" 06430 { ifndef_ripper((yyval.val) = '&'); ;} 06431 break; 06432 06433 case 128: 06434 #line 1859 "ripper.y" 06435 { ifndef_ripper((yyval.val) = tCMP); ;} 06436 break; 06437 06438 case 129: 06439 #line 1860 "ripper.y" 06440 { ifndef_ripper((yyval.val) = tEQ); ;} 06441 break; 06442 06443 case 130: 06444 #line 1861 "ripper.y" 06445 { ifndef_ripper((yyval.val) = tEQQ); ;} 06446 break; 06447 06448 case 131: 06449 #line 1862 "ripper.y" 06450 { ifndef_ripper((yyval.val) = tMATCH); ;} 06451 break; 06452 06453 case 132: 06454 #line 1863 "ripper.y" 06455 { ifndef_ripper((yyval.val) = tNMATCH); ;} 06456 break; 06457 06458 case 133: 06459 #line 1864 "ripper.y" 06460 { ifndef_ripper((yyval.val) = '>'); ;} 06461 break; 06462 06463 case 134: 06464 #line 1865 "ripper.y" 06465 { ifndef_ripper((yyval.val) = tGEQ); ;} 06466 break; 06467 06468 case 135: 06469 #line 1866 "ripper.y" 06470 { ifndef_ripper((yyval.val) = '<'); ;} 06471 break; 06472 06473 case 136: 06474 #line 1867 "ripper.y" 06475 { ifndef_ripper((yyval.val) = tLEQ); ;} 06476 break; 06477 06478 case 137: 06479 #line 1868 "ripper.y" 06480 { ifndef_ripper((yyval.val) = tNEQ); ;} 06481 break; 06482 06483 case 138: 06484 #line 1869 "ripper.y" 06485 { ifndef_ripper((yyval.val) = tLSHFT); ;} 06486 break; 06487 06488 case 139: 06489 #line 1870 "ripper.y" 06490 { ifndef_ripper((yyval.val) = tRSHFT); ;} 06491 break; 06492 06493 case 140: 06494 #line 1871 "ripper.y" 06495 { ifndef_ripper((yyval.val) = '+'); ;} 06496 break; 06497 06498 case 141: 06499 #line 1872 "ripper.y" 06500 { ifndef_ripper((yyval.val) = '-'); ;} 06501 break; 06502 06503 case 142: 06504 #line 1873 "ripper.y" 06505 { ifndef_ripper((yyval.val) = '*'); ;} 06506 break; 06507 06508 case 143: 06509 #line 1874 "ripper.y" 06510 { ifndef_ripper((yyval.val) = '*'); ;} 06511 break; 06512 06513 case 144: 06514 #line 1875 "ripper.y" 06515 { ifndef_ripper((yyval.val) = '/'); ;} 06516 break; 06517 06518 case 145: 06519 #line 1876 "ripper.y" 06520 { ifndef_ripper((yyval.val) = '%'); ;} 06521 break; 06522 06523 case 146: 06524 #line 1877 "ripper.y" 06525 { ifndef_ripper((yyval.val) = tPOW); ;} 06526 break; 06527 06528 case 147: 06529 #line 1878 "ripper.y" 06530 { ifndef_ripper((yyval.val) = '!'); ;} 06531 break; 06532 06533 case 148: 06534 #line 1879 "ripper.y" 06535 { ifndef_ripper((yyval.val) = '~'); ;} 06536 break; 06537 06538 case 149: 06539 #line 1880 "ripper.y" 06540 { ifndef_ripper((yyval.val) = tUPLUS); ;} 06541 break; 06542 06543 case 150: 06544 #line 1881 "ripper.y" 06545 { ifndef_ripper((yyval.val) = tUMINUS); ;} 06546 break; 06547 06548 case 151: 06549 #line 1882 "ripper.y" 06550 { ifndef_ripper((yyval.val) = tAREF); ;} 06551 break; 06552 06553 case 152: 06554 #line 1883 "ripper.y" 06555 { ifndef_ripper((yyval.val) = tASET); ;} 06556 break; 06557 06558 case 153: 06559 #line 1884 "ripper.y" 06560 { ifndef_ripper((yyval.val) = '`'); ;} 06561 break; 06562 06563 case 195: 06564 #line 1902 "ripper.y" 06565 { 06566 #if 0 06567 value_expr((yyvsp[(3) - (3)].val)); 06568 (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06569 #endif 06570 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06571 06572 ;} 06573 break; 06574 06575 case 196: 06576 #line 1911 "ripper.y" 06577 { 06578 #if 0 06579 value_expr((yyvsp[(3) - (5)].val)); 06580 (yyvsp[(3) - (5)].val) = NEW_RESCUE((yyvsp[(3) - (5)].val), NEW_RESBODY(0,(yyvsp[(5) - (5)].val),0), 0); 06581 (yyval.val) = node_assign((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val)); 06582 #endif 06583 (yyval.val) = dispatch2(assign, (yyvsp[(1) - (5)].val), dispatch2(rescue_mod, (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val))); 06584 06585 ;} 06586 break; 06587 06588 case 197: 06589 #line 1921 "ripper.y" 06590 { 06591 #if 0 06592 value_expr((yyvsp[(3) - (3)].val)); 06593 if ((yyvsp[(1) - (3)].val)) { 06594 ID vid = (yyvsp[(1) - (3)].val)->nd_vid; 06595 if ((yyvsp[(2) - (3)].val) == tOROP) { 06596 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 06597 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].val)); 06598 if (is_asgn_or_id(vid)) { 06599 (yyval.val)->nd_aid = vid; 06600 } 06601 } 06602 else if ((yyvsp[(2) - (3)].val) == tANDOP) { 06603 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val); 06604 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].val)); 06605 } 06606 else { 06607 (yyval.val) = (yyvsp[(1) - (3)].val); 06608 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].val), NEW_LIST((yyvsp[(3) - (3)].val))); 06609 } 06610 } 06611 else { 06612 (yyval.val) = NEW_BEGIN(0); 06613 } 06614 #endif 06615 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 06616 06617 ;} 06618 break; 06619 06620 case 198: 06621 #line 1950 "ripper.y" 06622 { 06623 #if 0 06624 value_expr((yyvsp[(3) - (5)].val)); 06625 (yyvsp[(3) - (5)].val) = NEW_RESCUE((yyvsp[(3) - (5)].val), NEW_RESBODY(0,(yyvsp[(5) - (5)].val),0), 0); 06626 if ((yyvsp[(1) - (5)].val)) { 06627 ID vid = (yyvsp[(1) - (5)].val)->nd_vid; 06628 if ((yyvsp[(2) - (5)].val) == tOROP) { 06629 (yyvsp[(1) - (5)].val)->nd_value = (yyvsp[(3) - (5)].val); 06630 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].val)); 06631 if (is_asgn_or_id(vid)) { 06632 (yyval.val)->nd_aid = vid; 06633 } 06634 } 06635 else if ((yyvsp[(2) - (5)].val) == tANDOP) { 06636 (yyvsp[(1) - (5)].val)->nd_value = (yyvsp[(3) - (5)].val); 06637 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].val)); 06638 } 06639 else { 06640 (yyval.val) = (yyvsp[(1) - (5)].val); 06641 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].val), NEW_LIST((yyvsp[(3) - (5)].val))); 06642 } 06643 } 06644 else { 06645 (yyval.val) = NEW_BEGIN(0); 06646 } 06647 #endif 06648 (yyvsp[(3) - (5)].val) = dispatch2(rescue_mod, (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val)); 06649 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val)); 06650 06651 ;} 06652 break; 06653 06654 case 199: 06655 #line 1981 "ripper.y" 06656 { 06657 #if 0 06658 NODE *args; 06659 06660 value_expr((yyvsp[(6) - (6)].val)); 06661 if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY(); 06662 if (nd_type((yyvsp[(3) - (6)].val)) == NODE_BLOCK_PASS) { 06663 args = NEW_ARGSCAT((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 06664 } 06665 else { 06666 args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 06667 } 06668 if ((yyvsp[(5) - (6)].val) == tOROP) { 06669 (yyvsp[(5) - (6)].val) = 0; 06670 } 06671 else if ((yyvsp[(5) - (6)].val) == tANDOP) { 06672 (yyvsp[(5) - (6)].val) = 1; 06673 } 06674 (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args); 06675 fixpos((yyval.val), (yyvsp[(1) - (6)].val)); 06676 #endif 06677 (yyvsp[(1) - (6)].val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val))); 06678 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 06679 06680 ;} 06681 break; 06682 06683 case 200: 06684 #line 2007 "ripper.y" 06685 { 06686 #if 0 06687 value_expr((yyvsp[(5) - (5)].val)); 06688 if ((yyvsp[(4) - (5)].val) == tOROP) { 06689 (yyvsp[(4) - (5)].val) = 0; 06690 } 06691 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 06692 (yyvsp[(4) - (5)].val) = 1; 06693 } 06694 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06695 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 06696 #endif 06697 (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val)); 06698 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06699 06700 ;} 06701 break; 06702 06703 case 201: 06704 #line 2024 "ripper.y" 06705 { 06706 #if 0 06707 value_expr((yyvsp[(5) - (5)].val)); 06708 if ((yyvsp[(4) - (5)].val) == tOROP) { 06709 (yyvsp[(4) - (5)].val) = 0; 06710 } 06711 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 06712 (yyvsp[(4) - (5)].val) = 1; 06713 } 06714 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06715 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 06716 #endif 06717 (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val)); 06718 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06719 06720 ;} 06721 break; 06722 06723 case 202: 06724 #line 2041 "ripper.y" 06725 { 06726 #if 0 06727 value_expr((yyvsp[(5) - (5)].val)); 06728 if ((yyvsp[(4) - (5)].val) == tOROP) { 06729 (yyvsp[(4) - (5)].val) = 0; 06730 } 06731 else if ((yyvsp[(4) - (5)].val) == tANDOP) { 06732 (yyvsp[(4) - (5)].val) = 1; 06733 } 06734 (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06735 fixpos((yyval.val), (yyvsp[(1) - (5)].val)); 06736 #endif 06737 (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val)); 06738 (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06739 06740 ;} 06741 break; 06742 06743 case 203: 06744 #line 2058 "ripper.y" 06745 { 06746 #if 0 06747 yyerror("constant re-assignment"); 06748 (yyval.val) = NEW_BEGIN(0); 06749 #endif 06750 (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val)); 06751 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 06752 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06753 06754 ;} 06755 break; 06756 06757 case 204: 06758 #line 2069 "ripper.y" 06759 { 06760 #if 0 06761 yyerror("constant re-assignment"); 06762 (yyval.val) = NEW_BEGIN(0); 06763 #endif 06764 (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (4)].val)); 06765 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 06766 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06767 06768 ;} 06769 break; 06770 06771 case 205: 06772 #line 2080 "ripper.y" 06773 { 06774 #if 0 06775 rb_backref_error((yyvsp[(1) - (3)].val)); 06776 (yyval.val) = NEW_BEGIN(0); 06777 #endif 06778 (yyval.val) = dispatch1(var_field, (yyvsp[(1) - (3)].val)); 06779 (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 06780 (yyval.val) = dispatch1(assign_error, (yyval.val)); 06781 06782 ;} 06783 break; 06784 06785 case 206: 06786 #line 2091 "ripper.y" 06787 { 06788 #if 0 06789 value_expr((yyvsp[(1) - (3)].val)); 06790 value_expr((yyvsp[(3) - (3)].val)); 06791 (yyval.val) = NEW_DOT2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06792 if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].val)->nd_lit) && 06793 nd_type((yyvsp[(3) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].val)->nd_lit)) { 06794 deferred_nodes = list_append(deferred_nodes, (yyval.val)); 06795 } 06796 #endif 06797 (yyval.val) = dispatch2(dot2, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06798 06799 ;} 06800 break; 06801 06802 case 207: 06803 #line 2105 "ripper.y" 06804 { 06805 #if 0 06806 value_expr((yyvsp[(1) - (3)].val)); 06807 value_expr((yyvsp[(3) - (3)].val)); 06808 (yyval.val) = NEW_DOT3((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06809 if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].val)->nd_lit) && 06810 nd_type((yyvsp[(3) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].val)->nd_lit)) { 06811 deferred_nodes = list_append(deferred_nodes, (yyval.val)); 06812 } 06813 #endif 06814 (yyval.val) = dispatch2(dot3, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 06815 06816 ;} 06817 break; 06818 06819 case 208: 06820 #line 2119 "ripper.y" 06821 { 06822 #if 0 06823 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '+', (yyvsp[(3) - (3)].val)); 06824 #endif 06825 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('+'), (yyvsp[(3) - (3)].val)); 06826 06827 ;} 06828 break; 06829 06830 case 209: 06831 #line 2127 "ripper.y" 06832 { 06833 #if 0 06834 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '-', (yyvsp[(3) - (3)].val)); 06835 #endif 06836 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('-'), (yyvsp[(3) - (3)].val)); 06837 06838 ;} 06839 break; 06840 06841 case 210: 06842 #line 2135 "ripper.y" 06843 { 06844 #if 0 06845 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '*', (yyvsp[(3) - (3)].val)); 06846 #endif 06847 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('*'), (yyvsp[(3) - (3)].val)); 06848 06849 ;} 06850 break; 06851 06852 case 211: 06853 #line 2143 "ripper.y" 06854 { 06855 #if 0 06856 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '/', (yyvsp[(3) - (3)].val)); 06857 #endif 06858 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('/'), (yyvsp[(3) - (3)].val)); 06859 06860 ;} 06861 break; 06862 06863 case 212: 06864 #line 2151 "ripper.y" 06865 { 06866 #if 0 06867 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '%', (yyvsp[(3) - (3)].val)); 06868 #endif 06869 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('%'), (yyvsp[(3) - (3)].val)); 06870 06871 ;} 06872 break; 06873 06874 case 213: 06875 #line 2159 "ripper.y" 06876 { 06877 #if 0 06878 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tPOW, (yyvsp[(3) - (3)].val)); 06879 #endif 06880 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("**"), (yyvsp[(3) - (3)].val)); 06881 06882 ;} 06883 break; 06884 06885 case 214: 06886 #line 2167 "ripper.y" 06887 { 06888 #if 0 06889 (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0); 06890 #endif 06891 (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ripper_intern("**"), (yyvsp[(4) - (4)].val)); 06892 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyval.val)); 06893 06894 ;} 06895 break; 06896 06897 case 215: 06898 #line 2176 "ripper.y" 06899 { 06900 #if 0 06901 (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0); 06902 #endif 06903 (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ripper_intern("**"), (yyvsp[(4) - (4)].val)); 06904 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyval.val)); 06905 06906 ;} 06907 break; 06908 06909 case 216: 06910 #line 2185 "ripper.y" 06911 { 06912 #if 0 06913 (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUPLUS); 06914 #endif 06915 (yyval.val) = dispatch2(unary, ripper_intern("+@"), (yyvsp[(2) - (2)].val)); 06916 06917 ;} 06918 break; 06919 06920 case 217: 06921 #line 2193 "ripper.y" 06922 { 06923 #if 0 06924 (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUMINUS); 06925 #endif 06926 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val)); 06927 06928 ;} 06929 break; 06930 06931 case 218: 06932 #line 2201 "ripper.y" 06933 { 06934 #if 0 06935 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '|', (yyvsp[(3) - (3)].val)); 06936 #endif 06937 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('|'), (yyvsp[(3) - (3)].val)); 06938 06939 ;} 06940 break; 06941 06942 case 219: 06943 #line 2209 "ripper.y" 06944 { 06945 #if 0 06946 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '^', (yyvsp[(3) - (3)].val)); 06947 #endif 06948 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('^'), (yyvsp[(3) - (3)].val)); 06949 06950 ;} 06951 break; 06952 06953 case 220: 06954 #line 2217 "ripper.y" 06955 { 06956 #if 0 06957 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '&', (yyvsp[(3) - (3)].val)); 06958 #endif 06959 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('&'), (yyvsp[(3) - (3)].val)); 06960 06961 ;} 06962 break; 06963 06964 case 221: 06965 #line 2225 "ripper.y" 06966 { 06967 #if 0 06968 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tCMP, (yyvsp[(3) - (3)].val)); 06969 #endif 06970 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<=>"), (yyvsp[(3) - (3)].val)); 06971 06972 ;} 06973 break; 06974 06975 case 222: 06976 #line 2233 "ripper.y" 06977 { 06978 #if 0 06979 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '>', (yyvsp[(3) - (3)].val)); 06980 #endif 06981 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('>'), (yyvsp[(3) - (3)].val)); 06982 06983 ;} 06984 break; 06985 06986 case 223: 06987 #line 2241 "ripper.y" 06988 { 06989 #if 0 06990 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tGEQ, (yyvsp[(3) - (3)].val)); 06991 #endif 06992 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern(">="), (yyvsp[(3) - (3)].val)); 06993 06994 ;} 06995 break; 06996 06997 case 224: 06998 #line 2249 "ripper.y" 06999 { 07000 #if 0 07001 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '<', (yyvsp[(3) - (3)].val)); 07002 #endif 07003 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('<'), (yyvsp[(3) - (3)].val)); 07004 07005 ;} 07006 break; 07007 07008 case 225: 07009 #line 2257 "ripper.y" 07010 { 07011 #if 0 07012 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLEQ, (yyvsp[(3) - (3)].val)); 07013 #endif 07014 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<="), (yyvsp[(3) - (3)].val)); 07015 07016 ;} 07017 break; 07018 07019 case 226: 07020 #line 2265 "ripper.y" 07021 { 07022 #if 0 07023 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQ, (yyvsp[(3) - (3)].val)); 07024 #endif 07025 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("=="), (yyvsp[(3) - (3)].val)); 07026 07027 ;} 07028 break; 07029 07030 case 227: 07031 #line 2273 "ripper.y" 07032 { 07033 #if 0 07034 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQQ, (yyvsp[(3) - (3)].val)); 07035 #endif 07036 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("==="), (yyvsp[(3) - (3)].val)); 07037 07038 ;} 07039 break; 07040 07041 case 228: 07042 #line 2281 "ripper.y" 07043 { 07044 #if 0 07045 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNEQ, (yyvsp[(3) - (3)].val)); 07046 #endif 07047 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("!="), (yyvsp[(3) - (3)].val)); 07048 07049 ;} 07050 break; 07051 07052 case 229: 07053 #line 2289 "ripper.y" 07054 { 07055 #if 0 07056 (yyval.val) = match_op((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07057 if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].val)->nd_lit) == T_REGEXP) { 07058 (yyval.val) = reg_named_capture_assign((yyvsp[(1) - (3)].val)->nd_lit, (yyval.val)); 07059 } 07060 #endif 07061 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("=~"), (yyvsp[(3) - (3)].val)); 07062 07063 ;} 07064 break; 07065 07066 case 230: 07067 #line 2300 "ripper.y" 07068 { 07069 #if 0 07070 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNMATCH, (yyvsp[(3) - (3)].val)); 07071 #endif 07072 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("!~"), (yyvsp[(3) - (3)].val)); 07073 07074 ;} 07075 break; 07076 07077 case 231: 07078 #line 2308 "ripper.y" 07079 { 07080 #if 0 07081 (yyval.val) = call_uni_op(cond((yyvsp[(2) - (2)].val)), '!'); 07082 #endif 07083 (yyval.val) = dispatch2(unary, ID2SYM('!'), (yyvsp[(2) - (2)].val)); 07084 07085 ;} 07086 break; 07087 07088 case 232: 07089 #line 2316 "ripper.y" 07090 { 07091 #if 0 07092 (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), '~'); 07093 #endif 07094 (yyval.val) = dispatch2(unary, ID2SYM('~'), (yyvsp[(2) - (2)].val)); 07095 07096 ;} 07097 break; 07098 07099 case 233: 07100 #line 2324 "ripper.y" 07101 { 07102 #if 0 07103 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLSHFT, (yyvsp[(3) - (3)].val)); 07104 #endif 07105 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<<"), (yyvsp[(3) - (3)].val)); 07106 07107 ;} 07108 break; 07109 07110 case 234: 07111 #line 2332 "ripper.y" 07112 { 07113 #if 0 07114 (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tRSHFT, (yyvsp[(3) - (3)].val)); 07115 #endif 07116 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern(">>"), (yyvsp[(3) - (3)].val)); 07117 07118 ;} 07119 break; 07120 07121 case 235: 07122 #line 2340 "ripper.y" 07123 { 07124 #if 0 07125 (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07126 #endif 07127 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("&&"), (yyvsp[(3) - (3)].val)); 07128 07129 ;} 07130 break; 07131 07132 case 236: 07133 #line 2348 "ripper.y" 07134 { 07135 #if 0 07136 (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07137 #endif 07138 (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("||"), (yyvsp[(3) - (3)].val)); 07139 07140 ;} 07141 break; 07142 07143 case 237: 07144 #line 2355 "ripper.y" 07145 {in_defined = 1;;} 07146 break; 07147 07148 case 238: 07149 #line 2356 "ripper.y" 07150 { 07151 #if 0 07152 in_defined = 0; 07153 (yyval.val) = NEW_DEFINED((yyvsp[(4) - (4)].val)); 07154 #endif 07155 in_defined = 0; 07156 (yyval.val) = dispatch1(defined, (yyvsp[(4) - (4)].val)); 07157 07158 ;} 07159 break; 07160 07161 case 239: 07162 #line 2366 "ripper.y" 07163 { 07164 #if 0 07165 value_expr((yyvsp[(1) - (6)].val)); 07166 (yyval.val) = NEW_IF(cond((yyvsp[(1) - (6)].val)), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 07167 fixpos((yyval.val), (yyvsp[(1) - (6)].val)); 07168 #endif 07169 (yyval.val) = dispatch3(ifop, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val)); 07170 07171 ;} 07172 break; 07173 07174 case 240: 07175 #line 2376 "ripper.y" 07176 { 07177 (yyval.val) = (yyvsp[(1) - (1)].val); 07178 ;} 07179 break; 07180 07181 case 241: 07182 #line 2382 "ripper.y" 07183 { 07184 #if 0 07185 value_expr((yyvsp[(1) - (1)].val)); 07186 (yyval.val) = (yyvsp[(1) - (1)].val); 07187 if (!(yyval.val)) (yyval.val) = NEW_NIL(); 07188 #endif 07189 (yyval.val) = (yyvsp[(1) - (1)].val); 07190 07191 ;} 07192 break; 07193 07194 case 243: 07195 #line 2395 "ripper.y" 07196 { 07197 (yyval.val) = (yyvsp[(1) - (2)].val); 07198 ;} 07199 break; 07200 07201 case 244: 07202 #line 2399 "ripper.y" 07203 { 07204 #if 0 07205 (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val))); 07206 #endif 07207 (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)); 07208 07209 ;} 07210 break; 07211 07212 case 245: 07213 #line 2407 "ripper.y" 07214 { 07215 #if 0 07216 (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val))); 07217 #endif 07218 (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val)); 07219 07220 ;} 07221 break; 07222 07223 case 246: 07224 #line 2417 "ripper.y" 07225 { 07226 #if 0 07227 (yyval.val) = (yyvsp[(2) - (3)].val); 07228 #endif 07229 (yyval.val) = dispatch1(arg_paren, escape_Qundef((yyvsp[(2) - (3)].val))); 07230 07231 ;} 07232 break; 07233 07234 case 251: 07235 #line 2433 "ripper.y" 07236 { 07237 (yyval.val) = (yyvsp[(1) - (2)].val); 07238 ;} 07239 break; 07240 07241 case 252: 07242 #line 2437 "ripper.y" 07243 { 07244 #if 0 07245 (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val))); 07246 #endif 07247 (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)); 07248 07249 ;} 07250 break; 07251 07252 case 253: 07253 #line 2445 "ripper.y" 07254 { 07255 #if 0 07256 (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val))); 07257 #endif 07258 (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val)); 07259 07260 ;} 07261 break; 07262 07263 case 254: 07264 #line 2455 "ripper.y" 07265 { 07266 #if 0 07267 value_expr((yyvsp[(1) - (1)].val)); 07268 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 07269 #endif 07270 (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val)); 07271 07272 ;} 07273 break; 07274 07275 case 255: 07276 #line 2464 "ripper.y" 07277 { 07278 #if 0 07279 (yyval.val) = arg_blk_pass((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 07280 #endif 07281 (yyval.val) = arg_add_optblock((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 07282 07283 ;} 07284 break; 07285 07286 case 256: 07287 #line 2472 "ripper.y" 07288 { 07289 #if 0 07290 (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val))); 07291 (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(2) - (2)].val)); 07292 #endif 07293 (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val)); 07294 (yyval.val) = arg_add_optblock((yyval.val), (yyvsp[(2) - (2)].val)); 07295 07296 ;} 07297 break; 07298 07299 case 257: 07300 #line 2482 "ripper.y" 07301 { 07302 #if 0 07303 (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val))); 07304 (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(4) - (4)].val)); 07305 #endif 07306 (yyval.val) = arg_add_optblock(arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)), (yyvsp[(4) - (4)].val)); 07307 07308 ;} 07309 break; 07310 07311 case 258: 07312 #line 2493 "ripper.y" 07313 { 07314 (yyval.val) = arg_add_block(arg_new(), (yyvsp[(1) - (1)].val)); 07315 ;} 07316 break; 07317 07318 case 259: 07319 #line 2499 "ripper.y" 07320 { 07321 (yyval.val) = cmdarg_stack; 07322 CMDARG_PUSH(1); 07323 ;} 07324 break; 07325 07326 case 260: 07327 #line 2504 "ripper.y" 07328 { 07329 /* CMDARG_POP() */ 07330 cmdarg_stack = (yyvsp[(1) - (2)].val); 07331 (yyval.val) = (yyvsp[(2) - (2)].val); 07332 ;} 07333 break; 07334 07335 case 261: 07336 #line 2512 "ripper.y" 07337 { 07338 #if 0 07339 (yyval.val) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].val)); 07340 #endif 07341 (yyval.val) = (yyvsp[(2) - (2)].val); 07342 07343 ;} 07344 break; 07345 07346 case 262: 07347 #line 2522 "ripper.y" 07348 { 07349 (yyval.val) = (yyvsp[(2) - (2)].val); 07350 ;} 07351 break; 07352 07353 case 263: 07354 #line 2526 "ripper.y" 07355 { 07356 (yyval.val) = 0; 07357 ;} 07358 break; 07359 07360 case 264: 07361 #line 2532 "ripper.y" 07362 { 07363 #if 0 07364 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 07365 #endif 07366 (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val)); 07367 07368 ;} 07369 break; 07370 07371 case 265: 07372 #line 2540 "ripper.y" 07373 { 07374 #if 0 07375 (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val)); 07376 #endif 07377 (yyval.val) = arg_add_star(arg_new(), (yyvsp[(2) - (2)].val)); 07378 07379 ;} 07380 break; 07381 07382 case 266: 07383 #line 2548 "ripper.y" 07384 { 07385 #if 0 07386 NODE *n1; 07387 if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) { 07388 (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val)); 07389 } 07390 else { 07391 (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07392 } 07393 #endif 07394 (yyval.val) = arg_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07395 07396 ;} 07397 break; 07398 07399 case 267: 07400 #line 2562 "ripper.y" 07401 { 07402 #if 0 07403 NODE *n1; 07404 if ((nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) { 07405 (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val)); 07406 } 07407 else { 07408 (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 07409 } 07410 #endif 07411 (yyval.val) = arg_add_star((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 07412 07413 ;} 07414 break; 07415 07416 case 268: 07417 #line 2578 "ripper.y" 07418 { 07419 #if 0 07420 NODE *n1; 07421 if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) { 07422 (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val)); 07423 } 07424 else { 07425 (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07426 } 07427 #endif 07428 (yyval.val) = mrhs_add(args2mrhs((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val)); 07429 07430 ;} 07431 break; 07432 07433 case 269: 07434 #line 2592 "ripper.y" 07435 { 07436 #if 0 07437 NODE *n1; 07438 if (nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY && 07439 (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) { 07440 (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val)); 07441 } 07442 else { 07443 (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val)); 07444 } 07445 #endif 07446 (yyval.val) = mrhs_add_star(args2mrhs((yyvsp[(1) - (4)].val)), (yyvsp[(4) - (4)].val)); 07447 07448 ;} 07449 break; 07450 07451 case 270: 07452 #line 2607 "ripper.y" 07453 { 07454 #if 0 07455 (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val)); 07456 #endif 07457 (yyval.val) = mrhs_add_star(mrhs_new(), (yyvsp[(2) - (2)].val)); 07458 07459 ;} 07460 break; 07461 07462 case 279: 07463 #line 2625 "ripper.y" 07464 { 07465 #if 0 07466 (yyval.val) = NEW_FCALL((yyvsp[(1) - (1)].val), 0); 07467 #endif 07468 (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (1)].val)), arg_new()); 07469 07470 ;} 07471 break; 07472 07473 case 280: 07474 #line 2633 "ripper.y" 07475 { 07476 #if 0 07477 (yyval.num) = ruby_sourceline; 07478 #endif 07479 07480 ;} 07481 break; 07482 07483 case 281: 07484 #line 2641 "ripper.y" 07485 { 07486 #if 0 07487 if ((yyvsp[(3) - (4)].val) == NULL) { 07488 (yyval.val) = NEW_NIL(); 07489 } 07490 else { 07491 if (nd_type((yyvsp[(3) - (4)].val)) == NODE_RESCUE || 07492 nd_type((yyvsp[(3) - (4)].val)) == NODE_ENSURE) 07493 nd_set_line((yyvsp[(3) - (4)].val), (yyvsp[(2) - (4)].num)); 07494 (yyval.val) = NEW_BEGIN((yyvsp[(3) - (4)].val)); 07495 } 07496 nd_set_line((yyval.val), (yyvsp[(2) - (4)].num)); 07497 #endif 07498 (yyval.val) = dispatch1(begin, (yyvsp[(3) - (4)].val)); 07499 07500 ;} 07501 break; 07502 07503 case 282: 07504 #line 2657 "ripper.y" 07505 {lex_state = EXPR_ENDARG;;} 07506 break; 07507 07508 case 283: 07509 #line 2658 "ripper.y" 07510 { 07511 rb_warning0("(...) interpreted as grouped expression"); 07512 #if 0 07513 (yyval.val) = (yyvsp[(2) - (4)].val); 07514 #endif 07515 (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val)); 07516 07517 ;} 07518 break; 07519 07520 case 284: 07521 #line 2667 "ripper.y" 07522 { 07523 #if 0 07524 (yyval.val) = (yyvsp[(2) - (3)].val); 07525 #endif 07526 (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val)); 07527 07528 ;} 07529 break; 07530 07531 case 285: 07532 #line 2675 "ripper.y" 07533 { 07534 #if 0 07535 (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07536 #endif 07537 (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 07538 07539 ;} 07540 break; 07541 07542 case 286: 07543 #line 2683 "ripper.y" 07544 { 07545 #if 0 07546 (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val)); 07547 #endif 07548 (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val)); 07549 07550 ;} 07551 break; 07552 07553 case 287: 07554 #line 2691 "ripper.y" 07555 { 07556 #if 0 07557 if ((yyvsp[(2) - (3)].val) == 0) { 07558 (yyval.val) = NEW_ZARRAY(); /* zero length array*/ 07559 } 07560 else { 07561 (yyval.val) = (yyvsp[(2) - (3)].val); 07562 } 07563 #endif 07564 (yyval.val) = dispatch1(array, escape_Qundef((yyvsp[(2) - (3)].val))); 07565 07566 ;} 07567 break; 07568 07569 case 288: 07570 #line 2704 "ripper.y" 07571 { 07572 #if 0 07573 (yyval.val) = NEW_HASH((yyvsp[(2) - (3)].val)); 07574 #endif 07575 (yyval.val) = dispatch1(hash, escape_Qundef((yyvsp[(2) - (3)].val))); 07576 07577 ;} 07578 break; 07579 07580 case 289: 07581 #line 2712 "ripper.y" 07582 { 07583 #if 0 07584 (yyval.val) = NEW_RETURN(0); 07585 #endif 07586 (yyval.val) = dispatch0(return0); 07587 07588 ;} 07589 break; 07590 07591 case 290: 07592 #line 2720 "ripper.y" 07593 { 07594 #if 0 07595 (yyval.val) = new_yield((yyvsp[(3) - (4)].val)); 07596 #endif 07597 (yyval.val) = dispatch1(yield, dispatch1(paren, (yyvsp[(3) - (4)].val))); 07598 07599 ;} 07600 break; 07601 07602 case 291: 07603 #line 2728 "ripper.y" 07604 { 07605 #if 0 07606 (yyval.val) = NEW_YIELD(0, Qfalse); 07607 #endif 07608 (yyval.val) = dispatch1(yield, dispatch1(paren, arg_new())); 07609 07610 ;} 07611 break; 07612 07613 case 292: 07614 #line 2736 "ripper.y" 07615 { 07616 #if 0 07617 (yyval.val) = NEW_YIELD(0, Qfalse); 07618 #endif 07619 (yyval.val) = dispatch0(yield0); 07620 07621 ;} 07622 break; 07623 07624 case 293: 07625 #line 2743 "ripper.y" 07626 {in_defined = 1;;} 07627 break; 07628 07629 case 294: 07630 #line 2744 "ripper.y" 07631 { 07632 #if 0 07633 in_defined = 0; 07634 (yyval.val) = NEW_DEFINED((yyvsp[(5) - (6)].val)); 07635 #endif 07636 in_defined = 0; 07637 (yyval.val) = dispatch1(defined, (yyvsp[(5) - (6)].val)); 07638 07639 ;} 07640 break; 07641 07642 case 295: 07643 #line 2754 "ripper.y" 07644 { 07645 #if 0 07646 (yyval.val) = call_uni_op(cond((yyvsp[(3) - (4)].val)), '!'); 07647 #endif 07648 (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (4)].val)); 07649 07650 ;} 07651 break; 07652 07653 case 296: 07654 #line 2762 "ripper.y" 07655 { 07656 #if 0 07657 (yyval.val) = call_uni_op(cond(NEW_NIL()), '!'); 07658 #endif 07659 (yyval.val) = dispatch2(unary, ripper_intern("not"), Qnil); 07660 07661 ;} 07662 break; 07663 07664 case 297: 07665 #line 2770 "ripper.y" 07666 { 07667 #if 0 07668 (yyvsp[(2) - (2)].val)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].val), 0); 07669 (yyval.val) = (yyvsp[(2) - (2)].val); 07670 fixpos((yyvsp[(2) - (2)].val)->nd_iter, (yyvsp[(2) - (2)].val)); 07671 #endif 07672 (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), arg_new()); 07673 (yyval.val) = method_add_block((yyval.val), (yyvsp[(2) - (2)].val)); 07674 07675 ;} 07676 break; 07677 07678 case 299: 07679 #line 2782 "ripper.y" 07680 { 07681 #if 0 07682 block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val)); 07683 (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val); 07684 (yyval.val) = (yyvsp[(2) - (2)].val); 07685 fixpos((yyval.val), (yyvsp[(1) - (2)].val)); 07686 #endif 07687 (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 07688 07689 ;} 07690 break; 07691 07692 case 300: 07693 #line 2793 "ripper.y" 07694 { 07695 (yyval.val) = (yyvsp[(2) - (2)].val); 07696 ;} 07697 break; 07698 07699 case 301: 07700 #line 2800 "ripper.y" 07701 { 07702 #if 0 07703 (yyval.val) = NEW_IF(cond((yyvsp[(2) - (6)].val)), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val)); 07704 fixpos((yyval.val), (yyvsp[(2) - (6)].val)); 07705 #endif 07706 (yyval.val) = dispatch3(if, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val))); 07707 07708 ;} 07709 break; 07710 07711 case 302: 07712 #line 2812 "ripper.y" 07713 { 07714 #if 0 07715 (yyval.val) = NEW_UNLESS(cond((yyvsp[(2) - (6)].val)), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val)); 07716 fixpos((yyval.val), (yyvsp[(2) - (6)].val)); 07717 #endif 07718 (yyval.val) = dispatch3(unless, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val))); 07719 07720 ;} 07721 break; 07722 07723 case 303: 07724 #line 2820 "ripper.y" 07725 {COND_PUSH(1);;} 07726 break; 07727 07728 case 304: 07729 #line 2820 "ripper.y" 07730 {COND_POP();;} 07731 break; 07732 07733 case 305: 07734 #line 2823 "ripper.y" 07735 { 07736 #if 0 07737 (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1); 07738 fixpos((yyval.val), (yyvsp[(3) - (7)].val)); 07739 #endif 07740 (yyval.val) = dispatch2(while, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val)); 07741 07742 ;} 07743 break; 07744 07745 case 306: 07746 #line 2831 "ripper.y" 07747 {COND_PUSH(1);;} 07748 break; 07749 07750 case 307: 07751 #line 2831 "ripper.y" 07752 {COND_POP();;} 07753 break; 07754 07755 case 308: 07756 #line 2834 "ripper.y" 07757 { 07758 #if 0 07759 (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1); 07760 fixpos((yyval.val), (yyvsp[(3) - (7)].val)); 07761 #endif 07762 (yyval.val) = dispatch2(until, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val)); 07763 07764 ;} 07765 break; 07766 07767 case 309: 07768 #line 2845 "ripper.y" 07769 { 07770 #if 0 07771 (yyval.val) = NEW_CASE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val)); 07772 fixpos((yyval.val), (yyvsp[(2) - (5)].val)); 07773 #endif 07774 (yyval.val) = dispatch2(case, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val)); 07775 07776 ;} 07777 break; 07778 07779 case 310: 07780 #line 2854 "ripper.y" 07781 { 07782 #if 0 07783 (yyval.val) = NEW_CASE(0, (yyvsp[(3) - (4)].val)); 07784 #endif 07785 (yyval.val) = dispatch2(case, Qnil, (yyvsp[(3) - (4)].val)); 07786 07787 ;} 07788 break; 07789 07790 case 311: 07791 #line 2862 "ripper.y" 07792 {COND_PUSH(1);;} 07793 break; 07794 07795 case 312: 07796 #line 2864 "ripper.y" 07797 {COND_POP();;} 07798 break; 07799 07800 case 313: 07801 #line 2867 "ripper.y" 07802 { 07803 #if 0 07804 /* 07805 * for a, b, c in e 07806 * #=> 07807 * e.each{|*x| a, b, c = x 07808 * 07809 * for a in e 07810 * #=> 07811 * e.each{|x| a, = x} 07812 */ 07813 ID id = internal_id(); 07814 ID *tbl = ALLOC_N(ID, 2); 07815 NODE *m = NEW_ARGS_AUX(0, 0); 07816 NODE *args, *scope; 07817 07818 if (nd_type((yyvsp[(2) - (9)].val)) == NODE_MASGN) { 07819 /* if args.length == 1 && args[0].kind_of?(Array) 07820 * args = args[0] 07821 * end 07822 */ 07823 NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1))); 07824 NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0))); 07825 m->nd_next = block_append( 07826 NEW_IF( 07827 NEW_NODE(NODE_AND, 07828 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0), 07829 rb_intern("=="), one), 07830 NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero), 07831 rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))), 07832 0), 07833 NEW_DASGN_CURR(id, 07834 NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)), 07835 0), 07836 node_assign((yyvsp[(2) - (9)].val), NEW_DVAR(id))); 07837 07838 args = new_args(m, 0, id, 0, 0); 07839 } 07840 else { 07841 if (nd_type((yyvsp[(2) - (9)].val)) == NODE_LASGN || 07842 nd_type((yyvsp[(2) - (9)].val)) == NODE_DASGN || 07843 nd_type((yyvsp[(2) - (9)].val)) == NODE_DASGN_CURR) { 07844 (yyvsp[(2) - (9)].val)->nd_value = NEW_DVAR(id); 07845 m->nd_plen = 1; 07846 m->nd_next = (yyvsp[(2) - (9)].val); 07847 args = new_args(m, 0, 0, 0, 0); 07848 } 07849 else { 07850 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].val)), 0), NEW_DVAR(id)); 07851 args = new_args(m, 0, id, 0, 0); 07852 } 07853 } 07854 scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].val), args); 07855 tbl[0] = 1; tbl[1] = id; 07856 (yyval.val) = NEW_FOR(0, (yyvsp[(5) - (9)].val), scope); 07857 fixpos((yyval.val), (yyvsp[(2) - (9)].val)); 07858 #endif 07859 (yyval.val) = dispatch3(for, (yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(8) - (9)].val)); 07860 07861 ;} 07862 break; 07863 07864 case 314: 07865 #line 2928 "ripper.y" 07866 { 07867 if (in_def || in_single) 07868 yyerror("class definition in method body"); 07869 local_push(0); 07870 #if 0 07871 (yyval.num) = ruby_sourceline; 07872 #endif 07873 07874 ;} 07875 break; 07876 07877 case 315: 07878 #line 2939 "ripper.y" 07879 { 07880 #if 0 07881 (yyval.val) = NEW_CLASS((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(3) - (6)].val)); 07882 nd_set_line((yyval.val), (yyvsp[(4) - (6)].num)); 07883 #endif 07884 (yyval.val) = dispatch3(class, (yyvsp[(2) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val)); 07885 07886 local_pop(); 07887 ;} 07888 break; 07889 07890 case 316: 07891 #line 2949 "ripper.y" 07892 { 07893 (yyval.num) = in_def; 07894 in_def = 0; 07895 ;} 07896 break; 07897 07898 case 317: 07899 #line 2954 "ripper.y" 07900 { 07901 (yyval.num) = in_single; 07902 in_single = 0; 07903 local_push(0); 07904 ;} 07905 break; 07906 07907 case 318: 07908 #line 2961 "ripper.y" 07909 { 07910 #if 0 07911 (yyval.val) = NEW_SCLASS((yyvsp[(3) - (8)].val), (yyvsp[(7) - (8)].val)); 07912 fixpos((yyval.val), (yyvsp[(3) - (8)].val)); 07913 #endif 07914 (yyval.val) = dispatch2(sclass, (yyvsp[(3) - (8)].val), (yyvsp[(7) - (8)].val)); 07915 07916 local_pop(); 07917 in_def = (yyvsp[(4) - (8)].num); 07918 in_single = (yyvsp[(6) - (8)].num); 07919 ;} 07920 break; 07921 07922 case 319: 07923 #line 2973 "ripper.y" 07924 { 07925 if (in_def || in_single) 07926 yyerror("module definition in method body"); 07927 local_push(0); 07928 #if 0 07929 (yyval.num) = ruby_sourceline; 07930 #endif 07931 07932 ;} 07933 break; 07934 07935 case 320: 07936 #line 2984 "ripper.y" 07937 { 07938 #if 0 07939 (yyval.val) = NEW_MODULE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val)); 07940 nd_set_line((yyval.val), (yyvsp[(3) - (5)].num)); 07941 #endif 07942 (yyval.val) = dispatch2(module, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val)); 07943 07944 local_pop(); 07945 ;} 07946 break; 07947 07948 case 321: 07949 #line 2994 "ripper.y" 07950 { 07951 (yyval.id) = cur_mid; 07952 cur_mid = (yyvsp[(2) - (2)].val); 07953 in_def++; 07954 local_push(0); 07955 ;} 07956 break; 07957 07958 case 322: 07959 #line 3003 "ripper.y" 07960 { 07961 #if 0 07962 NODE *body = remove_begin((yyvsp[(5) - (6)].val)); 07963 reduce_nodes(&body); 07964 (yyval.val) = NEW_DEFN((yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), body, NOEX_PRIVATE); 07965 nd_set_line((yyval.val), (yyvsp[(1) - (6)].num)); 07966 #endif 07967 (yyval.val) = dispatch3(def, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val)); 07968 07969 local_pop(); 07970 in_def--; 07971 cur_mid = (yyvsp[(3) - (6)].id); 07972 ;} 07973 break; 07974 07975 case 323: 07976 #line 3016 "ripper.y" 07977 {lex_state = EXPR_FNAME;;} 07978 break; 07979 07980 case 324: 07981 #line 3017 "ripper.y" 07982 { 07983 in_single++; 07984 lex_state = EXPR_ENDFN; /* force for args */ 07985 local_push(0); 07986 ;} 07987 break; 07988 07989 case 325: 07990 #line 3025 "ripper.y" 07991 { 07992 #if 0 07993 NODE *body = remove_begin((yyvsp[(8) - (9)].val)); 07994 reduce_nodes(&body); 07995 (yyval.val) = NEW_DEFS((yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), body); 07996 nd_set_line((yyval.val), (yyvsp[(1) - (9)].num)); 07997 #endif 07998 (yyval.val) = dispatch5(defs, (yyvsp[(2) - (9)].val), (yyvsp[(3) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), (yyvsp[(8) - (9)].val)); 07999 08000 local_pop(); 08001 in_single--; 08002 ;} 08003 break; 08004 08005 case 326: 08006 #line 3038 "ripper.y" 08007 { 08008 #if 0 08009 (yyval.val) = NEW_BREAK(0); 08010 #endif 08011 (yyval.val) = dispatch1(break, arg_new()); 08012 08013 ;} 08014 break; 08015 08016 case 327: 08017 #line 3046 "ripper.y" 08018 { 08019 #if 0 08020 (yyval.val) = NEW_NEXT(0); 08021 #endif 08022 (yyval.val) = dispatch1(next, arg_new()); 08023 08024 ;} 08025 break; 08026 08027 case 328: 08028 #line 3054 "ripper.y" 08029 { 08030 #if 0 08031 (yyval.val) = NEW_REDO(); 08032 #endif 08033 (yyval.val) = dispatch0(redo); 08034 08035 ;} 08036 break; 08037 08038 case 329: 08039 #line 3062 "ripper.y" 08040 { 08041 #if 0 08042 (yyval.val) = NEW_RETRY(); 08043 #endif 08044 (yyval.val) = dispatch0(retry); 08045 08046 ;} 08047 break; 08048 08049 case 330: 08050 #line 3072 "ripper.y" 08051 { 08052 #if 0 08053 value_expr((yyvsp[(1) - (1)].val)); 08054 (yyval.val) = (yyvsp[(1) - (1)].val); 08055 if (!(yyval.val)) (yyval.val) = NEW_NIL(); 08056 #endif 08057 (yyval.val) = (yyvsp[(1) - (1)].val); 08058 08059 ;} 08060 break; 08061 08062 case 331: 08063 #line 3084 "ripper.y" 08064 { 08065 token_info_push("begin"); 08066 ;} 08067 break; 08068 08069 case 332: 08070 #line 3090 "ripper.y" 08071 { 08072 token_info_push("if"); 08073 ;} 08074 break; 08075 08076 case 333: 08077 #line 3096 "ripper.y" 08078 { 08079 token_info_push("unless"); 08080 ;} 08081 break; 08082 08083 case 334: 08084 #line 3102 "ripper.y" 08085 { 08086 token_info_push("while"); 08087 ;} 08088 break; 08089 08090 case 335: 08091 #line 3108 "ripper.y" 08092 { 08093 token_info_push("until"); 08094 ;} 08095 break; 08096 08097 case 336: 08098 #line 3114 "ripper.y" 08099 { 08100 token_info_push("case"); 08101 ;} 08102 break; 08103 08104 case 337: 08105 #line 3120 "ripper.y" 08106 { 08107 token_info_push("for"); 08108 ;} 08109 break; 08110 08111 case 338: 08112 #line 3126 "ripper.y" 08113 { 08114 token_info_push("class"); 08115 ;} 08116 break; 08117 08118 case 339: 08119 #line 3132 "ripper.y" 08120 { 08121 token_info_push("module"); 08122 ;} 08123 break; 08124 08125 case 340: 08126 #line 3138 "ripper.y" 08127 { 08128 token_info_push("def"); 08129 #if 0 08130 (yyval.num) = ruby_sourceline; 08131 #endif 08132 08133 ;} 08134 break; 08135 08136 case 341: 08137 #line 3148 "ripper.y" 08138 { 08139 token_info_pop("end"); 08140 ;} 08141 break; 08142 08143 case 342: 08144 #line 3156 "ripper.y" 08145 { (yyval.val) = Qnil; ;} 08146 break; 08147 08148 case 344: 08149 #line 3162 "ripper.y" 08150 { (yyval.val) = (yyvsp[(2) - (2)].val); ;} 08151 break; 08152 08153 case 345: 08154 #line 3169 "ripper.y" 08155 { (yyval.val) = Qnil; ;} 08156 break; 08157 08158 case 348: 08159 #line 3178 "ripper.y" 08160 { 08161 #if 0 08162 (yyval.val) = NEW_IF(cond((yyvsp[(2) - (5)].val)), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 08163 fixpos((yyval.val), (yyvsp[(2) - (5)].val)); 08164 #endif 08165 (yyval.val) = dispatch3(elsif, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val))); 08166 08167 ;} 08168 break; 08169 08170 case 350: 08171 #line 3190 "ripper.y" 08172 { 08173 #if 0 08174 (yyval.val) = (yyvsp[(2) - (2)].val); 08175 #endif 08176 (yyval.val) = dispatch1(else, (yyvsp[(2) - (2)].val)); 08177 08178 ;} 08179 break; 08180 08181 case 353: 08182 #line 3204 "ripper.y" 08183 { 08184 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 08185 #if 0 08186 #endif 08187 (yyval.val) = dispatch1(mlhs_paren, (yyval.val)); 08188 08189 ;} 08190 break; 08191 08192 case 354: 08193 #line 3212 "ripper.y" 08194 { 08195 #if 0 08196 (yyval.val) = (yyvsp[(2) - (3)].val); 08197 #endif 08198 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 08199 08200 ;} 08201 break; 08202 08203 case 355: 08204 #line 3222 "ripper.y" 08205 { 08206 #if 0 08207 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 08208 #endif 08209 (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val)); 08210 08211 ;} 08212 break; 08213 08214 case 356: 08215 #line 3230 "ripper.y" 08216 { 08217 #if 0 08218 (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 08219 #endif 08220 (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 08221 08222 ;} 08223 break; 08224 08225 case 357: 08226 #line 3240 "ripper.y" 08227 { 08228 #if 0 08229 (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0); 08230 #endif 08231 (yyval.val) = (yyvsp[(1) - (1)].val); 08232 08233 ;} 08234 break; 08235 08236 case 358: 08237 #line 3248 "ripper.y" 08238 { 08239 (yyval.val) = assignable((yyvsp[(4) - (4)].val), 0); 08240 #if 0 08241 (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), (yyval.val)); 08242 #endif 08243 (yyval.val) = mlhs_add_star((yyvsp[(1) - (4)].val), (yyval.val)); 08244 08245 ;} 08246 break; 08247 08248 case 359: 08249 #line 3257 "ripper.y" 08250 { 08251 (yyval.val) = assignable((yyvsp[(4) - (6)].val), 0); 08252 #if 0 08253 (yyval.val) = NEW_MASGN((yyvsp[(1) - (6)].val), NEW_POSTARG((yyval.val), (yyvsp[(6) - (6)].val))); 08254 #endif 08255 (yyval.val) = mlhs_add_star((yyvsp[(1) - (6)].val), (yyval.val)); 08256 08257 ;} 08258 break; 08259 08260 case 360: 08261 #line 3266 "ripper.y" 08262 { 08263 #if 0 08264 (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), -1); 08265 #endif 08266 (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), Qnil); 08267 08268 ;} 08269 break; 08270 08271 case 361: 08272 #line 3274 "ripper.y" 08273 { 08274 #if 0 08275 (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG(-1, (yyvsp[(5) - (5)].val))); 08276 #endif 08277 (yyval.val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val)); 08278 08279 ;} 08280 break; 08281 08282 case 362: 08283 #line 3282 "ripper.y" 08284 { 08285 (yyval.val) = assignable((yyvsp[(2) - (2)].val), 0); 08286 #if 0 08287 (yyval.val) = NEW_MASGN(0, (yyval.val)); 08288 #endif 08289 (yyval.val) = mlhs_add_star(mlhs_new(), (yyval.val)); 08290 08291 ;} 08292 break; 08293 08294 case 363: 08295 #line 3291 "ripper.y" 08296 { 08297 (yyval.val) = assignable((yyvsp[(2) - (4)].val), 0); 08298 #if 0 08299 (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyval.val), (yyvsp[(4) - (4)].val))); 08300 #endif 08301 #if 0 08302 TODO: Check me 08303 #endif 08304 (yyval.val) = mlhs_add_star((yyval.val), (yyvsp[(4) - (4)].val)); 08305 08306 ;} 08307 break; 08308 08309 case 364: 08310 #line 3303 "ripper.y" 08311 { 08312 #if 0 08313 (yyval.val) = NEW_MASGN(0, -1); 08314 #endif 08315 (yyval.val) = mlhs_add_star(mlhs_new(), Qnil); 08316 08317 ;} 08318 break; 08319 08320 case 365: 08321 #line 3311 "ripper.y" 08322 { 08323 #if 0 08324 (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val))); 08325 #endif 08326 (yyval.val) = mlhs_add_star(mlhs_new(), Qnil); 08327 08328 ;} 08329 break; 08330 08331 case 366: 08332 #line 3321 "ripper.y" 08333 { 08334 #if 0 08335 (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), 0, (yyvsp[(6) - (6)].val)); 08336 #endif 08337 (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnil, escape_Qundef((yyvsp[(6) - (6)].val))); 08338 08339 ;} 08340 break; 08341 08342 case 367: 08343 #line 3329 "ripper.y" 08344 { 08345 #if 0 08346 (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val)); 08347 #endif 08348 (yyval.val) = params_new((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), escape_Qundef((yyvsp[(8) - (8)].val))); 08349 08350 ;} 08351 break; 08352 08353 case 368: 08354 #line 3337 "ripper.y" 08355 { 08356 #if 0 08357 (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, 0, (yyvsp[(4) - (4)].val)); 08358 #endif 08359 (yyval.val) = params_new((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 08360 08361 ;} 08362 break; 08363 08364 case 369: 08365 #line 3345 "ripper.y" 08366 { 08367 #if 0 08368 (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), 0, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 08369 #endif 08370 (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnil, (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 08371 08372 ;} 08373 break; 08374 08375 case 370: 08376 #line 3353 "ripper.y" 08377 { 08378 #if 0 08379 (yyval.val) = new_args((yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val)); 08380 #endif 08381 (yyval.val) = params_new((yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 08382 08383 ;} 08384 break; 08385 08386 case 371: 08387 #line 3361 "ripper.y" 08388 { 08389 #if 0 08390 (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 1, 0, 0); 08391 #endif 08392 (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil, Qnil, Qnil, Qnil); 08393 dispatch1(excessed_comma, (yyval.val)); 08394 08395 ;} 08396 break; 08397 08398 case 372: 08399 #line 3370 "ripper.y" 08400 { 08401 #if 0 08402 (yyval.val) = new_args((yyvsp[(1) - (6)].val), 0, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 08403 #endif 08404 (yyval.val) = params_new((yyvsp[(1) - (6)].val), Qnil, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 08405 08406 ;} 08407 break; 08408 08409 case 373: 08410 #line 3378 "ripper.y" 08411 { 08412 #if 0 08413 (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 0, 0, (yyvsp[(2) - (2)].val)); 08414 #endif 08415 (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil,Qnil, Qnil, escape_Qundef((yyvsp[(2) - (2)].val))); 08416 08417 ;} 08418 break; 08419 08420 case 374: 08421 #line 3386 "ripper.y" 08422 { 08423 #if 0 08424 (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val)); 08425 #endif 08426 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 08427 08428 ;} 08429 break; 08430 08431 case 375: 08432 #line 3394 "ripper.y" 08433 { 08434 #if 0 08435 (yyval.val) = new_args(0, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 08436 #endif 08437 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 08438 08439 ;} 08440 break; 08441 08442 case 376: 08443 #line 3402 "ripper.y" 08444 { 08445 #if 0 08446 (yyval.val) = new_args(0, (yyvsp[(1) - (2)].val), 0, 0, (yyvsp[(2) - (2)].val)); 08447 #endif 08448 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (2)].val), Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val))); 08449 08450 ;} 08451 break; 08452 08453 case 377: 08454 #line 3410 "ripper.y" 08455 { 08456 #if 0 08457 (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08458 #endif 08459 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val))); 08460 08461 ;} 08462 break; 08463 08464 case 378: 08465 #line 3418 "ripper.y" 08466 { 08467 #if 0 08468 (yyval.val) = new_args(0, 0, (yyvsp[(1) - (2)].val), 0, (yyvsp[(2) - (2)].val)); 08469 #endif 08470 (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (2)].val), Qnil, escape_Qundef((yyvsp[(2) - (2)].val))); 08471 08472 ;} 08473 break; 08474 08475 case 379: 08476 #line 3426 "ripper.y" 08477 { 08478 #if 0 08479 (yyval.val) = new_args(0, 0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08480 #endif 08481 (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val))); 08482 08483 ;} 08484 break; 08485 08486 case 380: 08487 #line 3434 "ripper.y" 08488 { 08489 #if 0 08490 (yyval.val) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].val)); 08491 #endif 08492 (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, (yyvsp[(1) - (1)].val)); 08493 08494 ;} 08495 break; 08496 08497 case 382: 08498 #line 3445 "ripper.y" 08499 { 08500 command_start = TRUE; 08501 ;} 08502 break; 08503 08504 case 383: 08505 #line 3451 "ripper.y" 08506 { 08507 #if 0 08508 (yyval.val) = 0; 08509 #endif 08510 (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil), 08511 escape_Qundef((yyvsp[(2) - (3)].val))); 08512 08513 ;} 08514 break; 08515 08516 case 384: 08517 #line 3460 "ripper.y" 08518 { 08519 #if 0 08520 (yyval.val) = 0; 08521 #endif 08522 (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil), 08523 Qnil); 08524 08525 ;} 08526 break; 08527 08528 case 385: 08529 #line 3469 "ripper.y" 08530 { 08531 #if 0 08532 (yyval.val) = (yyvsp[(2) - (4)].val); 08533 #endif 08534 (yyval.val) = blockvar_new(escape_Qundef((yyvsp[(2) - (4)].val)), escape_Qundef((yyvsp[(3) - (4)].val))); 08535 08536 ;} 08537 break; 08538 08539 case 387: 08540 #line 3481 "ripper.y" 08541 { 08542 #if 0 08543 (yyval.val) = 0; 08544 #endif 08545 (yyval.val) = (yyvsp[(2) - (2)].val); 08546 08547 ;} 08548 break; 08549 08550 case 388: 08551 #line 3493 "ripper.y" 08552 { 08553 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 08554 ;} 08555 break; 08556 08557 case 389: 08558 #line 3500 "ripper.y" 08559 { 08560 rb_ary_push((yyval.val), (yyvsp[(3) - (3)].val)); 08561 ;} 08562 break; 08563 08564 case 390: 08565 #line 3507 "ripper.y" 08566 { 08567 new_bv(get_id((yyvsp[(1) - (1)].val))); 08568 #if 0 08569 #endif 08570 (yyval.val) = get_value((yyvsp[(1) - (1)].val)); 08571 08572 ;} 08573 break; 08574 08575 case 391: 08576 #line 3515 "ripper.y" 08577 { 08578 (yyval.val) = 0; 08579 ;} 08580 break; 08581 08582 case 392: 08583 #line 3520 "ripper.y" 08584 { 08585 (yyval.vars) = dyna_push(); 08586 ;} 08587 break; 08588 08589 case 393: 08590 #line 3523 "ripper.y" 08591 { 08592 (yyval.num) = lpar_beg; 08593 lpar_beg = ++paren_nest; 08594 ;} 08595 break; 08596 08597 case 394: 08598 #line 3529 "ripper.y" 08599 { 08600 lpar_beg = (yyvsp[(2) - (4)].num); 08601 #if 0 08602 (yyval.val) = (yyvsp[(3) - (4)].val); 08603 (yyval.val)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].val)->nd_head, (yyvsp[(4) - (4)].val)); 08604 #endif 08605 (yyval.val) = dispatch2(lambda, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08606 08607 dyna_pop((yyvsp[(1) - (4)].vars)); 08608 ;} 08609 break; 08610 08611 case 395: 08612 #line 3542 "ripper.y" 08613 { 08614 #if 0 08615 (yyval.val) = NEW_LAMBDA((yyvsp[(2) - (4)].val)); 08616 #endif 08617 (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val)); 08618 08619 ;} 08620 break; 08621 08622 case 396: 08623 #line 3550 "ripper.y" 08624 { 08625 #if 0 08626 (yyval.val) = NEW_LAMBDA((yyvsp[(1) - (1)].val)); 08627 #endif 08628 (yyval.val) = (yyvsp[(1) - (1)].val); 08629 08630 ;} 08631 break; 08632 08633 case 397: 08634 #line 3560 "ripper.y" 08635 { 08636 (yyval.val) = (yyvsp[(2) - (3)].val); 08637 ;} 08638 break; 08639 08640 case 398: 08641 #line 3564 "ripper.y" 08642 { 08643 (yyval.val) = (yyvsp[(2) - (3)].val); 08644 ;} 08645 break; 08646 08647 case 399: 08648 #line 3570 "ripper.y" 08649 { 08650 (yyvsp[(1) - (1)].vars) = dyna_push(); 08651 #if 0 08652 (yyval.num) = ruby_sourceline; 08653 #endif 08654 ;} 08655 break; 08656 08657 case 400: 08658 #line 3579 "ripper.y" 08659 { 08660 #if 0 08661 (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val)); 08662 nd_set_line((yyval.val), (yyvsp[(2) - (5)].num)); 08663 #endif 08664 (yyval.val) = dispatch2(do_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val)); 08665 08666 dyna_pop((yyvsp[(1) - (5)].vars)); 08667 ;} 08668 break; 08669 08670 case 401: 08671 #line 3591 "ripper.y" 08672 { 08673 #if 0 08674 if (nd_type((yyvsp[(1) - (2)].val)) == NODE_YIELD) { 08675 compile_error(PARSER_ARG "block given to yield"); 08676 } 08677 else { 08678 block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val)); 08679 } 08680 (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val); 08681 (yyval.val) = (yyvsp[(2) - (2)].val); 08682 fixpos((yyval.val), (yyvsp[(1) - (2)].val)); 08683 #endif 08684 (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 08685 08686 ;} 08687 break; 08688 08689 case 402: 08690 #line 3607 "ripper.y" 08691 { 08692 #if 0 08693 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08694 #endif 08695 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val)); 08696 (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val)); 08697 08698 ;} 08699 break; 08700 08701 case 403: 08702 #line 3616 "ripper.y" 08703 { 08704 #if 0 08705 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08706 #endif 08707 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val)); 08708 (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val)); 08709 08710 ;} 08711 break; 08712 08713 case 404: 08714 #line 3627 "ripper.y" 08715 { 08716 #if 0 08717 (yyval.val) = NEW_FCALL((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 08718 fixpos((yyval.val), (yyvsp[(2) - (2)].val)); 08719 #endif 08720 (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), (yyvsp[(2) - (2)].val)); 08721 08722 ;} 08723 break; 08724 08725 case 405: 08726 #line 3636 "ripper.y" 08727 { 08728 #if 0 08729 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08730 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 08731 #endif 08732 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val)); 08733 (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val)); 08734 08735 ;} 08736 break; 08737 08738 case 406: 08739 #line 3646 "ripper.y" 08740 { 08741 #if 0 08742 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 08743 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 08744 #endif 08745 (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val)); 08746 (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val)); 08747 08748 ;} 08749 break; 08750 08751 case 407: 08752 #line 3656 "ripper.y" 08753 { 08754 #if 0 08755 (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val), 0); 08756 #endif 08757 (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_intern("::"), (yyvsp[(3) - (3)].val)); 08758 08759 ;} 08760 break; 08761 08762 case 408: 08763 #line 3664 "ripper.y" 08764 { 08765 #if 0 08766 (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), rb_intern("call"), (yyvsp[(3) - (3)].val)); 08767 fixpos((yyval.val), (yyvsp[(1) - (3)].val)); 08768 #endif 08769 (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), 08770 ripper_intern("call")); 08771 (yyval.val) = method_optarg((yyval.val), (yyvsp[(3) - (3)].val)); 08772 08773 ;} 08774 break; 08775 08776 case 409: 08777 #line 3675 "ripper.y" 08778 { 08779 #if 0 08780 (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), rb_intern("call"), (yyvsp[(3) - (3)].val)); 08781 fixpos((yyval.val), (yyvsp[(1) - (3)].val)); 08782 #endif 08783 (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_intern("::"), 08784 ripper_intern("call")); 08785 (yyval.val) = method_optarg((yyval.val), (yyvsp[(3) - (3)].val)); 08786 08787 ;} 08788 break; 08789 08790 case 410: 08791 #line 3686 "ripper.y" 08792 { 08793 #if 0 08794 (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val)); 08795 #endif 08796 (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val)); 08797 08798 ;} 08799 break; 08800 08801 case 411: 08802 #line 3694 "ripper.y" 08803 { 08804 #if 0 08805 (yyval.val) = NEW_ZSUPER(); 08806 #endif 08807 (yyval.val) = dispatch0(zsuper); 08808 08809 ;} 08810 break; 08811 08812 case 412: 08813 #line 3702 "ripper.y" 08814 { 08815 #if 0 08816 if ((yyvsp[(1) - (4)].val) && nd_type((yyvsp[(1) - (4)].val)) == NODE_SELF) 08817 (yyval.val) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].val)); 08818 else 08819 (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), tAREF, (yyvsp[(3) - (4)].val)); 08820 fixpos((yyval.val), (yyvsp[(1) - (4)].val)); 08821 #endif 08822 (yyval.val) = dispatch2(aref, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val))); 08823 08824 ;} 08825 break; 08826 08827 case 413: 08828 #line 3716 "ripper.y" 08829 { 08830 (yyvsp[(1) - (1)].vars) = dyna_push(); 08831 #if 0 08832 (yyval.num) = ruby_sourceline; 08833 #endif 08834 08835 ;} 08836 break; 08837 08838 case 414: 08839 #line 3725 "ripper.y" 08840 { 08841 #if 0 08842 (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val)); 08843 nd_set_line((yyval.val), (yyvsp[(2) - (5)].num)); 08844 #endif 08845 (yyval.val) = dispatch2(brace_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val)); 08846 08847 dyna_pop((yyvsp[(1) - (5)].vars)); 08848 ;} 08849 break; 08850 08851 case 415: 08852 #line 3735 "ripper.y" 08853 { 08854 (yyvsp[(1) - (1)].vars) = dyna_push(); 08855 #if 0 08856 (yyval.num) = ruby_sourceline; 08857 #endif 08858 08859 ;} 08860 break; 08861 08862 case 416: 08863 #line 3744 "ripper.y" 08864 { 08865 #if 0 08866 (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val)); 08867 nd_set_line((yyval.val), (yyvsp[(2) - (5)].num)); 08868 #endif 08869 (yyval.val) = dispatch2(do_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val)); 08870 08871 dyna_pop((yyvsp[(1) - (5)].vars)); 08872 ;} 08873 break; 08874 08875 case 417: 08876 #line 3758 "ripper.y" 08877 { 08878 #if 0 08879 (yyval.val) = NEW_WHEN((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val)); 08880 #endif 08881 (yyval.val) = dispatch3(when, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val))); 08882 08883 ;} 08884 break; 08885 08886 case 420: 08887 #line 3774 "ripper.y" 08888 { 08889 #if 0 08890 if ((yyvsp[(3) - (6)].val)) { 08891 (yyvsp[(3) - (6)].val) = node_assign((yyvsp[(3) - (6)].val), NEW_ERRINFO()); 08892 (yyvsp[(5) - (6)].val) = block_append((yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val)); 08893 } 08894 (yyval.val) = NEW_RESBODY((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 08895 fixpos((yyval.val), (yyvsp[(2) - (6)].val)?(yyvsp[(2) - (6)].val):(yyvsp[(5) - (6)].val)); 08896 #endif 08897 (yyval.val) = dispatch4(rescue, 08898 escape_Qundef((yyvsp[(2) - (6)].val)), 08899 escape_Qundef((yyvsp[(3) - (6)].val)), 08900 escape_Qundef((yyvsp[(5) - (6)].val)), 08901 escape_Qundef((yyvsp[(6) - (6)].val))); 08902 08903 ;} 08904 break; 08905 08906 case 422: 08907 #line 3794 "ripper.y" 08908 { 08909 #if 0 08910 (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val)); 08911 #endif 08912 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 08913 08914 ;} 08915 break; 08916 08917 case 423: 08918 #line 3802 "ripper.y" 08919 { 08920 #if 0 08921 if (!((yyval.val) = splat_array((yyvsp[(1) - (1)].val)))) (yyval.val) = (yyvsp[(1) - (1)].val); 08922 #endif 08923 (yyval.val) = (yyvsp[(1) - (1)].val); 08924 08925 ;} 08926 break; 08927 08928 case 425: 08929 #line 3813 "ripper.y" 08930 { 08931 (yyval.val) = (yyvsp[(2) - (2)].val); 08932 ;} 08933 break; 08934 08935 case 427: 08936 #line 3820 "ripper.y" 08937 { 08938 #if 0 08939 (yyval.val) = (yyvsp[(2) - (2)].val); 08940 #endif 08941 (yyval.val) = dispatch1(ensure, (yyvsp[(2) - (2)].val)); 08942 08943 ;} 08944 break; 08945 08946 case 430: 08947 #line 3832 "ripper.y" 08948 { 08949 #if 0 08950 (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val))); 08951 #endif 08952 (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val)); 08953 08954 ;} 08955 break; 08956 08957 case 432: 08958 #line 3843 "ripper.y" 08959 { 08960 #if 0 08961 NODE *node = (yyvsp[(1) - (1)].val); 08962 if (!node) { 08963 node = NEW_STR(STR_NEW0()); 08964 } 08965 else { 08966 node = evstr2dstr(node); 08967 } 08968 (yyval.val) = node; 08969 #endif 08970 (yyval.val) = (yyvsp[(1) - (1)].val); 08971 08972 ;} 08973 break; 08974 08975 case 435: 08976 #line 3862 "ripper.y" 08977 { 08978 #if 0 08979 (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 08980 #endif 08981 (yyval.val) = dispatch2(string_concat, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 08982 08983 ;} 08984 break; 08985 08986 case 436: 08987 #line 3872 "ripper.y" 08988 { 08989 #if 0 08990 (yyval.val) = (yyvsp[(2) - (3)].val); 08991 #endif 08992 (yyval.val) = dispatch1(string_literal, (yyvsp[(2) - (3)].val)); 08993 08994 ;} 08995 break; 08996 08997 case 437: 08998 #line 3882 "ripper.y" 08999 { 09000 #if 0 09001 NODE *node = (yyvsp[(2) - (3)].val); 09002 if (!node) { 09003 node = NEW_XSTR(STR_NEW0()); 09004 } 09005 else { 09006 switch (nd_type(node)) { 09007 case NODE_STR: 09008 nd_set_type(node, NODE_XSTR); 09009 break; 09010 case NODE_DSTR: 09011 nd_set_type(node, NODE_DXSTR); 09012 break; 09013 default: 09014 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node)); 09015 break; 09016 } 09017 } 09018 (yyval.val) = node; 09019 #endif 09020 (yyval.val) = dispatch1(xstring_literal, (yyvsp[(2) - (3)].val)); 09021 09022 ;} 09023 break; 09024 09025 case 438: 09026 #line 3909 "ripper.y" 09027 { 09028 #if 0 09029 int options = (yyvsp[(3) - (3)].val); 09030 NODE *node = (yyvsp[(2) - (3)].val); 09031 NODE *list, *prev; 09032 if (!node) { 09033 node = NEW_LIT(reg_compile(STR_NEW0(), options)); 09034 } 09035 else switch (nd_type(node)) { 09036 case NODE_STR: 09037 { 09038 VALUE src = node->nd_lit; 09039 nd_set_type(node, NODE_LIT); 09040 node->nd_lit = reg_compile(src, options); 09041 } 09042 break; 09043 default: 09044 node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node)); 09045 case NODE_DSTR: 09046 if (options & RE_OPTION_ONCE) { 09047 nd_set_type(node, NODE_DREGX_ONCE); 09048 } 09049 else { 09050 nd_set_type(node, NODE_DREGX); 09051 } 09052 node->nd_cflag = options & RE_OPTION_MASK; 09053 if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options); 09054 for (list = (prev = node)->nd_next; list; list = list->nd_next) { 09055 if (nd_type(list->nd_head) == NODE_STR) { 09056 VALUE tail = list->nd_head->nd_lit; 09057 if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) { 09058 VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit; 09059 if (!literal_concat0(parser, lit, tail)) { 09060 node = 0; 09061 break; 09062 } 09063 rb_str_resize(tail, 0); 09064 prev->nd_next = list->nd_next; 09065 rb_gc_force_recycle((VALUE)list->nd_head); 09066 rb_gc_force_recycle((VALUE)list); 09067 list = prev; 09068 } 09069 else { 09070 prev = list; 09071 } 09072 } 09073 else { 09074 prev = 0; 09075 } 09076 } 09077 if (!node->nd_next) { 09078 VALUE src = node->nd_lit; 09079 nd_set_type(node, NODE_LIT); 09080 node->nd_lit = reg_compile(src, options); 09081 } 09082 break; 09083 } 09084 (yyval.val) = node; 09085 #endif 09086 (yyval.val) = dispatch2(regexp_literal, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val)); 09087 09088 ;} 09089 break; 09090 09091 case 439: 09092 #line 3974 "ripper.y" 09093 { 09094 #if 0 09095 (yyval.val) = NEW_ZARRAY(); 09096 #endif 09097 (yyval.val) = dispatch0(words_new); 09098 (yyval.val) = dispatch1(array, (yyval.val)); 09099 09100 ;} 09101 break; 09102 09103 case 440: 09104 #line 3983 "ripper.y" 09105 { 09106 #if 0 09107 (yyval.val) = (yyvsp[(2) - (3)].val); 09108 #endif 09109 (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val)); 09110 09111 ;} 09112 break; 09113 09114 case 441: 09115 #line 3993 "ripper.y" 09116 { 09117 #if 0 09118 (yyval.val) = 0; 09119 #endif 09120 (yyval.val) = dispatch0(words_new); 09121 09122 ;} 09123 break; 09124 09125 case 442: 09126 #line 4001 "ripper.y" 09127 { 09128 #if 0 09129 (yyval.val) = list_append((yyvsp[(1) - (3)].val), evstr2dstr((yyvsp[(2) - (3)].val))); 09130 #endif 09131 (yyval.val) = dispatch2(words_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 09132 09133 ;} 09134 break; 09135 09136 case 443: 09137 #line 4013 "ripper.y" 09138 { 09139 (yyval.val) = dispatch0(word_new); 09140 (yyval.val) = dispatch2(word_add, (yyval.val), (yyvsp[(1) - (1)].val)); 09141 ;} 09142 break; 09143 09144 case 444: 09145 #line 4019 "ripper.y" 09146 { 09147 #if 0 09148 (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09149 #endif 09150 (yyval.val) = dispatch2(word_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09151 09152 ;} 09153 break; 09154 09155 case 445: 09156 #line 4029 "ripper.y" 09157 { 09158 #if 0 09159 (yyval.val) = NEW_ZARRAY(); 09160 #endif 09161 (yyval.val) = dispatch0(qwords_new); 09162 (yyval.val) = dispatch1(array, (yyval.val)); 09163 09164 ;} 09165 break; 09166 09167 case 446: 09168 #line 4038 "ripper.y" 09169 { 09170 #if 0 09171 (yyval.val) = (yyvsp[(2) - (3)].val); 09172 #endif 09173 (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val)); 09174 09175 ;} 09176 break; 09177 09178 case 447: 09179 #line 4048 "ripper.y" 09180 { 09181 #if 0 09182 (yyval.val) = 0; 09183 #endif 09184 (yyval.val) = dispatch0(qwords_new); 09185 09186 ;} 09187 break; 09188 09189 case 448: 09190 #line 4056 "ripper.y" 09191 { 09192 #if 0 09193 (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 09194 #endif 09195 (yyval.val) = dispatch2(qwords_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val)); 09196 09197 ;} 09198 break; 09199 09200 case 449: 09201 #line 4066 "ripper.y" 09202 { 09203 #if 0 09204 (yyval.val) = 0; 09205 #endif 09206 (yyval.val) = dispatch0(string_content); 09207 09208 ;} 09209 break; 09210 09211 case 450: 09212 #line 4074 "ripper.y" 09213 { 09214 #if 0 09215 (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09216 #endif 09217 (yyval.val) = dispatch2(string_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09218 09219 ;} 09220 break; 09221 09222 case 451: 09223 #line 4084 "ripper.y" 09224 { 09225 #if 0 09226 (yyval.val) = 0; 09227 #endif 09228 (yyval.val) = dispatch0(xstring_new); 09229 09230 ;} 09231 break; 09232 09233 case 452: 09234 #line 4092 "ripper.y" 09235 { 09236 #if 0 09237 (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09238 #endif 09239 (yyval.val) = dispatch2(xstring_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09240 09241 ;} 09242 break; 09243 09244 case 453: 09245 #line 4102 "ripper.y" 09246 { 09247 #if 0 09248 (yyval.val) = 0; 09249 #endif 09250 (yyval.val) = dispatch0(regexp_new); 09251 09252 ;} 09253 break; 09254 09255 case 454: 09256 #line 4110 "ripper.y" 09257 { 09258 #if 0 09259 NODE *head = (yyvsp[(1) - (2)].val), *tail = (yyvsp[(2) - (2)].val); 09260 if (!head) { 09261 (yyval.val) = tail; 09262 } 09263 else if (!tail) { 09264 (yyval.val) = head; 09265 } 09266 else { 09267 switch (nd_type(head)) { 09268 case NODE_STR: 09269 nd_set_type(head, NODE_DSTR); 09270 break; 09271 case NODE_DSTR: 09272 break; 09273 default: 09274 head = list_append(NEW_DSTR(Qnil), head); 09275 break; 09276 } 09277 (yyval.val) = list_append(head, tail); 09278 } 09279 #endif 09280 (yyval.val) = dispatch2(regexp_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 09281 09282 ;} 09283 break; 09284 09285 case 456: 09286 #line 4140 "ripper.y" 09287 { 09288 (yyval.node) = lex_strterm; 09289 lex_strterm = 0; 09290 lex_state = EXPR_BEG; 09291 ;} 09292 break; 09293 09294 case 457: 09295 #line 4146 "ripper.y" 09296 { 09297 #if 0 09298 lex_strterm = (yyvsp[(2) - (3)].node); 09299 (yyval.val) = NEW_EVSTR((yyvsp[(3) - (3)].val)); 09300 #endif 09301 lex_strterm = (yyvsp[(2) - (3)].node); 09302 (yyval.val) = dispatch1(string_dvar, (yyvsp[(3) - (3)].val)); 09303 09304 ;} 09305 break; 09306 09307 case 458: 09308 #line 4156 "ripper.y" 09309 { 09310 (yyvsp[(1) - (1)].val) = cond_stack; 09311 (yyval.val) = cmdarg_stack; 09312 cond_stack = 0; 09313 cmdarg_stack = 0; 09314 ;} 09315 break; 09316 09317 case 459: 09318 #line 4162 "ripper.y" 09319 { 09320 (yyval.node) = lex_strterm; 09321 lex_strterm = 0; 09322 lex_state = EXPR_BEG; 09323 ;} 09324 break; 09325 09326 case 460: 09327 #line 4168 "ripper.y" 09328 { 09329 cond_stack = (yyvsp[(1) - (5)].val); 09330 cmdarg_stack = (yyvsp[(2) - (5)].val); 09331 lex_strterm = (yyvsp[(3) - (5)].node); 09332 #if 0 09333 if ((yyvsp[(4) - (5)].val)) (yyvsp[(4) - (5)].val)->flags &= ~NODE_FL_NEWLINE; 09334 (yyval.val) = new_evstr((yyvsp[(4) - (5)].val)); 09335 #endif 09336 (yyval.val) = dispatch1(string_embexpr, (yyvsp[(4) - (5)].val)); 09337 09338 ;} 09339 break; 09340 09341 case 461: 09342 #line 4182 "ripper.y" 09343 { 09344 #if 0 09345 (yyval.val) = NEW_GVAR((yyvsp[(1) - (1)].val)); 09346 #endif 09347 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09348 09349 ;} 09350 break; 09351 09352 case 462: 09353 #line 4190 "ripper.y" 09354 { 09355 #if 0 09356 (yyval.val) = NEW_IVAR((yyvsp[(1) - (1)].val)); 09357 #endif 09358 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09359 09360 ;} 09361 break; 09362 09363 case 463: 09364 #line 4198 "ripper.y" 09365 { 09366 #if 0 09367 (yyval.val) = NEW_CVAR((yyvsp[(1) - (1)].val)); 09368 #endif 09369 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09370 09371 ;} 09372 break; 09373 09374 case 465: 09375 #line 4209 "ripper.y" 09376 { 09377 lex_state = EXPR_END; 09378 #if 0 09379 (yyval.val) = (yyvsp[(2) - (2)].val); 09380 #endif 09381 (yyval.val) = dispatch1(symbol, (yyvsp[(2) - (2)].val)); 09382 09383 ;} 09384 break; 09385 09386 case 470: 09387 #line 4226 "ripper.y" 09388 { 09389 lex_state = EXPR_END; 09390 #if 0 09391 if (!((yyval.val) = (yyvsp[(2) - (3)].val))) { 09392 (yyval.val) = NEW_LIT(ID2SYM(rb_intern(""))); 09393 } 09394 else { 09395 VALUE lit; 09396 09397 switch (nd_type((yyval.val))) { 09398 case NODE_DSTR: 09399 nd_set_type((yyval.val), NODE_DSYM); 09400 break; 09401 case NODE_STR: 09402 lit = (yyval.val)->nd_lit; 09403 (yyval.val)->nd_lit = ID2SYM(rb_intern_str(lit)); 09404 nd_set_type((yyval.val), NODE_LIT); 09405 break; 09406 default: 09407 (yyval.val) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.val))); 09408 break; 09409 } 09410 } 09411 #endif 09412 (yyval.val) = dispatch1(dyna_symbol, (yyvsp[(2) - (3)].val)); 09413 09414 ;} 09415 break; 09416 09417 case 473: 09418 #line 4258 "ripper.y" 09419 { 09420 #if 0 09421 (yyval.val) = negate_lit((yyvsp[(2) - (2)].val)); 09422 #endif 09423 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val)); 09424 09425 ;} 09426 break; 09427 09428 case 474: 09429 #line 4266 "ripper.y" 09430 { 09431 #if 0 09432 (yyval.val) = negate_lit((yyvsp[(2) - (2)].val)); 09433 #endif 09434 (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val)); 09435 09436 ;} 09437 break; 09438 09439 case 480: 09440 #line 4282 "ripper.y" 09441 {ifndef_ripper((yyval.val) = keyword_nil);;} 09442 break; 09443 09444 case 481: 09445 #line 4283 "ripper.y" 09446 {ifndef_ripper((yyval.val) = keyword_self);;} 09447 break; 09448 09449 case 482: 09450 #line 4284 "ripper.y" 09451 {ifndef_ripper((yyval.val) = keyword_true);;} 09452 break; 09453 09454 case 483: 09455 #line 4285 "ripper.y" 09456 {ifndef_ripper((yyval.val) = keyword_false);;} 09457 break; 09458 09459 case 484: 09460 #line 4286 "ripper.y" 09461 {ifndef_ripper((yyval.val) = keyword__FILE__);;} 09462 break; 09463 09464 case 485: 09465 #line 4287 "ripper.y" 09466 {ifndef_ripper((yyval.val) = keyword__LINE__);;} 09467 break; 09468 09469 case 486: 09470 #line 4288 "ripper.y" 09471 {ifndef_ripper((yyval.val) = keyword__ENCODING__);;} 09472 break; 09473 09474 case 487: 09475 #line 4292 "ripper.y" 09476 { 09477 #if 0 09478 if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0); 09479 #endif 09480 if (id_is_var(get_id((yyvsp[(1) - (1)].val)))) { 09481 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09482 } 09483 else { 09484 (yyval.val) = dispatch1(vcall, (yyvsp[(1) - (1)].val)); 09485 } 09486 09487 ;} 09488 break; 09489 09490 case 488: 09491 #line 4305 "ripper.y" 09492 { 09493 #if 0 09494 if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0); 09495 #endif 09496 (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val)); 09497 09498 ;} 09499 break; 09500 09501 case 489: 09502 #line 4315 "ripper.y" 09503 { 09504 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 09505 #if 0 09506 #endif 09507 (yyval.val) = dispatch1(var_field, (yyval.val)); 09508 09509 ;} 09510 break; 09511 09512 case 490: 09513 #line 4323 "ripper.y" 09514 { 09515 (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0); 09516 #if 0 09517 #endif 09518 (yyval.val) = dispatch1(var_field, (yyval.val)); 09519 09520 ;} 09521 break; 09522 09523 case 493: 09524 #line 4337 "ripper.y" 09525 { 09526 #if 0 09527 (yyval.val) = 0; 09528 #endif 09529 (yyval.val) = Qnil; 09530 09531 ;} 09532 break; 09533 09534 case 494: 09535 #line 4345 "ripper.y" 09536 { 09537 lex_state = EXPR_BEG; 09538 ;} 09539 break; 09540 09541 case 495: 09542 #line 4349 "ripper.y" 09543 { 09544 (yyval.val) = (yyvsp[(3) - (4)].val); 09545 ;} 09546 break; 09547 09548 case 496: 09549 #line 4353 "ripper.y" 09550 { 09551 #if 0 09552 yyerrok; 09553 (yyval.val) = 0; 09554 #endif 09555 yyerrok; 09556 (yyval.val) = Qnil; 09557 09558 ;} 09559 break; 09560 09561 case 497: 09562 #line 4365 "ripper.y" 09563 { 09564 #if 0 09565 (yyval.val) = (yyvsp[(2) - (3)].val); 09566 #endif 09567 (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val)); 09568 09569 lex_state = EXPR_BEG; 09570 command_start = TRUE; 09571 ;} 09572 break; 09573 09574 case 498: 09575 #line 4375 "ripper.y" 09576 { 09577 (yyval.val) = (yyvsp[(1) - (2)].val); 09578 lex_state = EXPR_BEG; 09579 command_start = TRUE; 09580 ;} 09581 break; 09582 09583 case 499: 09584 #line 4383 "ripper.y" 09585 { 09586 #if 0 09587 (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), 0, (yyvsp[(6) - (6)].val)); 09588 #endif 09589 (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnil, escape_Qundef((yyvsp[(6) - (6)].val))); 09590 09591 ;} 09592 break; 09593 09594 case 500: 09595 #line 4391 "ripper.y" 09596 { 09597 #if 0 09598 (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val)); 09599 #endif 09600 (yyval.val) = params_new((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), escape_Qundef((yyvsp[(8) - (8)].val))); 09601 09602 ;} 09603 break; 09604 09605 case 501: 09606 #line 4399 "ripper.y" 09607 { 09608 #if 0 09609 (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, 0, (yyvsp[(4) - (4)].val)); 09610 #endif 09611 (yyval.val) = params_new((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 09612 09613 ;} 09614 break; 09615 09616 case 502: 09617 #line 4407 "ripper.y" 09618 { 09619 #if 0 09620 (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), 0, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 09621 #endif 09622 (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnil, (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 09623 09624 ;} 09625 break; 09626 09627 case 503: 09628 #line 4415 "ripper.y" 09629 { 09630 #if 0 09631 (yyval.val) = new_args((yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val)); 09632 #endif 09633 (yyval.val) = params_new((yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 09634 09635 ;} 09636 break; 09637 09638 case 504: 09639 #line 4423 "ripper.y" 09640 { 09641 #if 0 09642 (yyval.val) = new_args((yyvsp[(1) - (6)].val), 0, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 09643 #endif 09644 (yyval.val) = params_new((yyvsp[(1) - (6)].val), Qnil, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 09645 09646 ;} 09647 break; 09648 09649 case 505: 09650 #line 4431 "ripper.y" 09651 { 09652 #if 0 09653 (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 0, 0, (yyvsp[(2) - (2)].val)); 09654 #endif 09655 (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil, Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val))); 09656 09657 ;} 09658 break; 09659 09660 case 506: 09661 #line 4439 "ripper.y" 09662 { 09663 #if 0 09664 (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val)); 09665 #endif 09666 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val))); 09667 09668 ;} 09669 break; 09670 09671 case 507: 09672 #line 4447 "ripper.y" 09673 { 09674 #if 0 09675 (yyval.val) = new_args(0, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val)); 09676 #endif 09677 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val))); 09678 09679 ;} 09680 break; 09681 09682 case 508: 09683 #line 4455 "ripper.y" 09684 { 09685 #if 0 09686 (yyval.val) = new_args(0, (yyvsp[(1) - (2)].val), 0, 0, (yyvsp[(2) - (2)].val)); 09687 #endif 09688 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (2)].val), Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val))); 09689 09690 ;} 09691 break; 09692 09693 case 509: 09694 #line 4463 "ripper.y" 09695 { 09696 #if 0 09697 (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 09698 #endif 09699 (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val))); 09700 09701 ;} 09702 break; 09703 09704 case 510: 09705 #line 4471 "ripper.y" 09706 { 09707 #if 0 09708 (yyval.val) = new_args(0, 0, (yyvsp[(1) - (2)].val), 0, (yyvsp[(2) - (2)].val)); 09709 #endif 09710 (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (2)].val), Qnil,escape_Qundef((yyvsp[(2) - (2)].val))); 09711 09712 ;} 09713 break; 09714 09715 case 511: 09716 #line 4479 "ripper.y" 09717 { 09718 #if 0 09719 (yyval.val) = new_args(0, 0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val)); 09720 #endif 09721 (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val))); 09722 09723 ;} 09724 break; 09725 09726 case 512: 09727 #line 4487 "ripper.y" 09728 { 09729 #if 0 09730 (yyval.val) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].val)); 09731 #endif 09732 (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, (yyvsp[(1) - (1)].val)); 09733 09734 ;} 09735 break; 09736 09737 case 513: 09738 #line 4495 "ripper.y" 09739 { 09740 #if 0 09741 (yyval.val) = new_args(0, 0, 0, 0, 0); 09742 #endif 09743 (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, Qnil); 09744 09745 ;} 09746 break; 09747 09748 case 514: 09749 #line 4505 "ripper.y" 09750 { 09751 #if 0 09752 yyerror("formal argument cannot be a constant"); 09753 (yyval.val) = 0; 09754 #endif 09755 (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val)); 09756 09757 ;} 09758 break; 09759 09760 case 515: 09761 #line 4514 "ripper.y" 09762 { 09763 #if 0 09764 yyerror("formal argument cannot be an instance variable"); 09765 (yyval.val) = 0; 09766 #endif 09767 (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val)); 09768 09769 ;} 09770 break; 09771 09772 case 516: 09773 #line 4523 "ripper.y" 09774 { 09775 #if 0 09776 yyerror("formal argument cannot be a global variable"); 09777 (yyval.val) = 0; 09778 #endif 09779 (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val)); 09780 09781 ;} 09782 break; 09783 09784 case 517: 09785 #line 4532 "ripper.y" 09786 { 09787 #if 0 09788 yyerror("formal argument cannot be a class variable"); 09789 (yyval.val) = 0; 09790 #endif 09791 (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val)); 09792 09793 ;} 09794 break; 09795 09796 case 519: 09797 #line 4544 "ripper.y" 09798 { 09799 formal_argument(get_id((yyvsp[(1) - (1)].val))); 09800 (yyval.val) = (yyvsp[(1) - (1)].val); 09801 ;} 09802 break; 09803 09804 case 520: 09805 #line 4551 "ripper.y" 09806 { 09807 arg_var(get_id((yyvsp[(1) - (1)].val))); 09808 #if 0 09809 (yyval.val) = NEW_ARGS_AUX((yyvsp[(1) - (1)].val), 1); 09810 #endif 09811 (yyval.val) = get_value((yyvsp[(1) - (1)].val)); 09812 09813 ;} 09814 break; 09815 09816 case 521: 09817 #line 4560 "ripper.y" 09818 { 09819 ID tid = internal_id(); 09820 arg_var(tid); 09821 #if 0 09822 if (dyna_in_block()) { 09823 (yyvsp[(2) - (3)].val)->nd_value = NEW_DVAR(tid); 09824 } 09825 else { 09826 (yyvsp[(2) - (3)].val)->nd_value = NEW_LVAR(tid); 09827 } 09828 (yyval.val) = NEW_ARGS_AUX(tid, 1); 09829 (yyval.val)->nd_next = (yyvsp[(2) - (3)].val); 09830 #endif 09831 (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val)); 09832 09833 ;} 09834 break; 09835 09836 case 522: 09837 #line 4581 "ripper.y" 09838 { 09839 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 09840 ;} 09841 break; 09842 09843 case 523: 09844 #line 4586 "ripper.y" 09845 { 09846 #if 0 09847 (yyval.val) = (yyvsp[(1) - (3)].val); 09848 (yyval.val)->nd_plen++; 09849 (yyval.val)->nd_next = block_append((yyval.val)->nd_next, (yyvsp[(3) - (3)].val)->nd_next); 09850 rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].val)); 09851 #endif 09852 (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 09853 09854 ;} 09855 break; 09856 09857 case 524: 09858 #line 4599 "ripper.y" 09859 { 09860 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].val)))); 09861 (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 09862 #if 0 09863 (yyval.val) = NEW_OPT_ARG(0, (yyval.val)); 09864 #endif 09865 (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val)); 09866 09867 ;} 09868 break; 09869 09870 case 525: 09871 #line 4611 "ripper.y" 09872 { 09873 arg_var(formal_argument(get_id((yyvsp[(1) - (3)].val)))); 09874 (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 09875 #if 0 09876 (yyval.val) = NEW_OPT_ARG(0, (yyval.val)); 09877 #endif 09878 (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val)); 09879 09880 ;} 09881 break; 09882 09883 case 526: 09884 #line 4623 "ripper.y" 09885 { 09886 #if 0 09887 (yyval.val) = (yyvsp[(1) - (1)].val); 09888 #endif 09889 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 09890 09891 ;} 09892 break; 09893 09894 case 527: 09895 #line 4631 "ripper.y" 09896 { 09897 #if 0 09898 NODE *opts = (yyvsp[(1) - (3)].val); 09899 09900 while (opts->nd_next) { 09901 opts = opts->nd_next; 09902 } 09903 opts->nd_next = (yyvsp[(3) - (3)].val); 09904 (yyval.val) = (yyvsp[(1) - (3)].val); 09905 #endif 09906 (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 09907 09908 ;} 09909 break; 09910 09911 case 528: 09912 #line 4647 "ripper.y" 09913 { 09914 #if 0 09915 (yyval.val) = (yyvsp[(1) - (1)].val); 09916 #endif 09917 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 09918 09919 ;} 09920 break; 09921 09922 case 529: 09923 #line 4655 "ripper.y" 09924 { 09925 #if 0 09926 NODE *opts = (yyvsp[(1) - (3)].val); 09927 09928 while (opts->nd_next) { 09929 opts = opts->nd_next; 09930 } 09931 opts->nd_next = (yyvsp[(3) - (3)].val); 09932 (yyval.val) = (yyvsp[(1) - (3)].val); 09933 #endif 09934 (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 09935 09936 ;} 09937 break; 09938 09939 case 532: 09940 #line 4675 "ripper.y" 09941 { 09942 #if 0 09943 if (!is_local_id((yyvsp[(2) - (2)].val))) 09944 yyerror("rest argument must be local variable"); 09945 #endif 09946 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val)))); 09947 #if 0 09948 (yyval.val) = (yyvsp[(2) - (2)].val); 09949 #endif 09950 (yyval.val) = dispatch1(rest_param, (yyvsp[(2) - (2)].val)); 09951 09952 ;} 09953 break; 09954 09955 case 533: 09956 #line 4688 "ripper.y" 09957 { 09958 #if 0 09959 (yyval.val) = internal_id(); 09960 arg_var((yyval.val)); 09961 #endif 09962 (yyval.val) = dispatch1(rest_param, Qnil); 09963 09964 ;} 09965 break; 09966 09967 case 536: 09968 #line 4703 "ripper.y" 09969 { 09970 #if 0 09971 if (!is_local_id((yyvsp[(2) - (2)].val))) 09972 yyerror("block argument must be local variable"); 09973 else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].val))) 09974 yyerror("duplicated block argument name"); 09975 #endif 09976 arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val)))); 09977 #if 0 09978 (yyval.val) = (yyvsp[(2) - (2)].val); 09979 #endif 09980 (yyval.val) = dispatch1(blockarg, (yyvsp[(2) - (2)].val)); 09981 09982 ;} 09983 break; 09984 09985 case 537: 09986 #line 4720 "ripper.y" 09987 { 09988 (yyval.val) = (yyvsp[(2) - (2)].val); 09989 ;} 09990 break; 09991 09992 case 538: 09993 #line 4724 "ripper.y" 09994 { 09995 #if 0 09996 (yyval.val) = 0; 09997 #endif 09998 (yyval.val) = Qundef; 09999 10000 ;} 10001 break; 10002 10003 case 539: 10004 #line 4734 "ripper.y" 10005 { 10006 #if 0 10007 value_expr((yyvsp[(1) - (1)].val)); 10008 (yyval.val) = (yyvsp[(1) - (1)].val); 10009 if (!(yyval.val)) (yyval.val) = NEW_NIL(); 10010 #endif 10011 (yyval.val) = (yyvsp[(1) - (1)].val); 10012 10013 ;} 10014 break; 10015 10016 case 540: 10017 #line 4743 "ripper.y" 10018 {lex_state = EXPR_BEG;;} 10019 break; 10020 10021 case 541: 10022 #line 4744 "ripper.y" 10023 { 10024 #if 0 10025 if ((yyvsp[(3) - (4)].val) == 0) { 10026 yyerror("can't define singleton method for ()."); 10027 } 10028 else { 10029 switch (nd_type((yyvsp[(3) - (4)].val))) { 10030 case NODE_STR: 10031 case NODE_DSTR: 10032 case NODE_XSTR: 10033 case NODE_DXSTR: 10034 case NODE_DREGX: 10035 case NODE_LIT: 10036 case NODE_ARRAY: 10037 case NODE_ZARRAY: 10038 yyerror("can't define singleton method for literals"); 10039 default: 10040 value_expr((yyvsp[(3) - (4)].val)); 10041 break; 10042 } 10043 } 10044 (yyval.val) = (yyvsp[(3) - (4)].val); 10045 #endif 10046 (yyval.val) = dispatch1(paren, (yyvsp[(3) - (4)].val)); 10047 10048 ;} 10049 break; 10050 10051 case 543: 10052 #line 4774 "ripper.y" 10053 { 10054 #if 0 10055 (yyval.val) = (yyvsp[(1) - (2)].val); 10056 #endif 10057 (yyval.val) = dispatch1(assoclist_from_args, (yyvsp[(1) - (2)].val)); 10058 10059 ;} 10060 break; 10061 10062 case 544: 10063 #line 4786 "ripper.y" 10064 { 10065 (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val)); 10066 ;} 10067 break; 10068 10069 case 545: 10070 #line 4791 "ripper.y" 10071 { 10072 #if 0 10073 (yyval.val) = list_concat((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10074 #endif 10075 (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10076 10077 ;} 10078 break; 10079 10080 case 546: 10081 #line 4801 "ripper.y" 10082 { 10083 #if 0 10084 (yyval.val) = list_append(NEW_LIST((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val)); 10085 #endif 10086 (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)); 10087 10088 ;} 10089 break; 10090 10091 case 547: 10092 #line 4809 "ripper.y" 10093 { 10094 #if 0 10095 (yyval.val) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].val)))), (yyvsp[(2) - (2)].val)); 10096 #endif 10097 (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val)); 10098 10099 ;} 10100 break; 10101 10102 case 558: 10103 #line 4837 "ripper.y" 10104 { (yyval.val) = (yyvsp[(1) - (1)].val); ;} 10105 break; 10106 10107 case 559: 10108 #line 4842 "ripper.y" 10109 { (yyval.val) = (yyvsp[(1) - (1)].val); ;} 10110 break; 10111 10112 case 569: 10113 #line 4865 "ripper.y" 10114 {yyerrok;;} 10115 break; 10116 10117 case 572: 10118 #line 4870 "ripper.y" 10119 {yyerrok;;} 10120 break; 10121 10122 case 573: 10123 #line 4874 "ripper.y" 10124 { 10125 #if 0 10126 (yyval.val) = 0; 10127 #endif 10128 (yyval.val) = Qundef; 10129 10130 ;} 10131 break; 10132 10133 10134 /* Line 1267 of yacc.c. */ 10135 #line 10134 "parse.c" 10136 default: break; 10137 } 10138 YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc); 10139 10140 YYPOPSTACK (yylen); 10141 yylen = 0; 10142 YY_STACK_PRINT (yyss, yyssp); 10143 10144 *++yyvsp = yyval; 10145 10146 10147 /* Now `shift' the result of the reduction. Determine what state 10148 that goes to, based on the state we popped back to and the rule 10149 number reduced by. */ 10150 10151 yyn = yyr1[yyn]; 10152 10153 yystate = yypgoto[yyn - YYNTOKENS] + *yyssp; 10154 if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp) 10155 yystate = yytable[yystate]; 10156 else 10157 yystate = yydefgoto[yyn - YYNTOKENS]; 10158 10159 goto yynewstate; 10160 10161 10162 /*------------------------------------. 10163 | yyerrlab -- here on detecting error | 10164 `------------------------------------*/ 10165 yyerrlab: 10166 /* If not already recovering from an error, report this error. */ 10167 if (!yyerrstatus) 10168 { 10169 ++yynerrs; 10170 #if ! YYERROR_VERBOSE 10171 parser_yyerror (parser, YY_("syntax error")); 10172 #else 10173 { 10174 YYSIZE_T yysize = yysyntax_error (0, yystate, yychar); 10175 if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM) 10176 { 10177 YYSIZE_T yyalloc = 2 * yysize; 10178 if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM)) 10179 yyalloc = YYSTACK_ALLOC_MAXIMUM; 10180 if (yymsg != yymsgbuf) 10181 YYSTACK_FREE (yymsg); 10182 yymsg = (char *) YYSTACK_ALLOC (yyalloc); 10183 if (yymsg) 10184 yymsg_alloc = yyalloc; 10185 else 10186 { 10187 yymsg = yymsgbuf; 10188 yymsg_alloc = sizeof yymsgbuf; 10189 } 10190 } 10191 10192 if (0 < yysize && yysize <= yymsg_alloc) 10193 { 10194 (void) yysyntax_error (yymsg, yystate, yychar); 10195 parser_yyerror (parser, yymsg); 10196 } 10197 else 10198 { 10199 parser_yyerror (parser, YY_("syntax error")); 10200 if (yysize != 0) 10201 goto yyexhaustedlab; 10202 } 10203 } 10204 #endif 10205 } 10206 10207 10208 10209 if (yyerrstatus == 3) 10210 { 10211 /* If just tried and failed to reuse look-ahead token after an 10212 error, discard it. */ 10213 10214 if (yychar <= YYEOF) 10215 { 10216 /* Return failure if at end of input. */ 10217 if (yychar == YYEOF) 10218 YYABORT; 10219 } 10220 else 10221 { 10222 yydestruct ("Error: discarding", 10223 yytoken, &yylval, parser); 10224 yychar = YYEMPTY; 10225 } 10226 } 10227 10228 /* Else will try to reuse look-ahead token after shifting the error 10229 token. */ 10230 goto yyerrlab1; 10231 10232 10233 /*---------------------------------------------------. 10234 | yyerrorlab -- error raised explicitly by YYERROR. | 10235 `---------------------------------------------------*/ 10236 yyerrorlab: 10237 10238 /* Pacify compilers like GCC when the user code never invokes 10239 YYERROR and the label yyerrorlab therefore never appears in user 10240 code. */ 10241 if (/*CONSTCOND*/ 0) 10242 goto yyerrorlab; 10243 10244 /* Do not reclaim the symbols of the rule which action triggered 10245 this YYERROR. */ 10246 YYPOPSTACK (yylen); 10247 yylen = 0; 10248 YY_STACK_PRINT (yyss, yyssp); 10249 yystate = *yyssp; 10250 goto yyerrlab1; 10251 10252 10253 /*-------------------------------------------------------------. 10254 | yyerrlab1 -- common code for both syntax error and YYERROR. | 10255 `-------------------------------------------------------------*/ 10256 yyerrlab1: 10257 yyerrstatus = 3; /* Each real token shifted decrements this. */ 10258 10259 for (;;) 10260 { 10261 yyn = yypact[yystate]; 10262 if (yyn != YYPACT_NINF) 10263 { 10264 yyn += YYTERROR; 10265 if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR) 10266 { 10267 yyn = yytable[yyn]; 10268 if (0 < yyn) 10269 break; 10270 } 10271 } 10272 10273 /* Pop the current state because it cannot handle the error token. */ 10274 if (yyssp == yyss) 10275 YYABORT; 10276 10277 10278 yydestruct ("Error: popping", 10279 yystos[yystate], yyvsp, parser); 10280 YYPOPSTACK (1); 10281 yystate = *yyssp; 10282 YY_STACK_PRINT (yyss, yyssp); 10283 } 10284 10285 if (yyn == YYFINAL) 10286 YYACCEPT; 10287 10288 *++yyvsp = yylval; 10289 10290 10291 /* Shift the error token. */ 10292 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp); 10293 10294 yystate = yyn; 10295 goto yynewstate; 10296 10297 10298 /*-------------------------------------. 10299 | yyacceptlab -- YYACCEPT comes here. | 10300 `-------------------------------------*/ 10301 yyacceptlab: 10302 yyresult = 0; 10303 goto yyreturn; 10304 10305 /*-----------------------------------. 10306 | yyabortlab -- YYABORT comes here. | 10307 `-----------------------------------*/ 10308 yyabortlab: 10309 yyresult = 1; 10310 goto yyreturn; 10311 10312 #ifndef yyoverflow 10313 /*-------------------------------------------------. 10314 | yyexhaustedlab -- memory exhaustion comes here. | 10315 `-------------------------------------------------*/ 10316 yyexhaustedlab: 10317 parser_yyerror (parser, YY_("memory exhausted")); 10318 yyresult = 2; 10319 /* Fall through. */ 10320 #endif 10321 10322 yyreturn: 10323 if (yychar != YYEOF && yychar != YYEMPTY) 10324 yydestruct ("Cleanup: discarding lookahead", 10325 yytoken, &yylval, parser); 10326 /* Do not reclaim the symbols of the rule which action triggered 10327 this YYABORT or YYACCEPT. */ 10328 YYPOPSTACK (yylen); 10329 YY_STACK_PRINT (yyss, yyssp); 10330 while (yyssp != yyss) 10331 { 10332 yydestruct ("Cleanup: popping", 10333 yystos[*yyssp], yyvsp, parser); 10334 YYPOPSTACK (1); 10335 } 10336 #ifndef yyoverflow 10337 if (yyss != yyssa) 10338 YYSTACK_FREE (yyss); 10339 #endif 10340 #if YYERROR_VERBOSE 10341 if (yymsg != yymsgbuf) 10342 YYSTACK_FREE (yymsg); 10343 #endif 10344 /* Make sure YYID is used. */ 10345 return YYID (yyresult); 10346 } 10347 10348 10349 #line 4882 "ripper.y" 10350 10351 # undef parser 10352 # undef yylex 10353 # undef yylval 10354 # define yylval (*((YYSTYPE*)(parser->parser_yylval))) 10355 10356 static int parser_regx_options(struct parser_params*); 10357 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**); 10358 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc); 10359 static int parser_parse_string(struct parser_params*,NODE*); 10360 static int parser_here_document(struct parser_params*,NODE*); 10361 10362 10363 # define nextc() parser_nextc(parser) 10364 # define pushback(c) parser_pushback(parser, (c)) 10365 # define newtok() parser_newtok(parser) 10366 # define tokspace(n) parser_tokspace(parser, (n)) 10367 # define tokadd(c) parser_tokadd(parser, (c)) 10368 # define tok_hex(numlen) parser_tok_hex(parser, (numlen)) 10369 # define read_escape(flags,e) parser_read_escape(parser, (flags), (e)) 10370 # define tokadd_escape(e) parser_tokadd_escape(parser, (e)) 10371 # define regx_options() parser_regx_options(parser) 10372 # define tokadd_string(f,t,p,n,e) parser_tokadd_string(parser,(f),(t),(p),(n),(e)) 10373 # define parse_string(n) parser_parse_string(parser,(n)) 10374 # define tokaddmbc(c, enc) parser_tokaddmbc(parser, (c), (enc)) 10375 # define here_document(n) parser_here_document(parser,(n)) 10376 # define heredoc_identifier() parser_heredoc_identifier(parser) 10377 # define heredoc_restore(n) parser_heredoc_restore(parser,(n)) 10378 # define whole_match_p(e,l,i) parser_whole_match_p(parser,(e),(l),(i)) 10379 10380 #ifndef RIPPER 10381 # define set_yylval_str(x) (yylval.node = NEW_STR(x)) 10382 # define set_yylval_num(x) (yylval.num = (x)) 10383 # define set_yylval_id(x) (yylval.id = (x)) 10384 # define set_yylval_name(x) (yylval.id = (x)) 10385 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x)) 10386 # define set_yylval_node(x) (yylval.node = (x)) 10387 # define yylval_id() (yylval.id) 10388 #else 10389 static inline VALUE 10390 ripper_yylval_id(ID x) 10391 { 10392 return (VALUE)NEW_LASGN(x, ID2SYM(x)); 10393 } 10394 # define set_yylval_str(x) (void)(x) 10395 # define set_yylval_num(x) (void)(x) 10396 # define set_yylval_id(x) (void)(x) 10397 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x)) 10398 # define set_yylval_literal(x) (void)(x) 10399 # define set_yylval_node(x) (void)(x) 10400 # define yylval_id() yylval.id 10401 #endif 10402 10403 #ifndef RIPPER 10404 #define ripper_flush(p) (void)(p) 10405 #else 10406 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p) 10407 10408 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)) 10409 10410 static int 10411 ripper_has_scan_event(struct parser_params *parser) 10412 { 10413 10414 if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp"); 10415 return lex_p > parser->tokp; 10416 } 10417 10418 static VALUE 10419 ripper_scan_event_val(struct parser_params *parser, int t) 10420 { 10421 VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp); 10422 VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str); 10423 ripper_flush(parser); 10424 return rval; 10425 } 10426 10427 static void 10428 ripper_dispatch_scan_event(struct parser_params *parser, int t) 10429 { 10430 if (!ripper_has_scan_event(parser)) return; 10431 yylval_rval = ripper_scan_event_val(parser, t); 10432 } 10433 10434 static void 10435 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t) 10436 { 10437 if (!ripper_has_scan_event(parser)) return; 10438 (void)ripper_scan_event_val(parser, t); 10439 } 10440 10441 static void 10442 ripper_dispatch_delayed_token(struct parser_params *parser, int t) 10443 { 10444 int saved_line = ruby_sourceline; 10445 const char *saved_tokp = parser->tokp; 10446 10447 ruby_sourceline = parser->delayed_line; 10448 parser->tokp = lex_pbeg + parser->delayed_col; 10449 yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed); 10450 parser->delayed = Qnil; 10451 ruby_sourceline = saved_line; 10452 parser->tokp = saved_tokp; 10453 } 10454 #endif /* RIPPER */ 10455 10456 #include "ruby/regex.h" 10457 #include "ruby/util.h" 10458 10459 /* We remove any previous definition of `SIGN_EXTEND_CHAR', 10460 since ours (we hope) works properly with all combinations of 10461 machines, compilers, `char' and `unsigned char' argument types. 10462 (Per Bothner suggested the basic approach.) */ 10463 #undef SIGN_EXTEND_CHAR 10464 #if __STDC__ 10465 # define SIGN_EXTEND_CHAR(c) ((signed char)(c)) 10466 #else /* not __STDC__ */ 10467 /* As in Harbison and Steele. */ 10468 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128) 10469 #endif 10470 10471 #define parser_encoding_name() (parser->enc->name) 10472 #define parser_mbclen() mbclen((lex_p-1),lex_pend,parser->enc) 10473 #define parser_precise_mbclen() rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc) 10474 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p))) 10475 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc)) 10476 10477 #define parser_isascii() ISASCII(*(lex_p-1)) 10478 10479 #ifndef RIPPER 10480 static int 10481 token_info_get_column(struct parser_params *parser, const char *token) 10482 { 10483 int column = 1; 10484 const char *p, *pend = lex_p - strlen(token); 10485 for (p = lex_pbeg; p < pend; p++) { 10486 if (*p == '\t') { 10487 column = (((column - 1) / 8) + 1) * 8; 10488 } 10489 column++; 10490 } 10491 return column; 10492 } 10493 10494 static int 10495 token_info_has_nonspaces(struct parser_params *parser, const char *token) 10496 { 10497 const char *p, *pend = lex_p - strlen(token); 10498 for (p = lex_pbeg; p < pend; p++) { 10499 if (*p != ' ' && *p != '\t') { 10500 return 1; 10501 } 10502 } 10503 return 0; 10504 } 10505 10506 #undef token_info_push 10507 static void 10508 token_info_push(struct parser_params *parser, const char *token) 10509 { 10510 token_info *ptinfo; 10511 10512 if (!parser->parser_token_info_enabled) return; 10513 ptinfo = ALLOC(token_info); 10514 ptinfo->token = token; 10515 ptinfo->linenum = ruby_sourceline; 10516 ptinfo->column = token_info_get_column(parser, token); 10517 ptinfo->nonspc = token_info_has_nonspaces(parser, token); 10518 ptinfo->next = parser->parser_token_info; 10519 10520 parser->parser_token_info = ptinfo; 10521 } 10522 10523 #undef token_info_pop 10524 static void 10525 token_info_pop(struct parser_params *parser, const char *token) 10526 { 10527 int linenum; 10528 token_info *ptinfo = parser->parser_token_info; 10529 10530 if (!ptinfo) return; 10531 parser->parser_token_info = ptinfo->next; 10532 if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */ 10533 goto finish; 10534 } 10535 linenum = ruby_sourceline; 10536 if (linenum == ptinfo->linenum) { /* SKIP */ 10537 goto finish; 10538 } 10539 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */ 10540 goto finish; 10541 } 10542 if (parser->parser_token_info_enabled) { 10543 rb_compile_warn(ruby_sourcefile, linenum, 10544 "mismatched indentations at '%s' with '%s' at %d", 10545 token, ptinfo->token, ptinfo->linenum); 10546 } 10547 10548 finish: 10549 xfree(ptinfo); 10550 } 10551 #endif /* RIPPER */ 10552 10553 static int 10554 parser_yyerror(struct parser_params *parser, const char *msg) 10555 { 10556 #ifndef RIPPER 10557 const int max_line_margin = 30; 10558 const char *p, *pe; 10559 char *buf; 10560 long len; 10561 int i; 10562 10563 compile_error(PARSER_ARG "%s", msg); 10564 p = lex_p; 10565 while (lex_pbeg <= p) { 10566 if (*p == '\n') break; 10567 p--; 10568 } 10569 p++; 10570 10571 pe = lex_p; 10572 while (pe < lex_pend) { 10573 if (*pe == '\n') break; 10574 pe++; 10575 } 10576 10577 len = pe - p; 10578 if (len > 4) { 10579 char *p2; 10580 const char *pre = "", *post = ""; 10581 10582 if (len > max_line_margin * 2 + 10) { 10583 if (lex_p - p > max_line_margin) { 10584 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline)); 10585 pre = "..."; 10586 } 10587 if (pe - lex_p > max_line_margin) { 10588 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline)); 10589 post = "..."; 10590 } 10591 len = pe - p; 10592 } 10593 buf = ALLOCA_N(char, len+2); 10594 MEMCPY(buf, p, char, len); 10595 buf[len] = '\0'; 10596 rb_compile_error_append("%s%s%s", pre, buf, post); 10597 10598 i = (int)(lex_p - p); 10599 p2 = buf; pe = buf + len; 10600 10601 while (p2 < pe) { 10602 if (*p2 != '\t') *p2 = ' '; 10603 p2++; 10604 } 10605 buf[i] = '^'; 10606 buf[i+1] = '\0'; 10607 rb_compile_error_append("%s%s", pre, buf); 10608 } 10609 #else 10610 dispatch1(parse_error, STR_NEW2(msg)); 10611 #endif /* !RIPPER */ 10612 return 0; 10613 } 10614 10615 static void parser_prepare(struct parser_params *parser); 10616 10617 #ifndef RIPPER 10618 static VALUE 10619 debug_lines(const char *f) 10620 { 10621 ID script_lines; 10622 CONST_ID(script_lines, "SCRIPT_LINES__"); 10623 if (rb_const_defined_at(rb_cObject, script_lines)) { 10624 VALUE hash = rb_const_get_at(rb_cObject, script_lines); 10625 if (TYPE(hash) == T_HASH) { 10626 VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding()); 10627 VALUE lines = rb_ary_new(); 10628 rb_hash_aset(hash, fname, lines); 10629 return lines; 10630 } 10631 } 10632 return 0; 10633 } 10634 10635 static VALUE 10636 coverage(const char *f, int n) 10637 { 10638 VALUE coverages = rb_get_coverages(); 10639 if (RTEST(coverages) && RBASIC(coverages)->klass == 0) { 10640 VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding()); 10641 VALUE lines = rb_ary_new2(n); 10642 int i; 10643 RBASIC(lines)->klass = 0; 10644 for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil; 10645 RARRAY(lines)->as.heap.len = n; 10646 rb_hash_aset(coverages, fname, lines); 10647 return lines; 10648 } 10649 return 0; 10650 } 10651 10652 static int 10653 e_option_supplied(struct parser_params *parser) 10654 { 10655 return strcmp(ruby_sourcefile, "-e") == 0; 10656 } 10657 10658 static VALUE 10659 yycompile0(VALUE arg, int tracing) 10660 { 10661 int n; 10662 NODE *tree; 10663 struct parser_params *parser = (struct parser_params *)arg; 10664 10665 if (!compile_for_eval && rb_safe_level() == 0) { 10666 ruby_debug_lines = debug_lines(ruby_sourcefile); 10667 if (ruby_debug_lines && ruby_sourceline > 0) { 10668 VALUE str = STR_NEW0(); 10669 n = ruby_sourceline; 10670 do { 10671 rb_ary_push(ruby_debug_lines, str); 10672 } while (--n); 10673 } 10674 10675 if (!e_option_supplied(parser)) { 10676 ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline); 10677 } 10678 } 10679 10680 parser_prepare(parser); 10681 deferred_nodes = 0; 10682 #ifndef RIPPER 10683 parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose); 10684 #endif 10685 n = yyparse((void*)parser); 10686 ruby_debug_lines = 0; 10687 ruby_coverage = 0; 10688 compile_for_eval = 0; 10689 10690 lex_strterm = 0; 10691 lex_p = lex_pbeg = lex_pend = 0; 10692 lex_lastline = lex_nextline = 0; 10693 if (parser->nerr) { 10694 return 0; 10695 } 10696 tree = ruby_eval_tree; 10697 if (!tree) { 10698 tree = NEW_NIL(); 10699 } 10700 else if (ruby_eval_tree_begin) { 10701 tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body); 10702 } 10703 return (VALUE)tree; 10704 } 10705 10706 static NODE* 10707 yycompile(struct parser_params *parser, const char *f, int line) 10708 { 10709 ruby_sourcefile = ruby_strdup(f); 10710 ruby_sourceline = line - 1; 10711 return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE); 10712 } 10713 #endif /* !RIPPER */ 10714 10715 static rb_encoding * 10716 must_be_ascii_compatible(VALUE s) 10717 { 10718 rb_encoding *enc = rb_enc_get(s); 10719 if (!rb_enc_asciicompat(enc)) { 10720 rb_raise(rb_eArgError, "invalid source encoding"); 10721 } 10722 return enc; 10723 } 10724 10725 static VALUE 10726 lex_get_str(struct parser_params *parser, VALUE s) 10727 { 10728 char *beg, *end, *pend; 10729 rb_encoding *enc = must_be_ascii_compatible(s); 10730 10731 beg = RSTRING_PTR(s); 10732 if (lex_gets_ptr) { 10733 if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil; 10734 beg += lex_gets_ptr; 10735 } 10736 pend = RSTRING_PTR(s) + RSTRING_LEN(s); 10737 end = beg; 10738 while (end < pend) { 10739 if (*end++ == '\n') break; 10740 } 10741 lex_gets_ptr = end - RSTRING_PTR(s); 10742 return rb_enc_str_new(beg, end - beg, enc); 10743 } 10744 10745 static VALUE 10746 lex_getline(struct parser_params *parser) 10747 { 10748 VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input); 10749 if (NIL_P(line)) return line; 10750 must_be_ascii_compatible(line); 10751 #ifndef RIPPER 10752 if (ruby_debug_lines) { 10753 rb_enc_associate(line, parser->enc); 10754 rb_ary_push(ruby_debug_lines, line); 10755 } 10756 if (ruby_coverage) { 10757 rb_ary_push(ruby_coverage, Qnil); 10758 } 10759 #endif 10760 return line; 10761 } 10762 10763 #ifdef RIPPER 10764 static rb_data_type_t parser_data_type; 10765 #else 10766 static const rb_data_type_t parser_data_type; 10767 10768 static NODE* 10769 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 10770 { 10771 struct parser_params *parser; 10772 NODE *node; 10773 volatile VALUE tmp; 10774 10775 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 10776 lex_gets = lex_get_str; 10777 lex_gets_ptr = 0; 10778 lex_input = s; 10779 lex_pbeg = lex_p = lex_pend = 0; 10780 compile_for_eval = rb_parse_in_eval(); 10781 10782 node = yycompile(parser, f, line); 10783 tmp = vparser; /* prohibit tail call optimization */ 10784 10785 return node; 10786 } 10787 10788 NODE* 10789 rb_compile_string(const char *f, VALUE s, int line) 10790 { 10791 must_be_ascii_compatible(s); 10792 return parser_compile_string(rb_parser_new(), f, s, line); 10793 } 10794 10795 NODE* 10796 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line) 10797 { 10798 must_be_ascii_compatible(s); 10799 return parser_compile_string(vparser, f, s, line); 10800 } 10801 10802 NODE* 10803 rb_compile_cstr(const char *f, const char *s, int len, int line) 10804 { 10805 VALUE str = rb_str_new(s, len); 10806 return parser_compile_string(rb_parser_new(), f, str, line); 10807 } 10808 10809 NODE* 10810 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line) 10811 { 10812 VALUE str = rb_str_new(s, len); 10813 return parser_compile_string(vparser, f, str, line); 10814 } 10815 10816 static VALUE 10817 lex_io_gets(struct parser_params *parser, VALUE io) 10818 { 10819 return rb_io_gets(io); 10820 } 10821 10822 NODE* 10823 rb_compile_file(const char *f, VALUE file, int start) 10824 { 10825 VALUE volatile vparser = rb_parser_new(); 10826 10827 return rb_parser_compile_file(vparser, f, file, start); 10828 } 10829 10830 NODE* 10831 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start) 10832 { 10833 struct parser_params *parser; 10834 volatile VALUE tmp; 10835 NODE *node; 10836 10837 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 10838 lex_gets = lex_io_gets; 10839 lex_input = file; 10840 lex_pbeg = lex_p = lex_pend = 0; 10841 compile_for_eval = rb_parse_in_eval(); 10842 10843 node = yycompile(parser, f, start); 10844 tmp = vparser; /* prohibit tail call optimization */ 10845 10846 return node; 10847 } 10848 #endif /* !RIPPER */ 10849 10850 #define STR_FUNC_ESCAPE 0x01 10851 #define STR_FUNC_EXPAND 0x02 10852 #define STR_FUNC_REGEXP 0x04 10853 #define STR_FUNC_QWORDS 0x08 10854 #define STR_FUNC_SYMBOL 0x10 10855 #define STR_FUNC_INDENT 0x20 10856 10857 enum string_type { 10858 str_squote = (0), 10859 str_dquote = (STR_FUNC_EXPAND), 10860 str_xquote = (STR_FUNC_EXPAND), 10861 str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND), 10862 str_sword = (STR_FUNC_QWORDS), 10863 str_dword = (STR_FUNC_QWORDS|STR_FUNC_EXPAND), 10864 str_ssym = (STR_FUNC_SYMBOL), 10865 str_dsym = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND) 10866 }; 10867 10868 static VALUE 10869 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0) 10870 { 10871 VALUE str; 10872 10873 str = rb_enc_str_new(p, n, enc); 10874 if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) { 10875 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 10876 } 10877 else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) { 10878 rb_enc_associate(str, rb_ascii8bit_encoding()); 10879 } 10880 } 10881 10882 return str; 10883 } 10884 10885 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend) 10886 #define lex_eol_p() (lex_p >= lex_pend) 10887 #define peek(c) peek_n((c), 0) 10888 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n]) 10889 10890 static inline int 10891 parser_nextc(struct parser_params *parser) 10892 { 10893 int c; 10894 10895 if (lex_p == lex_pend) { 10896 VALUE v = lex_nextline; 10897 lex_nextline = 0; 10898 if (!v) { 10899 if (parser->eofp) 10900 return -1; 10901 10902 if (!lex_input || NIL_P(v = lex_getline(parser))) { 10903 parser->eofp = Qtrue; 10904 lex_goto_eol(parser); 10905 return -1; 10906 } 10907 } 10908 { 10909 #ifdef RIPPER 10910 if (parser->tokp < lex_pend) { 10911 if (NIL_P(parser->delayed)) { 10912 parser->delayed = rb_str_buf_new(1024); 10913 rb_enc_associate(parser->delayed, parser->enc); 10914 rb_str_buf_cat(parser->delayed, 10915 parser->tokp, lex_pend - parser->tokp); 10916 parser->delayed_line = ruby_sourceline; 10917 parser->delayed_col = (int)(parser->tokp - lex_pbeg); 10918 } 10919 else { 10920 rb_str_buf_cat(parser->delayed, 10921 parser->tokp, lex_pend - parser->tokp); 10922 } 10923 } 10924 #endif 10925 if (heredoc_end > 0) { 10926 ruby_sourceline = heredoc_end; 10927 heredoc_end = 0; 10928 } 10929 ruby_sourceline++; 10930 parser->line_count++; 10931 lex_pbeg = lex_p = RSTRING_PTR(v); 10932 lex_pend = lex_p + RSTRING_LEN(v); 10933 ripper_flush(parser); 10934 lex_lastline = v; 10935 } 10936 } 10937 c = (unsigned char)*lex_p++; 10938 if (c == '\r' && peek('\n')) { 10939 lex_p++; 10940 c = '\n'; 10941 } 10942 10943 return c; 10944 } 10945 10946 static void 10947 parser_pushback(struct parser_params *parser, int c) 10948 { 10949 if (c == -1) return; 10950 lex_p--; 10951 if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') { 10952 lex_p--; 10953 } 10954 } 10955 10956 #define was_bol() (lex_p == lex_pbeg + 1) 10957 10958 #define tokfix() (tokenbuf[tokidx]='\0') 10959 #define tok() tokenbuf 10960 #define toklen() tokidx 10961 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0) 10962 10963 static char* 10964 parser_newtok(struct parser_params *parser) 10965 { 10966 tokidx = 0; 10967 if (!tokenbuf) { 10968 toksiz = 60; 10969 tokenbuf = ALLOC_N(char, 60); 10970 } 10971 if (toksiz > 4096) { 10972 toksiz = 60; 10973 REALLOC_N(tokenbuf, char, 60); 10974 } 10975 return tokenbuf; 10976 } 10977 10978 static char * 10979 parser_tokspace(struct parser_params *parser, int n) 10980 { 10981 tokidx += n; 10982 10983 if (tokidx >= toksiz) { 10984 do {toksiz *= 2;} while (toksiz < tokidx); 10985 REALLOC_N(tokenbuf, char, toksiz); 10986 } 10987 return &tokenbuf[tokidx-n]; 10988 } 10989 10990 static void 10991 parser_tokadd(struct parser_params *parser, int c) 10992 { 10993 tokenbuf[tokidx++] = (char)c; 10994 if (tokidx >= toksiz) { 10995 toksiz *= 2; 10996 REALLOC_N(tokenbuf, char, toksiz); 10997 } 10998 } 10999 11000 static int 11001 parser_tok_hex(struct parser_params *parser, size_t *numlen) 11002 { 11003 int c; 11004 11005 c = scan_hex(lex_p, 2, numlen); 11006 if (!*numlen) { 11007 yyerror("invalid hex escape"); 11008 return 0; 11009 } 11010 lex_p += *numlen; 11011 return c; 11012 } 11013 11014 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n)) 11015 11016 static int 11017 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp, 11018 int string_literal, int symbol_literal, int regexp_literal) 11019 { 11020 /* 11021 * If string_literal is true, then we allow multiple codepoints 11022 * in \u{}, and add the codepoints to the current token. 11023 * Otherwise we're parsing a character literal and return a single 11024 * codepoint without adding it 11025 */ 11026 11027 int codepoint; 11028 size_t numlen; 11029 11030 if (regexp_literal) { tokadd('\\'); tokadd('u'); } 11031 11032 if (peek('{')) { /* handle \u{...} form */ 11033 do { 11034 if (regexp_literal) { tokadd(*lex_p); } 11035 nextc(); 11036 codepoint = scan_hex(lex_p, 6, &numlen); 11037 if (numlen == 0) { 11038 yyerror("invalid Unicode escape"); 11039 return 0; 11040 } 11041 if (codepoint > 0x10ffff) { 11042 yyerror("invalid Unicode codepoint (too large)"); 11043 return 0; 11044 } 11045 lex_p += numlen; 11046 if (regexp_literal) { 11047 tokcopy((int)numlen); 11048 } 11049 else if (codepoint >= 0x80) { 11050 *encp = UTF8_ENC(); 11051 if (string_literal) tokaddmbc(codepoint, *encp); 11052 } 11053 else if (string_literal) { 11054 tokadd(codepoint); 11055 } 11056 } while (string_literal && (peek(' ') || peek('\t'))); 11057 11058 if (!peek('}')) { 11059 yyerror("unterminated Unicode escape"); 11060 return 0; 11061 } 11062 11063 if (regexp_literal) { tokadd('}'); } 11064 nextc(); 11065 } 11066 else { /* handle \uxxxx form */ 11067 codepoint = scan_hex(lex_p, 4, &numlen); 11068 if (numlen < 4) { 11069 yyerror("invalid Unicode escape"); 11070 return 0; 11071 } 11072 lex_p += 4; 11073 if (regexp_literal) { 11074 tokcopy(4); 11075 } 11076 else if (codepoint >= 0x80) { 11077 *encp = UTF8_ENC(); 11078 if (string_literal) tokaddmbc(codepoint, *encp); 11079 } 11080 else if (string_literal) { 11081 tokadd(codepoint); 11082 } 11083 } 11084 11085 return codepoint; 11086 } 11087 11088 #define ESCAPE_CONTROL 1 11089 #define ESCAPE_META 2 11090 11091 static int 11092 parser_read_escape(struct parser_params *parser, int flags, 11093 rb_encoding **encp) 11094 { 11095 int c; 11096 size_t numlen; 11097 11098 switch (c = nextc()) { 11099 case '\\': /* Backslash */ 11100 return c; 11101 11102 case 'n': /* newline */ 11103 return '\n'; 11104 11105 case 't': /* horizontal tab */ 11106 return '\t'; 11107 11108 case 'r': /* carriage-return */ 11109 return '\r'; 11110 11111 case 'f': /* form-feed */ 11112 return '\f'; 11113 11114 case 'v': /* vertical tab */ 11115 return '\13'; 11116 11117 case 'a': /* alarm(bell) */ 11118 return '\007'; 11119 11120 case 'e': /* escape */ 11121 return 033; 11122 11123 case '0': case '1': case '2': case '3': /* octal constant */ 11124 case '4': case '5': case '6': case '7': 11125 pushback(c); 11126 c = scan_oct(lex_p, 3, &numlen); 11127 lex_p += numlen; 11128 return c; 11129 11130 case 'x': /* hex constant */ 11131 c = tok_hex(&numlen); 11132 if (numlen == 0) return 0; 11133 return c; 11134 11135 case 'b': /* backspace */ 11136 return '\010'; 11137 11138 case 's': /* space */ 11139 return ' '; 11140 11141 case 'M': 11142 if (flags & ESCAPE_META) goto eof; 11143 if ((c = nextc()) != '-') { 11144 pushback(c); 11145 goto eof; 11146 } 11147 if ((c = nextc()) == '\\') { 11148 if (peek('u')) goto eof; 11149 return read_escape(flags|ESCAPE_META, encp) | 0x80; 11150 } 11151 else if (c == -1 || !ISASCII(c)) goto eof; 11152 else { 11153 return ((c & 0xff) | 0x80); 11154 } 11155 11156 case 'C': 11157 if ((c = nextc()) != '-') { 11158 pushback(c); 11159 goto eof; 11160 } 11161 case 'c': 11162 if (flags & ESCAPE_CONTROL) goto eof; 11163 if ((c = nextc())== '\\') { 11164 if (peek('u')) goto eof; 11165 c = read_escape(flags|ESCAPE_CONTROL, encp); 11166 } 11167 else if (c == '?') 11168 return 0177; 11169 else if (c == -1 || !ISASCII(c)) goto eof; 11170 return c & 0x9f; 11171 11172 eof: 11173 case -1: 11174 yyerror("Invalid escape character syntax"); 11175 return '\0'; 11176 11177 default: 11178 return c; 11179 } 11180 } 11181 11182 static void 11183 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc) 11184 { 11185 int len = rb_enc_codelen(c, enc); 11186 rb_enc_mbcput(c, tokspace(len), enc); 11187 } 11188 11189 static int 11190 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp) 11191 { 11192 int c; 11193 int flags = 0; 11194 size_t numlen; 11195 11196 first: 11197 switch (c = nextc()) { 11198 case '\n': 11199 return 0; /* just ignore */ 11200 11201 case '0': case '1': case '2': case '3': /* octal constant */ 11202 case '4': case '5': case '6': case '7': 11203 { 11204 ruby_scan_oct(--lex_p, 3, &numlen); 11205 if (numlen == 0) goto eof; 11206 lex_p += numlen; 11207 tokcopy((int)numlen + 1); 11208 } 11209 return 0; 11210 11211 case 'x': /* hex constant */ 11212 { 11213 tok_hex(&numlen); 11214 if (numlen == 0) return -1; 11215 tokcopy((int)numlen + 2); 11216 } 11217 return 0; 11218 11219 case 'M': 11220 if (flags & ESCAPE_META) goto eof; 11221 if ((c = nextc()) != '-') { 11222 pushback(c); 11223 goto eof; 11224 } 11225 tokcopy(3); 11226 flags |= ESCAPE_META; 11227 goto escaped; 11228 11229 case 'C': 11230 if (flags & ESCAPE_CONTROL) goto eof; 11231 if ((c = nextc()) != '-') { 11232 pushback(c); 11233 goto eof; 11234 } 11235 tokcopy(3); 11236 goto escaped; 11237 11238 case 'c': 11239 if (flags & ESCAPE_CONTROL) goto eof; 11240 tokcopy(2); 11241 flags |= ESCAPE_CONTROL; 11242 escaped: 11243 if ((c = nextc()) == '\\') { 11244 goto first; 11245 } 11246 else if (c == -1) goto eof; 11247 tokadd(c); 11248 return 0; 11249 11250 eof: 11251 case -1: 11252 yyerror("Invalid escape character syntax"); 11253 return -1; 11254 11255 default: 11256 tokadd('\\'); 11257 tokadd(c); 11258 } 11259 return 0; 11260 } 11261 11262 static int 11263 parser_regx_options(struct parser_params *parser) 11264 { 11265 int kcode = 0; 11266 int kopt = 0; 11267 int options = 0; 11268 int c, opt, kc; 11269 11270 newtok(); 11271 while (c = nextc(), ISALPHA(c)) { 11272 if (c == 'o') { 11273 options |= RE_OPTION_ONCE; 11274 } 11275 else if (rb_char_to_option_kcode(c, &opt, &kc)) { 11276 if (kc >= 0) { 11277 if (kc != rb_ascii8bit_encindex()) kcode = c; 11278 kopt = opt; 11279 } 11280 else { 11281 options |= opt; 11282 } 11283 } 11284 else { 11285 tokadd(c); 11286 } 11287 } 11288 options |= kopt; 11289 pushback(c); 11290 if (toklen()) { 11291 tokfix(); 11292 compile_error(PARSER_ARG "unknown regexp option%s - %s", 11293 toklen() > 1 ? "s" : "", tok()); 11294 } 11295 return options | RE_OPTION_ENCODING(kcode); 11296 } 11297 11298 static void 11299 dispose_string(VALUE str) 11300 { 11301 /* TODO: should use another API? */ 11302 if (RBASIC(str)->flags & RSTRING_NOEMBED) 11303 xfree(RSTRING_PTR(str)); 11304 rb_gc_force_recycle(str); 11305 } 11306 11307 static int 11308 parser_tokadd_mbchar(struct parser_params *parser, int c) 11309 { 11310 int len = parser_precise_mbclen(); 11311 if (!MBCLEN_CHARFOUND_P(len)) { 11312 compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name()); 11313 return -1; 11314 } 11315 tokadd(c); 11316 lex_p += --len; 11317 if (len > 0) tokcopy(len); 11318 return c; 11319 } 11320 11321 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c)) 11322 11323 static int 11324 parser_tokadd_string(struct parser_params *parser, 11325 int func, int term, int paren, long *nest, 11326 rb_encoding **encp) 11327 { 11328 int c; 11329 int has_nonascii = 0; 11330 rb_encoding *enc = *encp; 11331 char *errbuf = 0; 11332 static const char mixed_msg[] = "%s mixed within %s source"; 11333 11334 #define mixed_error(enc1, enc2) if (!errbuf) { \ 11335 size_t len = sizeof(mixed_msg) - 4; \ 11336 len += strlen(rb_enc_name(enc1)); \ 11337 len += strlen(rb_enc_name(enc2)); \ 11338 errbuf = ALLOCA_N(char, len); \ 11339 snprintf(errbuf, len, mixed_msg, \ 11340 rb_enc_name(enc1), \ 11341 rb_enc_name(enc2)); \ 11342 yyerror(errbuf); \ 11343 } 11344 #define mixed_escape(beg, enc1, enc2) do { \ 11345 const char *pos = lex_p; \ 11346 lex_p = (beg); \ 11347 mixed_error((enc1), (enc2)); \ 11348 lex_p = pos; \ 11349 } while (0) 11350 11351 while ((c = nextc()) != -1) { 11352 if (paren && c == paren) { 11353 ++*nest; 11354 } 11355 else if (c == term) { 11356 if (!nest || !*nest) { 11357 pushback(c); 11358 break; 11359 } 11360 --*nest; 11361 } 11362 else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) { 11363 int c2 = *lex_p; 11364 if (c2 == '$' || c2 == '@' || c2 == '{') { 11365 pushback(c); 11366 break; 11367 } 11368 } 11369 else if (c == '\\') { 11370 const char *beg = lex_p - 1; 11371 c = nextc(); 11372 switch (c) { 11373 case '\n': 11374 if (func & STR_FUNC_QWORDS) break; 11375 if (func & STR_FUNC_EXPAND) continue; 11376 tokadd('\\'); 11377 break; 11378 11379 case '\\': 11380 if (func & STR_FUNC_ESCAPE) tokadd(c); 11381 break; 11382 11383 case 'u': 11384 if ((func & STR_FUNC_EXPAND) == 0) { 11385 tokadd('\\'); 11386 break; 11387 } 11388 parser_tokadd_utf8(parser, &enc, 1, 11389 func & STR_FUNC_SYMBOL, 11390 func & STR_FUNC_REGEXP); 11391 if (has_nonascii && enc != *encp) { 11392 mixed_escape(beg, enc, *encp); 11393 } 11394 continue; 11395 11396 default: 11397 if (c == -1) return -1; 11398 if (!ISASCII(c)) { 11399 if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\'); 11400 goto non_ascii; 11401 } 11402 if (func & STR_FUNC_REGEXP) { 11403 pushback(c); 11404 if ((c = tokadd_escape(&enc)) < 0) 11405 return -1; 11406 if (has_nonascii && enc != *encp) { 11407 mixed_escape(beg, enc, *encp); 11408 } 11409 continue; 11410 } 11411 else if (func & STR_FUNC_EXPAND) { 11412 pushback(c); 11413 if (func & STR_FUNC_ESCAPE) tokadd('\\'); 11414 c = read_escape(0, &enc); 11415 } 11416 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11417 /* ignore backslashed spaces in %w */ 11418 } 11419 else if (c != term && !(paren && c == paren)) { 11420 tokadd('\\'); 11421 pushback(c); 11422 continue; 11423 } 11424 } 11425 } 11426 else if (!parser_isascii()) { 11427 non_ascii: 11428 has_nonascii = 1; 11429 if (enc != *encp) { 11430 mixed_error(enc, *encp); 11431 continue; 11432 } 11433 if (tokadd_mbchar(c) == -1) return -1; 11434 continue; 11435 } 11436 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11437 pushback(c); 11438 break; 11439 } 11440 if (c & 0x80) { 11441 has_nonascii = 1; 11442 if (enc != *encp) { 11443 mixed_error(enc, *encp); 11444 continue; 11445 } 11446 } 11447 tokadd(c); 11448 } 11449 *encp = enc; 11450 return c; 11451 } 11452 11453 #define NEW_STRTERM(func, term, paren) \ 11454 rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0) 11455 11456 #ifdef RIPPER 11457 static void 11458 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc) 11459 { 11460 if (!NIL_P(parser->delayed)) { 11461 ptrdiff_t len = lex_p - parser->tokp; 11462 if (len > 0) { 11463 rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc); 11464 } 11465 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 11466 parser->tokp = lex_p; 11467 } 11468 } 11469 11470 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc)) 11471 #else 11472 #define flush_string_content(enc) ((void)(enc)) 11473 #endif 11474 11475 static int 11476 parser_parse_string(struct parser_params *parser, NODE *quote) 11477 { 11478 int func = (int)quote->nd_func; 11479 int term = nd_term(quote); 11480 int paren = nd_paren(quote); 11481 int c, space = 0; 11482 rb_encoding *enc = parser->enc; 11483 11484 if (func == -1) return tSTRING_END; 11485 c = nextc(); 11486 if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) { 11487 do {c = nextc();} while (ISSPACE(c)); 11488 space = 1; 11489 } 11490 if (c == term && !quote->nd_nest) { 11491 if (func & STR_FUNC_QWORDS) { 11492 quote->nd_func = -1; 11493 return ' '; 11494 } 11495 if (!(func & STR_FUNC_REGEXP)) return tSTRING_END; 11496 set_yylval_num(regx_options()); 11497 return tREGEXP_END; 11498 } 11499 if (space) { 11500 pushback(c); 11501 return ' '; 11502 } 11503 newtok(); 11504 if ((func & STR_FUNC_EXPAND) && c == '#') { 11505 switch (c = nextc()) { 11506 case '$': 11507 case '@': 11508 pushback(c); 11509 return tSTRING_DVAR; 11510 case '{': 11511 return tSTRING_DBEG; 11512 } 11513 tokadd('#'); 11514 } 11515 pushback(c); 11516 if (tokadd_string(func, term, paren, "e->nd_nest, 11517 &enc) == -1) { 11518 ruby_sourceline = nd_line(quote); 11519 if (func & STR_FUNC_REGEXP) { 11520 if (parser->eofp) 11521 compile_error(PARSER_ARG "unterminated regexp meets end of file"); 11522 return tREGEXP_END; 11523 } 11524 else { 11525 if (parser->eofp) 11526 compile_error(PARSER_ARG "unterminated string meets end of file"); 11527 return tSTRING_END; 11528 } 11529 } 11530 11531 tokfix(); 11532 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 11533 flush_string_content(enc); 11534 11535 return tSTRING_CONTENT; 11536 } 11537 11538 static int 11539 parser_heredoc_identifier(struct parser_params *parser) 11540 { 11541 int c = nextc(), term, func = 0; 11542 long len; 11543 11544 if (c == '-') { 11545 c = nextc(); 11546 func = STR_FUNC_INDENT; 11547 } 11548 switch (c) { 11549 case '\'': 11550 func |= str_squote; goto quoted; 11551 case '"': 11552 func |= str_dquote; goto quoted; 11553 case '`': 11554 func |= str_xquote; 11555 quoted: 11556 newtok(); 11557 tokadd(func); 11558 term = c; 11559 while ((c = nextc()) != -1 && c != term) { 11560 if (tokadd_mbchar(c) == -1) return 0; 11561 } 11562 if (c == -1) { 11563 compile_error(PARSER_ARG "unterminated here document identifier"); 11564 return 0; 11565 } 11566 break; 11567 11568 default: 11569 if (!parser_is_identchar()) { 11570 pushback(c); 11571 if (func & STR_FUNC_INDENT) { 11572 pushback('-'); 11573 } 11574 return 0; 11575 } 11576 newtok(); 11577 term = '"'; 11578 tokadd(func |= str_dquote); 11579 do { 11580 if (tokadd_mbchar(c) == -1) return 0; 11581 } while ((c = nextc()) != -1 && parser_is_identchar()); 11582 pushback(c); 11583 break; 11584 } 11585 11586 tokfix(); 11587 #ifdef RIPPER 11588 ripper_dispatch_scan_event(parser, tHEREDOC_BEG); 11589 #endif 11590 len = lex_p - lex_pbeg; 11591 lex_goto_eol(parser); 11592 lex_strterm = rb_node_newnode(NODE_HEREDOC, 11593 STR_NEW(tok(), toklen()), /* nd_lit */ 11594 len, /* nd_nth */ 11595 lex_lastline); /* nd_orig */ 11596 nd_set_line(lex_strterm, ruby_sourceline); 11597 ripper_flush(parser); 11598 return term == '`' ? tXSTRING_BEG : tSTRING_BEG; 11599 } 11600 11601 static void 11602 parser_heredoc_restore(struct parser_params *parser, NODE *here) 11603 { 11604 VALUE line; 11605 11606 line = here->nd_orig; 11607 lex_lastline = line; 11608 lex_pbeg = RSTRING_PTR(line); 11609 lex_pend = lex_pbeg + RSTRING_LEN(line); 11610 lex_p = lex_pbeg + here->nd_nth; 11611 heredoc_end = ruby_sourceline; 11612 ruby_sourceline = nd_line(here); 11613 dispose_string(here->nd_lit); 11614 rb_gc_force_recycle((VALUE)here); 11615 ripper_flush(parser); 11616 } 11617 11618 static int 11619 parser_whole_match_p(struct parser_params *parser, 11620 const char *eos, long len, int indent) 11621 { 11622 const char *p = lex_pbeg; 11623 long n; 11624 11625 if (indent) { 11626 while (*p && ISSPACE(*p)) p++; 11627 } 11628 n = lex_pend - (p + len); 11629 if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE; 11630 return strncmp(eos, p, len) == 0; 11631 } 11632 11633 #ifdef RIPPER 11634 static void 11635 ripper_dispatch_heredoc_end(struct parser_params *parser) 11636 { 11637 if (!NIL_P(parser->delayed)) 11638 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 11639 lex_goto_eol(parser); 11640 ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END); 11641 } 11642 11643 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser) 11644 #else 11645 #define dispatch_heredoc_end() ((void)0) 11646 #endif 11647 11648 static int 11649 parser_here_document(struct parser_params *parser, NODE *here) 11650 { 11651 int c, func, indent = 0; 11652 const char *eos, *p, *pend; 11653 long len; 11654 VALUE str = 0; 11655 rb_encoding *enc = parser->enc; 11656 11657 eos = RSTRING_PTR(here->nd_lit); 11658 len = RSTRING_LEN(here->nd_lit) - 1; 11659 indent = (func = *eos++) & STR_FUNC_INDENT; 11660 11661 if ((c = nextc()) == -1) { 11662 error: 11663 compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos); 11664 #ifdef RIPPER 11665 if (NIL_P(parser->delayed)) { 11666 ripper_dispatch_scan_event(parser, tSTRING_CONTENT); 11667 } 11668 else { 11669 if (str || 11670 ((len = lex_p - parser->tokp) > 0 && 11671 (str = STR_NEW3(parser->tokp, len, enc, func), 1))) { 11672 rb_str_append(parser->delayed, str); 11673 } 11674 ripper_dispatch_delayed_token(parser, tSTRING_CONTENT); 11675 } 11676 lex_goto_eol(parser); 11677 #endif 11678 restore: 11679 heredoc_restore(lex_strterm); 11680 lex_strterm = 0; 11681 return 0; 11682 } 11683 if (was_bol() && whole_match_p(eos, len, indent)) { 11684 dispatch_heredoc_end(); 11685 heredoc_restore(lex_strterm); 11686 return tSTRING_END; 11687 } 11688 11689 if (!(func & STR_FUNC_EXPAND)) { 11690 do { 11691 p = RSTRING_PTR(lex_lastline); 11692 pend = lex_pend; 11693 if (pend > p) { 11694 switch (pend[-1]) { 11695 case '\n': 11696 if (--pend == p || pend[-1] != '\r') { 11697 pend++; 11698 break; 11699 } 11700 case '\r': 11701 --pend; 11702 } 11703 } 11704 if (str) 11705 rb_str_cat(str, p, pend - p); 11706 else 11707 str = STR_NEW(p, pend - p); 11708 if (pend < lex_pend) rb_str_cat(str, "\n", 1); 11709 lex_goto_eol(parser); 11710 if (nextc() == -1) { 11711 if (str) dispose_string(str); 11712 goto error; 11713 } 11714 } while (!whole_match_p(eos, len, indent)); 11715 } 11716 else { 11717 /* int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/ 11718 newtok(); 11719 if (c == '#') { 11720 switch (c = nextc()) { 11721 case '$': 11722 case '@': 11723 pushback(c); 11724 return tSTRING_DVAR; 11725 case '{': 11726 return tSTRING_DBEG; 11727 } 11728 tokadd('#'); 11729 } 11730 do { 11731 pushback(c); 11732 if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) { 11733 if (parser->eofp) goto error; 11734 goto restore; 11735 } 11736 if (c != '\n') { 11737 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func)); 11738 flush_string_content(enc); 11739 return tSTRING_CONTENT; 11740 } 11741 tokadd(nextc()); 11742 /* if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/ 11743 if ((c = nextc()) == -1) goto error; 11744 } while (!whole_match_p(eos, len, indent)); 11745 str = STR_NEW3(tok(), toklen(), enc, func); 11746 } 11747 dispatch_heredoc_end(); 11748 heredoc_restore(lex_strterm); 11749 lex_strterm = NEW_STRTERM(-1, 0, 0); 11750 set_yylval_str(str); 11751 return tSTRING_CONTENT; 11752 } 11753 11754 #include "lex.c" 11755 11756 static void 11757 arg_ambiguous_gen(struct parser_params *parser) 11758 { 11759 #ifndef RIPPER 11760 rb_warning0("ambiguous first argument; put parentheses or even spaces"); 11761 #else 11762 dispatch0(arg_ambiguous); 11763 #endif 11764 } 11765 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1) 11766 11767 static ID 11768 formal_argument_gen(struct parser_params *parser, ID lhs) 11769 { 11770 #ifndef RIPPER 11771 if (!is_local_id(lhs)) 11772 yyerror("formal argument must be local variable"); 11773 #endif 11774 shadowing_lvar(lhs); 11775 return lhs; 11776 } 11777 11778 static int 11779 lvar_defined_gen(struct parser_params *parser, ID id) 11780 { 11781 return (dyna_in_block() && dvar_defined_get(id)) || local_id(id); 11782 } 11783 11784 /* emacsen -*- hack */ 11785 static long 11786 parser_encode_length(struct parser_params *parser, const char *name, long len) 11787 { 11788 long nlen; 11789 11790 if (len > 5 && name[nlen = len - 5] == '-') { 11791 if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0) 11792 return nlen; 11793 } 11794 if (len > 4 && name[nlen = len - 4] == '-') { 11795 if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0) 11796 return nlen; 11797 if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 && 11798 !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0)) 11799 /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */ 11800 return nlen; 11801 } 11802 return len; 11803 } 11804 11805 static void 11806 parser_set_encode(struct parser_params *parser, const char *name) 11807 { 11808 int idx = rb_enc_find_index(name); 11809 rb_encoding *enc; 11810 VALUE excargs[3]; 11811 11812 if (idx < 0) { 11813 excargs[1] = rb_sprintf("unknown encoding name: %s", name); 11814 error: 11815 excargs[0] = rb_eArgError; 11816 excargs[2] = rb_make_backtrace(); 11817 rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline)); 11818 rb_exc_raise(rb_make_exception(3, excargs)); 11819 } 11820 enc = rb_enc_from_index(idx); 11821 if (!rb_enc_asciicompat(enc)) { 11822 excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc)); 11823 goto error; 11824 } 11825 parser->enc = enc; 11826 #ifndef RIPPER 11827 if (ruby_debug_lines) { 11828 long i, n = RARRAY_LEN(ruby_debug_lines); 11829 const VALUE *p = RARRAY_PTR(ruby_debug_lines); 11830 for (i = 0; i < n; ++i) { 11831 rb_enc_associate_index(*p, idx); 11832 } 11833 } 11834 #endif 11835 } 11836 11837 static int 11838 comment_at_top(struct parser_params *parser) 11839 { 11840 const char *p = lex_pbeg, *pend = lex_p - 1; 11841 if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0; 11842 while (p < pend) { 11843 if (!ISSPACE(*p)) return 0; 11844 p++; 11845 } 11846 return 1; 11847 } 11848 11849 #ifndef RIPPER 11850 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len); 11851 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val); 11852 11853 static void 11854 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val) 11855 { 11856 if (!comment_at_top(parser)) { 11857 return; 11858 } 11859 parser_set_encode(parser, val); 11860 } 11861 11862 static void 11863 parser_set_token_info(struct parser_params *parser, const char *name, const char *val) 11864 { 11865 int *p = &parser->parser_token_info_enabled; 11866 11867 switch (*val) { 11868 case 't': case 'T': 11869 if (strcasecmp(val, "true") == 0) { 11870 *p = TRUE; 11871 return; 11872 } 11873 break; 11874 case 'f': case 'F': 11875 if (strcasecmp(val, "false") == 0) { 11876 *p = FALSE; 11877 return; 11878 } 11879 break; 11880 } 11881 rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val); 11882 } 11883 11884 struct magic_comment { 11885 const char *name; 11886 rb_magic_comment_setter_t func; 11887 rb_magic_comment_length_t length; 11888 }; 11889 11890 static const struct magic_comment magic_comments[] = { 11891 {"coding", magic_comment_encoding, parser_encode_length}, 11892 {"encoding", magic_comment_encoding, parser_encode_length}, 11893 {"warn_indent", parser_set_token_info}, 11894 }; 11895 #endif 11896 11897 static const char * 11898 magic_comment_marker(const char *str, long len) 11899 { 11900 long i = 2; 11901 11902 while (i < len) { 11903 switch (str[i]) { 11904 case '-': 11905 if (str[i-1] == '*' && str[i-2] == '-') { 11906 return str + i + 1; 11907 } 11908 i += 2; 11909 break; 11910 case '*': 11911 if (i + 1 >= len) return 0; 11912 if (str[i+1] != '-') { 11913 i += 4; 11914 } 11915 else if (str[i-1] != '-') { 11916 i += 2; 11917 } 11918 else { 11919 return str + i + 2; 11920 } 11921 break; 11922 default: 11923 i += 3; 11924 break; 11925 } 11926 } 11927 return 0; 11928 } 11929 11930 static int 11931 parser_magic_comment(struct parser_params *parser, const char *str, long len) 11932 { 11933 VALUE name = 0, val = 0; 11934 const char *beg, *end, *vbeg, *vend; 11935 #define str_copy(_s, _p, _n) ((_s) \ 11936 ? (void)(rb_str_resize((_s), (_n)), \ 11937 MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \ 11938 : (void)((_s) = STR_NEW((_p), (_n)))) 11939 11940 if (len <= 7) return FALSE; 11941 if (!(beg = magic_comment_marker(str, len))) return FALSE; 11942 if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE; 11943 str = beg; 11944 len = end - beg - 3; 11945 11946 /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */ 11947 while (len > 0) { 11948 #ifndef RIPPER 11949 const struct magic_comment *p = magic_comments; 11950 #endif 11951 char *s; 11952 int i; 11953 long n = 0; 11954 11955 for (; len > 0 && *str; str++, --len) { 11956 switch (*str) { 11957 case '\'': case '"': case ':': case ';': 11958 continue; 11959 } 11960 if (!ISSPACE(*str)) break; 11961 } 11962 for (beg = str; len > 0; str++, --len) { 11963 switch (*str) { 11964 case '\'': case '"': case ':': case ';': 11965 break; 11966 default: 11967 if (ISSPACE(*str)) break; 11968 continue; 11969 } 11970 break; 11971 } 11972 for (end = str; len > 0 && ISSPACE(*str); str++, --len); 11973 if (!len) break; 11974 if (*str != ':') continue; 11975 11976 do str++; while (--len > 0 && ISSPACE(*str)); 11977 if (!len) break; 11978 if (*str == '"') { 11979 for (vbeg = ++str; --len > 0 && *str != '"'; str++) { 11980 if (*str == '\\') { 11981 --len; 11982 ++str; 11983 } 11984 } 11985 vend = str; 11986 if (len) { 11987 --len; 11988 ++str; 11989 } 11990 } 11991 else { 11992 for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++); 11993 vend = str; 11994 } 11995 while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++; 11996 11997 n = end - beg; 11998 str_copy(name, beg, n); 11999 s = RSTRING_PTR(name); 12000 for (i = 0; i < n; ++i) { 12001 if (s[i] == '-') s[i] = '_'; 12002 } 12003 #ifndef RIPPER 12004 do { 12005 if (STRNCASECMP(p->name, s, n) == 0) { 12006 n = vend - vbeg; 12007 if (p->length) { 12008 n = (*p->length)(parser, vbeg, n); 12009 } 12010 str_copy(val, vbeg, n); 12011 (*p->func)(parser, s, RSTRING_PTR(val)); 12012 break; 12013 } 12014 } while (++p < magic_comments + numberof(magic_comments)); 12015 #else 12016 dispatch2(magic_comment, name, val); 12017 #endif 12018 } 12019 12020 return TRUE; 12021 } 12022 12023 static void 12024 set_file_encoding(struct parser_params *parser, const char *str, const char *send) 12025 { 12026 int sep = 0; 12027 const char *beg = str; 12028 VALUE s; 12029 12030 for (;;) { 12031 if (send - str <= 6) return; 12032 switch (str[6]) { 12033 case 'C': case 'c': str += 6; continue; 12034 case 'O': case 'o': str += 5; continue; 12035 case 'D': case 'd': str += 4; continue; 12036 case 'I': case 'i': str += 3; continue; 12037 case 'N': case 'n': str += 2; continue; 12038 case 'G': case 'g': str += 1; continue; 12039 case '=': case ':': 12040 sep = 1; 12041 str += 6; 12042 break; 12043 default: 12044 str += 6; 12045 if (ISSPACE(*str)) break; 12046 continue; 12047 } 12048 if (STRNCASECMP(str-6, "coding", 6) == 0) break; 12049 } 12050 for (;;) { 12051 do { 12052 if (++str >= send) return; 12053 } while (ISSPACE(*str)); 12054 if (sep) break; 12055 if (*str != '=' && *str != ':') return; 12056 sep = 1; 12057 str++; 12058 } 12059 beg = str; 12060 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send); 12061 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg)); 12062 parser_set_encode(parser, RSTRING_PTR(s)); 12063 rb_str_resize(s, 0); 12064 } 12065 12066 static void 12067 parser_prepare(struct parser_params *parser) 12068 { 12069 int c = nextc(); 12070 switch (c) { 12071 case '#': 12072 if (peek('!')) parser->has_shebang = 1; 12073 break; 12074 case 0xef: /* UTF-8 BOM marker */ 12075 if (lex_pend - lex_p >= 2 && 12076 (unsigned char)lex_p[0] == 0xbb && 12077 (unsigned char)lex_p[1] == 0xbf) { 12078 parser->enc = rb_utf8_encoding(); 12079 lex_p += 2; 12080 lex_pbeg = lex_p; 12081 return; 12082 } 12083 break; 12084 case EOF: 12085 return; 12086 } 12087 pushback(c); 12088 parser->enc = rb_enc_get(lex_lastline); 12089 } 12090 12091 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG) 12092 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN) 12093 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS) 12094 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c)) 12095 #define IS_LABEL_POSSIBLE() ((lex_state == EXPR_BEG && !cmd_state) || IS_ARG()) 12096 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1)) 12097 12098 #ifndef RIPPER 12099 #define ambiguous_operator(op, syn) ( \ 12100 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \ 12101 rb_warning0("even though it seems like "syn"")) 12102 #else 12103 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn)) 12104 #endif 12105 #define warn_balanced(op, syn) ((void) \ 12106 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \ 12107 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \ 12108 last_state != EXPR_ENDARG && \ 12109 space_seen && !ISSPACE(c) && \ 12110 (ambiguous_operator(op, syn), 0))) 12111 12112 static int 12113 parser_yylex(struct parser_params *parser) 12114 { 12115 register int c; 12116 int space_seen = 0; 12117 int cmd_state; 12118 enum lex_state_e last_state; 12119 rb_encoding *enc; 12120 int mb; 12121 #ifdef RIPPER 12122 int fallthru = FALSE; 12123 #endif 12124 12125 if (lex_strterm) { 12126 int token; 12127 if (nd_type(lex_strterm) == NODE_HEREDOC) { 12128 token = here_document(lex_strterm); 12129 if (token == tSTRING_END) { 12130 lex_strterm = 0; 12131 lex_state = EXPR_END; 12132 } 12133 } 12134 else { 12135 token = parse_string(lex_strterm); 12136 if (token == tSTRING_END || token == tREGEXP_END) { 12137 rb_gc_force_recycle((VALUE)lex_strterm); 12138 lex_strterm = 0; 12139 lex_state = EXPR_END; 12140 } 12141 } 12142 return token; 12143 } 12144 cmd_state = command_start; 12145 command_start = FALSE; 12146 retry: 12147 last_state = lex_state; 12148 switch (c = nextc()) { 12149 case '\0': /* NUL */ 12150 case '\004': /* ^D */ 12151 case '\032': /* ^Z */ 12152 case -1: /* end of script. */ 12153 return 0; 12154 12155 /* white spaces */ 12156 case ' ': case '\t': case '\f': case '\r': 12157 case '\13': /* '\v' */ 12158 space_seen = 1; 12159 #ifdef RIPPER 12160 while ((c = nextc())) { 12161 switch (c) { 12162 case ' ': case '\t': case '\f': case '\r': 12163 case '\13': /* '\v' */ 12164 break; 12165 default: 12166 goto outofloop; 12167 } 12168 } 12169 outofloop: 12170 pushback(c); 12171 ripper_dispatch_scan_event(parser, tSP); 12172 #endif 12173 goto retry; 12174 12175 case '#': /* it's a comment */ 12176 /* no magic_comment in shebang line */ 12177 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) { 12178 if (comment_at_top(parser)) { 12179 set_file_encoding(parser, lex_p, lex_pend); 12180 } 12181 } 12182 lex_p = lex_pend; 12183 #ifdef RIPPER 12184 ripper_dispatch_scan_event(parser, tCOMMENT); 12185 fallthru = TRUE; 12186 #endif 12187 /* fall through */ 12188 case '\n': 12189 switch (lex_state) { 12190 case EXPR_BEG: 12191 case EXPR_FNAME: 12192 case EXPR_DOT: 12193 case EXPR_CLASS: 12194 case EXPR_VALUE: 12195 #ifdef RIPPER 12196 if (!fallthru) { 12197 ripper_dispatch_scan_event(parser, tIGNORED_NL); 12198 } 12199 fallthru = FALSE; 12200 #endif 12201 goto retry; 12202 default: 12203 break; 12204 } 12205 while ((c = nextc())) { 12206 switch (c) { 12207 case ' ': case '\t': case '\f': case '\r': 12208 case '\13': /* '\v' */ 12209 space_seen = 1; 12210 break; 12211 case '.': { 12212 if ((c = nextc()) != '.') { 12213 pushback(c); 12214 pushback('.'); 12215 goto retry; 12216 } 12217 } 12218 default: 12219 --ruby_sourceline; 12220 lex_nextline = lex_lastline; 12221 case -1: /* EOF no decrement*/ 12222 lex_goto_eol(parser); 12223 #ifdef RIPPER 12224 if (c != -1) { 12225 parser->tokp = lex_p; 12226 } 12227 #endif 12228 goto normal_newline; 12229 } 12230 } 12231 normal_newline: 12232 command_start = TRUE; 12233 lex_state = EXPR_BEG; 12234 return '\n'; 12235 12236 case '*': 12237 if ((c = nextc()) == '*') { 12238 if ((c = nextc()) == '=') { 12239 set_yylval_id(tPOW); 12240 lex_state = EXPR_BEG; 12241 return tOP_ASGN; 12242 } 12243 pushback(c); 12244 c = tPOW; 12245 } 12246 else { 12247 if (c == '=') { 12248 set_yylval_id('*'); 12249 lex_state = EXPR_BEG; 12250 return tOP_ASGN; 12251 } 12252 pushback(c); 12253 if (IS_SPCARG(c)) { 12254 rb_warning0("`*' interpreted as argument prefix"); 12255 c = tSTAR; 12256 } 12257 else if (IS_BEG()) { 12258 c = tSTAR; 12259 } 12260 else { 12261 warn_balanced("*", "argument prefix"); 12262 c = '*'; 12263 } 12264 } 12265 switch (lex_state) { 12266 case EXPR_FNAME: case EXPR_DOT: 12267 lex_state = EXPR_ARG; break; 12268 default: 12269 lex_state = EXPR_BEG; break; 12270 } 12271 return c; 12272 12273 case '!': 12274 c = nextc(); 12275 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12276 lex_state = EXPR_ARG; 12277 if (c == '@') { 12278 return '!'; 12279 } 12280 } 12281 else { 12282 lex_state = EXPR_BEG; 12283 } 12284 if (c == '=') { 12285 return tNEQ; 12286 } 12287 if (c == '~') { 12288 return tNMATCH; 12289 } 12290 pushback(c); 12291 return '!'; 12292 12293 case '=': 12294 if (was_bol()) { 12295 /* skip embedded rd document */ 12296 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) { 12297 #ifdef RIPPER 12298 int first_p = TRUE; 12299 12300 lex_goto_eol(parser); 12301 ripper_dispatch_scan_event(parser, tEMBDOC_BEG); 12302 #endif 12303 for (;;) { 12304 lex_goto_eol(parser); 12305 #ifdef RIPPER 12306 if (!first_p) { 12307 ripper_dispatch_scan_event(parser, tEMBDOC); 12308 } 12309 first_p = FALSE; 12310 #endif 12311 c = nextc(); 12312 if (c == -1) { 12313 compile_error(PARSER_ARG "embedded document meets end of file"); 12314 return 0; 12315 } 12316 if (c != '=') continue; 12317 if (strncmp(lex_p, "end", 3) == 0 && 12318 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) { 12319 break; 12320 } 12321 } 12322 lex_goto_eol(parser); 12323 #ifdef RIPPER 12324 ripper_dispatch_scan_event(parser, tEMBDOC_END); 12325 #endif 12326 goto retry; 12327 } 12328 } 12329 12330 switch (lex_state) { 12331 case EXPR_FNAME: case EXPR_DOT: 12332 lex_state = EXPR_ARG; break; 12333 default: 12334 lex_state = EXPR_BEG; break; 12335 } 12336 if ((c = nextc()) == '=') { 12337 if ((c = nextc()) == '=') { 12338 return tEQQ; 12339 } 12340 pushback(c); 12341 return tEQ; 12342 } 12343 if (c == '~') { 12344 return tMATCH; 12345 } 12346 else if (c == '>') { 12347 return tASSOC; 12348 } 12349 pushback(c); 12350 return '='; 12351 12352 case '<': 12353 last_state = lex_state; 12354 c = nextc(); 12355 if (c == '<' && 12356 lex_state != EXPR_DOT && 12357 lex_state != EXPR_CLASS && 12358 !IS_END() && 12359 (!IS_ARG() || space_seen)) { 12360 int token = heredoc_identifier(); 12361 if (token) return token; 12362 } 12363 switch (lex_state) { 12364 case EXPR_FNAME: case EXPR_DOT: 12365 lex_state = EXPR_ARG; break; 12366 default: 12367 lex_state = EXPR_BEG; break; 12368 } 12369 if (c == '=') { 12370 if ((c = nextc()) == '>') { 12371 return tCMP; 12372 } 12373 pushback(c); 12374 return tLEQ; 12375 } 12376 if (c == '<') { 12377 if ((c = nextc()) == '=') { 12378 set_yylval_id(tLSHFT); 12379 lex_state = EXPR_BEG; 12380 return tOP_ASGN; 12381 } 12382 pushback(c); 12383 warn_balanced("<<", "here document"); 12384 return tLSHFT; 12385 } 12386 pushback(c); 12387 return '<'; 12388 12389 case '>': 12390 switch (lex_state) { 12391 case EXPR_FNAME: case EXPR_DOT: 12392 lex_state = EXPR_ARG; break; 12393 default: 12394 lex_state = EXPR_BEG; break; 12395 } 12396 if ((c = nextc()) == '=') { 12397 return tGEQ; 12398 } 12399 if (c == '>') { 12400 if ((c = nextc()) == '=') { 12401 set_yylval_id(tRSHFT); 12402 lex_state = EXPR_BEG; 12403 return tOP_ASGN; 12404 } 12405 pushback(c); 12406 return tRSHFT; 12407 } 12408 pushback(c); 12409 return '>'; 12410 12411 case '"': 12412 lex_strterm = NEW_STRTERM(str_dquote, '"', 0); 12413 return tSTRING_BEG; 12414 12415 case '`': 12416 if (lex_state == EXPR_FNAME) { 12417 lex_state = EXPR_ENDFN; 12418 return c; 12419 } 12420 if (lex_state == EXPR_DOT) { 12421 if (cmd_state) 12422 lex_state = EXPR_CMDARG; 12423 else 12424 lex_state = EXPR_ARG; 12425 return c; 12426 } 12427 lex_strterm = NEW_STRTERM(str_xquote, '`', 0); 12428 return tXSTRING_BEG; 12429 12430 case '\'': 12431 lex_strterm = NEW_STRTERM(str_squote, '\'', 0); 12432 return tSTRING_BEG; 12433 12434 case '?': 12435 if (IS_END()) { 12436 lex_state = EXPR_VALUE; 12437 return '?'; 12438 } 12439 c = nextc(); 12440 if (c == -1) { 12441 compile_error(PARSER_ARG "incomplete character syntax"); 12442 return 0; 12443 } 12444 if (rb_enc_isspace(c, parser->enc)) { 12445 if (!IS_ARG()) { 12446 int c2 = 0; 12447 switch (c) { 12448 case ' ': 12449 c2 = 's'; 12450 break; 12451 case '\n': 12452 c2 = 'n'; 12453 break; 12454 case '\t': 12455 c2 = 't'; 12456 break; 12457 case '\v': 12458 c2 = 'v'; 12459 break; 12460 case '\r': 12461 c2 = 'r'; 12462 break; 12463 case '\f': 12464 c2 = 'f'; 12465 break; 12466 } 12467 if (c2) { 12468 rb_warnI("invalid character syntax; use ?\\%c", c2); 12469 } 12470 } 12471 ternary: 12472 pushback(c); 12473 lex_state = EXPR_VALUE; 12474 return '?'; 12475 } 12476 newtok(); 12477 enc = parser->enc; 12478 if (!parser_isascii()) { 12479 if (tokadd_mbchar(c) == -1) return 0; 12480 } 12481 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') && 12482 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) { 12483 goto ternary; 12484 } 12485 else if (c == '\\') { 12486 if (peek('u')) { 12487 nextc(); 12488 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0); 12489 if (0x80 <= c) { 12490 tokaddmbc(c, enc); 12491 } 12492 else { 12493 tokadd(c); 12494 } 12495 } 12496 else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) { 12497 nextc(); 12498 if (tokadd_mbchar(c) == -1) return 0; 12499 } 12500 else { 12501 c = read_escape(0, &enc); 12502 tokadd(c); 12503 } 12504 } 12505 else { 12506 tokadd(c); 12507 } 12508 tokfix(); 12509 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0)); 12510 lex_state = EXPR_END; 12511 return tCHAR; 12512 12513 case '&': 12514 if ((c = nextc()) == '&') { 12515 lex_state = EXPR_BEG; 12516 if ((c = nextc()) == '=') { 12517 set_yylval_id(tANDOP); 12518 lex_state = EXPR_BEG; 12519 return tOP_ASGN; 12520 } 12521 pushback(c); 12522 return tANDOP; 12523 } 12524 else if (c == '=') { 12525 set_yylval_id('&'); 12526 lex_state = EXPR_BEG; 12527 return tOP_ASGN; 12528 } 12529 pushback(c); 12530 if (IS_SPCARG(c)) { 12531 rb_warning0("`&' interpreted as argument prefix"); 12532 c = tAMPER; 12533 } 12534 else if (IS_BEG()) { 12535 c = tAMPER; 12536 } 12537 else { 12538 warn_balanced("&", "argument prefix"); 12539 c = '&'; 12540 } 12541 switch (lex_state) { 12542 case EXPR_FNAME: case EXPR_DOT: 12543 lex_state = EXPR_ARG; break; 12544 default: 12545 lex_state = EXPR_BEG; 12546 } 12547 return c; 12548 12549 case '|': 12550 if ((c = nextc()) == '|') { 12551 lex_state = EXPR_BEG; 12552 if ((c = nextc()) == '=') { 12553 set_yylval_id(tOROP); 12554 lex_state = EXPR_BEG; 12555 return tOP_ASGN; 12556 } 12557 pushback(c); 12558 return tOROP; 12559 } 12560 if (c == '=') { 12561 set_yylval_id('|'); 12562 lex_state = EXPR_BEG; 12563 return tOP_ASGN; 12564 } 12565 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12566 lex_state = EXPR_ARG; 12567 } 12568 else { 12569 lex_state = EXPR_BEG; 12570 } 12571 pushback(c); 12572 return '|'; 12573 12574 case '+': 12575 c = nextc(); 12576 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12577 lex_state = EXPR_ARG; 12578 if (c == '@') { 12579 return tUPLUS; 12580 } 12581 pushback(c); 12582 return '+'; 12583 } 12584 if (c == '=') { 12585 set_yylval_id('+'); 12586 lex_state = EXPR_BEG; 12587 return tOP_ASGN; 12588 } 12589 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 12590 lex_state = EXPR_BEG; 12591 pushback(c); 12592 if (c != -1 && ISDIGIT(c)) { 12593 c = '+'; 12594 goto start_num; 12595 } 12596 return tUPLUS; 12597 } 12598 lex_state = EXPR_BEG; 12599 pushback(c); 12600 warn_balanced("+", "unary operator"); 12601 return '+'; 12602 12603 case '-': 12604 c = nextc(); 12605 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12606 lex_state = EXPR_ARG; 12607 if (c == '@') { 12608 return tUMINUS; 12609 } 12610 pushback(c); 12611 return '-'; 12612 } 12613 if (c == '=') { 12614 set_yylval_id('-'); 12615 lex_state = EXPR_BEG; 12616 return tOP_ASGN; 12617 } 12618 if (c == '>') { 12619 lex_state = EXPR_ARG; 12620 return tLAMBDA; 12621 } 12622 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) { 12623 lex_state = EXPR_BEG; 12624 pushback(c); 12625 if (c != -1 && ISDIGIT(c)) { 12626 return tUMINUS_NUM; 12627 } 12628 return tUMINUS; 12629 } 12630 lex_state = EXPR_BEG; 12631 pushback(c); 12632 warn_balanced("-", "unary operator"); 12633 return '-'; 12634 12635 case '.': 12636 lex_state = EXPR_BEG; 12637 if ((c = nextc()) == '.') { 12638 if ((c = nextc()) == '.') { 12639 return tDOT3; 12640 } 12641 pushback(c); 12642 return tDOT2; 12643 } 12644 pushback(c); 12645 if (c != -1 && ISDIGIT(c)) { 12646 yyerror("no .<digit> floating literal anymore; put 0 before dot"); 12647 } 12648 lex_state = EXPR_DOT; 12649 return '.'; 12650 12651 start_num: 12652 case '0': case '1': case '2': case '3': case '4': 12653 case '5': case '6': case '7': case '8': case '9': 12654 { 12655 int is_float, seen_point, seen_e, nondigit; 12656 12657 is_float = seen_point = seen_e = nondigit = 0; 12658 lex_state = EXPR_END; 12659 newtok(); 12660 if (c == '-' || c == '+') { 12661 tokadd(c); 12662 c = nextc(); 12663 } 12664 if (c == '0') { 12665 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0) 12666 int start = toklen(); 12667 c = nextc(); 12668 if (c == 'x' || c == 'X') { 12669 /* hexadecimal */ 12670 c = nextc(); 12671 if (c != -1 && ISXDIGIT(c)) { 12672 do { 12673 if (c == '_') { 12674 if (nondigit) break; 12675 nondigit = c; 12676 continue; 12677 } 12678 if (!ISXDIGIT(c)) break; 12679 nondigit = 0; 12680 tokadd(c); 12681 } while ((c = nextc()) != -1); 12682 } 12683 pushback(c); 12684 tokfix(); 12685 if (toklen() == start) { 12686 no_digits(); 12687 } 12688 else if (nondigit) goto trailing_uc; 12689 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE)); 12690 return tINTEGER; 12691 } 12692 if (c == 'b' || c == 'B') { 12693 /* binary */ 12694 c = nextc(); 12695 if (c == '0' || c == '1') { 12696 do { 12697 if (c == '_') { 12698 if (nondigit) break; 12699 nondigit = c; 12700 continue; 12701 } 12702 if (c != '0' && c != '1') break; 12703 nondigit = 0; 12704 tokadd(c); 12705 } while ((c = nextc()) != -1); 12706 } 12707 pushback(c); 12708 tokfix(); 12709 if (toklen() == start) { 12710 no_digits(); 12711 } 12712 else if (nondigit) goto trailing_uc; 12713 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE)); 12714 return tINTEGER; 12715 } 12716 if (c == 'd' || c == 'D') { 12717 /* decimal */ 12718 c = nextc(); 12719 if (c != -1 && ISDIGIT(c)) { 12720 do { 12721 if (c == '_') { 12722 if (nondigit) break; 12723 nondigit = c; 12724 continue; 12725 } 12726 if (!ISDIGIT(c)) break; 12727 nondigit = 0; 12728 tokadd(c); 12729 } while ((c = nextc()) != -1); 12730 } 12731 pushback(c); 12732 tokfix(); 12733 if (toklen() == start) { 12734 no_digits(); 12735 } 12736 else if (nondigit) goto trailing_uc; 12737 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 12738 return tINTEGER; 12739 } 12740 if (c == '_') { 12741 /* 0_0 */ 12742 goto octal_number; 12743 } 12744 if (c == 'o' || c == 'O') { 12745 /* prefixed octal */ 12746 c = nextc(); 12747 if (c == -1 || c == '_' || !ISDIGIT(c)) { 12748 no_digits(); 12749 } 12750 } 12751 if (c >= '0' && c <= '7') { 12752 /* octal */ 12753 octal_number: 12754 do { 12755 if (c == '_') { 12756 if (nondigit) break; 12757 nondigit = c; 12758 continue; 12759 } 12760 if (c < '0' || c > '9') break; 12761 if (c > '7') goto invalid_octal; 12762 nondigit = 0; 12763 tokadd(c); 12764 } while ((c = nextc()) != -1); 12765 if (toklen() > start) { 12766 pushback(c); 12767 tokfix(); 12768 if (nondigit) goto trailing_uc; 12769 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE)); 12770 return tINTEGER; 12771 } 12772 if (nondigit) { 12773 pushback(c); 12774 goto trailing_uc; 12775 } 12776 } 12777 if (c > '7' && c <= '9') { 12778 invalid_octal: 12779 yyerror("Invalid octal digit"); 12780 } 12781 else if (c == '.' || c == 'e' || c == 'E') { 12782 tokadd('0'); 12783 } 12784 else { 12785 pushback(c); 12786 set_yylval_literal(INT2FIX(0)); 12787 return tINTEGER; 12788 } 12789 } 12790 12791 for (;;) { 12792 switch (c) { 12793 case '0': case '1': case '2': case '3': case '4': 12794 case '5': case '6': case '7': case '8': case '9': 12795 nondigit = 0; 12796 tokadd(c); 12797 break; 12798 12799 case '.': 12800 if (nondigit) goto trailing_uc; 12801 if (seen_point || seen_e) { 12802 goto decode_num; 12803 } 12804 else { 12805 int c0 = nextc(); 12806 if (c0 == -1 || !ISDIGIT(c0)) { 12807 pushback(c0); 12808 goto decode_num; 12809 } 12810 c = c0; 12811 } 12812 tokadd('.'); 12813 tokadd(c); 12814 is_float++; 12815 seen_point++; 12816 nondigit = 0; 12817 break; 12818 12819 case 'e': 12820 case 'E': 12821 if (nondigit) { 12822 pushback(c); 12823 c = nondigit; 12824 goto decode_num; 12825 } 12826 if (seen_e) { 12827 goto decode_num; 12828 } 12829 tokadd(c); 12830 seen_e++; 12831 is_float++; 12832 nondigit = c; 12833 c = nextc(); 12834 if (c != '-' && c != '+') continue; 12835 tokadd(c); 12836 nondigit = c; 12837 break; 12838 12839 case '_': /* `_' in number just ignored */ 12840 if (nondigit) goto decode_num; 12841 nondigit = c; 12842 break; 12843 12844 default: 12845 goto decode_num; 12846 } 12847 c = nextc(); 12848 } 12849 12850 decode_num: 12851 pushback(c); 12852 if (nondigit) { 12853 char tmp[30]; 12854 trailing_uc: 12855 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit); 12856 yyerror(tmp); 12857 } 12858 tokfix(); 12859 if (is_float) { 12860 double d = strtod(tok(), 0); 12861 if (errno == ERANGE) { 12862 rb_warningS("Float %s out of range", tok()); 12863 errno = 0; 12864 } 12865 set_yylval_literal(DBL2NUM(d)); 12866 return tFLOAT; 12867 } 12868 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE)); 12869 return tINTEGER; 12870 } 12871 12872 case ')': 12873 case ']': 12874 paren_nest--; 12875 case '}': 12876 COND_LEXPOP(); 12877 CMDARG_LEXPOP(); 12878 if (c == ')') 12879 lex_state = EXPR_ENDFN; 12880 else 12881 lex_state = EXPR_ENDARG; 12882 return c; 12883 12884 case ':': 12885 c = nextc(); 12886 if (c == ':') { 12887 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) { 12888 lex_state = EXPR_BEG; 12889 return tCOLON3; 12890 } 12891 lex_state = EXPR_DOT; 12892 return tCOLON2; 12893 } 12894 if (IS_END() || ISSPACE(c)) { 12895 pushback(c); 12896 warn_balanced(":", "symbol literal"); 12897 lex_state = EXPR_BEG; 12898 return ':'; 12899 } 12900 switch (c) { 12901 case '\'': 12902 lex_strterm = NEW_STRTERM(str_ssym, c, 0); 12903 break; 12904 case '"': 12905 lex_strterm = NEW_STRTERM(str_dsym, c, 0); 12906 break; 12907 default: 12908 pushback(c); 12909 break; 12910 } 12911 lex_state = EXPR_FNAME; 12912 return tSYMBEG; 12913 12914 case '/': 12915 if (IS_BEG()) { 12916 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 12917 return tREGEXP_BEG; 12918 } 12919 if ((c = nextc()) == '=') { 12920 set_yylval_id('/'); 12921 lex_state = EXPR_BEG; 12922 return tOP_ASGN; 12923 } 12924 pushback(c); 12925 if (IS_SPCARG(c)) { 12926 (void)arg_ambiguous(); 12927 lex_strterm = NEW_STRTERM(str_regexp, '/', 0); 12928 return tREGEXP_BEG; 12929 } 12930 switch (lex_state) { 12931 case EXPR_FNAME: case EXPR_DOT: 12932 lex_state = EXPR_ARG; break; 12933 default: 12934 lex_state = EXPR_BEG; break; 12935 } 12936 warn_balanced("/", "regexp literal"); 12937 return '/'; 12938 12939 case '^': 12940 if ((c = nextc()) == '=') { 12941 set_yylval_id('^'); 12942 lex_state = EXPR_BEG; 12943 return tOP_ASGN; 12944 } 12945 switch (lex_state) { 12946 case EXPR_FNAME: case EXPR_DOT: 12947 lex_state = EXPR_ARG; break; 12948 default: 12949 lex_state = EXPR_BEG; break; 12950 } 12951 pushback(c); 12952 return '^'; 12953 12954 case ';': 12955 lex_state = EXPR_BEG; 12956 command_start = TRUE; 12957 return ';'; 12958 12959 case ',': 12960 lex_state = EXPR_BEG; 12961 return ','; 12962 12963 case '~': 12964 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12965 if ((c = nextc()) != '@') { 12966 pushback(c); 12967 } 12968 lex_state = EXPR_ARG; 12969 } 12970 else { 12971 lex_state = EXPR_BEG; 12972 } 12973 return '~'; 12974 12975 case '(': 12976 if (IS_BEG()) { 12977 c = tLPAREN; 12978 } 12979 else if (IS_SPCARG(-1)) { 12980 c = tLPAREN_ARG; 12981 } 12982 paren_nest++; 12983 COND_PUSH(0); 12984 CMDARG_PUSH(0); 12985 lex_state = EXPR_BEG; 12986 return c; 12987 12988 case '[': 12989 paren_nest++; 12990 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) { 12991 lex_state = EXPR_ARG; 12992 if ((c = nextc()) == ']') { 12993 if ((c = nextc()) == '=') { 12994 return tASET; 12995 } 12996 pushback(c); 12997 return tAREF; 12998 } 12999 pushback(c); 13000 return '['; 13001 } 13002 else if (IS_BEG()) { 13003 c = tLBRACK; 13004 } 13005 else if (IS_ARG() && space_seen) { 13006 c = tLBRACK; 13007 } 13008 lex_state = EXPR_BEG; 13009 COND_PUSH(0); 13010 CMDARG_PUSH(0); 13011 return c; 13012 13013 case '{': 13014 if (lpar_beg && lpar_beg == paren_nest) { 13015 lex_state = EXPR_BEG; 13016 lpar_beg = 0; 13017 --paren_nest; 13018 COND_PUSH(0); 13019 CMDARG_PUSH(0); 13020 return tLAMBEG; 13021 } 13022 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN) 13023 c = '{'; /* block (primary) */ 13024 else if (lex_state == EXPR_ENDARG) 13025 c = tLBRACE_ARG; /* block (expr) */ 13026 else 13027 c = tLBRACE; /* hash */ 13028 COND_PUSH(0); 13029 CMDARG_PUSH(0); 13030 lex_state = EXPR_BEG; 13031 if (c != tLBRACE) command_start = TRUE; 13032 return c; 13033 13034 case '\\': 13035 c = nextc(); 13036 if (c == '\n') { 13037 space_seen = 1; 13038 #ifdef RIPPER 13039 ripper_dispatch_scan_event(parser, tSP); 13040 #endif 13041 goto retry; /* skip \\n */ 13042 } 13043 pushback(c); 13044 return '\\'; 13045 13046 case '%': 13047 if (IS_BEG()) { 13048 int term; 13049 int paren; 13050 13051 c = nextc(); 13052 quotation: 13053 if (c == -1 || !ISALNUM(c)) { 13054 term = c; 13055 c = 'Q'; 13056 } 13057 else { 13058 term = nextc(); 13059 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) { 13060 yyerror("unknown type of %string"); 13061 return 0; 13062 } 13063 } 13064 if (c == -1 || term == -1) { 13065 compile_error(PARSER_ARG "unterminated quoted string meets end of file"); 13066 return 0; 13067 } 13068 paren = term; 13069 if (term == '(') term = ')'; 13070 else if (term == '[') term = ']'; 13071 else if (term == '{') term = '}'; 13072 else if (term == '<') term = '>'; 13073 else paren = 0; 13074 13075 switch (c) { 13076 case 'Q': 13077 lex_strterm = NEW_STRTERM(str_dquote, term, paren); 13078 return tSTRING_BEG; 13079 13080 case 'q': 13081 lex_strterm = NEW_STRTERM(str_squote, term, paren); 13082 return tSTRING_BEG; 13083 13084 case 'W': 13085 lex_strterm = NEW_STRTERM(str_dword, term, paren); 13086 do {c = nextc();} while (ISSPACE(c)); 13087 pushback(c); 13088 return tWORDS_BEG; 13089 13090 case 'w': 13091 lex_strterm = NEW_STRTERM(str_sword, term, paren); 13092 do {c = nextc();} while (ISSPACE(c)); 13093 pushback(c); 13094 return tQWORDS_BEG; 13095 13096 case 'x': 13097 lex_strterm = NEW_STRTERM(str_xquote, term, paren); 13098 return tXSTRING_BEG; 13099 13100 case 'r': 13101 lex_strterm = NEW_STRTERM(str_regexp, term, paren); 13102 return tREGEXP_BEG; 13103 13104 case 's': 13105 lex_strterm = NEW_STRTERM(str_ssym, term, paren); 13106 lex_state = EXPR_FNAME; 13107 return tSYMBEG; 13108 13109 default: 13110 yyerror("unknown type of %string"); 13111 return 0; 13112 } 13113 } 13114 if ((c = nextc()) == '=') { 13115 set_yylval_id('%'); 13116 lex_state = EXPR_BEG; 13117 return tOP_ASGN; 13118 } 13119 if (IS_SPCARG(c)) { 13120 goto quotation; 13121 } 13122 switch (lex_state) { 13123 case EXPR_FNAME: case EXPR_DOT: 13124 lex_state = EXPR_ARG; break; 13125 default: 13126 lex_state = EXPR_BEG; break; 13127 } 13128 pushback(c); 13129 warn_balanced("%%", "string literal"); 13130 return '%'; 13131 13132 case '$': 13133 lex_state = EXPR_END; 13134 newtok(); 13135 c = nextc(); 13136 switch (c) { 13137 case '_': /* $_: last read line string */ 13138 c = nextc(); 13139 if (parser_is_identchar()) { 13140 tokadd('$'); 13141 tokadd('_'); 13142 break; 13143 } 13144 pushback(c); 13145 c = '_'; 13146 /* fall through */ 13147 case '~': /* $~: match-data */ 13148 case '*': /* $*: argv */ 13149 case '$': /* $$: pid */ 13150 case '?': /* $?: last status */ 13151 case '!': /* $!: error string */ 13152 case '@': /* $@: error position */ 13153 case '/': /* $/: input record separator */ 13154 case '\\': /* $\: output record separator */ 13155 case ';': /* $;: field separator */ 13156 case ',': /* $,: output field separator */ 13157 case '.': /* $.: last read line number */ 13158 case '=': /* $=: ignorecase */ 13159 case ':': /* $:: load path */ 13160 case '<': /* $<: reading filename */ 13161 case '>': /* $>: default output handle */ 13162 case '\"': /* $": already loaded files */ 13163 tokadd('$'); 13164 tokadd(c); 13165 tokfix(); 13166 set_yylval_name(rb_intern(tok())); 13167 return tGVAR; 13168 13169 case '-': 13170 tokadd('$'); 13171 tokadd(c); 13172 c = nextc(); 13173 if (parser_is_identchar()) { 13174 if (tokadd_mbchar(c) == -1) return 0; 13175 } 13176 else { 13177 pushback(c); 13178 } 13179 gvar: 13180 tokfix(); 13181 set_yylval_name(rb_intern(tok())); 13182 return tGVAR; 13183 13184 case '&': /* $&: last match */ 13185 case '`': /* $`: string before last match */ 13186 case '\'': /* $': string after last match */ 13187 case '+': /* $+: string matches last paren. */ 13188 if (last_state == EXPR_FNAME) { 13189 tokadd('$'); 13190 tokadd(c); 13191 goto gvar; 13192 } 13193 set_yylval_node(NEW_BACK_REF(c)); 13194 return tBACK_REF; 13195 13196 case '1': case '2': case '3': 13197 case '4': case '5': case '6': 13198 case '7': case '8': case '9': 13199 tokadd('$'); 13200 do { 13201 tokadd(c); 13202 c = nextc(); 13203 } while (c != -1 && ISDIGIT(c)); 13204 pushback(c); 13205 if (last_state == EXPR_FNAME) goto gvar; 13206 tokfix(); 13207 set_yylval_node(NEW_NTH_REF(atoi(tok()+1))); 13208 return tNTH_REF; 13209 13210 default: 13211 if (!parser_is_identchar()) { 13212 pushback(c); 13213 return '$'; 13214 } 13215 case '0': 13216 tokadd('$'); 13217 } 13218 break; 13219 13220 case '@': 13221 c = nextc(); 13222 newtok(); 13223 tokadd('@'); 13224 if (c == '@') { 13225 tokadd('@'); 13226 c = nextc(); 13227 } 13228 if (c != -1 && ISDIGIT(c)) { 13229 if (tokidx == 1) { 13230 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c); 13231 } 13232 else { 13233 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c); 13234 } 13235 return 0; 13236 } 13237 if (!parser_is_identchar()) { 13238 pushback(c); 13239 return '@'; 13240 } 13241 break; 13242 13243 case '_': 13244 if (was_bol() && whole_match_p("__END__", 7, 0)) { 13245 ruby__end__seen = 1; 13246 parser->eofp = Qtrue; 13247 #ifndef RIPPER 13248 return -1; 13249 #else 13250 lex_goto_eol(parser); 13251 ripper_dispatch_scan_event(parser, k__END__); 13252 return 0; 13253 #endif 13254 } 13255 newtok(); 13256 break; 13257 13258 default: 13259 if (!parser_is_identchar()) { 13260 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c); 13261 goto retry; 13262 } 13263 13264 newtok(); 13265 break; 13266 } 13267 13268 mb = ENC_CODERANGE_7BIT; 13269 do { 13270 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN; 13271 if (tokadd_mbchar(c) == -1) return 0; 13272 c = nextc(); 13273 } while (parser_is_identchar()); 13274 switch (tok()[0]) { 13275 case '@': case '$': 13276 pushback(c); 13277 break; 13278 default: 13279 if ((c == '!' || c == '?') && !peek('=')) { 13280 tokadd(c); 13281 } 13282 else { 13283 pushback(c); 13284 } 13285 } 13286 tokfix(); 13287 13288 { 13289 int result = 0; 13290 13291 last_state = lex_state; 13292 switch (tok()[0]) { 13293 case '$': 13294 lex_state = EXPR_END; 13295 result = tGVAR; 13296 break; 13297 case '@': 13298 lex_state = EXPR_END; 13299 if (tok()[1] == '@') 13300 result = tCVAR; 13301 else 13302 result = tIVAR; 13303 break; 13304 13305 default: 13306 if (toklast() == '!' || toklast() == '?') { 13307 result = tFID; 13308 } 13309 else { 13310 if (lex_state == EXPR_FNAME) { 13311 if ((c = nextc()) == '=' && !peek('~') && !peek('>') && 13312 (!peek('=') || (peek_n('>', 1)))) { 13313 result = tIDENTIFIER; 13314 tokadd(c); 13315 tokfix(); 13316 } 13317 else { 13318 pushback(c); 13319 } 13320 } 13321 if (result == 0 && ISUPPER(tok()[0])) { 13322 result = tCONSTANT; 13323 } 13324 else { 13325 result = tIDENTIFIER; 13326 } 13327 } 13328 13329 if (IS_LABEL_POSSIBLE()) { 13330 if (IS_LABEL_SUFFIX(0)) { 13331 lex_state = EXPR_BEG; 13332 nextc(); 13333 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb))); 13334 return tLABEL; 13335 } 13336 } 13337 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) { 13338 const struct kwtable *kw; 13339 13340 /* See if it is a reserved word. */ 13341 kw = rb_reserved_word(tok(), toklen()); 13342 if (kw) { 13343 enum lex_state_e state = lex_state; 13344 lex_state = kw->state; 13345 if (state == EXPR_FNAME) { 13346 set_yylval_name(rb_intern(kw->name)); 13347 return kw->id[0]; 13348 } 13349 if (kw->id[0] == keyword_do) { 13350 command_start = TRUE; 13351 if (lpar_beg && lpar_beg == paren_nest) { 13352 lpar_beg = 0; 13353 --paren_nest; 13354 return keyword_do_LAMBDA; 13355 } 13356 if (COND_P()) return keyword_do_cond; 13357 if (CMDARG_P() && state != EXPR_CMDARG) 13358 return keyword_do_block; 13359 if (state == EXPR_ENDARG || state == EXPR_BEG) 13360 return keyword_do_block; 13361 return keyword_do; 13362 } 13363 if (state == EXPR_BEG || state == EXPR_VALUE) 13364 return kw->id[0]; 13365 else { 13366 if (kw->id[0] != kw->id[1]) 13367 lex_state = EXPR_BEG; 13368 return kw->id[1]; 13369 } 13370 } 13371 } 13372 13373 if (IS_BEG() || 13374 lex_state == EXPR_DOT || 13375 IS_ARG()) { 13376 if (cmd_state) { 13377 lex_state = EXPR_CMDARG; 13378 } 13379 else { 13380 lex_state = EXPR_ARG; 13381 } 13382 } 13383 else if (lex_state == EXPR_FNAME) { 13384 lex_state = EXPR_ENDFN; 13385 } 13386 else { 13387 lex_state = EXPR_END; 13388 } 13389 } 13390 { 13391 ID ident = TOK_INTERN(!ENC_SINGLE(mb)); 13392 13393 set_yylval_name(ident); 13394 if (last_state != EXPR_DOT && last_state != EXPR_FNAME && 13395 is_local_id(ident) && lvar_defined(ident)) { 13396 lex_state = EXPR_END; 13397 } 13398 } 13399 return result; 13400 } 13401 } 13402 13403 #if YYPURE 13404 static int 13405 yylex(void *lval, void *p) 13406 #else 13407 yylex(void *p) 13408 #endif 13409 { 13410 struct parser_params *parser = (struct parser_params*)p; 13411 int t; 13412 13413 #if YYPURE 13414 parser->parser_yylval = lval; 13415 parser->parser_yylval->val = Qundef; 13416 #endif 13417 t = parser_yylex(parser); 13418 #ifdef RIPPER 13419 if (!NIL_P(parser->delayed)) { 13420 ripper_dispatch_delayed_token(parser, t); 13421 return t; 13422 } 13423 if (t != 0) 13424 ripper_dispatch_scan_event(parser, t); 13425 #endif 13426 13427 return t; 13428 } 13429 13430 #ifndef RIPPER 13431 static NODE* 13432 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2) 13433 { 13434 NODE *n = (rb_node_newnode)(type, a0, a1, a2); 13435 nd_set_line(n, ruby_sourceline); 13436 return n; 13437 } 13438 13439 enum node_type 13440 nodetype(NODE *node) /* for debug */ 13441 { 13442 return (enum node_type)nd_type(node); 13443 } 13444 13445 int 13446 nodeline(NODE *node) 13447 { 13448 return nd_line(node); 13449 } 13450 13451 static NODE* 13452 newline_node(NODE *node) 13453 { 13454 if (node) { 13455 node = remove_begin(node); 13456 node->flags |= NODE_FL_NEWLINE; 13457 } 13458 return node; 13459 } 13460 13461 static void 13462 fixpos(NODE *node, NODE *orig) 13463 { 13464 if (!node) return; 13465 if (!orig) return; 13466 if (orig == (NODE*)1) return; 13467 nd_set_line(node, nd_line(orig)); 13468 } 13469 13470 static void 13471 parser_warning(struct parser_params *parser, NODE *node, const char *mesg) 13472 { 13473 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg); 13474 } 13475 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg)) 13476 13477 static void 13478 parser_warn(struct parser_params *parser, NODE *node, const char *mesg) 13479 { 13480 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg); 13481 } 13482 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg)) 13483 13484 static NODE* 13485 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail) 13486 { 13487 NODE *end, *h = head, *nd; 13488 13489 if (tail == 0) return head; 13490 13491 if (h == 0) return tail; 13492 switch (nd_type(h)) { 13493 case NODE_LIT: 13494 case NODE_STR: 13495 case NODE_SELF: 13496 case NODE_TRUE: 13497 case NODE_FALSE: 13498 case NODE_NIL: 13499 parser_warning(h, "unused literal ignored"); 13500 return tail; 13501 default: 13502 h = end = NEW_BLOCK(head); 13503 end->nd_end = end; 13504 fixpos(end, head); 13505 head = end; 13506 break; 13507 case NODE_BLOCK: 13508 end = h->nd_end; 13509 break; 13510 } 13511 13512 nd = end->nd_head; 13513 switch (nd_type(nd)) { 13514 case NODE_RETURN: 13515 case NODE_BREAK: 13516 case NODE_NEXT: 13517 case NODE_REDO: 13518 case NODE_RETRY: 13519 if (RTEST(ruby_verbose)) { 13520 parser_warning(nd, "statement not reached"); 13521 } 13522 break; 13523 13524 default: 13525 break; 13526 } 13527 13528 if (nd_type(tail) != NODE_BLOCK) { 13529 tail = NEW_BLOCK(tail); 13530 tail->nd_end = tail; 13531 } 13532 end->nd_next = tail; 13533 h->nd_end = tail->nd_end; 13534 return head; 13535 } 13536 13537 /* append item to the list */ 13538 static NODE* 13539 list_append_gen(struct parser_params *parser, NODE *list, NODE *item) 13540 { 13541 NODE *last; 13542 13543 if (list == 0) return NEW_LIST(item); 13544 if (list->nd_next) { 13545 last = list->nd_next->nd_end; 13546 } 13547 else { 13548 last = list; 13549 } 13550 13551 list->nd_alen += 1; 13552 last->nd_next = NEW_LIST(item); 13553 list->nd_next->nd_end = last->nd_next; 13554 return list; 13555 } 13556 13557 /* concat two lists */ 13558 static NODE* 13559 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 13560 { 13561 NODE *last; 13562 13563 if (head->nd_next) { 13564 last = head->nd_next->nd_end; 13565 } 13566 else { 13567 last = head; 13568 } 13569 13570 head->nd_alen += tail->nd_alen; 13571 last->nd_next = tail; 13572 if (tail->nd_next) { 13573 head->nd_next->nd_end = tail->nd_next->nd_end; 13574 } 13575 else { 13576 head->nd_next->nd_end = tail; 13577 } 13578 13579 return head; 13580 } 13581 13582 static int 13583 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail) 13584 { 13585 if (NIL_P(tail)) return 1; 13586 if (!rb_enc_compatible(head, tail)) { 13587 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)", 13588 rb_enc_name(rb_enc_get(head)), 13589 rb_enc_name(rb_enc_get(tail))); 13590 rb_str_resize(head, 0); 13591 rb_str_resize(tail, 0); 13592 return 0; 13593 } 13594 rb_str_buf_append(head, tail); 13595 return 1; 13596 } 13597 13598 /* concat two string literals */ 13599 static NODE * 13600 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail) 13601 { 13602 enum node_type htype; 13603 13604 if (!head) return tail; 13605 if (!tail) return head; 13606 13607 htype = nd_type(head); 13608 if (htype == NODE_EVSTR) { 13609 NODE *node = NEW_DSTR(Qnil); 13610 head = list_append(node, head); 13611 } 13612 switch (nd_type(tail)) { 13613 case NODE_STR: 13614 if (htype == NODE_STR) { 13615 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) { 13616 error: 13617 rb_gc_force_recycle((VALUE)head); 13618 rb_gc_force_recycle((VALUE)tail); 13619 return 0; 13620 } 13621 rb_gc_force_recycle((VALUE)tail); 13622 } 13623 else { 13624 list_append(head, tail); 13625 } 13626 break; 13627 13628 case NODE_DSTR: 13629 if (htype == NODE_STR) { 13630 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) 13631 goto error; 13632 tail->nd_lit = head->nd_lit; 13633 rb_gc_force_recycle((VALUE)head); 13634 head = tail; 13635 } 13636 else if (NIL_P(tail->nd_lit)) { 13637 head->nd_alen += tail->nd_alen - 1; 13638 head->nd_next->nd_end->nd_next = tail->nd_next; 13639 head->nd_next->nd_end = tail->nd_next->nd_end; 13640 rb_gc_force_recycle((VALUE)tail); 13641 } 13642 else { 13643 nd_set_type(tail, NODE_ARRAY); 13644 tail->nd_head = NEW_STR(tail->nd_lit); 13645 list_concat(head, tail); 13646 } 13647 break; 13648 13649 case NODE_EVSTR: 13650 if (htype == NODE_STR) { 13651 nd_set_type(head, NODE_DSTR); 13652 head->nd_alen = 1; 13653 } 13654 list_append(head, tail); 13655 break; 13656 } 13657 return head; 13658 } 13659 13660 static NODE * 13661 evstr2dstr_gen(struct parser_params *parser, NODE *node) 13662 { 13663 if (nd_type(node) == NODE_EVSTR) { 13664 node = list_append(NEW_DSTR(Qnil), node); 13665 } 13666 return node; 13667 } 13668 13669 static NODE * 13670 new_evstr_gen(struct parser_params *parser, NODE *node) 13671 { 13672 NODE *head = node; 13673 13674 if (node) { 13675 switch (nd_type(node)) { 13676 case NODE_STR: case NODE_DSTR: case NODE_EVSTR: 13677 return node; 13678 } 13679 } 13680 return NEW_EVSTR(head); 13681 } 13682 13683 static NODE * 13684 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1) 13685 { 13686 value_expr(recv); 13687 value_expr(arg1); 13688 return NEW_CALL(recv, id, NEW_LIST(arg1)); 13689 } 13690 13691 static NODE * 13692 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id) 13693 { 13694 value_expr(recv); 13695 return NEW_CALL(recv, id, 0); 13696 } 13697 13698 static NODE* 13699 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2) 13700 { 13701 value_expr(node1); 13702 value_expr(node2); 13703 if (node1) { 13704 switch (nd_type(node1)) { 13705 case NODE_DREGX: 13706 case NODE_DREGX_ONCE: 13707 return NEW_MATCH2(node1, node2); 13708 13709 case NODE_LIT: 13710 if (TYPE(node1->nd_lit) == T_REGEXP) { 13711 return NEW_MATCH2(node1, node2); 13712 } 13713 } 13714 } 13715 13716 if (node2) { 13717 switch (nd_type(node2)) { 13718 case NODE_DREGX: 13719 case NODE_DREGX_ONCE: 13720 return NEW_MATCH3(node2, node1); 13721 13722 case NODE_LIT: 13723 if (TYPE(node2->nd_lit) == T_REGEXP) { 13724 return NEW_MATCH3(node2, node1); 13725 } 13726 } 13727 } 13728 13729 return NEW_CALL(node1, tMATCH, NEW_LIST(node2)); 13730 } 13731 13732 static NODE* 13733 gettable_gen(struct parser_params *parser, ID id) 13734 { 13735 if (id == keyword_self) { 13736 return NEW_SELF(); 13737 } 13738 else if (id == keyword_nil) { 13739 return NEW_NIL(); 13740 } 13741 else if (id == keyword_true) { 13742 return NEW_TRUE(); 13743 } 13744 else if (id == keyword_false) { 13745 return NEW_FALSE(); 13746 } 13747 else if (id == keyword__FILE__) { 13748 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile), 13749 rb_filesystem_encoding())); 13750 } 13751 else if (id == keyword__LINE__) { 13752 return NEW_LIT(INT2FIX(ruby_sourceline)); 13753 } 13754 else if (id == keyword__ENCODING__) { 13755 return NEW_LIT(rb_enc_from_encoding(parser->enc)); 13756 } 13757 else if (is_local_id(id)) { 13758 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id); 13759 if (local_id(id)) return NEW_LVAR(id); 13760 /* method call without arguments */ 13761 return NEW_VCALL(id); 13762 } 13763 else if (is_global_id(id)) { 13764 return NEW_GVAR(id); 13765 } 13766 else if (is_instance_id(id)) { 13767 return NEW_IVAR(id); 13768 } 13769 else if (is_const_id(id)) { 13770 return NEW_CONST(id); 13771 } 13772 else if (is_class_id(id)) { 13773 return NEW_CVAR(id); 13774 } 13775 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); 13776 return 0; 13777 } 13778 #else /* !RIPPER */ 13779 static int 13780 id_is_var_gen(struct parser_params *parser, ID id) 13781 { 13782 if (is_notop_id(id)) { 13783 switch (id & ID_SCOPE_MASK) { 13784 case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS: 13785 return 1; 13786 case ID_LOCAL: 13787 if (dyna_in_block() && dvar_defined(id)) return 1; 13788 if (local_id(id)) return 1; 13789 /* method call without arguments */ 13790 return 0; 13791 } 13792 } 13793 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id)); 13794 return 0; 13795 } 13796 #endif /* !RIPPER */ 13797 13798 #ifdef RIPPER 13799 static VALUE 13800 assignable_gen(struct parser_params *parser, VALUE lhs) 13801 #else 13802 static NODE* 13803 assignable_gen(struct parser_params *parser, ID id, NODE *val) 13804 #endif 13805 { 13806 #ifdef RIPPER 13807 ID id = get_id(lhs); 13808 # define assignable_result(x) get_value(lhs) 13809 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs) 13810 #else 13811 # define assignable_result(x) (x) 13812 #endif 13813 if (!id) return assignable_result(0); 13814 if (id == keyword_self) { 13815 yyerror("Can't change the value of self"); 13816 } 13817 else if (id == keyword_nil) { 13818 yyerror("Can't assign to nil"); 13819 } 13820 else if (id == keyword_true) { 13821 yyerror("Can't assign to true"); 13822 } 13823 else if (id == keyword_false) { 13824 yyerror("Can't assign to false"); 13825 } 13826 else if (id == keyword__FILE__) { 13827 yyerror("Can't assign to __FILE__"); 13828 } 13829 else if (id == keyword__LINE__) { 13830 yyerror("Can't assign to __LINE__"); 13831 } 13832 else if (id == keyword__ENCODING__) { 13833 yyerror("Can't assign to __ENCODING__"); 13834 } 13835 else if (is_local_id(id)) { 13836 if (dyna_in_block()) { 13837 if (dvar_curr(id)) { 13838 return assignable_result(NEW_DASGN_CURR(id, val)); 13839 } 13840 else if (dvar_defined(id)) { 13841 return assignable_result(NEW_DASGN(id, val)); 13842 } 13843 else if (local_id(id)) { 13844 return assignable_result(NEW_LASGN(id, val)); 13845 } 13846 else { 13847 dyna_var(id); 13848 return assignable_result(NEW_DASGN_CURR(id, val)); 13849 } 13850 } 13851 else { 13852 if (!local_id(id)) { 13853 local_var(id); 13854 } 13855 return assignable_result(NEW_LASGN(id, val)); 13856 } 13857 } 13858 else if (is_global_id(id)) { 13859 return assignable_result(NEW_GASGN(id, val)); 13860 } 13861 else if (is_instance_id(id)) { 13862 return assignable_result(NEW_IASGN(id, val)); 13863 } 13864 else if (is_const_id(id)) { 13865 if (!in_def && !in_single) 13866 return assignable_result(NEW_CDECL(id, val, 0)); 13867 yyerror("dynamic constant assignment"); 13868 } 13869 else if (is_class_id(id)) { 13870 return assignable_result(NEW_CVASGN(id, val)); 13871 } 13872 else { 13873 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id)); 13874 } 13875 return assignable_result(0); 13876 #undef assignable_result 13877 #undef parser_yyerror 13878 } 13879 13880 #define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1)) 13881 13882 static ID 13883 shadowing_lvar_gen(struct parser_params *parser, ID name) 13884 { 13885 if (idUScore == name) return name; 13886 if (dyna_in_block()) { 13887 if (dvar_curr(name)) { 13888 yyerror("duplicated argument name"); 13889 } 13890 else if (dvar_defined_get(name) || local_id(name)) { 13891 rb_warningS("shadowing outer local variable - %s", rb_id2name(name)); 13892 vtable_add(lvtbl->vars, name); 13893 if (lvtbl->used) { 13894 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED); 13895 } 13896 } 13897 } 13898 else { 13899 if (local_id(name)) { 13900 yyerror("duplicated argument name"); 13901 } 13902 } 13903 return name; 13904 } 13905 13906 static void 13907 new_bv_gen(struct parser_params *parser, ID name) 13908 { 13909 if (!name) return; 13910 if (!is_local_id(name)) { 13911 compile_error(PARSER_ARG "invalid local variable - %s", 13912 rb_id2name(name)); 13913 return; 13914 } 13915 shadowing_lvar(name); 13916 dyna_var(name); 13917 } 13918 13919 #ifndef RIPPER 13920 static NODE * 13921 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx) 13922 { 13923 if (recv && nd_type(recv) == NODE_SELF) 13924 recv = (NODE *)1; 13925 return NEW_ATTRASGN(recv, tASET, idx); 13926 } 13927 13928 static void 13929 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2) 13930 { 13931 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) { 13932 compile_error(PARSER_ARG "both block arg and actual block given"); 13933 } 13934 } 13935 13936 ID 13937 rb_id_attrset(ID id) 13938 { 13939 id &= ~ID_SCOPE_MASK; 13940 id |= ID_ATTRSET; 13941 return id; 13942 } 13943 13944 static NODE * 13945 attrset_gen(struct parser_params *parser, NODE *recv, ID id) 13946 { 13947 if (recv && nd_type(recv) == NODE_SELF) 13948 recv = (NODE *)1; 13949 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0); 13950 } 13951 13952 static void 13953 rb_backref_error_gen(struct parser_params *parser, NODE *node) 13954 { 13955 switch (nd_type(node)) { 13956 case NODE_NTH_REF: 13957 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth); 13958 break; 13959 case NODE_BACK_REF: 13960 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth); 13961 break; 13962 } 13963 } 13964 13965 static NODE * 13966 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2) 13967 { 13968 if (!node2) return node1; 13969 switch (nd_type(node1)) { 13970 case NODE_BLOCK_PASS: 13971 if (node1->nd_head) 13972 node1->nd_head = arg_concat(node1->nd_head, node2); 13973 else 13974 node1->nd_head = NEW_LIST(node2); 13975 return node1; 13976 case NODE_ARGSPUSH: 13977 if (nd_type(node2) != NODE_ARRAY) break; 13978 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2); 13979 nd_set_type(node1, NODE_ARGSCAT); 13980 return node1; 13981 case NODE_ARGSCAT: 13982 if (nd_type(node2) != NODE_ARRAY || 13983 nd_type(node1->nd_body) != NODE_ARRAY) break; 13984 node1->nd_body = list_concat(node1->nd_body, node2); 13985 return node1; 13986 } 13987 return NEW_ARGSCAT(node1, node2); 13988 } 13989 13990 static NODE * 13991 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2) 13992 { 13993 if (!node1) return NEW_LIST(node2); 13994 switch (nd_type(node1)) { 13995 case NODE_ARRAY: 13996 return list_append(node1, node2); 13997 case NODE_BLOCK_PASS: 13998 node1->nd_head = arg_append(node1->nd_head, node2); 13999 return node1; 14000 case NODE_ARGSPUSH: 14001 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2); 14002 nd_set_type(node1, NODE_ARGSCAT); 14003 return node1; 14004 } 14005 return NEW_ARGSPUSH(node1, node2); 14006 } 14007 14008 static NODE * 14009 splat_array(NODE* node) 14010 { 14011 if (nd_type(node) == NODE_SPLAT) node = node->nd_head; 14012 if (nd_type(node) == NODE_ARRAY) return node; 14013 return 0; 14014 } 14015 14016 static NODE * 14017 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs) 14018 { 14019 if (!lhs) return 0; 14020 14021 switch (nd_type(lhs)) { 14022 case NODE_GASGN: 14023 case NODE_IASGN: 14024 case NODE_IASGN2: 14025 case NODE_LASGN: 14026 case NODE_DASGN: 14027 case NODE_DASGN_CURR: 14028 case NODE_MASGN: 14029 case NODE_CDECL: 14030 case NODE_CVASGN: 14031 lhs->nd_value = rhs; 14032 break; 14033 14034 case NODE_ATTRASGN: 14035 case NODE_CALL: 14036 lhs->nd_args = arg_append(lhs->nd_args, rhs); 14037 break; 14038 14039 default: 14040 /* should not happen */ 14041 break; 14042 } 14043 14044 return lhs; 14045 } 14046 14047 static int 14048 value_expr_gen(struct parser_params *parser, NODE *node) 14049 { 14050 int cond = 0; 14051 14052 if (!node) { 14053 rb_warning0("empty expression"); 14054 } 14055 while (node) { 14056 switch (nd_type(node)) { 14057 case NODE_DEFN: 14058 case NODE_DEFS: 14059 parser_warning(node, "void value expression"); 14060 return FALSE; 14061 14062 case NODE_RETURN: 14063 case NODE_BREAK: 14064 case NODE_NEXT: 14065 case NODE_REDO: 14066 case NODE_RETRY: 14067 if (!cond) yyerror("void value expression"); 14068 /* or "control never reach"? */ 14069 return FALSE; 14070 14071 case NODE_BLOCK: 14072 while (node->nd_next) { 14073 node = node->nd_next; 14074 } 14075 node = node->nd_head; 14076 break; 14077 14078 case NODE_BEGIN: 14079 node = node->nd_body; 14080 break; 14081 14082 case NODE_IF: 14083 if (!node->nd_body) { 14084 node = node->nd_else; 14085 break; 14086 } 14087 else if (!node->nd_else) { 14088 node = node->nd_body; 14089 break; 14090 } 14091 if (!value_expr(node->nd_body)) return FALSE; 14092 node = node->nd_else; 14093 break; 14094 14095 case NODE_AND: 14096 case NODE_OR: 14097 cond = 1; 14098 node = node->nd_2nd; 14099 break; 14100 14101 default: 14102 return TRUE; 14103 } 14104 } 14105 14106 return TRUE; 14107 } 14108 14109 static void 14110 void_expr_gen(struct parser_params *parser, NODE *node) 14111 { 14112 const char *useless = 0; 14113 14114 if (!RTEST(ruby_verbose)) return; 14115 14116 if (!node) return; 14117 switch (nd_type(node)) { 14118 case NODE_CALL: 14119 switch (node->nd_mid) { 14120 case '+': 14121 case '-': 14122 case '*': 14123 case '/': 14124 case '%': 14125 case tPOW: 14126 case tUPLUS: 14127 case tUMINUS: 14128 case '|': 14129 case '^': 14130 case '&': 14131 case tCMP: 14132 case '>': 14133 case tGEQ: 14134 case '<': 14135 case tLEQ: 14136 case tEQ: 14137 case tNEQ: 14138 useless = rb_id2name(node->nd_mid); 14139 break; 14140 } 14141 break; 14142 14143 case NODE_LVAR: 14144 case NODE_DVAR: 14145 case NODE_GVAR: 14146 case NODE_IVAR: 14147 case NODE_CVAR: 14148 case NODE_NTH_REF: 14149 case NODE_BACK_REF: 14150 useless = "a variable"; 14151 break; 14152 case NODE_CONST: 14153 useless = "a constant"; 14154 break; 14155 case NODE_LIT: 14156 case NODE_STR: 14157 case NODE_DSTR: 14158 case NODE_DREGX: 14159 case NODE_DREGX_ONCE: 14160 useless = "a literal"; 14161 break; 14162 case NODE_COLON2: 14163 case NODE_COLON3: 14164 useless = "::"; 14165 break; 14166 case NODE_DOT2: 14167 useless = ".."; 14168 break; 14169 case NODE_DOT3: 14170 useless = "..."; 14171 break; 14172 case NODE_SELF: 14173 useless = "self"; 14174 break; 14175 case NODE_NIL: 14176 useless = "nil"; 14177 break; 14178 case NODE_TRUE: 14179 useless = "true"; 14180 break; 14181 case NODE_FALSE: 14182 useless = "false"; 14183 break; 14184 case NODE_DEFINED: 14185 useless = "defined?"; 14186 break; 14187 } 14188 14189 if (useless) { 14190 int line = ruby_sourceline; 14191 14192 ruby_sourceline = nd_line(node); 14193 rb_warnS("possibly useless use of %s in void context", useless); 14194 ruby_sourceline = line; 14195 } 14196 } 14197 14198 static void 14199 void_stmts_gen(struct parser_params *parser, NODE *node) 14200 { 14201 if (!RTEST(ruby_verbose)) return; 14202 if (!node) return; 14203 if (nd_type(node) != NODE_BLOCK) return; 14204 14205 for (;;) { 14206 if (!node->nd_next) return; 14207 void_expr0(node->nd_head); 14208 node = node->nd_next; 14209 } 14210 } 14211 14212 static NODE * 14213 remove_begin(NODE *node) 14214 { 14215 NODE **n = &node, *n1 = node; 14216 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) { 14217 *n = n1 = n1->nd_body; 14218 } 14219 return node; 14220 } 14221 14222 static void 14223 reduce_nodes_gen(struct parser_params *parser, NODE **body) 14224 { 14225 NODE *node = *body; 14226 14227 if (!node) { 14228 *body = NEW_NIL(); 14229 return; 14230 } 14231 #define subnodes(n1, n2) \ 14232 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \ 14233 (!node->n2) ? (body = &node->n1, 1) : \ 14234 (reduce_nodes(&node->n1), body = &node->n2, 1)) 14235 14236 while (node) { 14237 int newline = (int)(node->flags & NODE_FL_NEWLINE); 14238 switch (nd_type(node)) { 14239 end: 14240 case NODE_NIL: 14241 *body = 0; 14242 return; 14243 case NODE_RETURN: 14244 *body = node = node->nd_stts; 14245 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14246 continue; 14247 case NODE_BEGIN: 14248 *body = node = node->nd_body; 14249 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14250 continue; 14251 case NODE_BLOCK: 14252 body = &node->nd_end->nd_head; 14253 break; 14254 case NODE_IF: 14255 if (subnodes(nd_body, nd_else)) break; 14256 return; 14257 case NODE_CASE: 14258 body = &node->nd_body; 14259 break; 14260 case NODE_WHEN: 14261 if (!subnodes(nd_body, nd_next)) goto end; 14262 break; 14263 case NODE_ENSURE: 14264 if (!subnodes(nd_head, nd_resq)) goto end; 14265 break; 14266 case NODE_RESCUE: 14267 if (node->nd_else) { 14268 body = &node->nd_resq; 14269 break; 14270 } 14271 if (!subnodes(nd_head, nd_resq)) goto end; 14272 break; 14273 default: 14274 return; 14275 } 14276 node = *body; 14277 if (newline && node) node->flags |= NODE_FL_NEWLINE; 14278 } 14279 14280 #undef subnodes 14281 } 14282 14283 static int 14284 assign_in_cond(struct parser_params *parser, NODE *node) 14285 { 14286 switch (nd_type(node)) { 14287 case NODE_MASGN: 14288 yyerror("multiple assignment in conditional"); 14289 return 1; 14290 14291 case NODE_LASGN: 14292 case NODE_DASGN: 14293 case NODE_DASGN_CURR: 14294 case NODE_GASGN: 14295 case NODE_IASGN: 14296 break; 14297 14298 default: 14299 return 0; 14300 } 14301 14302 if (!node->nd_value) return 1; 14303 switch (nd_type(node->nd_value)) { 14304 case NODE_LIT: 14305 case NODE_STR: 14306 case NODE_NIL: 14307 case NODE_TRUE: 14308 case NODE_FALSE: 14309 /* reports always */ 14310 parser_warn(node->nd_value, "found = in conditional, should be =="); 14311 return 1; 14312 14313 case NODE_DSTR: 14314 case NODE_XSTR: 14315 case NODE_DXSTR: 14316 case NODE_EVSTR: 14317 case NODE_DREGX: 14318 default: 14319 break; 14320 } 14321 return 1; 14322 } 14323 14324 static void 14325 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 14326 { 14327 if (!e_option_supplied(parser)) parser_warn(node, str); 14328 } 14329 14330 static void 14331 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str) 14332 { 14333 if (!e_option_supplied(parser)) parser_warning(node, str); 14334 } 14335 14336 static void 14337 fixup_nodes(NODE **rootnode) 14338 { 14339 NODE *node, *next, *head; 14340 14341 for (node = *rootnode; node; node = next) { 14342 enum node_type type; 14343 VALUE val; 14344 14345 next = node->nd_next; 14346 head = node->nd_head; 14347 rb_gc_force_recycle((VALUE)node); 14348 *rootnode = next; 14349 switch (type = nd_type(head)) { 14350 case NODE_DOT2: 14351 case NODE_DOT3: 14352 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit, 14353 type == NODE_DOT3); 14354 rb_gc_force_recycle((VALUE)head->nd_beg); 14355 rb_gc_force_recycle((VALUE)head->nd_end); 14356 nd_set_type(head, NODE_LIT); 14357 head->nd_lit = val; 14358 break; 14359 default: 14360 break; 14361 } 14362 } 14363 } 14364 14365 static NODE *cond0(struct parser_params*,NODE*); 14366 14367 static NODE* 14368 range_op(struct parser_params *parser, NODE *node) 14369 { 14370 enum node_type type; 14371 14372 if (node == 0) return 0; 14373 14374 type = nd_type(node); 14375 value_expr(node); 14376 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) { 14377 warn_unless_e_option(parser, node, "integer literal in conditional range"); 14378 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$.")))); 14379 } 14380 return cond0(parser, node); 14381 } 14382 14383 static int 14384 literal_node(NODE *node) 14385 { 14386 if (!node) return 1; /* same as NODE_NIL */ 14387 switch (nd_type(node)) { 14388 case NODE_LIT: 14389 case NODE_STR: 14390 case NODE_DSTR: 14391 case NODE_EVSTR: 14392 case NODE_DREGX: 14393 case NODE_DREGX_ONCE: 14394 case NODE_DSYM: 14395 return 2; 14396 case NODE_TRUE: 14397 case NODE_FALSE: 14398 case NODE_NIL: 14399 return 1; 14400 } 14401 return 0; 14402 } 14403 14404 static NODE* 14405 cond0(struct parser_params *parser, NODE *node) 14406 { 14407 if (node == 0) return 0; 14408 assign_in_cond(parser, node); 14409 14410 switch (nd_type(node)) { 14411 case NODE_DSTR: 14412 case NODE_EVSTR: 14413 case NODE_STR: 14414 rb_warn0("string literal in condition"); 14415 break; 14416 14417 case NODE_DREGX: 14418 case NODE_DREGX_ONCE: 14419 warning_unless_e_option(parser, node, "regex literal in condition"); 14420 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_"))); 14421 14422 case NODE_AND: 14423 case NODE_OR: 14424 node->nd_1st = cond0(parser, node->nd_1st); 14425 node->nd_2nd = cond0(parser, node->nd_2nd); 14426 break; 14427 14428 case NODE_DOT2: 14429 case NODE_DOT3: 14430 node->nd_beg = range_op(parser, node->nd_beg); 14431 node->nd_end = range_op(parser, node->nd_end); 14432 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2); 14433 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3); 14434 if (!e_option_supplied(parser)) { 14435 int b = literal_node(node->nd_beg); 14436 int e = literal_node(node->nd_end); 14437 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) { 14438 parser_warn(node, "range literal in condition"); 14439 } 14440 } 14441 break; 14442 14443 case NODE_DSYM: 14444 parser_warning(node, "literal in condition"); 14445 break; 14446 14447 case NODE_LIT: 14448 if (TYPE(node->nd_lit) == T_REGEXP) { 14449 warn_unless_e_option(parser, node, "regex literal in condition"); 14450 nd_set_type(node, NODE_MATCH); 14451 } 14452 else { 14453 parser_warning(node, "literal in condition"); 14454 } 14455 default: 14456 break; 14457 } 14458 return node; 14459 } 14460 14461 static NODE* 14462 cond_gen(struct parser_params *parser, NODE *node) 14463 { 14464 if (node == 0) return 0; 14465 return cond0(parser, node); 14466 } 14467 14468 static NODE* 14469 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right) 14470 { 14471 value_expr(left); 14472 if (left && (enum node_type)nd_type(left) == type) { 14473 NODE *node = left, *second; 14474 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) { 14475 node = second; 14476 } 14477 node->nd_2nd = NEW_NODE(type, second, right, 0); 14478 return left; 14479 } 14480 return NEW_NODE(type, left, right, 0); 14481 } 14482 14483 static void 14484 no_blockarg(struct parser_params *parser, NODE *node) 14485 { 14486 if (node && nd_type(node) == NODE_BLOCK_PASS) { 14487 compile_error(PARSER_ARG "block argument should not be given"); 14488 } 14489 } 14490 14491 static NODE * 14492 ret_args_gen(struct parser_params *parser, NODE *node) 14493 { 14494 if (node) { 14495 no_blockarg(parser, node); 14496 if (nd_type(node) == NODE_ARRAY) { 14497 if (node->nd_next == 0) { 14498 node = node->nd_head; 14499 } 14500 else { 14501 nd_set_type(node, NODE_VALUES); 14502 } 14503 } 14504 } 14505 return node; 14506 } 14507 14508 static NODE * 14509 new_yield_gen(struct parser_params *parser, NODE *node) 14510 { 14511 long state = Qtrue; 14512 14513 if (node) { 14514 no_blockarg(parser, node); 14515 if (node && nd_type(node) == NODE_SPLAT) { 14516 state = Qtrue; 14517 } 14518 } 14519 else { 14520 state = Qfalse; 14521 } 14522 return NEW_YIELD(node, state); 14523 } 14524 14525 static NODE* 14526 negate_lit(NODE *node) 14527 { 14528 switch (TYPE(node->nd_lit)) { 14529 case T_FIXNUM: 14530 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit)); 14531 break; 14532 case T_BIGNUM: 14533 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0); 14534 break; 14535 case T_FLOAT: 14536 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit); 14537 break; 14538 default: 14539 break; 14540 } 14541 return node; 14542 } 14543 14544 static NODE * 14545 arg_blk_pass(NODE *node1, NODE *node2) 14546 { 14547 if (node2) { 14548 node2->nd_head = node1; 14549 return node2; 14550 } 14551 return node1; 14552 } 14553 14554 static NODE* 14555 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b) 14556 { 14557 int saved_line = ruby_sourceline; 14558 NODE *node; 14559 NODE *i1, *i2 = 0; 14560 14561 node = NEW_ARGS(m ? m->nd_plen : 0, o); 14562 i1 = m ? m->nd_next : 0; 14563 node->nd_next = NEW_ARGS_AUX(r, b); 14564 14565 if (p) { 14566 i2 = p->nd_next; 14567 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen); 14568 } 14569 else if (i1) { 14570 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0); 14571 } 14572 if (i1 || i2) { 14573 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0); 14574 } 14575 ruby_sourceline = saved_line; 14576 return node; 14577 } 14578 #endif /* !RIPPER */ 14579 14580 static void 14581 warn_unused_var(struct parser_params *parser, struct local_vars *local) 14582 { 14583 int i, cnt; 14584 ID *v, *u; 14585 14586 if (!local->used) return; 14587 v = local->vars->tbl; 14588 u = local->used->tbl; 14589 cnt = local->used->pos; 14590 if (cnt != local->vars->pos) { 14591 rb_bug("local->used->pos != local->vars->pos"); 14592 } 14593 for (i = 0; i < cnt; ++i) { 14594 if (!v[i] || (u[i] & LVAR_USED)) continue; 14595 if (idUScore == v[i]) continue; 14596 rb_compile_warn(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i])); 14597 } 14598 } 14599 14600 static void 14601 local_push_gen(struct parser_params *parser, int inherit_dvars) 14602 { 14603 struct local_vars *local; 14604 14605 local = ALLOC(struct local_vars); 14606 local->prev = lvtbl; 14607 local->args = vtable_alloc(0); 14608 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE); 14609 local->used = !inherit_dvars && RTEST(ruby_verbose) ? vtable_alloc(0) : 0; 14610 lvtbl = local; 14611 } 14612 14613 static void 14614 local_pop_gen(struct parser_params *parser) 14615 { 14616 struct local_vars *local = lvtbl->prev; 14617 if (lvtbl->used) { 14618 warn_unused_var(parser, lvtbl); 14619 vtable_free(lvtbl->used); 14620 } 14621 vtable_free(lvtbl->args); 14622 vtable_free(lvtbl->vars); 14623 xfree(lvtbl); 14624 lvtbl = local; 14625 } 14626 14627 #ifndef RIPPER 14628 static ID* 14629 vtable_tblcpy(ID *buf, const struct vtable *src) 14630 { 14631 int i, cnt = vtable_size(src); 14632 14633 if (cnt > 0) { 14634 buf[0] = cnt; 14635 for (i = 0; i < cnt; i++) { 14636 buf[i] = src->tbl[i]; 14637 } 14638 return buf; 14639 } 14640 return 0; 14641 } 14642 14643 static ID* 14644 local_tbl_gen(struct parser_params *parser) 14645 { 14646 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars); 14647 ID *buf; 14648 14649 if (cnt <= 0) return 0; 14650 buf = ALLOC_N(ID, cnt + 1); 14651 vtable_tblcpy(buf+1, lvtbl->args); 14652 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars); 14653 buf[0] = cnt; 14654 return buf; 14655 } 14656 #endif 14657 14658 static int 14659 arg_var_gen(struct parser_params *parser, ID id) 14660 { 14661 vtable_add(lvtbl->args, id); 14662 return vtable_size(lvtbl->args) - 1; 14663 } 14664 14665 static int 14666 local_var_gen(struct parser_params *parser, ID id) 14667 { 14668 vtable_add(lvtbl->vars, id); 14669 if (lvtbl->used) { 14670 vtable_add(lvtbl->used, (ID)ruby_sourceline); 14671 } 14672 return vtable_size(lvtbl->vars) - 1; 14673 } 14674 14675 static int 14676 local_id_gen(struct parser_params *parser, ID id) 14677 { 14678 struct vtable *vars, *args, *used; 14679 14680 vars = lvtbl->vars; 14681 args = lvtbl->args; 14682 used = lvtbl->used; 14683 14684 while (vars && POINTER_P(vars->prev)) { 14685 vars = vars->prev; 14686 args = args->prev; 14687 if (used) used = used->prev; 14688 } 14689 14690 if (vars && vars->prev == DVARS_INHERIT) { 14691 return rb_local_defined(id); 14692 } 14693 else if (vtable_included(args, id)) { 14694 return 1; 14695 } 14696 else { 14697 int i = vtable_included(vars, id); 14698 if (i && used) used->tbl[i-1] |= LVAR_USED; 14699 return i != 0; 14700 } 14701 } 14702 14703 static const struct vtable * 14704 dyna_push_gen(struct parser_params *parser) 14705 { 14706 lvtbl->args = vtable_alloc(lvtbl->args); 14707 lvtbl->vars = vtable_alloc(lvtbl->vars); 14708 if (lvtbl->used) { 14709 lvtbl->used = vtable_alloc(lvtbl->used); 14710 } 14711 return lvtbl->args; 14712 } 14713 14714 static void 14715 dyna_pop_1(struct parser_params *parser) 14716 { 14717 struct vtable *tmp; 14718 14719 if ((tmp = lvtbl->used) != 0) { 14720 warn_unused_var(parser, lvtbl); 14721 lvtbl->used = lvtbl->used->prev; 14722 vtable_free(tmp); 14723 } 14724 tmp = lvtbl->args; 14725 lvtbl->args = lvtbl->args->prev; 14726 vtable_free(tmp); 14727 tmp = lvtbl->vars; 14728 lvtbl->vars = lvtbl->vars->prev; 14729 vtable_free(tmp); 14730 } 14731 14732 static void 14733 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs) 14734 { 14735 while (lvtbl->args != lvargs) { 14736 dyna_pop_1(parser); 14737 if (!lvtbl->args) { 14738 struct local_vars *local = lvtbl->prev; 14739 xfree(lvtbl); 14740 lvtbl = local; 14741 } 14742 } 14743 dyna_pop_1(parser); 14744 } 14745 14746 static int 14747 dyna_in_block_gen(struct parser_params *parser) 14748 { 14749 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE; 14750 } 14751 14752 static int 14753 dvar_defined_gen(struct parser_params *parser, ID id, int get) 14754 { 14755 struct vtable *vars, *args, *used; 14756 int i; 14757 14758 args = lvtbl->args; 14759 vars = lvtbl->vars; 14760 used = lvtbl->used; 14761 14762 while (POINTER_P(vars)) { 14763 if (vtable_included(args, id)) { 14764 return 1; 14765 } 14766 if ((i = vtable_included(vars, id)) != 0) { 14767 if (used) used->tbl[i-1] |= LVAR_USED; 14768 return 1; 14769 } 14770 args = args->prev; 14771 vars = vars->prev; 14772 if (get) used = 0; 14773 if (used) used = used->prev; 14774 } 14775 14776 if (vars == DVARS_INHERIT) { 14777 return rb_dvar_defined(id); 14778 } 14779 14780 return 0; 14781 } 14782 14783 static int 14784 dvar_curr_gen(struct parser_params *parser, ID id) 14785 { 14786 return (vtable_included(lvtbl->args, id) || 14787 vtable_included(lvtbl->vars, id)); 14788 } 14789 14790 #ifndef RIPPER 14791 static void 14792 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options) 14793 { 14794 int c = RE_OPTION_ENCODING_IDX(options); 14795 14796 if (c) { 14797 int opt, idx; 14798 rb_char_to_option_kcode(c, &opt, &idx); 14799 if (idx != ENCODING_GET(str) && 14800 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 14801 goto error; 14802 } 14803 ENCODING_SET(str, idx); 14804 } 14805 else if (RE_OPTION_ENCODING_NONE(options)) { 14806 if (!ENCODING_IS_ASCII8BIT(str) && 14807 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 14808 c = 'n'; 14809 goto error; 14810 } 14811 rb_enc_associate(str, rb_ascii8bit_encoding()); 14812 } 14813 else if (parser->enc == rb_usascii_encoding()) { 14814 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) { 14815 /* raise in re.c */ 14816 rb_enc_associate(str, rb_usascii_encoding()); 14817 } 14818 else { 14819 rb_enc_associate(str, rb_ascii8bit_encoding()); 14820 } 14821 } 14822 return; 14823 14824 error: 14825 compile_error(PARSER_ARG 14826 "regexp encoding option '%c' differs from source encoding '%s'", 14827 c, rb_enc_name(rb_enc_get(str))); 14828 } 14829 14830 static int 14831 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options) 14832 { 14833 VALUE err; 14834 reg_fragment_setenc(str, options); 14835 err = rb_reg_check_preprocess(str); 14836 if (err != Qnil) { 14837 err = rb_obj_as_string(err); 14838 compile_error(PARSER_ARG "%s", RSTRING_PTR(err)); 14839 RB_GC_GUARD(err); 14840 return 0; 14841 } 14842 return 1; 14843 } 14844 14845 typedef struct { 14846 struct parser_params* parser; 14847 rb_encoding *enc; 14848 NODE *succ_block; 14849 NODE *fail_block; 14850 int num; 14851 } reg_named_capture_assign_t; 14852 14853 static int 14854 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end, 14855 int back_num, int *back_refs, OnigRegex regex, void *arg0) 14856 { 14857 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0; 14858 struct parser_params* parser = arg->parser; 14859 rb_encoding *enc = arg->enc; 14860 long len = name_end - name; 14861 const char *s = (const char *)name; 14862 ID var; 14863 14864 arg->num++; 14865 14866 if (arg->succ_block == 0) { 14867 arg->succ_block = NEW_BEGIN(0); 14868 arg->fail_block = NEW_BEGIN(0); 14869 } 14870 14871 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) || 14872 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) || 14873 !rb_enc_symname2_p(s, len, enc)) { 14874 return ST_CONTINUE; 14875 } 14876 var = rb_intern3(s, len, enc); 14877 if (dvar_defined(var) || local_id(var)) { 14878 rb_warningS("named capture conflicts a local variable - %s", 14879 rb_id2name(var)); 14880 } 14881 arg->succ_block = block_append(arg->succ_block, 14882 newline_node(node_assign(assignable(var,0), 14883 NEW_CALL( 14884 gettable(rb_intern("$~")), 14885 idAREF, 14886 NEW_LIST(NEW_LIT(ID2SYM(var)))) 14887 ))); 14888 arg->fail_block = block_append(arg->fail_block, 14889 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil)))); 14890 return ST_CONTINUE; 14891 } 14892 14893 static NODE * 14894 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match) 14895 { 14896 reg_named_capture_assign_t arg; 14897 14898 arg.parser = parser; 14899 arg.enc = rb_enc_get(regexp); 14900 arg.succ_block = 0; 14901 arg.fail_block = 0; 14902 arg.num = 0; 14903 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg); 14904 14905 if (arg.num == 0) 14906 return match; 14907 14908 return 14909 block_append( 14910 newline_node(match), 14911 NEW_IF(gettable(rb_intern("$~")), 14912 block_append( 14913 newline_node(arg.succ_block), 14914 newline_node( 14915 NEW_CALL( 14916 gettable(rb_intern("$~")), 14917 rb_intern("begin"), 14918 NEW_LIST(NEW_LIT(INT2FIX(0)))))), 14919 block_append( 14920 newline_node(arg.fail_block), 14921 newline_node( 14922 NEW_LIT(Qnil))))); 14923 } 14924 14925 static VALUE 14926 reg_compile_gen(struct parser_params* parser, VALUE str, int options) 14927 { 14928 VALUE re; 14929 VALUE err; 14930 14931 reg_fragment_setenc(str, options); 14932 err = rb_errinfo(); 14933 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline); 14934 if (NIL_P(re)) { 14935 ID mesg = rb_intern("mesg"); 14936 VALUE m = rb_attr_get(rb_errinfo(), mesg); 14937 rb_set_errinfo(err); 14938 if (!NIL_P(err)) { 14939 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m); 14940 } 14941 else { 14942 compile_error(PARSER_ARG "%s", RSTRING_PTR(m)); 14943 } 14944 return Qnil; 14945 } 14946 return re; 14947 } 14948 14949 void 14950 rb_gc_mark_parser(void) 14951 { 14952 } 14953 14954 NODE* 14955 rb_parser_append_print(VALUE vparser, NODE *node) 14956 { 14957 NODE *prelude = 0; 14958 NODE *scope = node; 14959 struct parser_params *parser; 14960 14961 if (!node) return node; 14962 14963 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 14964 14965 node = node->nd_body; 14966 14967 if (nd_type(node) == NODE_PRELUDE) { 14968 prelude = node; 14969 node = node->nd_body; 14970 } 14971 14972 node = block_append(node, 14973 NEW_FCALL(rb_intern("print"), 14974 NEW_ARRAY(NEW_GVAR(rb_intern("$_"))))); 14975 if (prelude) { 14976 prelude->nd_body = node; 14977 scope->nd_body = prelude; 14978 } 14979 else { 14980 scope->nd_body = node; 14981 } 14982 14983 return scope; 14984 } 14985 14986 NODE * 14987 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split) 14988 { 14989 NODE *prelude = 0; 14990 NODE *scope = node; 14991 struct parser_params *parser; 14992 14993 if (!node) return node; 14994 14995 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 14996 14997 node = node->nd_body; 14998 14999 if (nd_type(node) == NODE_PRELUDE) { 15000 prelude = node; 15001 node = node->nd_body; 15002 } 15003 if (split) { 15004 node = block_append(NEW_GASGN(rb_intern("$F"), 15005 NEW_CALL(NEW_GVAR(rb_intern("$_")), 15006 rb_intern("split"), 0)), 15007 node); 15008 } 15009 if (chop) { 15010 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")), 15011 rb_intern("chop!"), 0), node); 15012 } 15013 15014 node = NEW_OPT_N(node); 15015 15016 if (prelude) { 15017 prelude->nd_body = node; 15018 scope->nd_body = prelude; 15019 } 15020 else { 15021 scope->nd_body = node; 15022 } 15023 15024 return scope; 15025 } 15026 15027 static const struct { 15028 ID token; 15029 const char *name; 15030 } op_tbl[] = { 15031 {tDOT2, ".."}, 15032 {tDOT3, "..."}, 15033 {'+', "+(binary)"}, 15034 {'-', "-(binary)"}, 15035 {tPOW, "**"}, 15036 {tUPLUS, "+@"}, 15037 {tUMINUS, "-@"}, 15038 {tCMP, "<=>"}, 15039 {tGEQ, ">="}, 15040 {tLEQ, "<="}, 15041 {tEQ, "=="}, 15042 {tEQQ, "==="}, 15043 {tNEQ, "!="}, 15044 {tMATCH, "=~"}, 15045 {tNMATCH, "!~"}, 15046 {tAREF, "[]"}, 15047 {tASET, "[]="}, 15048 {tLSHFT, "<<"}, 15049 {tRSHFT, ">>"}, 15050 {tCOLON2, "::"}, 15051 }; 15052 15053 #define op_tbl_count numberof(op_tbl) 15054 15055 #ifndef ENABLE_SELECTOR_NAMESPACE 15056 #define ENABLE_SELECTOR_NAMESPACE 0 15057 #endif 15058 15059 static struct symbols { 15060 ID last_id; 15061 st_table *sym_id; 15062 st_table *id_str; 15063 #if ENABLE_SELECTOR_NAMESPACE 15064 st_table *ivar2_id; 15065 st_table *id_ivar2; 15066 #endif 15067 VALUE op_sym[tLAST_TOKEN]; 15068 } global_symbols = {tLAST_ID}; 15069 15070 static const struct st_hash_type symhash = { 15071 rb_str_hash_cmp, 15072 rb_str_hash, 15073 }; 15074 15075 #if ENABLE_SELECTOR_NAMESPACE 15076 struct ivar2_key { 15077 ID id; 15078 VALUE klass; 15079 }; 15080 15081 static int 15082 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2) 15083 { 15084 if (key1->id == key2->id && key1->klass == key2->klass) { 15085 return 0; 15086 } 15087 return 1; 15088 } 15089 15090 static int 15091 ivar2_hash(struct ivar2_key *key) 15092 { 15093 return (key->id << 8) ^ (key->klass >> 2); 15094 } 15095 15096 static const struct st_hash_type ivar2_hash_type = { 15097 ivar2_cmp, 15098 ivar2_hash, 15099 }; 15100 #endif 15101 15102 void 15103 Init_sym(void) 15104 { 15105 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000); 15106 global_symbols.id_str = st_init_numtable_with_size(1000); 15107 #if ENABLE_SELECTOR_NAMESPACE 15108 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000); 15109 global_symbols.id_ivar2 = st_init_numtable_with_size(1000); 15110 #endif 15111 15112 Init_id(); 15113 } 15114 15115 void 15116 rb_gc_mark_symbols(void) 15117 { 15118 rb_mark_tbl(global_symbols.id_str); 15119 rb_gc_mark_locations(global_symbols.op_sym, 15120 global_symbols.op_sym + tLAST_TOKEN); 15121 } 15122 #endif /* !RIPPER */ 15123 15124 static ID 15125 internal_id_gen(struct parser_params *parser) 15126 { 15127 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars); 15128 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1; 15129 return ID_INTERNAL | (id << ID_SCOPE_SHIFT); 15130 } 15131 15132 #ifndef RIPPER 15133 static int 15134 is_special_global_name(const char *m, const char *e, rb_encoding *enc) 15135 { 15136 int mb = 0; 15137 15138 if (m >= e) return 0; 15139 switch (*m) { 15140 case '~': case '*': case '$': case '?': case '!': case '@': 15141 case '/': case '\\': case ';': case ',': case '.': case '=': 15142 case ':': case '<': case '>': case '\"': 15143 case '&': case '`': case '\'': case '+': 15144 case '0': 15145 ++m; 15146 break; 15147 case '-': 15148 ++m; 15149 if (m < e && is_identchar(m, e, enc)) { 15150 if (!ISASCII(*m)) mb = 1; 15151 m += rb_enc_mbclen(m, e, enc); 15152 } 15153 break; 15154 default: 15155 if (!rb_enc_isdigit(*m, enc)) return 0; 15156 do { 15157 if (!ISASCII(*m)) mb = 1; 15158 ++m; 15159 } while (m < e && rb_enc_isdigit(*m, enc)); 15160 } 15161 return m == e ? mb + 1 : 0; 15162 } 15163 15164 int 15165 rb_symname_p(const char *name) 15166 { 15167 return rb_enc_symname_p(name, rb_ascii8bit_encoding()); 15168 } 15169 15170 int 15171 rb_enc_symname_p(const char *name, rb_encoding *enc) 15172 { 15173 return rb_enc_symname2_p(name, strlen(name), enc); 15174 } 15175 15176 int 15177 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc) 15178 { 15179 const char *m = name; 15180 const char *e = m + len; 15181 int localid = FALSE; 15182 15183 if (!m || len <= 0) return FALSE; 15184 switch (*m) { 15185 case '\0': 15186 return FALSE; 15187 15188 case '$': 15189 if (is_special_global_name(++m, e, enc)) return TRUE; 15190 goto id; 15191 15192 case '@': 15193 if (*++m == '@') ++m; 15194 goto id; 15195 15196 case '<': 15197 switch (*++m) { 15198 case '<': ++m; break; 15199 case '=': if (*++m == '>') ++m; break; 15200 default: break; 15201 } 15202 break; 15203 15204 case '>': 15205 switch (*++m) { 15206 case '>': case '=': ++m; break; 15207 } 15208 break; 15209 15210 case '=': 15211 switch (*++m) { 15212 case '~': ++m; break; 15213 case '=': if (*++m == '=') ++m; break; 15214 default: return FALSE; 15215 } 15216 break; 15217 15218 case '*': 15219 if (*++m == '*') ++m; 15220 break; 15221 15222 case '+': case '-': 15223 if (*++m == '@') ++m; 15224 break; 15225 15226 case '|': case '^': case '&': case '/': case '%': case '~': case '`': 15227 ++m; 15228 break; 15229 15230 case '[': 15231 if (*++m != ']') return FALSE; 15232 if (*++m == '=') ++m; 15233 break; 15234 15235 case '!': 15236 if (len == 1) return TRUE; 15237 switch (*++m) { 15238 case '=': case '~': ++m; break; 15239 default: return FALSE; 15240 } 15241 break; 15242 15243 default: 15244 localid = !rb_enc_isupper(*m, enc); 15245 id: 15246 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m))) 15247 return FALSE; 15248 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc); 15249 if (localid) { 15250 switch (*m) { 15251 case '!': case '?': case '=': ++m; 15252 } 15253 } 15254 break; 15255 } 15256 return m == e; 15257 } 15258 15259 static ID 15260 register_symid(ID id, const char *name, long len, rb_encoding *enc) 15261 { 15262 VALUE str = rb_enc_str_new(name, len, enc); 15263 OBJ_FREEZE(str); 15264 st_add_direct(global_symbols.sym_id, (st_data_t)str, id); 15265 st_add_direct(global_symbols.id_str, id, (st_data_t)str); 15266 return id; 15267 } 15268 15269 ID 15270 rb_intern3(const char *name, long len, rb_encoding *enc) 15271 { 15272 const char *m = name; 15273 const char *e = m + len; 15274 unsigned char c; 15275 VALUE str; 15276 ID id; 15277 long last; 15278 int mb; 15279 st_data_t data; 15280 struct RString fake_str; 15281 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED; 15282 fake_str.basic.klass = rb_cString; 15283 fake_str.as.heap.len = len; 15284 fake_str.as.heap.ptr = (char *)name; 15285 fake_str.as.heap.aux.capa = len; 15286 str = (VALUE)&fake_str; 15287 rb_enc_associate(str, enc); 15288 OBJ_FREEZE(str); 15289 15290 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) { 15291 rb_raise(rb_eEncodingError, "invalid encoding symbol"); 15292 } 15293 15294 if (st_lookup(global_symbols.sym_id, str, &data)) 15295 return (ID)data; 15296 15297 if (rb_cString && !rb_enc_asciicompat(enc)) { 15298 id = ID_JUNK; 15299 goto new_id; 15300 } 15301 last = len-1; 15302 id = 0; 15303 switch (*m) { 15304 case '$': 15305 id |= ID_GLOBAL; 15306 if ((mb = is_special_global_name(++m, e, enc)) != 0) { 15307 if (!--mb) enc = rb_ascii8bit_encoding(); 15308 goto new_id; 15309 } 15310 break; 15311 case '@': 15312 if (m[1] == '@') { 15313 m++; 15314 id |= ID_CLASS; 15315 } 15316 else { 15317 id |= ID_INSTANCE; 15318 } 15319 m++; 15320 break; 15321 default: 15322 c = m[0]; 15323 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) { 15324 /* operators */ 15325 int i; 15326 15327 if (len == 1) { 15328 id = c; 15329 goto id_register; 15330 } 15331 for (i = 0; i < op_tbl_count; i++) { 15332 if (*op_tbl[i].name == *m && 15333 strcmp(op_tbl[i].name, m) == 0) { 15334 id = op_tbl[i].token; 15335 goto id_register; 15336 } 15337 } 15338 } 15339 15340 if (m[last] == '=') { 15341 /* attribute assignment */ 15342 id = rb_intern3(name, last, enc); 15343 if (id > tLAST_TOKEN && !is_attrset_id(id)) { 15344 enc = rb_enc_get(rb_id2str(id)); 15345 id = rb_id_attrset(id); 15346 goto id_register; 15347 } 15348 id = ID_ATTRSET; 15349 } 15350 else if (rb_enc_isupper(m[0], enc)) { 15351 id = ID_CONST; 15352 } 15353 else { 15354 id = ID_LOCAL; 15355 } 15356 break; 15357 } 15358 mb = 0; 15359 if (!rb_enc_isdigit(*m, enc)) { 15360 while (m <= name + last && is_identchar(m, e, enc)) { 15361 if (ISASCII(*m)) { 15362 m++; 15363 } 15364 else { 15365 mb = 1; 15366 m += rb_enc_mbclen(m, e, enc); 15367 } 15368 } 15369 } 15370 if (m - name < len) id = ID_JUNK; 15371 if (enc != rb_usascii_encoding()) { 15372 /* 15373 * this clause makes sense only when called from other than 15374 * rb_intern_str() taking care of code-range. 15375 */ 15376 if (!mb) { 15377 for (; m <= name + len; ++m) { 15378 if (!ISASCII(*m)) goto mbstr; 15379 } 15380 enc = rb_usascii_encoding(); 15381 } 15382 mbstr:; 15383 } 15384 new_id: 15385 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) { 15386 if (len > 20) { 15387 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)", 15388 name); 15389 } 15390 else { 15391 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)", 15392 (int)len, name); 15393 } 15394 } 15395 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT; 15396 id_register: 15397 return register_symid(id, name, len, enc); 15398 } 15399 15400 ID 15401 rb_intern2(const char *name, long len) 15402 { 15403 return rb_intern3(name, len, rb_usascii_encoding()); 15404 } 15405 15406 #undef rb_intern 15407 ID 15408 rb_intern(const char *name) 15409 { 15410 return rb_intern2(name, strlen(name)); 15411 } 15412 15413 ID 15414 rb_intern_str(VALUE str) 15415 { 15416 rb_encoding *enc; 15417 ID id; 15418 15419 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) { 15420 enc = rb_usascii_encoding(); 15421 } 15422 else { 15423 enc = rb_enc_get(str); 15424 } 15425 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc); 15426 RB_GC_GUARD(str); 15427 return id; 15428 } 15429 15430 VALUE 15431 rb_id2str(ID id) 15432 { 15433 st_data_t data; 15434 15435 if (id < tLAST_TOKEN) { 15436 int i = 0; 15437 15438 if (id < INT_MAX && rb_ispunct((int)id)) { 15439 VALUE str = global_symbols.op_sym[i = (int)id]; 15440 if (!str) { 15441 char name[2]; 15442 name[0] = (char)id; 15443 name[1] = 0; 15444 str = rb_usascii_str_new(name, 1); 15445 OBJ_FREEZE(str); 15446 global_symbols.op_sym[i] = str; 15447 } 15448 return str; 15449 } 15450 for (i = 0; i < op_tbl_count; i++) { 15451 if (op_tbl[i].token == id) { 15452 VALUE str = global_symbols.op_sym[i]; 15453 if (!str) { 15454 str = rb_usascii_str_new2(op_tbl[i].name); 15455 OBJ_FREEZE(str); 15456 global_symbols.op_sym[i] = str; 15457 } 15458 return str; 15459 } 15460 } 15461 } 15462 15463 if (st_lookup(global_symbols.id_str, id, &data)) { 15464 VALUE str = (VALUE)data; 15465 if (RBASIC(str)->klass == 0) 15466 RBASIC(str)->klass = rb_cString; 15467 return str; 15468 } 15469 15470 if (is_attrset_id(id)) { 15471 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL; 15472 VALUE str; 15473 15474 while (!(str = rb_id2str(id2))) { 15475 if (!is_local_id(id2)) return 0; 15476 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST; 15477 } 15478 str = rb_str_dup(str); 15479 rb_str_cat(str, "=", 1); 15480 rb_intern_str(str); 15481 if (st_lookup(global_symbols.id_str, id, &data)) { 15482 VALUE str = (VALUE)data; 15483 if (RBASIC(str)->klass == 0) 15484 RBASIC(str)->klass = rb_cString; 15485 return str; 15486 } 15487 } 15488 return 0; 15489 } 15490 15491 const char * 15492 rb_id2name(ID id) 15493 { 15494 VALUE str = rb_id2str(id); 15495 15496 if (!str) return 0; 15497 return RSTRING_PTR(str); 15498 } 15499 15500 static int 15501 symbols_i(VALUE sym, ID value, VALUE ary) 15502 { 15503 rb_ary_push(ary, ID2SYM(value)); 15504 return ST_CONTINUE; 15505 } 15506 15507 /* 15508 * call-seq: 15509 * Symbol.all_symbols => array 15510 * 15511 * Returns an array of all the symbols currently in Ruby's symbol 15512 * table. 15513 * 15514 * Symbol.all_symbols.size #=> 903 15515 * Symbol.all_symbols[1,20] #=> [:floor, :ARGV, :Binding, :symlink, 15516 * :chown, :EOFError, :$;, :String, 15517 * :LOCK_SH, :"setuid?", :$<, 15518 * :default_proc, :compact, :extend, 15519 * :Tms, :getwd, :$=, :ThreadGroup, 15520 * :wait2, :$>] 15521 */ 15522 15523 VALUE 15524 rb_sym_all_symbols(void) 15525 { 15526 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries); 15527 15528 st_foreach(global_symbols.sym_id, symbols_i, ary); 15529 return ary; 15530 } 15531 15532 int 15533 rb_is_const_id(ID id) 15534 { 15535 return is_const_id(id); 15536 } 15537 15538 int 15539 rb_is_class_id(ID id) 15540 { 15541 return is_class_id(id); 15542 } 15543 15544 int 15545 rb_is_instance_id(ID id) 15546 { 15547 return is_instance_id(id); 15548 } 15549 15550 int 15551 rb_is_local_id(ID id) 15552 { 15553 return is_local_id(id); 15554 } 15555 15556 int 15557 rb_is_junk_id(ID id) 15558 { 15559 return is_junk_id(id); 15560 } 15561 15562 #endif /* !RIPPER */ 15563 15564 static void 15565 parser_initialize(struct parser_params *parser) 15566 { 15567 parser->eofp = Qfalse; 15568 15569 parser->parser_lex_strterm = 0; 15570 parser->parser_cond_stack = 0; 15571 parser->parser_cmdarg_stack = 0; 15572 parser->parser_class_nest = 0; 15573 parser->parser_paren_nest = 0; 15574 parser->parser_lpar_beg = 0; 15575 parser->parser_in_single = 0; 15576 parser->parser_in_def = 0; 15577 parser->parser_in_defined = 0; 15578 parser->parser_compile_for_eval = 0; 15579 parser->parser_cur_mid = 0; 15580 parser->parser_tokenbuf = NULL; 15581 parser->parser_tokidx = 0; 15582 parser->parser_toksiz = 0; 15583 parser->parser_heredoc_end = 0; 15584 parser->parser_command_start = TRUE; 15585 parser->parser_deferred_nodes = 0; 15586 parser->parser_lex_pbeg = 0; 15587 parser->parser_lex_p = 0; 15588 parser->parser_lex_pend = 0; 15589 parser->parser_lvtbl = 0; 15590 parser->parser_ruby__end__seen = 0; 15591 parser->parser_ruby_sourcefile = 0; 15592 #ifndef RIPPER 15593 parser->is_ripper = 0; 15594 parser->parser_eval_tree_begin = 0; 15595 parser->parser_eval_tree = 0; 15596 #else 15597 parser->is_ripper = 1; 15598 parser->parser_ruby_sourcefile_string = Qnil; 15599 parser->delayed = Qnil; 15600 15601 parser->result = Qnil; 15602 parser->parsing_thread = Qnil; 15603 parser->toplevel_p = TRUE; 15604 #endif 15605 #ifdef YYMALLOC 15606 parser->heap = NULL; 15607 #endif 15608 parser->enc = rb_usascii_encoding(); 15609 } 15610 15611 #ifdef RIPPER 15612 #define parser_mark ripper_parser_mark 15613 #define parser_free ripper_parser_free 15614 #endif 15615 15616 static void 15617 parser_mark(void *ptr) 15618 { 15619 struct parser_params *p = (struct parser_params*)ptr; 15620 15621 rb_gc_mark((VALUE)p->parser_lex_strterm); 15622 rb_gc_mark((VALUE)p->parser_deferred_nodes); 15623 rb_gc_mark(p->parser_lex_input); 15624 rb_gc_mark(p->parser_lex_lastline); 15625 rb_gc_mark(p->parser_lex_nextline); 15626 #ifndef RIPPER 15627 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ; 15628 rb_gc_mark((VALUE)p->parser_eval_tree) ; 15629 rb_gc_mark(p->debug_lines); 15630 #else 15631 rb_gc_mark(p->parser_ruby_sourcefile_string); 15632 rb_gc_mark(p->delayed); 15633 rb_gc_mark(p->value); 15634 rb_gc_mark(p->result); 15635 rb_gc_mark(p->parsing_thread); 15636 #endif 15637 #ifdef YYMALLOC 15638 rb_gc_mark((VALUE)p->heap); 15639 #endif 15640 } 15641 15642 static void 15643 parser_free(void *ptr) 15644 { 15645 struct parser_params *p = (struct parser_params*)ptr; 15646 struct local_vars *local, *prev; 15647 15648 if (p->parser_tokenbuf) { 15649 xfree(p->parser_tokenbuf); 15650 } 15651 for (local = p->parser_lvtbl; local; local = prev) { 15652 if (local->vars) xfree(local->vars); 15653 prev = local->prev; 15654 xfree(local); 15655 } 15656 #ifndef RIPPER 15657 xfree(p->parser_ruby_sourcefile); 15658 #endif 15659 xfree(p); 15660 } 15661 15662 static size_t 15663 parser_memsize(const void *ptr) 15664 { 15665 struct parser_params *p = (struct parser_params*)ptr; 15666 struct local_vars *local; 15667 size_t size = sizeof(*p); 15668 15669 if (!ptr) return 0; 15670 size += p->parser_toksiz; 15671 for (local = p->parser_lvtbl; local; local = local->prev) { 15672 size += sizeof(*local); 15673 if (local->vars) size += local->vars->capa * sizeof(ID); 15674 } 15675 #ifndef RIPPER 15676 if (p->parser_ruby_sourcefile) { 15677 size += strlen(p->parser_ruby_sourcefile) + 1; 15678 } 15679 #endif 15680 return size; 15681 } 15682 15683 static 15684 #ifndef RIPPER 15685 const 15686 #endif 15687 rb_data_type_t parser_data_type = { 15688 "parser", 15689 { 15690 parser_mark, 15691 parser_free, 15692 parser_memsize, 15693 }, 15694 }; 15695 15696 #ifndef RIPPER 15697 #undef rb_reserved_word 15698 15699 const struct kwtable * 15700 rb_reserved_word(const char *str, unsigned int len) 15701 { 15702 return reserved_word(str, len); 15703 } 15704 15705 static struct parser_params * 15706 parser_new(void) 15707 { 15708 struct parser_params *p; 15709 15710 p = ALLOC_N(struct parser_params, 1); 15711 MEMZERO(p, struct parser_params, 1); 15712 parser_initialize(p); 15713 return p; 15714 } 15715 15716 VALUE 15717 rb_parser_new(void) 15718 { 15719 struct parser_params *p = parser_new(); 15720 15721 return TypedData_Wrap_Struct(0, &parser_data_type, p); 15722 } 15723 15724 /* 15725 * call-seq: 15726 * ripper#end_seen? -> Boolean 15727 * 15728 * Return true if parsed source ended by +\_\_END\_\_+. 15729 */ 15730 VALUE 15731 rb_parser_end_seen_p(VALUE vparser) 15732 { 15733 struct parser_params *parser; 15734 15735 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 15736 return ruby__end__seen ? Qtrue : Qfalse; 15737 } 15738 15739 /* 15740 * call-seq: 15741 * ripper#encoding -> encoding 15742 * 15743 * Return encoding of the source. 15744 */ 15745 VALUE 15746 rb_parser_encoding(VALUE vparser) 15747 { 15748 struct parser_params *parser; 15749 15750 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser); 15751 return rb_enc_from_encoding(parser->enc); 15752 } 15753 15754 /* 15755 * call-seq: 15756 * ripper.yydebug -> true or false 15757 * 15758 * Get yydebug. 15759 */ 15760 VALUE 15761 rb_parser_get_yydebug(VALUE self) 15762 { 15763 struct parser_params *parser; 15764 15765 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 15766 return yydebug ? Qtrue : Qfalse; 15767 } 15768 15769 /* 15770 * call-seq: 15771 * ripper.yydebug = flag 15772 * 15773 * Set yydebug. 15774 */ 15775 VALUE 15776 rb_parser_set_yydebug(VALUE self, VALUE flag) 15777 { 15778 struct parser_params *parser; 15779 15780 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 15781 yydebug = RTEST(flag); 15782 return flag; 15783 } 15784 15785 #ifdef YYMALLOC 15786 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE)) 15787 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0) 15788 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \ 15789 (n)->u3.cnt = (c), (p)) 15790 15791 void * 15792 rb_parser_malloc(struct parser_params *parser, size_t size) 15793 { 15794 size_t cnt = HEAPCNT(1, size); 15795 NODE *n = NEWHEAP(); 15796 void *ptr = xmalloc(size); 15797 15798 return ADD2HEAP(n, cnt, ptr); 15799 } 15800 15801 void * 15802 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size) 15803 { 15804 size_t cnt = HEAPCNT(nelem, size); 15805 NODE *n = NEWHEAP(); 15806 void *ptr = xcalloc(nelem, size); 15807 15808 return ADD2HEAP(n, cnt, ptr); 15809 } 15810 15811 void * 15812 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size) 15813 { 15814 NODE *n; 15815 size_t cnt = HEAPCNT(1, size); 15816 15817 if (ptr && (n = parser->heap) != NULL) { 15818 do { 15819 if (n->u1.node == ptr) { 15820 n->u1.node = ptr = xrealloc(ptr, size); 15821 if (n->u3.cnt) n->u3.cnt = cnt; 15822 return ptr; 15823 } 15824 } while ((n = n->u2.node) != NULL); 15825 } 15826 n = NEWHEAP(); 15827 ptr = xrealloc(ptr, size); 15828 return ADD2HEAP(n, cnt, ptr); 15829 } 15830 15831 void 15832 rb_parser_free(struct parser_params *parser, void *ptr) 15833 { 15834 NODE **prev = &parser->heap, *n; 15835 15836 while ((n = *prev) != NULL) { 15837 if (n->u1.node == ptr) { 15838 *prev = n->u2.node; 15839 rb_gc_force_recycle((VALUE)n); 15840 break; 15841 } 15842 prev = &n->u2.node; 15843 } 15844 xfree(ptr); 15845 } 15846 #endif 15847 #endif 15848 15849 #ifdef RIPPER 15850 #ifdef RIPPER_DEBUG 15851 extern int rb_is_pointer_to_heap(VALUE); 15852 15853 /* :nodoc: */ 15854 static VALUE 15855 ripper_validate_object(VALUE self, VALUE x) 15856 { 15857 if (x == Qfalse) return x; 15858 if (x == Qtrue) return x; 15859 if (x == Qnil) return x; 15860 if (x == Qundef) 15861 rb_raise(rb_eArgError, "Qundef given"); 15862 if (FIXNUM_P(x)) return x; 15863 if (SYMBOL_P(x)) return x; 15864 if (!rb_is_pointer_to_heap(x)) 15865 rb_raise(rb_eArgError, "invalid pointer: %p", x); 15866 switch (TYPE(x)) { 15867 case T_STRING: 15868 case T_OBJECT: 15869 case T_ARRAY: 15870 case T_BIGNUM: 15871 case T_FLOAT: 15872 return x; 15873 case T_NODE: 15874 if (nd_type(x) != NODE_LASGN) { 15875 rb_raise(rb_eArgError, "NODE given: %p", x); 15876 } 15877 return ((NODE *)x)->nd_rval; 15878 default: 15879 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)", 15880 x, rb_obj_classname(x)); 15881 } 15882 return x; 15883 } 15884 #endif 15885 15886 #define validate(x) ((x) = get_value(x)) 15887 15888 static VALUE 15889 ripper_dispatch0(struct parser_params *parser, ID mid) 15890 { 15891 return rb_funcall(parser->value, mid, 0); 15892 } 15893 15894 static VALUE 15895 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a) 15896 { 15897 validate(a); 15898 return rb_funcall(parser->value, mid, 1, a); 15899 } 15900 15901 static VALUE 15902 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b) 15903 { 15904 validate(a); 15905 validate(b); 15906 return rb_funcall(parser->value, mid, 2, a, b); 15907 } 15908 15909 static VALUE 15910 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c) 15911 { 15912 validate(a); 15913 validate(b); 15914 validate(c); 15915 return rb_funcall(parser->value, mid, 3, a, b, c); 15916 } 15917 15918 static VALUE 15919 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d) 15920 { 15921 validate(a); 15922 validate(b); 15923 validate(c); 15924 validate(d); 15925 return rb_funcall(parser->value, mid, 4, a, b, c, d); 15926 } 15927 15928 static VALUE 15929 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e) 15930 { 15931 validate(a); 15932 validate(b); 15933 validate(c); 15934 validate(d); 15935 validate(e); 15936 return rb_funcall(parser->value, mid, 5, a, b, c, d, e); 15937 } 15938 15939 static const struct kw_assoc { 15940 ID id; 15941 const char *name; 15942 } keyword_to_name[] = { 15943 {keyword_class, "class"}, 15944 {keyword_module, "module"}, 15945 {keyword_def, "def"}, 15946 {keyword_undef, "undef"}, 15947 {keyword_begin, "begin"}, 15948 {keyword_rescue, "rescue"}, 15949 {keyword_ensure, "ensure"}, 15950 {keyword_end, "end"}, 15951 {keyword_if, "if"}, 15952 {keyword_unless, "unless"}, 15953 {keyword_then, "then"}, 15954 {keyword_elsif, "elsif"}, 15955 {keyword_else, "else"}, 15956 {keyword_case, "case"}, 15957 {keyword_when, "when"}, 15958 {keyword_while, "while"}, 15959 {keyword_until, "until"}, 15960 {keyword_for, "for"}, 15961 {keyword_break, "break"}, 15962 {keyword_next, "next"}, 15963 {keyword_redo, "redo"}, 15964 {keyword_retry, "retry"}, 15965 {keyword_in, "in"}, 15966 {keyword_do, "do"}, 15967 {keyword_do_cond, "do"}, 15968 {keyword_do_block, "do"}, 15969 {keyword_return, "return"}, 15970 {keyword_yield, "yield"}, 15971 {keyword_super, "super"}, 15972 {keyword_self, "self"}, 15973 {keyword_nil, "nil"}, 15974 {keyword_true, "true"}, 15975 {keyword_false, "false"}, 15976 {keyword_and, "and"}, 15977 {keyword_or, "or"}, 15978 {keyword_not, "not"}, 15979 {modifier_if, "if"}, 15980 {modifier_unless, "unless"}, 15981 {modifier_while, "while"}, 15982 {modifier_until, "until"}, 15983 {modifier_rescue, "rescue"}, 15984 {keyword_alias, "alias"}, 15985 {keyword_defined, "defined?"}, 15986 {keyword_BEGIN, "BEGIN"}, 15987 {keyword_END, "END"}, 15988 {keyword__LINE__, "__LINE__"}, 15989 {keyword__FILE__, "__FILE__"}, 15990 {keyword__ENCODING__, "__ENCODING__"}, 15991 {0, NULL} 15992 }; 15993 15994 static const char* 15995 keyword_id_to_str(ID id) 15996 { 15997 const struct kw_assoc *a; 15998 15999 for (a = keyword_to_name; a->id; a++) { 16000 if (a->id == id) 16001 return a->name; 16002 } 16003 return NULL; 16004 } 16005 16006 #undef ripper_id2sym 16007 static VALUE 16008 ripper_id2sym(ID id) 16009 { 16010 const char *name; 16011 char buf[8]; 16012 16013 if (id <= 256) { 16014 buf[0] = (char)id; 16015 buf[1] = '\0'; 16016 return ID2SYM(rb_intern2(buf, 1)); 16017 } 16018 if ((name = keyword_id_to_str(id))) { 16019 return ID2SYM(rb_intern(name)); 16020 } 16021 switch (id) { 16022 case tOROP: 16023 name = "||"; 16024 break; 16025 case tANDOP: 16026 name = "&&"; 16027 break; 16028 default: 16029 name = rb_id2name(id); 16030 if (!name) { 16031 rb_bug("cannot convert ID to string: %ld", (unsigned long)id); 16032 } 16033 return ID2SYM(id); 16034 } 16035 return ID2SYM(rb_intern(name)); 16036 } 16037 16038 static ID 16039 ripper_get_id(VALUE v) 16040 { 16041 NODE *nd; 16042 if (!RB_TYPE_P(v, T_NODE)) return 0; 16043 nd = (NODE *)v; 16044 if (nd_type(nd) != NODE_LASGN) return 0; 16045 return nd->nd_vid; 16046 } 16047 16048 static VALUE 16049 ripper_get_value(VALUE v) 16050 { 16051 NODE *nd; 16052 if (v == Qundef) return Qnil; 16053 if (!RB_TYPE_P(v, T_NODE)) return v; 16054 nd = (NODE *)v; 16055 if (nd_type(nd) != NODE_LASGN) return Qnil; 16056 return nd->nd_rval; 16057 } 16058 16059 static void 16060 ripper_compile_error(struct parser_params *parser, const char *fmt, ...) 16061 { 16062 VALUE str; 16063 va_list args; 16064 16065 va_start(args, fmt); 16066 str = rb_vsprintf(fmt, args); 16067 va_end(args); 16068 rb_funcall(parser->value, rb_intern("compile_error"), 1, str); 16069 } 16070 16071 static void 16072 ripper_warn0(struct parser_params *parser, const char *fmt) 16073 { 16074 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt)); 16075 } 16076 16077 static void 16078 ripper_warnI(struct parser_params *parser, const char *fmt, int a) 16079 { 16080 rb_funcall(parser->value, rb_intern("warn"), 2, 16081 STR_NEW2(fmt), INT2NUM(a)); 16082 } 16083 16084 #if 0 16085 static void 16086 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str) 16087 { 16088 rb_funcall(parser->value, rb_intern("warn"), 2, 16089 STR_NEW2(fmt), STR_NEW2(str)); 16090 } 16091 #endif 16092 16093 static void 16094 ripper_warning0(struct parser_params *parser, const char *fmt) 16095 { 16096 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt)); 16097 } 16098 16099 static void 16100 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str) 16101 { 16102 rb_funcall(parser->value, rb_intern("warning"), 2, 16103 STR_NEW2(fmt), STR_NEW2(str)); 16104 } 16105 16106 static VALUE 16107 ripper_lex_get_generic(struct parser_params *parser, VALUE src) 16108 { 16109 return rb_funcall(src, ripper_id_gets, 0); 16110 } 16111 16112 static VALUE 16113 ripper_s_allocate(VALUE klass) 16114 { 16115 struct parser_params *p; 16116 VALUE self; 16117 16118 p = ALLOC_N(struct parser_params, 1); 16119 MEMZERO(p, struct parser_params, 1); 16120 self = TypedData_Wrap_Struct(klass, &parser_data_type, p); 16121 p->value = self; 16122 return self; 16123 } 16124 16125 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0) 16126 16127 /* 16128 * call-seq: 16129 * Ripper.new(src, filename="(ripper)", lineno=1) -> ripper 16130 * 16131 * Create a new Ripper object. 16132 * _src_ must be a String, an IO, or an Object which has #gets method. 16133 * 16134 * This method does not starts parsing. 16135 * See also Ripper#parse and Ripper.parse. 16136 */ 16137 static VALUE 16138 ripper_initialize(int argc, VALUE *argv, VALUE self) 16139 { 16140 struct parser_params *parser; 16141 VALUE src, fname, lineno; 16142 16143 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16144 rb_scan_args(argc, argv, "12", &src, &fname, &lineno); 16145 if (rb_obj_respond_to(src, ripper_id_gets, 0)) { 16146 parser->parser_lex_gets = ripper_lex_get_generic; 16147 } 16148 else { 16149 StringValue(src); 16150 parser->parser_lex_gets = lex_get_str; 16151 } 16152 parser->parser_lex_input = src; 16153 parser->eofp = Qfalse; 16154 if (NIL_P(fname)) { 16155 fname = STR_NEW2("(ripper)"); 16156 } 16157 else { 16158 StringValue(fname); 16159 } 16160 parser_initialize(parser); 16161 16162 parser->parser_ruby_sourcefile_string = fname; 16163 parser->parser_ruby_sourcefile = RSTRING_PTR(fname); 16164 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1; 16165 16166 return Qnil; 16167 } 16168 16169 struct ripper_args { 16170 struct parser_params *parser; 16171 int argc; 16172 VALUE *argv; 16173 }; 16174 16175 static VALUE 16176 ripper_parse0(VALUE parser_v) 16177 { 16178 struct parser_params *parser; 16179 16180 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 16181 parser_prepare(parser); 16182 ripper_yyparse((void*)parser); 16183 return parser->result; 16184 } 16185 16186 static VALUE 16187 ripper_ensure(VALUE parser_v) 16188 { 16189 struct parser_params *parser; 16190 16191 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser); 16192 parser->parsing_thread = Qnil; 16193 return Qnil; 16194 } 16195 16196 /* 16197 * call-seq: 16198 * ripper#parse 16199 * 16200 * Start parsing and returns the value of the root action. 16201 */ 16202 static VALUE 16203 ripper_parse(VALUE self) 16204 { 16205 struct parser_params *parser; 16206 16207 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16208 if (!ripper_initialized_p(parser)) { 16209 rb_raise(rb_eArgError, "method called for uninitialized object"); 16210 } 16211 if (!NIL_P(parser->parsing_thread)) { 16212 if (parser->parsing_thread == rb_thread_current()) 16213 rb_raise(rb_eArgError, "Ripper#parse is not reentrant"); 16214 else 16215 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe"); 16216 } 16217 parser->parsing_thread = rb_thread_current(); 16218 rb_ensure(ripper_parse0, self, ripper_ensure, self); 16219 16220 return parser->result; 16221 } 16222 16223 /* 16224 * call-seq: 16225 * ripper#column -> Integer 16226 * 16227 * Return column number of current parsing line. 16228 * This number starts from 0. 16229 */ 16230 static VALUE 16231 ripper_column(VALUE self) 16232 { 16233 struct parser_params *parser; 16234 long col; 16235 16236 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16237 if (!ripper_initialized_p(parser)) { 16238 rb_raise(rb_eArgError, "method called for uninitialized object"); 16239 } 16240 if (NIL_P(parser->parsing_thread)) return Qnil; 16241 col = parser->tokp - parser->parser_lex_pbeg; 16242 return LONG2NUM(col); 16243 } 16244 16245 /* 16246 * call-seq: 16247 * ripper#filename -> String 16248 * 16249 * Return current parsing filename. 16250 */ 16251 static VALUE 16252 ripper_filename(VALUE self) 16253 { 16254 struct parser_params *parser; 16255 16256 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16257 if (!ripper_initialized_p(parser)) { 16258 rb_raise(rb_eArgError, "method called for uninitialized object"); 16259 } 16260 return parser->parser_ruby_sourcefile_string; 16261 } 16262 16263 /* 16264 * call-seq: 16265 * ripper#lineno -> Integer 16266 * 16267 * Return line number of current parsing line. 16268 * This number starts from 1. 16269 */ 16270 static VALUE 16271 ripper_lineno(VALUE self) 16272 { 16273 struct parser_params *parser; 16274 16275 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser); 16276 if (!ripper_initialized_p(parser)) { 16277 rb_raise(rb_eArgError, "method called for uninitialized object"); 16278 } 16279 if (NIL_P(parser->parsing_thread)) return Qnil; 16280 return INT2NUM(parser->parser_ruby_sourceline); 16281 } 16282 16283 #ifdef RIPPER_DEBUG 16284 /* :nodoc: */ 16285 static VALUE 16286 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg) 16287 { 16288 StringValue(msg); 16289 if (obj == Qundef) { 16290 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg)); 16291 } 16292 return Qnil; 16293 } 16294 16295 /* :nodoc: */ 16296 static VALUE 16297 ripper_value(VALUE self, VALUE obj) 16298 { 16299 return ULONG2NUM(obj); 16300 } 16301 #endif 16302 16303 16304 void 16305 InitVM_ripper(void) 16306 { 16307 parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new()); 16308 } 16309 16310 void 16311 Init_ripper(void) 16312 { 16313 VALUE Ripper; 16314 16315 InitVM(ripper); 16316 Ripper = rb_define_class("Ripper", rb_cObject); 16317 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION)); 16318 rb_define_alloc_func(Ripper, ripper_s_allocate); 16319 rb_define_method(Ripper, "initialize", ripper_initialize, -1); 16320 rb_define_method(Ripper, "parse", ripper_parse, 0); 16321 rb_define_method(Ripper, "column", ripper_column, 0); 16322 rb_define_method(Ripper, "filename", ripper_filename, 0); 16323 rb_define_method(Ripper, "lineno", ripper_lineno, 0); 16324 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0); 16325 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0); 16326 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0); 16327 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1); 16328 #ifdef RIPPER_DEBUG 16329 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2); 16330 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1); 16331 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1); 16332 #endif 16333 16334 ripper_id_gets = rb_intern("gets"); 16335 ripper_init_eventids1(Ripper); 16336 ripper_init_eventids2(Ripper); 16337 /* ensure existing in symbol table */ 16338 (void)rb_intern("||"); 16339 (void)rb_intern("&&"); 16340 16341 # if 0 16342 /* Hack to let RDoc document SCRIPT_LINES__ */ 16343 16344 /* 16345 * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded 16346 * after the assignment will be added as an Array of lines with the file 16347 * name as the key. 16348 */ 16349 rb_define_global_const("SCRIPT_LINES__", Qnil); 16350 #endif 16351 16352 } 16353 #endif /* RIPPER */ 16354 16355
1.7.6.1