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