Ruby  1.9.3p448(2013-06-27revision41675)
parse.c
Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.3.  */
00002 
00003 /* Skeleton implementation for Bison's Yacc-like parsers in C
00004 
00005    Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006
00006    Free Software Foundation, Inc.
00007 
00008    This program is free software; you can redistribute it and/or modify
00009    it under the terms of the GNU General Public License as published by
00010    the Free Software Foundation; either version 2, or (at your option)
00011    any later version.
00012 
00013    This program is distributed in the hope that it will be useful,
00014    but WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016    GNU General Public License for more details.
00017 
00018    You should have received a copy of the GNU General Public License
00019    along with this program; if not, write to the Free Software
00020    Foundation, Inc., 51 Franklin Street, Fifth Floor,
00021    Boston, MA 02110-1301, USA.  */
00022 
00023 /* As a special exception, you may create a larger work that contains
00024    part or all of the Bison parser skeleton and distribute that work
00025    under terms of your choice, so long as that work isn't itself a
00026    parser generator using the skeleton or a modified version thereof
00027    as a parser skeleton.  Alternatively, if you modify or redistribute
00028    the parser skeleton itself, you may (at your option) remove this
00029    special exception, which will cause the skeleton and the resulting
00030    Bison output files to be licensed under the GNU General Public
00031    License without this special exception.
00032 
00033    This special exception was added by the Free Software Foundation in
00034    version 2.2 of Bison.  */
00035 
00036 /* C LALR(1) parser skeleton written by Richard Stallman, by
00037    simplifying the original so-called "semantic" parser.  */
00038 
00039 /* All symbols defined below should begin with yy or YY, to avoid
00040    infringing on user name space.  This should be done even for local
00041    variables, as they might otherwise be expanded by user macros.
00042    There are some unavoidable exceptions within include files to
00043    define necessary library symbols; they are noted "INFRINGES ON
00044    USER NAME SPACE" below.  */
00045 
00046 /* Identify Bison output.  */
00047 #define YYBISON 1
00048 
00049 /* Bison version.  */
00050 #define YYBISON_VERSION "2.3"
00051 
00052 /* Skeleton name.  */
00053 #define YYSKELETON_NAME "yacc.c"
00054 
00055 /* Pure parsers.  */
00056 #define YYPURE 1
00057 
00058 /* Using locations.  */
00059 #define YYLSP_NEEDED 0
00060 
00061 
00062 
00063 /* Tokens.  */
00064 #ifndef YYTOKENTYPE
00065 # define YYTOKENTYPE
00066    /* Put the tokens into the symbol table, so that GDB and other debuggers
00067       know about them.  */
00068    enum yytokentype {
00069      keyword_class = 258,
00070      keyword_module = 259,
00071      keyword_def = 260,
00072      keyword_undef = 261,
00073      keyword_begin = 262,
00074      keyword_rescue = 263,
00075      keyword_ensure = 264,
00076      keyword_end = 265,
00077      keyword_if = 266,
00078      keyword_unless = 267,
00079      keyword_then = 268,
00080      keyword_elsif = 269,
00081      keyword_else = 270,
00082      keyword_case = 271,
00083      keyword_when = 272,
00084      keyword_while = 273,
00085      keyword_until = 274,
00086      keyword_for = 275,
00087      keyword_break = 276,
00088      keyword_next = 277,
00089      keyword_redo = 278,
00090      keyword_retry = 279,
00091      keyword_in = 280,
00092      keyword_do = 281,
00093      keyword_do_cond = 282,
00094      keyword_do_block = 283,
00095      keyword_do_LAMBDA = 284,
00096      keyword_return = 285,
00097      keyword_yield = 286,
00098      keyword_super = 287,
00099      keyword_self = 288,
00100      keyword_nil = 289,
00101      keyword_true = 290,
00102      keyword_false = 291,
00103      keyword_and = 292,
00104      keyword_or = 293,
00105      keyword_not = 294,
00106      modifier_if = 295,
00107      modifier_unless = 296,
00108      modifier_while = 297,
00109      modifier_until = 298,
00110      modifier_rescue = 299,
00111      keyword_alias = 300,
00112      keyword_defined = 301,
00113      keyword_BEGIN = 302,
00114      keyword_END = 303,
00115      keyword__LINE__ = 304,
00116      keyword__FILE__ = 305,
00117      keyword__ENCODING__ = 306,
00118      tIDENTIFIER = 307,
00119      tFID = 308,
00120      tGVAR = 309,
00121      tIVAR = 310,
00122      tCONSTANT = 311,
00123      tCVAR = 312,
00124      tLABEL = 313,
00125      tINTEGER = 314,
00126      tFLOAT = 315,
00127      tSTRING_CONTENT = 316,
00128      tCHAR = 317,
00129      tNTH_REF = 318,
00130      tBACK_REF = 319,
00131      tREGEXP_END = 320,
00132      tUPLUS = 321,
00133      tUMINUS = 322,
00134      tPOW = 323,
00135      tCMP = 324,
00136      tEQ = 325,
00137      tEQQ = 326,
00138      tNEQ = 327,
00139      tGEQ = 328,
00140      tLEQ = 329,
00141      tANDOP = 330,
00142      tOROP = 331,
00143      tMATCH = 332,
00144      tNMATCH = 333,
00145      tDOT2 = 334,
00146      tDOT3 = 335,
00147      tAREF = 336,
00148      tASET = 337,
00149      tLSHFT = 338,
00150      tRSHFT = 339,
00151      tCOLON2 = 340,
00152      tCOLON3 = 341,
00153      tOP_ASGN = 342,
00154      tASSOC = 343,
00155      tLPAREN = 344,
00156      tLPAREN_ARG = 345,
00157      tRPAREN = 346,
00158      tLBRACK = 347,
00159      tLBRACE = 348,
00160      tLBRACE_ARG = 349,
00161      tSTAR = 350,
00162      tAMPER = 351,
00163      tLAMBDA = 352,
00164      tSYMBEG = 353,
00165      tSTRING_BEG = 354,
00166      tXSTRING_BEG = 355,
00167      tREGEXP_BEG = 356,
00168      tWORDS_BEG = 357,
00169      tQWORDS_BEG = 358,
00170      tSTRING_DBEG = 359,
00171      tSTRING_DVAR = 360,
00172      tSTRING_END = 361,
00173      tLAMBEG = 362,
00174      tLOWEST = 363,
00175      tUMINUS_NUM = 364,
00176      idNULL = 365,
00177      idRespond_to = 366,
00178      idIFUNC = 367,
00179      idCFUNC = 368,
00180      id_core_set_method_alias = 369,
00181      id_core_set_variable_alias = 370,
00182      id_core_undef_method = 371,
00183      id_core_define_method = 372,
00184      id_core_define_singleton_method = 373,
00185      id_core_set_postexe = 374,
00186      tLAST_TOKEN = 375
00187    };
00188 #endif
00189 /* Tokens.  */
00190 #define keyword_class 258
00191 #define keyword_module 259
00192 #define keyword_def 260
00193 #define keyword_undef 261
00194 #define keyword_begin 262
00195 #define keyword_rescue 263
00196 #define keyword_ensure 264
00197 #define keyword_end 265
00198 #define keyword_if 266
00199 #define keyword_unless 267
00200 #define keyword_then 268
00201 #define keyword_elsif 269
00202 #define keyword_else 270
00203 #define keyword_case 271
00204 #define keyword_when 272
00205 #define keyword_while 273
00206 #define keyword_until 274
00207 #define keyword_for 275
00208 #define keyword_break 276
00209 #define keyword_next 277
00210 #define keyword_redo 278
00211 #define keyword_retry 279
00212 #define keyword_in 280
00213 #define keyword_do 281
00214 #define keyword_do_cond 282
00215 #define keyword_do_block 283
00216 #define keyword_do_LAMBDA 284
00217 #define keyword_return 285
00218 #define keyword_yield 286
00219 #define keyword_super 287
00220 #define keyword_self 288
00221 #define keyword_nil 289
00222 #define keyword_true 290
00223 #define keyword_false 291
00224 #define keyword_and 292
00225 #define keyword_or 293
00226 #define keyword_not 294
00227 #define modifier_if 295
00228 #define modifier_unless 296
00229 #define modifier_while 297
00230 #define modifier_until 298
00231 #define modifier_rescue 299
00232 #define keyword_alias 300
00233 #define keyword_defined 301
00234 #define keyword_BEGIN 302
00235 #define keyword_END 303
00236 #define keyword__LINE__ 304
00237 #define keyword__FILE__ 305
00238 #define keyword__ENCODING__ 306
00239 #define tIDENTIFIER 307
00240 #define tFID 308
00241 #define tGVAR 309
00242 #define tIVAR 310
00243 #define tCONSTANT 311
00244 #define tCVAR 312
00245 #define tLABEL 313
00246 #define tINTEGER 314
00247 #define tFLOAT 315
00248 #define tSTRING_CONTENT 316
00249 #define tCHAR 317
00250 #define tNTH_REF 318
00251 #define tBACK_REF 319
00252 #define tREGEXP_END 320
00253 #define tUPLUS 321
00254 #define tUMINUS 322
00255 #define tPOW 323
00256 #define tCMP 324
00257 #define tEQ 325
00258 #define tEQQ 326
00259 #define tNEQ 327
00260 #define tGEQ 328
00261 #define tLEQ 329
00262 #define tANDOP 330
00263 #define tOROP 331
00264 #define tMATCH 332
00265 #define tNMATCH 333
00266 #define tDOT2 334
00267 #define tDOT3 335
00268 #define tAREF 336
00269 #define tASET 337
00270 #define tLSHFT 338
00271 #define tRSHFT 339
00272 #define tCOLON2 340
00273 #define tCOLON3 341
00274 #define tOP_ASGN 342
00275 #define tASSOC 343
00276 #define tLPAREN 344
00277 #define tLPAREN_ARG 345
00278 #define tRPAREN 346
00279 #define tLBRACK 347
00280 #define tLBRACE 348
00281 #define tLBRACE_ARG 349
00282 #define tSTAR 350
00283 #define tAMPER 351
00284 #define tLAMBDA 352
00285 #define tSYMBEG 353
00286 #define tSTRING_BEG 354
00287 #define tXSTRING_BEG 355
00288 #define tREGEXP_BEG 356
00289 #define tWORDS_BEG 357
00290 #define tQWORDS_BEG 358
00291 #define tSTRING_DBEG 359
00292 #define tSTRING_DVAR 360
00293 #define tSTRING_END 361
00294 #define tLAMBEG 362
00295 #define tLOWEST 363
00296 #define tUMINUS_NUM 364
00297 #define idNULL 365
00298 #define idRespond_to 366
00299 #define idIFUNC 367
00300 #define idCFUNC 368
00301 #define id_core_set_method_alias 369
00302 #define id_core_set_variable_alias 370
00303 #define id_core_undef_method 371
00304 #define id_core_define_method 372
00305 #define id_core_define_singleton_method 373
00306 #define id_core_set_postexe 374
00307 #define tLAST_TOKEN 375
00308 
00309 
00310 
00311 
00312 /* Copy the first part of user declarations.  */
00313 #line 12 "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,                   /* ignore newline, +/- is a sign. */
00365     EXPR_END,                   /* newline significant, +/- is an operator. */
00366     EXPR_ENDARG,                /* ditto, and unbound braces. */
00367     EXPR_ENDFN,                 /* ditto, and unbound braces. */
00368     EXPR_ARG,                   /* newline significant, +/- is an operator. */
00369     EXPR_CMDARG,                /* newline significant, +/- is an operator. */
00370     EXPR_MID,                   /* newline significant, +/- is an operator. */
00371     EXPR_FNAME,                 /* ignore newline, no reserved words. */
00372     EXPR_DOT,                   /* right after `.' or `::', no reserved words. */
00373     EXPR_CLASS,                 /* immediate after `class', no here document. */
00374     EXPR_VALUE,                 /* alike EXPR_BEG but label is disallowed. */
00375     EXPR_MAX_STATE
00376 };
00377 
00378 typedef VALUE stack_type;
00379 
00380 # define BITSTACK_PUSH(stack, n)        ((stack) = ((stack)<<1)|((n)&1))
00381 # define BITSTACK_POP(stack)    ((stack) = (stack) >> 1)
00382 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
00383 # define BITSTACK_SET_P(stack)  ((stack)&1)
00384 
00385 #define COND_PUSH(n)    BITSTACK_PUSH(cond_stack, (n))
00386 #define COND_POP()      BITSTACK_POP(cond_stack)
00387 #define COND_LEXPOP()   BITSTACK_LEXPOP(cond_stack)
00388 #define COND_P()        BITSTACK_SET_P(cond_stack)
00389 
00390 #define CMDARG_PUSH(n)  BITSTACK_PUSH(cmdarg_stack, (n))
00391 #define CMDARG_POP()    BITSTACK_POP(cmdarg_stack)
00392 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00393 #define CMDARG_P()      BITSTACK_SET_P(cmdarg_stack)
00394 
00395 struct vtable {
00396     ID *tbl;
00397     int pos;
00398     int capa;
00399     struct vtable *prev;
00400 };
00401 
00402 struct local_vars {
00403     struct vtable *args;
00404     struct vtable *vars;
00405     struct vtable *used;
00406     struct local_vars *prev;
00407 };
00408 
00409 #define DVARS_INHERIT ((void*)1)
00410 #define DVARS_TOPSCOPE NULL
00411 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00412 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00413 
00414 static int
00415 vtable_size(const struct vtable *tbl)
00416 {
00417     if (POINTER_P(tbl)) {
00418         return tbl->pos;
00419     }
00420     else {
00421         return 0;
00422     }
00423 }
00424 
00425 #define VTBL_DEBUG 0
00426 
00427 static struct vtable *
00428 vtable_alloc(struct vtable *prev)
00429 {
00430     struct vtable *tbl = ALLOC(struct vtable);
00431     tbl->pos = 0;
00432     tbl->capa = 8;
00433     tbl->tbl = ALLOC_N(ID, tbl->capa);
00434     tbl->prev = prev;
00435     if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00436     return tbl;
00437 }
00438 
00439 static void
00440 vtable_free(struct vtable *tbl)
00441 {
00442     if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00443     if (POINTER_P(tbl)) {
00444         if (tbl->tbl) {
00445             xfree(tbl->tbl);
00446         }
00447         xfree(tbl);
00448     }
00449 }
00450 
00451 static void
00452 vtable_add(struct vtable *tbl, ID id)
00453 {
00454     if (!POINTER_P(tbl)) {
00455         rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00456     }
00457     if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00458 
00459     if (tbl->pos == tbl->capa) {
00460         tbl->capa = tbl->capa * 2;
00461         REALLOC_N(tbl->tbl, ID, tbl->capa);
00462     }
00463     tbl->tbl[tbl->pos++] = id;
00464 }
00465 
00466 static int
00467 vtable_included(const struct vtable * tbl, ID id)
00468 {
00469     int i;
00470 
00471     if (POINTER_P(tbl)) {
00472         for (i = 0; i < tbl->pos; i++) {
00473             if (tbl->tbl[i] == id) {
00474                 return i+1;
00475             }
00476         }
00477     }
00478     return 0;
00479 }
00480 
00481 
00482 #ifndef RIPPER
00483 typedef struct token_info {
00484     const char *token;
00485     int linenum;
00486     int column;
00487     int nonspc;
00488     struct token_info *next;
00489 } token_info;
00490 #endif
00491 
00492 /*
00493     Structure of Lexer Buffer:
00494 
00495  lex_pbeg      tokp         lex_p        lex_pend
00496     |           |              |            |
00497     |-----------+--------------+------------|
00498                 |<------------>|
00499                      token
00500 */
00501 struct parser_params {
00502     int is_ripper;
00503     NODE *heap;
00504 
00505     YYSTYPE *parser_yylval;
00506     VALUE eofp;
00507 
00508     NODE *parser_lex_strterm;
00509     enum lex_state_e parser_lex_state;
00510     stack_type parser_cond_stack;
00511     stack_type parser_cmdarg_stack;
00512     int parser_class_nest;
00513     int parser_paren_nest;
00514     int parser_lpar_beg;
00515     int parser_in_single;
00516     int parser_in_def;
00517     int parser_compile_for_eval;
00518     VALUE parser_cur_mid;
00519     int parser_in_defined;
00520     char *parser_tokenbuf;
00521     int parser_tokidx;
00522     int parser_toksiz;
00523     VALUE parser_lex_input;
00524     VALUE parser_lex_lastline;
00525     VALUE parser_lex_nextline;
00526     const char *parser_lex_pbeg;
00527     const char *parser_lex_p;
00528     const char *parser_lex_pend;
00529     int parser_heredoc_end;
00530     int parser_command_start;
00531     NODE *parser_deferred_nodes;
00532     long parser_lex_gets_ptr;
00533     VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00534     struct local_vars *parser_lvtbl;
00535     int parser_ruby__end__seen;
00536     int line_count;
00537     int has_shebang;
00538     char *parser_ruby_sourcefile; /* current source file */
00539     int parser_ruby_sourceline; /* current line no. */
00540     rb_encoding *enc;
00541     rb_encoding *utf8;
00542 
00543     int parser_yydebug;
00544 
00545 #ifndef RIPPER
00546     /* Ruby core only */
00547     NODE *parser_eval_tree_begin;
00548     NODE *parser_eval_tree;
00549     VALUE debug_lines;
00550     VALUE coverage;
00551     int nerr;
00552 
00553     int parser_token_info_enabled;
00554     token_info *parser_token_info;
00555 #else
00556     /* Ripper only */
00557     VALUE parser_ruby_sourcefile_string;
00558     const char *tokp;
00559     VALUE delayed;
00560     int delayed_line;
00561     int delayed_col;
00562 
00563     VALUE value;
00564     VALUE result;
00565     VALUE parsing_thread;
00566     int toplevel_p;
00567 #endif
00568 };
00569 
00570 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00571                     (parser->utf8 = rb_utf8_encoding()))
00572 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00573 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00574 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00575 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00576 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00577 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00578 
00579 static int parser_yyerror(struct parser_params*, const char*);
00580 #define yyerror(msg) parser_yyerror(parser, (msg))
00581 
00582 #define YYLEX_PARAM parser
00583 
00584 #define lex_strterm             (parser->parser_lex_strterm)
00585 #define lex_state               (parser->parser_lex_state)
00586 #define cond_stack              (parser->parser_cond_stack)
00587 #define cmdarg_stack            (parser->parser_cmdarg_stack)
00588 #define class_nest              (parser->parser_class_nest)
00589 #define paren_nest              (parser->parser_paren_nest)
00590 #define lpar_beg                (parser->parser_lpar_beg)
00591 #define in_single               (parser->parser_in_single)
00592 #define in_def                  (parser->parser_in_def)
00593 #define compile_for_eval        (parser->parser_compile_for_eval)
00594 #define cur_mid                 (parser->parser_cur_mid)
00595 #define in_defined              (parser->parser_in_defined)
00596 #define tokenbuf                (parser->parser_tokenbuf)
00597 #define tokidx                  (parser->parser_tokidx)
00598 #define toksiz                  (parser->parser_toksiz)
00599 #define lex_input               (parser->parser_lex_input)
00600 #define lex_lastline            (parser->parser_lex_lastline)
00601 #define lex_nextline            (parser->parser_lex_nextline)
00602 #define lex_pbeg                (parser->parser_lex_pbeg)
00603 #define lex_p                   (parser->parser_lex_p)
00604 #define lex_pend                (parser->parser_lex_pend)
00605 #define heredoc_end             (parser->parser_heredoc_end)
00606 #define command_start           (parser->parser_command_start)
00607 #define deferred_nodes          (parser->parser_deferred_nodes)
00608 #define lex_gets_ptr            (parser->parser_lex_gets_ptr)
00609 #define lex_gets                (parser->parser_lex_gets)
00610 #define lvtbl                   (parser->parser_lvtbl)
00611 #define ruby__end__seen         (parser->parser_ruby__end__seen)
00612 #define ruby_sourceline         (parser->parser_ruby_sourceline)
00613 #define ruby_sourcefile         (parser->parser_ruby_sourcefile)
00614 #define current_enc             (parser->enc)
00615 #define yydebug                 (parser->parser_yydebug)
00616 #ifdef RIPPER
00617 #else
00618 #define ruby_eval_tree          (parser->parser_eval_tree)
00619 #define ruby_eval_tree_begin    (parser->parser_eval_tree_begin)
00620 #define ruby_debug_lines        (parser->debug_lines)
00621 #define ruby_coverage           (parser->coverage)
00622 #endif
00623 
00624 static int yylex(void*, void*);
00625 
00626 #ifndef RIPPER
00627 #define yyparse ruby_yyparse
00628 
00629 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00630 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
00631 
00632 static NODE *cond_gen(struct parser_params*,NODE*);
00633 #define cond(node) cond_gen(parser, (node))
00634 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00635 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
00636 
00637 static NODE *newline_node(NODE*);
00638 static void fixpos(NODE*,NODE*);
00639 
00640 static int value_expr_gen(struct parser_params*,NODE*);
00641 static void void_expr_gen(struct parser_params*,NODE*);
00642 static NODE *remove_begin(NODE*);
00643 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00644 #define void_expr0(node) void_expr_gen(parser, (node))
00645 #define void_expr(node) void_expr0((node) = remove_begin(node))
00646 static void void_stmts_gen(struct parser_params*,NODE*);
00647 #define void_stmts(node) void_stmts_gen(parser, (node))
00648 static void reduce_nodes_gen(struct parser_params*,NODE**);
00649 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
00650 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00651 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
00652 
00653 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00654 #define block_append(h,t) block_append_gen(parser,(h),(t))
00655 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00656 #define list_append(l,i) list_append_gen(parser,(l),(i))
00657 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00658 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
00659 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00660 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
00661 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00662 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
00663 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00664 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
00665 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00666 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00667 #define new_evstr(n) new_evstr_gen(parser,(n))
00668 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00669 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
00670 static NODE *splat_array(NODE*);
00671 
00672 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00673 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
00674 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00675 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
00676 
00677 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00678 #define new_args(f,o,r,p,b) new_args_gen(parser, (f),(o),(r),(p),(b))
00679 
00680 static NODE *negate_lit(NODE*);
00681 static NODE *ret_args_gen(struct parser_params*,NODE*);
00682 #define ret_args(node) ret_args_gen(parser, (node))
00683 static NODE *arg_blk_pass(NODE*,NODE*);
00684 static NODE *new_yield_gen(struct parser_params*,NODE*);
00685 #define new_yield(node) new_yield_gen(parser, (node))
00686 
00687 static NODE *gettable_gen(struct parser_params*,ID);
00688 #define gettable(id) gettable_gen(parser,(id))
00689 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00690 #define assignable(id,node) assignable_gen(parser, (id), (node))
00691 
00692 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00693 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
00694 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00695 #define attrset(node,id) attrset_gen(parser, (node), (id))
00696 
00697 static void rb_backref_error_gen(struct parser_params*,NODE*);
00698 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
00699 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00700 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
00701 
00702 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00703 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
00704 
00705 static ID  *local_tbl_gen(struct parser_params*);
00706 #define local_tbl() local_tbl_gen(parser)
00707 
00708 static void fixup_nodes(NODE **);
00709 
00710 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00711 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
00712 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00713 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
00714 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00715 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
00716 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00717 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
00718 
00719 #define get_id(id) (id)
00720 #define get_value(val) (val)
00721 #else
00722 #define remove_begin(node) (node)
00723 #define rb_dvar_defined(id) 0
00724 #define rb_local_defined(id) 0
00725 static ID ripper_get_id(VALUE);
00726 #define get_id(id) ripper_get_id(id)
00727 static VALUE ripper_get_value(VALUE);
00728 #define get_value(val) ripper_get_value(val)
00729 static VALUE assignable_gen(struct parser_params*,VALUE);
00730 #define assignable(lhs,node) assignable_gen(parser, (lhs))
00731 static int id_is_var_gen(struct parser_params *parser, ID id);
00732 #define id_is_var(id) id_is_var_gen(parser, (id))
00733 #endif /* !RIPPER */
00734 
00735 static ID formal_argument_gen(struct parser_params*, ID);
00736 #define formal_argument(id) formal_argument_gen(parser, (id))
00737 static ID shadowing_lvar_gen(struct parser_params*,ID);
00738 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
00739 static void new_bv_gen(struct parser_params*,ID);
00740 #define new_bv(id) new_bv_gen(parser, (id))
00741 
00742 static void local_push_gen(struct parser_params*,int);
00743 #define local_push(top) local_push_gen(parser,(top))
00744 static void local_pop_gen(struct parser_params*);
00745 #define local_pop() local_pop_gen(parser)
00746 static int local_var_gen(struct parser_params*, ID);
00747 #define local_var(id) local_var_gen(parser, (id));
00748 static int arg_var_gen(struct parser_params*, ID);
00749 #define arg_var(id) arg_var_gen(parser, (id))
00750 static int  local_id_gen(struct parser_params*, ID);
00751 #define local_id(id) local_id_gen(parser, (id))
00752 static ID   internal_id_gen(struct parser_params*);
00753 #define internal_id() internal_id_gen(parser)
00754 
00755 static const struct vtable *dyna_push_gen(struct parser_params *);
00756 #define dyna_push() dyna_push_gen(parser)
00757 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00758 #define dyna_pop(node) dyna_pop_gen(parser, (node))
00759 static int dyna_in_block_gen(struct parser_params*);
00760 #define dyna_in_block() dyna_in_block_gen(parser)
00761 #define dyna_var(id) local_var(id)
00762 static int dvar_defined_gen(struct parser_params*,ID,int);
00763 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
00764 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
00765 static int dvar_curr_gen(struct parser_params*,ID);
00766 #define dvar_curr(id) dvar_curr_gen(parser, (id))
00767 
00768 static int lvar_defined_gen(struct parser_params*, ID);
00769 #define lvar_defined(id) lvar_defined_gen(parser, (id))
00770 
00771 #define RE_OPTION_ONCE (1<<16)
00772 #define RE_OPTION_ENCODING_SHIFT 8
00773 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00774 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00775 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00776 #define RE_OPTION_MASK  0xff
00777 #define RE_OPTION_ARG_ENCODING_NONE 32
00778 
00779 #define NODE_STRTERM NODE_ZARRAY        /* nothing to gc */
00780 #define NODE_HEREDOC NODE_ARRAY         /* 1, 3 to gc */
00781 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00782 #define nd_func u1.id
00783 #if SIZEOF_SHORT == 2
00784 #define nd_term(node) ((signed short)(node)->u2.id)
00785 #else
00786 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00787 #endif
00788 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00789 #define nd_nest u3.cnt
00790 
00791 /****** Ripper *******/
00792 
00793 #ifdef RIPPER
00794 #define RIPPER_VERSION "0.1.0"
00795 
00796 #include "eventids1.c"
00797 #include "eventids2.c"
00798 static ID ripper_id_gets;
00799 
00800 static VALUE ripper_dispatch0(struct parser_params*,ID);
00801 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00802 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00803 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00804 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00805 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00806 
00807 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00808 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
00809 #define dispatch2(n,a,b)        ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
00810 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
00811 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
00812 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
00813 
00814 #define yyparse ripper_yyparse
00815 
00816 #define ripper_intern(s) ID2SYM(rb_intern(s))
00817 static VALUE ripper_id2sym(ID);
00818 #ifdef __GNUC__
00819 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00820                            ID2SYM(id) : ripper_id2sym(id))
00821 #endif
00822 
00823 #define arg_new() dispatch0(args_new)
00824 #define arg_add(l,a) dispatch2(args_add, (l), (a))
00825 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
00826 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
00827 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
00828 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
00829 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
00830 
00831 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
00832 #define mrhs_new() dispatch0(mrhs_new)
00833 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
00834 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
00835 
00836 #define mlhs_new() dispatch0(mlhs_new)
00837 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
00838 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
00839 
00840 #define params_new(pars, opts, rest, pars2, blk) \
00841         dispatch5(params, (pars), (opts), (rest), (pars2), (blk))
00842 
00843 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
00844 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
00845 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
00846 
00847 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
00848 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
00849 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
00850 
00851 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00852 
00853 #define FIXME 0
00854 
00855 #endif /* RIPPER */
00856 
00857 #ifndef RIPPER
00858 # define ifndef_ripper(x) (x)
00859 #else
00860 # define ifndef_ripper(x)
00861 #endif
00862 
00863 #ifndef RIPPER
00864 # define rb_warn0(fmt)    rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
00865 # define rb_warnI(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00866 # define rb_warnS(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00867 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
00868 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00869 #else
00870 # define rb_warn0(fmt)    ripper_warn0(parser, (fmt))
00871 # define rb_warnI(fmt,a)  ripper_warnI(parser, (fmt), (a))
00872 # define rb_warnS(fmt,a)  ripper_warnS(parser, (fmt), (a))
00873 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
00874 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
00875 static void ripper_warn0(struct parser_params*, const char*);
00876 static void ripper_warnI(struct parser_params*, const char*, int);
00877 #if 0
00878 static void ripper_warnS(struct parser_params*, const char*, const char*);
00879 #endif
00880 static void ripper_warning0(struct parser_params*, const char*);
00881 static void ripper_warningS(struct parser_params*, const char*, const char*);
00882 #endif
00883 
00884 #ifdef RIPPER
00885 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00886 # define rb_compile_error ripper_compile_error
00887 # define compile_error ripper_compile_error
00888 # define PARSER_ARG parser,
00889 #else
00890 # define rb_compile_error rb_compile_error_with_enc
00891 # define compile_error parser->nerr++,rb_compile_error_with_enc
00892 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
00893 #endif
00894 
00895 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
00896    for instance).  This is too low for Ruby to parse some files, such as
00897    date/format.rb, therefore bump the value up to at least Bison's default. */
00898 #ifdef OLD_YACC
00899 #ifndef YYMAXDEPTH
00900 #define YYMAXDEPTH 10000
00901 #endif
00902 #endif
00903 
00904 #ifndef RIPPER
00905 static void token_info_push(struct parser_params*, const char *token);
00906 static void token_info_pop(struct parser_params*, const char *token);
00907 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
00908 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
00909 #else
00910 #define token_info_push(token) /* nothing */
00911 #define token_info_pop(token) /* nothing */
00912 #endif
00913 
00914 
00915 /* Enabling traces.  */
00916 #ifndef YYDEBUG
00917 # define YYDEBUG 0
00918 #endif
00919 
00920 /* Enabling verbose error messages.  */
00921 #ifdef YYERROR_VERBOSE
00922 # undef YYERROR_VERBOSE
00923 # define YYERROR_VERBOSE 1
00924 #else
00925 # define YYERROR_VERBOSE 0
00926 #endif
00927 
00928 /* Enabling the token table.  */
00929 #ifndef YYTOKEN_TABLE
00930 # define YYTOKEN_TABLE 0
00931 #endif
00932 
00933 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00934 typedef union YYSTYPE
00935 #line 616 "parse.y"
00936 {
00937     VALUE val;
00938     NODE *node;
00939     ID id;
00940     int num;
00941     const struct vtable *vars;
00942 }
00943 /* Line 187 of yacc.c.  */
00944 #line 945 "parse.c"
00945         YYSTYPE;
00946 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00947 # define YYSTYPE_IS_DECLARED 1
00948 # define YYSTYPE_IS_TRIVIAL 1
00949 #endif
00950 
00951 
00952 
00953 /* Copy the second part of user declarations.  */
00954 
00955 
00956 /* Line 216 of yacc.c.  */
00957 #line 958 "parse.c"
00958 
00959 #ifdef short
00960 # undef short
00961 #endif
00962 
00963 #ifdef YYTYPE_UINT8
00964 typedef YYTYPE_UINT8 yytype_uint8;
00965 #else
00966 typedef unsigned char yytype_uint8;
00967 #endif
00968 
00969 #ifdef YYTYPE_INT8
00970 typedef YYTYPE_INT8 yytype_int8;
00971 #elif (defined __STDC__ || defined __C99__FUNC__ \
00972      || defined __cplusplus || defined _MSC_VER)
00973 typedef signed char yytype_int8;
00974 #else
00975 typedef short int yytype_int8;
00976 #endif
00977 
00978 #ifdef YYTYPE_UINT16
00979 typedef YYTYPE_UINT16 yytype_uint16;
00980 #else
00981 typedef unsigned short int yytype_uint16;
00982 #endif
00983 
00984 #ifdef YYTYPE_INT16
00985 typedef YYTYPE_INT16 yytype_int16;
00986 #else
00987 typedef short int yytype_int16;
00988 #endif
00989 
00990 #ifndef YYSIZE_T
00991 # ifdef __SIZE_TYPE__
00992 #  define YYSIZE_T __SIZE_TYPE__
00993 # elif defined size_t
00994 #  define YYSIZE_T size_t
00995 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00996      || defined __cplusplus || defined _MSC_VER)
00997 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00998 #  define YYSIZE_T size_t
00999 # else
01000 #  define YYSIZE_T unsigned int
01001 # endif
01002 #endif
01003 
01004 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
01005 
01006 #ifndef YY_
01007 # if YYENABLE_NLS
01008 #  if ENABLE_NLS
01009 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
01010 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
01011 #  endif
01012 # endif
01013 # ifndef YY_
01014 #  define YY_(msgid) msgid
01015 # endif
01016 #endif
01017 
01018 /* Suppress unused-variable warnings by "using" E.  */
01019 #if ! defined lint || defined __GNUC__
01020 # define YYUSE(e) ((void) (e))
01021 #else
01022 # define YYUSE(e) /* empty */
01023 #endif
01024 
01025 /* Identity function, used to suppress warnings about constant conditions.  */
01026 #ifndef lint
01027 # define YYID(n) (n)
01028 #else
01029 #if (defined __STDC__ || defined __C99__FUNC__ \
01030      || defined __cplusplus || defined _MSC_VER)
01031 static int
01032 YYID (int i)
01033 #else
01034 static int
01035 YYID (i)
01036     int i;
01037 #endif
01038 {
01039   return i;
01040 }
01041 #endif
01042 
01043 #if ! defined yyoverflow || YYERROR_VERBOSE
01044 
01045 /* The parser invokes alloca or malloc; define the necessary symbols.  */
01046 
01047 # ifdef YYSTACK_USE_ALLOCA
01048 #  if YYSTACK_USE_ALLOCA
01049 #   ifdef __GNUC__
01050 #    define YYSTACK_ALLOC __builtin_alloca
01051 #   elif defined __BUILTIN_VA_ARG_INCR
01052 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
01053 #   elif defined _AIX
01054 #    define YYSTACK_ALLOC __alloca
01055 #   elif defined _MSC_VER
01056 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
01057 #    define alloca _alloca
01058 #   else
01059 #    define YYSTACK_ALLOC alloca
01060 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01061      || defined __cplusplus || defined _MSC_VER)
01062 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
01063 #     ifndef _STDLIB_H
01064 #      define _STDLIB_H 1
01065 #     endif
01066 #    endif
01067 #   endif
01068 #  endif
01069 # endif
01070 
01071 # ifdef YYSTACK_ALLOC
01072    /* Pacify GCC's `empty if-body' warning.  */
01073 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
01074 #  ifndef YYSTACK_ALLOC_MAXIMUM
01075     /* The OS might guarantee only one guard page at the bottom of the stack,
01076        and a page size can be as small as 4096 bytes.  So we cannot safely
01077        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
01078        to allow for a few compiler-allocated temporary stack slots.  */
01079 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
01080 #  endif
01081 # else
01082 #  define YYSTACK_ALLOC YYMALLOC
01083 #  define YYSTACK_FREE YYFREE
01084 #  ifndef YYSTACK_ALLOC_MAXIMUM
01085 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
01086 #  endif
01087 #  if (defined __cplusplus && ! defined _STDLIB_H \
01088        && ! ((defined YYMALLOC || defined malloc) \
01089              && (defined YYFREE || defined free)))
01090 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
01091 #   ifndef _STDLIB_H
01092 #    define _STDLIB_H 1
01093 #   endif
01094 #  endif
01095 #  ifndef YYMALLOC
01096 #   define YYMALLOC malloc
01097 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01098      || defined __cplusplus || defined _MSC_VER)
01099 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
01100 #   endif
01101 #  endif
01102 #  ifndef YYFREE
01103 #   define YYFREE free
01104 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01105      || defined __cplusplus || defined _MSC_VER)
01106 void free (void *); /* INFRINGES ON USER NAME SPACE */
01107 #   endif
01108 #  endif
01109 # endif
01110 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
01111 
01112 
01113 #if (! defined yyoverflow \
01114      && (! defined __cplusplus \
01115          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01116 
01117 /* A type that is properly aligned for any stack member.  */
01118 union yyalloc
01119 {
01120   yytype_int16 yyss;
01121   YYSTYPE yyvs;
01122   };
01123 
01124 /* The size of the maximum gap between one aligned stack and the next.  */
01125 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01126 
01127 /* The size of an array large to enough to hold all stacks, each with
01128    N elements.  */
01129 # define YYSTACK_BYTES(N) \
01130      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01131       + YYSTACK_GAP_MAXIMUM)
01132 
01133 /* Copy COUNT objects from FROM to TO.  The source and destination do
01134    not overlap.  */
01135 # ifndef YYCOPY
01136 #  if defined __GNUC__ && 1 < __GNUC__
01137 #   define YYCOPY(To, From, Count) \
01138       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01139 #  else
01140 #   define YYCOPY(To, From, Count)              \
01141       do                                        \
01142         {                                       \
01143           YYSIZE_T yyi;                         \
01144           for (yyi = 0; yyi < (Count); yyi++)   \
01145             (To)[yyi] = (From)[yyi];            \
01146         }                                       \
01147       while (YYID (0))
01148 #  endif
01149 # endif
01150 
01151 /* Relocate STACK from its old location to the new one.  The
01152    local variables YYSIZE and YYSTACKSIZE give the old and new number of
01153    elements in the stack, and YYPTR gives the new location of the
01154    stack.  Advance YYPTR to a properly aligned location for the next
01155    stack.  */
01156 # define YYSTACK_RELOCATE(Stack)                                        \
01157     do                                                                  \
01158       {                                                                 \
01159         YYSIZE_T yynewbytes;                                            \
01160         YYCOPY (&yyptr->Stack, Stack, yysize);                          \
01161         Stack = &yyptr->Stack;                                          \
01162         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01163         yyptr += yynewbytes / sizeof (*yyptr);                          \
01164       }                                                                 \
01165     while (YYID (0))
01166 
01167 #endif
01168 
01169 /* YYFINAL -- State number of the termination state.  */
01170 #define YYFINAL  3
01171 /* YYLAST -- Last index in YYTABLE.  */
01172 #define YYLAST   10748
01173 
01174 /* YYNTOKENS -- Number of terminals.  */
01175 #define YYNTOKENS  148
01176 /* YYNNTS -- Number of nonterminals.  */
01177 #define YYNNTS  174
01178 /* YYNRULES -- Number of rules.  */
01179 #define YYNRULES  573
01180 /* YYNRULES -- Number of states.  */
01181 #define YYNSTATES  991
01182 
01183 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
01184 #define YYUNDEFTOK  2
01185 #define YYMAXUTOK   375
01186 
01187 #define YYTRANSLATE(YYX)                                                \
01188   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01189 
01190 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
01191 static const yytype_uint8 yytranslate[] =
01192 {
01193        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01194      147,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01195        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01196        2,     2,   146,   123,     2,     2,     2,   121,   116,     2,
01197      142,   143,   119,   117,   140,   118,   139,   120,     2,     2,
01198        2,     2,     2,     2,     2,     2,     2,     2,   111,   145,
01199      113,   109,   112,   110,     2,     2,     2,     2,     2,     2,
01200        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01201        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01202        2,   138,     2,   144,   115,     2,   141,     2,     2,     2,
01203        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01204        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01205        2,     2,     2,   136,   114,   137,   124,     2,     2,     2,
01206        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01207        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01208        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01209        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01210        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01211        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01212        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01213        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01214        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01215        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01216        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01217        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01218        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
01219        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
01220       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
01221       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
01222       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
01223       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
01224       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
01225       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
01226       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
01227       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
01228       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
01229      105,   106,   107,   108,   122,   125,   126,   127,   128,   129,
01230      130,   131,   132,   133,   134,   135
01231 };
01232 
01233 #if YYDEBUG
01234 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
01235    YYRHS.  */
01236 static const yytype_uint16 yyprhs[] =
01237 {
01238        0,     0,     3,     4,     7,    10,    12,    14,    18,    21,
01239       23,    24,    30,    35,    38,    40,    42,    46,    49,    50,
01240       55,    59,    63,    67,    70,    74,    78,    82,    86,    90,
01241       95,    97,   101,   105,   112,   118,   124,   130,   136,   140,
01242      144,   148,   152,   154,   158,   162,   164,   168,   172,   176,
01243      179,   181,   183,   185,   187,   189,   194,   199,   200,   206,
01244      209,   213,   218,   224,   229,   235,   238,   241,   244,   247,
01245      250,   252,   256,   258,   262,   264,   267,   271,   277,   280,
01246      285,   288,   293,   295,   299,   301,   305,   308,   312,   314,
01247      318,   320,   322,   327,   331,   335,   339,   343,   346,   348,
01248      350,   352,   357,   361,   365,   369,   373,   376,   378,   380,
01249      382,   385,   387,   391,   393,   395,   397,   399,   401,   403,
01250      405,   407,   409,   411,   412,   417,   419,   421,   423,   425,
01251      427,   429,   431,   433,   435,   437,   439,   441,   443,   445,
01252      447,   449,   451,   453,   455,   457,   459,   461,   463,   465,
01253      467,   469,   471,   473,   475,   477,   479,   481,   483,   485,
01254      487,   489,   491,   493,   495,   497,   499,   501,   503,   505,
01255      507,   509,   511,   513,   515,   517,   519,   521,   523,   525,
01256      527,   529,   531,   533,   535,   537,   539,   541,   543,   545,
01257      547,   549,   551,   553,   555,   557,   561,   567,   571,   577,
01258      584,   590,   596,   602,   608,   613,   617,   621,   625,   629,
01259      633,   637,   641,   645,   649,   654,   659,   662,   665,   669,
01260      673,   677,   681,   685,   689,   693,   697,   701,   705,   709,
01261      713,   717,   720,   723,   727,   731,   735,   739,   740,   745,
01262      752,   754,   756,   758,   761,   766,   769,   773,   775,   777,
01263      779,   781,   784,   789,   792,   794,   797,   800,   805,   807,
01264      808,   811,   814,   817,   819,   821,   824,   828,   833,   837,
01265      842,   845,   847,   849,   851,   853,   855,   857,   859,   861,
01266      863,   864,   869,   870,   875,   879,   883,   886,   890,   894,
01267      896,   901,   905,   907,   908,   915,   920,   924,   927,   929,
01268      932,   935,   942,   949,   950,   951,   959,   960,   961,   969,
01269      975,   980,   981,   982,   992,   993,  1000,  1001,  1002,  1011,
01270     1012,  1018,  1019,  1026,  1027,  1028,  1038,  1040,  1042,  1044,
01271     1046,  1048,  1050,  1052,  1054,  1056,  1058,  1060,  1062,  1064,
01272     1066,  1068,  1070,  1072,  1074,  1077,  1079,  1081,  1083,  1089,
01273     1091,  1094,  1096,  1098,  1100,  1104,  1106,  1110,  1112,  1117,
01274     1124,  1128,  1134,  1137,  1142,  1144,  1148,  1155,  1164,  1169,
01275     1176,  1181,  1184,  1191,  1194,  1199,  1206,  1209,  1214,  1217,
01276     1222,  1224,  1226,  1228,  1232,  1234,  1239,  1241,  1244,  1246,
01277     1250,  1252,  1254,  1255,  1256,  1261,  1266,  1268,  1272,  1276,
01278     1277,  1283,  1286,  1291,  1296,  1299,  1304,  1309,  1313,  1317,
01279     1321,  1324,  1326,  1331,  1332,  1338,  1339,  1345,  1351,  1353,
01280     1355,  1362,  1364,  1366,  1368,  1370,  1373,  1375,  1378,  1380,
01281     1382,  1384,  1386,  1388,  1390,  1392,  1395,  1399,  1403,  1407,
01282     1411,  1415,  1416,  1420,  1422,  1425,  1429,  1433,  1434,  1438,
01283     1439,  1442,  1443,  1446,  1447,  1450,  1452,  1453,  1457,  1458,
01284     1459,  1465,  1467,  1469,  1471,  1473,  1476,  1478,  1480,  1482,
01285     1484,  1488,  1490,  1492,  1495,  1498,  1500,  1502,  1504,  1506,
01286     1508,  1510,  1512,  1514,  1516,  1518,  1520,  1522,  1524,  1526,
01287     1528,  1530,  1532,  1534,  1536,  1537,  1542,  1545,  1549,  1552,
01288     1559,  1568,  1573,  1580,  1585,  1592,  1595,  1600,  1607,  1610,
01289     1615,  1618,  1623,  1625,  1626,  1628,  1630,  1632,  1634,  1636,
01290     1638,  1640,  1644,  1646,  1650,  1654,  1658,  1660,  1664,  1666,
01291     1670,  1672,  1674,  1677,  1679,  1681,  1683,  1686,  1689,  1691,
01292     1693,  1694,  1699,  1701,  1704,  1706,  1710,  1714,  1717,  1719,
01293     1721,  1723,  1725,  1727,  1729,  1731,  1733,  1735,  1737,  1739,
01294     1741,  1742,  1744,  1745,  1747,  1750,  1753,  1754,  1756,  1758,
01295     1760,  1762,  1764,  1767
01296 };
01297 
01298 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
01299 static const yytype_int16 yyrhs[] =
01300 {
01301      149,     0,    -1,    -1,   150,   151,    -1,   152,   314,    -1,
01302      321,    -1,   153,    -1,   152,   320,   153,    -1,     1,   153,
01303       -1,   158,    -1,    -1,    47,   154,   136,   151,   137,    -1,
01304      156,   256,   231,   259,    -1,   157,   314,    -1,   321,    -1,
01305      158,    -1,   157,   320,   158,    -1,     1,   158,    -1,    -1,
01306       45,   180,   159,   180,    -1,    45,    54,    54,    -1,    45,
01307       54,    64,    -1,    45,    54,    63,    -1,     6,   181,    -1,
01308      158,    40,   162,    -1,   158,    41,   162,    -1,   158,    42,
01309      162,    -1,   158,    43,   162,    -1,   158,    44,   158,    -1,
01310       48,   136,   156,   137,    -1,   160,    -1,   168,   109,   163,
01311       -1,   286,    87,   163,    -1,   216,   138,   191,   317,    87,
01312      163,    -1,   216,   139,    52,    87,   163,    -1,   216,   139,
01313       56,    87,   163,    -1,   216,    85,    56,    87,   163,    -1,
01314      216,    85,    52,    87,   163,    -1,   287,    87,   163,    -1,
01315      175,   109,   198,    -1,   168,   109,   187,    -1,   168,   109,
01316      198,    -1,   161,    -1,   175,   109,   163,    -1,   175,   109,
01317      160,    -1,   163,    -1,   161,    37,   161,    -1,   161,    38,
01318      161,    -1,    39,   315,   161,    -1,   123,   163,    -1,   185,
01319       -1,   161,    -1,   167,    -1,   164,    -1,   249,    -1,   249,
01320      139,   311,   193,    -1,   249,    85,   311,   193,    -1,    -1,
01321       94,   166,   237,   156,   137,    -1,   310,   193,    -1,   310,
01322      193,   165,    -1,   216,   139,   311,   193,    -1,   216,   139,
01323      311,   193,   165,    -1,   216,    85,   311,   193,    -1,   216,
01324       85,   311,   193,   165,    -1,    32,   193,    -1,    31,   193,
01325       -1,    30,   192,    -1,    21,   192,    -1,    22,   192,    -1,
01326      170,    -1,    89,   169,   316,    -1,   170,    -1,    89,   169,
01327      316,    -1,   172,    -1,   172,   171,    -1,   172,    95,   174,
01328       -1,   172,    95,   174,   140,   173,    -1,   172,    95,    -1,
01329      172,    95,   140,   173,    -1,    95,   174,    -1,    95,   174,
01330      140,   173,    -1,    95,    -1,    95,   140,   173,    -1,   174,
01331       -1,    89,   169,   316,    -1,   171,   140,    -1,   172,   171,
01332      140,    -1,   171,    -1,   173,   140,   171,    -1,   283,    -1,
01333      284,    -1,   216,   138,   191,   317,    -1,   216,   139,    52,
01334       -1,   216,    85,    52,    -1,   216,   139,    56,    -1,   216,
01335       85,    56,    -1,    86,    56,    -1,   287,    -1,   283,    -1,
01336      284,    -1,   216,   138,   191,   317,    -1,   216,   139,    52,
01337       -1,   216,    85,    52,    -1,   216,   139,    56,    -1,   216,
01338       85,    56,    -1,    86,    56,    -1,   287,    -1,    52,    -1,
01339       56,    -1,    86,   176,    -1,   176,    -1,   216,    85,   176,
01340       -1,    52,    -1,    56,    -1,    53,    -1,   183,    -1,   184,
01341       -1,   178,    -1,   279,    -1,   179,    -1,   281,    -1,   180,
01342       -1,    -1,   181,   140,   182,   180,    -1,   114,    -1,   115,
01343       -1,   116,    -1,    69,    -1,    70,    -1,    71,    -1,    77,
01344       -1,    78,    -1,   112,    -1,    73,    -1,   113,    -1,    74,
01345       -1,    72,    -1,    83,    -1,    84,    -1,   117,    -1,   118,
01346       -1,   119,    -1,    95,    -1,   120,    -1,   121,    -1,    68,
01347       -1,   123,    -1,   124,    -1,    66,    -1,    67,    -1,    81,
01348       -1,    82,    -1,   141,    -1,    49,    -1,    50,    -1,    51,
01349       -1,    47,    -1,    48,    -1,    45,    -1,    37,    -1,     7,
01350       -1,    21,    -1,    16,    -1,     3,    -1,     5,    -1,    46,
01351       -1,    26,    -1,    15,    -1,    14,    -1,    10,    -1,     9,
01352       -1,    36,    -1,    20,    -1,    25,    -1,     4,    -1,    22,
01353       -1,    34,    -1,    39,    -1,    38,    -1,    23,    -1,     8,
01354       -1,    24,    -1,    30,    -1,    33,    -1,    32,    -1,    13,
01355       -1,    35,    -1,     6,    -1,    17,    -1,    31,    -1,    11,
01356       -1,    12,    -1,    18,    -1,    19,    -1,   175,   109,   185,
01357       -1,   175,   109,   185,    44,   185,    -1,   286,    87,   185,
01358       -1,   286,    87,   185,    44,   185,    -1,   216,   138,   191,
01359      317,    87,   185,    -1,   216,   139,    52,    87,   185,    -1,
01360      216,   139,    56,    87,   185,    -1,   216,    85,    52,    87,
01361      185,    -1,   216,    85,    56,    87,   185,    -1,    86,    56,
01362       87,   185,    -1,   287,    87,   185,    -1,   185,    79,   185,
01363       -1,   185,    80,   185,    -1,   185,   117,   185,    -1,   185,
01364      118,   185,    -1,   185,   119,   185,    -1,   185,   120,   185,
01365       -1,   185,   121,   185,    -1,   185,    68,   185,    -1,   122,
01366       59,    68,   185,    -1,   122,    60,    68,   185,    -1,    66,
01367      185,    -1,    67,   185,    -1,   185,   114,   185,    -1,   185,
01368      115,   185,    -1,   185,   116,   185,    -1,   185,    69,   185,
01369       -1,   185,   112,   185,    -1,   185,    73,   185,    -1,   185,
01370      113,   185,    -1,   185,    74,   185,    -1,   185,    70,   185,
01371       -1,   185,    71,   185,    -1,   185,    72,   185,    -1,   185,
01372       77,   185,    -1,   185,    78,   185,    -1,   123,   185,    -1,
01373      124,   185,    -1,   185,    83,   185,    -1,   185,    84,   185,
01374       -1,   185,    75,   185,    -1,   185,    76,   185,    -1,    -1,
01375       46,   315,   186,   185,    -1,   185,   110,   185,   315,   111,
01376      185,    -1,   199,    -1,   185,    -1,   321,    -1,   197,   318,
01377       -1,   197,   140,   308,   318,    -1,   308,   318,    -1,   142,
01378      191,   316,    -1,   321,    -1,   189,    -1,   321,    -1,   192,
01379       -1,   197,   140,    -1,   197,   140,   308,   140,    -1,   308,
01380      140,    -1,   167,    -1,   197,   196,    -1,   308,   196,    -1,
01381      197,   140,   308,   196,    -1,   195,    -1,    -1,   194,   192,
01382       -1,    96,   187,    -1,   140,   195,    -1,   321,    -1,   187,
01383       -1,    95,   187,    -1,   197,   140,   187,    -1,   197,   140,
01384       95,   187,    -1,   197,   140,   187,    -1,   197,   140,    95,
01385      187,    -1,    95,   187,    -1,   260,    -1,   261,    -1,   264,
01386       -1,   265,    -1,   266,    -1,   269,    -1,   285,    -1,   287,
01387       -1,    53,    -1,    -1,   217,   200,   155,   227,    -1,    -1,
01388       90,   161,   201,   316,    -1,    89,   156,   143,    -1,   216,
01389       85,    56,    -1,    86,    56,    -1,    92,   188,   144,    -1,
01390       93,   307,   137,    -1,    30,    -1,    31,   142,   192,   316,
01391       -1,    31,   142,   316,    -1,    31,    -1,    -1,    46,   315,
01392      142,   202,   161,   316,    -1,    39,   142,   161,   316,    -1,
01393       39,   142,   316,    -1,   310,   251,    -1,   250,    -1,   250,
01394      251,    -1,    97,   242,    -1,   218,   162,   228,   156,   230,
01395      227,    -1,   219,   162,   228,   156,   231,   227,    -1,    -1,
01396       -1,   220,   203,   162,   229,   204,   156,   227,    -1,    -1,
01397       -1,   221,   205,   162,   229,   206,   156,   227,    -1,   222,
01398      162,   314,   254,   227,    -1,   222,   314,   254,   227,    -1,
01399       -1,    -1,   223,   232,    25,   207,   162,   229,   208,   156,
01400      227,    -1,    -1,   224,   177,   288,   209,   155,   227,    -1,
01401       -1,    -1,   224,    83,   161,   210,   319,   211,   155,   227,
01402       -1,    -1,   225,   177,   212,   155,   227,    -1,    -1,   226,
01403      178,   213,   290,   155,   227,    -1,    -1,    -1,   226,   305,
01404      313,   214,   178,   215,   290,   155,   227,    -1,    21,    -1,
01405       22,    -1,    23,    -1,    24,    -1,   199,    -1,     7,    -1,
01406       11,    -1,    12,    -1,    18,    -1,    19,    -1,    16,    -1,
01407       20,    -1,     3,    -1,     4,    -1,     5,    -1,    10,    -1,
01408      319,    -1,    13,    -1,   319,    13,    -1,   319,    -1,    27,
01409       -1,   231,    -1,    14,   162,   228,   156,   230,    -1,   321,
01410       -1,    15,   156,    -1,   175,    -1,   168,    -1,   293,    -1,
01411       89,   235,   316,    -1,   233,    -1,   234,   140,   233,    -1,
01412      234,    -1,   234,   140,    95,   293,    -1,   234,   140,    95,
01413      293,   140,   234,    -1,   234,   140,    95,    -1,   234,   140,
01414       95,   140,   234,    -1,    95,   293,    -1,    95,   293,   140,
01415      234,    -1,    95,    -1,    95,   140,   234,    -1,   295,   140,
01416      298,   140,   301,   304,    -1,   295,   140,   298,   140,   301,
01417      140,   295,   304,    -1,   295,   140,   298,   304,    -1,   295,
01418      140,   298,   140,   295,   304,    -1,   295,   140,   301,   304,
01419       -1,   295,   140,    -1,   295,   140,   301,   140,   295,   304,
01420       -1,   295,   304,    -1,   298,   140,   301,   304,    -1,   298,
01421      140,   301,   140,   295,   304,    -1,   298,   304,    -1,   298,
01422      140,   295,   304,    -1,   301,   304,    -1,   301,   140,   295,
01423      304,    -1,   303,    -1,   321,    -1,   238,    -1,   114,   239,
01424      114,    -1,    76,    -1,   114,   236,   239,   114,    -1,   321,
01425       -1,   145,   240,    -1,   241,    -1,   240,   140,   241,    -1,
01426       52,    -1,   292,    -1,    -1,    -1,   243,   244,   245,   246,
01427       -1,   142,   291,   239,   316,    -1,   291,    -1,   107,   156,
01428      137,    -1,    29,   156,    10,    -1,    -1,    28,   248,   237,
01429      156,    10,    -1,   167,   247,    -1,   249,   139,   311,   190,
01430       -1,   249,    85,   311,   190,    -1,   310,   189,    -1,   216,
01431      139,   311,   190,    -1,   216,    85,   311,   189,    -1,   216,
01432       85,   312,    -1,   216,   139,   189,    -1,   216,    85,   189,
01433       -1,    32,   189,    -1,    32,    -1,   216,   138,   191,   317,
01434       -1,    -1,   136,   252,   237,   156,   137,    -1,    -1,    26,
01435      253,   237,   156,    10,    -1,    17,   197,   228,   156,   255,
01436       -1,   231,    -1,   254,    -1,     8,   257,   258,   228,   156,
01437      256,    -1,   321,    -1,   187,    -1,   198,    -1,   321,    -1,
01438       88,   175,    -1,   321,    -1,     9,   156,    -1,   321,    -1,
01439      282,    -1,   279,    -1,   281,    -1,   262,    -1,    62,    -1,
01440      263,    -1,   262,   263,    -1,    99,   271,   106,    -1,   100,
01441      272,   106,    -1,   101,   273,    65,    -1,   102,   146,   106,
01442       -1,   102,   267,   106,    -1,    -1,   267,   268,   146,    -1,
01443      274,    -1,   268,   274,    -1,   103,   146,   106,    -1,   103,
01444      270,   106,    -1,    -1,   270,    61,   146,    -1,    -1,   271,
01445      274,    -1,    -1,   272,   274,    -1,    -1,   273,   274,    -1,
01446       61,    -1,    -1,   105,   275,   278,    -1,    -1,    -1,   104,
01447      276,   277,   156,   137,    -1,    54,    -1,    55,    -1,    57,
01448       -1,   287,    -1,    98,   280,    -1,   178,    -1,    55,    -1,
01449       54,    -1,    57,    -1,    98,   272,   106,    -1,    59,    -1,
01450       60,    -1,   122,    59,    -1,   122,    60,    -1,    52,    -1,
01451       55,    -1,    54,    -1,    56,    -1,    57,    -1,    34,    -1,
01452       33,    -1,    35,    -1,    36,    -1,    50,    -1,    49,    -1,
01453       51,    -1,   283,    -1,   284,    -1,   283,    -1,   284,    -1,
01454       63,    -1,    64,    -1,   319,    -1,    -1,   113,   289,   162,
01455      319,    -1,     1,   319,    -1,   142,   291,   316,    -1,   291,
01456      319,    -1,   295,   140,   299,   140,   301,   304,    -1,   295,
01457      140,   299,   140,   301,   140,   295,   304,    -1,   295,   140,
01458      299,   304,    -1,   295,   140,   299,   140,   295,   304,    -1,
01459      295,   140,   301,   304,    -1,   295,   140,   301,   140,   295,
01460      304,    -1,   295,   304,    -1,   299,   140,   301,   304,    -1,
01461      299,   140,   301,   140,   295,   304,    -1,   299,   304,    -1,
01462      299,   140,   295,   304,    -1,   301,   304,    -1,   301,   140,
01463      295,   304,    -1,   303,    -1,    -1,    56,    -1,    55,    -1,
01464       54,    -1,    57,    -1,   292,    -1,    52,    -1,   293,    -1,
01465       89,   235,   316,    -1,   294,    -1,   295,   140,   294,    -1,
01466       52,   109,   187,    -1,    52,   109,   216,    -1,   297,    -1,
01467      298,   140,   297,    -1,   296,    -1,   299,   140,   296,    -1,
01468      119,    -1,    95,    -1,   300,    52,    -1,   300,    -1,   116,
01469       -1,    96,    -1,   302,    52,    -1,   140,   303,    -1,   321,
01470       -1,   285,    -1,    -1,   142,   306,   161,   316,    -1,   321,
01471       -1,   308,   318,    -1,   309,    -1,   308,   140,   309,    -1,
01472      187,    88,   187,    -1,    58,   187,    -1,    52,    -1,    56,
01473       -1,    53,    -1,    52,    -1,    56,    -1,    53,    -1,   183,
01474       -1,    52,    -1,    53,    -1,   183,    -1,   139,    -1,    85,
01475       -1,    -1,   320,    -1,    -1,   147,    -1,   315,   143,    -1,
01476      315,   144,    -1,    -1,   147,    -1,   140,    -1,   145,    -1,
01477      147,    -1,   319,    -1,   320,   145,    -1,    -1
01478 };
01479 
01480 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
01481 static const yytype_uint16 yyrline[] =
01482 {
01483        0,   782,   782,   782,   813,   824,   833,   841,   849,   855,
01484      857,   856,   880,   913,   924,   933,   941,   949,   955,   955,
01485      963,   971,   982,   992,  1000,  1009,  1018,  1031,  1044,  1053,
01486     1065,  1066,  1076,  1105,  1126,  1143,  1160,  1171,  1188,  1198,
01487     1207,  1216,  1225,  1228,  1237,  1249,  1250,  1258,  1266,  1274,
01488     1282,  1285,  1297,  1298,  1301,  1302,  1311,  1323,  1322,  1344,
01489     1353,  1365,  1374,  1386,  1395,  1407,  1416,  1425,  1433,  1441,
01490     1451,  1452,  1462,  1463,  1473,  1481,  1489,  1497,  1506,  1514,
01491     1523,  1531,  1540,  1548,  1559,  1560,  1570,  1578,  1588,  1596,
01492     1606,  1610,  1614,  1622,  1630,  1638,  1646,  1658,  1668,  1680,
01493     1689,  1698,  1706,  1714,  1722,  1730,  1743,  1756,  1767,  1775,
01494     1778,  1786,  1794,  1804,  1805,  1806,  1807,  1812,  1823,  1824,
01495     1827,  1835,  1838,  1846,  1846,  1856,  1857,  1858,  1859,  1860,
01496     1861,  1862,  1863,  1864,  1865,  1866,  1867,  1868,  1869,  1870,
01497     1871,  1872,  1873,  1874,  1875,  1876,  1877,  1878,  1879,  1880,
01498     1881,  1882,  1883,  1884,  1887,  1887,  1887,  1888,  1888,  1889,
01499     1889,  1889,  1890,  1890,  1890,  1890,  1891,  1891,  1891,  1891,
01500     1892,  1892,  1892,  1893,  1893,  1893,  1893,  1894,  1894,  1894,
01501     1894,  1895,  1895,  1895,  1895,  1896,  1896,  1896,  1896,  1897,
01502     1897,  1897,  1897,  1898,  1898,  1901,  1910,  1920,  1949,  1980,
01503     2006,  2023,  2040,  2057,  2068,  2079,  2090,  2104,  2118,  2126,
01504     2134,  2142,  2150,  2158,  2166,  2175,  2184,  2192,  2200,  2208,
01505     2216,  2224,  2232,  2240,  2248,  2256,  2264,  2272,  2280,  2288,
01506     2299,  2307,  2315,  2323,  2331,  2339,  2347,  2355,  2355,  2365,
01507     2375,  2381,  2393,  2394,  2398,  2406,  2416,  2426,  2427,  2430,
01508     2431,  2432,  2436,  2444,  2454,  2463,  2471,  2481,  2490,  2499,
01509     2499,  2511,  2521,  2525,  2531,  2539,  2547,  2561,  2577,  2591,
01510     2606,  2616,  2617,  2618,  2619,  2620,  2621,  2622,  2623,  2624,
01511     2633,  2632,  2657,  2657,  2666,  2674,  2682,  2690,  2703,  2711,
01512     2719,  2727,  2735,  2743,  2743,  2753,  2761,  2769,  2780,  2781,
01513     2792,  2796,  2808,  2820,  2820,  2820,  2831,  2831,  2831,  2842,
01514     2853,  2862,  2864,  2861,  2928,  2927,  2949,  2954,  2948,  2973,
01515     2972,  2994,  2993,  3016,  3017,  3016,  3037,  3045,  3053,  3061,
01516     3071,  3083,  3089,  3095,  3101,  3107,  3113,  3119,  3125,  3131,
01517     3137,  3147,  3153,  3158,  3159,  3166,  3171,  3174,  3175,  3188,
01518     3189,  3199,  3200,  3203,  3211,  3221,  3229,  3239,  3247,  3256,
01519     3265,  3273,  3281,  3290,  3302,  3310,  3320,  3328,  3336,  3344,
01520     3352,  3360,  3369,  3377,  3385,  3393,  3401,  3409,  3417,  3425,
01521     3433,  3443,  3444,  3450,  3459,  3468,  3479,  3480,  3490,  3497,
01522     3506,  3514,  3520,  3523,  3520,  3541,  3549,  3559,  3563,  3570,
01523     3569,  3590,  3606,  3615,  3626,  3635,  3645,  3655,  3663,  3674,
01524     3685,  3693,  3701,  3716,  3715,  3735,  3734,  3755,  3767,  3768,
01525     3771,  3790,  3793,  3801,  3809,  3812,  3816,  3819,  3827,  3830,
01526     3831,  3839,  3842,  3859,  3860,  3861,  3871,  3881,  3908,  3973,
01527     3982,  3993,  4000,  4010,  4018,  4028,  4037,  4048,  4055,  4066,
01528     4073,  4084,  4091,  4102,  4109,  4138,  4140,  4139,  4156,  4162,
01529     4155,  4181,  4189,  4197,  4205,  4208,  4219,  4220,  4221,  4222,
01530     4225,  4255,  4256,  4257,  4265,  4275,  4276,  4277,  4278,  4279,
01531     4282,  4283,  4284,  4285,  4286,  4287,  4288,  4291,  4304,  4314,
01532     4322,  4332,  4333,  4336,  4345,  4344,  4352,  4364,  4374,  4382,
01533     4390,  4398,  4406,  4414,  4422,  4430,  4438,  4446,  4454,  4462,
01534     4470,  4478,  4486,  4495,  4504,  4513,  4522,  4531,  4542,  4543,
01535     4550,  4559,  4578,  4585,  4598,  4610,  4622,  4630,  4646,  4654,
01536     4670,  4671,  4674,  4687,  4698,  4699,  4702,  4719,  4723,  4733,
01537     4743,  4743,  4772,  4773,  4783,  4790,  4800,  4808,  4818,  4819,
01538     4820,  4823,  4824,  4825,  4826,  4829,  4830,  4831,  4834,  4839,
01539     4846,  4847,  4850,  4851,  4854,  4857,  4860,  4861,  4862,  4865,
01540     4866,  4869,  4870,  4874
01541 };
01542 #endif
01543 
01544 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01545 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01546    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
01547 static const char *const yytname[] =
01548 {
01549   "$end", "error", "$undefined", "keyword_class", "keyword_module",
01550   "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01551   "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01552   "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01553   "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01554   "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01555   "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01556   "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01557   "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01558   "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01559   "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01560   "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01561   "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01562   "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01563   "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01564   "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01565   "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01566   "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01567   "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01568   "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01569   "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01570   "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01571   "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01572   "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01573   "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01574   "id_core_set_variable_alias", "id_core_undef_method",
01575   "id_core_define_method", "id_core_define_singleton_method",
01576   "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01577   "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01578   "@1", "top_compstmt", "top_stmts", "top_stmt", "@2", "bodystmt",
01579   "compstmt", "stmts", "stmt", "@3", "command_asgn", "expr", "expr_value",
01580   "command_call", "block_command", "cmd_brace_block", "@4", "command",
01581   "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head",
01582   "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym",
01583   "fitem", "undef_list", "@5", "op", "reswords", "arg", "@6", "arg_value",
01584   "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01585   "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01586   "mrhs", "primary", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15",
01587   "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "primary_value",
01588   "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for",
01589   "k_class", "k_module", "k_def", "k_end", "then", "do", "if_tail",
01590   "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs", "block_param",
01591   "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
01592   "lambda", "@24", "@25", "f_larglist", "lambda_body", "do_block", "@26",
01593   "block_call", "method_call", "brace_block", "@27", "@28", "case_body",
01594   "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal",
01595   "strings", "string", "string1", "xstring", "regexp", "words",
01596   "word_list", "word", "qwords", "qword_list", "string_contents",
01597   "xstring_contents", "regexp_contents", "string_content", "@29", "@30",
01598   "@31", "string_dvar", "symbol", "sym", "dsym", "numeric",
01599   "user_variable", "keyword_variable", "var_ref", "var_lhs", "backref",
01600   "superclass", "@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01601   "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01602   "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01603   "opt_f_block_arg", "singleton", "@33", "assoc_list", "assocs", "assoc",
01604   "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01605   "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01606 };
01607 #endif
01608 
01609 # ifdef YYPRINT
01610 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
01611    token YYLEX-NUM.  */
01612 static const yytype_uint16 yytoknum[] =
01613 {
01614        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
01615      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
01616      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
01617      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
01618      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
01619      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
01620      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
01621      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
01622      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
01623      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
01624      355,   356,   357,   358,   359,   360,   361,   362,   363,    61,
01625       63,    58,    62,    60,   124,    94,    38,    43,    45,    42,
01626       47,    37,   364,    33,   126,   365,   366,   367,   368,   369,
01627      370,   371,   372,   373,   374,   375,   123,   125,    91,    46,
01628       44,    96,    40,    41,    93,    59,    32,    10
01629 };
01630 # endif
01631 
01632 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
01633 static const yytype_uint16 yyr1[] =
01634 {
01635        0,   148,   150,   149,   151,   152,   152,   152,   152,   153,
01636      154,   153,   155,   156,   157,   157,   157,   157,   159,   158,
01637      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01638      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01639      158,   158,   158,   160,   160,   161,   161,   161,   161,   161,
01640      161,   162,   163,   163,   164,   164,   164,   166,   165,   167,
01641      167,   167,   167,   167,   167,   167,   167,   167,   167,   167,
01642      168,   168,   169,   169,   170,   170,   170,   170,   170,   170,
01643      170,   170,   170,   170,   171,   171,   172,   172,   173,   173,
01644      174,   174,   174,   174,   174,   174,   174,   174,   174,   175,
01645      175,   175,   175,   175,   175,   175,   175,   175,   176,   176,
01646      177,   177,   177,   178,   178,   178,   178,   178,   179,   179,
01647      180,   180,   181,   182,   181,   183,   183,   183,   183,   183,
01648      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01649      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01650      183,   183,   183,   183,   184,   184,   184,   184,   184,   184,
01651      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01652      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01653      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01654      184,   184,   184,   184,   184,   185,   185,   185,   185,   185,
01655      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
01656      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
01657      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
01658      185,   185,   185,   185,   185,   185,   185,   186,   185,   185,
01659      185,   187,   188,   188,   188,   188,   189,   190,   190,   191,
01660      191,   191,   191,   191,   192,   192,   192,   192,   192,   194,
01661      193,   195,   196,   196,   197,   197,   197,   197,   198,   198,
01662      198,   199,   199,   199,   199,   199,   199,   199,   199,   199,
01663      200,   199,   201,   199,   199,   199,   199,   199,   199,   199,
01664      199,   199,   199,   202,   199,   199,   199,   199,   199,   199,
01665      199,   199,   199,   203,   204,   199,   205,   206,   199,   199,
01666      199,   207,   208,   199,   209,   199,   210,   211,   199,   212,
01667      199,   213,   199,   214,   215,   199,   199,   199,   199,   199,
01668      216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
01669      226,   227,   228,   228,   228,   229,   229,   230,   230,   231,
01670      231,   232,   232,   233,   233,   234,   234,   235,   235,   235,
01671      235,   235,   235,   235,   235,   235,   236,   236,   236,   236,
01672      236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
01673      236,   237,   237,   238,   238,   238,   239,   239,   240,   240,
01674      241,   241,   243,   244,   242,   245,   245,   246,   246,   248,
01675      247,   249,   249,   249,   250,   250,   250,   250,   250,   250,
01676      250,   250,   250,   252,   251,   253,   251,   254,   255,   255,
01677      256,   256,   257,   257,   257,   258,   258,   259,   259,   260,
01678      260,   260,   261,   262,   262,   262,   263,   264,   265,   266,
01679      266,   267,   267,   268,   268,   269,   269,   270,   270,   271,
01680      271,   272,   272,   273,   273,   274,   275,   274,   276,   277,
01681      274,   278,   278,   278,   278,   279,   280,   280,   280,   280,
01682      281,   282,   282,   282,   282,   283,   283,   283,   283,   283,
01683      284,   284,   284,   284,   284,   284,   284,   285,   285,   286,
01684      286,   287,   287,   288,   289,   288,   288,   290,   290,   291,
01685      291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
01686      291,   291,   291,   291,   292,   292,   292,   292,   293,   293,
01687      294,   294,   295,   295,   296,   297,   298,   298,   299,   299,
01688      300,   300,   301,   301,   302,   302,   303,   304,   304,   305,
01689      306,   305,   307,   307,   308,   308,   309,   309,   310,   310,
01690      310,   311,   311,   311,   311,   312,   312,   312,   313,   313,
01691      314,   314,   315,   315,   316,   317,   318,   318,   318,   319,
01692      319,   320,   320,   321
01693 };
01694 
01695 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
01696 static const yytype_uint8 yyr2[] =
01697 {
01698        0,     2,     0,     2,     2,     1,     1,     3,     2,     1,
01699        0,     5,     4,     2,     1,     1,     3,     2,     0,     4,
01700        3,     3,     3,     2,     3,     3,     3,     3,     3,     4,
01701        1,     3,     3,     6,     5,     5,     5,     5,     3,     3,
01702        3,     3,     1,     3,     3,     1,     3,     3,     3,     2,
01703        1,     1,     1,     1,     1,     4,     4,     0,     5,     2,
01704        3,     4,     5,     4,     5,     2,     2,     2,     2,     2,
01705        1,     3,     1,     3,     1,     2,     3,     5,     2,     4,
01706        2,     4,     1,     3,     1,     3,     2,     3,     1,     3,
01707        1,     1,     4,     3,     3,     3,     3,     2,     1,     1,
01708        1,     4,     3,     3,     3,     3,     2,     1,     1,     1,
01709        2,     1,     3,     1,     1,     1,     1,     1,     1,     1,
01710        1,     1,     1,     0,     4,     1,     1,     1,     1,     1,
01711        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01712        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01713        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01714        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01715        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01716        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01717        1,     1,     1,     1,     1,     3,     5,     3,     5,     6,
01718        5,     5,     5,     5,     4,     3,     3,     3,     3,     3,
01719        3,     3,     3,     3,     4,     4,     2,     2,     3,     3,
01720        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
01721        3,     2,     2,     3,     3,     3,     3,     0,     4,     6,
01722        1,     1,     1,     2,     4,     2,     3,     1,     1,     1,
01723        1,     2,     4,     2,     1,     2,     2,     4,     1,     0,
01724        2,     2,     2,     1,     1,     2,     3,     4,     3,     4,
01725        2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01726        0,     4,     0,     4,     3,     3,     2,     3,     3,     1,
01727        4,     3,     1,     0,     6,     4,     3,     2,     1,     2,
01728        2,     6,     6,     0,     0,     7,     0,     0,     7,     5,
01729        4,     0,     0,     9,     0,     6,     0,     0,     8,     0,
01730        5,     0,     6,     0,     0,     9,     1,     1,     1,     1,
01731        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01732        1,     1,     1,     1,     2,     1,     1,     1,     5,     1,
01733        2,     1,     1,     1,     3,     1,     3,     1,     4,     6,
01734        3,     5,     2,     4,     1,     3,     6,     8,     4,     6,
01735        4,     2,     6,     2,     4,     6,     2,     4,     2,     4,
01736        1,     1,     1,     3,     1,     4,     1,     2,     1,     3,
01737        1,     1,     0,     0,     4,     4,     1,     3,     3,     0,
01738        5,     2,     4,     4,     2,     4,     4,     3,     3,     3,
01739        2,     1,     4,     0,     5,     0,     5,     5,     1,     1,
01740        6,     1,     1,     1,     1,     2,     1,     2,     1,     1,
01741        1,     1,     1,     1,     1,     2,     3,     3,     3,     3,
01742        3,     0,     3,     1,     2,     3,     3,     0,     3,     0,
01743        2,     0,     2,     0,     2,     1,     0,     3,     0,     0,
01744        5,     1,     1,     1,     1,     2,     1,     1,     1,     1,
01745        3,     1,     1,     2,     2,     1,     1,     1,     1,     1,
01746        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01747        1,     1,     1,     1,     0,     4,     2,     3,     2,     6,
01748        8,     4,     6,     4,     6,     2,     4,     6,     2,     4,
01749        2,     4,     1,     0,     1,     1,     1,     1,     1,     1,
01750        1,     3,     1,     3,     3,     3,     1,     3,     1,     3,
01751        1,     1,     2,     1,     1,     1,     2,     2,     1,     1,
01752        0,     4,     1,     2,     1,     3,     3,     2,     1,     1,
01753        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01754        0,     1,     0,     1,     2,     2,     0,     1,     1,     1,
01755        1,     1,     2,     0
01756 };
01757 
01758 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
01759    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
01760    means the default is an error.  */
01761 static const yytype_uint16 yydefact[] =
01762 {
01763        2,     0,     0,     1,     0,   338,   339,   340,     0,   331,
01764      332,   333,   336,   334,   335,   337,   326,   327,   328,   329,
01765      289,   259,   259,   481,   480,   482,   483,   562,     0,   562,
01766       10,     0,   485,   484,   486,   475,   550,   477,   476,   478,
01767      479,   471,   472,   433,   491,   492,     0,     0,     0,     0,
01768        0,   573,   573,    82,   392,   451,   449,   451,   453,   441,
01769      447,     0,     0,     0,     3,   560,     6,     9,    30,    42,
01770       45,    53,    52,     0,    70,     0,    74,    84,     0,    50,
01771      240,     0,   280,     0,     0,   303,   306,   560,     0,     0,
01772        0,     0,    54,   298,   271,   272,   432,   434,   273,   274,
01773      275,   276,   430,   431,   429,   487,   488,   277,     0,   278,
01774      259,     5,     8,   164,   175,   165,   188,   161,   181,   171,
01775      170,   191,   192,   186,   169,   168,   163,   189,   193,   194,
01776      173,   162,   176,   180,   182,   174,   167,   183,   190,   185,
01777      184,   177,   187,   172,   160,   179,   178,   159,   166,   157,
01778      158,   154,   155,   156,   113,   115,   114,   149,   150,   146,
01779      128,   129,   130,   137,   134,   136,   131,   132,   151,   152,
01780      138,   139,   143,   133,   135,   125,   126,   127,   140,   141,
01781      142,   144,   145,   147,   148,   153,   118,   120,   122,    23,
01782      116,   117,   119,   121,     0,     0,     0,     0,     0,     0,
01783        0,   254,     0,   241,   264,    68,   258,   573,     0,   487,
01784      488,     0,   278,   573,   544,    69,    67,   562,    66,     0,
01785      573,   410,    65,   562,   563,     0,     0,    18,   237,     0,
01786        0,   326,   327,   289,   292,   411,   216,     0,     0,   217,
01787      286,     0,     0,     0,   560,    15,   562,    72,    14,   282,
01788        0,   566,   566,   242,     0,     0,   566,   542,   562,     0,
01789        0,     0,    80,   330,     0,    90,    91,    98,   300,   393,
01790      468,   467,   469,   466,     0,   465,     0,     0,     0,     0,
01791        0,     0,     0,   473,   474,    49,   231,   232,   569,   570,
01792        4,   571,   561,     0,     0,     0,     0,     0,     0,     0,
01793      399,   401,     0,    86,     0,    78,    75,     0,     0,     0,
01794        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01795        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01796        0,     0,     0,     0,     0,   573,     0,     0,    51,     0,
01797        0,     0,     0,   560,     0,   561,     0,   352,   351,     0,
01798        0,   487,   488,   278,   108,   109,     0,     0,   111,     0,
01799        0,   487,   488,   278,   319,   184,   177,   187,   172,   154,
01800      155,   156,   113,   114,   540,   321,   539,     0,     0,     0,
01801      415,   413,   299,   435,     0,     0,   404,    59,   297,   123,
01802      547,   286,   265,   261,     0,     0,     0,   255,   263,     0,
01803      573,     0,     0,     0,     0,   256,   562,     0,   291,   260,
01804      562,   250,   573,   573,   249,   562,   296,    48,    20,    22,
01805       21,     0,   293,     0,     0,     0,     0,     0,     0,    17,
01806      562,   284,    13,   561,    71,   562,   287,   568,   567,   243,
01807      568,   245,   288,   543,     0,    97,   473,   474,    88,    83,
01808        0,     0,   573,     0,   513,   455,   458,   456,   470,   452,
01809      436,   450,   437,   438,   454,   439,   440,     0,   443,   445,
01810        0,   446,     0,     0,   572,     7,    24,    25,    26,    27,
01811       28,    46,    47,   573,     0,    31,    40,     0,    41,   562,
01812        0,    76,    87,    44,    43,     0,   195,   264,    39,   213,
01813      221,   226,   227,   228,   223,   225,   235,   236,   229,   230,
01814      206,   207,   233,   234,   562,   222,   224,   218,   219,   220,
01815      208,   209,   210,   211,   212,   551,   556,   552,   557,   409,
01816      259,   407,   562,   551,   553,   552,   554,   408,   259,     0,
01817      573,   343,     0,   342,     0,     0,     0,     0,     0,     0,
01818      286,     0,   573,     0,   311,   316,   108,   109,   110,     0,
01819      494,   314,   493,     0,   573,     0,     0,     0,   513,   559,
01820      558,   323,   551,   552,   259,   259,   573,   573,    32,   197,
01821       38,   205,    57,    60,     0,   195,   546,     0,   266,   262,
01822      573,   555,   552,   562,   551,   552,   545,   290,   564,   246,
01823      251,   253,   295,    19,     0,   238,     0,    29,     0,   573,
01824      204,    73,    16,   283,   566,     0,    81,    94,    96,   562,
01825      551,   552,   519,   516,   515,   514,   517,     0,   531,   535,
01826      534,   530,   513,     0,   396,   518,   520,   522,   573,   528,
01827      573,   533,   573,     0,   512,   459,     0,   442,   444,   448,
01828      214,   215,   384,   573,     0,   382,   381,   270,     0,    85,
01829       79,     0,     0,     0,     0,     0,     0,   406,    63,     0,
01830      412,     0,     0,   248,   405,    61,   247,   341,   281,   573,
01831      573,   421,   573,   344,   573,   346,   304,   345,   307,     0,
01832        0,   310,   555,   285,   562,   551,   552,     0,     0,   496,
01833        0,     0,   108,   109,   112,   562,     0,   562,   513,     0,
01834        0,     0,   403,    56,   402,    55,     0,     0,     0,   573,
01835      124,   267,   257,     0,     0,   412,     0,     0,   573,   562,
01836       11,   244,    89,    92,     0,   519,     0,   364,   355,   357,
01837      562,   353,   573,     0,     0,   394,     0,   505,   538,     0,
01838      508,   532,     0,   510,   536,     0,   461,   462,   463,   457,
01839      464,   519,     0,   573,     0,   573,   526,   573,   573,   380,
01840      386,     0,     0,   268,    77,   196,     0,    37,   202,    36,
01841      203,    64,   565,     0,    34,   200,    35,   201,    62,   422,
01842      423,   573,   424,     0,   573,   349,     0,     0,   347,     0,
01843        0,     0,   309,     0,     0,   412,     0,   317,     0,     0,
01844      412,   320,   541,   562,     0,   498,   324,     0,     0,   198,
01845        0,     0,   252,   294,   524,   562,     0,   362,     0,   521,
01846      562,     0,     0,   523,   573,   573,   537,   573,   529,   573,
01847      573,     0,     0,   390,   387,   388,   391,     0,   383,   371,
01848      373,     0,   376,     0,   378,   400,   269,   239,    33,   199,
01849        0,     0,   426,   350,     0,    12,   428,     0,   301,   302,
01850        0,     0,   266,   573,   312,     0,   495,   315,   497,   322,
01851      513,   416,   414,     0,   354,   365,     0,   360,   356,   395,
01852      398,   397,     0,   501,     0,   503,     0,   509,     0,   506,
01853      511,   460,     0,   525,     0,   385,   573,   573,   573,   527,
01854      573,   573,     0,   425,     0,    99,   100,   107,     0,   427,
01855        0,   305,   308,   418,   419,   417,     0,     0,     0,    58,
01856        0,   363,     0,   358,   573,   573,   573,   573,   286,     0,
01857      389,     0,   368,     0,   370,   377,     0,   374,   379,   106,
01858        0,   573,     0,   573,   573,     0,   318,     0,   361,     0,
01859      502,     0,   499,   504,   507,   555,   285,   573,   573,   573,
01860      573,   555,   105,   562,   551,   552,   420,   348,   313,   325,
01861      359,   573,   369,     0,   366,   372,   375,   412,   500,   573,
01862      367
01863 };
01864 
01865 /* YYDEFGOTO[NTERM-NUM].  */
01866 static const yytype_int16 yydefgoto[] =
01867 {
01868       -1,     1,     2,    64,    65,    66,   229,   539,   540,   244,
01869      245,   421,    68,    69,   339,    70,    71,   583,   719,    72,
01870       73,   246,    74,    75,    76,   449,    77,   202,   358,   359,
01871      186,   187,   188,   189,   584,   536,   191,    79,   423,   204,
01872      250,   529,   674,   410,   411,   218,   219,   206,   397,   412,
01873      488,    80,   337,   435,   604,   341,   800,   342,   801,   697,
01874      926,   701,   698,   875,   566,   568,   711,   880,   237,    82,
01875       83,    84,    85,    86,    87,    88,    89,    90,    91,   678,
01876      542,   686,   797,   798,   350,   738,   739,   740,   763,   654,
01877      655,   764,   844,   845,   268,   269,   454,   633,   745,   301,
01878      483,    92,    93,   388,   577,   576,   549,   925,   680,   791,
01879      861,   865,    94,    95,    96,    97,    98,    99,   100,   280,
01880      467,   101,   282,   276,   274,   278,   459,   646,   645,   755,
01881      759,   102,   275,   103,   104,   209,   210,   107,   211,   212,
01882      561,   700,   709,   710,   635,   636,   637,   638,   639,   766,
01883      767,   640,   641,   642,   643,   836,   747,   377,   567,   255,
01884      413,   214,   238,   608,   531,   571,   290,   407,   408,   670,
01885      439,   543,   345,   248
01886 };
01887 
01888 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
01889    STATE-NUM.  */
01890 #define YYPACT_NINF -747
01891 static const yytype_int16 yypact[] =
01892 {
01893     -747,    81,  2552,  -747,  7102,  -747,  -747,  -747,  6615,  -747,
01894     -747,  -747,  -747,  -747,  -747,  -747,  7320,  7320,  -747,  -747,
01895     7320,  3237,  2814,  -747,  -747,  -747,  -747,   100,  6476,   -31,
01896     -747,   -26,  -747,  -747,  -747,  5715,  2955,  -747,  -747,  5842,
01897     -747,  -747,  -747,  -747,  -747,  -747,  8519,  8519,    83,  4434,
01898     8628,  7538,  7865,  6878,  -747,  6337,  -747,  -747,  -747,   -24,
01899       29,   252,  8737,  8519,  -747,   193,  -747,  1104,  -747,   458,
01900     -747,  -747,   129,    77,  -747,    69,  8846,  -747,   139,  2797,
01901       22,    41,  -747,  8628,  8628,  -747,  -747,  5078,  8951,  9056,
01902     9161,  5588,    33,    46,  -747,  -747,   157,  -747,  -747,  -747,
01903     -747,  -747,  -747,  -747,  -747,    25,    58,  -747,   179,   613,
01904       51,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01905     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01906     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01907     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01908     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01909     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01910     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01911     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   134,
01912     -747,  -747,  -747,  -747,   182,  8519,   279,  4564,  8519,  8519,
01913     8519,  -747,   263,  2797,   260,  -747,  -747,   237,   207,    43,
01914      206,   298,   254,   265,  -747,  -747,  -747,  4969,  -747,  7320,
01915     7320,  -747,  -747,  5208,  -747,  8628,   661,  -747,   272,   287,
01916     4694,  -747,  -747,  -747,   295,   307,  -747,   304,    51,   416,
01917      619,  7211,  4434,   384,   193,  1104,   -31,   399,  -747,   458,
01918      419,   221,   300,  -747,   260,   430,   300,  -747,   -31,   497,
01919      501,  9266,   442,  -747,   351,   366,   383,   409,  -747,  -747,
01920     -747,  -747,  -747,  -747,   644,  -747,   754,   813,   605,   464,
01921      819,   478,    68,   530,   532,  -747,  -747,  -747,  -747,  -747,
01922     -747,  -747,  5317,  8628,  8628,  8628,  8628,  7211,  8628,  8628,
01923     -747,  -747,  7974,  -747,  4434,  6990,   470,  7974,  8519,  8519,
01924     8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,
01925     8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,
01926     8519,  8519,  8519,  8519,  9548,  7320,  9625,  3609,   458,    86,
01927       86,  8628,  8628,   193,   597,   480,   562,  -747,  -747,   454,
01928      601,    54,    76,    99,   331,   349,  8628,   481,  -747,    45,
01929      473,  -747,  -747,  -747,  -747,   217,   286,   305,   318,   321,
01930      347,   363,   376,   381,  -747,  -747,  -747,   391, 10549, 10549,
01931     -747,  -747,  -747,  -747,  8737,  8737,  -747,   535,  -747,  -747,
01932     -747,   388,  -747,  -747,  8519,  8519,  7429,  -747,  -747,  9702,
01933     7320,  9779,  8519,  8519,  7647,  -747,   -31,   492,  -747,  -747,
01934      -31,  -747,   506,   539,  -747,   106,  -747,  -747,  -747,  -747,
01935     -747,  6615,  -747,  8519,  4029,   508,  9702,  9779,  8519,  1104,
01936      -31,  -747,  -747,  5445,   541,   -31,  -747,  7756,  -747,  -747,
01937     7865,  -747,  -747,  -747,   272,   510,  -747,  -747,  -747,   543,
01938     9266,  9856,  7320,  9933,   774,  -747,  -747,  -747,  -747,  -747,
01939     -747,  -747,  -747,  -747,  -747,  -747,  -747,   313,  -747,  -747,
01940      491,  -747,  8519,  8519,  -747,  -747,  -747,  -747,  -747,  -747,
01941     -747,  -747,  -747,    32,  8519,  -747,   545,   546,  -747,   -31,
01942     9266,   551,  -747,  -747,  -747,   566,  9473,  -747,  -747,   416,
01943     2184,  2184,  2184,  2184,   781,   781,  2273,  2938,  2184,  2184,
01944     1364,  1364,   662,   662,  2656,   781,   781,   927,   927,   768,
01945      397,   397,   416,   416,   416,  3378,  6083,  3464,  6197,  -747,
01946      307,  -747,   -31,   647,  -747,   660,  -747,  -747,  3096,   650,
01947      688,  -747,  3754,   685,  4174,    56,    56,   597,  8083,   650,
01948      112, 10010,  7320, 10087,  -747,   458,  -747,   510,  -747,   193,
01949     -747,  -747,  -747, 10164,  7320, 10241,  3609,  8628,  1131,  -747,
01950     -747,  -747,  -747,  -747,  1739,  1739,    32,    32,  -747, 10608,
01951     -747,  2797,  -747,  -747,  6615, 10627,  -747,  8519,   260,  -747,
01952      265,  5969,  2673,   -31,   490,   500,  -747,  -747,  -747,  -747,
01953     7429,  7647,  -747,  -747,  8628,  2797,   570,  -747,   307,   307,
01954     2797,   213,  1104,  -747,   300,  9266,   543,   505,   282,   -31,
01955       38,   261,   603,  -747,  -747,  -747,  -747,   972,  -747,  -747,
01956     -747,  -747,  1223,    66,  -747,  -747,  -747,  -747,   580,  -747,
01957      583,   683,   589,   687,  -747,  -747,   893,  -747,  -747,  -747,
01958      416,   416,  -747,   576,  4839,  -747,  -747,   604,  8192,  -747,
01959      543,  9266,  8737,  8519,   630,  8737,  8737,  -747,   535,   608,
01960      677,  8737,  8737,  -747,  -747,   535,  -747,  -747,  -747,  8301,
01961      740,  -747,   588,  -747,   740,  -747,  -747,  -747,  -747,   650,
01962       44,  -747,   239,   257,   -31,   141,   145,  8628,   193,  -747,
01963     8628,  3609,   505,   282,  -747,   -31,   650,   106,  1223,  3609,
01964      193,  6754,  -747,  -747,  -747,  -747,  4839,  4694,  8519,    32,
01965     -747,  -747,  -747,  8519,  8519,   507,  8519,  8519,   636,   106,
01966     -747,  -747,  -747,   291,  8519,  -747,   972,   457,  -747,   651,
01967      -31,  -747,   639,  4839,  4694,  -747,  1223,  -747,  -747,  1223,
01968     -747,  -747,   598,  -747,  -747,  4694,  -747,  -747,  -747,  -747,
01969     -747,   681,  1017,   639,   679,   654,  -747,   656,   657,  -747,
01970     -747,   789,  8519,   664,   543,  2797,  8519,  -747,  2797,  -747,
01971     2797,  -747,  -747,  8737,  -747,  2797,  -747,  2797,  -747,   545,
01972     -747,   713,  -747,  4304,   796,  -747,  8628,   650,  -747,   650,
01973     4839,  4839,  -747,  8410,  3899,   189,    56,  -747,   193,   650,
01974     -747,  -747,  -747,   -31,   650,  -747,  -747,   799,   673,  2797,
01975     4694,  8519,  7647,  -747,  -747,   -31,   884,   671,  1079,  -747,
01976      -31,   803,   686,  -747,   676,   678,  -747,   684,  -747,   694,
01977      684,   690,  9371,  -747,   699,  -747,  -747,   711,  -747,  1251,
01978     -747,  1251,  -747,   598,  -747,  -747,   700,  2797,  -747,  2797,
01979     9476,    86,  -747,  -747,  4839,  -747,  -747,    86,  -747,  -747,
01980      650,   650,  -747,   365,  -747,  3609,  -747,  -747,  -747,  -747,
01981     1131,  -747,  -747,   706,  -747,   707,   884,   716,  -747,  -747,
01982     -747,  -747,  1223,  -747,   598,  -747,   598,  -747,   598,  -747,
01983     -747,  -747,   790,   520,  1017,  -747,   708,   715,   684,  -747,
01984      717,   684,   797,  -747,   523,   366,   383,   409,  3609,  -747,
01985     3754,  -747,  -747,  -747,  -747,  -747,  4839,   650,  3609,  -747,
01986      884,   707,   884,   721,   684,   727,   684,   684,  -747, 10318,
01987     -747,  1251,  -747,   598,  -747,  -747,   598,  -747,  -747,   510,
01988    10395,  7320, 10472,   688,   588,   650,  -747,   650,   707,   884,
01989     -747,   598,  -747,  -747,  -747,   730,   731,   684,   735,   684,
01990      684,    55,   282,   -31,   128,   158,  -747,  -747,  -747,  -747,
01991      707,   684,  -747,   598,  -747,  -747,  -747,   163,  -747,   684,
01992     -747
01993 };
01994 
01995 /* YYPGOTO[NTERM-NUM].  */
01996 static const yytype_int16 yypgoto[] =
01997 {
01998     -747,  -747,  -747,   452,  -747,    28,  -747,  -545,   277,  -747,
01999       39,  -747,  -293,   184,   -58,    71,  -747,  -169,  -747,    -7,
02000      791,  -142,   -13,   -37,  -747,  -396,   -29,  1623,  -312,   788,
02001      -54,  -747,   -25,  -747,  -747,    20,  -747,  1066,  -747,   -45,
02002     -747,    11,    47,  -324,   115,     5,  -747,  -322,  -196,    53,
02003     -295,     8,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
02004     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,     2,  -747,
02005     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   205,
02006     -338,  -516,   -72,  -618,  -747,  -722,  -671,   147,  -747,  -489,
02007     -747,  -600,  -747,   -12,  -747,  -747,  -747,  -747,  -747,  -747,
02008     -747,  -747,  -747,   798,  -747,  -747,  -531,  -747,   -50,  -747,
02009     -747,  -747,  -747,  -747,  -747,   811,  -747,  -747,  -747,  -747,
02010     -747,  -747,  -747,  -747,   856,  -747,  -140,  -747,  -747,  -747,
02011     -747,     7,  -747,    12,  -747,  1268,  1605,   823,  1289,  1575,
02012     -747,  -747,    35,  -387,  -697,  -568,  -690,   273,  -696,  -746,
02013       72,   181,  -747,  -526,  -747,  -449,   270,  -747,  -747,  -747,
02014       97,  -360,   758,  -276,  -747,  -747,   -56,    -4,   278,  -585,
02015     -214,     6,   -18,    -2
02016 };
02017 
02018 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
02019    positive, shift that token.  If negative, reduce the rule which
02020    number is the opposite.  If zero, do what YYDEFACT says.
02021    If YYTABLE_NINF, syntax error.  */
02022 #define YYTABLE_NINF -574
02023 static const yytype_int16 yytable[] =
02024 {
02025      111,   273,   544,   227,    81,   644,    81,   254,   725,   201,
02026      201,   532,   498,   201,   493,   192,   689,   405,   208,   208,
02027      193,   706,   208,   225,   262,   228,   340,   222,   190,   343,
02028      688,   344,   112,   221,   733,   192,   247,   375,   441,   306,
02029      193,    67,   443,    67,   596,   558,   559,   292,   190,   253,
02030      257,    81,   208,   838,   616,   264,   833,   541,   530,   741,
02031      538,   263,   794,   -93,   208,   846,   799,   634,  -103,   207,
02032      207,   291,   380,   207,   589,   190,   593,   380,   264,   -99,
02033      596,     3,   589,   685,   263,   208,   208,   716,   717,   208,
02034      349,   360,   360,   291,   660,   743,   263,   263,   263,   541,
02035      430,  -100,   574,   575,   251,   909,   888,  -330,   652,   805,
02036      230,   190,  -489,   213,   213,   387,   224,   213,   378,   644,
02037      810,   386,   279,   530,  -107,   538,   334,   768,   619,   470,
02038     -489,   205,   215,   285,   -99,   216,   461,  -106,   464,   240,
02039      468,  -102,   830,   298,   299,  -490,   653,   -93,   252,   256,
02040      390,   609,   -99,   392,   393,   885,   809,   300,   560,   833,
02041     -330,  -330,   489,   847,   814,   -90,  -102,  -100,   741,   827,
02042     -104,  -104,   379,   744,   471,   281,  -101,   609,   -93,   335,
02043      336,   -93,   381,   644,   803,   -93,   302,   381,   432,   288,
02044      288,   289,   289,   220,   -90,   909,   838,  -551,   -91,    81,
02045     -103,   288,  -103,   289,   769,   398,   833,   846,   888,   303,
02046      201,   398,   201,   201,  -101,   931,   -91,   405,   414,   208,
02047      835,   208,   208,   839,   448,   208,   433,   208,   694,   247,
02048      820,   288,    81,   289,   249,   476,   477,   478,   479,   -98,
02049      705,   596,   223,    81,    81,   742,   221,   224,   307,   386,
02050      291,   704,   -97,   224,   444,   923,    56,   486,   741,   644,
02051      741,   958,   497,   264,  -103,   774,   384,   338,   338,   263,
02052      207,   338,   207,  -102,   389,  -102,   491,   609,   589,   589,
02053      429,   -93,  -105,   545,   546,   -95,   -95,   547,   980,   609,
02054      874,   247,   399,  -490,    81,   208,   208,   208,   208,    81,
02055      208,   208,  -481,  -104,   208,  -104,    81,   264,  -101,   208,
02056     -101,   283,   284,   263,   213,  -100,   213,  -412,   741,   933,
02057      475,   813,   -71,   907,   223,   910,   243,   648,   201,   -92,
02058      927,    67,   406,   414,   409,   391,   480,   208,   288,    81,
02059      289,   403,   924,   208,   208,   400,   401,   537,   395,   291,
02060      586,   588,   804,   -85,   528,   487,  -481,  -548,   208,   254,
02061      487,   437,   741,  -107,   741,   562,   935,  -285,   438,   493,
02062      -95,  -480,   394,   485,   455,  -549,  -412,   396,   494,   -94,
02063      793,  -551,   548,   957,   790,   402,   208,   208,   987,   426,
02064     -482,   741,   588,   201,   722,   254,   603,   -96,   414,  -552,
02065      731,   -95,   208,  -483,   -95,   404,  -485,   415,   -95,   417,
02066      398,   398,   537,   448,   422,   968,  -475,   456,   457,   528,
02067     -285,  -285,   111,   424,  -552,  -480,    81,  -412,   192,  -412,
02068     -412,   644,  -484,   193,  -478,    81,   451,   217,   537,   657,
02069      440,   190,   400,   427,  -482,   201,   528,   438,  -486,   220,
02070      414,  -487,   264,   448,   208,   578,   580,  -483,   263,   647,
02071     -485,  -475,   596,    67,   537,   308,  -478,  -548,  -488,  -475,
02072     -475,   528,   612,  -548,   243,   428,   569,   338,   338,   338,
02073      338,   656,   481,   482,   308,  -549,  -484,  -478,  -478,   452,
02074      453,  -549,   264,   590,  -278,   298,   299,  -106,   263,   781,
02075      589,   416,  -486,   497,  -487,  -487,   788,   425,   -70,   735,
02076      664,   623,   624,   625,   626,  -475,   331,   332,   333,   243,
02077     -478,  -488,  -488,   918,   434,   338,   338,   431,   669,   920,
02078      570,  -555,   722,   556,   614,   668,   676,   557,   681,   551,
02079      555,   667,   721,   675,    81,   201,    81,  -278,  -278,   673,
02080      414,   687,   687,   445,   208,   588,   254,   201,   563,   720,
02081      446,   447,   414,   436,   537,   699,   208,   442,    81,   208,
02082      465,   528,   676,   676,   656,   656,   537,   726,   732,   713,
02083      715,   243,   450,   528,   469,   673,   673,   727,   398,   669,
02084     -555,   192,   552,   553,   821,  -286,   193,   826,   472,  -102,
02085      473,   690,   796,   793,   190,   939,   208,   676,   950,  -104,
02086      492,   564,   565,   773,   548,   669,  -101,   264,   550,   667,
02087      673,   712,   714,   263,   448,   474,   554,   973,   761,   582,
02088      623,   624,   625,   626,   789,   598,   748,   649,   748,   806,
02089      748,  -555,   808,  -555,  -555,   607,   600,  -551,  -286,  -286,
02090      735,   770,   623,   624,   625,   626,    81,   816,   564,   565,
02091      677,   951,   952,   264,   208,   627,   455,   208,   208,   263,
02092      463,   628,   629,   208,   208,   662,   609,   792,   795,   601,
02093      795,   -85,   795,   615,   597,  -264,   658,   627,   599,   824,
02094      669,   661,   630,   602,   629,   631,   679,   728,   683,   208,
02095      385,   669,   208,    81,   807,   455,   428,   730,   611,   456,
02096      457,    81,   734,   613,   630,   418,   815,   656,    81,    81,
02097      746,   762,  -107,   749,   419,   420,   398,   856,  -106,   752,
02098      308,   190,   487,   494,   671,   751,   777,   779,   867,   754,
02099      770,   776,   784,   786,  -265,    81,    81,   672,   456,   457,
02100      458,   707,   782,   -98,   691,   793,  -102,    81,   872,   -97,
02101      110,   770,   110,   748,   783,   748,   748,   659,   735,  -104,
02102      623,   624,   625,   626,   110,   110,   822,   254,   110,   329,
02103      330,   331,   332,   333,   762,   208,  -101,   -93,   729,   862,
02104      842,   828,   866,   848,   849,    81,   851,   853,   208,   855,
02105      -95,   860,    81,    81,  -266,   864,    81,   110,   110,   881,
02106      882,   886,   687,   890,   876,   455,   892,   -92,   894,   682,
02107      110,   684,    81,   891,   896,   905,   622,   901,   623,   624,
02108      625,   626,   748,   748,   898,   748,   308,   748,   748,   904,
02109     -267,   110,   110,   929,   903,   110,   938,   930,   941,   308,
02110      263,   321,   322,   949,   858,   943,   932,   946,   456,   457,
02111      460,   959,   914,   627,   321,   322,    81,   961,   263,   628,
02112      629,   795,  -551,  -552,   455,   983,   606,    81,   364,   347,
02113      455,   338,   977,   825,   338,   329,   330,   331,   332,   333,
02114      630,   382,   940,   631,   802,   326,   327,   328,   329,   330,
02115      331,   332,   333,   976,   748,   748,   748,   383,   748,   748,
02116      750,   811,   753,   277,   376,   928,   632,   456,   457,   462,
02117       81,   906,    81,   456,   457,   466,   765,   834,    81,     0,
02118       81,   771,   748,   748,   748,   748,   735,     0,   623,   624,
02119      625,   626,     0,     0,   201,     0,     0,   756,   757,   414,
02120      758,   681,   795,   208,     0,   110,    44,    45,     0,   528,
02121        0,     0,     0,   537,     0,   748,   748,   748,   748,   669,
02122      528,     0,     0,   736,     0,   110,     0,   110,   110,   748,
02123      338,   110,     0,   110,     0,   812,     0,   748,   110,     0,
02124        0,     0,     0,   817,   818,   308,     0,     0,     0,   110,
02125      110,     0,   868,     0,   869,     0,     0,   823,     0,     0,
02126      321,   322,     0,     0,   877,     0,     0,     0,   829,   879,
02127      831,   832,   837,     0,   735,   840,   623,   624,   625,   626,
02128        0,     0,   841,     0,     0,   850,     0,   852,   854,     0,
02129        0,     0,     0,   328,   329,   330,   331,   332,   333,     0,
02130      110,   110,   110,   110,   110,   110,   110,   110,     0,     0,
02131      110,   736,   110,     0,     0,   110,     0,   737,     0,   843,
02132      863,   623,   624,   625,   626,   921,   922,   870,   871,     0,
02133        0,   873,   203,   203,     0,     0,   203,     0,     0,     0,
02134        0,   878,     0,   110,     0,   110,     0,   883,     0,   110,
02135      110,     0,     0,   884,   893,   895,     0,   897,   889,   899,
02136      900,     0,   236,   239,   110,     0,     0,   203,   203,     0,
02137        0,     0,     0,     0,   908,     0,   911,     0,   286,   287,
02138        0,   735,   956,   623,   624,   625,   626,     0,     0,     0,
02139        0,   919,   110,   110,   293,   294,   295,   296,   297,     0,
02140        0,     0,     0,     0,     0,     0,     0,     0,   110,     0,
02141      978,     0,   979,     0,     0,   934,     0,   936,   736,     0,
02142        0,   937,     0,     0,   887,     0,   942,   944,   945,     0,
02143      947,   948,   110,   622,     0,   623,   624,   625,   626,     0,
02144        0,   110,     0,     0,     0,   953,     0,   954,     0,     0,
02145        0,     0,     0,   955,   960,   962,   963,   964,     0,     0,
02146      110,     0,     0,     0,   967,     0,   969,     0,     0,   970,
02147      627,     0,     0,     0,     0,     0,   628,   629,     0,     0,
02148        0,     0,     0,     0,   981,     0,     0,   982,   984,   985,
02149      986,     0,     0,     0,     0,     0,     0,   630,     0,     0,
02150      631,   988,     0,     0,     0,     0,   989,     0,     0,   990,
02151        0,   203,     0,     0,   203,   203,   286,     0,     0,     0,
02152      105,     0,   105,   708,     0,   622,     0,   623,   624,   625,
02153      626,     0,     0,   203,     0,   203,   203,     0,     0,     0,
02154        0,   108,     0,   108,     0,     0,     0,     0,     0,     0,
02155      110,     0,   110,   761,     0,   623,   624,   625,   626,     0,
02156      110,     0,   627,     0,     0,     0,     0,   105,   628,   629,
02157        0,   265,   110,     0,   110,   110,     0,     0,     0,     0,
02158        0,     0,     0,     0,     0,     0,     0,     0,   108,   630,
02159      627,     0,   631,     0,   265,     0,   628,   629,     0,     0,
02160        0,     0,     0,     0,     0,     0,   351,   361,   361,   361,
02161        0,     0,   110,     0,     0,     0,     0,   630,   203,     0,
02162      631,     0,     0,   496,   499,   500,   501,   502,   503,   504,
02163      505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
02164      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
02165        0,   203,     0,     0,     0,     0,     0,     0,     0,     0,
02166        0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
02167      110,     0,     0,   110,   110,     0,     0,     0,     0,   110,
02168      110,     0,   308,   309,   310,   311,   312,   313,   314,   315,
02169      316,   317,   318,  -574,  -574,     0,     0,   321,   322,     0,
02170      579,   581,     0,     0,     0,   110,     0,     0,   110,   110,
02171      585,   203,   203,     0,     0,   105,   203,   110,   579,   581,
02172      203,     0,     0,     0,   110,   110,   324,   325,   326,   327,
02173      328,   329,   330,   331,   332,   333,   108,     0,     0,   605,
02174        0,     0,     0,     0,   610,     0,     0,     0,   105,     0,
02175        0,   110,   110,   203,     0,     0,   203,     0,     0,   105,
02176      105,     0,     0,   110,     0,     0,     0,     0,   203,   108,
02177        0,     0,     0,     0,     0,     0,     0,     0,     0,   265,
02178      108,   108,     0,     0,     0,     0,     0,     0,   650,   651,
02179        0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
02180      203,   110,     0,     0,   110,     0,     0,     0,   110,   110,
02181      105,     0,   110,     0,     0,   105,     0,     0,     0,     0,
02182        0,     0,   105,   265,     0,     0,     0,   109,   110,   109,
02183        0,   108,     0,     0,     0,     0,   108,     0,     0,     0,
02184        0,     0,     0,   108,     0,     0,     0,     0,     0,     0,
02185        0,     0,     0,     0,     0,   105,     0,   106,     0,   106,
02186        0,     0,     0,     0,   203,     0,     0,     0,   203,     0,
02187        0,     0,   110,     0,   109,    78,   108,    78,   267,     0,
02188      203,     0,     0,   110,     0,     0,     0,     0,     0,     0,
02189        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02190        0,   267,     0,   203,   106,     0,     0,     0,   266,     0,
02191        0,     0,     0,   353,   363,   363,   203,   203,     0,     0,
02192        0,     0,    78,     0,     0,     0,   110,     0,   110,     0,
02193        0,   266,     0,     0,   110,     0,   110,     0,     0,     0,
02194        0,     0,   105,   352,   362,   362,   362,     0,     0,     0,
02195        0,   105,     0,     0,     0,     0,     0,     0,     0,   110,
02196        0,   348,     0,   108,     0,     0,     0,     0,   265,     0,
02197        0,     0,   108,     0,   203,     0,     0,     0,   585,   775,
02198        0,   778,   780,     0,     0,     0,     0,   785,   787,  -573,
02199        0,     0,     0,     0,     0,   203,     0,  -573,  -573,  -573,
02200        0,     0,  -573,  -573,  -573,     0,  -573,     0,   265,     0,
02201        0,     0,     0,     0,     0,     0,  -573,     0,     0,     0,
02202        0,     0,   109,     0,     0,     0,  -573,  -573,     0,  -573,
02203     -573,  -573,  -573,  -573,   819,     0,     0,     0,     0,   778,
02204      780,     0,   785,   787,     0,     0,     0,     0,     0,     0,
02205      203,     0,   106,     0,     0,   109,     0,     0,     0,     0,
02206      105,     0,   105,     0,     0,     0,   109,   109,     0,     0,
02207       78,     0,     0,     0,  -573,     0,     0,     0,     0,     0,
02208        0,   108,     0,   108,   105,   106,   267,     0,   203,     0,
02209        0,     0,   857,     0,     0,     0,   106,   106,     0,   859,
02210        0,     0,     0,    78,     0,   108,     0,     0,     0,     0,
02211        0,     0,     0,     0,    78,    78,   266,   109,     0,   203,
02212        0,     0,   109,     0,     0,     0,  -573,     0,  -573,   109,
02213      267,   220,  -573,   265,  -573,     0,  -573,   859,   203,     0,
02214        0,     0,     0,     0,     0,     0,     0,   106,     0,     0,
02215        0,     0,   106,     0,     0,     0,     0,     0,     0,   106,
02216      266,     0,   109,     0,     0,    78,     0,     0,     0,     0,
02217       78,     0,   105,     0,     0,     0,     0,    78,     0,   265,
02218      495,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02219        0,     0,   106,   108,     0,     0,     0,     0,     0,     0,
02220        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02221       78,     0,     0,     0,     0,     0,     0,     0,     0,   105,
02222        0,     0,     0,     0,     0,     0,     0,   105,     0,     0,
02223        0,     0,     0,     0,   105,   105,     0,     0,     0,     0,
02224      108,     0,     0,     0,     0,     0,     0,     0,   108,   109,
02225        0,     0,     0,     0,     0,   108,   108,     0,   109,     0,
02226        0,   105,   105,     0,     0,     0,     0,   203,     0,     0,
02227        0,     0,     0,   105,     0,   267,     0,     0,     0,   106,
02228        0,     0,   108,   108,     0,     0,     0,     0,   106,     0,
02229        0,     0,     0,     0,   108,     0,     0,    78,     0,     0,
02230        0,     0,     0,     0,     0,   266,    78,     0,     0,     0,
02231        0,   105,     0,     0,     0,   267,     0,     0,   105,   105,
02232        0,     0,   105,     0,     0,     0,     0,     0,     0,     0,
02233        0,     0,   108,     0,     0,     0,     0,     0,   105,   108,
02234      108,     0,     0,   108,     0,   266,     0,     0,     0,     0,
02235        0,     0,     0,     0,     0,     0,     0,     0,     0,   108,
02236      361,     0,     0,     0,     0,     0,     0,   109,     0,   109,
02237        0,     0,     0,     0,     0,     0,     0,     0,   915,     0,
02238        0,     0,   105,     0,     0,     0,     0,     0,     0,     0,
02239        0,   109,     0,   105,     0,     0,     0,   106,     0,   106,
02240        0,     0,     0,   108,     0,     0,     0,     0,     0,     0,
02241        0,     0,     0,     0,   108,    78,     0,    78,     0,     0,
02242        0,   106,     0,     0,     0,     0,     0,     0,     0,     0,
02243        0,     0,     0,     0,     0,     0,   105,     0,   105,    78,
02244      267,     0,     0,     0,   105,     0,   105,     0,     0,     0,
02245        0,     0,     0,     0,     0,     0,     0,   108,     0,   108,
02246        0,     0,     0,     0,     0,   108,     0,   108,     0,     0,
02247      266,   760,     0,     0,     0,     0,     0,     0,     0,   109,
02248        0,     0,     0,     0,     0,     0,   267,     0,     0,     0,
02249        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02250        0,     0,   308,  -574,  -574,  -574,  -574,   313,   314,   106,
02251        0,  -574,  -574,     0,     0,     0,   266,   321,   322,     0,
02252        0,     0,     0,     0,     0,     0,   109,    78,     0,     0,
02253        0,     0,     0,     0,   109,   495,     0,     0,     0,     0,
02254        0,   109,   109,     0,     0,     0,   324,   325,   326,   327,
02255      328,   329,   330,   331,   332,   333,   106,     0,     0,     0,
02256        0,     0,     0,     0,   106,     0,     0,     0,   109,   109,
02257        0,   106,   106,     0,    78,     0,     0,     0,     0,     0,
02258      109,     0,    78,     0,     0,     0,     0,     0,     0,    78,
02259       78,   308,   309,   310,   311,   312,   313,   314,   106,   106,
02260      317,   318,     0,     0,     0,     0,   321,   322,     0,     0,
02261      106,     0,     0,     0,     0,     0,    78,    78,   109,     0,
02262        0,     0,     0,     0,     0,   109,   109,     0,    78,   109,
02263        0,     0,     0,     0,     0,   324,   325,   326,   327,   328,
02264      329,   330,   331,   332,   333,   109,     0,     0,   106,     0,
02265        0,     0,     0,     0,     0,   106,   106,     0,     0,   106,
02266        0,     0,     0,     0,     0,     0,    78,   363,     0,     0,
02267        0,     0,     0,    78,    78,   106,     0,    78,     0,     0,
02268        0,     0,     0,     0,     0,   917,     0,     0,     0,   109,
02269        0,     0,     0,    78,     0,     0,     0,   362,     0,     0,
02270      109,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02271        0,     0,     0,     0,     0,   916,     0,     0,     0,   106,
02272        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02273      106,     0,     0,   913,     0,     0,     0,    78,     0,     0,
02274        0,     0,     0,   109,     0,   109,     0,     0,    78,     0,
02275        0,   109,     0,   109,     0,     0,     0,     0,     0,     0,
02276        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02277        0,     0,     0,   106,     0,   106,     0,     0,     0,     0,
02278        0,   106,     0,   106,     0,     0,     0,     0,     0,     0,
02279        0,    78,     0,    78,     0,     0,     0,     0,     0,    78,
02280        0,    78,  -573,     4,     0,     5,     6,     7,     8,     9,
02281        0,     0,     0,    10,    11,     0,     0,     0,    12,     0,
02282       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02283        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02284        0,    27,     0,     0,     0,     0,     0,    28,    29,    30,
02285       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02286        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02287        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02288        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02289        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02290       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02291        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02292        0,     0,     0,  -285,    61,    62,    63,     0,     0,     0,
02293        0,  -285,  -285,  -285,     0,     0,  -285,  -285,  -285,     0,
02294     -285,     0,     0,     0,     0,     0,     0,  -573,     0,  -573,
02295     -285,  -285,  -285,     0,     0,     0,     0,     0,     0,     0,
02296     -285,  -285,     0,  -285,  -285,  -285,  -285,  -285,     0,     0,
02297        0,     0,     0,     0,   308,   309,   310,   311,   312,   313,
02298      314,   315,   316,   317,   318,   319,   320,     0,     0,   321,
02299      322,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02300     -285,  -285,  -285,  -285,     0,     0,  -285,  -285,  -285,     0,
02301      724,  -285,     0,     0,     0,     0,   323,  -285,   324,   325,
02302      326,   327,   328,   329,   330,   331,   332,   333,     0,     0,
02303     -285,     0,  -105,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02304     -285,  -285,  -285,  -285,  -285,     0,     0,     0,     0,     0,
02305        0,     0,     0,   224,     0,     0,     0,     0,     0,     0,
02306     -285,  -285,  -285,  -285,  -411,     0,  -285,  -285,  -285,     0,
02307     -285,     0,  -411,  -411,  -411,     0,     0,  -411,  -411,  -411,
02308        0,  -411,     0,     0,     0,     0,     0,     0,     0,     0,
02309     -411,  -411,  -411,     0,     0,     0,     0,     0,     0,     0,
02310        0,  -411,  -411,     0,  -411,  -411,  -411,  -411,  -411,     0,
02311        0,     0,     0,     0,     0,   308,   309,   310,   311,   312,
02312      313,   314,   315,   316,   317,   318,   319,   320,     0,     0,
02313      321,   322,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
02314     -411,  -411,  -411,  -411,  -411,     0,     0,  -411,  -411,  -411,
02315        0,     0,  -411,     0,     0,     0,     0,   323,  -411,   324,
02316      325,   326,   327,   328,   329,   330,   331,   332,   333,     0,
02317        0,     0,     0,     0,  -411,     0,  -411,  -411,  -411,  -411,
02318     -411,  -411,  -411,  -411,  -411,  -411,     0,     0,     0,     0,
02319        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02320     -411,  -411,  -411,  -411,  -411,  -279,   220,  -411,  -411,  -411,
02321        0,  -411,     0,  -279,  -279,  -279,     0,     0,  -279,  -279,
02322     -279,     0,  -279,     0,     0,     0,     0,     0,     0,     0,
02323        0,     0,  -279,  -279,  -279,     0,     0,     0,     0,     0,
02324        0,     0,  -279,  -279,     0,  -279,  -279,  -279,  -279,  -279,
02325        0,     0,     0,     0,     0,     0,   308,   309,   310,   311,
02326      312,   313,   314,   315,     0,   317,   318,     0,     0,     0,
02327        0,   321,   322,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02328     -279,  -279,  -279,  -279,  -279,  -279,     0,     0,  -279,  -279,
02329     -279,     0,     0,  -279,     0,     0,     0,     0,     0,  -279,
02330      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
02331        0,     0,  -279,     0,     0,  -279,  -279,  -279,  -279,  -279,
02332     -279,  -279,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,
02333        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02334        0,     0,  -279,  -279,  -279,  -279,  -573,     0,  -279,  -279,
02335     -279,     0,  -279,     0,  -573,  -573,  -573,     0,     0,  -573,
02336     -573,  -573,     0,  -573,     0,     0,     0,     0,     0,     0,
02337        0,     0,  -573,  -573,  -573,     0,     0,     0,     0,     0,
02338        0,     0,     0,  -573,  -573,     0,  -573,  -573,  -573,  -573,
02339     -573,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02340        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02341        0,     0,     0,     0,  -573,  -573,  -573,  -573,  -573,  -573,
02342     -573,  -573,  -573,  -573,  -573,  -573,  -573,     0,     0,  -573,
02343     -573,  -573,     0,     0,  -573,     0,     0,     0,     0,     0,
02344     -573,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02345        0,     0,     0,     0,     0,     0,  -573,     0,  -573,  -573,
02346     -573,  -573,  -573,  -573,  -573,  -573,  -573,  -573,     0,     0,
02347        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02348        0,     0,  -573,  -573,  -573,  -573,  -573,  -292,   220,  -573,
02349     -573,  -573,     0,  -573,     0,  -292,  -292,  -292,     0,     0,
02350     -292,  -292,  -292,     0,  -292,     0,     0,     0,     0,     0,
02351        0,     0,     0,     0,  -292,  -292,     0,     0,     0,     0,
02352        0,     0,     0,     0,  -292,  -292,     0,  -292,  -292,  -292,
02353     -292,  -292,     0,     0,     0,     0,     0,     0,     0,     0,
02354        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02355        0,     0,     0,     0,     0,  -292,  -292,  -292,  -292,  -292,
02356     -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,     0,     0,
02357     -292,  -292,  -292,     0,     0,  -292,     0,     0,     0,     0,
02358        0,  -292,     0,     0,     0,     0,     0,     0,     0,     0,
02359        0,     0,     0,     0,     0,     0,     0,  -292,     0,  -292,
02360     -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,     0,
02361        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02362        0,     0,     0,     0,  -292,  -292,  -292,  -292,  -555,   217,
02363     -292,  -292,  -292,     0,  -292,     0,  -555,  -555,  -555,     0,
02364        0,     0,  -555,  -555,     0,  -555,     0,     0,     0,     0,
02365        0,     0,     0,     0,  -555,     0,     0,     0,     0,     0,
02366        0,     0,     0,     0,     0,  -555,  -555,     0,  -555,  -555,
02367     -555,  -555,  -555,     0,     0,     0,     0,     0,     0,     0,
02368        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02369        0,     0,     0,     0,     0,     0,  -555,  -555,  -555,  -555,
02370     -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,     0,
02371        0,  -555,  -555,  -555,  -285,   665,     0,     0,     0,     0,
02372        0,     0,  -285,  -285,  -285,     0,     0,     0,  -285,  -285,
02373        0,  -285,     0,     0,     0,     0,     0,  -103,  -555,     0,
02374     -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,
02375        0,  -285,  -285,     0,  -285,  -285,  -285,  -285,  -285,     0,
02376        0,     0,     0,     0,  -555,  -555,  -555,  -555,   -94,     0,
02377        0,  -555,     0,  -555,     0,  -555,     0,     0,     0,     0,
02378        0,     0,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02379     -285,  -285,  -285,  -285,  -285,     0,     0,  -285,  -285,  -285,
02380        0,   666,     0,     0,     0,     0,     0,     0,     0,     0,
02381        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02382        0,     0,     0,  -105,  -285,     0,  -285,  -285,  -285,  -285,
02383     -285,  -285,  -285,  -285,  -285,  -285,     0,     0,     0,     0,
02384        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02385        0,  -285,  -285,  -285,   -96,     0,     0,  -285,     0,  -285,
02386      241,  -285,     5,     6,     7,     8,     9,  -573,  -573,  -573,
02387       10,    11,     0,     0,  -573,    12,     0,    13,    14,    15,
02388       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02389       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02390        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02391       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02392        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02393        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02394        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02395        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02396       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02397        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02398        0,    61,    62,    63,     0,     0,     0,     0,     0,     0,
02399        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02400        0,     0,     0,     0,  -573,   241,  -573,     5,     6,     7,
02401        8,     9,     0,     0,  -573,    10,    11,     0,  -573,  -573,
02402       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02403        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02404       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02405       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02406       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02407       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02408        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02409       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02410        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02411        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02412        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02413        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02414        0,     0,     0,     0,     0,     0,     0,     0,     0,  -573,
02415      241,  -573,     5,     6,     7,     8,     9,     0,     0,  -573,
02416       10,    11,     0,     0,  -573,    12,  -573,    13,    14,    15,
02417       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02418       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02419        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02420       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02421        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02422        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02423        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02424        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02425       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02426        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02427        0,    61,    62,    63,     0,     0,     0,     0,     0,     0,
02428        4,     0,     5,     6,     7,     8,     9,     0,     0,     0,
02429       10,    11,     0,     0,  -573,    12,  -573,    13,    14,    15,
02430       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02431       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02432        0,     0,     0,     0,    28,    29,    30,    31,    32,    33,
02433       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02434        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02435        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02436        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02437        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02438       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02439        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02440        0,    61,    62,    63,     0,     0,     0,     0,     0,     0,
02441        0,     0,     0,     0,     0,     0,  -573,     0,     0,     0,
02442        0,     0,     0,     0,  -573,   241,  -573,     5,     6,     7,
02443        8,     9,     0,     0,  -573,    10,    11,     0,     0,  -573,
02444       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02445        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02446       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02447       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02448       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02449       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02450        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02451       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02452        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02453        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02454        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02455        0,     0,     0,     0,     0,   241,     0,     5,     6,     7,
02456        8,     9,     0,  -573,  -573,    10,    11,     0,     0,  -573,
02457       12,  -573,    13,    14,    15,    16,    17,    18,    19,     0,
02458        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02459       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02460       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02461       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02462       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02463        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02464       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02465        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02466        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02467        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02468        0,     0,     0,     0,     0,   241,     0,     5,     6,     7,
02469        8,     9,     0,     0,     0,    10,    11,     0,     0,  -573,
02470       12,  -573,    13,    14,    15,    16,    17,    18,    19,     0,
02471        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02472       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02473       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02474       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02475       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02476        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02477       48,     0,     0,   242,    50,     0,    51,    52,     0,    53,
02478        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02479        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02480        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02481        0,     0,     0,     0,     0,   241,     0,     5,     6,     7,
02482        8,     9,     0,     0,     0,    10,    11,  -573,     0,  -573,
02483       12,  -573,    13,    14,    15,    16,    17,    18,    19,     0,
02484        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02485       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02486       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02487       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02488       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02489        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02490       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02491        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02492        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02493        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02494        0,     0,     0,     0,     0,   241,     0,     5,     6,     7,
02495        8,     9,     0,     0,     0,    10,    11,  -573,     0,  -573,
02496       12,  -573,    13,    14,    15,    16,    17,    18,    19,     0,
02497        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02498       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02499       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02500       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02501       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02502        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02503       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02504        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02505        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02506        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02507        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02508        0,  -573,     0,     0,     0,     0,     0,     0,     0,  -573,
02509      241,  -573,     5,     6,     7,     8,     9,     0,     0,  -573,
02510       10,    11,     0,     0,     0,    12,     0,    13,    14,    15,
02511       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02512       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02513        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02514       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02515        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02516        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02517        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02518        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02519       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02520        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02521        0,    61,    62,    63,     0,     0,     0,     0,     0,     0,
02522        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02523       10,    11,     0,     0,  -573,    12,  -573,    13,    14,    15,
02524       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02525       21,    22,    23,    24,    25,    26,     0,     0,   194,     0,
02526        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02527       34,    35,    36,    37,    38,    39,    40,   195,    41,    42,
02528        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02529        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02530        0,     0,     0,     0,     0,   196,     0,     0,   197,    50,
02531        0,    51,    52,     0,   198,   199,    54,    55,    56,    57,
02532       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02533        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02534       11,    61,   200,    63,    12,     0,    13,    14,    15,    16,
02535       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02536       22,    23,    24,    25,    26,     0,   224,    27,     0,     0,
02537        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02538       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02539       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02540        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02541        0,     0,     0,     0,   196,     0,     0,   197,    50,     0,
02542       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02543       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02544        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02545       61,    62,    63,     0,     0,     0,     0,     0,     0,     0,
02546        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02547       11,     0,     0,   288,    12,   289,    13,    14,    15,    16,
02548       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02549       22,    23,    24,    25,    26,     0,     0,    27,     0,     0,
02550        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02551       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02552       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02553        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02554        0,     0,     0,     0,   196,     0,     0,   197,    50,     0,
02555       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02556       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02557        5,     6,     7,     8,     9,     0,     0,     0,    10,    11,
02558       61,    62,    63,    12,     0,    13,    14,    15,    16,    17,
02559       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02560       23,    24,    25,    26,     0,   224,    27,     0,     0,     0,
02561        0,     0,    28,    29,    30,    31,    32,    33,    34,    35,
02562       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02563       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02564        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02565        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02566       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02567       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02568        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02569       62,    63,     0,     0,     0,     0,     0,     0,     5,     6,
02570        7,     8,     9,     0,     0,     0,    10,    11,     0,     0,
02571        0,    12,   474,    13,    14,    15,    16,    17,    18,    19,
02572        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02573       25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
02574       28,    29,     0,    31,    32,    33,    34,    35,    36,    37,
02575       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02576        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02577        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02578        0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
02579       53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02580        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02581        0,     0,     0,     0,     0,     0,     0,    61,    62,    63,
02582        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02583        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02584      474,   113,   114,   115,   116,   117,   118,   119,   120,   121,
02585      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
02586      132,   133,   134,   135,   136,     0,     0,     0,   137,   138,
02587      139,   365,   366,   367,   368,   144,   145,   146,     0,     0,
02588        0,     0,     0,   147,   148,   149,   150,   369,   370,   371,
02589      372,   155,    37,    38,   373,    40,     0,     0,     0,     0,
02590        0,     0,     0,     0,   157,   158,   159,   160,   161,   162,
02591      163,   164,   165,     0,     0,   166,   167,     0,     0,   168,
02592      169,   170,   171,     0,     0,     0,     0,     0,     0,     0,
02593        0,     0,     0,   172,     0,     0,     0,     0,     0,     0,
02594        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02595      173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
02596        0,   183,   184,     0,     0,     0,     0,     0,  -548,  -548,
02597     -548,     0,  -548,     0,     0,     0,  -548,  -548,     0,   185,
02598      374,  -548,     0,  -548,  -548,  -548,  -548,  -548,  -548,  -548,
02599        0,  -548,     0,     0,     0,  -548,  -548,  -548,  -548,  -548,
02600     -548,  -548,     0,     0,  -548,     0,     0,     0,     0,     0,
02601        0,  -548,     0,     0,  -548,  -548,  -548,  -548,  -548,  -548,
02602     -548,  -548,  -548,  -548,  -548,  -548,     0,  -548,  -548,  -548,
02603        0,  -548,  -548,     0,     0,     0,     0,     0,     0,     0,
02604        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02605        0,  -548,     0,     0,  -548,  -548,     0,  -548,  -548,     0,
02606     -548,  -548,  -548,  -548,  -548,  -548,  -548,  -548,  -548,     0,
02607        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02608        0,     0,     0,     0,     0,     0,     0,  -548,  -548,  -548,
02609        0,     0,     0,     0,     0,  -549,  -549,  -549,     0,  -549,
02610        0,  -548,     0,  -549,  -549,     0,     0,  -548,  -549,     0,
02611     -549,  -549,  -549,  -549,  -549,  -549,  -549,     0,  -549,     0,
02612        0,     0,  -549,  -549,  -549,  -549,  -549,  -549,  -549,     0,
02613        0,  -549,     0,     0,     0,     0,     0,     0,  -549,     0,
02614        0,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,
02615     -549,  -549,  -549,     0,  -549,  -549,  -549,     0,  -549,  -549,
02616        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02617        0,     0,     0,     0,     0,     0,     0,     0,  -549,     0,
02618        0,  -549,  -549,     0,  -549,  -549,     0,  -549,  -549,  -549,
02619     -549,  -549,  -549,  -549,  -549,  -549,     0,     0,     0,     0,
02620        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02621        0,     0,     0,     0,  -549,  -549,  -549,     0,     0,     0,
02622        0,     0,  -551,  -551,  -551,     0,  -551,     0,  -549,     0,
02623     -551,  -551,     0,     0,  -549,  -551,     0,  -551,  -551,  -551,
02624     -551,  -551,  -551,  -551,     0,     0,     0,     0,     0,  -551,
02625     -551,  -551,  -551,  -551,  -551,  -551,     0,     0,  -551,     0,
02626        0,     0,     0,     0,     0,  -551,     0,     0,  -551,  -551,
02627     -551,  -551,  -551,  -551,  -551,  -551,  -551,  -551,  -551,  -551,
02628        0,  -551,  -551,  -551,     0,  -551,  -551,     0,     0,     0,
02629        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02630        0,     0,     0,     0,     0,  -551,   723,     0,  -551,  -551,
02631        0,  -551,  -551,     0,  -551,  -551,  -551,  -551,  -551,  -551,
02632     -551,  -551,  -551,     0,     0,     0,     0,     0,  -103,     0,
02633        0,     0,     0,     0,     0,     0,  -553,  -553,  -553,     0,
02634     -553,  -551,  -551,  -551,  -553,  -553,     0,     0,     0,  -553,
02635        0,  -553,  -553,  -553,  -553,  -553,  -553,  -553,     0,     0,
02636        0,  -551,     0,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
02637        0,     0,  -553,     0,     0,     0,     0,     0,     0,  -553,
02638        0,     0,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
02639     -553,  -553,  -553,  -553,     0,  -553,  -553,  -553,     0,  -553,
02640     -553,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02641        0,     0,     0,     0,     0,     0,     0,     0,     0,  -553,
02642        0,     0,  -553,  -553,     0,  -553,  -553,     0,  -553,  -553,
02643     -553,  -553,  -553,  -553,  -553,  -553,  -553,     0,     0,     0,
02644        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02645     -554,  -554,  -554,     0,  -554,  -553,  -553,  -553,  -554,  -554,
02646        0,     0,     0,  -554,     0,  -554,  -554,  -554,  -554,  -554,
02647     -554,  -554,     0,     0,     0,  -553,     0,  -554,  -554,  -554,
02648     -554,  -554,  -554,  -554,     0,     0,  -554,     0,     0,     0,
02649        0,     0,     0,  -554,     0,     0,  -554,  -554,  -554,  -554,
02650     -554,  -554,  -554,  -554,  -554,  -554,  -554,  -554,     0,  -554,
02651     -554,  -554,     0,  -554,  -554,     0,     0,     0,     0,     0,
02652        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02653        0,     0,     0,  -554,     0,     0,  -554,  -554,     0,  -554,
02654     -554,     0,  -554,  -554,  -554,  -554,  -554,  -554,  -554,  -554,
02655     -554,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02656        0,     0,     0,     0,     0,     0,     0,     0,     0,  -554,
02657     -554,  -554,     0,     0,     0,     0,     0,     0,     0,     0,
02658        0,     0,     0,     0,     0,     0,     0,     0,     0,  -554,
02659      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
02660      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
02661      133,   134,   135,   136,     0,     0,     0,   137,   138,   139,
02662      140,   141,   142,   143,   144,   145,   146,     0,     0,     0,
02663        0,     0,   147,   148,   149,   150,   151,   152,   153,   154,
02664      155,   270,   271,   156,   272,     0,     0,     0,     0,     0,
02665        0,     0,     0,   157,   158,   159,   160,   161,   162,   163,
02666      164,   165,     0,     0,   166,   167,     0,     0,   168,   169,
02667      170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
02668        0,     0,   172,     0,     0,     0,     0,     0,     0,     0,
02669        0,     0,     0,     0,     0,     0,     0,     0,     0,   173,
02670      174,   175,   176,   177,   178,   179,   180,   181,   182,     0,
02671      183,   184,     0,     0,     0,     0,     0,     0,     0,     0,
02672        0,     0,     0,     0,     0,     0,     0,     0,   185,   113,
02673      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
02674      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02675      134,   135,   136,     0,     0,     0,   137,   138,   139,   140,
02676      141,   142,   143,   144,   145,   146,     0,     0,     0,     0,
02677        0,   147,   148,   149,   150,   151,   152,   153,   154,   155,
02678      226,     0,   156,     0,     0,     0,     0,     0,     0,     0,
02679        0,     0,   157,   158,   159,   160,   161,   162,   163,   164,
02680      165,     0,     0,   166,   167,     0,     0,   168,   169,   170,
02681      171,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02682        0,   172,     0,     0,    55,     0,     0,     0,     0,     0,
02683        0,     0,     0,     0,     0,     0,     0,     0,   173,   174,
02684      175,   176,   177,   178,   179,   180,   181,   182,     0,   183,
02685      184,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02686        0,     0,     0,     0,     0,     0,     0,   185,   113,   114,
02687      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
02688      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
02689      135,   136,     0,     0,     0,   137,   138,   139,   140,   141,
02690      142,   143,   144,   145,   146,     0,     0,     0,     0,     0,
02691      147,   148,   149,   150,   151,   152,   153,   154,   155,     0,
02692        0,   156,     0,     0,     0,     0,     0,     0,     0,     0,
02693        0,   157,   158,   159,   160,   161,   162,   163,   164,   165,
02694        0,     0,   166,   167,     0,     0,   168,   169,   170,   171,
02695        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02696      172,     0,     0,    55,     0,     0,     0,     0,     0,     0,
02697        0,     0,     0,     0,     0,     0,     0,   173,   174,   175,
02698      176,   177,   178,   179,   180,   181,   182,     0,   183,   184,
02699        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02700        0,     0,     0,     0,     0,     0,   185,   113,   114,   115,
02701      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
02702      126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
02703      136,     0,     0,     0,   137,   138,   139,   140,   141,   142,
02704      143,   144,   145,   146,     0,     0,     0,     0,     0,   147,
02705      148,   149,   150,   151,   152,   153,   154,   155,     0,     0,
02706      156,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02707      157,   158,   159,   160,   161,   162,   163,   164,   165,     0,
02708        0,   166,   167,     0,     0,   168,   169,   170,   171,     0,
02709        0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
02710        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02711        0,     0,     0,     0,     0,     0,   173,   174,   175,   176,
02712      177,   178,   179,   180,   181,   182,     0,   183,   184,     0,
02713        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02714       11,     0,     0,     0,    12,   185,    13,    14,    15,   231,
02715      232,    18,    19,     0,     0,     0,     0,     0,   233,   234,
02716      235,    23,    24,    25,    26,     0,     0,   194,     0,     0,
02717        0,     0,     0,     0,   258,     0,     0,    32,    33,    34,
02718       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02719       43,    44,    45,     0,     0,     0,     0,     0,     0,     0,
02720        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02721        0,     0,     0,     0,   259,     0,     0,   197,    50,     0,
02722       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02723       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02724        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02725      260,    10,    11,     0,     0,     0,    12,     0,    13,    14,
02726       15,   231,   232,    18,    19,     0,     0,     0,   261,     0,
02727      233,   234,   235,    23,    24,    25,    26,     0,     0,   194,
02728        0,     0,     0,     0,     0,     0,   258,     0,     0,    32,
02729       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02730       42,     0,    43,    44,    45,     0,     0,     0,     0,     0,
02731        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02732        0,     0,     0,     0,     0,     0,   259,     0,     0,   197,
02733       50,     0,    51,    52,     0,     0,     0,    54,    55,    56,
02734       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02735        0,     0,     0,     0,     0,     5,     6,     7,     8,     9,
02736        0,     0,   260,    10,    11,     0,     0,     0,    12,     0,
02737       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02738      490,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02739        0,    27,     0,     0,     0,     0,     0,    28,    29,    30,
02740       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02741        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02742        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02743        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02744        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02745       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02746        0,     0,     0,     0,     5,     6,     7,     8,     9,     0,
02747        0,     0,    10,    11,    61,    62,    63,    12,     0,    13,
02748       14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
02749        0,    20,    21,    22,    23,    24,    25,    26,     0,     0,
02750       27,     0,     0,     0,     0,     0,    28,    29,     0,    31,
02751       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02752       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02753        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02754        0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
02755       49,    50,     0,    51,    52,     0,    53,     0,    54,    55,
02756       56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
02757        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02758        0,    10,    11,    61,    62,    63,    12,     0,    13,    14,
02759       15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
02760       20,    21,    22,    23,    24,    25,    26,     0,     0,   194,
02761        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02762       33,    34,    35,    36,    37,    38,    39,    40,   195,    41,
02763       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02764        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02765        0,     0,     0,     0,     0,     0,   196,     0,     0,   197,
02766       50,     0,    51,    52,     0,   198,   199,    54,    55,    56,
02767       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02768        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02769       10,    11,    61,   200,    63,    12,     0,    13,    14,    15,
02770      231,   232,    18,    19,     0,     0,     0,     0,     0,   233,
02771      234,   235,    23,    24,    25,    26,     0,     0,   194,     0,
02772        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02773       34,    35,    36,    37,    38,    39,    40,   195,    41,    42,
02774        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02775        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02776        0,     0,     0,     0,     0,   196,     0,     0,   197,    50,
02777        0,    51,    52,     0,   587,   199,    54,    55,    56,    57,
02778       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02779        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02780       11,    61,   200,    63,    12,     0,    13,    14,    15,   231,
02781      232,    18,    19,     0,     0,     0,     0,     0,   233,   234,
02782      235,    23,    24,    25,    26,     0,     0,   194,     0,     0,
02783        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02784       35,    36,    37,    38,    39,    40,   195,    41,    42,     0,
02785       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02786        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02787        0,     0,     0,     0,   196,     0,     0,   197,    50,     0,
02788       51,    52,     0,   198,     0,    54,    55,    56,    57,    58,
02789       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02790        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02791       61,   200,    63,    12,     0,    13,    14,    15,   231,   232,
02792       18,    19,     0,     0,     0,     0,     0,   233,   234,   235,
02793       23,    24,    25,    26,     0,     0,   194,     0,     0,     0,
02794        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02795       36,    37,    38,    39,    40,   195,    41,    42,     0,    43,
02796       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02797        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02798        0,     0,     0,   196,     0,     0,   197,    50,     0,    51,
02799       52,     0,     0,   199,    54,    55,    56,    57,    58,    59,
02800       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02801        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02802      200,    63,    12,     0,    13,    14,    15,   231,   232,    18,
02803       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02804       24,    25,    26,     0,     0,   194,     0,     0,     0,     0,
02805        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02806       37,    38,    39,    40,   195,    41,    42,     0,    43,    44,
02807       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02808        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02809        0,     0,   196,     0,     0,   197,    50,     0,    51,    52,
02810        0,   587,     0,    54,    55,    56,    57,    58,    59,    60,
02811        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02812        7,     0,     9,     0,     0,     0,    10,    11,    61,   200,
02813       63,    12,     0,    13,    14,    15,   231,   232,    18,    19,
02814        0,     0,     0,     0,     0,   233,   234,   235,    23,    24,
02815       25,    26,     0,     0,   194,     0,     0,     0,     0,     0,
02816        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02817       38,    39,    40,   195,    41,    42,     0,    43,    44,    45,
02818        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02819        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02820        0,   196,     0,     0,   197,    50,     0,    51,    52,     0,
02821        0,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02822        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02823        0,     9,     0,     0,     0,    10,    11,    61,   200,    63,
02824       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02825        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02826       26,     0,     0,   194,     0,     0,     0,     0,     0,     0,
02827       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02828       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02829       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02830        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02831      196,     0,     0,   197,    50,     0,    51,    52,     0,   484,
02832        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02833        0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02834        9,     0,     0,     0,    10,    11,    61,   200,    63,    12,
02835        0,    13,    14,    15,   231,   232,    18,    19,     0,     0,
02836        0,     0,     0,   233,   234,   235,    23,    24,    25,    26,
02837        0,     0,   194,     0,     0,     0,     0,     0,     0,    29,
02838        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02839       40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
02840       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02841        0,     0,     0,     0,     0,     0,     0,     0,     0,   196,
02842        0,     0,   197,    50,     0,    51,    52,     0,   198,     0,
02843       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02844        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02845        0,     0,     0,    10,    11,    61,   200,    63,    12,     0,
02846       13,    14,    15,   231,   232,    18,    19,     0,     0,     0,
02847        0,     0,   233,   234,   235,    23,    24,    25,    26,     0,
02848        0,   194,     0,     0,     0,     0,     0,     0,    29,     0,
02849        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02850        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02851        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02852        0,     0,     0,     0,     0,     0,     0,     0,   196,     0,
02853        0,   197,    50,     0,    51,    52,     0,   772,     0,    54,
02854       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02855        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02856        0,     0,    10,    11,    61,   200,    63,    12,     0,    13,
02857       14,    15,   231,   232,    18,    19,     0,     0,     0,     0,
02858        0,   233,   234,   235,    23,    24,    25,    26,     0,     0,
02859      194,     0,     0,     0,     0,     0,     0,    29,     0,     0,
02860       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02861       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02862        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02863        0,     0,     0,     0,     0,     0,     0,   196,     0,     0,
02864      197,    50,     0,    51,    52,     0,   484,     0,    54,    55,
02865       56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
02866        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02867        0,    10,    11,    61,   200,    63,    12,     0,    13,    14,
02868       15,   231,   232,    18,    19,     0,     0,     0,     0,     0,
02869      233,   234,   235,    23,    24,    25,    26,     0,     0,   194,
02870        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02871       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02872       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02873        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02874        0,     0,     0,     0,     0,     0,   196,     0,     0,   197,
02875       50,     0,    51,    52,     0,   587,     0,    54,    55,    56,
02876       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02877        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02878       10,    11,    61,   200,    63,    12,     0,    13,    14,    15,
02879      231,   232,    18,    19,     0,     0,     0,     0,     0,   233,
02880      234,   235,    23,    24,    25,    26,     0,     0,   194,     0,
02881        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02882       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02883        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02884        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02885        0,     0,     0,     0,     0,   196,     0,     0,   197,    50,
02886        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02887       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02888        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02889       11,    61,   200,    63,    12,     0,    13,    14,    15,    16,
02890       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02891       22,    23,    24,    25,    26,     0,     0,    27,     0,     0,
02892        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02893       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02894       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02895        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02896        0,     0,     0,     0,   196,     0,     0,   197,    50,     0,
02897       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02898       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02899        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02900       61,    62,    63,    12,     0,    13,    14,    15,    16,    17,
02901       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02902       23,    24,    25,    26,     0,     0,   194,     0,     0,     0,
02903        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02904       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02905       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02906        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02907        0,     0,     0,   196,     0,     0,   197,    50,     0,    51,
02908       52,     0,     0,     0,    54,    55,    56,    57,    58,    59,
02909       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02910        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02911      200,    63,    12,     0,    13,    14,    15,   231,   232,    18,
02912       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02913       24,    25,    26,     0,     0,   194,     0,     0,     0,     0,
02914        0,     0,   258,     0,     0,    32,    33,    34,    35,    36,
02915       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02916       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02917        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02918        0,     0,   259,     0,     0,   304,    50,     0,    51,    52,
02919        0,   305,     0,    54,    55,    56,    57,    58,    59,    60,
02920        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02921        0,     0,    10,    11,     0,     0,     0,    12,   260,    13,
02922       14,    15,   231,   232,    18,    19,     0,     0,     0,     0,
02923        0,   233,   234,   235,    23,    24,    25,    26,     0,     0,
02924      194,     0,     0,     0,     0,     0,     0,   258,     0,     0,
02925       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02926       41,    42,     0,    43,    44,    45,     0,     0,     0,     0,
02927        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02928        0,     0,     0,     0,     0,     0,     0,   346,     0,     0,
02929       49,    50,     0,    51,    52,     0,    53,     0,    54,    55,
02930       56,    57,    58,    59,    60,     0,     0,     0,     0,     5,
02931        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02932        0,     0,    12,   260,    13,    14,    15,   231,   232,    18,
02933       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02934       24,    25,    26,     0,     0,   194,     0,     0,     0,     0,
02935        0,     0,   258,     0,     0,    32,    33,    34,   354,    36,
02936       37,    38,   355,    40,     0,    41,    42,     0,    43,    44,
02937       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02938        0,     0,     0,     0,     0,     0,     0,     0,     0,   356,
02939        0,     0,   357,     0,     0,   197,    50,     0,    51,    52,
02940        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02941        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02942        0,     0,    10,    11,     0,     0,     0,    12,   260,    13,
02943       14,    15,   231,   232,    18,    19,     0,     0,     0,     0,
02944        0,   233,   234,   235,    23,    24,    25,    26,     0,     0,
02945      194,     0,     0,     0,     0,     0,     0,   258,     0,     0,
02946       32,    33,    34,   354,    36,    37,    38,   355,    40,     0,
02947       41,    42,     0,    43,    44,    45,     0,     0,     0,     0,
02948        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02949        0,     0,     0,     0,     0,     0,     0,   357,     0,     0,
02950      197,    50,     0,    51,    52,     0,     0,     0,    54,    55,
02951       56,    57,    58,    59,    60,     0,     0,     0,     0,     5,
02952        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02953        0,     0,    12,   260,    13,    14,    15,   231,   232,    18,
02954       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02955       24,    25,    26,     0,     0,   194,     0,     0,     0,     0,
02956        0,     0,   258,     0,     0,    32,    33,    34,    35,    36,
02957       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02958       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02959        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02960        0,     0,   259,     0,     0,   304,    50,     0,    51,    52,
02961        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02962        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02963        0,     0,    10,    11,     0,     0,     0,    12,   260,    13,
02964       14,    15,   231,   232,    18,    19,     0,     0,     0,     0,
02965        0,   233,   234,   235,    23,    24,    25,    26,     0,     0,
02966      194,     0,     0,     0,     0,     0,     0,   258,     0,     0,
02967       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02968       41,    42,     0,    43,    44,    45,     0,     0,     0,     0,
02969        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02970        0,     0,     0,     0,     0,     0,     0,   902,     0,     0,
02971      197,    50,     0,    51,    52,     0,     0,     0,    54,    55,
02972       56,    57,    58,    59,    60,     0,     0,     0,     0,     5,
02973        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02974        0,     0,    12,   260,    13,    14,    15,   231,   232,    18,
02975       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02976       24,    25,    26,     0,     0,   194,     0,   663,     0,     0,
02977        0,     0,   258,     0,     0,    32,    33,    34,    35,    36,
02978       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02979       45,   308,   309,   310,   311,   312,   313,   314,   315,   316,
02980      317,   318,   319,   320,     0,     0,   321,   322,     0,     0,
02981        0,     0,   912,     0,     0,   197,    50,     0,    51,    52,
02982        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02983        0,     0,     0,   323,     0,   324,   325,   326,   327,   328,
02984      329,   330,   331,   332,   333,     0,     0,     0,   260,     0,
02985      525,   526,     0,     0,   527,     0,     0,     0,     0,     0,
02986        0,     0,     0,  -241,   157,   158,   159,   160,   161,   162,
02987      163,   164,   165,     0,     0,   166,   167,     0,     0,   168,
02988      169,   170,   171,     0,     0,     0,     0,     0,     0,     0,
02989        0,     0,     0,   172,     0,     0,     0,     0,     0,     0,
02990        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02991      173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
02992        0,   183,   184,     0,     0,     0,     0,   533,   534,     0,
02993        0,   535,     0,     0,     0,     0,     0,     0,     0,   185,
02994      220,   157,   158,   159,   160,   161,   162,   163,   164,   165,
02995        0,     0,   166,   167,     0,     0,   168,   169,   170,   171,
02996        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02997      172,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02998        0,     0,     0,     0,     0,     0,     0,   173,   174,   175,
02999      176,   177,   178,   179,   180,   181,   182,     0,   183,   184,
03000        0,     0,     0,     0,   591,   526,     0,     0,   592,     0,
03001        0,     0,     0,     0,     0,     0,   185,   220,   157,   158,
03002      159,   160,   161,   162,   163,   164,   165,     0,     0,   166,
03003      167,     0,     0,   168,   169,   170,   171,     0,     0,     0,
03004        0,     0,     0,     0,     0,     0,     0,   172,     0,     0,
03005        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03006        0,     0,     0,     0,   173,   174,   175,   176,   177,   178,
03007      179,   180,   181,   182,     0,   183,   184,     0,     0,     0,
03008        0,   594,   534,     0,     0,   595,     0,     0,     0,     0,
03009        0,     0,     0,   185,   220,   157,   158,   159,   160,   161,
03010      162,   163,   164,   165,     0,     0,   166,   167,     0,     0,
03011      168,   169,   170,   171,     0,     0,     0,     0,     0,     0,
03012        0,     0,     0,     0,   172,     0,     0,     0,     0,     0,
03013        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03014        0,   173,   174,   175,   176,   177,   178,   179,   180,   181,
03015      182,     0,   183,   184,     0,     0,     0,     0,   617,   526,
03016        0,     0,   618,     0,     0,     0,     0,     0,     0,     0,
03017      185,   220,   157,   158,   159,   160,   161,   162,   163,   164,
03018      165,     0,     0,   166,   167,     0,     0,   168,   169,   170,
03019      171,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03020        0,   172,     0,     0,     0,     0,     0,     0,     0,     0,
03021        0,     0,     0,     0,     0,     0,     0,     0,   173,   174,
03022      175,   176,   177,   178,   179,   180,   181,   182,     0,   183,
03023      184,     0,     0,     0,     0,   620,   534,     0,     0,   621,
03024        0,     0,     0,     0,     0,     0,     0,   185,   220,   157,
03025      158,   159,   160,   161,   162,   163,   164,   165,     0,     0,
03026      166,   167,     0,     0,   168,   169,   170,   171,     0,     0,
03027        0,     0,     0,     0,     0,     0,     0,     0,   172,     0,
03028        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03029        0,     0,     0,     0,     0,   173,   174,   175,   176,   177,
03030      178,   179,   180,   181,   182,     0,   183,   184,     0,     0,
03031        0,     0,   692,   526,     0,     0,   693,     0,     0,     0,
03032        0,     0,     0,     0,   185,   220,   157,   158,   159,   160,
03033      161,   162,   163,   164,   165,     0,     0,   166,   167,     0,
03034        0,   168,   169,   170,   171,     0,     0,     0,     0,     0,
03035        0,     0,     0,     0,     0,   172,     0,     0,     0,     0,
03036        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03037        0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
03038      181,   182,     0,   183,   184,     0,     0,     0,     0,   695,
03039      534,     0,     0,   696,     0,     0,     0,     0,     0,     0,
03040        0,   185,   220,   157,   158,   159,   160,   161,   162,   163,
03041      164,   165,     0,     0,   166,   167,     0,     0,   168,   169,
03042      170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
03043        0,     0,   172,     0,     0,     0,     0,     0,     0,     0,
03044        0,     0,     0,     0,     0,     0,     0,     0,     0,   173,
03045      174,   175,   176,   177,   178,   179,   180,   181,   182,     0,
03046      183,   184,     0,     0,     0,     0,   702,   526,     0,     0,
03047      703,     0,     0,     0,     0,     0,     0,     0,   185,   220,
03048      157,   158,   159,   160,   161,   162,   163,   164,   165,     0,
03049        0,   166,   167,     0,     0,   168,   169,   170,   171,     0,
03050        0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
03051        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03052        0,     0,     0,     0,     0,     0,   173,   174,   175,   176,
03053      177,   178,   179,   180,   181,   182,     0,   183,   184,     0,
03054        0,     0,     0,   572,   534,     0,     0,   573,     0,     0,
03055        0,     0,     0,     0,     0,   185,   220,   157,   158,   159,
03056      160,   161,   162,   163,   164,   165,     0,     0,   166,   167,
03057        0,     0,   168,   169,   170,   171,     0,     0,     0,     0,
03058        0,     0,     0,     0,     0,     0,   172,     0,     0,     0,
03059        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03060        0,     0,     0,   173,   174,   175,   176,   177,   178,   179,
03061      180,   181,   182,     0,   183,   184,     0,     0,     0,     0,
03062      965,   526,     0,     0,   966,     0,     0,     0,     0,     0,
03063        0,     0,   185,   220,   157,   158,   159,   160,   161,   162,
03064      163,   164,   165,     0,     0,   166,   167,     0,     0,   168,
03065      169,   170,   171,     0,     0,     0,     0,     0,     0,     0,
03066        0,     0,     0,   172,     0,     0,     0,     0,     0,     0,
03067        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03068      173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
03069        0,   183,   184,     0,     0,     0,     0,   971,   526,     0,
03070        0,   972,     0,     0,     0,     0,     0,     0,     0,   185,
03071      220,   157,   158,   159,   160,   161,   162,   163,   164,   165,
03072        0,     0,   166,   167,     0,     0,   168,   169,   170,   171,
03073        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03074      172,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03075        0,     0,     0,     0,     0,     0,     0,   173,   174,   175,
03076      176,   177,   178,   179,   180,   181,   182,     0,   183,   184,
03077        0,     0,     0,     0,   974,   534,     0,     0,   975,     0,
03078        0,     0,     0,     0,     0,     0,   185,   220,   157,   158,
03079      159,   160,   161,   162,   163,   164,   165,     0,     0,   166,
03080      167,     0,     0,   168,   169,   170,   171,     0,     0,     0,
03081        0,     0,     0,     0,     0,     0,     0,   172,     0,     0,
03082        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03083        0,     0,     0,     0,   173,   174,   175,   176,   177,   178,
03084      179,   180,   181,   182,     0,   183,   184,     0,     0,     0,
03085        0,   572,   534,     0,     0,   573,     0,     0,     0,     0,
03086        0,     0,     0,   185,   220,   157,   158,   159,   160,   161,
03087      162,   163,   164,   165,     0,     0,   166,   167,     0,     0,
03088      168,   169,   170,   171,     0,     0,     0,     0,     0,     0,
03089        0,     0,     0,     0,   172,     0,     0,     0,     0,     0,
03090        0,     0,   718,     0,     0,     0,     0,     0,     0,     0,
03091        0,   173,   174,   175,   176,   177,   178,   179,   180,   181,
03092      182,   663,   183,   184,     0,     0,   308,   309,   310,   311,
03093      312,   313,   314,   315,   316,   317,   318,   319,   320,     0,
03094      185,   321,   322,     0,     0,   308,   309,   310,   311,   312,
03095      313,   314,   315,   316,   317,   318,   319,   320,     0,     0,
03096      321,   322,     0,     0,     0,     0,     0,     0,   323,     0,
03097      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
03098        0,     0,     0,     0,     0,     0,     0,   323,     0,   324,
03099      325,   326,   327,   328,   329,   330,   331,   332,   333
03100 };
03101 
03102 static const yytype_int16 yycheck[] =
03103 {
03104        2,    55,   340,    28,     2,   454,     4,    52,   593,    16,
03105       17,   335,   307,    20,   307,     8,   547,   213,    16,    17,
03106        8,   566,    20,    27,    53,    29,    84,    22,     8,    87,
03107      546,    87,     4,    22,   619,    28,    49,    91,   252,    76,
03108       28,     2,   256,     4,   404,   357,     1,    65,    28,    51,
03109       52,    49,    50,   749,   450,    53,   746,    13,   334,   627,
03110      336,    53,   680,    25,    62,   762,   684,   454,    13,    16,
03111       17,    65,    26,    20,   396,    55,   400,    26,    76,    25,
03112      440,     0,   404,    27,    76,    83,    84,   576,   577,    87,
03113       88,    89,    90,    87,   490,    29,    88,    89,    90,    13,
03114      242,    25,   378,   379,    51,   851,   828,    85,    76,   694,
03115      136,    91,    87,    16,    17,   110,   147,    20,    85,   568,
03116      705,   110,   146,   399,    25,   401,    85,   653,   452,    61,
03117       87,    16,    17,    62,   109,    20,   276,    25,   278,    56,
03118      280,    13,   742,    37,    38,    87,   114,   109,    51,    52,
03119      195,   427,   109,   198,   199,   826,   701,    28,   113,   849,
03120      138,   139,   304,   763,   709,   140,    25,   109,   736,   737,
03121       25,    13,   139,   107,   106,   146,    13,   453,   140,   138,
03122      139,   143,   136,   632,   140,   147,   109,   136,   244,   145,
03123      145,   147,   147,   142,   140,   941,   892,   142,   140,   197,
03124      145,   145,   147,   147,   653,   207,   896,   904,   930,   140,
03125      217,   213,   219,   220,    25,   886,   140,   413,   220,   217,
03126      746,   219,   220,   749,   261,   223,   244,   225,   552,   242,
03127      719,   145,   230,   147,    50,   293,   294,   295,   296,   140,
03128      564,   601,   142,   241,   242,   632,   235,   147,   109,   238,
03129      244,   563,   140,   147,   258,   873,    99,   302,   826,   708,
03130      828,   932,   307,   261,    25,   661,    87,    83,    84,   261,
03131      217,    87,   219,   145,   140,   147,   305,   553,   600,   601,
03132      241,   140,    25,   341,   342,   140,    25,   343,   959,   565,
03133      806,   304,    85,    87,   292,   293,   294,   295,   296,   297,
03134      298,   299,    85,   145,   302,   147,   304,   305,   145,   307,
03135      147,    59,    60,   305,   217,   109,   219,    26,   886,   887,
03136      292,   708,   109,   849,   142,   851,    49,   467,   335,   140,
03137      875,   292,   217,   335,   219,    56,   297,   335,   145,   337,
03138      147,    87,   873,   341,   342,   138,   139,   336,    88,   343,
03139      395,   396,   690,   140,   334,   302,   139,    26,   356,   404,
03140      307,   140,   930,   109,   932,   359,   892,    85,   147,   662,
03141      109,    85,   109,   302,    61,    26,    85,   140,   307,   140,
03142       15,   142,    17,   928,   679,    87,   384,   385,   973,    85,
03143       85,   959,   437,   400,   590,   440,   421,   140,   400,   142,
03144      614,   140,   400,    85,   143,   140,    85,   223,   147,   225,
03145      412,   413,   401,   450,   142,   941,    85,   104,   105,   399,
03146      138,   139,   424,   136,   142,   139,   424,   136,   421,   138,
03147      139,   880,    85,   421,    85,   433,    85,   142,   427,   484,
03148      140,   421,   138,   139,   139,   452,   426,   147,    85,   142,
03149      452,    85,   450,   490,   452,   384,   385,   139,   450,   146,
03150      139,    85,   822,   424,   453,    68,    85,   136,    85,   138,
03151      139,   451,   433,   142,   197,    87,    85,   293,   294,   295,
03152      296,   483,   298,   299,    68,   136,   139,   138,   139,   138,
03153      139,   142,   490,   396,    85,    37,    38,   109,   490,   668,
03154      822,   223,   139,   548,   138,   139,   675,   230,   109,    52,
03155      514,    54,    55,    56,    57,   139,   119,   120,   121,   242,
03156      139,   138,   139,   861,   246,   341,   342,   143,   532,   867,
03157      139,    26,   728,    52,   437,   530,   538,    56,   540,    85,
03158      356,   530,   587,   538,   542,   552,   544,   138,   139,   538,
03159      552,   545,   546,    56,   552,   600,   601,   564,    85,   584,
03160       59,    60,   564,   144,   553,   559,   564,   137,   566,   567,
03161      106,   551,   574,   575,   576,   577,   565,    87,   615,   574,
03162      575,   304,   140,   563,   106,   574,   575,    87,   590,   593,
03163       85,   584,   138,   139,    87,    85,   584,   140,    68,   109,
03164       68,   548,    14,    15,   584,    85,   604,   609,    85,   109,
03165      140,   138,   139,   658,    17,   619,   109,   615,    56,   608,
03166      609,   574,   575,   615,   661,   145,    25,   951,    52,    94,
03167       54,    55,    56,    57,   679,   143,   638,   146,   640,   697,
03168      642,   136,   700,   138,   139,   137,   140,   142,   138,   139,
03169       52,   653,    54,    55,    56,    57,   654,   711,   138,   139,
03170       10,   138,   139,   661,   662,    89,    61,   665,   666,   661,
03171       65,    95,    96,   671,   672,   109,   952,   679,   680,   140,
03172      682,   140,   684,   140,   406,   140,   140,    89,   410,   734,
03173      694,   140,   116,   415,    96,   119,     8,   600,    13,   697,
03174       87,   705,   700,   701,   698,    61,    87,   137,   430,   104,
03175      105,   709,   109,   435,   116,    54,   710,   719,   716,   717,
03176      140,   145,   109,   140,    63,    64,   728,   772,   109,   140,
03177       68,   711,   679,   662,    87,    52,   665,   666,   796,    52,
03178      742,   111,   671,   672,   140,   743,   744,    87,   104,   105,
03179      106,   567,   144,   140,   549,    15,   109,   755,   803,   140,
03180        2,   763,     4,   765,    87,   767,   768,   489,    52,   109,
03181       54,    55,    56,    57,    16,    17,   140,   822,    20,   117,
03182      118,   119,   120,   121,   145,   783,   109,   140,   604,   791,
03183      109,   140,   794,   114,   140,   793,   140,   140,   796,    10,
03184      140,    88,   800,   801,   140,     9,   804,    49,    50,    10,
03185      137,   140,   806,    10,   808,    61,   140,   140,   140,   542,
03186       62,   544,   820,   137,   140,   114,    52,   137,    54,    55,
03187       56,    57,   834,   835,   140,   837,    68,   839,   840,   140,
03188      140,    83,    84,   137,   842,    87,    56,   140,   140,    68,
03189      842,    83,    84,    56,   783,   140,   140,   140,   104,   105,
03190      106,   140,   860,    89,    83,    84,   864,   140,   860,    95,
03191       96,   873,   142,   142,    61,   140,   424,   875,    90,    88,
03192       61,   697,   954,   736,   700,   117,   118,   119,   120,   121,
03193      116,    93,   904,   119,   689,   114,   115,   116,   117,   118,
03194      119,   120,   121,   953,   906,   907,   908,    96,   910,   911,
03195      640,   706,   642,    57,    91,   880,   142,   104,   105,   106,
03196      918,   849,   920,   104,   105,   106,   653,   746,   926,    -1,
03197      928,   654,   934,   935,   936,   937,    52,    -1,    54,    55,
03198       56,    57,    -1,    -1,   951,    -1,    -1,    54,    55,   951,
03199       57,   953,   954,   951,    -1,   197,    63,    64,    -1,   939,
03200       -1,    -1,    -1,   952,    -1,   967,   968,   969,   970,   973,
03201      950,    -1,    -1,    89,    -1,   217,    -1,   219,   220,   981,
03202      796,   223,    -1,   225,    -1,   707,    -1,   989,   230,    -1,
03203       -1,    -1,    -1,   716,   717,    68,    -1,    -1,    -1,   241,
03204      242,    -1,   797,    -1,   799,    -1,    -1,   729,    -1,    -1,
03205       83,    84,    -1,    -1,   809,    -1,    -1,    -1,   740,   814,
03206      743,   744,   749,    -1,    52,   752,    54,    55,    56,    57,
03207       -1,    -1,   755,    -1,    -1,   765,    -1,   767,   768,    -1,
03208       -1,    -1,    -1,   116,   117,   118,   119,   120,   121,    -1,
03209      292,   293,   294,   295,   296,   297,   298,   299,    -1,    -1,
03210      302,    89,   304,    -1,    -1,   307,    -1,    95,    -1,    52,
03211      793,    54,    55,    56,    57,   870,   871,   800,   801,    -1,
03212       -1,   804,    16,    17,    -1,    -1,    20,    -1,    -1,    -1,
03213       -1,   813,    -1,   335,    -1,   337,    -1,   820,    -1,   341,
03214      342,    -1,    -1,   825,   834,   835,    -1,   837,   830,   839,
03215      840,    -1,    46,    47,   356,    -1,    -1,    51,    52,    -1,
03216       -1,    -1,    -1,    -1,   851,    -1,   853,    -1,    62,    63,
03217       -1,    52,   927,    54,    55,    56,    57,    -1,    -1,    -1,
03218       -1,   864,   384,   385,    40,    41,    42,    43,    44,    -1,
03219       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   400,    -1,
03220      955,    -1,   957,    -1,    -1,   892,    -1,   894,    89,    -1,
03221       -1,   898,    -1,    -1,    95,    -1,   906,   907,   908,    -1,
03222      910,   911,   424,    52,    -1,    54,    55,    56,    57,    -1,
03223       -1,   433,    -1,    -1,    -1,   918,    -1,   920,    -1,    -1,
03224       -1,    -1,    -1,   926,   934,   935,   936,   937,    -1,    -1,
03225      452,    -1,    -1,    -1,   941,    -1,   943,    -1,    -1,   946,
03226       89,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
03227       -1,    -1,    -1,    -1,   961,    -1,    -1,   967,   968,   969,
03228      970,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,
03229      119,   981,    -1,    -1,    -1,    -1,   983,    -1,    -1,   989,
03230       -1,   195,    -1,    -1,   198,   199,   200,    -1,    -1,    -1,
03231        2,    -1,     4,   142,    -1,    52,    -1,    54,    55,    56,
03232       57,    -1,    -1,   217,    -1,   219,   220,    -1,    -1,    -1,
03233       -1,     2,    -1,     4,    -1,    -1,    -1,    -1,    -1,    -1,
03234      542,    -1,   544,    52,    -1,    54,    55,    56,    57,    -1,
03235      552,    -1,    89,    -1,    -1,    -1,    -1,    49,    95,    96,
03236       -1,    53,   564,    -1,   566,   567,    -1,    -1,    -1,    -1,
03237       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,   116,
03238       89,    -1,   119,    -1,    76,    -1,    95,    96,    -1,    -1,
03239       -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
03240       -1,    -1,   604,    -1,    -1,    -1,    -1,   116,   302,    -1,
03241      119,    -1,    -1,   307,   308,   309,   310,   311,   312,   313,
03242      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
03243      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
03244       -1,   335,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03245       -1,    -1,   654,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03246      662,    -1,    -1,   665,   666,    -1,    -1,    -1,    -1,   671,
03247      672,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03248       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    -1,
03249      384,   385,    -1,    -1,    -1,   697,    -1,    -1,   700,   701,
03250      394,   395,   396,    -1,    -1,   197,   400,   709,   402,   403,
03251      404,    -1,    -1,    -1,   716,   717,   112,   113,   114,   115,
03252      116,   117,   118,   119,   120,   121,   197,    -1,    -1,   423,
03253       -1,    -1,    -1,    -1,   428,    -1,    -1,    -1,   230,    -1,
03254       -1,   743,   744,   437,    -1,    -1,   440,    -1,    -1,   241,
03255      242,    -1,    -1,   755,    -1,    -1,    -1,    -1,   452,   230,
03256       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   261,
03257      241,   242,    -1,    -1,    -1,    -1,    -1,    -1,   472,   473,
03258       -1,   783,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03259      484,   793,    -1,    -1,   796,    -1,    -1,    -1,   800,   801,
03260      292,    -1,   804,    -1,    -1,   297,    -1,    -1,    -1,    -1,
03261       -1,    -1,   304,   305,    -1,    -1,    -1,     2,   820,     4,
03262       -1,   292,    -1,    -1,    -1,    -1,   297,    -1,    -1,    -1,
03263       -1,    -1,    -1,   304,    -1,    -1,    -1,    -1,    -1,    -1,
03264       -1,    -1,    -1,    -1,    -1,   337,    -1,     2,    -1,     4,
03265       -1,    -1,    -1,    -1,   548,    -1,    -1,    -1,   552,    -1,
03266       -1,    -1,   864,    -1,    49,     2,   337,     4,    53,    -1,
03267      564,    -1,    -1,   875,    -1,    -1,    -1,    -1,    -1,    -1,
03268       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03269       -1,    76,    -1,   587,    49,    -1,    -1,    -1,    53,    -1,
03270       -1,    -1,    -1,    88,    89,    90,   600,   601,    -1,    -1,
03271       -1,    -1,    49,    -1,    -1,    -1,   918,    -1,   920,    -1,
03272       -1,    76,    -1,    -1,   926,    -1,   928,    -1,    -1,    -1,
03273       -1,    -1,   424,    88,    89,    90,    91,    -1,    -1,    -1,
03274       -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   951,
03275       -1,    88,    -1,   424,    -1,    -1,    -1,    -1,   450,    -1,
03276       -1,    -1,   433,    -1,   658,    -1,    -1,    -1,   662,   663,
03277       -1,   665,   666,    -1,    -1,    -1,    -1,   671,   672,     0,
03278       -1,    -1,    -1,    -1,    -1,   679,    -1,     8,     9,    10,
03279       -1,    -1,    13,    14,    15,    -1,    17,    -1,   490,    -1,
03280       -1,    -1,    -1,    -1,    -1,    -1,    27,    -1,    -1,    -1,
03281       -1,    -1,   197,    -1,    -1,    -1,    37,    38,    -1,    40,
03282       41,    42,    43,    44,   718,    -1,    -1,    -1,    -1,   723,
03283      724,    -1,   726,   727,    -1,    -1,    -1,    -1,    -1,    -1,
03284      734,    -1,   197,    -1,    -1,   230,    -1,    -1,    -1,    -1,
03285      542,    -1,   544,    -1,    -1,    -1,   241,   242,    -1,    -1,
03286      197,    -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,    -1,
03287       -1,   542,    -1,   544,   566,   230,   261,    -1,   772,    -1,
03288       -1,    -1,   776,    -1,    -1,    -1,   241,   242,    -1,   783,
03289       -1,    -1,    -1,   230,    -1,   566,    -1,    -1,    -1,    -1,
03290       -1,    -1,    -1,    -1,   241,   242,   261,   292,    -1,   803,
03291       -1,    -1,   297,    -1,    -1,    -1,   137,    -1,   139,   304,
03292      305,   142,   143,   615,   145,    -1,   147,   821,   822,    -1,
03293       -1,    -1,    -1,    -1,    -1,    -1,    -1,   292,    -1,    -1,
03294       -1,    -1,   297,    -1,    -1,    -1,    -1,    -1,    -1,   304,
03295      305,    -1,   337,    -1,    -1,   292,    -1,    -1,    -1,    -1,
03296      297,    -1,   654,    -1,    -1,    -1,    -1,   304,    -1,   661,
03297      307,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03298       -1,    -1,   337,   654,    -1,    -1,    -1,    -1,    -1,    -1,
03299       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03300      337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   701,
03301       -1,    -1,    -1,    -1,    -1,    -1,    -1,   709,    -1,    -1,
03302       -1,    -1,    -1,    -1,   716,   717,    -1,    -1,    -1,    -1,
03303      701,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   709,   424,
03304       -1,    -1,    -1,    -1,    -1,   716,   717,    -1,   433,    -1,
03305       -1,   743,   744,    -1,    -1,    -1,    -1,   951,    -1,    -1,
03306       -1,    -1,    -1,   755,    -1,   450,    -1,    -1,    -1,   424,
03307       -1,    -1,   743,   744,    -1,    -1,    -1,    -1,   433,    -1,
03308       -1,    -1,    -1,    -1,   755,    -1,    -1,   424,    -1,    -1,
03309       -1,    -1,    -1,    -1,    -1,   450,   433,    -1,    -1,    -1,
03310       -1,   793,    -1,    -1,    -1,   490,    -1,    -1,   800,   801,
03311       -1,    -1,   804,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03312       -1,    -1,   793,    -1,    -1,    -1,    -1,    -1,   820,   800,
03313      801,    -1,    -1,   804,    -1,   490,    -1,    -1,    -1,    -1,
03314       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   820,
03315      842,    -1,    -1,    -1,    -1,    -1,    -1,   542,    -1,   544,
03316       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   860,    -1,
03317       -1,    -1,   864,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03318       -1,   566,    -1,   875,    -1,    -1,    -1,   542,    -1,   544,
03319       -1,    -1,    -1,   864,    -1,    -1,    -1,    -1,    -1,    -1,
03320       -1,    -1,    -1,    -1,   875,   542,    -1,   544,    -1,    -1,
03321       -1,   566,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03322       -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,   920,   566,
03323      615,    -1,    -1,    -1,   926,    -1,   928,    -1,    -1,    -1,
03324       -1,    -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,   920,
03325       -1,    -1,    -1,    -1,    -1,   926,    -1,   928,    -1,    -1,
03326      615,   646,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,
03327       -1,    -1,    -1,    -1,    -1,    -1,   661,    -1,    -1,    -1,
03328       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03329       -1,    -1,    68,    69,    70,    71,    72,    73,    74,   654,
03330       -1,    77,    78,    -1,    -1,    -1,   661,    83,    84,    -1,
03331       -1,    -1,    -1,    -1,    -1,    -1,   701,   654,    -1,    -1,
03332       -1,    -1,    -1,    -1,   709,   662,    -1,    -1,    -1,    -1,
03333       -1,   716,   717,    -1,    -1,    -1,   112,   113,   114,   115,
03334      116,   117,   118,   119,   120,   121,   701,    -1,    -1,    -1,
03335       -1,    -1,    -1,    -1,   709,    -1,    -1,    -1,   743,   744,
03336       -1,   716,   717,    -1,   701,    -1,    -1,    -1,    -1,    -1,
03337      755,    -1,   709,    -1,    -1,    -1,    -1,    -1,    -1,   716,
03338      717,    68,    69,    70,    71,    72,    73,    74,   743,   744,
03339       77,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
03340      755,    -1,    -1,    -1,    -1,    -1,   743,   744,   793,    -1,
03341       -1,    -1,    -1,    -1,    -1,   800,   801,    -1,   755,   804,
03342       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03343      117,   118,   119,   120,   121,   820,    -1,    -1,   793,    -1,
03344       -1,    -1,    -1,    -1,    -1,   800,   801,    -1,    -1,   804,
03345       -1,    -1,    -1,    -1,    -1,    -1,   793,   842,    -1,    -1,
03346       -1,    -1,    -1,   800,   801,   820,    -1,   804,    -1,    -1,
03347       -1,    -1,    -1,    -1,    -1,   860,    -1,    -1,    -1,   864,
03348       -1,    -1,    -1,   820,    -1,    -1,    -1,   842,    -1,    -1,
03349      875,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03350       -1,    -1,    -1,    -1,    -1,   860,    -1,    -1,    -1,   864,
03351       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03352      875,    -1,    -1,   860,    -1,    -1,    -1,   864,    -1,    -1,
03353       -1,    -1,    -1,   918,    -1,   920,    -1,    -1,   875,    -1,
03354       -1,   926,    -1,   928,    -1,    -1,    -1,    -1,    -1,    -1,
03355       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03356       -1,    -1,    -1,   918,    -1,   920,    -1,    -1,    -1,    -1,
03357       -1,   926,    -1,   928,    -1,    -1,    -1,    -1,    -1,    -1,
03358       -1,   918,    -1,   920,    -1,    -1,    -1,    -1,    -1,   926,
03359       -1,   928,     0,     1,    -1,     3,     4,     5,     6,     7,
03360       -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,    -1,
03361       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03362       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03363       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03364       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03365       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03366       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03367       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03368       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03369       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03370       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03371       -1,    -1,    -1,     0,   122,   123,   124,    -1,    -1,    -1,
03372       -1,     8,     9,    10,    -1,    -1,    13,    14,    15,    -1,
03373       17,    -1,    -1,    -1,    -1,    -1,    -1,   145,    -1,   147,
03374       27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03375       37,    38,    -1,    40,    41,    42,    43,    44,    -1,    -1,
03376       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03377       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03378       84,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03379       77,    78,    79,    80,    -1,    -1,    83,    84,    85,    -1,
03380       87,    88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,
03381      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03382      107,    -1,   109,   110,   111,   112,   113,   114,   115,   116,
03383      117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
03384       -1,    -1,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,
03385      137,   138,   139,   140,     0,    -1,   143,   144,   145,    -1,
03386      147,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03387       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03388       26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03389       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03390       -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,
03391       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
03392       83,    84,    68,    69,    70,    71,    72,    73,    74,    75,
03393       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03394       -1,    -1,    88,    -1,    -1,    -1,    -1,   110,    94,   112,
03395      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03396       -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,
03397      116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
03398       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03399      136,   137,   138,   139,   140,     0,   142,   143,   144,   145,
03400       -1,   147,    -1,     8,     9,    10,    -1,    -1,    13,    14,
03401       15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03402       -1,    -1,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,
03403       -1,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03404       -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,
03405       72,    73,    74,    75,    -1,    77,    78,    -1,    -1,    -1,
03406       -1,    83,    84,    68,    69,    70,    71,    72,    73,    74,
03407       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03408       85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,
03409      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03410       -1,    -1,   107,    -1,    -1,   110,   111,   112,   113,   114,
03411      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03412       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03413       -1,    -1,   137,   138,   139,   140,     0,    -1,   143,   144,
03414      145,    -1,   147,    -1,     8,     9,    10,    -1,    -1,    13,
03415       14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,
03416       -1,    -1,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,
03417       -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,    43,
03418       44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03419       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03420       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03421       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03422       84,    85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
03423       94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03424       -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,   112,   113,
03425      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03426       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03427       -1,    -1,   136,   137,   138,   139,   140,     0,   142,   143,
03428      144,   145,    -1,   147,    -1,     8,     9,    10,    -1,    -1,
03429       13,    14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,
03430       -1,    -1,    -1,    -1,    27,    28,    -1,    -1,    -1,    -1,
03431       -1,    -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,
03432       43,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03433       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03434       -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,
03435       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
03436       83,    84,    85,    -1,    -1,    88,    -1,    -1,    -1,    -1,
03437       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03438       -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,   112,
03439      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03440       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03441       -1,    -1,    -1,    -1,   137,   138,   139,   140,     0,   142,
03442      143,   144,   145,    -1,   147,    -1,     8,     9,    10,    -1,
03443       -1,    -1,    14,    15,    -1,    17,    -1,    -1,    -1,    -1,
03444       -1,    -1,    -1,    -1,    26,    -1,    -1,    -1,    -1,    -1,
03445       -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,    41,
03446       42,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03447       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03448       -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,
03449       72,    73,    74,    75,    76,    77,    78,    79,    80,    -1,
03450       -1,    83,    84,    85,     0,    87,    -1,    -1,    -1,    -1,
03451       -1,    -1,     8,     9,    10,    -1,    -1,    -1,    14,    15,
03452       -1,    17,    -1,    -1,    -1,    -1,    -1,   109,   110,    -1,
03453      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03454       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03455       -1,    -1,    -1,    -1,   136,   137,   138,   139,   140,    -1,
03456       -1,   143,    -1,   145,    -1,   147,    -1,    -1,    -1,    -1,
03457       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03458       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03459       -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03460       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03461       -1,    -1,    -1,   109,   110,    -1,   112,   113,   114,   115,
03462      116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
03463       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03464       -1,   137,   138,   139,   140,    -1,    -1,   143,    -1,   145,
03465        1,   147,     3,     4,     5,     6,     7,     8,     9,    10,
03466       11,    12,    -1,    -1,    15,    16,    -1,    18,    19,    20,
03467       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03468       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03469       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03470       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03471       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03472       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03473       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03474       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03475      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03476       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03477       -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
03478       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03479       -1,    -1,    -1,    -1,   145,     1,   147,     3,     4,     5,
03480        6,     7,    -1,    -1,    10,    11,    12,    -1,    14,    15,
03481       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03482       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03483       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03484       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03485       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03486       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03487       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03488       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03489       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03490       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03491       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03492       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03493       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,
03494        1,   147,     3,     4,     5,     6,     7,    -1,    -1,    10,
03495       11,    12,    -1,    -1,    15,    16,    17,    18,    19,    20,
03496       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03497       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03498       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03499       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03500       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03501       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03502       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03503       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03504      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03505       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03506       -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
03507        1,    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03508       11,    12,    -1,    -1,   145,    16,   147,    18,    19,    20,
03509       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03510       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03511       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
03512       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03513       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03514       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03515       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03516       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03517      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03518       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03519       -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
03520       -1,    -1,    -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,
03521       -1,    -1,    -1,    -1,   145,     1,   147,     3,     4,     5,
03522        6,     7,    -1,    -1,    10,    11,    12,    -1,    -1,    15,
03523       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03524       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03525       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03526       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03527       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03528       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03529       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03530       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03531       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03532       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03533       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03534       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
03535        6,     7,    -1,     9,    10,    11,    12,    -1,    -1,   145,
03536       16,   147,    18,    19,    20,    21,    22,    23,    24,    -1,
03537       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03538       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03539       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03540       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03541       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03542       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03543       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03544       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03545       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03546       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03547       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
03548        6,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,   145,
03549       16,   147,    18,    19,    20,    21,    22,    23,    24,    -1,
03550       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03551       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03552       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03553       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03554       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03555       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03556       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03557       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03558       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03559       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03560       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
03561        6,     7,    -1,    -1,    -1,    11,    12,   143,    -1,   145,
03562       16,   147,    18,    19,    20,    21,    22,    23,    24,    -1,
03563       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03564       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03565       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03566       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03567       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03568       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03569       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03570       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03571       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03572       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03573       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
03574        6,     7,    -1,    -1,    -1,    11,    12,   143,    -1,   145,
03575       16,   147,    18,    19,    20,    21,    22,    23,    24,    -1,
03576       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03577       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03578       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03579       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03580       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03581       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03582       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03583       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03584       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03585       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03586       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03587       -1,   137,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,
03588        1,   147,     3,     4,     5,     6,     7,    -1,    -1,    10,
03589       11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,    20,
03590       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03591       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03592       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03593       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03594       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03595       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03596       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03597       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03598      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03599       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03600       -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
03601       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03602       11,    12,    -1,    -1,   145,    16,   147,    18,    19,    20,
03603       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03604       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03605       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03606       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03607       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03608       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03609       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03610       -1,    92,    93,    -1,    95,    96,    97,    98,    99,   100,
03611      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03612       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03613       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03614       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03615       32,    33,    34,    35,    36,    -1,   147,    39,    -1,    -1,
03616       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03617       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03618       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03619       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03620       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03621       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03622      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03623       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03624      122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03625       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03626       12,    -1,    -1,   145,    16,   147,    18,    19,    20,    21,
03627       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03628       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03629       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03630       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03631       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03632       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03633       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03634       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03635      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03636        3,     4,     5,     6,     7,    -1,    -1,    -1,    11,    12,
03637      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03638       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03639       33,    34,    35,    36,    -1,   147,    39,    -1,    -1,    -1,
03640       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03641       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03642       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03643       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03644       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03645       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03646      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03647       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03648      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03649        5,     6,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,
03650       -1,    16,   145,    18,    19,    20,    21,    22,    23,    24,
03651       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03652       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03653       45,    46,    -1,    48,    49,    50,    51,    52,    53,    54,
03654       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03655       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03657       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03658       95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03659       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03660       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03661       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03662       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03663      145,     3,     4,     5,     6,     7,     8,     9,    10,    11,
03664       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
03665       22,    23,    24,    25,    26,    -1,    -1,    -1,    30,    31,
03666       32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
03667       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
03668       52,    53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
03669       -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    71,
03670       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
03671       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03672       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
03673       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03674      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03675       -1,   123,   124,    -1,    -1,    -1,    -1,    -1,     3,     4,
03676        5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,   141,
03677      142,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03678       -1,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03679       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03680       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03681       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03682       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03683       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03684       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03685       95,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03686       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03687       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03688       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03689       -1,   136,    -1,    11,    12,    -1,    -1,   142,    16,    -1,
03690       18,    19,    20,    21,    22,    23,    24,    -1,    26,    -1,
03691       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03692       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03693       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03694       58,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03695       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03696       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03697       -1,    89,    90,    -1,    92,    93,    -1,    95,    96,    97,
03698       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03699       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03700       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03701       -1,    -1,     3,     4,     5,    -1,     7,    -1,   136,    -1,
03702       11,    12,    -1,    -1,   142,    16,    -1,    18,    19,    20,
03703       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03704       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03705       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03706       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03707       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03708       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03709       -1,    -1,    -1,    -1,    -1,    86,    87,    -1,    89,    90,
03710       -1,    92,    93,    -1,    95,    96,    97,    98,    99,   100,
03711      101,   102,   103,    -1,    -1,    -1,    -1,    -1,   109,    -1,
03712       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03713        7,   122,   123,   124,    11,    12,    -1,    -1,    -1,    16,
03714       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03715       -1,   142,    -1,    30,    31,    32,    33,    34,    35,    36,
03716       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03717       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03718       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03719       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03720       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03721       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    96,
03722       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03723       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03724        3,     4,     5,    -1,     7,   122,   123,   124,    11,    12,
03725       -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,    22,
03726       23,    24,    -1,    -1,    -1,   142,    -1,    30,    31,    32,
03727       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03728       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03729       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03730       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03731       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03732       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03733       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03734      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03735       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03736      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03737       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,
03738        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
03739       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
03740       23,    24,    25,    26,    -1,    -1,    -1,    30,    31,    32,
03741       33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
03742       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03743       53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    -1,
03744       -1,    -1,    -1,    66,    67,    68,    69,    70,    71,    72,
03745       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
03746       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03747       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03748       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
03749      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03750      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03751       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,     3,
03752        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
03753       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
03754       24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
03755       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
03756       -1,    45,    46,    47,    48,    49,    50,    51,    52,    53,
03757       54,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03758       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03759       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03760       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03761       -1,    95,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,
03762       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03763      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03764      124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03765       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,     3,     4,
03766        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
03767       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
03768       25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03769       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
03770       45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
03771       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03772       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03773       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03774       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03775       95,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
03776       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03777      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03778       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03779       -1,    -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,
03780        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
03781       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
03782       26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03783       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
03784       46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
03785       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03786       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03787       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03788       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03789       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03790       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03791      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03792       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03793       12,    -1,    -1,    -1,    16,   141,    18,    19,    20,    21,
03794       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03795       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03796       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03797       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03798       62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03799       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03800       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03801       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03802      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03803       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03804      122,    11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,
03805       20,    21,    22,    23,    24,    -1,    -1,    -1,   140,    -1,
03806       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03807       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03808       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03809       60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
03810       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03811       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03812       90,    -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,
03813      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03814       -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
03815       -1,    -1,   122,    11,    12,    -1,    -1,    -1,    16,    -1,
03816       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03817      140,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03818       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03819       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03820       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03821       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03822       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03823       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03824       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03825       -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,
03826       -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
03827       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03828       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03829       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,    48,
03830       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03831       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03832       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03833       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03834       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
03835       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03836       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03837       -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
03838       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03839       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03840       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03841       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
03842       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03843       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03844       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03845       90,    -1,    92,    93,    -1,    95,    96,    97,    98,    99,
03846      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03847       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03848       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03849       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03850       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03851       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03852       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03853       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03854       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03855       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03856       -1,    92,    93,    -1,    95,    96,    97,    98,    99,   100,
03857      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03858       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03859       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03860       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03861       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03862       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03863       52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
03864       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03865       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03866       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03867       92,    93,    -1,    95,    -1,    97,    98,    99,   100,   101,
03868      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03869        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03870      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03871       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03872       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03873       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03874       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03875       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03876       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03877       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03878       93,    -1,    -1,    96,    97,    98,    99,   100,   101,   102,
03879      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03880        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03881      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03882       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03883       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03884       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03885       54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
03886       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03887       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03888       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03889       -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
03890       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03891        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03892      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03893       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03894       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03895       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03896       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03897       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03898       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03899       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03900       -1,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03901       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03902       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03903       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03904       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03905       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03906       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03907       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03908       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03909       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03910       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03911       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03912       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03913        7,    -1,    -1,    -1,    11,    12,   122,   123,   124,    16,
03914       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03915       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03916       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03917       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03918       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
03919       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03920       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03921       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
03922       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03923       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03924       -1,    -1,    -1,    11,    12,   122,   123,   124,    16,    -1,
03925       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03926       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03927       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03928       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03929       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03930       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03931       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03932       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03933       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03934       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
03935       -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
03936       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03937       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03938       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03939       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03940       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03941       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03942       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03943       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
03944       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03945       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03946       -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
03947       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03948       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03949       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03950       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03951       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03952       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03953       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03954       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03955      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03956       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03957       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03958       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03959       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03960       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03961       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03962       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03963       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03964       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03965       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03966      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03967       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03968       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03969       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03970       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03971       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03972       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03973       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03974       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03975       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03976       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03977      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03978        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03979      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03980       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03981       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03982       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03983       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03984       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03985       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03986       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03987       93,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
03988      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03989        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03990      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03991       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03992       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03993       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03994       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03995       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03996       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03997       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03998       -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
03999       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
04000       -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,    18,
04001       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
04002       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
04003       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
04004       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
04005       59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,
04006       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04007       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
04008       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
04009       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,     3,
04010        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
04011       -1,    -1,    16,   122,    18,    19,    20,    21,    22,    23,
04012       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
04013       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
04014       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
04015       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
04016       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04017       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
04018       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
04019       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
04020       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
04021       -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,    18,
04022       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
04023       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
04024       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
04025       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
04026       59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,
04027       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04028       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
04029       89,    90,    -1,    92,    93,    -1,    -1,    -1,    97,    98,
04030       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,     3,
04031        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
04032       -1,    -1,    16,   122,    18,    19,    20,    21,    22,    23,
04033       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
04034       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
04035       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
04036       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
04037       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04038       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04039       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
04040       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
04041       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
04042       -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,    18,
04043       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
04044       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
04045       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
04046       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
04047       59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,
04048       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04049       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
04050       89,    90,    -1,    92,    93,    -1,    -1,    -1,    97,    98,
04051       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,     3,
04052        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
04053       -1,    -1,    16,   122,    18,    19,    20,    21,    22,    23,
04054       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
04055       34,    35,    36,    -1,    -1,    39,    -1,    44,    -1,    -1,
04056       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
04057       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
04058       64,    68,    69,    70,    71,    72,    73,    74,    75,    76,
04059       77,    78,    79,    80,    -1,    -1,    83,    84,    -1,    -1,
04060       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
04061       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
04062       -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,   116,
04063      117,   118,   119,   120,   121,    -1,    -1,    -1,   122,    -1,
04064       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
04065       -1,    -1,    -1,   140,    66,    67,    68,    69,    70,    71,
04066       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
04067       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04068       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
04069       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04070      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04071       -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,
04072       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
04073      142,    66,    67,    68,    69,    70,    71,    72,    73,    74,
04074       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
04075       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04076       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04077       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
04078      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
04079       -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
04080       -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,
04081       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
04082       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
04083       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
04084       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04085       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
04086      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,
04087       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
04088       -1,    -1,    -1,   141,   142,    66,    67,    68,    69,    70,
04089       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
04090       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
04091       -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
04092       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04093       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04094      121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,
04095       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04096      141,   142,    66,    67,    68,    69,    70,    71,    72,    73,
04097       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
04098       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04099       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04100       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
04101      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
04102      124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,
04103       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,
04104       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
04105       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
04106       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
04107       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04108       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
04109      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
04110       -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
04111       -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,    69,
04112       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
04113       -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
04114       -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
04115       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04116       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
04117      120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,
04118       53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
04119       -1,   141,   142,    66,    67,    68,    69,    70,    71,    72,
04120       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
04121       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04122       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04123       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
04124      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
04125      123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,
04126       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,
04127       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
04128       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
04129       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
04130       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04131       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
04132      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
04133       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
04134       -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,
04135       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
04136       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
04137       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
04138       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04139       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
04140      119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,
04141       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
04142       -1,    -1,   141,   142,    66,    67,    68,    69,    70,    71,
04143       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
04144       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04145       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
04146       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04147      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04148       -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,
04149       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
04150      142,    66,    67,    68,    69,    70,    71,    72,    73,    74,
04151       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
04152       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04153       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04154       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
04155      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
04156       -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
04157       -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,
04158       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
04159       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
04160       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
04161       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04162       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
04163      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,
04164       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
04165       -1,    -1,    -1,   141,   142,    66,    67,    68,    69,    70,
04166       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
04167       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
04168       -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
04169       -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04170       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04171      121,    44,   123,   124,    -1,    -1,    68,    69,    70,    71,
04172       72,    73,    74,    75,    76,    77,    78,    79,    80,    -1,
04173      141,    83,    84,    -1,    -1,    68,    69,    70,    71,    72,
04174       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
04175       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,
04176      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04177       -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,   112,
04178      113,   114,   115,   116,   117,   118,   119,   120,   121
04179 };
04180 
04181 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
04182    symbol of state STATE-NUM.  */
04183 static const yytype_uint16 yystos[] =
04184 {
04185        0,   149,   150,     0,     1,     3,     4,     5,     6,     7,
04186       11,    12,    16,    18,    19,    20,    21,    22,    23,    24,
04187       30,    31,    32,    33,    34,    35,    36,    39,    45,    46,
04188       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
04189       57,    59,    60,    62,    63,    64,    66,    67,    86,    89,
04190       90,    92,    93,    95,    97,    98,    99,   100,   101,   102,
04191      103,   122,   123,   124,   151,   152,   153,   158,   160,   161,
04192      163,   164,   167,   168,   170,   171,   172,   174,   175,   185,
04193      199,   216,   217,   218,   219,   220,   221,   222,   223,   224,
04194      225,   226,   249,   250,   260,   261,   262,   263,   264,   265,
04195      266,   269,   279,   281,   282,   283,   284,   285,   286,   287,
04196      310,   321,   153,     3,     4,     5,     6,     7,     8,     9,
04197       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
04198       20,    21,    22,    23,    24,    25,    26,    30,    31,    32,
04199       33,    34,    35,    36,    37,    38,    39,    45,    46,    47,
04200       48,    49,    50,    51,    52,    53,    56,    66,    67,    68,
04201       69,    70,    71,    72,    73,    74,    77,    78,    81,    82,
04202       83,    84,    95,   112,   113,   114,   115,   116,   117,   118,
04203      119,   120,   121,   123,   124,   141,   178,   179,   180,   181,
04204      183,   184,   279,   281,    39,    58,    86,    89,    95,    96,
04205      123,   167,   175,   185,   187,   192,   195,   197,   216,   283,
04206      284,   286,   287,   308,   309,   192,   192,   142,   193,   194,
04207      142,   189,   193,   142,   147,   315,    54,   180,   315,   154,
04208      136,    21,    22,    30,    31,    32,   185,   216,   310,   185,
04209       56,     1,    89,   156,   157,   158,   169,   170,   321,   161,
04210      188,   197,   308,   321,   187,   307,   308,   321,    46,    86,
04211      122,   140,   174,   199,   216,   283,   284,   287,   242,   243,
04212       54,    55,    57,   178,   272,   280,   271,   272,   273,   146,
04213      267,   146,   270,    59,    60,   163,   185,   185,   145,   147,
04214      314,   319,   320,    40,    41,    42,    43,    44,    37,    38,
04215       28,   247,   109,   140,    89,    95,   171,   109,    68,    69,
04216       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
04217       80,    83,    84,   110,   112,   113,   114,   115,   116,   117,
04218      118,   119,   120,   121,    85,   138,   139,   200,   161,   162,
04219      162,   203,   205,   162,   314,   320,    86,   168,   175,   216,
04220      232,   283,   284,   287,    52,    56,    83,    86,   176,   177,
04221      216,   283,   284,   287,   177,    33,    34,    35,    36,    49,
04222       50,    51,    52,    56,   142,   178,   285,   305,    85,   139,
04223       26,   136,   251,   263,    87,    87,   189,   193,   251,   140,
04224      187,    56,   187,   187,   109,    88,   140,   196,   321,    85,
04225      138,   139,    87,    87,   140,   196,   192,   315,   316,   192,
04226      191,   192,   197,   308,   321,   161,   316,   161,    54,    63,
04227       64,   159,   142,   186,   136,   156,    85,   139,    87,   158,
04228      169,   143,   314,   320,   316,   201,   144,   140,   147,   318,
04229      140,   318,   137,   318,   315,    56,    59,    60,   171,   173,
04230      140,    85,   138,   139,   244,    61,   104,   105,   106,   274,
04231      106,   274,   106,    65,   274,   106,   106,   268,   274,   106,
04232       61,   106,    68,    68,   145,   153,   162,   162,   162,   162,
04233      158,   161,   161,   248,    95,   163,   187,   197,   198,   169,
04234      140,   174,   140,   160,   163,   175,   185,   187,   198,   185,
04235      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
04236      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
04237      185,   185,   185,   185,   185,    52,    53,    56,   183,   189,
04238      311,   312,   191,    52,    53,    56,   183,   189,   311,   155,
04239      156,    13,   228,   319,   228,   162,   162,   314,    17,   254,
04240       56,    85,   138,   139,    25,   161,    52,    56,   176,     1,
04241      113,   288,   319,    85,   138,   139,   212,   306,   213,    85,
04242      139,   313,    52,    56,   311,   311,   253,   252,   163,   185,
04243      163,   185,    94,   165,   182,   185,   187,    95,   187,   195,
04244      308,    52,    56,   191,    52,    56,   309,   316,   143,   316,
04245      140,   140,   316,   180,   202,   185,   151,   137,   311,   311,
04246      185,   316,   158,   316,   308,   140,   173,    52,    56,   191,
04247       52,    56,    52,    54,    55,    56,    57,    89,    95,    96,
04248      116,   119,   142,   245,   291,   292,   293,   294,   295,   296,
04249      299,   300,   301,   302,   303,   276,   275,   146,   274,   146,
04250      185,   185,    76,   114,   237,   238,   321,   187,   140,   316,
04251      173,   140,   109,    44,   315,    87,    87,   189,   193,   315,
04252      317,    87,    87,   189,   190,   193,   321,    10,   227,     8,
04253      256,   321,   156,    13,   156,    27,   229,   319,   229,   254,
04254      197,   227,    52,    56,   191,    52,    56,   207,   210,   319,
04255      289,   209,    52,    56,   176,   191,   155,   161,   142,   290,
04256      291,   214,   190,   193,   190,   193,   237,   237,    44,   166,
04257      180,   187,   196,    87,    87,   317,    87,    87,   308,   161,
04258      137,   318,   171,   317,   109,    52,    89,    95,   233,   234,
04259      235,   293,   291,    29,   107,   246,   140,   304,   321,   140,
04260      304,    52,   140,   304,    52,   277,    54,    55,    57,   278,
04261      287,    52,   145,   236,   239,   295,   297,   298,   301,   303,
04262      321,   156,    95,   187,   173,   185,   111,   163,   185,   163,
04263      185,   165,   144,    87,   163,   185,   163,   185,   165,   187,
04264      198,   257,   321,    15,   231,   321,    14,   230,   231,   231,
04265      204,   206,   227,   140,   228,   317,   162,   319,   162,   155,
04266      317,   227,   316,   291,   155,   319,   178,   156,   156,   185,
04267      237,    87,   140,   316,   187,   235,   140,   293,   140,   316,
04268      239,   156,   156,   294,   299,   301,   303,   295,   296,   301,
04269      295,   156,   109,    52,   240,   241,   292,   239,   114,   140,
04270      304,   140,   304,   140,   304,    10,   187,   185,   163,   185,
04271       88,   258,   321,   156,     9,   259,   321,   162,   227,   227,
04272      156,   156,   187,   156,   229,   211,   319,   227,   316,   227,
04273      215,    10,   137,   156,   316,   234,   140,    95,   233,   316,
04274       10,   137,   140,   304,   140,   304,   140,   304,   140,   304,
04275      304,   137,    86,   216,   140,   114,   298,   301,   295,   297,
04276      301,   295,    86,   175,   216,   283,   284,   287,   228,   156,
04277      228,   227,   227,   231,   254,   255,   208,   155,   290,   137,
04278      140,   234,   140,   293,   295,   301,   295,   295,    56,    85,
04279      241,   140,   304,   140,   304,   304,   140,   304,   304,    56,
04280       85,   138,   139,   156,   156,   156,   227,   155,   234,   140,
04281      304,   140,   304,   304,   304,    52,    56,   295,   301,   295,
04282      295,    52,    56,   191,    52,    56,   256,   230,   227,   227,
04283      234,   295,   304,   140,   304,   304,   304,   317,   304,   295,
04284      304
04285 };
04286 
04287 #define yyerrok         (yyerrstatus = 0)
04288 #define yyclearin       (yychar = YYEMPTY)
04289 #define YYEMPTY         (-2)
04290 #define YYEOF           0
04291 
04292 #define YYACCEPT        goto yyacceptlab
04293 #define YYABORT         goto yyabortlab
04294 #define YYERROR         goto yyerrorlab
04295 
04296 
04297 /* Like YYERROR except do call yyerror.  This remains here temporarily
04298    to ease the transition to the new meaning of YYERROR, for GCC.
04299    Once GCC version 2 has supplanted version 1, this can go.  */
04300 
04301 #define YYFAIL          goto yyerrlab
04302 
04303 #define YYRECOVERING()  (!!yyerrstatus)
04304 
04305 #define YYBACKUP(Token, Value)                                  \
04306 do                                                              \
04307   if (yychar == YYEMPTY && yylen == 1)                          \
04308     {                                                           \
04309       yychar = (Token);                                         \
04310       yylval = (Value);                                         \
04311       yytoken = YYTRANSLATE (yychar);                           \
04312       YYPOPSTACK (1);                                           \
04313       goto yybackup;                                            \
04314     }                                                           \
04315   else                                                          \
04316     {                                                           \
04317       parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04318       YYERROR;                                                  \
04319     }                                                           \
04320 while (YYID (0))
04321 
04322 
04323 #define YYTERROR        1
04324 #define YYERRCODE       256
04325 
04326 
04327 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
04328    If N is 0, then set CURRENT to the empty location which ends
04329    the previous symbol: RHS[0] (always defined).  */
04330 
04331 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04332 #ifndef YYLLOC_DEFAULT
04333 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
04334     do                                                                  \
04335       if (YYID (N))                                                    \
04336         {                                                               \
04337           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
04338           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
04339           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
04340           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
04341         }                                                               \
04342       else                                                              \
04343         {                                                               \
04344           (Current).first_line   = (Current).last_line   =              \
04345             YYRHSLOC (Rhs, 0).last_line;                                \
04346           (Current).first_column = (Current).last_column =              \
04347             YYRHSLOC (Rhs, 0).last_column;                              \
04348         }                                                               \
04349     while (YYID (0))
04350 #endif
04351 
04352 
04353 /* YY_LOCATION_PRINT -- Print the location on the stream.
04354    This macro was not mandated originally: define only if we know
04355    we won't break user code: when these are the locations we know.  */
04356 
04357 #ifndef YY_LOCATION_PRINT
04358 # if YYLTYPE_IS_TRIVIAL
04359 #  define YY_LOCATION_PRINT(File, Loc)                  \
04360      fprintf (File, "%d.%d-%d.%d",                      \
04361               (Loc).first_line, (Loc).first_column,     \
04362               (Loc).last_line,  (Loc).last_column)
04363 # else
04364 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04365 # endif
04366 #endif
04367 
04368 
04369 /* YYLEX -- calling `yylex' with the right arguments.  */
04370 
04371 #ifdef YYLEX_PARAM
04372 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04373 #else
04374 # define YYLEX yylex (&yylval)
04375 #endif
04376 
04377 /* Enable debugging if requested.  */
04378 #if YYDEBUG
04379 
04380 # ifndef YYFPRINTF
04381 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
04382 #  define YYFPRINTF fprintf
04383 # endif
04384 
04385 # define YYDPRINTF(Args)                        \
04386 do {                                            \
04387   if (yydebug)                                  \
04388     YYFPRINTF Args;                             \
04389 } while (YYID (0))
04390 
04391 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
04392 do {                                                                      \
04393   if (yydebug)                                                            \
04394     {                                                                     \
04395       YYFPRINTF (stderr, "%s ", Title);                                   \
04396       yy_symbol_print (stderr,                                            \
04397                   Type, Value, parser); \
04398       YYFPRINTF (stderr, "\n");                                           \
04399     }                                                                     \
04400 } while (YYID (0))
04401 
04402 
04403 /*--------------------------------.
04404 | Print this symbol on YYOUTPUT.  |
04405 `--------------------------------*/
04406 
04407 /*ARGSUSED*/
04408 #if (defined __STDC__ || defined __C99__FUNC__ \
04409      || defined __cplusplus || defined _MSC_VER)
04410 static void
04411 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04412 #else
04413 static void
04414 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04415     FILE *yyoutput;
04416     int yytype;
04417     YYSTYPE const * const yyvaluep;
04418     struct parser_params *parser;
04419 #endif
04420 {
04421   if (!yyvaluep)
04422     return;
04423   YYUSE (parser);
04424 # ifdef YYPRINT
04425   if (yytype < YYNTOKENS)
04426     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04427 # else
04428   YYUSE (yyoutput);
04429 # endif
04430   switch (yytype)
04431     {
04432       default:
04433         break;
04434     }
04435 }
04436 
04437 
04438 /*--------------------------------.
04439 | Print this symbol on YYOUTPUT.  |
04440 `--------------------------------*/
04441 
04442 #if (defined __STDC__ || defined __C99__FUNC__ \
04443      || defined __cplusplus || defined _MSC_VER)
04444 static void
04445 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04446 #else
04447 static void
04448 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04449     FILE *yyoutput;
04450     int yytype;
04451     YYSTYPE const * const yyvaluep;
04452     struct parser_params *parser;
04453 #endif
04454 {
04455   if (yytype < YYNTOKENS)
04456     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04457   else
04458     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04459 
04460   yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04461   YYFPRINTF (yyoutput, ")");
04462 }
04463 
04464 /*------------------------------------------------------------------.
04465 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
04466 | TOP (included).                                                   |
04467 `------------------------------------------------------------------*/
04468 
04469 #if (defined __STDC__ || defined __C99__FUNC__ \
04470      || defined __cplusplus || defined _MSC_VER)
04471 static void
04472 yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
04473 #else
04474 static void
04475 yy_stack_print (bottom, top)
04476     yytype_int16 *bottom;
04477     yytype_int16 *top;
04478 #endif
04479 {
04480   YYFPRINTF (stderr, "Stack now");
04481   for (; bottom <= top; ++bottom)
04482     YYFPRINTF (stderr, " %d", *bottom);
04483   YYFPRINTF (stderr, "\n");
04484 }
04485 
04486 # define YY_STACK_PRINT(Bottom, Top)                            \
04487 do {                                                            \
04488   if (yydebug)                                                  \
04489     yy_stack_print ((Bottom), (Top));                           \
04490 } while (YYID (0))
04491 
04492 
04493 /*------------------------------------------------.
04494 | Report that the YYRULE is going to be reduced.  |
04495 `------------------------------------------------*/
04496 
04497 #if (defined __STDC__ || defined __C99__FUNC__ \
04498      || defined __cplusplus || defined _MSC_VER)
04499 static void
04500 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04501 #else
04502 static void
04503 yy_reduce_print (yyvsp, yyrule, parser)
04504     YYSTYPE *yyvsp;
04505     int yyrule;
04506     struct parser_params *parser;
04507 #endif
04508 {
04509   int yynrhs = yyr2[yyrule];
04510   int yyi;
04511   unsigned long int yylno = yyrline[yyrule];
04512   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04513              yyrule - 1, yylno);
04514   /* The symbols being reduced.  */
04515   for (yyi = 0; yyi < yynrhs; yyi++)
04516     {
04517       fprintf (stderr, "   $%d = ", yyi + 1);
04518       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04519                        &(yyvsp[(yyi + 1) - (yynrhs)])
04520                                        , parser);
04521       fprintf (stderr, "\n");
04522     }
04523 }
04524 
04525 # define YY_REDUCE_PRINT(Rule)          \
04526 do {                                    \
04527   if (yydebug)                          \
04528     yy_reduce_print (yyvsp, Rule, parser); \
04529 } while (YYID (0))
04530 
04531 /* Nonzero means print parse trace.  It is left uninitialized so that
04532    multiple parsers can coexist.  */
04533 #ifndef yydebug
04534 int yydebug;
04535 #endif
04536 #else /* !YYDEBUG */
04537 # define YYDPRINTF(Args)
04538 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04539 # define YY_STACK_PRINT(Bottom, Top)
04540 # define YY_REDUCE_PRINT(Rule)
04541 #endif /* !YYDEBUG */
04542 
04543 
04544 /* YYINITDEPTH -- initial size of the parser's stacks.  */
04545 #ifndef YYINITDEPTH
04546 # define YYINITDEPTH 200
04547 #endif
04548 
04549 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
04550    if the built-in stack extension method is used).
04551 
04552    Do not make this value too large; the results are undefined if
04553    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
04554    evaluated with infinite-precision integer arithmetic.  */
04555 
04556 #ifndef YYMAXDEPTH
04557 # define YYMAXDEPTH 10000
04558 #endif
04559 
04560 
04561 
04562 #if YYERROR_VERBOSE
04563 
04564 # ifndef yystrlen
04565 #  if defined __GLIBC__ && defined _STRING_H
04566 #   define yystrlen strlen
04567 #  else
04568 /* Return the length of YYSTR.  */
04569 #if (defined __STDC__ || defined __C99__FUNC__ \
04570      || defined __cplusplus || defined _MSC_VER)
04571 static YYSIZE_T
04572 yystrlen (const char *yystr)
04573 #else
04574 static YYSIZE_T
04575 yystrlen (yystr)
04576     const char *yystr;
04577 #endif
04578 {
04579   YYSIZE_T yylen;
04580   for (yylen = 0; yystr[yylen]; yylen++)
04581     continue;
04582   return yylen;
04583 }
04584 #  endif
04585 # endif
04586 
04587 # ifndef yystpcpy
04588 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04589 #   define yystpcpy stpcpy
04590 #  else
04591 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
04592    YYDEST.  */
04593 #if (defined __STDC__ || defined __C99__FUNC__ \
04594      || defined __cplusplus || defined _MSC_VER)
04595 static char *
04596 yystpcpy (char *yydest, const char *yysrc)
04597 #else
04598 static char *
04599 yystpcpy (yydest, yysrc)
04600     char *yydest;
04601     const char *yysrc;
04602 #endif
04603 {
04604   char *yyd = yydest;
04605   const char *yys = yysrc;
04606 
04607   while ((*yyd++ = *yys++) != '\0')
04608     continue;
04609 
04610   return yyd - 1;
04611 }
04612 #  endif
04613 # endif
04614 
04615 # ifndef yytnamerr
04616 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
04617    quotes and backslashes, so that it's suitable for yyerror.  The
04618    heuristic is that double-quoting is unnecessary unless the string
04619    contains an apostrophe, a comma, or backslash (other than
04620    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
04621    null, do not copy; instead, return the length of what the result
04622    would have been.  */
04623 static YYSIZE_T
04624 yytnamerr (char *yyres, const char *yystr)
04625 {
04626   if (*yystr == '"')
04627     {
04628       YYSIZE_T yyn = 0;
04629       char const *yyp = yystr;
04630 
04631       for (;;)
04632         switch (*++yyp)
04633           {
04634           case '\'':
04635           case ',':
04636             goto do_not_strip_quotes;
04637 
04638           case '\\':
04639             if (*++yyp != '\\')
04640               goto do_not_strip_quotes;
04641             /* Fall through.  */
04642           default:
04643             if (yyres)
04644               yyres[yyn] = *yyp;
04645             yyn++;
04646             break;
04647 
04648           case '"':
04649             if (yyres)
04650               yyres[yyn] = '\0';
04651             return yyn;
04652           }
04653     do_not_strip_quotes: ;
04654     }
04655 
04656   if (! yyres)
04657     return yystrlen (yystr);
04658 
04659   return yystpcpy (yyres, yystr) - yyres;
04660 }
04661 # endif
04662 
04663 /* Copy into YYRESULT an error message about the unexpected token
04664    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
04665    including the terminating null byte.  If YYRESULT is null, do not
04666    copy anything; just return the number of bytes that would be
04667    copied.  As a special case, return 0 if an ordinary "syntax error"
04668    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
04669    size calculation.  */
04670 static YYSIZE_T
04671 yysyntax_error (char *yyresult, int yystate, int yychar)
04672 {
04673   int yyn = yypact[yystate];
04674 
04675   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
04676     return 0;
04677   else
04678     {
04679       int yytype = YYTRANSLATE (yychar);
04680       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
04681       YYSIZE_T yysize = yysize0;
04682       YYSIZE_T yysize1;
04683       int yysize_overflow = 0;
04684       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04685       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04686       int yyx;
04687 
04688 # if 0
04689       /* This is so xgettext sees the translatable formats that are
04690          constructed on the fly.  */
04691       YY_("syntax error, unexpected %s");
04692       YY_("syntax error, unexpected %s, expecting %s");
04693       YY_("syntax error, unexpected %s, expecting %s or %s");
04694       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
04695       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
04696 # endif
04697       char *yyfmt;
04698       char const *yyf;
04699       static char const yyunexpected[] = "syntax error, unexpected %s";
04700       static char const yyexpecting[] = ", expecting %s";
04701       static char const yyor[] = " or %s";
04702       char yyformat[sizeof yyunexpected
04703                     + sizeof yyexpecting - 1
04704                     + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
04705                        * (sizeof yyor - 1))];
04706       char const *yyprefix = yyexpecting;
04707 
04708       /* Start YYX at -YYN if negative to avoid negative indexes in
04709          YYCHECK.  */
04710       int yyxbegin = yyn < 0 ? -yyn : 0;
04711 
04712       /* Stay within bounds of both yycheck and yytname.  */
04713       int yychecklim = YYLAST - yyn + 1;
04714       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04715       int yycount = 1;
04716 
04717       yyarg[0] = yytname[yytype];
04718       yyfmt = yystpcpy (yyformat, yyunexpected);
04719 
04720       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04721         if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
04722           {
04723             if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04724               {
04725                 yycount = 1;
04726                 yysize = yysize0;
04727                 yyformat[sizeof yyunexpected - 1] = '\0';
04728                 break;
04729               }
04730             yyarg[yycount++] = yytname[yyx];
04731             yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04732             yysize_overflow |= (yysize1 < yysize);
04733             yysize = yysize1;
04734             yyfmt = yystpcpy (yyfmt, yyprefix);
04735             yyprefix = yyor;
04736           }
04737 
04738       yyf = YY_(yyformat);
04739       yysize1 = yysize + yystrlen (yyf);
04740       yysize_overflow |= (yysize1 < yysize);
04741       yysize = yysize1;
04742 
04743       if (yysize_overflow)
04744         return YYSIZE_MAXIMUM;
04745 
04746       if (yyresult)
04747         {
04748           /* Avoid sprintf, as that infringes on the user's name space.
04749              Don't have undefined behavior even if the translation
04750              produced a string with the wrong number of "%s"s.  */
04751           char *yyp = yyresult;
04752           int yyi = 0;
04753           while ((*yyp = *yyf) != '\0')
04754             {
04755               if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
04756                 {
04757                   yyp += yytnamerr (yyp, yyarg[yyi++]);
04758                   yyf += 2;
04759                 }
04760               else
04761                 {
04762                   yyp++;
04763                   yyf++;
04764                 }
04765             }
04766         }
04767       return yysize;
04768     }
04769 }
04770 #endif /* YYERROR_VERBOSE */
04771 
04772 
04773 /*-----------------------------------------------.
04774 | Release the memory associated to this symbol.  |
04775 `-----------------------------------------------*/
04776 
04777 /*ARGSUSED*/
04778 #if (defined __STDC__ || defined __C99__FUNC__ \
04779      || defined __cplusplus || defined _MSC_VER)
04780 static void
04781 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04782 #else
04783 static void
04784 yydestruct (yymsg, yytype, yyvaluep, parser)
04785     const char *yymsg;
04786     int yytype;
04787     YYSTYPE *yyvaluep;
04788     struct parser_params *parser;
04789 #endif
04790 {
04791   YYUSE (yyvaluep);
04792   YYUSE (parser);
04793 
04794   if (!yymsg)
04795     yymsg = "Deleting";
04796   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04797 
04798   switch (yytype)
04799     {
04800 
04801       default:
04802         break;
04803     }
04804 }
04805 
04806 
04807 /* Prevent warnings from -Wmissing-prototypes.  */
04808 
04809 #ifdef YYPARSE_PARAM
04810 #if defined __STDC__ || defined __cplusplus
04811 int yyparse (void *YYPARSE_PARAM);
04812 #else
04813 int yyparse ();
04814 #endif
04815 #else /* ! YYPARSE_PARAM */
04816 #if defined __STDC__ || defined __cplusplus
04817 int yyparse (struct parser_params *parser);
04818 #else
04819 int yyparse ();
04820 #endif
04821 #endif /* ! YYPARSE_PARAM */
04822 
04823 
04824 
04825 
04826 
04827 
04828 /*----------.
04829 | yyparse.  |
04830 `----------*/
04831 
04832 #ifdef YYPARSE_PARAM
04833 #if (defined __STDC__ || defined __C99__FUNC__ \
04834      || defined __cplusplus || defined _MSC_VER)
04835 int
04836 yyparse (void *YYPARSE_PARAM)
04837 #else
04838 int
04839 yyparse (YYPARSE_PARAM)
04840     void *YYPARSE_PARAM;
04841 #endif
04842 #else /* ! YYPARSE_PARAM */
04843 #if (defined __STDC__ || defined __C99__FUNC__ \
04844      || defined __cplusplus || defined _MSC_VER)
04845 int
04846 yyparse (struct parser_params *parser)
04847 #else
04848 int
04849 yyparse (parser)
04850     struct parser_params *parser;
04851 #endif
04852 #endif
04853 {
04854   /* The look-ahead symbol.  */
04855 int yychar;
04856 
04857 /* The semantic value of the look-ahead symbol.  */
04858 YYSTYPE yylval;
04859 
04860 /* Number of syntax errors so far.  */
04861 int yynerrs;
04862 
04863   int yystate;
04864   int yyn;
04865   int yyresult;
04866   /* Number of tokens to shift before error messages enabled.  */
04867   int yyerrstatus;
04868   /* Look-ahead token as an internal (translated) token number.  */
04869   int yytoken = 0;
04870 #if YYERROR_VERBOSE
04871   /* Buffer for error messages, and its allocated size.  */
04872   char yymsgbuf[128];
04873   char *yymsg = yymsgbuf;
04874   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04875 #endif
04876 
04877   /* Three stacks and their tools:
04878      `yyss': related to states,
04879      `yyvs': related to semantic values,
04880      `yyls': related to locations.
04881 
04882      Refer to the stacks thru separate pointers, to allow yyoverflow
04883      to reallocate them elsewhere.  */
04884 
04885   /* The state stack.  */
04886   yytype_int16 yyssa[YYINITDEPTH];
04887   yytype_int16 *yyss = yyssa;
04888   yytype_int16 *yyssp;
04889 
04890   /* The semantic value stack.  */
04891   YYSTYPE yyvsa[YYINITDEPTH];
04892   YYSTYPE *yyvs = yyvsa;
04893   YYSTYPE *yyvsp;
04894 
04895 
04896 
04897 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
04898 
04899   YYSIZE_T yystacksize = YYINITDEPTH;
04900 
04901   /* The variables used to return semantic value and location from the
04902      action routines.  */
04903   YYSTYPE yyval;
04904 
04905 
04906   /* The number of symbols on the RHS of the reduced rule.
04907      Keep to zero when no symbol should be popped.  */
04908   int yylen = 0;
04909 
04910   YYDPRINTF ((stderr, "Starting parse\n"));
04911 
04912   yystate = 0;
04913   yyerrstatus = 0;
04914   yynerrs = 0;
04915   yychar = YYEMPTY;             /* Cause a token to be read.  */
04916 
04917   /* Initialize stack pointers.
04918      Waste one element of value and location stack
04919      so that they stay on the same level as the state stack.
04920      The wasted elements are never initialized.  */
04921 
04922   yyssp = yyss;
04923   yyvsp = yyvs;
04924 
04925   goto yysetstate;
04926 
04927 /*------------------------------------------------------------.
04928 | yynewstate -- Push a new state, which is found in yystate.  |
04929 `------------------------------------------------------------*/
04930  yynewstate:
04931   /* In all cases, when you get here, the value and location stacks
04932      have just been pushed.  So pushing a state here evens the stacks.  */
04933   yyssp++;
04934 
04935  yysetstate:
04936   *yyssp = yystate;
04937 
04938   if (yyss + yystacksize - 1 <= yyssp)
04939     {
04940       /* Get the current used size of the three stacks, in elements.  */
04941       YYSIZE_T yysize = yyssp - yyss + 1;
04942 
04943 #ifdef yyoverflow
04944       {
04945         /* Give user a chance to reallocate the stack.  Use copies of
04946            these so that the &'s don't force the real ones into
04947            memory.  */
04948         YYSTYPE *yyvs1 = yyvs;
04949         yytype_int16 *yyss1 = yyss;
04950 
04951 
04952         /* Each stack pointer address is followed by the size of the
04953            data in use in that stack, in bytes.  This used to be a
04954            conditional around just the two extra args, but that might
04955            be undefined if yyoverflow is a macro.  */
04956         yyoverflow (YY_("memory exhausted"),
04957                     &yyss1, yysize * sizeof (*yyssp),
04958                     &yyvs1, yysize * sizeof (*yyvsp),
04959 
04960                     &yystacksize);
04961 
04962         yyss = yyss1;
04963         yyvs = yyvs1;
04964       }
04965 #else /* no yyoverflow */
04966 # ifndef YYSTACK_RELOCATE
04967       goto yyexhaustedlab;
04968 # else
04969       /* Extend the stack our own way.  */
04970       if (YYMAXDEPTH <= yystacksize)
04971         goto yyexhaustedlab;
04972       yystacksize *= 2;
04973       if (YYMAXDEPTH < yystacksize)
04974         yystacksize = YYMAXDEPTH;
04975 
04976       {
04977         yytype_int16 *yyss1 = yyss;
04978         union yyalloc *yyptr =
04979           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04980         if (! yyptr)
04981           goto yyexhaustedlab;
04982         YYSTACK_RELOCATE (yyss);
04983         YYSTACK_RELOCATE (yyvs);
04984 
04985 #  undef YYSTACK_RELOCATE
04986         if (yyss1 != yyssa)
04987           YYSTACK_FREE (yyss1);
04988       }
04989 # endif
04990 #endif /* no yyoverflow */
04991 
04992       yyssp = yyss + yysize - 1;
04993       yyvsp = yyvs + yysize - 1;
04994 
04995 
04996       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04997                   (unsigned long int) yystacksize));
04998 
04999       if (yyss + yystacksize - 1 <= yyssp)
05000         YYABORT;
05001     }
05002 
05003   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
05004 
05005   goto yybackup;
05006 
05007 /*-----------.
05008 | yybackup.  |
05009 `-----------*/
05010 yybackup:
05011 
05012   /* Do appropriate processing given the current state.  Read a
05013      look-ahead token if we need one and don't already have one.  */
05014 
05015   /* First try to decide what to do without reference to look-ahead token.  */
05016   yyn = yypact[yystate];
05017   if (yyn == YYPACT_NINF)
05018     goto yydefault;
05019 
05020   /* Not known => get a look-ahead token if don't already have one.  */
05021 
05022   /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
05023   if (yychar == YYEMPTY)
05024     {
05025       YYDPRINTF ((stderr, "Reading a token: "));
05026       yychar = YYLEX;
05027     }
05028 
05029   if (yychar <= YYEOF)
05030     {
05031       yychar = yytoken = YYEOF;
05032       YYDPRINTF ((stderr, "Now at end of input.\n"));
05033     }
05034   else
05035     {
05036       yytoken = YYTRANSLATE (yychar);
05037       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
05038     }
05039 
05040   /* If the proper action on seeing token YYTOKEN is to reduce or to
05041      detect an error, take that action.  */
05042   yyn += yytoken;
05043   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
05044     goto yydefault;
05045   yyn = yytable[yyn];
05046   if (yyn <= 0)
05047     {
05048       if (yyn == 0 || yyn == YYTABLE_NINF)
05049         goto yyerrlab;
05050       yyn = -yyn;
05051       goto yyreduce;
05052     }
05053 
05054   if (yyn == YYFINAL)
05055     YYACCEPT;
05056 
05057   /* Count tokens shifted since error; after three, turn off error
05058      status.  */
05059   if (yyerrstatus)
05060     yyerrstatus--;
05061 
05062   /* Shift the look-ahead token.  */
05063   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
05064 
05065   /* Discard the shifted token unless it is eof.  */
05066   if (yychar != YYEOF)
05067     yychar = YYEMPTY;
05068 
05069   yystate = yyn;
05070   *++yyvsp = yylval;
05071 
05072   goto yynewstate;
05073 
05074 
05075 /*-----------------------------------------------------------.
05076 | yydefault -- do the default action for the current state.  |
05077 `-----------------------------------------------------------*/
05078 yydefault:
05079   yyn = yydefact[yystate];
05080   if (yyn == 0)
05081     goto yyerrlab;
05082   goto yyreduce;
05083 
05084 
05085 /*-----------------------------.
05086 | yyreduce -- Do a reduction.  |
05087 `-----------------------------*/
05088 yyreduce:
05089   /* yyn is the number of a rule to reduce with.  */
05090   yylen = yyr2[yyn];
05091 
05092   /* If YYLEN is nonzero, implement the default value of the action:
05093      `$$ = $1'.
05094 
05095      Otherwise, the following line sets YYVAL to garbage.
05096      This behavior is undocumented and Bison
05097      users should not rely upon it.  Assigning to YYVAL
05098      unconditionally makes the parser a bit smaller, and it avoids a
05099      GCC warning that YYVAL may be used uninitialized.  */
05100   yyval = yyvsp[1-yylen];
05101 
05102 
05103   YY_REDUCE_PRINT (yyn);
05104   switch (yyn)
05105     {
05106         case 2:
05107 #line 782 "parse.y"
05108     {
05109                         lex_state = EXPR_BEG;
05110                     /*%%%*/
05111                         local_push(compile_for_eval || rb_parse_in_main());
05112                     /*%
05113                         local_push(0);
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                             /* last expression should not be void */
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                         $$ = $2;
05136                         parser->result = dispatch1(program, $$);
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                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05161                                                   dispatch0(void_stmt));
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                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
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                         $$ = dispatch2(stmts_add, $1, $3);
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                         /* local_push(0); */
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                         /* NEW_PREEXE($4)); */
05215                         /* local_pop(); */
05216                         (yyval.node) = NEW_BEGIN(0);
05217                     /*%
05218                         $$ = dispatch1(BEGIN, $4);
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                         $$ = dispatch4(bodystmt,
05246                                        escape_Qundef($1),
05247                                        escape_Qundef($2),
05248                                        escape_Qundef($3),
05249                                        escape_Qundef($4));
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                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05273                                                   dispatch0(void_stmt));
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                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
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                         $$ = dispatch2(stmts_add, $1, $3);
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                         $$ = dispatch2(alias, $2, $4);
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                         $$ = dispatch2(var_alias, $2, $3);
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                         $$ = dispatch2(var_alias, $2, $3);
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                         $$ = dispatch2(var_alias, $2, $3);
05356                         $$ = dispatch1(alias_error, $$);
05357                     %*/
05358                     ;}
05359     break;
05360 
05361   case 23:
05362 #line 993 "parse.y"
05363     {
05364                     /*%%%*/
05365                         (yyval.node) = (yyvsp[(2) - (2)].node);
05366                     /*%
05367                         $$ = dispatch1(undef, $2);
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                         $$ = dispatch2(if_mod, $3, $1);
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                         $$ = dispatch2(unless_mod, $3, $1);
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                         $$ = dispatch2(while_mod, $3, $1);
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                         $$ = dispatch2(until_mod, $3, $1);
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                         $$ = dispatch2(rescue_mod, $1, $3);
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 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
05449                     /*%
05450                         $$ = dispatch1(END, $3);
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                         $$ = dispatch2(massign, $1, $3);
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                         $$ = dispatch3(opassign, $1, $2, $3);
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                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
05519                         $$ = dispatch3(opassign, $$, $5, $6);
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                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05539                         $$ = dispatch3(opassign, $$, $4, $5);
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                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05559                         $$ = dispatch3(opassign, $$, $4, $5);
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                         $$ = dispatch2(const_path_field, $1, $3);
05572                         $$ = dispatch3(opassign, $$, $4, $5);
05573                         $$ = dispatch1(assign_error, $$);
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                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
05593                         $$ = dispatch3(opassign, $$, $4, $5);
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                         $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
05606                         $$ = dispatch1(assign_error, $$);
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                         $$ = dispatch2(assign, $1, $3);
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                         $$ = dispatch2(massign, $1, $3);
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                         $$ = dispatch2(massign, $1, $3);
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                         $$ = dispatch2(assign, $1, $3);
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                         $$ = dispatch2(assign, $1, $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
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                         $$ = dispatch2(unary, ripper_intern("not"), $3);
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                         $$ = dispatch2(unary, ripper_id2sym('!'), $2);
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                         $$ = $1;
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                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
05735                         $$ = method_arg($$, $4);
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                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
05747                         $$ = method_arg($$, $4);
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                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
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                         $$ = dispatch2(command, $1, $2);
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                         $$ = dispatch2(command, $1, $2);
05798                         $$ = method_add_block($$, $3);
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                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
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                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05825                         $$ = method_add_block($$, $5);
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                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
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                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05852                         $$ = method_add_block($$, $5);
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                         $$ = dispatch1(super, $2);
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                         $$ = dispatch1(yield, $2);
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                         $$ = dispatch1(return, $2);
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                         $$ = dispatch1(break, $2);
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                         $$ = dispatch1(next, $2);
05910                     %*/
05911                     ;}
05912     break;
05913 
05914   case 71:
05915 #line 1453 "parse.y"
05916     {
05917                     /*%%%*/
05918                         (yyval.node) = (yyvsp[(2) - (3)].node);
05919                     /*%
05920                         $$ = dispatch1(mlhs_paren, $2);
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                         $$ = dispatch1(mlhs_paren, $2);
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                         $$ = $1;
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                         $$ = mlhs_add($1, $2);
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                         $$ = mlhs_add_star($1, $3);
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                         $1 = mlhs_add_star($1, $3);
05976                         $$ = mlhs_add($1, $5);
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                         $$ = mlhs_add_star($1, Qnil);
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                         $1 = mlhs_add_star($1, Qnil);
05999                         $$ = mlhs_add($1, $4);
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                         $$ = mlhs_add_star(mlhs_new(), $2);
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                         $2 = mlhs_add_star(mlhs_new(), $2);
06022                         $$ = mlhs_add($2, $4);
06023                     %*/
06024                     ;}
06025     break;
06026 
06027   case 82:
06028 #line 1541 "parse.y"
06029     {
06030                     /*%%%*/
06031                         (yyval.node) = NEW_MASGN(0, -1);
06032                     /*%
06033                         $$ = mlhs_add_star(mlhs_new(), Qnil);
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                         $$ = mlhs_add_star(mlhs_new(), Qnil);
06045                         $$ = mlhs_add($$, $3);
06046                     %*/
06047                     ;}
06048     break;
06049 
06050   case 85:
06051 #line 1561 "parse.y"
06052     {
06053                     /*%%%*/
06054                         (yyval.node) = (yyvsp[(2) - (3)].node);
06055                     /*%
06056                         $$ = dispatch1(mlhs_paren, $2);
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                         $$ = mlhs_add(mlhs_new(), $1);
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                         $$ = mlhs_add($1, $2);
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                         $$ = mlhs_add(mlhs_new(), $1);
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                         $$ = mlhs_add($1, $3);
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                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
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                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
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                         $$ = dispatch2(const_path_field, $1, $3);
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                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
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                         if (in_def || in_single)
06172                             yyerror("dynamic constant assignment");
06173                         $$ = dispatch2(const_path_field, $1, $3);
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                         $$ = dispatch1(top_const_field, $2);
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                         $$ = dispatch1(var_field, $1);
06199                         $$ = dispatch1(assign_error, $$);
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                         $$ = dispatch1(var_field, $$);
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                         $$ = dispatch1(var_field, $$);
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                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
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                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
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                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
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                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
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                         $$ = dispatch2(const_path_field, $1, $3);
06281                         if (in_def || in_single) {
06282                             $$ = dispatch1(assign_error, $$);
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                         $$ = dispatch1(top_const_field, $2);
06297                         if (in_def || in_single) {
06298                             $$ = dispatch1(assign_error, $$);
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                         $$ = dispatch1(assign_error, $1);
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                         $$ = dispatch1(class_name_error, $1);
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                         $$ = dispatch1(top_const_ref, $2);
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                         $$ = dispatch1(const_ref, $1);
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                         $$ = dispatch2(const_path_ref, $1, $3);
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                         $$ = $1;
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                         $$ = dispatch1(symbol_literal, $1);
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                         $$ = rb_ary_new3(1, $1);
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                         rb_ary_push($1, $4);
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                         $$ = dispatch2(assign, $1, $3);
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                         $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
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                         $$ = dispatch3(opassign, $1, $2, $3);
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                         $3 = dispatch2(rescue_mod, $3, $5);
06649                         $$ = dispatch3(opassign, $1, $2, $3);
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                         $1 = dispatch2(aref_field, $1, escape_Qundef($3));
06678                         $$ = dispatch3(opassign, $1, $5, $6);
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                         $1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
06698                         $$ = dispatch3(opassign, $1, $4, $5);
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                         $1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
06718                         $$ = dispatch3(opassign, $1, $4, $5);
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                         $1 = dispatch3(field, $1, ripper_intern("::"), $3);
06738                         $$ = dispatch3(opassign, $1, $4, $5);
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                         $$ = dispatch2(const_path_field, $1, $3);
06751                         $$ = dispatch3(opassign, $$, $4, $5);
06752                         $$ = dispatch1(assign_error, $$);
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                         $$ = dispatch1(top_const_field, $2);
06765                         $$ = dispatch3(opassign, $$, $3, $4);
06766                         $$ = dispatch1(assign_error, $$);
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                         $$ = dispatch1(var_field, $1);
06779                         $$ = dispatch3(opassign, $$, $2, $3);
06780                         $$ = dispatch1(assign_error, $$);
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                         $$ = dispatch2(dot2, $1, $3);
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                         $$ = dispatch2(dot3, $1, $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
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                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
06892                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
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                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
06904                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
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                         $$ = dispatch2(unary, ripper_intern("+@"), $2);
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                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
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                         $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
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                         $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
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                         $$ = dispatch2(unary, ID2SYM('!'), $2);
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                         $$ = dispatch2(unary, ID2SYM('~'), $2);
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                         $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
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                         $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
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                         in_defined = 0;
07156                         $$ = dispatch1(defined, $4);
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                         $$ = dispatch3(ifop, $1, $3, $6);
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                         $$ = $1;
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                         $$ = arg_add_assocs($1, $3);
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                         $$ = arg_add_assocs(arg_new(), $1);
07219                     %*/
07220                     ;}
07221     break;
07222 
07223   case 246:
07224 #line 2417 "parse.y"
07225     {
07226                     /*%%%*/
07227                         (yyval.node) = (yyvsp[(2) - (3)].node);
07228                     /*%
07229                         $$ = dispatch1(arg_paren, escape_Qundef($2));
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                         $$ = arg_add_assocs($1, $3);
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                         $$ = arg_add_assocs(arg_new(), $1);
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                         $$ = arg_add(arg_new(), $1);
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                         $$ = arg_add_optblock($1, $2);
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                         $$ = arg_add_assocs(arg_new(), $1);
07294                         $$ = arg_add_optblock($$, $2);
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                         $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
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                         /* CMDARG_POP() */
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                         $$ = $2;
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                         $$ = arg_add(arg_new(), $1);
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                         $$ = arg_add_star(arg_new(), $2);
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                         $$ = arg_add($1, $3);
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                         $$ = arg_add_star($1, $4);
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                         $$ = mrhs_add(args2mrhs($1), $3);
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                         $$ = mrhs_add_star(args2mrhs($1), $4);
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                         $$ = mrhs_add_star(mrhs_new(), $2);
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                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
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                         $$ = dispatch1(begin, $3);
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                         $$ = dispatch1(paren, $2);
07509                     %*/
07510                     ;}
07511     break;
07512 
07513   case 284:
07514 #line 2667 "parse.y"
07515     {
07516                     /*%%%*/
07517                         (yyval.node) = (yyvsp[(2) - (3)].node);
07518                     /*%
07519                         $$ = dispatch1(paren, $2);
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                         $$ = dispatch2(const_path_ref, $1, $3);
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                         $$ = dispatch1(top_const_ref, $2);
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(); /* zero length array*/
07552                         }
07553                         else {
07554                             (yyval.node) = (yyvsp[(2) - (3)].node);
07555                         }
07556                     /*%
07557                         $$ = dispatch1(array, escape_Qundef($2));
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                         $$ = dispatch1(hash, escape_Qundef($2));
07569                     %*/
07570                     ;}
07571     break;
07572 
07573   case 289:
07574 #line 2712 "parse.y"
07575     {
07576                     /*%%%*/
07577                         (yyval.node) = NEW_RETURN(0);
07578                     /*%
07579                         $$ = dispatch0(return0);
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                         $$ = dispatch1(yield, dispatch1(paren, $3));
07591                     %*/
07592                     ;}
07593     break;
07594 
07595   case 291:
07596 #line 2728 "parse.y"
07597     {
07598                     /*%%%*/
07599                         (yyval.node) = NEW_YIELD(0, Qfalse);
07600                     /*%
07601                         $$ = dispatch1(yield, dispatch1(paren, arg_new()));
07602                     %*/
07603                     ;}
07604     break;
07605 
07606   case 292:
07607 #line 2736 "parse.y"
07608     {
07609                     /*%%%*/
07610                         (yyval.node) = NEW_YIELD(0, Qfalse);
07611                     /*%
07612                         $$ = dispatch0(yield0);
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                         in_defined = 0;
07630                         $$ = dispatch1(defined, $5);
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                         $$ = dispatch2(unary, ripper_intern("not"), $3);
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                         $$ = dispatch2(unary, ripper_intern("not"), Qnil);
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                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07666                         $$ = method_add_block($$, $2);
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                         $$ = method_add_block($1, $2);
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                         $$ = dispatch3(if, $2, $4, escape_Qundef($5));
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                         $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
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                         $$ = dispatch2(while, $3, $6);
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                         $$ = dispatch2(until, $3, $6);
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                         $$ = dispatch2(case, $2, $4);
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                         $$ = dispatch2(case, Qnil, $3);
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                          *  for a, b, c in e
07799                          *  #=>
07800                          *  e.each{|*x| a, b, c = x
07801                          *
07802                          *  for a in e
07803                          *  #=>
07804                          *  e.each{|x| a, = x}
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                             /* if args.length == 1 && args[0].kind_of?(Array)
07813                              *   args = args[0]
07814                              * end
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                         $$ = dispatch3(for, $2, $5, $8);
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                         $$ = dispatch3(class, $2, $3, $5);
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                         $$ = dispatch2(sclass, $3, $7);
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                         $$ = dispatch2(module, $2, $4);
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                         $$ = dispatch3(def, $2, $4, $5);
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; /* force for args */
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                         $$ = dispatch5(defs, $2, $3, $5, $7, $8);
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                         $$ = dispatch1(break, arg_new());
08005                     %*/
08006                     ;}
08007     break;
08008 
08009   case 327:
08010 #line 3046 "parse.y"
08011     {
08012                     /*%%%*/
08013                         (yyval.node) = NEW_NEXT(0);
08014                     /*%
08015                         $$ = dispatch1(next, arg_new());
08016                     %*/
08017                     ;}
08018     break;
08019 
08020   case 328:
08021 #line 3054 "parse.y"
08022     {
08023                     /*%%%*/
08024                         (yyval.node) = NEW_REDO();
08025                     /*%
08026                         $$ = dispatch0(redo);
08027                     %*/
08028                     ;}
08029     break;
08030 
08031   case 329:
08032 #line 3062 "parse.y"
08033     {
08034                     /*%%%*/
08035                         (yyval.node) = NEW_RETRY();
08036                     /*%
08037                         $$ = dispatch0(retry);
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                         $$ = $1;
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                         $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
08144                     %*/
08145                     ;}
08146     break;
08147 
08148   case 350:
08149 #line 3190 "parse.y"
08150     {
08151                     /*%%%*/
08152                         (yyval.node) = (yyvsp[(2) - (2)].node);
08153                     /*%
08154                         $$ = dispatch1(else, $2);
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                         $$ = dispatch1(mlhs_paren, $$);
08166                     %*/
08167                     ;}
08168     break;
08169 
08170   case 354:
08171 #line 3212 "parse.y"
08172     {
08173                     /*%%%*/
08174                         (yyval.node) = (yyvsp[(2) - (3)].node);
08175                     /*%
08176                         $$ = dispatch1(mlhs_paren, $2);
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                         $$ = mlhs_add(mlhs_new(), $1);
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                         $$ = mlhs_add($1, $3);
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                         $$ = $1;
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                         $$ = mlhs_add_star($1, $$);
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                         $$ = mlhs_add_star($1, $$);
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                         $$ = mlhs_add_star($1, Qnil);
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                         $$ = mlhs_add_star($1, $5);
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                         $$ = mlhs_add_star(mlhs_new(), $$);
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                       #if 0
08280                       TODO: Check me
08281                       #endif
08282                         $$ = mlhs_add_star($$, $4);
08283                     %*/
08284                     ;}
08285     break;
08286 
08287   case 364:
08288 #line 3303 "parse.y"
08289     {
08290                     /*%%%*/
08291                         (yyval.node) = NEW_MASGN(0, -1);
08292                     /*%
08293                         $$ = mlhs_add_star(mlhs_new(), Qnil);
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                         $$ = mlhs_add_star(mlhs_new(), Qnil);
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                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
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                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
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                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
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                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
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                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
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                         $$ = params_new($1, Qnil, Qnil, Qnil, Qnil);
08371                         dispatch1(excessed_comma, $$);
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                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
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                         $$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2));
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                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
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                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
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                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
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                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
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                         $$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2));
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                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
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                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
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                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08489                                           escape_Qundef($2));
08490                     %*/
08491                     ;}
08492     break;
08493 
08494   case 384:
08495 #line 3460 "parse.y"
08496     {
08497                     /*%%%*/
08498                         (yyval.node) = 0;
08499                     /*%
08500                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08501                                           Qnil);
08502                     %*/
08503                     ;}
08504     break;
08505 
08506   case 385:
08507 #line 3469 "parse.y"
08508     {
08509                     /*%%%*/
08510                         (yyval.node) = (yyvsp[(2) - (4)].node);
08511                     /*%
08512                         $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
08513                     %*/
08514                     ;}
08515     break;
08516 
08517   case 387:
08518 #line 3481 "parse.y"
08519     {
08520                     /*%%%*/
08521                         (yyval.node) = 0;
08522                     /*%
08523                         $$ = $2;
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                         $$ = get_value($1);
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                         $$ = dispatch2(lambda, $3, $4);
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                         $$ = dispatch1(paren, $2);
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                         $$ = $1;
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                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
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                         $$ = method_add_block($1, $2);
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                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
08660                         $$ = method_optarg($$, $4);
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                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
08672                         $$ = method_optarg($$, $4);
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                         $$ = method_arg(dispatch1(fcall, $1), $2);
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                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
08697                         $$ = method_optarg($$, $4);
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                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
08710                         $$ = method_optarg($$, $4);
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                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
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                         $$ = dispatch3(call, $1, ripper_id2sym('.'),
08734                                        ripper_intern("call"));
08735                         $$ = method_optarg($$, $3);
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                         $$ = dispatch3(call, $1, ripper_intern("::"),
08748                                        ripper_intern("call"));
08749                         $$ = method_optarg($$, $3);
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                         $$ = dispatch1(super, $2);
08761                     %*/
08762                     ;}
08763     break;
08764 
08765   case 411:
08766 #line 3694 "parse.y"
08767     {
08768                     /*%%%*/
08769                         (yyval.node) = NEW_ZSUPER();
08770                     /*%
08771                         $$ = dispatch0(zsuper);
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                         $$ = dispatch2(aref, $1, escape_Qundef($3));
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                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
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                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
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                         $$ = dispatch3(when, $2, $4, escape_Qundef($5));
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                         $$ = dispatch4(rescue,
08862                                        escape_Qundef($2),
08863                                        escape_Qundef($3),
08864                                        escape_Qundef($5),
08865                                        escape_Qundef($6));
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                         $$ = rb_ary_new3(1, $1);
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                         $$ = $1;
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                         $$ = dispatch1(ensure, $2);
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                         $$ = dispatch1(symbol_literal, $1);
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                         $$ = $1;
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                         $$ = dispatch2(string_concat, $1, $2);
08946                     %*/
08947                     ;}
08948     break;
08949 
08950   case 436:
08951 #line 3872 "parse.y"
08952     {
08953                     /*%%%*/
08954                         (yyval.node) = (yyvsp[(2) - (3)].node);
08955                     /*%
08956                         $$ = dispatch1(string_literal, $2);
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                         $$ = dispatch1(xstring_literal, $2);
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                         $$ = dispatch2(regexp_literal, $2, $3);
09051                     %*/
09052                     ;}
09053     break;
09054 
09055   case 439:
09056 #line 3974 "parse.y"
09057     {
09058                     /*%%%*/
09059                         (yyval.node) = NEW_ZARRAY();
09060                     /*%
09061                         $$ = dispatch0(words_new);
09062                         $$ = dispatch1(array, $$);
09063                     %*/
09064                     ;}
09065     break;
09066 
09067   case 440:
09068 #line 3983 "parse.y"
09069     {
09070                     /*%%%*/
09071                         (yyval.node) = (yyvsp[(2) - (3)].node);
09072                     /*%
09073                         $$ = dispatch1(array, $2);
09074                     %*/
09075                     ;}
09076     break;
09077 
09078   case 441:
09079 #line 3993 "parse.y"
09080     {
09081                     /*%%%*/
09082                         (yyval.node) = 0;
09083                     /*%
09084                         $$ = dispatch0(words_new);
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                         $$ = dispatch2(words_add, $1, $2);
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                         $$ = dispatch2(word_add, $1, $2);
09107                     %*/
09108                     ;}
09109     break;
09110 
09111   case 445:
09112 #line 4029 "parse.y"
09113     {
09114                     /*%%%*/
09115                         (yyval.node) = NEW_ZARRAY();
09116                     /*%
09117                         $$ = dispatch0(qwords_new);
09118                         $$ = dispatch1(array, $$);
09119                     %*/
09120                     ;}
09121     break;
09122 
09123   case 446:
09124 #line 4038 "parse.y"
09125     {
09126                     /*%%%*/
09127                         (yyval.node) = (yyvsp[(2) - (3)].node);
09128                     /*%
09129                         $$ = dispatch1(array, $2);
09130                     %*/
09131                     ;}
09132     break;
09133 
09134   case 447:
09135 #line 4048 "parse.y"
09136     {
09137                     /*%%%*/
09138                         (yyval.node) = 0;
09139                     /*%
09140                         $$ = dispatch0(qwords_new);
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                         $$ = dispatch2(qwords_add, $1, $2);
09152                     %*/
09153                     ;}
09154     break;
09155 
09156   case 449:
09157 #line 4066 "parse.y"
09158     {
09159                     /*%%%*/
09160                         (yyval.node) = 0;
09161                     /*%
09162                         $$ = dispatch0(string_content);
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                         $$ = dispatch2(string_add, $1, $2);
09174                     %*/
09175                     ;}
09176     break;
09177 
09178   case 451:
09179 #line 4084 "parse.y"
09180     {
09181                     /*%%%*/
09182                         (yyval.node) = 0;
09183                     /*%
09184                         $$ = dispatch0(xstring_new);
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                         $$ = dispatch2(xstring_add, $1, $2);
09196                     %*/
09197                     ;}
09198     break;
09199 
09200   case 453:
09201 #line 4102 "parse.y"
09202     {
09203                     /*%%%*/
09204                         (yyval.node) = 0;
09205                     /*%
09206                         $$ = dispatch0(regexp_new);
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                         $$ = dispatch2(regexp_add, $1, $2);
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                         lex_strterm = $<node>2;
09258                         $$ = dispatch1(string_dvar, $3);
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                         $$ = dispatch1(string_embexpr, $4);
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                         $$ = dispatch1(var_ref, $1);
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                         $$ = dispatch1(var_ref, $1);
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                         $$ = dispatch1(var_ref, $1);
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                         $$ = dispatch1(symbol, $2);
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                         $$ = dispatch1(dyna_symbol, $2);
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                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
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                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
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                         if (id_is_var(get_id($1))) {
09437                             $$ = dispatch1(var_ref, $1);
09438                         }
09439                         else {
09440                             $$ = dispatch1(vcall, $1);
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                         $$ = dispatch1(var_ref, $1);
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                         $$ = dispatch1(var_field, $$);
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                         $$ = dispatch1(var_field, $$);
09475                     %*/
09476                     ;}
09477     break;
09478 
09479   case 493:
09480 #line 4337 "parse.y"
09481     {
09482                     /*%%%*/
09483                         (yyval.node) = 0;
09484                     /*%
09485                         $$ = Qnil;
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                         yyerrok;
09512                         $$ = Qnil;
09513                     %*/
09514                     ;}
09515     break;
09516 
09517   case 497:
09518 #line 4365 "parse.y"
09519     {
09520                     /*%%%*/
09521                         (yyval.node) = (yyvsp[(2) - (3)].node);
09522                     /*%
09523                         $$ = dispatch1(paren, $2);
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                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
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                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
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                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
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                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
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                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
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                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
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                         $$ = params_new($1, Qnil, Qnil, Qnil,escape_Qundef($2));
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                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
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                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
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                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
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                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
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                         $$ = params_new(Qnil, Qnil, $1, Qnil,escape_Qundef($2));
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                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
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                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
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                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil);
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                         $$ = dispatch1(param_error, $1);
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                         $$ = dispatch1(param_error, $1);
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                         $$ = dispatch1(param_error, $1);
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                         $$ = dispatch1(param_error, $1);
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                         $$ = get_value($1);
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                         $$ = dispatch1(mlhs_paren, $2);
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                         $$ = rb_ary_push($1, $3);
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                         $$ = rb_assoc_new($$, $3);
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                         $$ = rb_assoc_new($$, $3);
09828                     %*/
09829                     ;}
09830     break;
09831 
09832   case 526:
09833 #line 4623 "parse.y"
09834     {
09835                     /*%%%*/
09836                         (yyval.node) = (yyvsp[(1) - (1)].node);
09837                     /*%
09838                         $$ = rb_ary_new3(1, $1);
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                         $$ = rb_ary_push($1, $3);
09856                     %*/
09857                     ;}
09858     break;
09859 
09860   case 528:
09861 #line 4647 "parse.y"
09862     {
09863                     /*%%%*/
09864                         (yyval.node) = (yyvsp[(1) - (1)].node);
09865                     /*%
09866                         $$ = rb_ary_new3(1, $1);
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                         $$ = rb_ary_push($1, $3);
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                         $$ = dispatch1(rest_param, $2);
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                         $$ = dispatch1(rest_param, Qnil);
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                         $$ = dispatch1(blockarg, $2);
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                         $$ = Qundef;
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                         $$ = $1;
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                         $$ = dispatch1(paren, $3);
09996                     %*/
09997                     ;}
09998     break;
09999 
10000   case 543:
10001 #line 4774 "parse.y"
10002     {
10003                     /*%%%*/
10004                         (yyval.node) = (yyvsp[(1) - (2)].node);
10005                     /*%
10006                         $$ = dispatch1(assoclist_from_args, $1);
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                         $$ = rb_ary_push($1, $3);
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                         $$ = dispatch2(assoc_new, $1, $3);
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                         $$ = dispatch2(assoc_new, $1, $2);
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                         $$ = Qundef;
10061                     %*/
10062                     ;}
10063     break;
10064 
10065 
10066 /* Line 1267 of yacc.c.  */
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   /* Now `shift' the result of the reduction.  Determine what state
10080      that goes to, based on the state we popped back to and the rule
10081      number reduced by.  */
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 | yyerrlab -- here on detecting error |
10096 `------------------------------------*/
10097 yyerrlab:
10098   /* If not already recovering from an error, report this error.  */
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       /* If just tried and failed to reuse look-ahead token after an
10144          error, discard it.  */
10145 
10146       if (yychar <= YYEOF)
10147         {
10148           /* Return failure if at end of input.  */
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   /* Else will try to reuse look-ahead token after shifting the error
10161      token.  */
10162   goto yyerrlab1;
10163 
10164 
10165 /*---------------------------------------------------.
10166 | yyerrorlab -- error raised explicitly by YYERROR.  |
10167 `---------------------------------------------------*/
10168 yyerrorlab:
10169 
10170   /* Pacify compilers like GCC when the user code never invokes
10171      YYERROR and the label yyerrorlab therefore never appears in user
10172      code.  */
10173   if (/*CONSTCOND*/ 0)
10174      goto yyerrorlab;
10175 
10176   /* Do not reclaim the symbols of the rule which action triggered
10177      this YYERROR.  */
10178   YYPOPSTACK (yylen);
10179   yylen = 0;
10180   YY_STACK_PRINT (yyss, yyssp);
10181   yystate = *yyssp;
10182   goto yyerrlab1;
10183 
10184 
10185 /*-------------------------------------------------------------.
10186 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
10187 `-------------------------------------------------------------*/
10188 yyerrlab1:
10189   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
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       /* Pop the current state because it cannot handle the error token.  */
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   /* Shift the error token.  */
10224   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10225 
10226   yystate = yyn;
10227   goto yynewstate;
10228 
10229 
10230 /*-------------------------------------.
10231 | yyacceptlab -- YYACCEPT comes here.  |
10232 `-------------------------------------*/
10233 yyacceptlab:
10234   yyresult = 0;
10235   goto yyreturn;
10236 
10237 /*-----------------------------------.
10238 | yyabortlab -- YYABORT comes here.  |
10239 `-----------------------------------*/
10240 yyabortlab:
10241   yyresult = 1;
10242   goto yyreturn;
10243 
10244 #ifndef yyoverflow
10245 /*-------------------------------------------------.
10246 | yyexhaustedlab -- memory exhaustion comes here.  |
10247 `-------------------------------------------------*/
10248 yyexhaustedlab:
10249   parser_yyerror (parser, YY_("memory exhausted"));
10250   yyresult = 2;
10251   /* Fall through.  */
10252 #endif
10253 
10254 yyreturn:
10255   if (yychar != YYEOF && yychar != YYEMPTY)
10256      yydestruct ("Cleanup: discarding lookahead",
10257                  yytoken, &yylval, parser);
10258   /* Do not reclaim the symbols of the rule which action triggered
10259      this YYABORT or YYACCEPT.  */
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   /* Make sure YYID is used.  */
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 /* RIPPER */
10387 
10388 #include "ruby/regex.h"
10389 #include "ruby/util.h"
10390 
10391 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
10392    since ours (we hope) works properly with all combinations of
10393    machines, compilers, `char' and `unsigned char' argument types.
10394    (Per Bothner suggested the basic approach.)  */
10395 #undef SIGN_EXTEND_CHAR
10396 #if __STDC__
10397 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10398 #else  /* not __STDC__ */
10399 /* As in Harbison and Steele.  */
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) { /* OK */
10465         goto finish;
10466     }
10467     linenum = ruby_sourceline;
10468     if (linenum == ptinfo->linenum) { /* SKIP */
10469         goto finish;
10470     }
10471     if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
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  /* RIPPER */
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 /* !RIPPER */
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 /* !RIPPER */
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; /* prohibit tail call optimization */
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; /* prohibit tail call optimization */
10777 
10778     return node;
10779 }
10780 #endif  /* !RIPPER */
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      * If string_literal is true, then we allow multiple codepoints
10954      * in \u{}, and add the codepoints to the current token.
10955      * Otherwise we're parsing a character literal and return a single
10956      * codepoint without adding it
10957      */
10958 
10959     int codepoint;
10960     size_t numlen;
10961 
10962     if (regexp_literal) { tokadd('\\'); tokadd('u'); }
10963 
10964     if (peek('{')) {  /* handle \u{...} form */
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 {                      /* handle \uxxxx form */
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 '\\':        /* Backslash */
11032         return c;
11033 
11034       case 'n': /* newline */
11035         return '\n';
11036 
11037       case 't': /* horizontal tab */
11038         return '\t';
11039 
11040       case 'r': /* carriage-return */
11041         return '\r';
11042 
11043       case 'f': /* form-feed */
11044         return '\f';
11045 
11046       case 'v': /* vertical tab */
11047         return '\13';
11048 
11049       case 'a': /* alarm(bell) */
11050         return '\007';
11051 
11052       case 'e': /* escape */
11053         return 033;
11054 
11055       case '0': case '1': case '2': case '3': /* octal constant */
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': /* hex constant */
11063         c = tok_hex(&numlen);
11064         if (numlen == 0) return 0;
11065         return c;
11066 
11067       case 'b': /* backspace */
11068         return '\010';
11069 
11070       case 's': /* space */
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;               /* just ignore */
11132 
11133       case '0': case '1': case '2': case '3': /* octal constant */
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': /* hex constant */
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     /* TODO: should use another API? */
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                     /* ignore backslashed spaces in %w */
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, &quote->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()),     /* nd_lit */
11526                                   len,                          /* nd_nth */
11527                                   lex_lastline);                /* nd_orig */
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         /*      int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
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             /*      if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
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 /* emacsen -*- hack */
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             /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
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     /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
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:                /* UTF-8 BOM marker */
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':                /* NUL */
12083       case '\004':              /* ^D */
12084       case '\032':              /* ^Z */
12085       case -1:                  /* end of script. */
12086         return 0;
12087 
12088         /* white spaces */
12089       case ' ': case '\t': case '\f': case '\r':
12090       case '\13': /* '\v' */
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': /* '\v' */
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 '#':         /* it's a comment */
12109         /* no magic_comment in shebang line */
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         /* fall through */
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': /* '\v' */
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:          /* EOF no decrement*/
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             /* skip embedded rd document */
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                     /* hexadecimal */
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                     /* binary */
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                     /* decimal */
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                     /* 0_0 */
12675                     goto octal_number;
12676                 }
12677                 if (c == 'o' || c == 'O') {
12678                     /* prefixed octal */
12679                     c = nextc();
12680                     if (c == -1 || c == '_' || !ISDIGIT(c)) {
12681                         no_digits();
12682                     }
12683                 }
12684                 if (c >= '0' && c <= '7') {
12685                     /* octal */
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 '_':     /* `_' in number just ignored */
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 = '{';          /* block (primary) */
12957         else if (lex_state == EXPR_ENDARG)
12958             c = tLBRACE_ARG;  /* block (expr) */
12959         else
12960             c = tLBRACE;      /* hash */
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; /* skip \\n */
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 '_':             /* $_: last read line string */
13071             c = nextc();
13072             if (parser_is_identchar()) {
13073                 tokadd('$');
13074                 tokadd('_');
13075                 break;
13076             }
13077             pushback(c);
13078             c = '_';
13079             /* fall through */
13080           case '~':             /* $~: match-data */
13081           case '*':             /* $*: argv */
13082           case '$':             /* $$: pid */
13083           case '?':             /* $?: last status */
13084           case '!':             /* $!: error string */
13085           case '@':             /* $@: error position */
13086           case '/':             /* $/: input record separator */
13087           case '\\':            /* $\: output record separator */
13088           case ';':             /* $;: field separator */
13089           case ',':             /* $,: output field separator */
13090           case '.':             /* $.: last read line number */
13091           case '=':             /* $=: ignorecase */
13092           case ':':             /* $:: load path */
13093           case '<':             /* $<: reading filename */
13094           case '>':             /* $>: default output handle */
13095           case '\"':            /* $": already loaded files */
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 '&':             /* $&: last match */
13118           case '`':             /* $`: string before last match */
13119           case '\'':            /* $': string after last match */
13120           case '+':             /* $+: string matches last paren. */
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                 /* See if it is a reserved word.  */
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)                    /* for debug */
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 /* append item to the list */
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 /* concat two lists */
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 /* concat two string literals */
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         /* method call without arguments */
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  /* !RIPPER */
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             /* method call without arguments */
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 /* !RIPPER */
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         /* should not happen */
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             /* or "control never reach"? */
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         /* reports always */
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;        /* same as NODE_NIL */
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 /* !RIPPER */
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             /* raise in re.c */
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 /* !RIPPER */
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             /* operators */
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             /* attribute assignment */
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          * this clause makes sense only when called from other than
15307          * rb_intern_str() taking care of code-range.
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  *  call-seq:
15442  *     Symbol.all_symbols    => array
15443  *
15444  *  Returns an array of all the symbols currently in Ruby's symbol
15445  *  table.
15446  *
15447  *     Symbol.all_symbols.size    #=> 903
15448  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
15449  *                                     :chown, :EOFError, :$;, :String,
15450  *                                     :LOCK_SH, :"setuid?", :$<,
15451  *                                     :default_proc, :compact, :extend,
15452  *                                     :Tms, :getwd, :$=, :ThreadGroup,
15453  *                                     :wait2, :$>]
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 /* !RIPPER */
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  *  call-seq:
15659  *    ripper#end_seen?   -> Boolean
15660  *
15661  *  Return true if parsed source ended by +\_\_END\_\_+.
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  *  call-seq:
15674  *    ripper#encoding   -> encoding
15675  *
15676  *  Return encoding of the source.
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  *  call-seq:
15689  *    ripper.yydebug   -> true or false
15690  *
15691  *  Get yydebug.
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  *  call-seq:
15704  *    ripper.yydebug = flag
15705  *
15706  *  Set yydebug.
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 /* :nodoc: */
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  *  call-seq:
16062  *    Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
16063  *
16064  *  Create a new Ripper object.
16065  *  _src_ must be a String, an IO, or an Object which has #gets method.
16066  *
16067  *  This method does not starts parsing.
16068  *  See also Ripper#parse and Ripper.parse.
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  *  call-seq:
16131  *    ripper#parse
16132  *
16133  *  Start parsing and returns the value of the root action.
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  *  call-seq:
16158  *    ripper#column   -> Integer
16159  *
16160  *  Return column number of current parsing line.
16161  *  This number starts from 0.
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  *  call-seq:
16180  *    ripper#filename   -> String
16181  *
16182  *  Return current parsing filename.
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  *  call-seq:
16198  *    ripper#lineno   -> Integer
16199  *
16200  *  Return line number of current parsing line.
16201  *  This number starts from 1.
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 /* :nodoc: */
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 /* :nodoc: */
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     /* ensure existing in symbol table */
16271     (void)rb_intern("||");
16272     (void)rb_intern("&&");
16273 
16274 # if 0
16275     /* Hack to let RDoc document SCRIPT_LINES__ */
16276 
16277     /*
16278      * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
16279      * after the assignment will be added as an Array of lines with the file
16280      * name as the key.
16281      */
16282     rb_define_global_const("SCRIPT_LINES__", Qnil);
16283 #endif
16284 
16285 }
16286 #endif /* RIPPER */
16287 
16288