00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00038
00039
00040
00041
00042
00043
00044
00045
00046
00047 #define YYBISON 1
00048
00049
00050 #define YYBISON_VERSION "2.3"
00051
00052
00053 #define YYSKELETON_NAME "yacc.c"
00054
00055
00056 #define YYPURE 1
00057
00058
00059 #define YYLSP_NEEDED 0
00060
00061
00062
00063
00064 #ifndef YYTOKENTYPE
00065 # define YYTOKENTYPE
00066
00067
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
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
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,
00365 EXPR_END,
00366 EXPR_ENDARG,
00367 EXPR_ENDFN,
00368 EXPR_ARG,
00369 EXPR_CMDARG,
00370 EXPR_MID,
00371 EXPR_FNAME,
00372 EXPR_DOT,
00373 EXPR_CLASS,
00374 EXPR_VALUE,
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
00494
00495
00496
00497
00498
00499
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;
00539 int parser_ruby_sourceline;
00540 rb_encoding *enc;
00541 rb_encoding *utf8;
00542
00543 int parser_yydebug;
00544
00545 #ifndef RIPPER
00546
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
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
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
00780 #define NODE_HEREDOC NODE_ARRAY
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
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
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
00896
00897
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)
00911 #define token_info_pop(token)
00912 #endif
00913
00914
00915
00916 #ifndef YYDEBUG
00917 # define YYDEBUG 1
00918 #endif
00919
00920
00921 #ifdef YYERROR_VERBOSE
00922 # undef YYERROR_VERBOSE
00923 # define YYERROR_VERBOSE 1
00924 #else
00925 # define YYERROR_VERBOSE 0
00926 #endif
00927
00928
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
00944 #line 945 "parse.c"
00945 YYSTYPE;
00946 # define yystype YYSTYPE
00947 # define YYSTYPE_IS_DECLARED 1
00948 # define YYSTYPE_IS_TRIVIAL 1
00949 #endif
00950
00951
00952
00953
00954
00955
00956
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>
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>
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
01019 #if ! defined lint || defined __GNUC__
01020 # define YYUSE(e) ((void) (e))
01021 #else
01022 # define YYUSE(e)
01023 #endif
01024
01025
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
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>
01053 # elif defined _AIX
01054 # define YYSTACK_ALLOC __alloca
01055 # elif defined _MSC_VER
01056 # include <malloc.h>
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>
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
01073 # define YYSTACK_FREE(Ptr) do { ; } while (YYID (0))
01074 # ifndef YYSTACK_ALLOC_MAXIMUM
01075
01076
01077
01078
01079 # define YYSTACK_ALLOC_MAXIMUM 4032
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>
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);
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 *);
01107 # endif
01108 # endif
01109 # endif
01110 #endif
01111
01112
01113 #if (! defined yyoverflow \
01114 && (! defined __cplusplus \
01115 || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01116
01117
01118 union yyalloc
01119 {
01120 yytype_int16 yyss;
01121 YYSTYPE yyvs;
01122 };
01123
01124
01125 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01126
01127
01128
01129 # define YYSTACK_BYTES(N) \
01130 ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01131 + YYSTACK_GAP_MAXIMUM)
01132
01133
01134
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
01152
01153
01154
01155
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
01170 #define YYFINAL 3
01171
01172 #define YYLAST 10748
01173
01174
01175 #define YYNTOKENS 148
01176
01177 #define YYNNTS 174
01178
01179 #define YYNRULES 573
01180
01181 #define YYNSTATES 991
01182
01183
01184 #define YYUNDEFTOK 2
01185 #define YYMAXUTOK 375
01186
01187 #define YYTRANSLATE(YYX) \
01188 ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01189
01190
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
01235
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
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
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
01546
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
01611
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
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
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
01759
01760
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
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
01889
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
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
02019
02020
02021
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
04182
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
04298
04299
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
04328
04329
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
04354
04355
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
04370
04371 #ifdef YYLEX_PARAM
04372 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04373 #else
04374 # define YYLEX yylex (&yylval)
04375 #endif
04376
04377
04378 #if YYDEBUG
04379
04380 # ifndef YYFPRINTF
04381 # include <stdio.h>
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
04405
04406
04407
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
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
04466
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
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
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
04532
04533 #ifndef yydebug
04534 int yydebug;
04535 #endif
04536 #else
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
04542
04543
04544
04545 #ifndef YYINITDEPTH
04546 # define YYINITDEPTH 200
04547 #endif
04548
04549
04550
04551
04552
04553
04554
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
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
04592
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
04617
04618
04619
04620
04621
04622
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
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
04664
04665
04666
04667
04668
04669
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
04690
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
04709
04710 int yyxbegin = yyn < 0 ? -yyn : 0;
04711
04712
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
04749
04750
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
04771
04772
04773
04774
04775
04776
04777
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
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
04816 #if defined __STDC__ || defined __cplusplus
04817 int yyparse (struct parser_params *parser);
04818 #else
04819 int yyparse ();
04820 #endif
04821 #endif
04822
04823
04824
04825
04826
04827
04828
04829
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
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
04855 int yychar;
04856
04857
04858 YYSTYPE yylval;
04859
04860
04861 int yynerrs;
04862
04863 int yystate;
04864 int yyn;
04865 int yyresult;
04866
04867 int yyerrstatus;
04868
04869 int yytoken = 0;
04870 #if YYERROR_VERBOSE
04871
04872 char yymsgbuf[128];
04873 char *yymsg = yymsgbuf;
04874 YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04875 #endif
04876
04877
04878
04879
04880
04881
04882
04883
04884
04885
04886 yytype_int16 yyssa[YYINITDEPTH];
04887 yytype_int16 *yyss = yyssa;
04888 yytype_int16 *yyssp;
04889
04890
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
04902
04903 YYSTYPE yyval;
04904
04905
04906
04907
04908 int yylen = 0;
04909
04910 YYDPRINTF ((stderr, "Starting parse\n"));
04911
04912 yystate = 0;
04913 yyerrstatus = 0;
04914 yynerrs = 0;
04915 yychar = YYEMPTY;
04916
04917
04918
04919
04920
04921
04922 yyssp = yyss;
04923 yyvsp = yyvs;
04924
04925 goto yysetstate;
04926
04927
04928
04929
04930 yynewstate:
04931
04932
04933 yyssp++;
04934
04935 yysetstate:
04936 *yyssp = yystate;
04937
04938 if (yyss + yystacksize - 1 <= yyssp)
04939 {
04940
04941 YYSIZE_T yysize = yyssp - yyss + 1;
04942
04943 #ifdef yyoverflow
04944 {
04945
04946
04947
04948 YYSTYPE *yyvs1 = yyvs;
04949 yytype_int16 *yyss1 = yyss;
04950
04951
04952
04953
04954
04955
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
04966 # ifndef YYSTACK_RELOCATE
04967 goto yyexhaustedlab;
04968 # else
04969
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
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
05009
05010 yybackup:
05011
05012
05013
05014
05015
05016 yyn = yypact[yystate];
05017 if (yyn == YYPACT_NINF)
05018 goto yydefault;
05019
05020
05021
05022
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
05041
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
05058
05059 if (yyerrstatus)
05060 yyerrstatus--;
05061
05062
05063 YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
05064
05065
05066 if (yychar != YYEOF)
05067 yychar = YYEMPTY;
05068
05069 yystate = yyn;
05070 *++yyvsp = yylval;
05071
05072 goto yynewstate;
05073
05074
05075
05076
05077
05078 yydefault:
05079 yyn = yydefact[yystate];
05080 if (yyn == 0)
05081 goto yyerrlab;
05082 goto yyreduce;
05083
05084
05085
05086
05087
05088 yyreduce:
05089
05090 yylen = yyr2[yyn];
05091
05092
05093
05094
05095
05096
05097
05098
05099
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
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
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
05215
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 , (yyvsp[(3) - (4)].val) , 0 ));
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
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();
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
07806
07807
07808
07809
07810
07811
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
07820
07821
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;
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
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
10148
10149
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
10164
10165 yyerrlab:
10166
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
10212
10213
10214 if (yychar <= YYEOF)
10215 {
10216
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
10229
10230 goto yyerrlab1;
10231
10232
10233
10234
10235
10236 yyerrorlab:
10237
10238
10239
10240
10241 if ( 0)
10242 goto yyerrorlab;
10243
10244
10245
10246 YYPOPSTACK (yylen);
10247 yylen = 0;
10248 YY_STACK_PRINT (yyss, yyssp);
10249 yystate = *yyssp;
10250 goto yyerrlab1;
10251
10252
10253
10254
10255
10256 yyerrlab1:
10257 yyerrstatus = 3;
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
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
10292 YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10293
10294 yystate = yyn;
10295 goto yynewstate;
10296
10297
10298
10299
10300
10301 yyacceptlab:
10302 yyresult = 0;
10303 goto yyreturn;
10304
10305
10306
10307
10308 yyabortlab:
10309 yyresult = 1;
10310 goto yyreturn;
10311
10312 #ifndef yyoverflow
10313
10314
10315
10316 yyexhaustedlab:
10317 parser_yyerror (parser, YY_("memory exhausted"));
10318 yyresult = 2;
10319
10320 #endif
10321
10322 yyreturn:
10323 if (yychar != YYEOF && yychar != YYEMPTY)
10324 yydestruct ("Cleanup: discarding lookahead",
10325 yytoken, &yylval, parser);
10326
10327
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
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
10455
10456 #include "ruby/regex.h"
10457 #include "ruby/util.h"
10458
10459
10460
10461
10462
10463 #undef SIGN_EXTEND_CHAR
10464 #if __STDC__
10465 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10466 #else
10467
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) {
10533 goto finish;
10534 }
10535 linenum = ruby_sourceline;
10536 if (linenum == ptinfo->linenum) {
10537 goto finish;
10538 }
10539 if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) {
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
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
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
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;
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;
10845
10846 return node;
10847 }
10848 #endif
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
11022
11023
11024
11025
11026
11027 int codepoint;
11028 size_t numlen;
11029
11030 if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11031
11032 if (peek('{')) {
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 {
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 '\\':
11100 return c;
11101
11102 case 'n':
11103 return '\n';
11104
11105 case 't':
11106 return '\t';
11107
11108 case 'r':
11109 return '\r';
11110
11111 case 'f':
11112 return '\f';
11113
11114 case 'v':
11115 return '\13';
11116
11117 case 'a':
11118 return '\007';
11119
11120 case 'e':
11121 return 033;
11122
11123 case '0': case '1': case '2': case '3':
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':
11131 c = tok_hex(&numlen);
11132 if (numlen == 0) return 0;
11133 return c;
11134
11135 case 'b':
11136 return '\010';
11137
11138 case 's':
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;
11200
11201 case '0': case '1': case '2': case '3':
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':
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
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
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()),
11594 len,
11595 lex_lastline);
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
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
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
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
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
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 str_copy(val, vbeg, vend - vbeg);
12017 dispatch2(magic_comment, name, val);
12018 #endif
12019 }
12020
12021 return TRUE;
12022 }
12023
12024 static void
12025 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12026 {
12027 int sep = 0;
12028 const char *beg = str;
12029 VALUE s;
12030
12031 for (;;) {
12032 if (send - str <= 6) return;
12033 switch (str[6]) {
12034 case 'C': case 'c': str += 6; continue;
12035 case 'O': case 'o': str += 5; continue;
12036 case 'D': case 'd': str += 4; continue;
12037 case 'I': case 'i': str += 3; continue;
12038 case 'N': case 'n': str += 2; continue;
12039 case 'G': case 'g': str += 1; continue;
12040 case '=': case ':':
12041 sep = 1;
12042 str += 6;
12043 break;
12044 default:
12045 str += 6;
12046 if (ISSPACE(*str)) break;
12047 continue;
12048 }
12049 if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12050 }
12051 for (;;) {
12052 do {
12053 if (++str >= send) return;
12054 } while (ISSPACE(*str));
12055 if (sep) break;
12056 if (*str != '=' && *str != ':') return;
12057 sep = 1;
12058 str++;
12059 }
12060 beg = str;
12061 while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12062 s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12063 parser_set_encode(parser, RSTRING_PTR(s));
12064 rb_str_resize(s, 0);
12065 }
12066
12067 static void
12068 parser_prepare(struct parser_params *parser)
12069 {
12070 int c = nextc();
12071 switch (c) {
12072 case '#':
12073 if (peek('!')) parser->has_shebang = 1;
12074 break;
12075 case 0xef:
12076 if (lex_pend - lex_p >= 2 &&
12077 (unsigned char)lex_p[0] == 0xbb &&
12078 (unsigned char)lex_p[1] == 0xbf) {
12079 parser->enc = rb_utf8_encoding();
12080 lex_p += 2;
12081 lex_pbeg = lex_p;
12082 return;
12083 }
12084 break;
12085 case EOF:
12086 return;
12087 }
12088 pushback(c);
12089 parser->enc = rb_enc_get(lex_lastline);
12090 }
12091
12092 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12093 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12094 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12095 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12096 #define IS_LABEL_POSSIBLE() ((lex_state == EXPR_BEG && !cmd_state) || IS_ARG())
12097 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
12098
12099 #ifndef RIPPER
12100 #define ambiguous_operator(op, syn) ( \
12101 rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12102 rb_warning0("even though it seems like "syn""))
12103 #else
12104 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12105 #endif
12106 #define warn_balanced(op, syn) ((void) \
12107 (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12108 last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12109 last_state != EXPR_ENDARG && \
12110 space_seen && !ISSPACE(c) && \
12111 (ambiguous_operator(op, syn), 0)))
12112
12113 static int
12114 parser_yylex(struct parser_params *parser)
12115 {
12116 register int c;
12117 int space_seen = 0;
12118 int cmd_state;
12119 enum lex_state_e last_state;
12120 rb_encoding *enc;
12121 int mb;
12122 #ifdef RIPPER
12123 int fallthru = FALSE;
12124 #endif
12125
12126 if (lex_strterm) {
12127 int token;
12128 if (nd_type(lex_strterm) == NODE_HEREDOC) {
12129 token = here_document(lex_strterm);
12130 if (token == tSTRING_END) {
12131 lex_strterm = 0;
12132 lex_state = EXPR_END;
12133 }
12134 }
12135 else {
12136 token = parse_string(lex_strterm);
12137 if (token == tSTRING_END || token == tREGEXP_END) {
12138 rb_gc_force_recycle((VALUE)lex_strterm);
12139 lex_strterm = 0;
12140 lex_state = EXPR_END;
12141 }
12142 }
12143 return token;
12144 }
12145 cmd_state = command_start;
12146 command_start = FALSE;
12147 retry:
12148 last_state = lex_state;
12149 switch (c = nextc()) {
12150 case '\0':
12151 case '\004':
12152 case '\032':
12153 case -1:
12154 return 0;
12155
12156
12157 case ' ': case '\t': case '\f': case '\r':
12158 case '\13':
12159 space_seen = 1;
12160 #ifdef RIPPER
12161 while ((c = nextc())) {
12162 switch (c) {
12163 case ' ': case '\t': case '\f': case '\r':
12164 case '\13':
12165 break;
12166 default:
12167 goto outofloop;
12168 }
12169 }
12170 outofloop:
12171 pushback(c);
12172 ripper_dispatch_scan_event(parser, tSP);
12173 #endif
12174 goto retry;
12175
12176 case '#':
12177
12178 if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12179 if (comment_at_top(parser)) {
12180 set_file_encoding(parser, lex_p, lex_pend);
12181 }
12182 }
12183 lex_p = lex_pend;
12184 #ifdef RIPPER
12185 ripper_dispatch_scan_event(parser, tCOMMENT);
12186 fallthru = TRUE;
12187 #endif
12188
12189 case '\n':
12190 switch (lex_state) {
12191 case EXPR_BEG:
12192 case EXPR_FNAME:
12193 case EXPR_DOT:
12194 case EXPR_CLASS:
12195 case EXPR_VALUE:
12196 #ifdef RIPPER
12197 if (!fallthru) {
12198 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12199 }
12200 fallthru = FALSE;
12201 #endif
12202 goto retry;
12203 default:
12204 break;
12205 }
12206 while ((c = nextc())) {
12207 switch (c) {
12208 case ' ': case '\t': case '\f': case '\r':
12209 case '\13':
12210 space_seen = 1;
12211 break;
12212 case '.': {
12213 if ((c = nextc()) != '.') {
12214 pushback(c);
12215 pushback('.');
12216 goto retry;
12217 }
12218 }
12219 default:
12220 --ruby_sourceline;
12221 lex_nextline = lex_lastline;
12222 case -1:
12223 lex_goto_eol(parser);
12224 #ifdef RIPPER
12225 if (c != -1) {
12226 parser->tokp = lex_p;
12227 }
12228 #endif
12229 goto normal_newline;
12230 }
12231 }
12232 normal_newline:
12233 command_start = TRUE;
12234 lex_state = EXPR_BEG;
12235 return '\n';
12236
12237 case '*':
12238 if ((c = nextc()) == '*') {
12239 if ((c = nextc()) == '=') {
12240 set_yylval_id(tPOW);
12241 lex_state = EXPR_BEG;
12242 return tOP_ASGN;
12243 }
12244 pushback(c);
12245 c = tPOW;
12246 }
12247 else {
12248 if (c == '=') {
12249 set_yylval_id('*');
12250 lex_state = EXPR_BEG;
12251 return tOP_ASGN;
12252 }
12253 pushback(c);
12254 if (IS_SPCARG(c)) {
12255 rb_warning0("`*' interpreted as argument prefix");
12256 c = tSTAR;
12257 }
12258 else if (IS_BEG()) {
12259 c = tSTAR;
12260 }
12261 else {
12262 warn_balanced("*", "argument prefix");
12263 c = '*';
12264 }
12265 }
12266 switch (lex_state) {
12267 case EXPR_FNAME: case EXPR_DOT:
12268 lex_state = EXPR_ARG; break;
12269 default:
12270 lex_state = EXPR_BEG; break;
12271 }
12272 return c;
12273
12274 case '!':
12275 c = nextc();
12276 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12277 lex_state = EXPR_ARG;
12278 if (c == '@') {
12279 return '!';
12280 }
12281 }
12282 else {
12283 lex_state = EXPR_BEG;
12284 }
12285 if (c == '=') {
12286 return tNEQ;
12287 }
12288 if (c == '~') {
12289 return tNMATCH;
12290 }
12291 pushback(c);
12292 return '!';
12293
12294 case '=':
12295 if (was_bol()) {
12296
12297 if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12298 #ifdef RIPPER
12299 int first_p = TRUE;
12300
12301 lex_goto_eol(parser);
12302 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12303 #endif
12304 for (;;) {
12305 lex_goto_eol(parser);
12306 #ifdef RIPPER
12307 if (!first_p) {
12308 ripper_dispatch_scan_event(parser, tEMBDOC);
12309 }
12310 first_p = FALSE;
12311 #endif
12312 c = nextc();
12313 if (c == -1) {
12314 compile_error(PARSER_ARG "embedded document meets end of file");
12315 return 0;
12316 }
12317 if (c != '=') continue;
12318 if (strncmp(lex_p, "end", 3) == 0 &&
12319 (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12320 break;
12321 }
12322 }
12323 lex_goto_eol(parser);
12324 #ifdef RIPPER
12325 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12326 #endif
12327 goto retry;
12328 }
12329 }
12330
12331 switch (lex_state) {
12332 case EXPR_FNAME: case EXPR_DOT:
12333 lex_state = EXPR_ARG; break;
12334 default:
12335 lex_state = EXPR_BEG; break;
12336 }
12337 if ((c = nextc()) == '=') {
12338 if ((c = nextc()) == '=') {
12339 return tEQQ;
12340 }
12341 pushback(c);
12342 return tEQ;
12343 }
12344 if (c == '~') {
12345 return tMATCH;
12346 }
12347 else if (c == '>') {
12348 return tASSOC;
12349 }
12350 pushback(c);
12351 return '=';
12352
12353 case '<':
12354 last_state = lex_state;
12355 c = nextc();
12356 if (c == '<' &&
12357 lex_state != EXPR_DOT &&
12358 lex_state != EXPR_CLASS &&
12359 !IS_END() &&
12360 (!IS_ARG() || space_seen)) {
12361 int token = heredoc_identifier();
12362 if (token) return token;
12363 }
12364 switch (lex_state) {
12365 case EXPR_FNAME: case EXPR_DOT:
12366 lex_state = EXPR_ARG; break;
12367 default:
12368 lex_state = EXPR_BEG; break;
12369 }
12370 if (c == '=') {
12371 if ((c = nextc()) == '>') {
12372 return tCMP;
12373 }
12374 pushback(c);
12375 return tLEQ;
12376 }
12377 if (c == '<') {
12378 if ((c = nextc()) == '=') {
12379 set_yylval_id(tLSHFT);
12380 lex_state = EXPR_BEG;
12381 return tOP_ASGN;
12382 }
12383 pushback(c);
12384 warn_balanced("<<", "here document");
12385 return tLSHFT;
12386 }
12387 pushback(c);
12388 return '<';
12389
12390 case '>':
12391 switch (lex_state) {
12392 case EXPR_FNAME: case EXPR_DOT:
12393 lex_state = EXPR_ARG; break;
12394 default:
12395 lex_state = EXPR_BEG; break;
12396 }
12397 if ((c = nextc()) == '=') {
12398 return tGEQ;
12399 }
12400 if (c == '>') {
12401 if ((c = nextc()) == '=') {
12402 set_yylval_id(tRSHFT);
12403 lex_state = EXPR_BEG;
12404 return tOP_ASGN;
12405 }
12406 pushback(c);
12407 return tRSHFT;
12408 }
12409 pushback(c);
12410 return '>';
12411
12412 case '"':
12413 lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12414 return tSTRING_BEG;
12415
12416 case '`':
12417 if (lex_state == EXPR_FNAME) {
12418 lex_state = EXPR_ENDFN;
12419 return c;
12420 }
12421 if (lex_state == EXPR_DOT) {
12422 if (cmd_state)
12423 lex_state = EXPR_CMDARG;
12424 else
12425 lex_state = EXPR_ARG;
12426 return c;
12427 }
12428 lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12429 return tXSTRING_BEG;
12430
12431 case '\'':
12432 lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12433 return tSTRING_BEG;
12434
12435 case '?':
12436 if (IS_END()) {
12437 lex_state = EXPR_VALUE;
12438 return '?';
12439 }
12440 c = nextc();
12441 if (c == -1) {
12442 compile_error(PARSER_ARG "incomplete character syntax");
12443 return 0;
12444 }
12445 if (rb_enc_isspace(c, parser->enc)) {
12446 if (!IS_ARG()) {
12447 int c2 = 0;
12448 switch (c) {
12449 case ' ':
12450 c2 = 's';
12451 break;
12452 case '\n':
12453 c2 = 'n';
12454 break;
12455 case '\t':
12456 c2 = 't';
12457 break;
12458 case '\v':
12459 c2 = 'v';
12460 break;
12461 case '\r':
12462 c2 = 'r';
12463 break;
12464 case '\f':
12465 c2 = 'f';
12466 break;
12467 }
12468 if (c2) {
12469 rb_warnI("invalid character syntax; use ?\\%c", c2);
12470 }
12471 }
12472 ternary:
12473 pushback(c);
12474 lex_state = EXPR_VALUE;
12475 return '?';
12476 }
12477 newtok();
12478 enc = parser->enc;
12479 if (!parser_isascii()) {
12480 if (tokadd_mbchar(c) == -1) return 0;
12481 }
12482 else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12483 lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12484 goto ternary;
12485 }
12486 else if (c == '\\') {
12487 if (peek('u')) {
12488 nextc();
12489 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12490 if (0x80 <= c) {
12491 tokaddmbc(c, enc);
12492 }
12493 else {
12494 tokadd(c);
12495 }
12496 }
12497 else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
12498 nextc();
12499 if (tokadd_mbchar(c) == -1) return 0;
12500 }
12501 else {
12502 c = read_escape(0, &enc);
12503 tokadd(c);
12504 }
12505 }
12506 else {
12507 tokadd(c);
12508 }
12509 tokfix();
12510 set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12511 lex_state = EXPR_END;
12512 return tCHAR;
12513
12514 case '&':
12515 if ((c = nextc()) == '&') {
12516 lex_state = EXPR_BEG;
12517 if ((c = nextc()) == '=') {
12518 set_yylval_id(tANDOP);
12519 lex_state = EXPR_BEG;
12520 return tOP_ASGN;
12521 }
12522 pushback(c);
12523 return tANDOP;
12524 }
12525 else if (c == '=') {
12526 set_yylval_id('&');
12527 lex_state = EXPR_BEG;
12528 return tOP_ASGN;
12529 }
12530 pushback(c);
12531 if (IS_SPCARG(c)) {
12532 rb_warning0("`&' interpreted as argument prefix");
12533 c = tAMPER;
12534 }
12535 else if (IS_BEG()) {
12536 c = tAMPER;
12537 }
12538 else {
12539 warn_balanced("&", "argument prefix");
12540 c = '&';
12541 }
12542 switch (lex_state) {
12543 case EXPR_FNAME: case EXPR_DOT:
12544 lex_state = EXPR_ARG; break;
12545 default:
12546 lex_state = EXPR_BEG;
12547 }
12548 return c;
12549
12550 case '|':
12551 if ((c = nextc()) == '|') {
12552 lex_state = EXPR_BEG;
12553 if ((c = nextc()) == '=') {
12554 set_yylval_id(tOROP);
12555 lex_state = EXPR_BEG;
12556 return tOP_ASGN;
12557 }
12558 pushback(c);
12559 return tOROP;
12560 }
12561 if (c == '=') {
12562 set_yylval_id('|');
12563 lex_state = EXPR_BEG;
12564 return tOP_ASGN;
12565 }
12566 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12567 lex_state = EXPR_ARG;
12568 }
12569 else {
12570 lex_state = EXPR_BEG;
12571 }
12572 pushback(c);
12573 return '|';
12574
12575 case '+':
12576 c = nextc();
12577 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12578 lex_state = EXPR_ARG;
12579 if (c == '@') {
12580 return tUPLUS;
12581 }
12582 pushback(c);
12583 return '+';
12584 }
12585 if (c == '=') {
12586 set_yylval_id('+');
12587 lex_state = EXPR_BEG;
12588 return tOP_ASGN;
12589 }
12590 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
12591 lex_state = EXPR_BEG;
12592 pushback(c);
12593 if (c != -1 && ISDIGIT(c)) {
12594 c = '+';
12595 goto start_num;
12596 }
12597 return tUPLUS;
12598 }
12599 lex_state = EXPR_BEG;
12600 pushback(c);
12601 warn_balanced("+", "unary operator");
12602 return '+';
12603
12604 case '-':
12605 c = nextc();
12606 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12607 lex_state = EXPR_ARG;
12608 if (c == '@') {
12609 return tUMINUS;
12610 }
12611 pushback(c);
12612 return '-';
12613 }
12614 if (c == '=') {
12615 set_yylval_id('-');
12616 lex_state = EXPR_BEG;
12617 return tOP_ASGN;
12618 }
12619 if (c == '>') {
12620 lex_state = EXPR_ARG;
12621 return tLAMBDA;
12622 }
12623 if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
12624 lex_state = EXPR_BEG;
12625 pushback(c);
12626 if (c != -1 && ISDIGIT(c)) {
12627 return tUMINUS_NUM;
12628 }
12629 return tUMINUS;
12630 }
12631 lex_state = EXPR_BEG;
12632 pushback(c);
12633 warn_balanced("-", "unary operator");
12634 return '-';
12635
12636 case '.':
12637 lex_state = EXPR_BEG;
12638 if ((c = nextc()) == '.') {
12639 if ((c = nextc()) == '.') {
12640 return tDOT3;
12641 }
12642 pushback(c);
12643 return tDOT2;
12644 }
12645 pushback(c);
12646 if (c != -1 && ISDIGIT(c)) {
12647 yyerror("no .<digit> floating literal anymore; put 0 before dot");
12648 }
12649 lex_state = EXPR_DOT;
12650 return '.';
12651
12652 start_num:
12653 case '0': case '1': case '2': case '3': case '4':
12654 case '5': case '6': case '7': case '8': case '9':
12655 {
12656 int is_float, seen_point, seen_e, nondigit;
12657
12658 is_float = seen_point = seen_e = nondigit = 0;
12659 lex_state = EXPR_END;
12660 newtok();
12661 if (c == '-' || c == '+') {
12662 tokadd(c);
12663 c = nextc();
12664 }
12665 if (c == '0') {
12666 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
12667 int start = toklen();
12668 c = nextc();
12669 if (c == 'x' || c == 'X') {
12670
12671 c = nextc();
12672 if (c != -1 && ISXDIGIT(c)) {
12673 do {
12674 if (c == '_') {
12675 if (nondigit) break;
12676 nondigit = c;
12677 continue;
12678 }
12679 if (!ISXDIGIT(c)) break;
12680 nondigit = 0;
12681 tokadd(c);
12682 } while ((c = nextc()) != -1);
12683 }
12684 pushback(c);
12685 tokfix();
12686 if (toklen() == start) {
12687 no_digits();
12688 }
12689 else if (nondigit) goto trailing_uc;
12690 set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
12691 return tINTEGER;
12692 }
12693 if (c == 'b' || c == 'B') {
12694
12695 c = nextc();
12696 if (c == '0' || c == '1') {
12697 do {
12698 if (c == '_') {
12699 if (nondigit) break;
12700 nondigit = c;
12701 continue;
12702 }
12703 if (c != '0' && c != '1') break;
12704 nondigit = 0;
12705 tokadd(c);
12706 } while ((c = nextc()) != -1);
12707 }
12708 pushback(c);
12709 tokfix();
12710 if (toklen() == start) {
12711 no_digits();
12712 }
12713 else if (nondigit) goto trailing_uc;
12714 set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
12715 return tINTEGER;
12716 }
12717 if (c == 'd' || c == 'D') {
12718
12719 c = nextc();
12720 if (c != -1 && ISDIGIT(c)) {
12721 do {
12722 if (c == '_') {
12723 if (nondigit) break;
12724 nondigit = c;
12725 continue;
12726 }
12727 if (!ISDIGIT(c)) break;
12728 nondigit = 0;
12729 tokadd(c);
12730 } while ((c = nextc()) != -1);
12731 }
12732 pushback(c);
12733 tokfix();
12734 if (toklen() == start) {
12735 no_digits();
12736 }
12737 else if (nondigit) goto trailing_uc;
12738 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
12739 return tINTEGER;
12740 }
12741 if (c == '_') {
12742
12743 goto octal_number;
12744 }
12745 if (c == 'o' || c == 'O') {
12746
12747 c = nextc();
12748 if (c == -1 || c == '_' || !ISDIGIT(c)) {
12749 no_digits();
12750 }
12751 }
12752 if (c >= '0' && c <= '7') {
12753
12754 octal_number:
12755 do {
12756 if (c == '_') {
12757 if (nondigit) break;
12758 nondigit = c;
12759 continue;
12760 }
12761 if (c < '0' || c > '9') break;
12762 if (c > '7') goto invalid_octal;
12763 nondigit = 0;
12764 tokadd(c);
12765 } while ((c = nextc()) != -1);
12766 if (toklen() > start) {
12767 pushback(c);
12768 tokfix();
12769 if (nondigit) goto trailing_uc;
12770 set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
12771 return tINTEGER;
12772 }
12773 if (nondigit) {
12774 pushback(c);
12775 goto trailing_uc;
12776 }
12777 }
12778 if (c > '7' && c <= '9') {
12779 invalid_octal:
12780 yyerror("Invalid octal digit");
12781 }
12782 else if (c == '.' || c == 'e' || c == 'E') {
12783 tokadd('0');
12784 }
12785 else {
12786 pushback(c);
12787 set_yylval_literal(INT2FIX(0));
12788 return tINTEGER;
12789 }
12790 }
12791
12792 for (;;) {
12793 switch (c) {
12794 case '0': case '1': case '2': case '3': case '4':
12795 case '5': case '6': case '7': case '8': case '9':
12796 nondigit = 0;
12797 tokadd(c);
12798 break;
12799
12800 case '.':
12801 if (nondigit) goto trailing_uc;
12802 if (seen_point || seen_e) {
12803 goto decode_num;
12804 }
12805 else {
12806 int c0 = nextc();
12807 if (c0 == -1 || !ISDIGIT(c0)) {
12808 pushback(c0);
12809 goto decode_num;
12810 }
12811 c = c0;
12812 }
12813 tokadd('.');
12814 tokadd(c);
12815 is_float++;
12816 seen_point++;
12817 nondigit = 0;
12818 break;
12819
12820 case 'e':
12821 case 'E':
12822 if (nondigit) {
12823 pushback(c);
12824 c = nondigit;
12825 goto decode_num;
12826 }
12827 if (seen_e) {
12828 goto decode_num;
12829 }
12830 tokadd(c);
12831 seen_e++;
12832 is_float++;
12833 nondigit = c;
12834 c = nextc();
12835 if (c != '-' && c != '+') continue;
12836 tokadd(c);
12837 nondigit = c;
12838 break;
12839
12840 case '_':
12841 if (nondigit) goto decode_num;
12842 nondigit = c;
12843 break;
12844
12845 default:
12846 goto decode_num;
12847 }
12848 c = nextc();
12849 }
12850
12851 decode_num:
12852 pushback(c);
12853 if (nondigit) {
12854 char tmp[30];
12855 trailing_uc:
12856 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
12857 yyerror(tmp);
12858 }
12859 tokfix();
12860 if (is_float) {
12861 double d = strtod(tok(), 0);
12862 if (errno == ERANGE) {
12863 rb_warningS("Float %s out of range", tok());
12864 errno = 0;
12865 }
12866 set_yylval_literal(DBL2NUM(d));
12867 return tFLOAT;
12868 }
12869 set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
12870 return tINTEGER;
12871 }
12872
12873 case ')':
12874 case ']':
12875 paren_nest--;
12876 case '}':
12877 COND_LEXPOP();
12878 CMDARG_LEXPOP();
12879 if (c == ')')
12880 lex_state = EXPR_ENDFN;
12881 else
12882 lex_state = EXPR_ENDARG;
12883 return c;
12884
12885 case ':':
12886 c = nextc();
12887 if (c == ':') {
12888 if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
12889 lex_state = EXPR_BEG;
12890 return tCOLON3;
12891 }
12892 lex_state = EXPR_DOT;
12893 return tCOLON2;
12894 }
12895 if (IS_END() || ISSPACE(c)) {
12896 pushback(c);
12897 warn_balanced(":", "symbol literal");
12898 lex_state = EXPR_BEG;
12899 return ':';
12900 }
12901 switch (c) {
12902 case '\'':
12903 lex_strterm = NEW_STRTERM(str_ssym, c, 0);
12904 break;
12905 case '"':
12906 lex_strterm = NEW_STRTERM(str_dsym, c, 0);
12907 break;
12908 default:
12909 pushback(c);
12910 break;
12911 }
12912 lex_state = EXPR_FNAME;
12913 return tSYMBEG;
12914
12915 case '/':
12916 if (IS_BEG()) {
12917 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
12918 return tREGEXP_BEG;
12919 }
12920 if ((c = nextc()) == '=') {
12921 set_yylval_id('/');
12922 lex_state = EXPR_BEG;
12923 return tOP_ASGN;
12924 }
12925 pushback(c);
12926 if (IS_SPCARG(c)) {
12927 (void)arg_ambiguous();
12928 lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
12929 return tREGEXP_BEG;
12930 }
12931 switch (lex_state) {
12932 case EXPR_FNAME: case EXPR_DOT:
12933 lex_state = EXPR_ARG; break;
12934 default:
12935 lex_state = EXPR_BEG; break;
12936 }
12937 warn_balanced("/", "regexp literal");
12938 return '/';
12939
12940 case '^':
12941 if ((c = nextc()) == '=') {
12942 set_yylval_id('^');
12943 lex_state = EXPR_BEG;
12944 return tOP_ASGN;
12945 }
12946 switch (lex_state) {
12947 case EXPR_FNAME: case EXPR_DOT:
12948 lex_state = EXPR_ARG; break;
12949 default:
12950 lex_state = EXPR_BEG; break;
12951 }
12952 pushback(c);
12953 return '^';
12954
12955 case ';':
12956 lex_state = EXPR_BEG;
12957 command_start = TRUE;
12958 return ';';
12959
12960 case ',':
12961 lex_state = EXPR_BEG;
12962 return ',';
12963
12964 case '~':
12965 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12966 if ((c = nextc()) != '@') {
12967 pushback(c);
12968 }
12969 lex_state = EXPR_ARG;
12970 }
12971 else {
12972 lex_state = EXPR_BEG;
12973 }
12974 return '~';
12975
12976 case '(':
12977 if (IS_BEG()) {
12978 c = tLPAREN;
12979 }
12980 else if (IS_SPCARG(-1)) {
12981 c = tLPAREN_ARG;
12982 }
12983 paren_nest++;
12984 COND_PUSH(0);
12985 CMDARG_PUSH(0);
12986 lex_state = EXPR_BEG;
12987 return c;
12988
12989 case '[':
12990 paren_nest++;
12991 if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12992 lex_state = EXPR_ARG;
12993 if ((c = nextc()) == ']') {
12994 if ((c = nextc()) == '=') {
12995 return tASET;
12996 }
12997 pushback(c);
12998 return tAREF;
12999 }
13000 pushback(c);
13001 return '[';
13002 }
13003 else if (IS_BEG()) {
13004 c = tLBRACK;
13005 }
13006 else if (IS_ARG() && space_seen) {
13007 c = tLBRACK;
13008 }
13009 lex_state = EXPR_BEG;
13010 COND_PUSH(0);
13011 CMDARG_PUSH(0);
13012 return c;
13013
13014 case '{':
13015 if (lpar_beg && lpar_beg == paren_nest) {
13016 lex_state = EXPR_BEG;
13017 lpar_beg = 0;
13018 --paren_nest;
13019 COND_PUSH(0);
13020 CMDARG_PUSH(0);
13021 return tLAMBEG;
13022 }
13023 if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13024 c = '{';
13025 else if (lex_state == EXPR_ENDARG)
13026 c = tLBRACE_ARG;
13027 else
13028 c = tLBRACE;
13029 COND_PUSH(0);
13030 CMDARG_PUSH(0);
13031 lex_state = EXPR_BEG;
13032 if (c != tLBRACE) command_start = TRUE;
13033 return c;
13034
13035 case '\\':
13036 c = nextc();
13037 if (c == '\n') {
13038 space_seen = 1;
13039 #ifdef RIPPER
13040 ripper_dispatch_scan_event(parser, tSP);
13041 #endif
13042 goto retry;
13043 }
13044 pushback(c);
13045 return '\\';
13046
13047 case '%':
13048 if (IS_BEG()) {
13049 int term;
13050 int paren;
13051
13052 c = nextc();
13053 quotation:
13054 if (c == -1 || !ISALNUM(c)) {
13055 term = c;
13056 c = 'Q';
13057 }
13058 else {
13059 term = nextc();
13060 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13061 yyerror("unknown type of %string");
13062 return 0;
13063 }
13064 }
13065 if (c == -1 || term == -1) {
13066 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13067 return 0;
13068 }
13069 paren = term;
13070 if (term == '(') term = ')';
13071 else if (term == '[') term = ']';
13072 else if (term == '{') term = '}';
13073 else if (term == '<') term = '>';
13074 else paren = 0;
13075
13076 switch (c) {
13077 case 'Q':
13078 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13079 return tSTRING_BEG;
13080
13081 case 'q':
13082 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13083 return tSTRING_BEG;
13084
13085 case 'W':
13086 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13087 do {c = nextc();} while (ISSPACE(c));
13088 pushback(c);
13089 return tWORDS_BEG;
13090
13091 case 'w':
13092 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13093 do {c = nextc();} while (ISSPACE(c));
13094 pushback(c);
13095 return tQWORDS_BEG;
13096
13097 case 'x':
13098 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13099 return tXSTRING_BEG;
13100
13101 case 'r':
13102 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13103 return tREGEXP_BEG;
13104
13105 case 's':
13106 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13107 lex_state = EXPR_FNAME;
13108 return tSYMBEG;
13109
13110 default:
13111 yyerror("unknown type of %string");
13112 return 0;
13113 }
13114 }
13115 if ((c = nextc()) == '=') {
13116 set_yylval_id('%');
13117 lex_state = EXPR_BEG;
13118 return tOP_ASGN;
13119 }
13120 if (IS_SPCARG(c)) {
13121 goto quotation;
13122 }
13123 switch (lex_state) {
13124 case EXPR_FNAME: case EXPR_DOT:
13125 lex_state = EXPR_ARG; break;
13126 default:
13127 lex_state = EXPR_BEG; break;
13128 }
13129 pushback(c);
13130 warn_balanced("%%", "string literal");
13131 return '%';
13132
13133 case '$':
13134 lex_state = EXPR_END;
13135 newtok();
13136 c = nextc();
13137 switch (c) {
13138 case '_':
13139 c = nextc();
13140 if (parser_is_identchar()) {
13141 tokadd('$');
13142 tokadd('_');
13143 break;
13144 }
13145 pushback(c);
13146 c = '_';
13147
13148 case '~':
13149 case '*':
13150 case '$':
13151 case '?':
13152 case '!':
13153 case '@':
13154 case '/':
13155 case '\\':
13156 case ';':
13157 case ',':
13158 case '.':
13159 case '=':
13160 case ':':
13161 case '<':
13162 case '>':
13163 case '\"':
13164 tokadd('$');
13165 tokadd(c);
13166 tokfix();
13167 set_yylval_name(rb_intern(tok()));
13168 return tGVAR;
13169
13170 case '-':
13171 tokadd('$');
13172 tokadd(c);
13173 c = nextc();
13174 if (parser_is_identchar()) {
13175 if (tokadd_mbchar(c) == -1) return 0;
13176 }
13177 else {
13178 pushback(c);
13179 }
13180 gvar:
13181 tokfix();
13182 set_yylval_name(rb_intern(tok()));
13183 return tGVAR;
13184
13185 case '&':
13186 case '`':
13187 case '\'':
13188 case '+':
13189 if (last_state == EXPR_FNAME) {
13190 tokadd('$');
13191 tokadd(c);
13192 goto gvar;
13193 }
13194 set_yylval_node(NEW_BACK_REF(c));
13195 return tBACK_REF;
13196
13197 case '1': case '2': case '3':
13198 case '4': case '5': case '6':
13199 case '7': case '8': case '9':
13200 tokadd('$');
13201 do {
13202 tokadd(c);
13203 c = nextc();
13204 } while (c != -1 && ISDIGIT(c));
13205 pushback(c);
13206 if (last_state == EXPR_FNAME) goto gvar;
13207 tokfix();
13208 set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13209 return tNTH_REF;
13210
13211 default:
13212 if (!parser_is_identchar()) {
13213 pushback(c);
13214 return '$';
13215 }
13216 case '0':
13217 tokadd('$');
13218 }
13219 break;
13220
13221 case '@':
13222 c = nextc();
13223 newtok();
13224 tokadd('@');
13225 if (c == '@') {
13226 tokadd('@');
13227 c = nextc();
13228 }
13229 if (c != -1 && ISDIGIT(c)) {
13230 if (tokidx == 1) {
13231 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13232 }
13233 else {
13234 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13235 }
13236 return 0;
13237 }
13238 if (!parser_is_identchar()) {
13239 pushback(c);
13240 return '@';
13241 }
13242 break;
13243
13244 case '_':
13245 if (was_bol() && whole_match_p("__END__", 7, 0)) {
13246 ruby__end__seen = 1;
13247 parser->eofp = Qtrue;
13248 #ifndef RIPPER
13249 return -1;
13250 #else
13251 lex_goto_eol(parser);
13252 ripper_dispatch_scan_event(parser, k__END__);
13253 return 0;
13254 #endif
13255 }
13256 newtok();
13257 break;
13258
13259 default:
13260 if (!parser_is_identchar()) {
13261 rb_compile_error(PARSER_ARG "Invalid char `\\x%02X' in expression", c);
13262 goto retry;
13263 }
13264
13265 newtok();
13266 break;
13267 }
13268
13269 mb = ENC_CODERANGE_7BIT;
13270 do {
13271 if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13272 if (tokadd_mbchar(c) == -1) return 0;
13273 c = nextc();
13274 } while (parser_is_identchar());
13275 switch (tok()[0]) {
13276 case '@': case '$':
13277 pushback(c);
13278 break;
13279 default:
13280 if ((c == '!' || c == '?') && !peek('=')) {
13281 tokadd(c);
13282 }
13283 else {
13284 pushback(c);
13285 }
13286 }
13287 tokfix();
13288
13289 {
13290 int result = 0;
13291
13292 last_state = lex_state;
13293 switch (tok()[0]) {
13294 case '$':
13295 lex_state = EXPR_END;
13296 result = tGVAR;
13297 break;
13298 case '@':
13299 lex_state = EXPR_END;
13300 if (tok()[1] == '@')
13301 result = tCVAR;
13302 else
13303 result = tIVAR;
13304 break;
13305
13306 default:
13307 if (toklast() == '!' || toklast() == '?') {
13308 result = tFID;
13309 }
13310 else {
13311 if (lex_state == EXPR_FNAME) {
13312 if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13313 (!peek('=') || (peek_n('>', 1)))) {
13314 result = tIDENTIFIER;
13315 tokadd(c);
13316 tokfix();
13317 }
13318 else {
13319 pushback(c);
13320 }
13321 }
13322 if (result == 0 && ISUPPER(tok()[0])) {
13323 result = tCONSTANT;
13324 }
13325 else {
13326 result = tIDENTIFIER;
13327 }
13328 }
13329
13330 if (IS_LABEL_POSSIBLE()) {
13331 if (IS_LABEL_SUFFIX(0)) {
13332 lex_state = EXPR_BEG;
13333 nextc();
13334 set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13335 return tLABEL;
13336 }
13337 }
13338 if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13339 const struct kwtable *kw;
13340
13341
13342 kw = rb_reserved_word(tok(), toklen());
13343 if (kw) {
13344 enum lex_state_e state = lex_state;
13345 lex_state = kw->state;
13346 if (state == EXPR_FNAME) {
13347 set_yylval_name(rb_intern(kw->name));
13348 return kw->id[0];
13349 }
13350 if (kw->id[0] == keyword_do) {
13351 command_start = TRUE;
13352 if (lpar_beg && lpar_beg == paren_nest) {
13353 lpar_beg = 0;
13354 --paren_nest;
13355 return keyword_do_LAMBDA;
13356 }
13357 if (COND_P()) return keyword_do_cond;
13358 if (CMDARG_P() && state != EXPR_CMDARG)
13359 return keyword_do_block;
13360 if (state == EXPR_ENDARG || state == EXPR_BEG)
13361 return keyword_do_block;
13362 return keyword_do;
13363 }
13364 if (state == EXPR_BEG || state == EXPR_VALUE)
13365 return kw->id[0];
13366 else {
13367 if (kw->id[0] != kw->id[1])
13368 lex_state = EXPR_BEG;
13369 return kw->id[1];
13370 }
13371 }
13372 }
13373
13374 if (IS_BEG() ||
13375 lex_state == EXPR_DOT ||
13376 IS_ARG()) {
13377 if (cmd_state) {
13378 lex_state = EXPR_CMDARG;
13379 }
13380 else {
13381 lex_state = EXPR_ARG;
13382 }
13383 }
13384 else if (lex_state == EXPR_FNAME) {
13385 lex_state = EXPR_ENDFN;
13386 }
13387 else {
13388 lex_state = EXPR_END;
13389 }
13390 }
13391 {
13392 ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13393
13394 set_yylval_name(ident);
13395 if (last_state != EXPR_DOT && last_state != EXPR_FNAME &&
13396 is_local_id(ident) && lvar_defined(ident)) {
13397 lex_state = EXPR_END;
13398 }
13399 }
13400 return result;
13401 }
13402 }
13403
13404 #if YYPURE
13405 static int
13406 yylex(void *lval, void *p)
13407 #else
13408 yylex(void *p)
13409 #endif
13410 {
13411 struct parser_params *parser = (struct parser_params*)p;
13412 int t;
13413
13414 #if YYPURE
13415 parser->parser_yylval = lval;
13416 parser->parser_yylval->val = Qundef;
13417 #endif
13418 t = parser_yylex(parser);
13419 #ifdef RIPPER
13420 if (!NIL_P(parser->delayed)) {
13421 ripper_dispatch_delayed_token(parser, t);
13422 return t;
13423 }
13424 if (t != 0)
13425 ripper_dispatch_scan_event(parser, t);
13426 #endif
13427
13428 return t;
13429 }
13430
13431 #ifndef RIPPER
13432 static NODE*
13433 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13434 {
13435 NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13436 nd_set_line(n, ruby_sourceline);
13437 return n;
13438 }
13439
13440 enum node_type
13441 nodetype(NODE *node)
13442 {
13443 return (enum node_type)nd_type(node);
13444 }
13445
13446 int
13447 nodeline(NODE *node)
13448 {
13449 return nd_line(node);
13450 }
13451
13452 static NODE*
13453 newline_node(NODE *node)
13454 {
13455 if (node) {
13456 node = remove_begin(node);
13457 node->flags |= NODE_FL_NEWLINE;
13458 }
13459 return node;
13460 }
13461
13462 static void
13463 fixpos(NODE *node, NODE *orig)
13464 {
13465 if (!node) return;
13466 if (!orig) return;
13467 if (orig == (NODE*)1) return;
13468 nd_set_line(node, nd_line(orig));
13469 }
13470
13471 static void
13472 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13473 {
13474 rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13475 }
13476 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
13477
13478 static void
13479 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13480 {
13481 rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13482 }
13483 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
13484
13485 static NODE*
13486 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13487 {
13488 NODE *end, *h = head, *nd;
13489
13490 if (tail == 0) return head;
13491
13492 if (h == 0) return tail;
13493 switch (nd_type(h)) {
13494 case NODE_LIT:
13495 case NODE_STR:
13496 case NODE_SELF:
13497 case NODE_TRUE:
13498 case NODE_FALSE:
13499 case NODE_NIL:
13500 parser_warning(h, "unused literal ignored");
13501 return tail;
13502 default:
13503 h = end = NEW_BLOCK(head);
13504 end->nd_end = end;
13505 fixpos(end, head);
13506 head = end;
13507 break;
13508 case NODE_BLOCK:
13509 end = h->nd_end;
13510 break;
13511 }
13512
13513 nd = end->nd_head;
13514 switch (nd_type(nd)) {
13515 case NODE_RETURN:
13516 case NODE_BREAK:
13517 case NODE_NEXT:
13518 case NODE_REDO:
13519 case NODE_RETRY:
13520 if (RTEST(ruby_verbose)) {
13521 parser_warning(nd, "statement not reached");
13522 }
13523 break;
13524
13525 default:
13526 break;
13527 }
13528
13529 if (nd_type(tail) != NODE_BLOCK) {
13530 tail = NEW_BLOCK(tail);
13531 tail->nd_end = tail;
13532 }
13533 end->nd_next = tail;
13534 h->nd_end = tail->nd_end;
13535 return head;
13536 }
13537
13538
13539 static NODE*
13540 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
13541 {
13542 NODE *last;
13543
13544 if (list == 0) return NEW_LIST(item);
13545 if (list->nd_next) {
13546 last = list->nd_next->nd_end;
13547 }
13548 else {
13549 last = list;
13550 }
13551
13552 list->nd_alen += 1;
13553 last->nd_next = NEW_LIST(item);
13554 list->nd_next->nd_end = last->nd_next;
13555 return list;
13556 }
13557
13558
13559 static NODE*
13560 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13561 {
13562 NODE *last;
13563
13564 if (head->nd_next) {
13565 last = head->nd_next->nd_end;
13566 }
13567 else {
13568 last = head;
13569 }
13570
13571 head->nd_alen += tail->nd_alen;
13572 last->nd_next = tail;
13573 if (tail->nd_next) {
13574 head->nd_next->nd_end = tail->nd_next->nd_end;
13575 }
13576 else {
13577 head->nd_next->nd_end = tail;
13578 }
13579
13580 return head;
13581 }
13582
13583 static int
13584 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
13585 {
13586 if (NIL_P(tail)) return 1;
13587 if (!rb_enc_compatible(head, tail)) {
13588 compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
13589 rb_enc_name(rb_enc_get(head)),
13590 rb_enc_name(rb_enc_get(tail)));
13591 rb_str_resize(head, 0);
13592 rb_str_resize(tail, 0);
13593 return 0;
13594 }
13595 rb_str_buf_append(head, tail);
13596 return 1;
13597 }
13598
13599
13600 static NODE *
13601 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13602 {
13603 enum node_type htype;
13604
13605 if (!head) return tail;
13606 if (!tail) return head;
13607
13608 htype = nd_type(head);
13609 if (htype == NODE_EVSTR) {
13610 NODE *node = NEW_DSTR(Qnil);
13611 head = list_append(node, head);
13612 }
13613 switch (nd_type(tail)) {
13614 case NODE_STR:
13615 if (htype == NODE_STR) {
13616 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
13617 error:
13618 rb_gc_force_recycle((VALUE)head);
13619 rb_gc_force_recycle((VALUE)tail);
13620 return 0;
13621 }
13622 rb_gc_force_recycle((VALUE)tail);
13623 }
13624 else {
13625 list_append(head, tail);
13626 }
13627 break;
13628
13629 case NODE_DSTR:
13630 if (htype == NODE_STR) {
13631 if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
13632 goto error;
13633 tail->nd_lit = head->nd_lit;
13634 rb_gc_force_recycle((VALUE)head);
13635 head = tail;
13636 }
13637 else if (NIL_P(tail->nd_lit)) {
13638 head->nd_alen += tail->nd_alen - 1;
13639 head->nd_next->nd_end->nd_next = tail->nd_next;
13640 head->nd_next->nd_end = tail->nd_next->nd_end;
13641 rb_gc_force_recycle((VALUE)tail);
13642 }
13643 else {
13644 nd_set_type(tail, NODE_ARRAY);
13645 tail->nd_head = NEW_STR(tail->nd_lit);
13646 list_concat(head, tail);
13647 }
13648 break;
13649
13650 case NODE_EVSTR:
13651 if (htype == NODE_STR) {
13652 nd_set_type(head, NODE_DSTR);
13653 head->nd_alen = 1;
13654 }
13655 list_append(head, tail);
13656 break;
13657 }
13658 return head;
13659 }
13660
13661 static NODE *
13662 evstr2dstr_gen(struct parser_params *parser, NODE *node)
13663 {
13664 if (nd_type(node) == NODE_EVSTR) {
13665 node = list_append(NEW_DSTR(Qnil), node);
13666 }
13667 return node;
13668 }
13669
13670 static NODE *
13671 new_evstr_gen(struct parser_params *parser, NODE *node)
13672 {
13673 NODE *head = node;
13674
13675 if (node) {
13676 switch (nd_type(node)) {
13677 case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
13678 return node;
13679 }
13680 }
13681 return NEW_EVSTR(head);
13682 }
13683
13684 static NODE *
13685 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
13686 {
13687 value_expr(recv);
13688 value_expr(arg1);
13689 return NEW_CALL(recv, id, NEW_LIST(arg1));
13690 }
13691
13692 static NODE *
13693 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
13694 {
13695 value_expr(recv);
13696 return NEW_CALL(recv, id, 0);
13697 }
13698
13699 static NODE*
13700 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
13701 {
13702 value_expr(node1);
13703 value_expr(node2);
13704 if (node1) {
13705 switch (nd_type(node1)) {
13706 case NODE_DREGX:
13707 case NODE_DREGX_ONCE:
13708 return NEW_MATCH2(node1, node2);
13709
13710 case NODE_LIT:
13711 if (TYPE(node1->nd_lit) == T_REGEXP) {
13712 return NEW_MATCH2(node1, node2);
13713 }
13714 }
13715 }
13716
13717 if (node2) {
13718 switch (nd_type(node2)) {
13719 case NODE_DREGX:
13720 case NODE_DREGX_ONCE:
13721 return NEW_MATCH3(node2, node1);
13722
13723 case NODE_LIT:
13724 if (TYPE(node2->nd_lit) == T_REGEXP) {
13725 return NEW_MATCH3(node2, node1);
13726 }
13727 }
13728 }
13729
13730 return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
13731 }
13732
13733 static NODE*
13734 gettable_gen(struct parser_params *parser, ID id)
13735 {
13736 if (id == keyword_self) {
13737 return NEW_SELF();
13738 }
13739 else if (id == keyword_nil) {
13740 return NEW_NIL();
13741 }
13742 else if (id == keyword_true) {
13743 return NEW_TRUE();
13744 }
13745 else if (id == keyword_false) {
13746 return NEW_FALSE();
13747 }
13748 else if (id == keyword__FILE__) {
13749 return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
13750 rb_filesystem_encoding()));
13751 }
13752 else if (id == keyword__LINE__) {
13753 return NEW_LIT(INT2FIX(ruby_sourceline));
13754 }
13755 else if (id == keyword__ENCODING__) {
13756 return NEW_LIT(rb_enc_from_encoding(parser->enc));
13757 }
13758 else if (is_local_id(id)) {
13759 if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
13760 if (local_id(id)) return NEW_LVAR(id);
13761
13762 return NEW_VCALL(id);
13763 }
13764 else if (is_global_id(id)) {
13765 return NEW_GVAR(id);
13766 }
13767 else if (is_instance_id(id)) {
13768 return NEW_IVAR(id);
13769 }
13770 else if (is_const_id(id)) {
13771 return NEW_CONST(id);
13772 }
13773 else if (is_class_id(id)) {
13774 return NEW_CVAR(id);
13775 }
13776 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
13777 return 0;
13778 }
13779 #else
13780 static int
13781 id_is_var_gen(struct parser_params *parser, ID id)
13782 {
13783 if (is_notop_id(id)) {
13784 switch (id & ID_SCOPE_MASK) {
13785 case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
13786 return 1;
13787 case ID_LOCAL:
13788 if (dyna_in_block() && dvar_defined(id)) return 1;
13789 if (local_id(id)) return 1;
13790
13791 return 0;
13792 }
13793 }
13794 compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
13795 return 0;
13796 }
13797 #endif
13798
13799 #ifdef RIPPER
13800 static VALUE
13801 assignable_gen(struct parser_params *parser, VALUE lhs)
13802 #else
13803 static NODE*
13804 assignable_gen(struct parser_params *parser, ID id, NODE *val)
13805 #endif
13806 {
13807 #ifdef RIPPER
13808 ID id = get_id(lhs);
13809 # define assignable_result(x) get_value(lhs)
13810 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
13811 #else
13812 # define assignable_result(x) (x)
13813 #endif
13814 if (!id) return assignable_result(0);
13815 if (id == keyword_self) {
13816 yyerror("Can't change the value of self");
13817 }
13818 else if (id == keyword_nil) {
13819 yyerror("Can't assign to nil");
13820 }
13821 else if (id == keyword_true) {
13822 yyerror("Can't assign to true");
13823 }
13824 else if (id == keyword_false) {
13825 yyerror("Can't assign to false");
13826 }
13827 else if (id == keyword__FILE__) {
13828 yyerror("Can't assign to __FILE__");
13829 }
13830 else if (id == keyword__LINE__) {
13831 yyerror("Can't assign to __LINE__");
13832 }
13833 else if (id == keyword__ENCODING__) {
13834 yyerror("Can't assign to __ENCODING__");
13835 }
13836 else if (is_local_id(id)) {
13837 if (dyna_in_block()) {
13838 if (dvar_curr(id)) {
13839 return assignable_result(NEW_DASGN_CURR(id, val));
13840 }
13841 else if (dvar_defined(id)) {
13842 return assignable_result(NEW_DASGN(id, val));
13843 }
13844 else if (local_id(id)) {
13845 return assignable_result(NEW_LASGN(id, val));
13846 }
13847 else {
13848 dyna_var(id);
13849 return assignable_result(NEW_DASGN_CURR(id, val));
13850 }
13851 }
13852 else {
13853 if (!local_id(id)) {
13854 local_var(id);
13855 }
13856 return assignable_result(NEW_LASGN(id, val));
13857 }
13858 }
13859 else if (is_global_id(id)) {
13860 return assignable_result(NEW_GASGN(id, val));
13861 }
13862 else if (is_instance_id(id)) {
13863 return assignable_result(NEW_IASGN(id, val));
13864 }
13865 else if (is_const_id(id)) {
13866 if (!in_def && !in_single)
13867 return assignable_result(NEW_CDECL(id, val, 0));
13868 yyerror("dynamic constant assignment");
13869 }
13870 else if (is_class_id(id)) {
13871 return assignable_result(NEW_CVASGN(id, val));
13872 }
13873 else {
13874 compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
13875 }
13876 return assignable_result(0);
13877 #undef assignable_result
13878 #undef parser_yyerror
13879 }
13880
13881 #define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1))
13882
13883 static ID
13884 shadowing_lvar_gen(struct parser_params *parser, ID name)
13885 {
13886 if (idUScore == name) return name;
13887 if (dyna_in_block()) {
13888 if (dvar_curr(name)) {
13889 yyerror("duplicated argument name");
13890 }
13891 else if (dvar_defined_get(name) || local_id(name)) {
13892 rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
13893 vtable_add(lvtbl->vars, name);
13894 if (lvtbl->used) {
13895 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
13896 }
13897 }
13898 }
13899 else {
13900 if (local_id(name)) {
13901 yyerror("duplicated argument name");
13902 }
13903 }
13904 return name;
13905 }
13906
13907 static void
13908 new_bv_gen(struct parser_params *parser, ID name)
13909 {
13910 if (!name) return;
13911 if (!is_local_id(name)) {
13912 compile_error(PARSER_ARG "invalid local variable - %s",
13913 rb_id2name(name));
13914 return;
13915 }
13916 shadowing_lvar(name);
13917 dyna_var(name);
13918 }
13919
13920 #ifndef RIPPER
13921 static NODE *
13922 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
13923 {
13924 if (recv && nd_type(recv) == NODE_SELF)
13925 recv = (NODE *)1;
13926 return NEW_ATTRASGN(recv, tASET, idx);
13927 }
13928
13929 static void
13930 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
13931 {
13932 if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
13933 compile_error(PARSER_ARG "both block arg and actual block given");
13934 }
13935 }
13936
13937 ID
13938 rb_id_attrset(ID id)
13939 {
13940 id &= ~ID_SCOPE_MASK;
13941 id |= ID_ATTRSET;
13942 return id;
13943 }
13944
13945 static NODE *
13946 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
13947 {
13948 if (recv && nd_type(recv) == NODE_SELF)
13949 recv = (NODE *)1;
13950 return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
13951 }
13952
13953 static void
13954 rb_backref_error_gen(struct parser_params *parser, NODE *node)
13955 {
13956 switch (nd_type(node)) {
13957 case NODE_NTH_REF:
13958 compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
13959 break;
13960 case NODE_BACK_REF:
13961 compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
13962 break;
13963 }
13964 }
13965
13966 static NODE *
13967 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
13968 {
13969 if (!node2) return node1;
13970 switch (nd_type(node1)) {
13971 case NODE_BLOCK_PASS:
13972 if (node1->nd_head)
13973 node1->nd_head = arg_concat(node1->nd_head, node2);
13974 else
13975 node1->nd_head = NEW_LIST(node2);
13976 return node1;
13977 case NODE_ARGSPUSH:
13978 if (nd_type(node2) != NODE_ARRAY) break;
13979 node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
13980 nd_set_type(node1, NODE_ARGSCAT);
13981 return node1;
13982 case NODE_ARGSCAT:
13983 if (nd_type(node2) != NODE_ARRAY ||
13984 nd_type(node1->nd_body) != NODE_ARRAY) break;
13985 node1->nd_body = list_concat(node1->nd_body, node2);
13986 return node1;
13987 }
13988 return NEW_ARGSCAT(node1, node2);
13989 }
13990
13991 static NODE *
13992 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
13993 {
13994 if (!node1) return NEW_LIST(node2);
13995 switch (nd_type(node1)) {
13996 case NODE_ARRAY:
13997 return list_append(node1, node2);
13998 case NODE_BLOCK_PASS:
13999 node1->nd_head = arg_append(node1->nd_head, node2);
14000 return node1;
14001 case NODE_ARGSPUSH:
14002 node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14003 nd_set_type(node1, NODE_ARGSCAT);
14004 return node1;
14005 }
14006 return NEW_ARGSPUSH(node1, node2);
14007 }
14008
14009 static NODE *
14010 splat_array(NODE* node)
14011 {
14012 if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14013 if (nd_type(node) == NODE_ARRAY) return node;
14014 return 0;
14015 }
14016
14017 static NODE *
14018 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14019 {
14020 if (!lhs) return 0;
14021
14022 switch (nd_type(lhs)) {
14023 case NODE_GASGN:
14024 case NODE_IASGN:
14025 case NODE_IASGN2:
14026 case NODE_LASGN:
14027 case NODE_DASGN:
14028 case NODE_DASGN_CURR:
14029 case NODE_MASGN:
14030 case NODE_CDECL:
14031 case NODE_CVASGN:
14032 lhs->nd_value = rhs;
14033 break;
14034
14035 case NODE_ATTRASGN:
14036 case NODE_CALL:
14037 lhs->nd_args = arg_append(lhs->nd_args, rhs);
14038 break;
14039
14040 default:
14041
14042 break;
14043 }
14044
14045 return lhs;
14046 }
14047
14048 static int
14049 value_expr_gen(struct parser_params *parser, NODE *node)
14050 {
14051 int cond = 0;
14052
14053 if (!node) {
14054 rb_warning0("empty expression");
14055 }
14056 while (node) {
14057 switch (nd_type(node)) {
14058 case NODE_DEFN:
14059 case NODE_DEFS:
14060 parser_warning(node, "void value expression");
14061 return FALSE;
14062
14063 case NODE_RETURN:
14064 case NODE_BREAK:
14065 case NODE_NEXT:
14066 case NODE_REDO:
14067 case NODE_RETRY:
14068 if (!cond) yyerror("void value expression");
14069
14070 return FALSE;
14071
14072 case NODE_BLOCK:
14073 while (node->nd_next) {
14074 node = node->nd_next;
14075 }
14076 node = node->nd_head;
14077 break;
14078
14079 case NODE_BEGIN:
14080 node = node->nd_body;
14081 break;
14082
14083 case NODE_IF:
14084 if (!node->nd_body) {
14085 node = node->nd_else;
14086 break;
14087 }
14088 else if (!node->nd_else) {
14089 node = node->nd_body;
14090 break;
14091 }
14092 if (!value_expr(node->nd_body)) return FALSE;
14093 node = node->nd_else;
14094 break;
14095
14096 case NODE_AND:
14097 case NODE_OR:
14098 cond = 1;
14099 node = node->nd_2nd;
14100 break;
14101
14102 default:
14103 return TRUE;
14104 }
14105 }
14106
14107 return TRUE;
14108 }
14109
14110 static void
14111 void_expr_gen(struct parser_params *parser, NODE *node)
14112 {
14113 const char *useless = 0;
14114
14115 if (!RTEST(ruby_verbose)) return;
14116
14117 if (!node) return;
14118 switch (nd_type(node)) {
14119 case NODE_CALL:
14120 switch (node->nd_mid) {
14121 case '+':
14122 case '-':
14123 case '*':
14124 case '/':
14125 case '%':
14126 case tPOW:
14127 case tUPLUS:
14128 case tUMINUS:
14129 case '|':
14130 case '^':
14131 case '&':
14132 case tCMP:
14133 case '>':
14134 case tGEQ:
14135 case '<':
14136 case tLEQ:
14137 case tEQ:
14138 case tNEQ:
14139 useless = rb_id2name(node->nd_mid);
14140 break;
14141 }
14142 break;
14143
14144 case NODE_LVAR:
14145 case NODE_DVAR:
14146 case NODE_GVAR:
14147 case NODE_IVAR:
14148 case NODE_CVAR:
14149 case NODE_NTH_REF:
14150 case NODE_BACK_REF:
14151 useless = "a variable";
14152 break;
14153 case NODE_CONST:
14154 useless = "a constant";
14155 break;
14156 case NODE_LIT:
14157 case NODE_STR:
14158 case NODE_DSTR:
14159 case NODE_DREGX:
14160 case NODE_DREGX_ONCE:
14161 useless = "a literal";
14162 break;
14163 case NODE_COLON2:
14164 case NODE_COLON3:
14165 useless = "::";
14166 break;
14167 case NODE_DOT2:
14168 useless = "..";
14169 break;
14170 case NODE_DOT3:
14171 useless = "...";
14172 break;
14173 case NODE_SELF:
14174 useless = "self";
14175 break;
14176 case NODE_NIL:
14177 useless = "nil";
14178 break;
14179 case NODE_TRUE:
14180 useless = "true";
14181 break;
14182 case NODE_FALSE:
14183 useless = "false";
14184 break;
14185 case NODE_DEFINED:
14186 useless = "defined?";
14187 break;
14188 }
14189
14190 if (useless) {
14191 int line = ruby_sourceline;
14192
14193 ruby_sourceline = nd_line(node);
14194 rb_warnS("possibly useless use of %s in void context", useless);
14195 ruby_sourceline = line;
14196 }
14197 }
14198
14199 static void
14200 void_stmts_gen(struct parser_params *parser, NODE *node)
14201 {
14202 if (!RTEST(ruby_verbose)) return;
14203 if (!node) return;
14204 if (nd_type(node) != NODE_BLOCK) return;
14205
14206 for (;;) {
14207 if (!node->nd_next) return;
14208 void_expr0(node->nd_head);
14209 node = node->nd_next;
14210 }
14211 }
14212
14213 static NODE *
14214 remove_begin(NODE *node)
14215 {
14216 NODE **n = &node, *n1 = node;
14217 while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14218 *n = n1 = n1->nd_body;
14219 }
14220 return node;
14221 }
14222
14223 static void
14224 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14225 {
14226 NODE *node = *body;
14227
14228 if (!node) {
14229 *body = NEW_NIL();
14230 return;
14231 }
14232 #define subnodes(n1, n2) \
14233 ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14234 (!node->n2) ? (body = &node->n1, 1) : \
14235 (reduce_nodes(&node->n1), body = &node->n2, 1))
14236
14237 while (node) {
14238 int newline = (int)(node->flags & NODE_FL_NEWLINE);
14239 switch (nd_type(node)) {
14240 end:
14241 case NODE_NIL:
14242 *body = 0;
14243 return;
14244 case NODE_RETURN:
14245 *body = node = node->nd_stts;
14246 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14247 continue;
14248 case NODE_BEGIN:
14249 *body = node = node->nd_body;
14250 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14251 continue;
14252 case NODE_BLOCK:
14253 body = &node->nd_end->nd_head;
14254 break;
14255 case NODE_IF:
14256 if (subnodes(nd_body, nd_else)) break;
14257 return;
14258 case NODE_CASE:
14259 body = &node->nd_body;
14260 break;
14261 case NODE_WHEN:
14262 if (!subnodes(nd_body, nd_next)) goto end;
14263 break;
14264 case NODE_ENSURE:
14265 if (!subnodes(nd_head, nd_resq)) goto end;
14266 break;
14267 case NODE_RESCUE:
14268 if (node->nd_else) {
14269 body = &node->nd_resq;
14270 break;
14271 }
14272 if (!subnodes(nd_head, nd_resq)) goto end;
14273 break;
14274 default:
14275 return;
14276 }
14277 node = *body;
14278 if (newline && node) node->flags |= NODE_FL_NEWLINE;
14279 }
14280
14281 #undef subnodes
14282 }
14283
14284 static int
14285 assign_in_cond(struct parser_params *parser, NODE *node)
14286 {
14287 switch (nd_type(node)) {
14288 case NODE_MASGN:
14289 yyerror("multiple assignment in conditional");
14290 return 1;
14291
14292 case NODE_LASGN:
14293 case NODE_DASGN:
14294 case NODE_DASGN_CURR:
14295 case NODE_GASGN:
14296 case NODE_IASGN:
14297 break;
14298
14299 default:
14300 return 0;
14301 }
14302
14303 if (!node->nd_value) return 1;
14304 switch (nd_type(node->nd_value)) {
14305 case NODE_LIT:
14306 case NODE_STR:
14307 case NODE_NIL:
14308 case NODE_TRUE:
14309 case NODE_FALSE:
14310
14311 parser_warn(node->nd_value, "found = in conditional, should be ==");
14312 return 1;
14313
14314 case NODE_DSTR:
14315 case NODE_XSTR:
14316 case NODE_DXSTR:
14317 case NODE_EVSTR:
14318 case NODE_DREGX:
14319 default:
14320 break;
14321 }
14322 return 1;
14323 }
14324
14325 static void
14326 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14327 {
14328 if (!e_option_supplied(parser)) parser_warn(node, str);
14329 }
14330
14331 static void
14332 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14333 {
14334 if (!e_option_supplied(parser)) parser_warning(node, str);
14335 }
14336
14337 static void
14338 fixup_nodes(NODE **rootnode)
14339 {
14340 NODE *node, *next, *head;
14341
14342 for (node = *rootnode; node; node = next) {
14343 enum node_type type;
14344 VALUE val;
14345
14346 next = node->nd_next;
14347 head = node->nd_head;
14348 rb_gc_force_recycle((VALUE)node);
14349 *rootnode = next;
14350 switch (type = nd_type(head)) {
14351 case NODE_DOT2:
14352 case NODE_DOT3:
14353 val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14354 type == NODE_DOT3);
14355 rb_gc_force_recycle((VALUE)head->nd_beg);
14356 rb_gc_force_recycle((VALUE)head->nd_end);
14357 nd_set_type(head, NODE_LIT);
14358 head->nd_lit = val;
14359 break;
14360 default:
14361 break;
14362 }
14363 }
14364 }
14365
14366 static NODE *cond0(struct parser_params*,NODE*);
14367
14368 static NODE*
14369 range_op(struct parser_params *parser, NODE *node)
14370 {
14371 enum node_type type;
14372
14373 if (node == 0) return 0;
14374
14375 type = nd_type(node);
14376 value_expr(node);
14377 if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14378 warn_unless_e_option(parser, node, "integer literal in conditional range");
14379 return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14380 }
14381 return cond0(parser, node);
14382 }
14383
14384 static int
14385 literal_node(NODE *node)
14386 {
14387 if (!node) return 1;
14388 switch (nd_type(node)) {
14389 case NODE_LIT:
14390 case NODE_STR:
14391 case NODE_DSTR:
14392 case NODE_EVSTR:
14393 case NODE_DREGX:
14394 case NODE_DREGX_ONCE:
14395 case NODE_DSYM:
14396 return 2;
14397 case NODE_TRUE:
14398 case NODE_FALSE:
14399 case NODE_NIL:
14400 return 1;
14401 }
14402 return 0;
14403 }
14404
14405 static NODE*
14406 cond0(struct parser_params *parser, NODE *node)
14407 {
14408 if (node == 0) return 0;
14409 assign_in_cond(parser, node);
14410
14411 switch (nd_type(node)) {
14412 case NODE_DSTR:
14413 case NODE_EVSTR:
14414 case NODE_STR:
14415 rb_warn0("string literal in condition");
14416 break;
14417
14418 case NODE_DREGX:
14419 case NODE_DREGX_ONCE:
14420 warning_unless_e_option(parser, node, "regex literal in condition");
14421 return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14422
14423 case NODE_AND:
14424 case NODE_OR:
14425 node->nd_1st = cond0(parser, node->nd_1st);
14426 node->nd_2nd = cond0(parser, node->nd_2nd);
14427 break;
14428
14429 case NODE_DOT2:
14430 case NODE_DOT3:
14431 node->nd_beg = range_op(parser, node->nd_beg);
14432 node->nd_end = range_op(parser, node->nd_end);
14433 if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14434 else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14435 if (!e_option_supplied(parser)) {
14436 int b = literal_node(node->nd_beg);
14437 int e = literal_node(node->nd_end);
14438 if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14439 parser_warn(node, "range literal in condition");
14440 }
14441 }
14442 break;
14443
14444 case NODE_DSYM:
14445 parser_warning(node, "literal in condition");
14446 break;
14447
14448 case NODE_LIT:
14449 if (TYPE(node->nd_lit) == T_REGEXP) {
14450 warn_unless_e_option(parser, node, "regex literal in condition");
14451 nd_set_type(node, NODE_MATCH);
14452 }
14453 else {
14454 parser_warning(node, "literal in condition");
14455 }
14456 default:
14457 break;
14458 }
14459 return node;
14460 }
14461
14462 static NODE*
14463 cond_gen(struct parser_params *parser, NODE *node)
14464 {
14465 if (node == 0) return 0;
14466 return cond0(parser, node);
14467 }
14468
14469 static NODE*
14470 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14471 {
14472 value_expr(left);
14473 if (left && (enum node_type)nd_type(left) == type) {
14474 NODE *node = left, *second;
14475 while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14476 node = second;
14477 }
14478 node->nd_2nd = NEW_NODE(type, second, right, 0);
14479 return left;
14480 }
14481 return NEW_NODE(type, left, right, 0);
14482 }
14483
14484 static void
14485 no_blockarg(struct parser_params *parser, NODE *node)
14486 {
14487 if (node && nd_type(node) == NODE_BLOCK_PASS) {
14488 compile_error(PARSER_ARG "block argument should not be given");
14489 }
14490 }
14491
14492 static NODE *
14493 ret_args_gen(struct parser_params *parser, NODE *node)
14494 {
14495 if (node) {
14496 no_blockarg(parser, node);
14497 if (nd_type(node) == NODE_ARRAY) {
14498 if (node->nd_next == 0) {
14499 node = node->nd_head;
14500 }
14501 else {
14502 nd_set_type(node, NODE_VALUES);
14503 }
14504 }
14505 }
14506 return node;
14507 }
14508
14509 static NODE *
14510 new_yield_gen(struct parser_params *parser, NODE *node)
14511 {
14512 long state = Qtrue;
14513
14514 if (node) {
14515 no_blockarg(parser, node);
14516 if (node && nd_type(node) == NODE_SPLAT) {
14517 state = Qtrue;
14518 }
14519 }
14520 else {
14521 state = Qfalse;
14522 }
14523 return NEW_YIELD(node, state);
14524 }
14525
14526 static NODE*
14527 negate_lit(NODE *node)
14528 {
14529 switch (TYPE(node->nd_lit)) {
14530 case T_FIXNUM:
14531 node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14532 break;
14533 case T_BIGNUM:
14534 node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14535 break;
14536 case T_FLOAT:
14537 RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14538 break;
14539 default:
14540 break;
14541 }
14542 return node;
14543 }
14544
14545 static NODE *
14546 arg_blk_pass(NODE *node1, NODE *node2)
14547 {
14548 if (node2) {
14549 node2->nd_head = node1;
14550 return node2;
14551 }
14552 return node1;
14553 }
14554
14555 static NODE*
14556 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
14557 {
14558 int saved_line = ruby_sourceline;
14559 NODE *node;
14560 NODE *i1, *i2 = 0;
14561
14562 node = NEW_ARGS(m ? m->nd_plen : 0, o);
14563 i1 = m ? m->nd_next : 0;
14564 node->nd_next = NEW_ARGS_AUX(r, b);
14565
14566 if (p) {
14567 i2 = p->nd_next;
14568 node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
14569 }
14570 else if (i1) {
14571 node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
14572 }
14573 if (i1 || i2) {
14574 node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
14575 }
14576 ruby_sourceline = saved_line;
14577 return node;
14578 }
14579 #endif
14580
14581 static void
14582 warn_unused_var(struct parser_params *parser, struct local_vars *local)
14583 {
14584 int i, cnt;
14585 ID *v, *u;
14586
14587 if (!local->used) return;
14588 v = local->vars->tbl;
14589 u = local->used->tbl;
14590 cnt = local->used->pos;
14591 if (cnt != local->vars->pos) {
14592 rb_bug("local->used->pos != local->vars->pos");
14593 }
14594 for (i = 0; i < cnt; ++i) {
14595 if (!v[i] || (u[i] & LVAR_USED)) continue;
14596 if (idUScore == v[i]) continue;
14597 rb_compile_warn(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
14598 }
14599 }
14600
14601 static void
14602 local_push_gen(struct parser_params *parser, int inherit_dvars)
14603 {
14604 struct local_vars *local;
14605
14606 local = ALLOC(struct local_vars);
14607 local->prev = lvtbl;
14608 local->args = vtable_alloc(0);
14609 local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
14610 local->used = !inherit_dvars && RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
14611 lvtbl = local;
14612 }
14613
14614 static void
14615 local_pop_gen(struct parser_params *parser)
14616 {
14617 struct local_vars *local = lvtbl->prev;
14618 if (lvtbl->used) {
14619 warn_unused_var(parser, lvtbl);
14620 vtable_free(lvtbl->used);
14621 }
14622 vtable_free(lvtbl->args);
14623 vtable_free(lvtbl->vars);
14624 xfree(lvtbl);
14625 lvtbl = local;
14626 }
14627
14628 #ifndef RIPPER
14629 static ID*
14630 vtable_tblcpy(ID *buf, const struct vtable *src)
14631 {
14632 int i, cnt = vtable_size(src);
14633
14634 if (cnt > 0) {
14635 buf[0] = cnt;
14636 for (i = 0; i < cnt; i++) {
14637 buf[i] = src->tbl[i];
14638 }
14639 return buf;
14640 }
14641 return 0;
14642 }
14643
14644 static ID*
14645 local_tbl_gen(struct parser_params *parser)
14646 {
14647 int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
14648 ID *buf;
14649
14650 if (cnt <= 0) return 0;
14651 buf = ALLOC_N(ID, cnt + 1);
14652 vtable_tblcpy(buf+1, lvtbl->args);
14653 vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
14654 buf[0] = cnt;
14655 return buf;
14656 }
14657 #endif
14658
14659 static int
14660 arg_var_gen(struct parser_params *parser, ID id)
14661 {
14662 vtable_add(lvtbl->args, id);
14663 return vtable_size(lvtbl->args) - 1;
14664 }
14665
14666 static int
14667 local_var_gen(struct parser_params *parser, ID id)
14668 {
14669 vtable_add(lvtbl->vars, id);
14670 if (lvtbl->used) {
14671 vtable_add(lvtbl->used, (ID)ruby_sourceline);
14672 }
14673 return vtable_size(lvtbl->vars) - 1;
14674 }
14675
14676 static int
14677 local_id_gen(struct parser_params *parser, ID id)
14678 {
14679 struct vtable *vars, *args, *used;
14680
14681 vars = lvtbl->vars;
14682 args = lvtbl->args;
14683 used = lvtbl->used;
14684
14685 while (vars && POINTER_P(vars->prev)) {
14686 vars = vars->prev;
14687 args = args->prev;
14688 if (used) used = used->prev;
14689 }
14690
14691 if (vars && vars->prev == DVARS_INHERIT) {
14692 return rb_local_defined(id);
14693 }
14694 else if (vtable_included(args, id)) {
14695 return 1;
14696 }
14697 else {
14698 int i = vtable_included(vars, id);
14699 if (i && used) used->tbl[i-1] |= LVAR_USED;
14700 return i != 0;
14701 }
14702 }
14703
14704 static const struct vtable *
14705 dyna_push_gen(struct parser_params *parser)
14706 {
14707 lvtbl->args = vtable_alloc(lvtbl->args);
14708 lvtbl->vars = vtable_alloc(lvtbl->vars);
14709 if (lvtbl->used) {
14710 lvtbl->used = vtable_alloc(lvtbl->used);
14711 }
14712 return lvtbl->args;
14713 }
14714
14715 static void
14716 dyna_pop_1(struct parser_params *parser)
14717 {
14718 struct vtable *tmp;
14719
14720 if ((tmp = lvtbl->used) != 0) {
14721 warn_unused_var(parser, lvtbl);
14722 lvtbl->used = lvtbl->used->prev;
14723 vtable_free(tmp);
14724 }
14725 tmp = lvtbl->args;
14726 lvtbl->args = lvtbl->args->prev;
14727 vtable_free(tmp);
14728 tmp = lvtbl->vars;
14729 lvtbl->vars = lvtbl->vars->prev;
14730 vtable_free(tmp);
14731 }
14732
14733 static void
14734 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
14735 {
14736 while (lvtbl->args != lvargs) {
14737 dyna_pop_1(parser);
14738 if (!lvtbl->args) {
14739 struct local_vars *local = lvtbl->prev;
14740 xfree(lvtbl);
14741 lvtbl = local;
14742 }
14743 }
14744 dyna_pop_1(parser);
14745 }
14746
14747 static int
14748 dyna_in_block_gen(struct parser_params *parser)
14749 {
14750 return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
14751 }
14752
14753 static int
14754 dvar_defined_gen(struct parser_params *parser, ID id, int get)
14755 {
14756 struct vtable *vars, *args, *used;
14757 int i;
14758
14759 args = lvtbl->args;
14760 vars = lvtbl->vars;
14761 used = lvtbl->used;
14762
14763 while (POINTER_P(vars)) {
14764 if (vtable_included(args, id)) {
14765 return 1;
14766 }
14767 if ((i = vtable_included(vars, id)) != 0) {
14768 if (used) used->tbl[i-1] |= LVAR_USED;
14769 return 1;
14770 }
14771 args = args->prev;
14772 vars = vars->prev;
14773 if (get) used = 0;
14774 if (used) used = used->prev;
14775 }
14776
14777 if (vars == DVARS_INHERIT) {
14778 return rb_dvar_defined(id);
14779 }
14780
14781 return 0;
14782 }
14783
14784 static int
14785 dvar_curr_gen(struct parser_params *parser, ID id)
14786 {
14787 return (vtable_included(lvtbl->args, id) ||
14788 vtable_included(lvtbl->vars, id));
14789 }
14790
14791 #ifndef RIPPER
14792 static void
14793 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
14794 {
14795 int c = RE_OPTION_ENCODING_IDX(options);
14796
14797 if (c) {
14798 int opt, idx;
14799 rb_char_to_option_kcode(c, &opt, &idx);
14800 if (idx != ENCODING_GET(str) &&
14801 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
14802 goto error;
14803 }
14804 ENCODING_SET(str, idx);
14805 }
14806 else if (RE_OPTION_ENCODING_NONE(options)) {
14807 if (!ENCODING_IS_ASCII8BIT(str) &&
14808 rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
14809 c = 'n';
14810 goto error;
14811 }
14812 rb_enc_associate(str, rb_ascii8bit_encoding());
14813 }
14814 else if (parser->enc == rb_usascii_encoding()) {
14815 if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
14816
14817 rb_enc_associate(str, rb_usascii_encoding());
14818 }
14819 else {
14820 rb_enc_associate(str, rb_ascii8bit_encoding());
14821 }
14822 }
14823 return;
14824
14825 error:
14826 compile_error(PARSER_ARG
14827 "regexp encoding option '%c' differs from source encoding '%s'",
14828 c, rb_enc_name(rb_enc_get(str)));
14829 }
14830
14831 static int
14832 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
14833 {
14834 VALUE err;
14835 reg_fragment_setenc(str, options);
14836 err = rb_reg_check_preprocess(str);
14837 if (err != Qnil) {
14838 err = rb_obj_as_string(err);
14839 compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
14840 RB_GC_GUARD(err);
14841 return 0;
14842 }
14843 return 1;
14844 }
14845
14846 typedef struct {
14847 struct parser_params* parser;
14848 rb_encoding *enc;
14849 NODE *succ_block;
14850 NODE *fail_block;
14851 int num;
14852 } reg_named_capture_assign_t;
14853
14854 static int
14855 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
14856 int back_num, int *back_refs, OnigRegex regex, void *arg0)
14857 {
14858 reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
14859 struct parser_params* parser = arg->parser;
14860 rb_encoding *enc = arg->enc;
14861 long len = name_end - name;
14862 const char *s = (const char *)name;
14863 ID var;
14864
14865 arg->num++;
14866
14867 if (arg->succ_block == 0) {
14868 arg->succ_block = NEW_BEGIN(0);
14869 arg->fail_block = NEW_BEGIN(0);
14870 }
14871
14872 if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
14873 (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
14874 !rb_enc_symname2_p(s, len, enc)) {
14875 return ST_CONTINUE;
14876 }
14877 var = rb_intern3(s, len, enc);
14878 if (dvar_defined(var) || local_id(var)) {
14879 rb_warningS("named capture conflicts a local variable - %s",
14880 rb_id2name(var));
14881 }
14882 arg->succ_block = block_append(arg->succ_block,
14883 newline_node(node_assign(assignable(var,0),
14884 NEW_CALL(
14885 gettable(rb_intern("$~")),
14886 idAREF,
14887 NEW_LIST(NEW_LIT(ID2SYM(var))))
14888 )));
14889 arg->fail_block = block_append(arg->fail_block,
14890 newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
14891 return ST_CONTINUE;
14892 }
14893
14894 static NODE *
14895 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
14896 {
14897 reg_named_capture_assign_t arg;
14898
14899 arg.parser = parser;
14900 arg.enc = rb_enc_get(regexp);
14901 arg.succ_block = 0;
14902 arg.fail_block = 0;
14903 arg.num = 0;
14904 onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
14905
14906 if (arg.num == 0)
14907 return match;
14908
14909 return
14910 block_append(
14911 newline_node(match),
14912 NEW_IF(gettable(rb_intern("$~")),
14913 block_append(
14914 newline_node(arg.succ_block),
14915 newline_node(
14916 NEW_CALL(
14917 gettable(rb_intern("$~")),
14918 rb_intern("begin"),
14919 NEW_LIST(NEW_LIT(INT2FIX(0)))))),
14920 block_append(
14921 newline_node(arg.fail_block),
14922 newline_node(
14923 NEW_LIT(Qnil)))));
14924 }
14925
14926 static VALUE
14927 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
14928 {
14929 VALUE re;
14930 VALUE err;
14931
14932 reg_fragment_setenc(str, options);
14933 err = rb_errinfo();
14934 re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
14935 if (NIL_P(re)) {
14936 ID mesg = rb_intern("mesg");
14937 VALUE m = rb_attr_get(rb_errinfo(), mesg);
14938 rb_set_errinfo(err);
14939 if (!NIL_P(err)) {
14940 rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
14941 }
14942 else {
14943 compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
14944 }
14945 return Qnil;
14946 }
14947 return re;
14948 }
14949
14950 void
14951 rb_gc_mark_parser(void)
14952 {
14953 }
14954
14955 NODE*
14956 rb_parser_append_print(VALUE vparser, NODE *node)
14957 {
14958 NODE *prelude = 0;
14959 NODE *scope = node;
14960 struct parser_params *parser;
14961
14962 if (!node) return node;
14963
14964 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
14965
14966 node = node->nd_body;
14967
14968 if (nd_type(node) == NODE_PRELUDE) {
14969 prelude = node;
14970 node = node->nd_body;
14971 }
14972
14973 node = block_append(node,
14974 NEW_FCALL(rb_intern("print"),
14975 NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
14976 if (prelude) {
14977 prelude->nd_body = node;
14978 scope->nd_body = prelude;
14979 }
14980 else {
14981 scope->nd_body = node;
14982 }
14983
14984 return scope;
14985 }
14986
14987 NODE *
14988 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
14989 {
14990 NODE *prelude = 0;
14991 NODE *scope = node;
14992 struct parser_params *parser;
14993
14994 if (!node) return node;
14995
14996 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
14997
14998 node = node->nd_body;
14999
15000 if (nd_type(node) == NODE_PRELUDE) {
15001 prelude = node;
15002 node = node->nd_body;
15003 }
15004 if (split) {
15005 node = block_append(NEW_GASGN(rb_intern("$F"),
15006 NEW_CALL(NEW_GVAR(rb_intern("$_")),
15007 rb_intern("split"), 0)),
15008 node);
15009 }
15010 if (chop) {
15011 node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15012 rb_intern("chop!"), 0), node);
15013 }
15014
15015 node = NEW_OPT_N(node);
15016
15017 if (prelude) {
15018 prelude->nd_body = node;
15019 scope->nd_body = prelude;
15020 }
15021 else {
15022 scope->nd_body = node;
15023 }
15024
15025 return scope;
15026 }
15027
15028 static const struct {
15029 ID token;
15030 const char *name;
15031 } op_tbl[] = {
15032 {tDOT2, ".."},
15033 {tDOT3, "..."},
15034 {'+', "+(binary)"},
15035 {'-', "-(binary)"},
15036 {tPOW, "**"},
15037 {tUPLUS, "+@"},
15038 {tUMINUS, "-@"},
15039 {tCMP, "<=>"},
15040 {tGEQ, ">="},
15041 {tLEQ, "<="},
15042 {tEQ, "=="},
15043 {tEQQ, "==="},
15044 {tNEQ, "!="},
15045 {tMATCH, "=~"},
15046 {tNMATCH, "!~"},
15047 {tAREF, "[]"},
15048 {tASET, "[]="},
15049 {tLSHFT, "<<"},
15050 {tRSHFT, ">>"},
15051 {tCOLON2, "::"},
15052 };
15053
15054 #define op_tbl_count numberof(op_tbl)
15055
15056 #ifndef ENABLE_SELECTOR_NAMESPACE
15057 #define ENABLE_SELECTOR_NAMESPACE 0
15058 #endif
15059
15060 static struct symbols {
15061 ID last_id;
15062 st_table *sym_id;
15063 st_table *id_str;
15064 #if ENABLE_SELECTOR_NAMESPACE
15065 st_table *ivar2_id;
15066 st_table *id_ivar2;
15067 #endif
15068 VALUE op_sym[tLAST_TOKEN];
15069 } global_symbols = {tLAST_ID};
15070
15071 static const struct st_hash_type symhash = {
15072 rb_str_hash_cmp,
15073 rb_str_hash,
15074 };
15075
15076 #if ENABLE_SELECTOR_NAMESPACE
15077 struct ivar2_key {
15078 ID id;
15079 VALUE klass;
15080 };
15081
15082 static int
15083 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15084 {
15085 if (key1->id == key2->id && key1->klass == key2->klass) {
15086 return 0;
15087 }
15088 return 1;
15089 }
15090
15091 static int
15092 ivar2_hash(struct ivar2_key *key)
15093 {
15094 return (key->id << 8) ^ (key->klass >> 2);
15095 }
15096
15097 static const struct st_hash_type ivar2_hash_type = {
15098 ivar2_cmp,
15099 ivar2_hash,
15100 };
15101 #endif
15102
15103 void
15104 Init_sym(void)
15105 {
15106 global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15107 global_symbols.id_str = st_init_numtable_with_size(1000);
15108 #if ENABLE_SELECTOR_NAMESPACE
15109 global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15110 global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15111 #endif
15112
15113 Init_id();
15114 }
15115
15116 void
15117 rb_gc_mark_symbols(void)
15118 {
15119 rb_mark_tbl(global_symbols.id_str);
15120 rb_gc_mark_locations(global_symbols.op_sym,
15121 global_symbols.op_sym + tLAST_TOKEN);
15122 }
15123 #endif
15124
15125 static ID
15126 internal_id_gen(struct parser_params *parser)
15127 {
15128 ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15129 id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15130 return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15131 }
15132
15133 #ifndef RIPPER
15134 static int
15135 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15136 {
15137 int mb = 0;
15138
15139 if (m >= e) return 0;
15140 switch (*m) {
15141 case '~': case '*': case '$': case '?': case '!': case '@':
15142 case '/': case '\\': case ';': case ',': case '.': case '=':
15143 case ':': case '<': case '>': case '\"':
15144 case '&': case '`': case '\'': case '+':
15145 case '0':
15146 ++m;
15147 break;
15148 case '-':
15149 ++m;
15150 if (m < e && is_identchar(m, e, enc)) {
15151 if (!ISASCII(*m)) mb = 1;
15152 m += rb_enc_mbclen(m, e, enc);
15153 }
15154 break;
15155 default:
15156 if (!rb_enc_isdigit(*m, enc)) return 0;
15157 do {
15158 if (!ISASCII(*m)) mb = 1;
15159 ++m;
15160 } while (m < e && rb_enc_isdigit(*m, enc));
15161 }
15162 return m == e ? mb + 1 : 0;
15163 }
15164
15165 int
15166 rb_symname_p(const char *name)
15167 {
15168 return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15169 }
15170
15171 int
15172 rb_enc_symname_p(const char *name, rb_encoding *enc)
15173 {
15174 return rb_enc_symname2_p(name, strlen(name), enc);
15175 }
15176
15177 int
15178 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15179 {
15180 const char *m = name;
15181 const char *e = m + len;
15182 int localid = FALSE;
15183
15184 if (!m || len <= 0) return FALSE;
15185 switch (*m) {
15186 case '\0':
15187 return FALSE;
15188
15189 case '$':
15190 if (is_special_global_name(++m, e, enc)) return TRUE;
15191 goto id;
15192
15193 case '@':
15194 if (*++m == '@') ++m;
15195 goto id;
15196
15197 case '<':
15198 switch (*++m) {
15199 case '<': ++m; break;
15200 case '=': if (*++m == '>') ++m; break;
15201 default: break;
15202 }
15203 break;
15204
15205 case '>':
15206 switch (*++m) {
15207 case '>': case '=': ++m; break;
15208 }
15209 break;
15210
15211 case '=':
15212 switch (*++m) {
15213 case '~': ++m; break;
15214 case '=': if (*++m == '=') ++m; break;
15215 default: return FALSE;
15216 }
15217 break;
15218
15219 case '*':
15220 if (*++m == '*') ++m;
15221 break;
15222
15223 case '+': case '-':
15224 if (*++m == '@') ++m;
15225 break;
15226
15227 case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15228 ++m;
15229 break;
15230
15231 case '[':
15232 if (*++m != ']') return FALSE;
15233 if (*++m == '=') ++m;
15234 break;
15235
15236 case '!':
15237 if (len == 1) return TRUE;
15238 switch (*++m) {
15239 case '=': case '~': ++m; break;
15240 default: return FALSE;
15241 }
15242 break;
15243
15244 default:
15245 localid = !rb_enc_isupper(*m, enc);
15246 id:
15247 if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15248 return FALSE;
15249 while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15250 if (localid) {
15251 switch (*m) {
15252 case '!': case '?': case '=': ++m;
15253 }
15254 }
15255 break;
15256 }
15257 return m == e;
15258 }
15259
15260 static ID
15261 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15262 {
15263 VALUE str = rb_enc_str_new(name, len, enc);
15264 OBJ_FREEZE(str);
15265 st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15266 st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15267 return id;
15268 }
15269
15270 ID
15271 rb_intern3(const char *name, long len, rb_encoding *enc)
15272 {
15273 const char *m = name;
15274 const char *e = m + len;
15275 unsigned char c;
15276 VALUE str;
15277 ID id;
15278 long last;
15279 int mb;
15280 st_data_t data;
15281 struct RString fake_str;
15282 fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
15283 fake_str.basic.klass = rb_cString;
15284 fake_str.as.heap.len = len;
15285 fake_str.as.heap.ptr = (char *)name;
15286 fake_str.as.heap.aux.capa = len;
15287 str = (VALUE)&fake_str;
15288 rb_enc_associate(str, enc);
15289 OBJ_FREEZE(str);
15290
15291 if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15292 rb_raise(rb_eEncodingError, "invalid encoding symbol");
15293 }
15294
15295 if (st_lookup(global_symbols.sym_id, str, &data))
15296 return (ID)data;
15297
15298 if (rb_cString && !rb_enc_asciicompat(enc)) {
15299 id = ID_JUNK;
15300 goto new_id;
15301 }
15302 last = len-1;
15303 id = 0;
15304 switch (*m) {
15305 case '$':
15306 id |= ID_GLOBAL;
15307 if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15308 if (!--mb) enc = rb_ascii8bit_encoding();
15309 goto new_id;
15310 }
15311 break;
15312 case '@':
15313 if (m[1] == '@') {
15314 m++;
15315 id |= ID_CLASS;
15316 }
15317 else {
15318 id |= ID_INSTANCE;
15319 }
15320 m++;
15321 break;
15322 default:
15323 c = m[0];
15324 if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15325
15326 int i;
15327
15328 if (len == 1) {
15329 id = c;
15330 goto id_register;
15331 }
15332 for (i = 0; i < op_tbl_count; i++) {
15333 if (*op_tbl[i].name == *m &&
15334 strcmp(op_tbl[i].name, m) == 0) {
15335 id = op_tbl[i].token;
15336 goto id_register;
15337 }
15338 }
15339 }
15340
15341 if (m[last] == '=') {
15342
15343 id = rb_intern3(name, last, enc);
15344 if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15345 enc = rb_enc_get(rb_id2str(id));
15346 id = rb_id_attrset(id);
15347 goto id_register;
15348 }
15349 id = ID_ATTRSET;
15350 }
15351 else if (rb_enc_isupper(m[0], enc)) {
15352 id = ID_CONST;
15353 }
15354 else {
15355 id = ID_LOCAL;
15356 }
15357 break;
15358 }
15359 mb = 0;
15360 if (!rb_enc_isdigit(*m, enc)) {
15361 while (m <= name + last && is_identchar(m, e, enc)) {
15362 if (ISASCII(*m)) {
15363 m++;
15364 }
15365 else {
15366 mb = 1;
15367 m += rb_enc_mbclen(m, e, enc);
15368 }
15369 }
15370 }
15371 if (m - name < len) id = ID_JUNK;
15372 if (enc != rb_usascii_encoding()) {
15373
15374
15375
15376
15377 if (!mb) {
15378 for (; m <= name + len; ++m) {
15379 if (!ISASCII(*m)) goto mbstr;
15380 }
15381 enc = rb_usascii_encoding();
15382 }
15383 mbstr:;
15384 }
15385 new_id:
15386 if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15387 if (len > 20) {
15388 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15389 name);
15390 }
15391 else {
15392 rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15393 (int)len, name);
15394 }
15395 }
15396 id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15397 id_register:
15398 return register_symid(id, name, len, enc);
15399 }
15400
15401 ID
15402 rb_intern2(const char *name, long len)
15403 {
15404 return rb_intern3(name, len, rb_usascii_encoding());
15405 }
15406
15407 #undef rb_intern
15408 ID
15409 rb_intern(const char *name)
15410 {
15411 return rb_intern2(name, strlen(name));
15412 }
15413
15414 ID
15415 rb_intern_str(VALUE str)
15416 {
15417 rb_encoding *enc;
15418 ID id;
15419
15420 if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15421 enc = rb_usascii_encoding();
15422 }
15423 else {
15424 enc = rb_enc_get(str);
15425 }
15426 id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15427 RB_GC_GUARD(str);
15428 return id;
15429 }
15430
15431 VALUE
15432 rb_id2str(ID id)
15433 {
15434 st_data_t data;
15435
15436 if (id < tLAST_TOKEN) {
15437 int i = 0;
15438
15439 if (id < INT_MAX && rb_ispunct((int)id)) {
15440 VALUE str = global_symbols.op_sym[i = (int)id];
15441 if (!str) {
15442 char name[2];
15443 name[0] = (char)id;
15444 name[1] = 0;
15445 str = rb_usascii_str_new(name, 1);
15446 OBJ_FREEZE(str);
15447 global_symbols.op_sym[i] = str;
15448 }
15449 return str;
15450 }
15451 for (i = 0; i < op_tbl_count; i++) {
15452 if (op_tbl[i].token == id) {
15453 VALUE str = global_symbols.op_sym[i];
15454 if (!str) {
15455 str = rb_usascii_str_new2(op_tbl[i].name);
15456 OBJ_FREEZE(str);
15457 global_symbols.op_sym[i] = str;
15458 }
15459 return str;
15460 }
15461 }
15462 }
15463
15464 if (st_lookup(global_symbols.id_str, id, &data)) {
15465 VALUE str = (VALUE)data;
15466 if (RBASIC(str)->klass == 0)
15467 RBASIC(str)->klass = rb_cString;
15468 return str;
15469 }
15470
15471 if (is_attrset_id(id)) {
15472 ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15473 VALUE str;
15474
15475 while (!(str = rb_id2str(id2))) {
15476 if (!is_local_id(id2)) return 0;
15477 id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15478 }
15479 str = rb_str_dup(str);
15480 rb_str_cat(str, "=", 1);
15481 rb_intern_str(str);
15482 if (st_lookup(global_symbols.id_str, id, &data)) {
15483 VALUE str = (VALUE)data;
15484 if (RBASIC(str)->klass == 0)
15485 RBASIC(str)->klass = rb_cString;
15486 return str;
15487 }
15488 }
15489 return 0;
15490 }
15491
15492 const char *
15493 rb_id2name(ID id)
15494 {
15495 VALUE str = rb_id2str(id);
15496
15497 if (!str) return 0;
15498 return RSTRING_PTR(str);
15499 }
15500
15501 static int
15502 symbols_i(VALUE sym, ID value, VALUE ary)
15503 {
15504 rb_ary_push(ary, ID2SYM(value));
15505 return ST_CONTINUE;
15506 }
15507
15508
15509
15510
15511
15512
15513
15514
15515
15516
15517
15518
15519
15520
15521
15522
15523
15524 VALUE
15525 rb_sym_all_symbols(void)
15526 {
15527 VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15528
15529 st_foreach(global_symbols.sym_id, symbols_i, ary);
15530 return ary;
15531 }
15532
15533 int
15534 rb_is_const_id(ID id)
15535 {
15536 return is_const_id(id);
15537 }
15538
15539 int
15540 rb_is_class_id(ID id)
15541 {
15542 return is_class_id(id);
15543 }
15544
15545 int
15546 rb_is_instance_id(ID id)
15547 {
15548 return is_instance_id(id);
15549 }
15550
15551 int
15552 rb_is_local_id(ID id)
15553 {
15554 return is_local_id(id);
15555 }
15556
15557 int
15558 rb_is_junk_id(ID id)
15559 {
15560 return is_junk_id(id);
15561 }
15562
15563 #endif
15564
15565 static void
15566 parser_initialize(struct parser_params *parser)
15567 {
15568 parser->eofp = Qfalse;
15569
15570 parser->parser_lex_strterm = 0;
15571 parser->parser_cond_stack = 0;
15572 parser->parser_cmdarg_stack = 0;
15573 parser->parser_class_nest = 0;
15574 parser->parser_paren_nest = 0;
15575 parser->parser_lpar_beg = 0;
15576 parser->parser_in_single = 0;
15577 parser->parser_in_def = 0;
15578 parser->parser_in_defined = 0;
15579 parser->parser_compile_for_eval = 0;
15580 parser->parser_cur_mid = 0;
15581 parser->parser_tokenbuf = NULL;
15582 parser->parser_tokidx = 0;
15583 parser->parser_toksiz = 0;
15584 parser->parser_heredoc_end = 0;
15585 parser->parser_command_start = TRUE;
15586 parser->parser_deferred_nodes = 0;
15587 parser->parser_lex_pbeg = 0;
15588 parser->parser_lex_p = 0;
15589 parser->parser_lex_pend = 0;
15590 parser->parser_lvtbl = 0;
15591 parser->parser_ruby__end__seen = 0;
15592 parser->parser_ruby_sourcefile = 0;
15593 #ifndef RIPPER
15594 parser->is_ripper = 0;
15595 parser->parser_eval_tree_begin = 0;
15596 parser->parser_eval_tree = 0;
15597 #else
15598 parser->is_ripper = 1;
15599 parser->parser_ruby_sourcefile_string = Qnil;
15600 parser->delayed = Qnil;
15601
15602 parser->result = Qnil;
15603 parser->parsing_thread = Qnil;
15604 parser->toplevel_p = TRUE;
15605 #endif
15606 #ifdef YYMALLOC
15607 parser->heap = NULL;
15608 #endif
15609 parser->enc = rb_usascii_encoding();
15610 }
15611
15612 #ifdef RIPPER
15613 #define parser_mark ripper_parser_mark
15614 #define parser_free ripper_parser_free
15615 #endif
15616
15617 static void
15618 parser_mark(void *ptr)
15619 {
15620 struct parser_params *p = (struct parser_params*)ptr;
15621
15622 rb_gc_mark((VALUE)p->parser_lex_strterm);
15623 rb_gc_mark((VALUE)p->parser_deferred_nodes);
15624 rb_gc_mark(p->parser_lex_input);
15625 rb_gc_mark(p->parser_lex_lastline);
15626 rb_gc_mark(p->parser_lex_nextline);
15627 #ifndef RIPPER
15628 rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
15629 rb_gc_mark((VALUE)p->parser_eval_tree) ;
15630 rb_gc_mark(p->debug_lines);
15631 #else
15632 rb_gc_mark(p->parser_ruby_sourcefile_string);
15633 rb_gc_mark(p->delayed);
15634 rb_gc_mark(p->value);
15635 rb_gc_mark(p->result);
15636 rb_gc_mark(p->parsing_thread);
15637 #endif
15638 #ifdef YYMALLOC
15639 rb_gc_mark((VALUE)p->heap);
15640 #endif
15641 }
15642
15643 static void
15644 parser_free(void *ptr)
15645 {
15646 struct parser_params *p = (struct parser_params*)ptr;
15647 struct local_vars *local, *prev;
15648
15649 if (p->parser_tokenbuf) {
15650 xfree(p->parser_tokenbuf);
15651 }
15652 for (local = p->parser_lvtbl; local; local = prev) {
15653 if (local->vars) xfree(local->vars);
15654 prev = local->prev;
15655 xfree(local);
15656 }
15657 #ifndef RIPPER
15658 xfree(p->parser_ruby_sourcefile);
15659 #endif
15660 xfree(p);
15661 }
15662
15663 static size_t
15664 parser_memsize(const void *ptr)
15665 {
15666 struct parser_params *p = (struct parser_params*)ptr;
15667 struct local_vars *local;
15668 size_t size = sizeof(*p);
15669
15670 if (!ptr) return 0;
15671 size += p->parser_toksiz;
15672 for (local = p->parser_lvtbl; local; local = local->prev) {
15673 size += sizeof(*local);
15674 if (local->vars) size += local->vars->capa * sizeof(ID);
15675 }
15676 #ifndef RIPPER
15677 if (p->parser_ruby_sourcefile) {
15678 size += strlen(p->parser_ruby_sourcefile) + 1;
15679 }
15680 #endif
15681 return size;
15682 }
15683
15684 static
15685 #ifndef RIPPER
15686 const
15687 #endif
15688 rb_data_type_t parser_data_type = {
15689 "parser",
15690 {
15691 parser_mark,
15692 parser_free,
15693 parser_memsize,
15694 },
15695 };
15696
15697 #ifndef RIPPER
15698 #undef rb_reserved_word
15699
15700 const struct kwtable *
15701 rb_reserved_word(const char *str, unsigned int len)
15702 {
15703 return reserved_word(str, len);
15704 }
15705
15706 static struct parser_params *
15707 parser_new(void)
15708 {
15709 struct parser_params *p;
15710
15711 p = ALLOC_N(struct parser_params, 1);
15712 MEMZERO(p, struct parser_params, 1);
15713 parser_initialize(p);
15714 return p;
15715 }
15716
15717 VALUE
15718 rb_parser_new(void)
15719 {
15720 struct parser_params *p = parser_new();
15721
15722 return TypedData_Wrap_Struct(0, &parser_data_type, p);
15723 }
15724
15725
15726
15727
15728
15729
15730
15731 VALUE
15732 rb_parser_end_seen_p(VALUE vparser)
15733 {
15734 struct parser_params *parser;
15735
15736 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15737 return ruby__end__seen ? Qtrue : Qfalse;
15738 }
15739
15740
15741
15742
15743
15744
15745
15746 VALUE
15747 rb_parser_encoding(VALUE vparser)
15748 {
15749 struct parser_params *parser;
15750
15751 TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15752 return rb_enc_from_encoding(parser->enc);
15753 }
15754
15755
15756
15757
15758
15759
15760
15761 VALUE
15762 rb_parser_get_yydebug(VALUE self)
15763 {
15764 struct parser_params *parser;
15765
15766 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
15767 return yydebug ? Qtrue : Qfalse;
15768 }
15769
15770
15771
15772
15773
15774
15775
15776 VALUE
15777 rb_parser_set_yydebug(VALUE self, VALUE flag)
15778 {
15779 struct parser_params *parser;
15780
15781 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
15782 yydebug = RTEST(flag);
15783 return flag;
15784 }
15785
15786 #ifdef YYMALLOC
15787 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
15788 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
15789 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
15790 (n)->u3.cnt = (c), (p))
15791
15792 void *
15793 rb_parser_malloc(struct parser_params *parser, size_t size)
15794 {
15795 size_t cnt = HEAPCNT(1, size);
15796 NODE *n = NEWHEAP();
15797 void *ptr = xmalloc(size);
15798
15799 return ADD2HEAP(n, cnt, ptr);
15800 }
15801
15802 void *
15803 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
15804 {
15805 size_t cnt = HEAPCNT(nelem, size);
15806 NODE *n = NEWHEAP();
15807 void *ptr = xcalloc(nelem, size);
15808
15809 return ADD2HEAP(n, cnt, ptr);
15810 }
15811
15812 void *
15813 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
15814 {
15815 NODE *n;
15816 size_t cnt = HEAPCNT(1, size);
15817
15818 if (ptr && (n = parser->heap) != NULL) {
15819 do {
15820 if (n->u1.node == ptr) {
15821 n->u1.node = ptr = xrealloc(ptr, size);
15822 if (n->u3.cnt) n->u3.cnt = cnt;
15823 return ptr;
15824 }
15825 } while ((n = n->u2.node) != NULL);
15826 }
15827 n = NEWHEAP();
15828 ptr = xrealloc(ptr, size);
15829 return ADD2HEAP(n, cnt, ptr);
15830 }
15831
15832 void
15833 rb_parser_free(struct parser_params *parser, void *ptr)
15834 {
15835 NODE **prev = &parser->heap, *n;
15836
15837 while ((n = *prev) != NULL) {
15838 if (n->u1.node == ptr) {
15839 *prev = n->u2.node;
15840 rb_gc_force_recycle((VALUE)n);
15841 break;
15842 }
15843 prev = &n->u2.node;
15844 }
15845 xfree(ptr);
15846 }
15847 #endif
15848 #endif
15849
15850 #ifdef RIPPER
15851 #ifdef RIPPER_DEBUG
15852 extern int rb_is_pointer_to_heap(VALUE);
15853
15854
15855 static VALUE
15856 ripper_validate_object(VALUE self, VALUE x)
15857 {
15858 if (x == Qfalse) return x;
15859 if (x == Qtrue) return x;
15860 if (x == Qnil) return x;
15861 if (x == Qundef)
15862 rb_raise(rb_eArgError, "Qundef given");
15863 if (FIXNUM_P(x)) return x;
15864 if (SYMBOL_P(x)) return x;
15865 if (!rb_is_pointer_to_heap(x))
15866 rb_raise(rb_eArgError, "invalid pointer: %p", x);
15867 switch (TYPE(x)) {
15868 case T_STRING:
15869 case T_OBJECT:
15870 case T_ARRAY:
15871 case T_BIGNUM:
15872 case T_FLOAT:
15873 return x;
15874 case T_NODE:
15875 if (nd_type(x) != NODE_LASGN) {
15876 rb_raise(rb_eArgError, "NODE given: %p", x);
15877 }
15878 return ((NODE *)x)->nd_rval;
15879 default:
15880 rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
15881 x, rb_obj_classname(x));
15882 }
15883 return x;
15884 }
15885 #endif
15886
15887 #define validate(x) ((x) = get_value(x))
15888
15889 static VALUE
15890 ripper_dispatch0(struct parser_params *parser, ID mid)
15891 {
15892 return rb_funcall(parser->value, mid, 0);
15893 }
15894
15895 static VALUE
15896 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
15897 {
15898 validate(a);
15899 return rb_funcall(parser->value, mid, 1, a);
15900 }
15901
15902 static VALUE
15903 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
15904 {
15905 validate(a);
15906 validate(b);
15907 return rb_funcall(parser->value, mid, 2, a, b);
15908 }
15909
15910 static VALUE
15911 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
15912 {
15913 validate(a);
15914 validate(b);
15915 validate(c);
15916 return rb_funcall(parser->value, mid, 3, a, b, c);
15917 }
15918
15919 static VALUE
15920 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
15921 {
15922 validate(a);
15923 validate(b);
15924 validate(c);
15925 validate(d);
15926 return rb_funcall(parser->value, mid, 4, a, b, c, d);
15927 }
15928
15929 static VALUE
15930 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
15931 {
15932 validate(a);
15933 validate(b);
15934 validate(c);
15935 validate(d);
15936 validate(e);
15937 return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
15938 }
15939
15940 static const struct kw_assoc {
15941 ID id;
15942 const char *name;
15943 } keyword_to_name[] = {
15944 {keyword_class, "class"},
15945 {keyword_module, "module"},
15946 {keyword_def, "def"},
15947 {keyword_undef, "undef"},
15948 {keyword_begin, "begin"},
15949 {keyword_rescue, "rescue"},
15950 {keyword_ensure, "ensure"},
15951 {keyword_end, "end"},
15952 {keyword_if, "if"},
15953 {keyword_unless, "unless"},
15954 {keyword_then, "then"},
15955 {keyword_elsif, "elsif"},
15956 {keyword_else, "else"},
15957 {keyword_case, "case"},
15958 {keyword_when, "when"},
15959 {keyword_while, "while"},
15960 {keyword_until, "until"},
15961 {keyword_for, "for"},
15962 {keyword_break, "break"},
15963 {keyword_next, "next"},
15964 {keyword_redo, "redo"},
15965 {keyword_retry, "retry"},
15966 {keyword_in, "in"},
15967 {keyword_do, "do"},
15968 {keyword_do_cond, "do"},
15969 {keyword_do_block, "do"},
15970 {keyword_return, "return"},
15971 {keyword_yield, "yield"},
15972 {keyword_super, "super"},
15973 {keyword_self, "self"},
15974 {keyword_nil, "nil"},
15975 {keyword_true, "true"},
15976 {keyword_false, "false"},
15977 {keyword_and, "and"},
15978 {keyword_or, "or"},
15979 {keyword_not, "not"},
15980 {modifier_if, "if"},
15981 {modifier_unless, "unless"},
15982 {modifier_while, "while"},
15983 {modifier_until, "until"},
15984 {modifier_rescue, "rescue"},
15985 {keyword_alias, "alias"},
15986 {keyword_defined, "defined?"},
15987 {keyword_BEGIN, "BEGIN"},
15988 {keyword_END, "END"},
15989 {keyword__LINE__, "__LINE__"},
15990 {keyword__FILE__, "__FILE__"},
15991 {keyword__ENCODING__, "__ENCODING__"},
15992 {0, NULL}
15993 };
15994
15995 static const char*
15996 keyword_id_to_str(ID id)
15997 {
15998 const struct kw_assoc *a;
15999
16000 for (a = keyword_to_name; a->id; a++) {
16001 if (a->id == id)
16002 return a->name;
16003 }
16004 return NULL;
16005 }
16006
16007 #undef ripper_id2sym
16008 static VALUE
16009 ripper_id2sym(ID id)
16010 {
16011 const char *name;
16012 char buf[8];
16013
16014 if (id <= 256) {
16015 buf[0] = (char)id;
16016 buf[1] = '\0';
16017 return ID2SYM(rb_intern2(buf, 1));
16018 }
16019 if ((name = keyword_id_to_str(id))) {
16020 return ID2SYM(rb_intern(name));
16021 }
16022 switch (id) {
16023 case tOROP:
16024 name = "||";
16025 break;
16026 case tANDOP:
16027 name = "&&";
16028 break;
16029 default:
16030 name = rb_id2name(id);
16031 if (!name) {
16032 rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16033 }
16034 return ID2SYM(id);
16035 }
16036 return ID2SYM(rb_intern(name));
16037 }
16038
16039 static ID
16040 ripper_get_id(VALUE v)
16041 {
16042 NODE *nd;
16043 if (!RB_TYPE_P(v, T_NODE)) return 0;
16044 nd = (NODE *)v;
16045 if (nd_type(nd) != NODE_LASGN) return 0;
16046 return nd->nd_vid;
16047 }
16048
16049 static VALUE
16050 ripper_get_value(VALUE v)
16051 {
16052 NODE *nd;
16053 if (v == Qundef) return Qnil;
16054 if (!RB_TYPE_P(v, T_NODE)) return v;
16055 nd = (NODE *)v;
16056 if (nd_type(nd) != NODE_LASGN) return Qnil;
16057 return nd->nd_rval;
16058 }
16059
16060 static void
16061 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16062 {
16063 VALUE str;
16064 va_list args;
16065
16066 va_start(args, fmt);
16067 str = rb_vsprintf(fmt, args);
16068 va_end(args);
16069 rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16070 }
16071
16072 static void
16073 ripper_warn0(struct parser_params *parser, const char *fmt)
16074 {
16075 rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16076 }
16077
16078 static void
16079 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16080 {
16081 rb_funcall(parser->value, rb_intern("warn"), 2,
16082 STR_NEW2(fmt), INT2NUM(a));
16083 }
16084
16085 #if 0
16086 static void
16087 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16088 {
16089 rb_funcall(parser->value, rb_intern("warn"), 2,
16090 STR_NEW2(fmt), STR_NEW2(str));
16091 }
16092 #endif
16093
16094 static void
16095 ripper_warning0(struct parser_params *parser, const char *fmt)
16096 {
16097 rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16098 }
16099
16100 static void
16101 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16102 {
16103 rb_funcall(parser->value, rb_intern("warning"), 2,
16104 STR_NEW2(fmt), STR_NEW2(str));
16105 }
16106
16107 static VALUE
16108 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16109 {
16110 return rb_funcall(src, ripper_id_gets, 0);
16111 }
16112
16113 static VALUE
16114 ripper_s_allocate(VALUE klass)
16115 {
16116 struct parser_params *p;
16117 VALUE self;
16118
16119 p = ALLOC_N(struct parser_params, 1);
16120 MEMZERO(p, struct parser_params, 1);
16121 self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16122 p->value = self;
16123 return self;
16124 }
16125
16126 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16127
16128
16129
16130
16131
16132
16133
16134
16135
16136
16137
16138 static VALUE
16139 ripper_initialize(int argc, VALUE *argv, VALUE self)
16140 {
16141 struct parser_params *parser;
16142 VALUE src, fname, lineno;
16143
16144 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16145 rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16146 if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16147 parser->parser_lex_gets = ripper_lex_get_generic;
16148 }
16149 else {
16150 StringValue(src);
16151 parser->parser_lex_gets = lex_get_str;
16152 }
16153 parser->parser_lex_input = src;
16154 parser->eofp = Qfalse;
16155 if (NIL_P(fname)) {
16156 fname = STR_NEW2("(ripper)");
16157 }
16158 else {
16159 StringValue(fname);
16160 }
16161 parser_initialize(parser);
16162
16163 parser->parser_ruby_sourcefile_string = fname;
16164 parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16165 parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16166
16167 return Qnil;
16168 }
16169
16170 struct ripper_args {
16171 struct parser_params *parser;
16172 int argc;
16173 VALUE *argv;
16174 };
16175
16176 static VALUE
16177 ripper_parse0(VALUE parser_v)
16178 {
16179 struct parser_params *parser;
16180
16181 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16182 parser_prepare(parser);
16183 ripper_yyparse((void*)parser);
16184 return parser->result;
16185 }
16186
16187 static VALUE
16188 ripper_ensure(VALUE parser_v)
16189 {
16190 struct parser_params *parser;
16191
16192 TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16193 parser->parsing_thread = Qnil;
16194 return Qnil;
16195 }
16196
16197
16198
16199
16200
16201
16202
16203 static VALUE
16204 ripper_parse(VALUE self)
16205 {
16206 struct parser_params *parser;
16207
16208 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16209 if (!ripper_initialized_p(parser)) {
16210 rb_raise(rb_eArgError, "method called for uninitialized object");
16211 }
16212 if (!NIL_P(parser->parsing_thread)) {
16213 if (parser->parsing_thread == rb_thread_current())
16214 rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16215 else
16216 rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16217 }
16218 parser->parsing_thread = rb_thread_current();
16219 rb_ensure(ripper_parse0, self, ripper_ensure, self);
16220
16221 return parser->result;
16222 }
16223
16224
16225
16226
16227
16228
16229
16230
16231 static VALUE
16232 ripper_column(VALUE self)
16233 {
16234 struct parser_params *parser;
16235 long col;
16236
16237 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16238 if (!ripper_initialized_p(parser)) {
16239 rb_raise(rb_eArgError, "method called for uninitialized object");
16240 }
16241 if (NIL_P(parser->parsing_thread)) return Qnil;
16242 col = parser->tokp - parser->parser_lex_pbeg;
16243 return LONG2NUM(col);
16244 }
16245
16246
16247
16248
16249
16250
16251
16252 static VALUE
16253 ripper_filename(VALUE self)
16254 {
16255 struct parser_params *parser;
16256
16257 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16258 if (!ripper_initialized_p(parser)) {
16259 rb_raise(rb_eArgError, "method called for uninitialized object");
16260 }
16261 return parser->parser_ruby_sourcefile_string;
16262 }
16263
16264
16265
16266
16267
16268
16269
16270
16271 static VALUE
16272 ripper_lineno(VALUE self)
16273 {
16274 struct parser_params *parser;
16275
16276 TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16277 if (!ripper_initialized_p(parser)) {
16278 rb_raise(rb_eArgError, "method called for uninitialized object");
16279 }
16280 if (NIL_P(parser->parsing_thread)) return Qnil;
16281 return INT2NUM(parser->parser_ruby_sourceline);
16282 }
16283
16284 #ifdef RIPPER_DEBUG
16285
16286 static VALUE
16287 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16288 {
16289 StringValue(msg);
16290 if (obj == Qundef) {
16291 rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16292 }
16293 return Qnil;
16294 }
16295
16296
16297 static VALUE
16298 ripper_value(VALUE self, VALUE obj)
16299 {
16300 return ULONG2NUM(obj);
16301 }
16302 #endif
16303
16304
16305 void
16306 InitVM_ripper(void)
16307 {
16308 parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
16309 }
16310
16311 void
16312 Init_ripper(void)
16313 {
16314 VALUE Ripper;
16315
16316 InitVM(ripper);
16317 Ripper = rb_define_class("Ripper", rb_cObject);
16318 rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16319 rb_define_alloc_func(Ripper, ripper_s_allocate);
16320 rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16321 rb_define_method(Ripper, "parse", ripper_parse, 0);
16322 rb_define_method(Ripper, "column", ripper_column, 0);
16323 rb_define_method(Ripper, "filename", ripper_filename, 0);
16324 rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16325 rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16326 rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16327 rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16328 rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16329 #ifdef RIPPER_DEBUG
16330 rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16331 rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16332 rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16333 #endif
16334
16335 ripper_id_gets = rb_intern("gets");
16336 ripper_init_eventids1(Ripper);
16337 ripper_init_eventids2(Ripper);
16338
16339 (void)rb_intern("||");
16340 (void)rb_intern("&&");
16341
16342 # if 0
16343
16344
16345
16346
16347
16348
16349
16350 rb_define_global_const("SCRIPT_LINES__", Qnil);
16351 #endif
16352
16353 }
16354 #endif
16355
16356