Ruby  1.9.3p385(2013-02-06revision39114)
ext/ripper/ripper.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 "ripper.y"
00314 
00315 
00316 #define YYDEBUG 1
00317 #define YYERROR_VERBOSE 1
00318 #define YYSTACK_USE_ALLOCA 0
00319 
00320 #include "ruby/ruby.h"
00321 #include "ruby/st.h"
00322 #include "ruby/encoding.h"
00323 #include "internal.h"
00324 #include "node.h"
00325 #include "parse.h"
00326 #include "id.h"
00327 #include "regenc.h"
00328 #include <stdio.h>
00329 #include <errno.h>
00330 #include <ctype.h>
00331 
00332 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00333 
00334 #define YYMALLOC(size)          rb_parser_malloc(parser, (size))
00335 #define YYREALLOC(ptr, size)    rb_parser_realloc(parser, (ptr), (size))
00336 #define YYCALLOC(nelem, size)   rb_parser_calloc(parser, (nelem), (size))
00337 #define YYFREE(ptr)             rb_parser_free(parser, (ptr))
00338 #define malloc  YYMALLOC
00339 #define realloc YYREALLOC
00340 #define calloc  YYCALLOC
00341 #define free    YYFREE
00342 
00343 #ifndef RIPPER
00344 static ID register_symid(ID, const char *, long, rb_encoding *);
00345 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc)
00346 #include "id.c"
00347 #endif
00348 
00349 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00350 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00351 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00352 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00353 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00354 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00355 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00356 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00357 
00358 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00359         (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00360          ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00361          ((id)&ID_SCOPE_MASK) == ID_CLASS))
00362 
00363 enum lex_state_e {
00364     EXPR_BEG,                   /* ignore newline, +/- is a sign. */
00365     EXPR_END,                   /* newline significant, +/- is an operator. */
00366     EXPR_ENDARG,                /* ditto, and unbound braces. */
00367     EXPR_ENDFN,                 /* ditto, and unbound braces. */
00368     EXPR_ARG,                   /* newline significant, +/- is an operator. */
00369     EXPR_CMDARG,                /* newline significant, +/- is an operator. */
00370     EXPR_MID,                   /* newline significant, +/- is an operator. */
00371     EXPR_FNAME,                 /* ignore newline, no reserved words. */
00372     EXPR_DOT,                   /* right after `.' or `::', no reserved words. */
00373     EXPR_CLASS,                 /* immediate after `class', no here document. */
00374     EXPR_VALUE,                 /* alike EXPR_BEG but label is disallowed. */
00375     EXPR_MAX_STATE
00376 };
00377 
00378 typedef VALUE stack_type;
00379 
00380 # define BITSTACK_PUSH(stack, n)        ((stack) = ((stack)<<1)|((n)&1))
00381 # define BITSTACK_POP(stack)    ((stack) = (stack) >> 1)
00382 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
00383 # define BITSTACK_SET_P(stack)  ((stack)&1)
00384 
00385 #define COND_PUSH(n)    BITSTACK_PUSH(cond_stack, (n))
00386 #define COND_POP()      BITSTACK_POP(cond_stack)
00387 #define COND_LEXPOP()   BITSTACK_LEXPOP(cond_stack)
00388 #define COND_P()        BITSTACK_SET_P(cond_stack)
00389 
00390 #define CMDARG_PUSH(n)  BITSTACK_PUSH(cmdarg_stack, (n))
00391 #define CMDARG_POP()    BITSTACK_POP(cmdarg_stack)
00392 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00393 #define CMDARG_P()      BITSTACK_SET_P(cmdarg_stack)
00394 
00395 struct vtable {
00396     ID *tbl;
00397     int pos;
00398     int capa;
00399     struct vtable *prev;
00400 };
00401 
00402 struct local_vars {
00403     struct vtable *args;
00404     struct vtable *vars;
00405     struct vtable *used;
00406     struct local_vars *prev;
00407 };
00408 
00409 #define DVARS_INHERIT ((void*)1)
00410 #define DVARS_TOPSCOPE NULL
00411 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00412 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00413 
00414 static int
00415 vtable_size(const struct vtable *tbl)
00416 {
00417     if (POINTER_P(tbl)) {
00418         return tbl->pos;
00419     }
00420     else {
00421         return 0;
00422     }
00423 }
00424 
00425 #define VTBL_DEBUG 0
00426 
00427 static struct vtable *
00428 vtable_alloc(struct vtable *prev)
00429 {
00430     struct vtable *tbl = ALLOC(struct vtable);
00431     tbl->pos = 0;
00432     tbl->capa = 8;
00433     tbl->tbl = ALLOC_N(ID, tbl->capa);
00434     tbl->prev = prev;
00435     if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00436     return tbl;
00437 }
00438 
00439 static void
00440 vtable_free(struct vtable *tbl)
00441 {
00442     if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00443     if (POINTER_P(tbl)) {
00444         if (tbl->tbl) {
00445             xfree(tbl->tbl);
00446         }
00447         xfree(tbl);
00448     }
00449 }
00450 
00451 static void
00452 vtable_add(struct vtable *tbl, ID id)
00453 {
00454     if (!POINTER_P(tbl)) {
00455         rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00456     }
00457     if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00458 
00459     if (tbl->pos == tbl->capa) {
00460         tbl->capa = tbl->capa * 2;
00461         REALLOC_N(tbl->tbl, ID, tbl->capa);
00462     }
00463     tbl->tbl[tbl->pos++] = id;
00464 }
00465 
00466 static int
00467 vtable_included(const struct vtable * tbl, ID id)
00468 {
00469     int i;
00470 
00471     if (POINTER_P(tbl)) {
00472         for (i = 0; i < tbl->pos; i++) {
00473             if (tbl->tbl[i] == id) {
00474                 return i+1;
00475             }
00476         }
00477     }
00478     return 0;
00479 }
00480 
00481 
00482 #ifndef RIPPER
00483 typedef struct token_info {
00484     const char *token;
00485     int linenum;
00486     int column;
00487     int nonspc;
00488     struct token_info *next;
00489 } token_info;
00490 #endif
00491 
00492 /*
00493     Structure of Lexer Buffer:
00494 
00495  lex_pbeg      tokp         lex_p        lex_pend
00496     |           |              |            |
00497     |-----------+--------------+------------|
00498                 |<------------>|
00499                      token
00500 */
00501 struct parser_params {
00502     int is_ripper;
00503     NODE *heap;
00504 
00505     YYSTYPE *parser_yylval;
00506     VALUE eofp;
00507 
00508     NODE *parser_lex_strterm;
00509     enum lex_state_e parser_lex_state;
00510     stack_type parser_cond_stack;
00511     stack_type parser_cmdarg_stack;
00512     int parser_class_nest;
00513     int parser_paren_nest;
00514     int parser_lpar_beg;
00515     int parser_in_single;
00516     int parser_in_def;
00517     int parser_compile_for_eval;
00518     VALUE parser_cur_mid;
00519     int parser_in_defined;
00520     char *parser_tokenbuf;
00521     int parser_tokidx;
00522     int parser_toksiz;
00523     VALUE parser_lex_input;
00524     VALUE parser_lex_lastline;
00525     VALUE parser_lex_nextline;
00526     const char *parser_lex_pbeg;
00527     const char *parser_lex_p;
00528     const char *parser_lex_pend;
00529     int parser_heredoc_end;
00530     int parser_command_start;
00531     NODE *parser_deferred_nodes;
00532     long parser_lex_gets_ptr;
00533     VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00534     struct local_vars *parser_lvtbl;
00535     int parser_ruby__end__seen;
00536     int line_count;
00537     int has_shebang;
00538     char *parser_ruby_sourcefile; /* current source file */
00539     int parser_ruby_sourceline; /* current line no. */
00540     rb_encoding *enc;
00541     rb_encoding *utf8;
00542 
00543     int parser_yydebug;
00544 
00545 #ifndef RIPPER
00546     /* Ruby core only */
00547     NODE *parser_eval_tree_begin;
00548     NODE *parser_eval_tree;
00549     VALUE debug_lines;
00550     VALUE coverage;
00551     int nerr;
00552 
00553     int parser_token_info_enabled;
00554     token_info *parser_token_info;
00555 #else
00556     /* Ripper only */
00557     VALUE parser_ruby_sourcefile_string;
00558     const char *tokp;
00559     VALUE delayed;
00560     int delayed_line;
00561     int delayed_col;
00562 
00563     VALUE value;
00564     VALUE result;
00565     VALUE parsing_thread;
00566     int toplevel_p;
00567 #endif
00568 };
00569 
00570 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00571                     (parser->utf8 = rb_utf8_encoding()))
00572 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00573 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00574 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00575 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00576 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00577 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00578 
00579 static int parser_yyerror(struct parser_params*, const char*);
00580 #define yyerror(msg) parser_yyerror(parser, (msg))
00581 
00582 #define YYLEX_PARAM parser
00583 
00584 #define lex_strterm             (parser->parser_lex_strterm)
00585 #define lex_state               (parser->parser_lex_state)
00586 #define cond_stack              (parser->parser_cond_stack)
00587 #define cmdarg_stack            (parser->parser_cmdarg_stack)
00588 #define class_nest              (parser->parser_class_nest)
00589 #define paren_nest              (parser->parser_paren_nest)
00590 #define lpar_beg                (parser->parser_lpar_beg)
00591 #define in_single               (parser->parser_in_single)
00592 #define in_def                  (parser->parser_in_def)
00593 #define compile_for_eval        (parser->parser_compile_for_eval)
00594 #define cur_mid                 (parser->parser_cur_mid)
00595 #define in_defined              (parser->parser_in_defined)
00596 #define tokenbuf                (parser->parser_tokenbuf)
00597 #define tokidx                  (parser->parser_tokidx)
00598 #define toksiz                  (parser->parser_toksiz)
00599 #define lex_input               (parser->parser_lex_input)
00600 #define lex_lastline            (parser->parser_lex_lastline)
00601 #define lex_nextline            (parser->parser_lex_nextline)
00602 #define lex_pbeg                (parser->parser_lex_pbeg)
00603 #define lex_p                   (parser->parser_lex_p)
00604 #define lex_pend                (parser->parser_lex_pend)
00605 #define heredoc_end             (parser->parser_heredoc_end)
00606 #define command_start           (parser->parser_command_start)
00607 #define deferred_nodes          (parser->parser_deferred_nodes)
00608 #define lex_gets_ptr            (parser->parser_lex_gets_ptr)
00609 #define lex_gets                (parser->parser_lex_gets)
00610 #define lvtbl                   (parser->parser_lvtbl)
00611 #define ruby__end__seen         (parser->parser_ruby__end__seen)
00612 #define ruby_sourceline         (parser->parser_ruby_sourceline)
00613 #define ruby_sourcefile         (parser->parser_ruby_sourcefile)
00614 #define current_enc             (parser->enc)
00615 #define yydebug                 (parser->parser_yydebug)
00616 #ifdef RIPPER
00617 #else
00618 #define ruby_eval_tree          (parser->parser_eval_tree)
00619 #define ruby_eval_tree_begin    (parser->parser_eval_tree_begin)
00620 #define ruby_debug_lines        (parser->debug_lines)
00621 #define ruby_coverage           (parser->coverage)
00622 #endif
00623 
00624 static int yylex(void*, void*);
00625 
00626 #ifndef RIPPER
00627 #define yyparse ruby_yyparse
00628 
00629 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00630 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
00631 
00632 static NODE *cond_gen(struct parser_params*,NODE*);
00633 #define cond(node) cond_gen(parser, (node))
00634 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00635 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
00636 
00637 static NODE *newline_node(NODE*);
00638 static void fixpos(NODE*,NODE*);
00639 
00640 static int value_expr_gen(struct parser_params*,NODE*);
00641 static void void_expr_gen(struct parser_params*,NODE*);
00642 static NODE *remove_begin(NODE*);
00643 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00644 #define void_expr0(node) void_expr_gen(parser, (node))
00645 #define void_expr(node) void_expr0((node) = remove_begin(node))
00646 static void void_stmts_gen(struct parser_params*,NODE*);
00647 #define void_stmts(node) void_stmts_gen(parser, (node))
00648 static void reduce_nodes_gen(struct parser_params*,NODE**);
00649 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
00650 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00651 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
00652 
00653 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00654 #define block_append(h,t) block_append_gen(parser,(h),(t))
00655 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00656 #define list_append(l,i) list_append_gen(parser,(l),(i))
00657 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00658 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
00659 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00660 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
00661 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00662 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
00663 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00664 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
00665 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00666 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00667 #define new_evstr(n) new_evstr_gen(parser,(n))
00668 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00669 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
00670 static NODE *splat_array(NODE*);
00671 
00672 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00673 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
00674 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00675 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
00676 
00677 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00678 #define new_args(f,o,r,p,b) new_args_gen(parser, (f),(o),(r),(p),(b))
00679 
00680 static NODE *negate_lit(NODE*);
00681 static NODE *ret_args_gen(struct parser_params*,NODE*);
00682 #define ret_args(node) ret_args_gen(parser, (node))
00683 static NODE *arg_blk_pass(NODE*,NODE*);
00684 static NODE *new_yield_gen(struct parser_params*,NODE*);
00685 #define new_yield(node) new_yield_gen(parser, (node))
00686 
00687 static NODE *gettable_gen(struct parser_params*,ID);
00688 #define gettable(id) gettable_gen(parser,(id))
00689 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00690 #define assignable(id,node) assignable_gen(parser, (id), (node))
00691 
00692 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00693 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
00694 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00695 #define attrset(node,id) attrset_gen(parser, (node), (id))
00696 
00697 static void rb_backref_error_gen(struct parser_params*,NODE*);
00698 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
00699 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00700 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
00701 
00702 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00703 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
00704 
00705 static ID  *local_tbl_gen(struct parser_params*);
00706 #define local_tbl() local_tbl_gen(parser)
00707 
00708 static void fixup_nodes(NODE **);
00709 
00710 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00711 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
00712 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00713 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
00714 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00715 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
00716 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00717 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
00718 
00719 #define get_id(id) (id)
00720 #define get_value(val) (val)
00721 #else
00722 #define remove_begin(node) (node)
00723 #define rb_dvar_defined(id) 0
00724 #define rb_local_defined(id) 0
00725 static ID ripper_get_id(VALUE);
00726 #define get_id(id) ripper_get_id(id)
00727 static VALUE ripper_get_value(VALUE);
00728 #define get_value(val) ripper_get_value(val)
00729 static VALUE assignable_gen(struct parser_params*,VALUE);
00730 #define assignable(lhs,node) assignable_gen(parser, (lhs))
00731 static int id_is_var_gen(struct parser_params *parser, ID id);
00732 #define id_is_var(id) id_is_var_gen(parser, (id))
00733 #endif /* !RIPPER */
00734 
00735 static ID formal_argument_gen(struct parser_params*, ID);
00736 #define formal_argument(id) formal_argument_gen(parser, (id))
00737 static ID shadowing_lvar_gen(struct parser_params*,ID);
00738 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
00739 static void new_bv_gen(struct parser_params*,ID);
00740 #define new_bv(id) new_bv_gen(parser, (id))
00741 
00742 static void local_push_gen(struct parser_params*,int);
00743 #define local_push(top) local_push_gen(parser,(top))
00744 static void local_pop_gen(struct parser_params*);
00745 #define local_pop() local_pop_gen(parser)
00746 static int local_var_gen(struct parser_params*, ID);
00747 #define local_var(id) local_var_gen(parser, (id));
00748 static int arg_var_gen(struct parser_params*, ID);
00749 #define arg_var(id) arg_var_gen(parser, (id))
00750 static int  local_id_gen(struct parser_params*, ID);
00751 #define local_id(id) local_id_gen(parser, (id))
00752 static ID   internal_id_gen(struct parser_params*);
00753 #define internal_id() internal_id_gen(parser)
00754 
00755 static const struct vtable *dyna_push_gen(struct parser_params *);
00756 #define dyna_push() dyna_push_gen(parser)
00757 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00758 #define dyna_pop(node) dyna_pop_gen(parser, (node))
00759 static int dyna_in_block_gen(struct parser_params*);
00760 #define dyna_in_block() dyna_in_block_gen(parser)
00761 #define dyna_var(id) local_var(id)
00762 static int dvar_defined_gen(struct parser_params*,ID,int);
00763 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
00764 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
00765 static int dvar_curr_gen(struct parser_params*,ID);
00766 #define dvar_curr(id) dvar_curr_gen(parser, (id))
00767 
00768 static int lvar_defined_gen(struct parser_params*, ID);
00769 #define lvar_defined(id) lvar_defined_gen(parser, (id))
00770 
00771 #define RE_OPTION_ONCE (1<<16)
00772 #define RE_OPTION_ENCODING_SHIFT 8
00773 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00774 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00775 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00776 #define RE_OPTION_MASK  0xff
00777 #define RE_OPTION_ARG_ENCODING_NONE 32
00778 
00779 #define NODE_STRTERM NODE_ZARRAY        /* nothing to gc */
00780 #define NODE_HEREDOC NODE_ARRAY         /* 1, 3 to gc */
00781 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00782 #define nd_func u1.id
00783 #if SIZEOF_SHORT == 2
00784 #define nd_term(node) ((signed short)(node)->u2.id)
00785 #else
00786 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00787 #endif
00788 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00789 #define nd_nest u3.cnt
00790 
00791 /****** Ripper *******/
00792 
00793 #ifdef RIPPER
00794 #define RIPPER_VERSION "0.1.0"
00795 
00796 #include "eventids1.c"
00797 #include "eventids2.c"
00798 static ID ripper_id_gets;
00799 
00800 static VALUE ripper_dispatch0(struct parser_params*,ID);
00801 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00802 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00803 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00804 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00805 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00806 
00807 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00808 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
00809 #define dispatch2(n,a,b)        ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
00810 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
00811 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
00812 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
00813 
00814 #define yyparse ripper_yyparse
00815 
00816 #define ripper_intern(s) ID2SYM(rb_intern(s))
00817 static VALUE ripper_id2sym(ID);
00818 #ifdef __GNUC__
00819 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00820                            ID2SYM(id) : ripper_id2sym(id))
00821 #endif
00822 
00823 #define arg_new() dispatch0(args_new)
00824 #define arg_add(l,a) dispatch2(args_add, (l), (a))
00825 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
00826 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
00827 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
00828 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
00829 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
00830 
00831 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
00832 #define mrhs_new() dispatch0(mrhs_new)
00833 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
00834 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
00835 
00836 #define mlhs_new() dispatch0(mlhs_new)
00837 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
00838 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
00839 
00840 #define params_new(pars, opts, rest, pars2, blk) \
00841         dispatch5(params, (pars), (opts), (rest), (pars2), (blk))
00842 
00843 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
00844 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
00845 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
00846 
00847 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
00848 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
00849 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
00850 
00851 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00852 
00853 #define FIXME 0
00854 
00855 #endif /* RIPPER */
00856 
00857 #ifndef RIPPER
00858 # define ifndef_ripper(x) (x)
00859 #else
00860 # define ifndef_ripper(x)
00861 #endif
00862 
00863 #ifndef RIPPER
00864 # define rb_warn0(fmt)    rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
00865 # define rb_warnI(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00866 # define rb_warnS(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00867 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
00868 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00869 #else
00870 # define rb_warn0(fmt)    ripper_warn0(parser, (fmt))
00871 # define rb_warnI(fmt,a)  ripper_warnI(parser, (fmt), (a))
00872 # define rb_warnS(fmt,a)  ripper_warnS(parser, (fmt), (a))
00873 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
00874 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
00875 static void ripper_warn0(struct parser_params*, const char*);
00876 static void ripper_warnI(struct parser_params*, const char*, int);
00877 #if 0
00878 static void ripper_warnS(struct parser_params*, const char*, const char*);
00879 #endif
00880 static void ripper_warning0(struct parser_params*, const char*);
00881 static void ripper_warningS(struct parser_params*, const char*, const char*);
00882 #endif
00883 
00884 #ifdef RIPPER
00885 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00886 # define rb_compile_error ripper_compile_error
00887 # define compile_error ripper_compile_error
00888 # define PARSER_ARG parser,
00889 #else
00890 # define rb_compile_error rb_compile_error_with_enc
00891 # define compile_error parser->nerr++,rb_compile_error_with_enc
00892 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
00893 #endif
00894 
00895 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
00896    for instance).  This is too low for Ruby to parse some files, such as
00897    date/format.rb, therefore bump the value up to at least Bison's default. */
00898 #ifdef OLD_YACC
00899 #ifndef YYMAXDEPTH
00900 #define YYMAXDEPTH 10000
00901 #endif
00902 #endif
00903 
00904 #ifndef RIPPER
00905 static void token_info_push(struct parser_params*, const char *token);
00906 static void token_info_pop(struct parser_params*, const char *token);
00907 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
00908 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
00909 #else
00910 #define token_info_push(token) /* nothing */
00911 #define token_info_pop(token) /* nothing */
00912 #endif
00913 
00914 
00915 /* Enabling traces.  */
00916 #ifndef YYDEBUG
00917 # define YYDEBUG 1
00918 #endif
00919 
00920 /* Enabling verbose error messages.  */
00921 #ifdef YYERROR_VERBOSE
00922 # undef YYERROR_VERBOSE
00923 # define YYERROR_VERBOSE 1
00924 #else
00925 # define YYERROR_VERBOSE 0
00926 #endif
00927 
00928 /* Enabling the token table.  */
00929 #ifndef YYTOKEN_TABLE
00930 # define YYTOKEN_TABLE 0
00931 #endif
00932 
00933 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00934 typedef union YYSTYPE
00935 #line 616 "ripper.y"
00936 {
00937     VALUE val;
00938     NODE *node;
00939     ID id;
00940     int num;
00941     const struct vtable *vars;
00942 }
00943 /* Line 187 of yacc.c.  */
00944 #line 945 "parse.c"
00945         YYSTYPE;
00946 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00947 # define YYSTYPE_IS_DECLARED 1
00948 # define YYSTYPE_IS_TRIVIAL 1
00949 #endif
00950 
00951 
00952 
00953 /* Copy the second part of user declarations.  */
00954 
00955 
00956 /* Line 216 of yacc.c.  */
00957 #line 958 "parse.c"
00958 
00959 #ifdef short
00960 # undef short
00961 #endif
00962 
00963 #ifdef YYTYPE_UINT8
00964 typedef YYTYPE_UINT8 yytype_uint8;
00965 #else
00966 typedef unsigned char yytype_uint8;
00967 #endif
00968 
00969 #ifdef YYTYPE_INT8
00970 typedef YYTYPE_INT8 yytype_int8;
00971 #elif (defined __STDC__ || defined __C99__FUNC__ \
00972      || defined __cplusplus || defined _MSC_VER)
00973 typedef signed char yytype_int8;
00974 #else
00975 typedef short int yytype_int8;
00976 #endif
00977 
00978 #ifdef YYTYPE_UINT16
00979 typedef YYTYPE_UINT16 yytype_uint16;
00980 #else
00981 typedef unsigned short int yytype_uint16;
00982 #endif
00983 
00984 #ifdef YYTYPE_INT16
00985 typedef YYTYPE_INT16 yytype_int16;
00986 #else
00987 typedef short int yytype_int16;
00988 #endif
00989 
00990 #ifndef YYSIZE_T
00991 # ifdef __SIZE_TYPE__
00992 #  define YYSIZE_T __SIZE_TYPE__
00993 # elif defined size_t
00994 #  define YYSIZE_T size_t
00995 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00996      || defined __cplusplus || defined _MSC_VER)
00997 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00998 #  define YYSIZE_T size_t
00999 # else
01000 #  define YYSIZE_T unsigned int
01001 # endif
01002 #endif
01003 
01004 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
01005 
01006 #ifndef YY_
01007 # if YYENABLE_NLS
01008 #  if ENABLE_NLS
01009 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
01010 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
01011 #  endif
01012 # endif
01013 # ifndef YY_
01014 #  define YY_(msgid) msgid
01015 # endif
01016 #endif
01017 
01018 /* Suppress unused-variable warnings by "using" E.  */
01019 #if ! defined lint || defined __GNUC__
01020 # define YYUSE(e) ((void) (e))
01021 #else
01022 # define YYUSE(e) /* empty */
01023 #endif
01024 
01025 /* Identity function, used to suppress warnings about constant conditions.  */
01026 #ifndef lint
01027 # define YYID(n) (n)
01028 #else
01029 #if (defined __STDC__ || defined __C99__FUNC__ \
01030      || defined __cplusplus || defined _MSC_VER)
01031 static int
01032 YYID (int i)
01033 #else
01034 static int
01035 YYID (i)
01036     int i;
01037 #endif
01038 {
01039   return i;
01040 }
01041 #endif
01042 
01043 #if ! defined yyoverflow || YYERROR_VERBOSE
01044 
01045 /* The parser invokes alloca or malloc; define the necessary symbols.  */
01046 
01047 # ifdef YYSTACK_USE_ALLOCA
01048 #  if YYSTACK_USE_ALLOCA
01049 #   ifdef __GNUC__
01050 #    define YYSTACK_ALLOC __builtin_alloca
01051 #   elif defined __BUILTIN_VA_ARG_INCR
01052 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
01053 #   elif defined _AIX
01054 #    define YYSTACK_ALLOC __alloca
01055 #   elif defined _MSC_VER
01056 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
01057 #    define alloca _alloca
01058 #   else
01059 #    define YYSTACK_ALLOC alloca
01060 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01061      || defined __cplusplus || defined _MSC_VER)
01062 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
01063 #     ifndef _STDLIB_H
01064 #      define _STDLIB_H 1
01065 #     endif
01066 #    endif
01067 #   endif
01068 #  endif
01069 # endif
01070 
01071 # ifdef YYSTACK_ALLOC
01072    /* Pacify GCC's `empty if-body' warning.  */
01073 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
01074 #  ifndef YYSTACK_ALLOC_MAXIMUM
01075     /* The OS might guarantee only one guard page at the bottom of the stack,
01076        and a page size can be as small as 4096 bytes.  So we cannot safely
01077        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
01078        to allow for a few compiler-allocated temporary stack slots.  */
01079 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
01080 #  endif
01081 # else
01082 #  define YYSTACK_ALLOC YYMALLOC
01083 #  define YYSTACK_FREE YYFREE
01084 #  ifndef YYSTACK_ALLOC_MAXIMUM
01085 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
01086 #  endif
01087 #  if (defined __cplusplus && ! defined _STDLIB_H \
01088        && ! ((defined YYMALLOC || defined malloc) \
01089              && (defined YYFREE || defined free)))
01090 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
01091 #   ifndef _STDLIB_H
01092 #    define _STDLIB_H 1
01093 #   endif
01094 #  endif
01095 #  ifndef YYMALLOC
01096 #   define YYMALLOC malloc
01097 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01098      || defined __cplusplus || defined _MSC_VER)
01099 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
01100 #   endif
01101 #  endif
01102 #  ifndef YYFREE
01103 #   define YYFREE free
01104 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01105      || defined __cplusplus || defined _MSC_VER)
01106 void free (void *); /* INFRINGES ON USER NAME SPACE */
01107 #   endif
01108 #  endif
01109 # endif
01110 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
01111 
01112 
01113 #if (! defined yyoverflow \
01114      && (! defined __cplusplus \
01115          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01116 
01117 /* A type that is properly aligned for any stack member.  */
01118 union yyalloc
01119 {
01120   yytype_int16 yyss;
01121   YYSTYPE yyvs;
01122   };
01123 
01124 /* The size of the maximum gap between one aligned stack and the next.  */
01125 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01126 
01127 /* The size of an array large to enough to hold all stacks, each with
01128    N elements.  */
01129 # define YYSTACK_BYTES(N) \
01130      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01131       + YYSTACK_GAP_MAXIMUM)
01132 
01133 /* Copy COUNT objects from FROM to TO.  The source and destination do
01134    not overlap.  */
01135 # ifndef YYCOPY
01136 #  if defined __GNUC__ && 1 < __GNUC__
01137 #   define YYCOPY(To, From, Count) \
01138       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01139 #  else
01140 #   define YYCOPY(To, From, Count)              \
01141       do                                        \
01142         {                                       \
01143           YYSIZE_T yyi;                         \
01144           for (yyi = 0; yyi < (Count); yyi++)   \
01145             (To)[yyi] = (From)[yyi];            \
01146         }                                       \
01147       while (YYID (0))
01148 #  endif
01149 # endif
01150 
01151 /* Relocate STACK from its old location to the new one.  The
01152    local variables YYSIZE and YYSTACKSIZE give the old and new number of
01153    elements in the stack, and YYPTR gives the new location of the
01154    stack.  Advance YYPTR to a properly aligned location for the next
01155    stack.  */
01156 # define YYSTACK_RELOCATE(Stack)                                        \
01157     do                                                                  \
01158       {                                                                 \
01159         YYSIZE_T yynewbytes;                                            \
01160         YYCOPY (&yyptr->Stack, Stack, yysize);                          \
01161         Stack = &yyptr->Stack;                                          \
01162         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01163         yyptr += yynewbytes / sizeof (*yyptr);                          \
01164       }                                                                 \
01165     while (YYID (0))
01166 
01167 #endif
01168 
01169 /* YYFINAL -- State number of the termination state.  */
01170 #define YYFINAL  3
01171 /* YYLAST -- Last index in YYTABLE.  */
01172 #define YYLAST   10748
01173 
01174 /* YYNTOKENS -- Number of terminals.  */
01175 #define YYNTOKENS  148
01176 /* YYNNTS -- Number of nonterminals.  */
01177 #define YYNNTS  174
01178 /* YYNRULES -- Number of rules.  */
01179 #define YYNRULES  573
01180 /* YYNRULES -- Number of states.  */
01181 #define YYNSTATES  991
01182 
01183 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
01184 #define YYUNDEFTOK  2
01185 #define YYMAXUTOK   375
01186 
01187 #define YYTRANSLATE(YYX)                                                \
01188   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01189 
01190 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
01191 static const yytype_uint8 yytranslate[] =
01192 {
01193        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01194      147,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01195        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01196        2,     2,   146,   123,     2,     2,     2,   121,   116,     2,
01197      142,   143,   119,   117,   140,   118,   139,   120,     2,     2,
01198        2,     2,     2,     2,     2,     2,     2,     2,   111,   145,
01199      113,   109,   112,   110,     2,     2,     2,     2,     2,     2,
01200        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01201        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01202        2,   138,     2,   144,   115,     2,   141,     2,     2,     2,
01203        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01204        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01205        2,     2,     2,   136,   114,   137,   124,     2,     2,     2,
01206        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01207        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01208        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01209        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01210        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01211        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01212        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01213        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01214        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01215        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01216        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01217        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01218        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
01219        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
01220       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
01221       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
01222       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
01223       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
01224       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
01225       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
01226       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
01227       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
01228       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
01229      105,   106,   107,   108,   122,   125,   126,   127,   128,   129,
01230      130,   131,   132,   133,   134,   135
01231 };
01232 
01233 #if YYDEBUG
01234 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
01235    YYRHS.  */
01236 static const yytype_uint16 yyprhs[] =
01237 {
01238        0,     0,     3,     4,     7,    10,    12,    14,    18,    21,
01239       23,    24,    30,    35,    38,    40,    42,    46,    49,    50,
01240       55,    59,    63,    67,    70,    74,    78,    82,    86,    90,
01241       95,    97,   101,   105,   112,   118,   124,   130,   136,   140,
01242      144,   148,   152,   154,   158,   162,   164,   168,   172,   176,
01243      179,   181,   183,   185,   187,   189,   194,   199,   200,   206,
01244      209,   213,   218,   224,   229,   235,   238,   241,   244,   247,
01245      250,   252,   256,   258,   262,   264,   267,   271,   277,   280,
01246      285,   288,   293,   295,   299,   301,   305,   308,   312,   314,
01247      318,   320,   322,   327,   331,   335,   339,   343,   346,   348,
01248      350,   352,   357,   361,   365,   369,   373,   376,   378,   380,
01249      382,   385,   387,   391,   393,   395,   397,   399,   401,   403,
01250      405,   407,   409,   411,   412,   417,   419,   421,   423,   425,
01251      427,   429,   431,   433,   435,   437,   439,   441,   443,   445,
01252      447,   449,   451,   453,   455,   457,   459,   461,   463,   465,
01253      467,   469,   471,   473,   475,   477,   479,   481,   483,   485,
01254      487,   489,   491,   493,   495,   497,   499,   501,   503,   505,
01255      507,   509,   511,   513,   515,   517,   519,   521,   523,   525,
01256      527,   529,   531,   533,   535,   537,   539,   541,   543,   545,
01257      547,   549,   551,   553,   555,   557,   561,   567,   571,   577,
01258      584,   590,   596,   602,   608,   613,   617,   621,   625,   629,
01259      633,   637,   641,   645,   649,   654,   659,   662,   665,   669,
01260      673,   677,   681,   685,   689,   693,   697,   701,   705,   709,
01261      713,   717,   720,   723,   727,   731,   735,   739,   740,   745,
01262      752,   754,   756,   758,   761,   766,   769,   773,   775,   777,
01263      779,   781,   784,   789,   792,   794,   797,   800,   805,   807,
01264      808,   811,   814,   817,   819,   821,   824,   828,   833,   837,
01265      842,   845,   847,   849,   851,   853,   855,   857,   859,   861,
01266      863,   864,   869,   870,   875,   879,   883,   886,   890,   894,
01267      896,   901,   905,   907,   908,   915,   920,   924,   927,   929,
01268      932,   935,   942,   949,   950,   951,   959,   960,   961,   969,
01269      975,   980,   981,   982,   992,   993,  1000,  1001,  1002,  1011,
01270     1012,  1018,  1019,  1026,  1027,  1028,  1038,  1040,  1042,  1044,
01271     1046,  1048,  1050,  1052,  1054,  1056,  1058,  1060,  1062,  1064,
01272     1066,  1068,  1070,  1072,  1074,  1077,  1079,  1081,  1083,  1089,
01273     1091,  1094,  1096,  1098,  1100,  1104,  1106,  1110,  1112,  1117,
01274     1124,  1128,  1134,  1137,  1142,  1144,  1148,  1155,  1164,  1169,
01275     1176,  1181,  1184,  1191,  1194,  1199,  1206,  1209,  1214,  1217,
01276     1222,  1224,  1226,  1228,  1232,  1234,  1239,  1241,  1244,  1246,
01277     1250,  1252,  1254,  1255,  1256,  1261,  1266,  1268,  1272,  1276,
01278     1277,  1283,  1286,  1291,  1296,  1299,  1304,  1309,  1313,  1317,
01279     1321,  1324,  1326,  1331,  1332,  1338,  1339,  1345,  1351,  1353,
01280     1355,  1362,  1364,  1366,  1368,  1370,  1373,  1375,  1378,  1380,
01281     1382,  1384,  1386,  1388,  1390,  1392,  1395,  1399,  1403,  1407,
01282     1411,  1415,  1416,  1420,  1422,  1425,  1429,  1433,  1434,  1438,
01283     1439,  1442,  1443,  1446,  1447,  1450,  1452,  1453,  1457,  1458,
01284     1459,  1465,  1467,  1469,  1471,  1473,  1476,  1478,  1480,  1482,
01285     1484,  1488,  1490,  1492,  1495,  1498,  1500,  1502,  1504,  1506,
01286     1508,  1510,  1512,  1514,  1516,  1518,  1520,  1522,  1524,  1526,
01287     1528,  1530,  1532,  1534,  1536,  1537,  1542,  1545,  1549,  1552,
01288     1559,  1568,  1573,  1580,  1585,  1592,  1595,  1600,  1607,  1610,
01289     1615,  1618,  1623,  1625,  1626,  1628,  1630,  1632,  1634,  1636,
01290     1638,  1640,  1644,  1646,  1650,  1654,  1658,  1660,  1664,  1666,
01291     1670,  1672,  1674,  1677,  1679,  1681,  1683,  1686,  1689,  1691,
01292     1693,  1694,  1699,  1701,  1704,  1706,  1710,  1714,  1717,  1719,
01293     1721,  1723,  1725,  1727,  1729,  1731,  1733,  1735,  1737,  1739,
01294     1741,  1742,  1744,  1745,  1747,  1750,  1753,  1754,  1756,  1758,
01295     1760,  1762,  1764,  1767
01296 };
01297 
01298 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
01299 static const yytype_int16 yyrhs[] =
01300 {
01301      149,     0,    -1,    -1,   150,   151,    -1,   152,   314,    -1,
01302      321,    -1,   153,    -1,   152,   320,   153,    -1,     1,   153,
01303       -1,   158,    -1,    -1,    47,   154,   136,   151,   137,    -1,
01304      156,   256,   231,   259,    -1,   157,   314,    -1,   321,    -1,
01305      158,    -1,   157,   320,   158,    -1,     1,   158,    -1,    -1,
01306       45,   180,   159,   180,    -1,    45,    54,    54,    -1,    45,
01307       54,    64,    -1,    45,    54,    63,    -1,     6,   181,    -1,
01308      158,    40,   162,    -1,   158,    41,   162,    -1,   158,    42,
01309      162,    -1,   158,    43,   162,    -1,   158,    44,   158,    -1,
01310       48,   136,   156,   137,    -1,   160,    -1,   168,   109,   163,
01311       -1,   286,    87,   163,    -1,   216,   138,   191,   317,    87,
01312      163,    -1,   216,   139,    52,    87,   163,    -1,   216,   139,
01313       56,    87,   163,    -1,   216,    85,    56,    87,   163,    -1,
01314      216,    85,    52,    87,   163,    -1,   287,    87,   163,    -1,
01315      175,   109,   198,    -1,   168,   109,   187,    -1,   168,   109,
01316      198,    -1,   161,    -1,   175,   109,   163,    -1,   175,   109,
01317      160,    -1,   163,    -1,   161,    37,   161,    -1,   161,    38,
01318      161,    -1,    39,   315,   161,    -1,   123,   163,    -1,   185,
01319       -1,   161,    -1,   167,    -1,   164,    -1,   249,    -1,   249,
01320      139,   311,   193,    -1,   249,    85,   311,   193,    -1,    -1,
01321       94,   166,   237,   156,   137,    -1,   310,   193,    -1,   310,
01322      193,   165,    -1,   216,   139,   311,   193,    -1,   216,   139,
01323      311,   193,   165,    -1,   216,    85,   311,   193,    -1,   216,
01324       85,   311,   193,   165,    -1,    32,   193,    -1,    31,   193,
01325       -1,    30,   192,    -1,    21,   192,    -1,    22,   192,    -1,
01326      170,    -1,    89,   169,   316,    -1,   170,    -1,    89,   169,
01327      316,    -1,   172,    -1,   172,   171,    -1,   172,    95,   174,
01328       -1,   172,    95,   174,   140,   173,    -1,   172,    95,    -1,
01329      172,    95,   140,   173,    -1,    95,   174,    -1,    95,   174,
01330      140,   173,    -1,    95,    -1,    95,   140,   173,    -1,   174,
01331       -1,    89,   169,   316,    -1,   171,   140,    -1,   172,   171,
01332      140,    -1,   171,    -1,   173,   140,   171,    -1,   283,    -1,
01333      284,    -1,   216,   138,   191,   317,    -1,   216,   139,    52,
01334       -1,   216,    85,    52,    -1,   216,   139,    56,    -1,   216,
01335       85,    56,    -1,    86,    56,    -1,   287,    -1,   283,    -1,
01336      284,    -1,   216,   138,   191,   317,    -1,   216,   139,    52,
01337       -1,   216,    85,    52,    -1,   216,   139,    56,    -1,   216,
01338       85,    56,    -1,    86,    56,    -1,   287,    -1,    52,    -1,
01339       56,    -1,    86,   176,    -1,   176,    -1,   216,    85,   176,
01340       -1,    52,    -1,    56,    -1,    53,    -1,   183,    -1,   184,
01341       -1,   178,    -1,   279,    -1,   179,    -1,   281,    -1,   180,
01342       -1,    -1,   181,   140,   182,   180,    -1,   114,    -1,   115,
01343       -1,   116,    -1,    69,    -1,    70,    -1,    71,    -1,    77,
01344       -1,    78,    -1,   112,    -1,    73,    -1,   113,    -1,    74,
01345       -1,    72,    -1,    83,    -1,    84,    -1,   117,    -1,   118,
01346       -1,   119,    -1,    95,    -1,   120,    -1,   121,    -1,    68,
01347       -1,   123,    -1,   124,    -1,    66,    -1,    67,    -1,    81,
01348       -1,    82,    -1,   141,    -1,    49,    -1,    50,    -1,    51,
01349       -1,    47,    -1,    48,    -1,    45,    -1,    37,    -1,     7,
01350       -1,    21,    -1,    16,    -1,     3,    -1,     5,    -1,    46,
01351       -1,    26,    -1,    15,    -1,    14,    -1,    10,    -1,     9,
01352       -1,    36,    -1,    20,    -1,    25,    -1,     4,    -1,    22,
01353       -1,    34,    -1,    39,    -1,    38,    -1,    23,    -1,     8,
01354       -1,    24,    -1,    30,    -1,    33,    -1,    32,    -1,    13,
01355       -1,    35,    -1,     6,    -1,    17,    -1,    31,    -1,    11,
01356       -1,    12,    -1,    18,    -1,    19,    -1,   175,   109,   185,
01357       -1,   175,   109,   185,    44,   185,    -1,   286,    87,   185,
01358       -1,   286,    87,   185,    44,   185,    -1,   216,   138,   191,
01359      317,    87,   185,    -1,   216,   139,    52,    87,   185,    -1,
01360      216,   139,    56,    87,   185,    -1,   216,    85,    52,    87,
01361      185,    -1,   216,    85,    56,    87,   185,    -1,    86,    56,
01362       87,   185,    -1,   287,    87,   185,    -1,   185,    79,   185,
01363       -1,   185,    80,   185,    -1,   185,   117,   185,    -1,   185,
01364      118,   185,    -1,   185,   119,   185,    -1,   185,   120,   185,
01365       -1,   185,   121,   185,    -1,   185,    68,   185,    -1,   122,
01366       59,    68,   185,    -1,   122,    60,    68,   185,    -1,    66,
01367      185,    -1,    67,   185,    -1,   185,   114,   185,    -1,   185,
01368      115,   185,    -1,   185,   116,   185,    -1,   185,    69,   185,
01369       -1,   185,   112,   185,    -1,   185,    73,   185,    -1,   185,
01370      113,   185,    -1,   185,    74,   185,    -1,   185,    70,   185,
01371       -1,   185,    71,   185,    -1,   185,    72,   185,    -1,   185,
01372       77,   185,    -1,   185,    78,   185,    -1,   123,   185,    -1,
01373      124,   185,    -1,   185,    83,   185,    -1,   185,    84,   185,
01374       -1,   185,    75,   185,    -1,   185,    76,   185,    -1,    -1,
01375       46,   315,   186,   185,    -1,   185,   110,   185,   315,   111,
01376      185,    -1,   199,    -1,   185,    -1,   321,    -1,   197,   318,
01377       -1,   197,   140,   308,   318,    -1,   308,   318,    -1,   142,
01378      191,   316,    -1,   321,    -1,   189,    -1,   321,    -1,   192,
01379       -1,   197,   140,    -1,   197,   140,   308,   140,    -1,   308,
01380      140,    -1,   167,    -1,   197,   196,    -1,   308,   196,    -1,
01381      197,   140,   308,   196,    -1,   195,    -1,    -1,   194,   192,
01382       -1,    96,   187,    -1,   140,   195,    -1,   321,    -1,   187,
01383       -1,    95,   187,    -1,   197,   140,   187,    -1,   197,   140,
01384       95,   187,    -1,   197,   140,   187,    -1,   197,   140,    95,
01385      187,    -1,    95,   187,    -1,   260,    -1,   261,    -1,   264,
01386       -1,   265,    -1,   266,    -1,   269,    -1,   285,    -1,   287,
01387       -1,    53,    -1,    -1,   217,   200,   155,   227,    -1,    -1,
01388       90,   161,   201,   316,    -1,    89,   156,   143,    -1,   216,
01389       85,    56,    -1,    86,    56,    -1,    92,   188,   144,    -1,
01390       93,   307,   137,    -1,    30,    -1,    31,   142,   192,   316,
01391       -1,    31,   142,   316,    -1,    31,    -1,    -1,    46,   315,
01392      142,   202,   161,   316,    -1,    39,   142,   161,   316,    -1,
01393       39,   142,   316,    -1,   310,   251,    -1,   250,    -1,   250,
01394      251,    -1,    97,   242,    -1,   218,   162,   228,   156,   230,
01395      227,    -1,   219,   162,   228,   156,   231,   227,    -1,    -1,
01396       -1,   220,   203,   162,   229,   204,   156,   227,    -1,    -1,
01397       -1,   221,   205,   162,   229,   206,   156,   227,    -1,   222,
01398      162,   314,   254,   227,    -1,   222,   314,   254,   227,    -1,
01399       -1,    -1,   223,   232,    25,   207,   162,   229,   208,   156,
01400      227,    -1,    -1,   224,   177,   288,   209,   155,   227,    -1,
01401       -1,    -1,   224,    83,   161,   210,   319,   211,   155,   227,
01402       -1,    -1,   225,   177,   212,   155,   227,    -1,    -1,   226,
01403      178,   213,   290,   155,   227,    -1,    -1,    -1,   226,   305,
01404      313,   214,   178,   215,   290,   155,   227,    -1,    21,    -1,
01405       22,    -1,    23,    -1,    24,    -1,   199,    -1,     7,    -1,
01406       11,    -1,    12,    -1,    18,    -1,    19,    -1,    16,    -1,
01407       20,    -1,     3,    -1,     4,    -1,     5,    -1,    10,    -1,
01408      319,    -1,    13,    -1,   319,    13,    -1,   319,    -1,    27,
01409       -1,   231,    -1,    14,   162,   228,   156,   230,    -1,   321,
01410       -1,    15,   156,    -1,   175,    -1,   168,    -1,   293,    -1,
01411       89,   235,   316,    -1,   233,    -1,   234,   140,   233,    -1,
01412      234,    -1,   234,   140,    95,   293,    -1,   234,   140,    95,
01413      293,   140,   234,    -1,   234,   140,    95,    -1,   234,   140,
01414       95,   140,   234,    -1,    95,   293,    -1,    95,   293,   140,
01415      234,    -1,    95,    -1,    95,   140,   234,    -1,   295,   140,
01416      298,   140,   301,   304,    -1,   295,   140,   298,   140,   301,
01417      140,   295,   304,    -1,   295,   140,   298,   304,    -1,   295,
01418      140,   298,   140,   295,   304,    -1,   295,   140,   301,   304,
01419       -1,   295,   140,    -1,   295,   140,   301,   140,   295,   304,
01420       -1,   295,   304,    -1,   298,   140,   301,   304,    -1,   298,
01421      140,   301,   140,   295,   304,    -1,   298,   304,    -1,   298,
01422      140,   295,   304,    -1,   301,   304,    -1,   301,   140,   295,
01423      304,    -1,   303,    -1,   321,    -1,   238,    -1,   114,   239,
01424      114,    -1,    76,    -1,   114,   236,   239,   114,    -1,   321,
01425       -1,   145,   240,    -1,   241,    -1,   240,   140,   241,    -1,
01426       52,    -1,   292,    -1,    -1,    -1,   243,   244,   245,   246,
01427       -1,   142,   291,   239,   316,    -1,   291,    -1,   107,   156,
01428      137,    -1,    29,   156,    10,    -1,    -1,    28,   248,   237,
01429      156,    10,    -1,   167,   247,    -1,   249,   139,   311,   190,
01430       -1,   249,    85,   311,   190,    -1,   310,   189,    -1,   216,
01431      139,   311,   190,    -1,   216,    85,   311,   189,    -1,   216,
01432       85,   312,    -1,   216,   139,   189,    -1,   216,    85,   189,
01433       -1,    32,   189,    -1,    32,    -1,   216,   138,   191,   317,
01434       -1,    -1,   136,   252,   237,   156,   137,    -1,    -1,    26,
01435      253,   237,   156,    10,    -1,    17,   197,   228,   156,   255,
01436       -1,   231,    -1,   254,    -1,     8,   257,   258,   228,   156,
01437      256,    -1,   321,    -1,   187,    -1,   198,    -1,   321,    -1,
01438       88,   175,    -1,   321,    -1,     9,   156,    -1,   321,    -1,
01439      282,    -1,   279,    -1,   281,    -1,   262,    -1,    62,    -1,
01440      263,    -1,   262,   263,    -1,    99,   271,   106,    -1,   100,
01441      272,   106,    -1,   101,   273,    65,    -1,   102,   146,   106,
01442       -1,   102,   267,   106,    -1,    -1,   267,   268,   146,    -1,
01443      274,    -1,   268,   274,    -1,   103,   146,   106,    -1,   103,
01444      270,   106,    -1,    -1,   270,    61,   146,    -1,    -1,   271,
01445      274,    -1,    -1,   272,   274,    -1,    -1,   273,   274,    -1,
01446       61,    -1,    -1,   105,   275,   278,    -1,    -1,    -1,   104,
01447      276,   277,   156,   137,    -1,    54,    -1,    55,    -1,    57,
01448       -1,   287,    -1,    98,   280,    -1,   178,    -1,    55,    -1,
01449       54,    -1,    57,    -1,    98,   272,   106,    -1,    59,    -1,
01450       60,    -1,   122,    59,    -1,   122,    60,    -1,    52,    -1,
01451       55,    -1,    54,    -1,    56,    -1,    57,    -1,    34,    -1,
01452       33,    -1,    35,    -1,    36,    -1,    50,    -1,    49,    -1,
01453       51,    -1,   283,    -1,   284,    -1,   283,    -1,   284,    -1,
01454       63,    -1,    64,    -1,   319,    -1,    -1,   113,   289,   162,
01455      319,    -1,     1,   319,    -1,   142,   291,   316,    -1,   291,
01456      319,    -1,   295,   140,   299,   140,   301,   304,    -1,   295,
01457      140,   299,   140,   301,   140,   295,   304,    -1,   295,   140,
01458      299,   304,    -1,   295,   140,   299,   140,   295,   304,    -1,
01459      295,   140,   301,   304,    -1,   295,   140,   301,   140,   295,
01460      304,    -1,   295,   304,    -1,   299,   140,   301,   304,    -1,
01461      299,   140,   301,   140,   295,   304,    -1,   299,   304,    -1,
01462      299,   140,   295,   304,    -1,   301,   304,    -1,   301,   140,
01463      295,   304,    -1,   303,    -1,    -1,    56,    -1,    55,    -1,
01464       54,    -1,    57,    -1,   292,    -1,    52,    -1,   293,    -1,
01465       89,   235,   316,    -1,   294,    -1,   295,   140,   294,    -1,
01466       52,   109,   187,    -1,    52,   109,   216,    -1,   297,    -1,
01467      298,   140,   297,    -1,   296,    -1,   299,   140,   296,    -1,
01468      119,    -1,    95,    -1,   300,    52,    -1,   300,    -1,   116,
01469       -1,    96,    -1,   302,    52,    -1,   140,   303,    -1,   321,
01470       -1,   285,    -1,    -1,   142,   306,   161,   316,    -1,   321,
01471       -1,   308,   318,    -1,   309,    -1,   308,   140,   309,    -1,
01472      187,    88,   187,    -1,    58,   187,    -1,    52,    -1,    56,
01473       -1,    53,    -1,    52,    -1,    56,    -1,    53,    -1,   183,
01474       -1,    52,    -1,    53,    -1,   183,    -1,   139,    -1,    85,
01475       -1,    -1,   320,    -1,    -1,   147,    -1,   315,   143,    -1,
01476      315,   144,    -1,    -1,   147,    -1,   140,    -1,   145,    -1,
01477      147,    -1,   319,    -1,   320,   145,    -1,    -1
01478 };
01479 
01480 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
01481 static const yytype_uint16 yyrline[] =
01482 {
01483        0,   782,   782,   782,   813,   824,   833,   841,   849,   855,
01484      857,   856,   880,   913,   924,   933,   941,   949,   955,   955,
01485      963,   971,   982,   992,  1000,  1009,  1018,  1031,  1044,  1053,
01486     1065,  1066,  1076,  1105,  1126,  1143,  1160,  1171,  1188,  1198,
01487     1207,  1216,  1225,  1228,  1237,  1249,  1250,  1258,  1266,  1274,
01488     1282,  1285,  1297,  1298,  1301,  1302,  1311,  1323,  1322,  1344,
01489     1353,  1365,  1374,  1386,  1395,  1407,  1416,  1425,  1433,  1441,
01490     1451,  1452,  1462,  1463,  1473,  1481,  1489,  1497,  1506,  1514,
01491     1523,  1531,  1540,  1548,  1559,  1560,  1570,  1578,  1588,  1596,
01492     1606,  1610,  1614,  1622,  1630,  1638,  1646,  1658,  1668,  1680,
01493     1689,  1698,  1706,  1714,  1722,  1730,  1743,  1756,  1767,  1775,
01494     1778,  1786,  1794,  1804,  1805,  1806,  1807,  1812,  1823,  1824,
01495     1827,  1835,  1838,  1846,  1846,  1856,  1857,  1858,  1859,  1860,
01496     1861,  1862,  1863,  1864,  1865,  1866,  1867,  1868,  1869,  1870,
01497     1871,  1872,  1873,  1874,  1875,  1876,  1877,  1878,  1879,  1880,
01498     1881,  1882,  1883,  1884,  1887,  1887,  1887,  1888,  1888,  1889,
01499     1889,  1889,  1890,  1890,  1890,  1890,  1891,  1891,  1891,  1891,
01500     1892,  1892,  1892,  1893,  1893,  1893,  1893,  1894,  1894,  1894,
01501     1894,  1895,  1895,  1895,  1895,  1896,  1896,  1896,  1896,  1897,
01502     1897,  1897,  1897,  1898,  1898,  1901,  1910,  1920,  1949,  1980,
01503     2006,  2023,  2040,  2057,  2068,  2079,  2090,  2104,  2118,  2126,
01504     2134,  2142,  2150,  2158,  2166,  2175,  2184,  2192,  2200,  2208,
01505     2216,  2224,  2232,  2240,  2248,  2256,  2264,  2272,  2280,  2288,
01506     2299,  2307,  2315,  2323,  2331,  2339,  2347,  2355,  2355,  2365,
01507     2375,  2381,  2393,  2394,  2398,  2406,  2416,  2426,  2427,  2430,
01508     2431,  2432,  2436,  2444,  2454,  2463,  2471,  2481,  2490,  2499,
01509     2499,  2511,  2521,  2525,  2531,  2539,  2547,  2561,  2577,  2591,
01510     2606,  2616,  2617,  2618,  2619,  2620,  2621,  2622,  2623,  2624,
01511     2633,  2632,  2657,  2657,  2666,  2674,  2682,  2690,  2703,  2711,
01512     2719,  2727,  2735,  2743,  2743,  2753,  2761,  2769,  2780,  2781,
01513     2792,  2796,  2808,  2820,  2820,  2820,  2831,  2831,  2831,  2842,
01514     2853,  2862,  2864,  2861,  2928,  2927,  2949,  2954,  2948,  2973,
01515     2972,  2994,  2993,  3016,  3017,  3016,  3037,  3045,  3053,  3061,
01516     3071,  3083,  3089,  3095,  3101,  3107,  3113,  3119,  3125,  3131,
01517     3137,  3147,  3153,  3158,  3159,  3166,  3171,  3174,  3175,  3188,
01518     3189,  3199,  3200,  3203,  3211,  3221,  3229,  3239,  3247,  3256,
01519     3265,  3273,  3281,  3290,  3302,  3310,  3320,  3328,  3336,  3344,
01520     3352,  3360,  3369,  3377,  3385,  3393,  3401,  3409,  3417,  3425,
01521     3433,  3443,  3444,  3450,  3459,  3468,  3479,  3480,  3490,  3497,
01522     3506,  3514,  3520,  3523,  3520,  3541,  3549,  3559,  3563,  3570,
01523     3569,  3590,  3606,  3615,  3626,  3635,  3645,  3655,  3663,  3674,
01524     3685,  3693,  3701,  3716,  3715,  3735,  3734,  3755,  3767,  3768,
01525     3771,  3790,  3793,  3801,  3809,  3812,  3816,  3819,  3827,  3830,
01526     3831,  3839,  3842,  3859,  3860,  3861,  3871,  3881,  3908,  3973,
01527     3982,  3993,  4000,  4010,  4018,  4028,  4037,  4048,  4055,  4066,
01528     4073,  4084,  4091,  4102,  4109,  4138,  4140,  4139,  4156,  4162,
01529     4155,  4181,  4189,  4197,  4205,  4208,  4219,  4220,  4221,  4222,
01530     4225,  4255,  4256,  4257,  4265,  4275,  4276,  4277,  4278,  4279,
01531     4282,  4283,  4284,  4285,  4286,  4287,  4288,  4291,  4304,  4314,
01532     4322,  4332,  4333,  4336,  4345,  4344,  4352,  4364,  4374,  4382,
01533     4390,  4398,  4406,  4414,  4422,  4430,  4438,  4446,  4454,  4462,
01534     4470,  4478,  4486,  4495,  4504,  4513,  4522,  4531,  4542,  4543,
01535     4550,  4559,  4578,  4585,  4598,  4610,  4622,  4630,  4646,  4654,
01536     4670,  4671,  4674,  4687,  4698,  4699,  4702,  4719,  4723,  4733,
01537     4743,  4743,  4772,  4773,  4783,  4790,  4800,  4808,  4818,  4819,
01538     4820,  4823,  4824,  4825,  4826,  4829,  4830,  4831,  4834,  4839,
01539     4846,  4847,  4850,  4851,  4854,  4857,  4860,  4861,  4862,  4865,
01540     4866,  4869,  4870,  4874
01541 };
01542 #endif
01543 
01544 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01545 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01546    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
01547 static const char *const yytname[] =
01548 {
01549   "$end", "error", "$undefined", "keyword_class", "keyword_module",
01550   "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01551   "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01552   "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01553   "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01554   "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01555   "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01556   "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01557   "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01558   "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01559   "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01560   "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01561   "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01562   "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01563   "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01564   "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01565   "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01566   "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01567   "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01568   "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01569   "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01570   "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01571   "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01572   "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01573   "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01574   "id_core_set_variable_alias", "id_core_undef_method",
01575   "id_core_define_method", "id_core_define_singleton_method",
01576   "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01577   "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01578   "@1", "top_compstmt", "top_stmts", "top_stmt", "@2", "bodystmt",
01579   "compstmt", "stmts", "stmt", "@3", "command_asgn", "expr", "expr_value",
01580   "command_call", "block_command", "cmd_brace_block", "@4", "command",
01581   "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head",
01582   "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym",
01583   "fitem", "undef_list", "@5", "op", "reswords", "arg", "@6", "arg_value",
01584   "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01585   "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01586   "mrhs", "primary", "@8", "@9", "@10", "@11", "@12", "@13", "@14", "@15",
01587   "@16", "@17", "@18", "@19", "@20", "@21", "@22", "@23", "primary_value",
01588   "k_begin", "k_if", "k_unless", "k_while", "k_until", "k_case", "k_for",
01589   "k_class", "k_module", "k_def", "k_end", "then", "do", "if_tail",
01590   "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs", "block_param",
01591   "opt_block_param", "block_param_def", "opt_bv_decl", "bv_decls", "bvar",
01592   "lambda", "@24", "@25", "f_larglist", "lambda_body", "do_block", "@26",
01593   "block_call", "method_call", "brace_block", "@27", "@28", "case_body",
01594   "cases", "opt_rescue", "exc_list", "exc_var", "opt_ensure", "literal",
01595   "strings", "string", "string1", "xstring", "regexp", "words",
01596   "word_list", "word", "qwords", "qword_list", "string_contents",
01597   "xstring_contents", "regexp_contents", "string_content", "@29", "@30",
01598   "@31", "string_dvar", "symbol", "sym", "dsym", "numeric",
01599   "user_variable", "keyword_variable", "var_ref", "var_lhs", "backref",
01600   "superclass", "@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01601   "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01602   "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01603   "opt_f_block_arg", "singleton", "@33", "assoc_list", "assocs", "assoc",
01604   "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01605   "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01606 };
01607 #endif
01608 
01609 # ifdef YYPRINT
01610 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
01611    token YYLEX-NUM.  */
01612 static const yytype_uint16 yytoknum[] =
01613 {
01614        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
01615      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
01616      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
01617      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
01618      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
01619      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
01620      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
01621      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
01622      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
01623      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
01624      355,   356,   357,   358,   359,   360,   361,   362,   363,    61,
01625       63,    58,    62,    60,   124,    94,    38,    43,    45,    42,
01626       47,    37,   364,    33,   126,   365,   366,   367,   368,   369,
01627      370,   371,   372,   373,   374,   375,   123,   125,    91,    46,
01628       44,    96,    40,    41,    93,    59,    32,    10
01629 };
01630 # endif
01631 
01632 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
01633 static const yytype_uint16 yyr1[] =
01634 {
01635        0,   148,   150,   149,   151,   152,   152,   152,   152,   153,
01636      154,   153,   155,   156,   157,   157,   157,   157,   159,   158,
01637      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01638      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01639      158,   158,   158,   160,   160,   161,   161,   161,   161,   161,
01640      161,   162,   163,   163,   164,   164,   164,   166,   165,   167,
01641      167,   167,   167,   167,   167,   167,   167,   167,   167,   167,
01642      168,   168,   169,   169,   170,   170,   170,   170,   170,   170,
01643      170,   170,   170,   170,   171,   171,   172,   172,   173,   173,
01644      174,   174,   174,   174,   174,   174,   174,   174,   174,   175,
01645      175,   175,   175,   175,   175,   175,   175,   175,   176,   176,
01646      177,   177,   177,   178,   178,   178,   178,   178,   179,   179,
01647      180,   180,   181,   182,   181,   183,   183,   183,   183,   183,
01648      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01649      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01650      183,   183,   183,   183,   184,   184,   184,   184,   184,   184,
01651      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01652      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01653      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01654      184,   184,   184,   184,   184,   185,   185,   185,   185,   185,
01655      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
01656      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
01657      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
01658      185,   185,   185,   185,   185,   185,   185,   186,   185,   185,
01659      185,   187,   188,   188,   188,   188,   189,   190,   190,   191,
01660      191,   191,   191,   191,   192,   192,   192,   192,   192,   194,
01661      193,   195,   196,   196,   197,   197,   197,   197,   198,   198,
01662      198,   199,   199,   199,   199,   199,   199,   199,   199,   199,
01663      200,   199,   201,   199,   199,   199,   199,   199,   199,   199,
01664      199,   199,   199,   202,   199,   199,   199,   199,   199,   199,
01665      199,   199,   199,   203,   204,   199,   205,   206,   199,   199,
01666      199,   207,   208,   199,   209,   199,   210,   211,   199,   212,
01667      199,   213,   199,   214,   215,   199,   199,   199,   199,   199,
01668      216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
01669      226,   227,   228,   228,   228,   229,   229,   230,   230,   231,
01670      231,   232,   232,   233,   233,   234,   234,   235,   235,   235,
01671      235,   235,   235,   235,   235,   235,   236,   236,   236,   236,
01672      236,   236,   236,   236,   236,   236,   236,   236,   236,   236,
01673      236,   237,   237,   238,   238,   238,   239,   239,   240,   240,
01674      241,   241,   243,   244,   242,   245,   245,   246,   246,   248,
01675      247,   249,   249,   249,   250,   250,   250,   250,   250,   250,
01676      250,   250,   250,   252,   251,   253,   251,   254,   255,   255,
01677      256,   256,   257,   257,   257,   258,   258,   259,   259,   260,
01678      260,   260,   261,   262,   262,   262,   263,   264,   265,   266,
01679      266,   267,   267,   268,   268,   269,   269,   270,   270,   271,
01680      271,   272,   272,   273,   273,   274,   275,   274,   276,   277,
01681      274,   278,   278,   278,   278,   279,   280,   280,   280,   280,
01682      281,   282,   282,   282,   282,   283,   283,   283,   283,   283,
01683      284,   284,   284,   284,   284,   284,   284,   285,   285,   286,
01684      286,   287,   287,   288,   289,   288,   288,   290,   290,   291,
01685      291,   291,   291,   291,   291,   291,   291,   291,   291,   291,
01686      291,   291,   291,   291,   292,   292,   292,   292,   293,   293,
01687      294,   294,   295,   295,   296,   297,   298,   298,   299,   299,
01688      300,   300,   301,   301,   302,   302,   303,   304,   304,   305,
01689      306,   305,   307,   307,   308,   308,   309,   309,   310,   310,
01690      310,   311,   311,   311,   311,   312,   312,   312,   313,   313,
01691      314,   314,   315,   315,   316,   317,   318,   318,   318,   319,
01692      319,   320,   320,   321
01693 };
01694 
01695 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
01696 static const yytype_uint8 yyr2[] =
01697 {
01698        0,     2,     0,     2,     2,     1,     1,     3,     2,     1,
01699        0,     5,     4,     2,     1,     1,     3,     2,     0,     4,
01700        3,     3,     3,     2,     3,     3,     3,     3,     3,     4,
01701        1,     3,     3,     6,     5,     5,     5,     5,     3,     3,
01702        3,     3,     1,     3,     3,     1,     3,     3,     3,     2,
01703        1,     1,     1,     1,     1,     4,     4,     0,     5,     2,
01704        3,     4,     5,     4,     5,     2,     2,     2,     2,     2,
01705        1,     3,     1,     3,     1,     2,     3,     5,     2,     4,
01706        2,     4,     1,     3,     1,     3,     2,     3,     1,     3,
01707        1,     1,     4,     3,     3,     3,     3,     2,     1,     1,
01708        1,     4,     3,     3,     3,     3,     2,     1,     1,     1,
01709        2,     1,     3,     1,     1,     1,     1,     1,     1,     1,
01710        1,     1,     1,     0,     4,     1,     1,     1,     1,     1,
01711        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01712        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01713        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01714        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01715        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01716        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01717        1,     1,     1,     1,     1,     3,     5,     3,     5,     6,
01718        5,     5,     5,     5,     4,     3,     3,     3,     3,     3,
01719        3,     3,     3,     3,     4,     4,     2,     2,     3,     3,
01720        3,     3,     3,     3,     3,     3,     3,     3,     3,     3,
01721        3,     2,     2,     3,     3,     3,     3,     0,     4,     6,
01722        1,     1,     1,     2,     4,     2,     3,     1,     1,     1,
01723        1,     2,     4,     2,     1,     2,     2,     4,     1,     0,
01724        2,     2,     2,     1,     1,     2,     3,     4,     3,     4,
01725        2,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01726        0,     4,     0,     4,     3,     3,     2,     3,     3,     1,
01727        4,     3,     1,     0,     6,     4,     3,     2,     1,     2,
01728        2,     6,     6,     0,     0,     7,     0,     0,     7,     5,
01729        4,     0,     0,     9,     0,     6,     0,     0,     8,     0,
01730        5,     0,     6,     0,     0,     9,     1,     1,     1,     1,
01731        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01732        1,     1,     1,     1,     2,     1,     1,     1,     5,     1,
01733        2,     1,     1,     1,     3,     1,     3,     1,     4,     6,
01734        3,     5,     2,     4,     1,     3,     6,     8,     4,     6,
01735        4,     2,     6,     2,     4,     6,     2,     4,     2,     4,
01736        1,     1,     1,     3,     1,     4,     1,     2,     1,     3,
01737        1,     1,     0,     0,     4,     4,     1,     3,     3,     0,
01738        5,     2,     4,     4,     2,     4,     4,     3,     3,     3,
01739        2,     1,     4,     0,     5,     0,     5,     5,     1,     1,
01740        6,     1,     1,     1,     1,     2,     1,     2,     1,     1,
01741        1,     1,     1,     1,     1,     2,     3,     3,     3,     3,
01742        3,     0,     3,     1,     2,     3,     3,     0,     3,     0,
01743        2,     0,     2,     0,     2,     1,     0,     3,     0,     0,
01744        5,     1,     1,     1,     1,     2,     1,     1,     1,     1,
01745        3,     1,     1,     2,     2,     1,     1,     1,     1,     1,
01746        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01747        1,     1,     1,     1,     0,     4,     2,     3,     2,     6,
01748        8,     4,     6,     4,     6,     2,     4,     6,     2,     4,
01749        2,     4,     1,     0,     1,     1,     1,     1,     1,     1,
01750        1,     3,     1,     3,     3,     3,     1,     3,     1,     3,
01751        1,     1,     2,     1,     1,     1,     2,     2,     1,     1,
01752        0,     4,     1,     2,     1,     3,     3,     2,     1,     1,
01753        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01754        0,     1,     0,     1,     2,     2,     0,     1,     1,     1,
01755        1,     1,     2,     0
01756 };
01757 
01758 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
01759    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
01760    means the default is an error.  */
01761 static const yytype_uint16 yydefact[] =
01762 {
01763        2,     0,     0,     1,     0,   338,   339,   340,     0,   331,
01764      332,   333,   336,   334,   335,   337,   326,   327,   328,   329,
01765      289,   259,   259,   481,   480,   482,   483,   562,     0,   562,
01766       10,     0,   485,   484,   486,   475,   550,   477,   476,   478,
01767      479,   471,   472,   433,   491,   492,     0,     0,     0,     0,
01768        0,   573,   573,    82,   392,   451,   449,   451,   453,   441,
01769      447,     0,     0,     0,     3,   560,     6,     9,    30,    42,
01770       45,    53,    52,     0,    70,     0,    74,    84,     0,    50,
01771      240,     0,   280,     0,     0,   303,   306,   560,     0,     0,
01772        0,     0,    54,   298,   271,   272,   432,   434,   273,   274,
01773      275,   276,   430,   431,   429,   487,   488,   277,     0,   278,
01774      259,     5,     8,   164,   175,   165,   188,   161,   181,   171,
01775      170,   191,   192,   186,   169,   168,   163,   189,   193,   194,
01776      173,   162,   176,   180,   182,   174,   167,   183,   190,   185,
01777      184,   177,   187,   172,   160,   179,   178,   159,   166,   157,
01778      158,   154,   155,   156,   113,   115,   114,   149,   150,   146,
01779      128,   129,   130,   137,   134,   136,   131,   132,   151,   152,
01780      138,   139,   143,   133,   135,   125,   126,   127,   140,   141,
01781      142,   144,   145,   147,   148,   153,   118,   120,   122,    23,
01782      116,   117,   119,   121,     0,     0,     0,     0,     0,     0,
01783        0,   254,     0,   241,   264,    68,   258,   573,     0,   487,
01784      488,     0,   278,   573,   544,    69,    67,   562,    66,     0,
01785      573,   410,    65,   562,   563,     0,     0,    18,   237,     0,
01786        0,   326,   327,   289,   292,   411,   216,     0,     0,   217,
01787      286,     0,     0,     0,   560,    15,   562,    72,    14,   282,
01788        0,   566,   566,   242,     0,     0,   566,   542,   562,     0,
01789        0,     0,    80,   330,     0,    90,    91,    98,   300,   393,
01790      468,   467,   469,   466,     0,   465,     0,     0,     0,     0,
01791        0,     0,     0,   473,   474,    49,   231,   232,   569,   570,
01792        4,   571,   561,     0,     0,     0,     0,     0,     0,     0,
01793      399,   401,     0,    86,     0,    78,    75,     0,     0,     0,
01794        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01795        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01796        0,     0,     0,     0,     0,   573,     0,     0,    51,     0,
01797        0,     0,     0,   560,     0,   561,     0,   352,   351,     0,
01798        0,   487,   488,   278,   108,   109,     0,     0,   111,     0,
01799        0,   487,   488,   278,   319,   184,   177,   187,   172,   154,
01800      155,   156,   113,   114,   540,   321,   539,     0,     0,     0,
01801      415,   413,   299,   435,     0,     0,   404,    59,   297,   123,
01802      547,   286,   265,   261,     0,     0,     0,   255,   263,     0,
01803      573,     0,     0,     0,     0,   256,   562,     0,   291,   260,
01804      562,   250,   573,   573,   249,   562,   296,    48,    20,    22,
01805       21,     0,   293,     0,     0,     0,     0,     0,     0,    17,
01806      562,   284,    13,   561,    71,   562,   287,   568,   567,   243,
01807      568,   245,   288,   543,     0,    97,   473,   474,    88,    83,
01808        0,     0,   573,     0,   513,   455,   458,   456,   470,   452,
01809      436,   450,   437,   438,   454,   439,   440,     0,   443,   445,
01810        0,   446,     0,     0,   572,     7,    24,    25,    26,    27,
01811       28,    46,    47,   573,     0,    31,    40,     0,    41,   562,
01812        0,    76,    87,    44,    43,     0,   195,   264,    39,   213,
01813      221,   226,   227,   228,   223,   225,   235,   236,   229,   230,
01814      206,   207,   233,   234,   562,   222,   224,   218,   219,   220,
01815      208,   209,   210,   211,   212,   551,   556,   552,   557,   409,
01816      259,   407,   562,   551,   553,   552,   554,   408,   259,     0,
01817      573,   343,     0,   342,     0,     0,     0,     0,     0,     0,
01818      286,     0,   573,     0,   311,   316,   108,   109,   110,     0,
01819      494,   314,   493,     0,   573,     0,     0,     0,   513,   559,
01820      558,   323,   551,   552,   259,   259,   573,   573,    32,   197,
01821       38,   205,    57,    60,     0,   195,   546,     0,   266,   262,
01822      573,   555,   552,   562,   551,   552,   545,   290,   564,   246,
01823      251,   253,   295,    19,     0,   238,     0,    29,     0,   573,
01824      204,    73,    16,   283,   566,     0,    81,    94,    96,   562,
01825      551,   552,   519,   516,   515,   514,   517,     0,   531,   535,
01826      534,   530,   513,     0,   396,   518,   520,   522,   573,   528,
01827      573,   533,   573,     0,   512,   459,     0,   442,   444,   448,
01828      214,   215,   384,   573,     0,   382,   381,   270,     0,    85,
01829       79,     0,     0,     0,     0,     0,     0,   406,    63,     0,
01830      412,     0,     0,   248,   405,    61,   247,   341,   281,   573,
01831      573,   421,   573,   344,   573,   346,   304,   345,   307,     0,
01832        0,   310,   555,   285,   562,   551,   552,     0,     0,   496,
01833        0,     0,   108,   109,   112,   562,     0,   562,   513,     0,
01834        0,     0,   403,    56,   402,    55,     0,     0,     0,   573,
01835      124,   267,   257,     0,     0,   412,     0,     0,   573,   562,
01836       11,   244,    89,    92,     0,   519,     0,   364,   355,   357,
01837      562,   353,   573,     0,     0,   394,     0,   505,   538,     0,
01838      508,   532,     0,   510,   536,     0,   461,   462,   463,   457,
01839      464,   519,     0,   573,     0,   573,   526,   573,   573,   380,
01840      386,     0,     0,   268,    77,   196,     0,    37,   202,    36,
01841      203,    64,   565,     0,    34,   200,    35,   201,    62,   422,
01842      423,   573,   424,     0,   573,   349,     0,     0,   347,     0,
01843        0,     0,   309,     0,     0,   412,     0,   317,     0,     0,
01844      412,   320,   541,   562,     0,   498,   324,     0,     0,   198,
01845        0,     0,   252,   294,   524,   562,     0,   362,     0,   521,
01846      562,     0,     0,   523,   573,   573,   537,   573,   529,   573,
01847      573,     0,     0,   390,   387,   388,   391,     0,   383,   371,
01848      373,     0,   376,     0,   378,   400,   269,   239,    33,   199,
01849        0,     0,   426,   350,     0,    12,   428,     0,   301,   302,
01850        0,     0,   266,   573,   312,     0,   495,   315,   497,   322,
01851      513,   416,   414,     0,   354,   365,     0,   360,   356,   395,
01852      398,   397,     0,   501,     0,   503,     0,   509,     0,   506,
01853      511,   460,     0,   525,     0,   385,   573,   573,   573,   527,
01854      573,   573,     0,   425,     0,    99,   100,   107,     0,   427,
01855        0,   305,   308,   418,   419,   417,     0,     0,     0,    58,
01856        0,   363,     0,   358,   573,   573,   573,   573,   286,     0,
01857      389,     0,   368,     0,   370,   377,     0,   374,   379,   106,
01858        0,   573,     0,   573,   573,     0,   318,     0,   361,     0,
01859      502,     0,   499,   504,   507,   555,   285,   573,   573,   573,
01860      573,   555,   105,   562,   551,   552,   420,   348,   313,   325,
01861      359,   573,   369,     0,   366,   372,   375,   412,   500,   573,
01862      367
01863 };
01864 
01865 /* YYDEFGOTO[NTERM-NUM].  */
01866 static const yytype_int16 yydefgoto[] =
01867 {
01868       -1,     1,     2,    64,    65,    66,   229,   539,   540,   244,
01869      245,   421,    68,    69,   339,    70,    71,   583,   719,    72,
01870       73,   246,    74,    75,    76,   449,    77,   202,   358,   359,
01871      186,   187,   188,   189,   584,   536,   191,    79,   423,   204,
01872      250,   529,   674,   410,   411,   218,   219,   206,   397,   412,
01873      488,    80,   337,   435,   604,   341,   800,   342,   801,   697,
01874      926,   701,   698,   875,   566,   568,   711,   880,   237,    82,
01875       83,    84,    85,    86,    87,    88,    89,    90,    91,   678,
01876      542,   686,   797,   798,   350,   738,   739,   740,   763,   654,
01877      655,   764,   844,   845,   268,   269,   454,   633,   745,   301,
01878      483,    92,    93,   388,   577,   576,   549,   925,   680,   791,
01879      861,   865,    94,    95,    96,    97,    98,    99,   100,   280,
01880      467,   101,   282,   276,   274,   278,   459,   646,   645,   755,
01881      759,   102,   275,   103,   104,   209,   210,   107,   211,   212,
01882      561,   700,   709,   710,   635,   636,   637,   638,   639,   766,
01883      767,   640,   641,   642,   643,   836,   747,   377,   567,   255,
01884      413,   214,   238,   608,   531,   571,   290,   407,   408,   670,
01885      439,   543,   345,   248
01886 };
01887 
01888 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
01889    STATE-NUM.  */
01890 #define YYPACT_NINF -747
01891 static const yytype_int16 yypact[] =
01892 {
01893     -747,    81,  2552,  -747,  7102,  -747,  -747,  -747,  6615,  -747,
01894     -747,  -747,  -747,  -747,  -747,  -747,  7320,  7320,  -747,  -747,
01895     7320,  3237,  2814,  -747,  -747,  -747,  -747,   100,  6476,   -31,
01896     -747,   -26,  -747,  -747,  -747,  5715,  2955,  -747,  -747,  5842,
01897     -747,  -747,  -747,  -747,  -747,  -747,  8519,  8519,    83,  4434,
01898     8628,  7538,  7865,  6878,  -747,  6337,  -747,  -747,  -747,   -24,
01899       29,   252,  8737,  8519,  -747,   193,  -747,  1104,  -747,   458,
01900     -747,  -747,   129,    77,  -747,    69,  8846,  -747,   139,  2797,
01901       22,    41,  -747,  8628,  8628,  -747,  -747,  5078,  8951,  9056,
01902     9161,  5588,    33,    46,  -747,  -747,   157,  -747,  -747,  -747,
01903     -747,  -747,  -747,  -747,  -747,    25,    58,  -747,   179,   613,
01904       51,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01905     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01906     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01907     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01908     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01909     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01910     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
01911     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   134,
01912     -747,  -747,  -747,  -747,   182,  8519,   279,  4564,  8519,  8519,
01913     8519,  -747,   263,  2797,   260,  -747,  -747,   237,   207,    43,
01914      206,   298,   254,   265,  -747,  -747,  -747,  4969,  -747,  7320,
01915     7320,  -747,  -747,  5208,  -747,  8628,   661,  -747,   272,   287,
01916     4694,  -747,  -747,  -747,   295,   307,  -747,   304,    51,   416,
01917      619,  7211,  4434,   384,   193,  1104,   -31,   399,  -747,   458,
01918      419,   221,   300,  -747,   260,   430,   300,  -747,   -31,   497,
01919      501,  9266,   442,  -747,   351,   366,   383,   409,  -747,  -747,
01920     -747,  -747,  -747,  -747,   644,  -747,   754,   813,   605,   464,
01921      819,   478,    68,   530,   532,  -747,  -747,  -747,  -747,  -747,
01922     -747,  -747,  5317,  8628,  8628,  8628,  8628,  7211,  8628,  8628,
01923     -747,  -747,  7974,  -747,  4434,  6990,   470,  7974,  8519,  8519,
01924     8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,
01925     8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,  8519,
01926     8519,  8519,  8519,  8519,  9548,  7320,  9625,  3609,   458,    86,
01927       86,  8628,  8628,   193,   597,   480,   562,  -747,  -747,   454,
01928      601,    54,    76,    99,   331,   349,  8628,   481,  -747,    45,
01929      473,  -747,  -747,  -747,  -747,   217,   286,   305,   318,   321,
01930      347,   363,   376,   381,  -747,  -747,  -747,   391, 10549, 10549,
01931     -747,  -747,  -747,  -747,  8737,  8737,  -747,   535,  -747,  -747,
01932     -747,   388,  -747,  -747,  8519,  8519,  7429,  -747,  -747,  9702,
01933     7320,  9779,  8519,  8519,  7647,  -747,   -31,   492,  -747,  -747,
01934      -31,  -747,   506,   539,  -747,   106,  -747,  -747,  -747,  -747,
01935     -747,  6615,  -747,  8519,  4029,   508,  9702,  9779,  8519,  1104,
01936      -31,  -747,  -747,  5445,   541,   -31,  -747,  7756,  -747,  -747,
01937     7865,  -747,  -747,  -747,   272,   510,  -747,  -747,  -747,   543,
01938     9266,  9856,  7320,  9933,   774,  -747,  -747,  -747,  -747,  -747,
01939     -747,  -747,  -747,  -747,  -747,  -747,  -747,   313,  -747,  -747,
01940      491,  -747,  8519,  8519,  -747,  -747,  -747,  -747,  -747,  -747,
01941     -747,  -747,  -747,    32,  8519,  -747,   545,   546,  -747,   -31,
01942     9266,   551,  -747,  -747,  -747,   566,  9473,  -747,  -747,   416,
01943     2184,  2184,  2184,  2184,   781,   781,  2273,  2938,  2184,  2184,
01944     1364,  1364,   662,   662,  2656,   781,   781,   927,   927,   768,
01945      397,   397,   416,   416,   416,  3378,  6083,  3464,  6197,  -747,
01946      307,  -747,   -31,   647,  -747,   660,  -747,  -747,  3096,   650,
01947      688,  -747,  3754,   685,  4174,    56,    56,   597,  8083,   650,
01948      112, 10010,  7320, 10087,  -747,   458,  -747,   510,  -747,   193,
01949     -747,  -747,  -747, 10164,  7320, 10241,  3609,  8628,  1131,  -747,
01950     -747,  -747,  -747,  -747,  1739,  1739,    32,    32,  -747, 10608,
01951     -747,  2797,  -747,  -747,  6615, 10627,  -747,  8519,   260,  -747,
01952      265,  5969,  2673,   -31,   490,   500,  -747,  -747,  -747,  -747,
01953     7429,  7647,  -747,  -747,  8628,  2797,   570,  -747,   307,   307,
01954     2797,   213,  1104,  -747,   300,  9266,   543,   505,   282,   -31,
01955       38,   261,   603,  -747,  -747,  -747,  -747,   972,  -747,  -747,
01956     -747,  -747,  1223,    66,  -747,  -747,  -747,  -747,   580,  -747,
01957      583,   683,   589,   687,  -747,  -747,   893,  -747,  -747,  -747,
01958      416,   416,  -747,   576,  4839,  -747,  -747,   604,  8192,  -747,
01959      543,  9266,  8737,  8519,   630,  8737,  8737,  -747,   535,   608,
01960      677,  8737,  8737,  -747,  -747,   535,  -747,  -747,  -747,  8301,
01961      740,  -747,   588,  -747,   740,  -747,  -747,  -747,  -747,   650,
01962       44,  -747,   239,   257,   -31,   141,   145,  8628,   193,  -747,
01963     8628,  3609,   505,   282,  -747,   -31,   650,   106,  1223,  3609,
01964      193,  6754,  -747,  -747,  -747,  -747,  4839,  4694,  8519,    32,
01965     -747,  -747,  -747,  8519,  8519,   507,  8519,  8519,   636,   106,
01966     -747,  -747,  -747,   291,  8519,  -747,   972,   457,  -747,   651,
01967      -31,  -747,   639,  4839,  4694,  -747,  1223,  -747,  -747,  1223,
01968     -747,  -747,   598,  -747,  -747,  4694,  -747,  -747,  -747,  -747,
01969     -747,   681,  1017,   639,   679,   654,  -747,   656,   657,  -747,
01970     -747,   789,  8519,   664,   543,  2797,  8519,  -747,  2797,  -747,
01971     2797,  -747,  -747,  8737,  -747,  2797,  -747,  2797,  -747,   545,
01972     -747,   713,  -747,  4304,   796,  -747,  8628,   650,  -747,   650,
01973     4839,  4839,  -747,  8410,  3899,   189,    56,  -747,   193,   650,
01974     -747,  -747,  -747,   -31,   650,  -747,  -747,   799,   673,  2797,
01975     4694,  8519,  7647,  -747,  -747,   -31,   884,   671,  1079,  -747,
01976      -31,   803,   686,  -747,   676,   678,  -747,   684,  -747,   694,
01977      684,   690,  9371,  -747,   699,  -747,  -747,   711,  -747,  1251,
01978     -747,  1251,  -747,   598,  -747,  -747,   700,  2797,  -747,  2797,
01979     9476,    86,  -747,  -747,  4839,  -747,  -747,    86,  -747,  -747,
01980      650,   650,  -747,   365,  -747,  3609,  -747,  -747,  -747,  -747,
01981     1131,  -747,  -747,   706,  -747,   707,   884,   716,  -747,  -747,
01982     -747,  -747,  1223,  -747,   598,  -747,   598,  -747,   598,  -747,
01983     -747,  -747,   790,   520,  1017,  -747,   708,   715,   684,  -747,
01984      717,   684,   797,  -747,   523,   366,   383,   409,  3609,  -747,
01985     3754,  -747,  -747,  -747,  -747,  -747,  4839,   650,  3609,  -747,
01986      884,   707,   884,   721,   684,   727,   684,   684,  -747, 10318,
01987     -747,  1251,  -747,   598,  -747,  -747,   598,  -747,  -747,   510,
01988    10395,  7320, 10472,   688,   588,   650,  -747,   650,   707,   884,
01989     -747,   598,  -747,  -747,  -747,   730,   731,   684,   735,   684,
01990      684,    55,   282,   -31,   128,   158,  -747,  -747,  -747,  -747,
01991      707,   684,  -747,   598,  -747,  -747,  -747,   163,  -747,   684,
01992     -747
01993 };
01994 
01995 /* YYPGOTO[NTERM-NUM].  */
01996 static const yytype_int16 yypgoto[] =
01997 {
01998     -747,  -747,  -747,   452,  -747,    28,  -747,  -545,   277,  -747,
01999       39,  -747,  -293,   184,   -58,    71,  -747,  -169,  -747,    -7,
02000      791,  -142,   -13,   -37,  -747,  -396,   -29,  1623,  -312,   788,
02001      -54,  -747,   -25,  -747,  -747,    20,  -747,  1066,  -747,   -45,
02002     -747,    11,    47,  -324,   115,     5,  -747,  -322,  -196,    53,
02003     -295,     8,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,
02004     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,     2,  -747,
02005     -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,  -747,   205,
02006     -338,  -516,   -72,  -618,  -747,  -722,  -671,   147,  -747,  -489,
02007     -747,  -600,  -747,   -12,  -747,  -747,  -747,  -747,  -747,  -747,
02008     -747,  -747,  -747,   798,  -747,  -747,  -531,  -747,   -50,  -747,
02009     -747,  -747,  -747,  -747,  -747,   811,  -747,  -747,  -747,  -747,
02010     -747,  -747,  -747,  -747,   856,  -747,  -140,  -747,  -747,  -747,
02011     -747,     7,  -747,    12,  -747,  1268,  1605,   823,  1289,  1575,
02012     -747,  -747,    35,  -387,  -697,  -568,  -690,   273,  -696,  -746,
02013       72,   181,  -747,  -526,  -747,  -449,   270,  -747,  -747,  -747,
02014       97,  -360,   758,  -276,  -747,  -747,   -56,    -4,   278,  -585,
02015     -214,     6,   -18,    -2
02016 };
02017 
02018 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
02019    positive, shift that token.  If negative, reduce the rule which
02020    number is the opposite.  If zero, do what YYDEFACT says.
02021    If YYTABLE_NINF, syntax error.  */
02022 #define YYTABLE_NINF -574
02023 static const yytype_int16 yytable[] =
02024 {
02025      111,   273,   544,   227,    81,   644,    81,   254,   725,   201,
02026      201,   532,   498,   201,   493,   192,   689,   405,   208,   208,
02027      193,   706,   208,   225,   262,   228,   340,   222,   190,   343,
02028      688,   344,   112,   221,   733,   192,   247,   375,   441,   306,
02029      193,    67,   443,    67,   596,   558,   559,   292,   190,   253,
02030      257,    81,   208,   838,   616,   264,   833,   541,   530,   741,
02031      538,   263,   794,   -93,   208,   846,   799,   634,  -103,   207,
02032      207,   291,   380,   207,   589,   190,   593,   380,   264,   -99,
02033      596,     3,   589,   685,   263,   208,   208,   716,   717,   208,
02034      349,   360,   360,   291,   660,   743,   263,   263,   263,   541,
02035      430,  -100,   574,   575,   251,   909,   888,  -330,   652,   805,
02036      230,   190,  -489,   213,   213,   387,   224,   213,   378,   644,
02037      810,   386,   279,   530,  -107,   538,   334,   768,   619,   470,
02038     -489,   205,   215,   285,   -99,   216,   461,  -106,   464,   240,
02039      468,  -102,   830,   298,   299,  -490,   653,   -93,   252,   256,
02040      390,   609,   -99,   392,   393,   885,   809,   300,   560,   833,
02041     -330,  -330,   489,   847,   814,   -90,  -102,  -100,   741,   827,
02042     -104,  -104,   379,   744,   471,   281,  -101,   609,   -93,   335,
02043      336,   -93,   381,   644,   803,   -93,   302,   381,   432,   288,
02044      288,   289,   289,   220,   -90,   909,   838,  -551,   -91,    81,
02045     -103,   288,  -103,   289,   769,   398,   833,   846,   888,   303,
02046      201,   398,   201,   201,  -101,   931,   -91,   405,   414,   208,
02047      835,   208,   208,   839,   448,   208,   433,   208,   694,   247,
02048      820,   288,    81,   289,   249,   476,   477,   478,   479,   -98,
02049      705,   596,   223,    81,    81,   742,   221,   224,   307,   386,
02050      291,   704,   -97,   224,   444,   923,    56,   486,   741,   644,
02051      741,   958,   497,   264,  -103,   774,   384,   338,   338,   263,
02052      207,   338,   207,  -102,   389,  -102,   491,   609,   589,   589,
02053      429,   -93,  -105,   545,   546,   -95,   -95,   547,   980,   609,
02054      874,   247,   399,  -490,    81,   208,   208,   208,   208,    81,
02055      208,   208,  -481,  -104,   208,  -104,    81,   264,  -101,   208,
02056     -101,   283,   284,   263,   213,  -100,   213,  -412,   741,   933,
02057      475,   813,   -71,   907,   223,   910,   243,   648,   201,   -92,
02058      927,    67,   406,   414,   409,   391,   480,   208,   288,    81,
02059      289,   403,   924,   208,   208,   400,   401,   537,   395,   291,
02060      586,   588,   804,   -85,   528,   487,  -481,  -548,   208,   254,
02061      487,   437,   741,  -107,   741,   562,   935,  -285,   438,   493,
02062      -95,  -480,   394,   485,   455,  -549,  -412,   396,   494,   -94,
02063      793,  -551,   548,   957,   790,   402,   208,   208,   987,   426,
02064     -482,   741,   588,   201,   722,   254,   603,   -96,   414,  -552,
02065      731,   -95,   208,  -483,   -95,   404,  -485,   415,   -95,   417,
02066      398,   398,   537,   448,   422,   968,  -475,   456,   457,   528,
02067     -285,  -285,   111,   424,  -552,  -480,    81,  -412,   192,  -412,
02068     -412,   644,  -484,   193,  -478,    81,   451,   217,   537,   657,
02069      440,   190,   400,   427,  -482,   201,   528,   438,  -486,   220,
02070      414,  -487,   264,   448,   208,   578,   580,  -483,   263,   647,
02071     -485,  -475,   596,    67,   537,   308,  -478,  -548,  -488,  -475,
02072     -475,   528,   612,  -548,   243,   428,   569,   338,   338,   338,
02073      338,   656,   481,   482,   308,  -549,  -484,  -478,  -478,   452,
02074      453,  -549,   264,   590,  -278,   298,   299,  -106,   263,   781,
02075      589,   416,  -486,   497,  -487,  -487,   788,   425,   -70,   735,
02076      664,   623,   624,   625,   626,  -475,   331,   332,   333,   243,
02077     -478,  -488,  -488,   918,   434,   338,   338,   431,   669,   920,
02078      570,  -555,   722,   556,   614,   668,   676,   557,   681,   551,
02079      555,   667,   721,   675,    81,   201,    81,  -278,  -278,   673,
02080      414,   687,   687,   445,   208,   588,   254,   201,   563,   720,
02081      446,   447,   414,   436,   537,   699,   208,   442,    81,   208,
02082      465,   528,   676,   676,   656,   656,   537,   726,   732,   713,
02083      715,   243,   450,   528,   469,   673,   673,   727,   398,   669,
02084     -555,   192,   552,   553,   821,  -286,   193,   826,   472,  -102,
02085      473,   690,   796,   793,   190,   939,   208,   676,   950,  -104,
02086      492,   564,   565,   773,   548,   669,  -101,   264,   550,   667,
02087      673,   712,   714,   263,   448,   474,   554,   973,   761,   582,
02088      623,   624,   625,   626,   789,   598,   748,   649,   748,   806,
02089      748,  -555,   808,  -555,  -555,   607,   600,  -551,  -286,  -286,
02090      735,   770,   623,   624,   625,   626,    81,   816,   564,   565,
02091      677,   951,   952,   264,   208,   627,   455,   208,   208,   263,
02092      463,   628,   629,   208,   208,   662,   609,   792,   795,   601,
02093      795,   -85,   795,   615,   597,  -264,   658,   627,   599,   824,
02094      669,   661,   630,   602,   629,   631,   679,   728,   683,   208,
02095      385,   669,   208,    81,   807,   455,   428,   730,   611,   456,
02096      457,    81,   734,   613,   630,   418,   815,   656,    81,    81,
02097      746,   762,  -107,   749,   419,   420,   398,   856,  -106,   752,
02098      308,   190,   487,   494,   671,   751,   777,   779,   867,   754,
02099      770,   776,   784,   786,  -265,    81,    81,   672,   456,   457,
02100      458,   707,   782,   -98,   691,   793,  -102,    81,   872,   -97,
02101      110,   770,   110,   748,   783,   748,   748,   659,   735,  -104,
02102      623,   624,   625,   626,   110,   110,   822,   254,   110,   329,
02103      330,   331,   332,   333,   762,   208,  -101,   -93,   729,   862,
02104      842,   828,   866,   848,   849,    81,   851,   853,   208,   855,
02105      -95,   860,    81,    81,  -266,   864,    81,   110,   110,   881,
02106      882,   886,   687,   890,   876,   455,   892,   -92,   894,   682,
02107      110,   684,    81,   891,   896,   905,   622,   901,   623,   624,
02108      625,   626,   748,   748,   898,   748,   308,   748,   748,   904,
02109     -267,   110,   110,   929,   903,   110,   938,   930,   941,   308,
02110      263,   321,   322,   949,   858,   943,   932,   946,   456,   457,
02111      460,   959,   914,   627,   321,   322,    81,   961,   263,   628,
02112      629,   795,  -551,  -552,   455,   983,   606,    81,   364,   347,
02113      455,   338,   977,   825,   338,   329,   330,   331,   332,   333,
02114      630,   382,   940,   631,   802,   326,   327,   328,   329,   330,
02115      331,   332,   333,   976,   748,   748,   748,   383,   748,   748,
02116      750,   811,   753,   277,   376,   928,   632,   456,   457,   462,
02117       81,   906,    81,   456,   457,   466,   765,   834,    81,     0,
02118       81,   771,   748,   748,   748,   748,   735,     0,   623,   624,
02119      625,   626,     0,     0,   201,     0,     0,   756,   757,   414,
02120      758,   681,   795,   208,     0,   110,    44,    45,     0,   528,
02121        0,     0,     0,   537,     0,   748,   748,   748,   748,   669,
02122      528,     0,     0,   736,     0,   110,     0,   110,   110,   748,
02123      338,   110,     0,   110,     0,   812,     0,   748,   110,     0,
02124        0,     0,     0,   817,   818,   308,     0,     0,     0,   110,
02125      110,     0,   868,     0,   869,     0,     0,   823,     0,     0,
02126      321,   322,     0,     0,   877,     0,     0,     0,   829,   879,
02127      831,   832,   837,     0,   735,   840,   623,   624,   625,   626,
02128        0,     0,   841,     0,     0,   850,     0,   852,   854,     0,
02129        0,     0,     0,   328,   329,   330,   331,   332,   333,     0,
02130      110,   110,   110,   110,   110,   110,   110,   110,     0,     0,
02131      110,   736,   110,     0,     0,   110,     0,   737,     0,   843,
02132      863,   623,   624,   625,   626,   921,   922,   870,   871,     0,
02133        0,   873,   203,   203,     0,     0,   203,     0,     0,     0,
02134        0,   878,     0,   110,     0,   110,     0,   883,     0,   110,
02135      110,     0,     0,   884,   893,   895,     0,   897,   889,   899,
02136      900,     0,   236,   239,   110,     0,     0,   203,   203,     0,
02137        0,     0,     0,     0,   908,     0,   911,     0,   286,   287,
02138        0,   735,   956,   623,   624,   625,   626,     0,     0,     0,
02139        0,   919,   110,   110,   293,   294,   295,   296,   297,     0,
02140        0,     0,     0,     0,     0,     0,     0,     0,   110,     0,
02141      978,     0,   979,     0,     0,   934,     0,   936,   736,     0,
02142        0,   937,     0,     0,   887,     0,   942,   944,   945,     0,
02143      947,   948,   110,   622,     0,   623,   624,   625,   626,     0,
02144        0,   110,     0,     0,     0,   953,     0,   954,     0,     0,
02145        0,     0,     0,   955,   960,   962,   963,   964,     0,     0,
02146      110,     0,     0,     0,   967,     0,   969,     0,     0,   970,
02147      627,     0,     0,     0,     0,     0,   628,   629,     0,     0,
02148        0,     0,     0,     0,   981,     0,     0,   982,   984,   985,
02149      986,     0,     0,     0,     0,     0,     0,   630,     0,     0,
02150      631,   988,     0,     0,     0,     0,   989,     0,     0,   990,
02151        0,   203,     0,     0,   203,   203,   286,     0,     0,     0,
02152      105,     0,   105,   708,     0,   622,     0,   623,   624,   625,
02153      626,     0,     0,   203,     0,   203,   203,     0,     0,     0,
02154        0,   108,     0,   108,     0,     0,     0,     0,     0,     0,
02155      110,     0,   110,   761,     0,   623,   624,   625,   626,     0,
02156      110,     0,   627,     0,     0,     0,     0,   105,   628,   629,
02157        0,   265,   110,     0,   110,   110,     0,     0,     0,     0,
02158        0,     0,     0,     0,     0,     0,     0,     0,   108,   630,
02159      627,     0,   631,     0,   265,     0,   628,   629,     0,     0,
02160        0,     0,     0,     0,     0,     0,   351,   361,   361,   361,
02161        0,     0,   110,     0,     0,     0,     0,   630,   203,     0,
02162      631,     0,     0,   496,   499,   500,   501,   502,   503,   504,
02163      505,   506,   507,   508,   509,   510,   511,   512,   513,   514,
02164      515,   516,   517,   518,   519,   520,   521,   522,   523,   524,
02165        0,   203,     0,     0,     0,     0,     0,     0,     0,     0,
02166        0,     0,   110,     0,     0,     0,     0,     0,     0,     0,
02167      110,     0,     0,   110,   110,     0,     0,     0,     0,   110,
02168      110,     0,   308,   309,   310,   311,   312,   313,   314,   315,
02169      316,   317,   318,  -574,  -574,     0,     0,   321,   322,     0,
02170      579,   581,     0,     0,     0,   110,     0,     0,   110,   110,
02171      585,   203,   203,     0,     0,   105,   203,   110,   579,   581,
02172      203,     0,     0,     0,   110,   110,   324,   325,   326,   327,
02173      328,   329,   330,   331,   332,   333,   108,     0,     0,   605,
02174        0,     0,     0,     0,   610,     0,     0,     0,   105,     0,
02175        0,   110,   110,   203,     0,     0,   203,     0,     0,   105,
02176      105,     0,     0,   110,     0,     0,     0,     0,   203,   108,
02177        0,     0,     0,     0,     0,     0,     0,     0,     0,   265,
02178      108,   108,     0,     0,     0,     0,     0,     0,   650,   651,
02179        0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
02180      203,   110,     0,     0,   110,     0,     0,     0,   110,   110,
02181      105,     0,   110,     0,     0,   105,     0,     0,     0,     0,
02182        0,     0,   105,   265,     0,     0,     0,   109,   110,   109,
02183        0,   108,     0,     0,     0,     0,   108,     0,     0,     0,
02184        0,     0,     0,   108,     0,     0,     0,     0,     0,     0,
02185        0,     0,     0,     0,     0,   105,     0,   106,     0,   106,
02186        0,     0,     0,     0,   203,     0,     0,     0,   203,     0,
02187        0,     0,   110,     0,   109,    78,   108,    78,   267,     0,
02188      203,     0,     0,   110,     0,     0,     0,     0,     0,     0,
02189        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02190        0,   267,     0,   203,   106,     0,     0,     0,   266,     0,
02191        0,     0,     0,   353,   363,   363,   203,   203,     0,     0,
02192        0,     0,    78,     0,     0,     0,   110,     0,   110,     0,
02193        0,   266,     0,     0,   110,     0,   110,     0,     0,     0,
02194        0,     0,   105,   352,   362,   362,   362,     0,     0,     0,
02195        0,   105,     0,     0,     0,     0,     0,     0,     0,   110,
02196        0,   348,     0,   108,     0,     0,     0,     0,   265,     0,
02197        0,     0,   108,     0,   203,     0,     0,     0,   585,   775,
02198        0,   778,   780,     0,     0,     0,     0,   785,   787,  -573,
02199        0,     0,     0,     0,     0,   203,     0,  -573,  -573,  -573,
02200        0,     0,  -573,  -573,  -573,     0,  -573,     0,   265,     0,
02201        0,     0,     0,     0,     0,     0,  -573,     0,     0,     0,
02202        0,     0,   109,     0,     0,     0,  -573,  -573,     0,  -573,
02203     -573,  -573,  -573,  -573,   819,     0,     0,     0,     0,   778,
02204      780,     0,   785,   787,     0,     0,     0,     0,     0,     0,
02205      203,     0,   106,     0,     0,   109,     0,     0,     0,     0,
02206      105,     0,   105,     0,     0,     0,   109,   109,     0,     0,
02207       78,     0,     0,     0,  -573,     0,     0,     0,     0,     0,
02208        0,   108,     0,   108,   105,   106,   267,     0,   203,     0,
02209        0,     0,   857,     0,     0,     0,   106,   106,     0,   859,
02210        0,     0,     0,    78,     0,   108,     0,     0,     0,     0,
02211        0,     0,     0,     0,    78,    78,   266,   109,     0,   203,
02212        0,     0,   109,     0,     0,     0,  -573,     0,  -573,   109,
02213      267,   220,  -573,   265,  -573,     0,  -573,   859,   203,     0,
02214        0,     0,     0,     0,     0,     0,     0,   106,     0,     0,
02215        0,     0,   106,     0,     0,     0,     0,     0,     0,   106,
02216      266,     0,   109,     0,     0,    78,     0,     0,     0,     0,
02217       78,     0,   105,     0,     0,     0,     0,    78,     0,   265,
02218      495,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02219        0,     0,   106,   108,     0,     0,     0,     0,     0,     0,
02220        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02221       78,     0,     0,     0,     0,     0,     0,     0,     0,   105,
02222        0,     0,     0,     0,     0,     0,     0,   105,     0,     0,
02223        0,     0,     0,     0,   105,   105,     0,     0,     0,     0,
02224      108,     0,     0,     0,     0,     0,     0,     0,   108,   109,
02225        0,     0,     0,     0,     0,   108,   108,     0,   109,     0,
02226        0,   105,   105,     0,     0,     0,     0,   203,     0,     0,
02227        0,     0,     0,   105,     0,   267,     0,     0,     0,   106,
02228        0,     0,   108,   108,     0,     0,     0,     0,   106,     0,
02229        0,     0,     0,     0,   108,     0,     0,    78,     0,     0,
02230        0,     0,     0,     0,     0,   266,    78,     0,     0,     0,
02231        0,   105,     0,     0,     0,   267,     0,     0,   105,   105,
02232        0,     0,   105,     0,     0,     0,     0,     0,     0,     0,
02233        0,     0,   108,     0,     0,     0,     0,     0,   105,   108,
02234      108,     0,     0,   108,     0,   266,     0,     0,     0,     0,
02235        0,     0,     0,     0,     0,     0,     0,     0,     0,   108,
02236      361,     0,     0,     0,     0,     0,     0,   109,     0,   109,
02237        0,     0,     0,     0,     0,     0,     0,     0,   915,     0,
02238        0,     0,   105,     0,     0,     0,     0,     0,     0,     0,
02239        0,   109,     0,   105,     0,     0,     0,   106,     0,   106,
02240        0,     0,     0,   108,     0,     0,     0,     0,     0,     0,
02241        0,     0,     0,     0,   108,    78,     0,    78,     0,     0,
02242        0,   106,     0,     0,     0,     0,     0,     0,     0,     0,
02243        0,     0,     0,     0,     0,     0,   105,     0,   105,    78,
02244      267,     0,     0,     0,   105,     0,   105,     0,     0,     0,
02245        0,     0,     0,     0,     0,     0,     0,   108,     0,   108,
02246        0,     0,     0,     0,     0,   108,     0,   108,     0,     0,
02247      266,   760,     0,     0,     0,     0,     0,     0,     0,   109,
02248        0,     0,     0,     0,     0,     0,   267,     0,     0,     0,
02249        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02250        0,     0,   308,  -574,  -574,  -574,  -574,   313,   314,   106,
02251        0,  -574,  -574,     0,     0,     0,   266,   321,   322,     0,
02252        0,     0,     0,     0,     0,     0,   109,    78,     0,     0,
02253        0,     0,     0,     0,   109,   495,     0,     0,     0,     0,
02254        0,   109,   109,     0,     0,     0,   324,   325,   326,   327,
02255      328,   329,   330,   331,   332,   333,   106,     0,     0,     0,
02256        0,     0,     0,     0,   106,     0,     0,     0,   109,   109,
02257        0,   106,   106,     0,    78,     0,     0,     0,     0,     0,
02258      109,     0,    78,     0,     0,     0,     0,     0,     0,    78,
02259       78,   308,   309,   310,   311,   312,   313,   314,   106,   106,
02260      317,   318,     0,     0,     0,     0,   321,   322,     0,     0,
02261      106,     0,     0,     0,     0,     0,    78,    78,   109,     0,
02262        0,     0,     0,     0,     0,   109,   109,     0,    78,   109,
02263        0,     0,     0,     0,     0,   324,   325,   326,   327,   328,
02264      329,   330,   331,   332,   333,   109,     0,     0,   106,     0,
02265        0,     0,     0,     0,     0,   106,   106,     0,     0,   106,
02266        0,     0,     0,     0,     0,     0,    78,   363,     0,     0,
02267        0,     0,     0,    78,    78,   106,     0,    78,     0,     0,
02268        0,     0,     0,     0,     0,   917,     0,     0,     0,   109,
02269        0,     0,     0,    78,     0,     0,     0,   362,     0,     0,
02270      109,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02271        0,     0,     0,     0,     0,   916,     0,     0,     0,   106,
02272        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02273      106,     0,     0,   913,     0,     0,     0,    78,     0,     0,
02274        0,     0,     0,   109,     0,   109,     0,     0,    78,     0,
02275        0,   109,     0,   109,     0,     0,     0,     0,     0,     0,
02276        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02277        0,     0,     0,   106,     0,   106,     0,     0,     0,     0,
02278        0,   106,     0,   106,     0,     0,     0,     0,     0,     0,
02279        0,    78,     0,    78,     0,     0,     0,     0,     0,    78,
02280        0,    78,  -573,     4,     0,     5,     6,     7,     8,     9,
02281        0,     0,     0,    10,    11,     0,     0,     0,    12,     0,
02282       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02283        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02284        0,    27,     0,     0,     0,     0,     0,    28,    29,    30,
02285       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02286        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02287        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02288        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02289        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02290       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02291        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02292        0,     0,     0,  -285,    61,    62,    63,     0,     0,     0,
02293        0,  -285,  -285,  -285,     0,     0,  -285,  -285,  -285,     0,
02294     -285,     0,     0,     0,     0,     0,     0,  -573,     0,  -573,
02295     -285,  -285,  -285,     0,     0,     0,     0,     0,     0,     0,
02296     -285,  -285,     0,  -285,  -285,  -285,  -285,  -285,     0,     0,
02297        0,     0,     0,     0,   308,   309,   310,   311,   312,   313,
02298      314,   315,   316,   317,   318,   319,   320,     0,     0,   321,
02299      322,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02300     -285,  -285,  -285,  -285,     0,     0,  -285,  -285,  -285,     0,
02301      724,  -285,     0,     0,     0,     0,   323,  -285,   324,   325,
02302      326,   327,   328,   329,   330,   331,   332,   333,     0,     0,
02303     -285,     0,  -105,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02304     -285,  -285,  -285,  -285,  -285,     0,     0,     0,     0,     0,
02305        0,     0,     0,   224,     0,     0,     0,     0,     0,     0,
02306     -285,  -285,  -285,  -285,  -411,     0,  -285,  -285,  -285,     0,
02307     -285,     0,  -411,  -411,  -411,     0,     0,  -411,  -411,  -411,
02308        0,  -411,     0,     0,     0,     0,     0,     0,     0,     0,
02309     -411,  -411,  -411,     0,     0,     0,     0,     0,     0,     0,
02310        0,  -411,  -411,     0,  -411,  -411,  -411,  -411,  -411,     0,
02311        0,     0,     0,     0,     0,   308,   309,   310,   311,   312,
02312      313,   314,   315,   316,   317,   318,   319,   320,     0,     0,
02313      321,   322,  -411,  -411,  -411,  -411,  -411,  -411,  -411,  -411,
02314     -411,  -411,  -411,  -411,  -411,     0,     0,  -411,  -411,  -411,
02315        0,     0,  -411,     0,     0,     0,     0,   323,  -411,   324,
02316      325,   326,   327,   328,   329,   330,   331,   332,   333,     0,
02317        0,     0,     0,     0,  -411,     0,  -411,  -411,  -411,  -411,
02318     -411,  -411,  -411,  -411,  -411,  -411,     0,     0,     0,     0,
02319        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02320     -411,  -411,  -411,  -411,  -411,  -279,   220,  -411,  -411,  -411,
02321        0,  -411,     0,  -279,  -279,  -279,     0,     0,  -279,  -279,
02322     -279,     0,  -279,     0,     0,     0,     0,     0,     0,     0,
02323        0,     0,  -279,  -279,  -279,     0,     0,     0,     0,     0,
02324        0,     0,  -279,  -279,     0,  -279,  -279,  -279,  -279,  -279,
02325        0,     0,     0,     0,     0,     0,   308,   309,   310,   311,
02326      312,   313,   314,   315,     0,   317,   318,     0,     0,     0,
02327        0,   321,   322,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02328     -279,  -279,  -279,  -279,  -279,  -279,     0,     0,  -279,  -279,
02329     -279,     0,     0,  -279,     0,     0,     0,     0,     0,  -279,
02330      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
02331        0,     0,  -279,     0,     0,  -279,  -279,  -279,  -279,  -279,
02332     -279,  -279,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,
02333        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02334        0,     0,  -279,  -279,  -279,  -279,  -573,     0,  -279,  -279,
02335     -279,     0,  -279,     0,  -573,  -573,  -573,     0,     0,  -573,
02336     -573,  -573,     0,  -573,     0,     0,     0,     0,     0,     0,
02337        0,     0,  -573,  -573,  -573,     0,     0,     0,     0,     0,
02338        0,     0,     0,  -573,  -573,     0,  -573,  -573,  -573,  -573,
02339     -573,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02340        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02341        0,     0,     0,     0,  -573,  -573,  -573,  -573,  -573,  -573,
02342     -573,  -573,  -573,  -573,  -573,  -573,  -573,     0,     0,  -573,
02343     -573,  -573,     0,     0,  -573,     0,     0,     0,     0,     0,
02344     -573,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02345        0,     0,     0,     0,     0,     0,  -573,     0,  -573,  -573,
02346     -573,  -573,  -573,  -573,  -573,  -573,  -573,  -573,     0,     0,
02347        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02348        0,     0,  -573,  -573,  -573,  -573,  -573,  -292,   220,  -573,
02349     -573,  -573,     0,  -573,     0,  -292,  -292,  -292,     0,     0,
02350     -292,  -292,  -292,     0,  -292,     0,     0,     0,     0,     0,
02351        0,     0,     0,     0,  -292,  -292,     0,     0,     0,     0,
02352        0,     0,     0,     0,  -292,  -292,     0,  -292,  -292,  -292,
02353     -292,  -292,     0,     0,     0,     0,     0,     0,     0,     0,
02354        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02355        0,     0,     0,     0,     0,  -292,  -292,  -292,  -292,  -292,
02356     -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,     0,     0,
02357     -292,  -292,  -292,     0,     0,  -292,     0,     0,     0,     0,
02358        0,  -292,     0,     0,     0,     0,     0,     0,     0,     0,
02359        0,     0,     0,     0,     0,     0,     0,  -292,     0,  -292,
02360     -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,  -292,     0,
02361        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02362        0,     0,     0,     0,  -292,  -292,  -292,  -292,  -555,   217,
02363     -292,  -292,  -292,     0,  -292,     0,  -555,  -555,  -555,     0,
02364        0,     0,  -555,  -555,     0,  -555,     0,     0,     0,     0,
02365        0,     0,     0,     0,  -555,     0,     0,     0,     0,     0,
02366        0,     0,     0,     0,     0,  -555,  -555,     0,  -555,  -555,
02367     -555,  -555,  -555,     0,     0,     0,     0,     0,     0,     0,
02368        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02369        0,     0,     0,     0,     0,     0,  -555,  -555,  -555,  -555,
02370     -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,     0,
02371        0,  -555,  -555,  -555,  -285,   665,     0,     0,     0,     0,
02372        0,     0,  -285,  -285,  -285,     0,     0,     0,  -285,  -285,
02373        0,  -285,     0,     0,     0,     0,     0,  -103,  -555,     0,
02374     -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,  -555,
02375        0,  -285,  -285,     0,  -285,  -285,  -285,  -285,  -285,     0,
02376        0,     0,     0,     0,  -555,  -555,  -555,  -555,   -94,     0,
02377        0,  -555,     0,  -555,     0,  -555,     0,     0,     0,     0,
02378        0,     0,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02379     -285,  -285,  -285,  -285,  -285,     0,     0,  -285,  -285,  -285,
02380        0,   666,     0,     0,     0,     0,     0,     0,     0,     0,
02381        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02382        0,     0,     0,  -105,  -285,     0,  -285,  -285,  -285,  -285,
02383     -285,  -285,  -285,  -285,  -285,  -285,     0,     0,     0,     0,
02384        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02385        0,  -285,  -285,  -285,   -96,     0,     0,  -285,     0,  -285,
02386      241,  -285,     5,     6,     7,     8,     9,  -573,  -573,  -573,
02387       10,    11,     0,     0,  -573,    12,     0,    13,    14,    15,
02388       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02389       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02390        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02391       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02392        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02393        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02394        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02395        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02396       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02397        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02398        0,    61,    62,    63,     0,     0,     0,     0,     0,     0,
02399        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02400        0,     0,     0,     0,  -573,   241,  -573,     5,     6,     7,
02401        8,     9,     0,     0,  -573,    10,    11,     0,  -573,  -573,
02402       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02403        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02404       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02405       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02406       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02407       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02408        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02409       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02410        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02411        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02412        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02413        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02414        0,     0,     0,     0,     0,     0,     0,     0,     0,  -573,
02415      241,  -573,     5,     6,     7,     8,     9,     0,     0,  -573,
02416       10,    11,     0,     0,  -573,    12,  -573,    13,    14,    15,
02417       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02418       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02419        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02420       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02421        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02422        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02423        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02424        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02425       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02426        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02427        0,    61,    62,    63,     0,     0,     0,     0,     0,     0,
02428        4,     0,     5,     6,     7,     8,     9,     0,     0,     0,
02429       10,    11,     0,     0,  -573,    12,  -573,    13,    14,    15,
02430       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02431       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02432        0,     0,     0,     0,    28,    29,    30,    31,    32,    33,
02433       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02434        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02435        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02436        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02437        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02438       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02439        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02440        0,    61,    62,    63,     0,     0,     0,     0,     0,     0,
02441        0,     0,     0,     0,     0,     0,  -573,     0,     0,     0,
02442        0,     0,     0,     0,  -573,   241,  -573,     5,     6,     7,
02443        8,     9,     0,     0,  -573,    10,    11,     0,     0,  -573,
02444       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02445        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02446       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02447       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02448       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02449       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02450        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02451       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02452        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02453        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02454        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02455        0,     0,     0,     0,     0,   241,     0,     5,     6,     7,
02456        8,     9,     0,  -573,  -573,    10,    11,     0,     0,  -573,
02457       12,  -573,    13,    14,    15,    16,    17,    18,    19,     0,
02458        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02459       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02460       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02461       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02462       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02463        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02464       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02465        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02466        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02467        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02468        0,     0,     0,     0,     0,   241,     0,     5,     6,     7,
02469        8,     9,     0,     0,     0,    10,    11,     0,     0,  -573,
02470       12,  -573,    13,    14,    15,    16,    17,    18,    19,     0,
02471        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02472       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02473       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02474       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02475       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02476        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02477       48,     0,     0,   242,    50,     0,    51,    52,     0,    53,
02478        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02479        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02480        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02481        0,     0,     0,     0,     0,   241,     0,     5,     6,     7,
02482        8,     9,     0,     0,     0,    10,    11,  -573,     0,  -573,
02483       12,  -573,    13,    14,    15,    16,    17,    18,    19,     0,
02484        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02485       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02486       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02487       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02488       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02489        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02490       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02491        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02492        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02493        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02494        0,     0,     0,     0,     0,   241,     0,     5,     6,     7,
02495        8,     9,     0,     0,     0,    10,    11,  -573,     0,  -573,
02496       12,  -573,    13,    14,    15,    16,    17,    18,    19,     0,
02497        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02498       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02499       29,     0,    31,    32,    33,    34,    35,    36,    37,    38,
02500       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02501       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02502        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02503       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02504        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02505        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02506        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02507        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02508        0,  -573,     0,     0,     0,     0,     0,     0,     0,  -573,
02509      241,  -573,     5,     6,     7,     8,     9,     0,     0,  -573,
02510       10,    11,     0,     0,     0,    12,     0,    13,    14,    15,
02511       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02512       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02513        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02514       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02515        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02516        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02517        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02518        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02519       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02520        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02521        0,    61,    62,    63,     0,     0,     0,     0,     0,     0,
02522        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02523       10,    11,     0,     0,  -573,    12,  -573,    13,    14,    15,
02524       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02525       21,    22,    23,    24,    25,    26,     0,     0,   194,     0,
02526        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02527       34,    35,    36,    37,    38,    39,    40,   195,    41,    42,
02528        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02529        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02530        0,     0,     0,     0,     0,   196,     0,     0,   197,    50,
02531        0,    51,    52,     0,   198,   199,    54,    55,    56,    57,
02532       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02533        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02534       11,    61,   200,    63,    12,     0,    13,    14,    15,    16,
02535       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02536       22,    23,    24,    25,    26,     0,   224,    27,     0,     0,
02537        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02538       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02539       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02540        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02541        0,     0,     0,     0,   196,     0,     0,   197,    50,     0,
02542       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02543       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02544        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02545       61,    62,    63,     0,     0,     0,     0,     0,     0,     0,
02546        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02547       11,     0,     0,   288,    12,   289,    13,    14,    15,    16,
02548       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02549       22,    23,    24,    25,    26,     0,     0,    27,     0,     0,
02550        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02551       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02552       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02553        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02554        0,     0,     0,     0,   196,     0,     0,   197,    50,     0,
02555       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02556       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02557        5,     6,     7,     8,     9,     0,     0,     0,    10,    11,
02558       61,    62,    63,    12,     0,    13,    14,    15,    16,    17,
02559       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02560       23,    24,    25,    26,     0,   224,    27,     0,     0,     0,
02561        0,     0,    28,    29,    30,    31,    32,    33,    34,    35,
02562       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02563       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02564        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02565        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02566       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02567       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02568        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02569       62,    63,     0,     0,     0,     0,     0,     0,     5,     6,
02570        7,     8,     9,     0,     0,     0,    10,    11,     0,     0,
02571        0,    12,   474,    13,    14,    15,    16,    17,    18,    19,
02572        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02573       25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
02574       28,    29,     0,    31,    32,    33,    34,    35,    36,    37,
02575       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02576        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02577        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02578        0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
02579       53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02580        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02581        0,     0,     0,     0,     0,     0,     0,    61,    62,    63,
02582        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02583        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02584      474,   113,   114,   115,   116,   117,   118,   119,   120,   121,
02585      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
02586      132,   133,   134,   135,   136,     0,     0,     0,   137,   138,
02587      139,   365,   366,   367,   368,   144,   145,   146,     0,     0,
02588        0,     0,     0,   147,   148,   149,   150,   369,   370,   371,
02589      372,   155,    37,    38,   373,    40,     0,     0,     0,     0,
02590        0,     0,     0,     0,   157,   158,   159,   160,   161,   162,
02591      163,   164,   165,     0,     0,   166,   167,     0,     0,   168,
02592      169,   170,   171,     0,     0,     0,     0,     0,     0,     0,
02593        0,     0,     0,   172,     0,     0,     0,     0,     0,     0,
02594        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02595      173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
02596        0,   183,   184,     0,     0,     0,     0,     0,  -548,  -548,
02597     -548,     0,  -548,     0,     0,     0,  -548,  -548,     0,   185,
02598      374,  -548,     0,  -548,  -548,  -548,  -548,  -548,  -548,  -548,
02599        0,  -548,     0,     0,     0,  -548,  -548,  -548,  -548,  -548,
02600     -548,  -548,     0,     0,  -548,     0,     0,     0,     0,     0,
02601        0,  -548,     0,     0,  -548,  -548,  -548,  -548,  -548,  -548,
02602     -548,  -548,  -548,  -548,  -548,  -548,     0,  -548,  -548,  -548,
02603        0,  -548,  -548,     0,     0,     0,     0,     0,     0,     0,
02604        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02605        0,  -548,     0,     0,  -548,  -548,     0,  -548,  -548,     0,
02606     -548,  -548,  -548,  -548,  -548,  -548,  -548,  -548,  -548,     0,
02607        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02608        0,     0,     0,     0,     0,     0,     0,  -548,  -548,  -548,
02609        0,     0,     0,     0,     0,  -549,  -549,  -549,     0,  -549,
02610        0,  -548,     0,  -549,  -549,     0,     0,  -548,  -549,     0,
02611     -549,  -549,  -549,  -549,  -549,  -549,  -549,     0,  -549,     0,
02612        0,     0,  -549,  -549,  -549,  -549,  -549,  -549,  -549,     0,
02613        0,  -549,     0,     0,     0,     0,     0,     0,  -549,     0,
02614        0,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,  -549,
02615     -549,  -549,  -549,     0,  -549,  -549,  -549,     0,  -549,  -549,
02616        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02617        0,     0,     0,     0,     0,     0,     0,     0,  -549,     0,
02618        0,  -549,  -549,     0,  -549,  -549,     0,  -549,  -549,  -549,
02619     -549,  -549,  -549,  -549,  -549,  -549,     0,     0,     0,     0,
02620        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02621        0,     0,     0,     0,  -549,  -549,  -549,     0,     0,     0,
02622        0,     0,  -551,  -551,  -551,     0,  -551,     0,  -549,     0,
02623     -551,  -551,     0,     0,  -549,  -551,     0,  -551,  -551,  -551,
02624     -551,  -551,  -551,  -551,     0,     0,     0,     0,     0,  -551,
02625     -551,  -551,  -551,  -551,  -551,  -551,     0,     0,  -551,     0,
02626        0,     0,     0,     0,     0,  -551,     0,     0,  -551,  -551,
02627     -551,  -551,  -551,  -551,  -551,  -551,  -551,  -551,  -551,  -551,
02628        0,  -551,  -551,  -551,     0,  -551,  -551,     0,     0,     0,
02629        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02630        0,     0,     0,     0,     0,  -551,   723,     0,  -551,  -551,
02631        0,  -551,  -551,     0,  -551,  -551,  -551,  -551,  -551,  -551,
02632     -551,  -551,  -551,     0,     0,     0,     0,     0,  -103,     0,
02633        0,     0,     0,     0,     0,     0,  -553,  -553,  -553,     0,
02634     -553,  -551,  -551,  -551,  -553,  -553,     0,     0,     0,  -553,
02635        0,  -553,  -553,  -553,  -553,  -553,  -553,  -553,     0,     0,
02636        0,  -551,     0,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
02637        0,     0,  -553,     0,     0,     0,     0,     0,     0,  -553,
02638        0,     0,  -553,  -553,  -553,  -553,  -553,  -553,  -553,  -553,
02639     -553,  -553,  -553,  -553,     0,  -553,  -553,  -553,     0,  -553,
02640     -553,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02641        0,     0,     0,     0,     0,     0,     0,     0,     0,  -553,
02642        0,     0,  -553,  -553,     0,  -553,  -553,     0,  -553,  -553,
02643     -553,  -553,  -553,  -553,  -553,  -553,  -553,     0,     0,     0,
02644        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02645     -554,  -554,  -554,     0,  -554,  -553,  -553,  -553,  -554,  -554,
02646        0,     0,     0,  -554,     0,  -554,  -554,  -554,  -554,  -554,
02647     -554,  -554,     0,     0,     0,  -553,     0,  -554,  -554,  -554,
02648     -554,  -554,  -554,  -554,     0,     0,  -554,     0,     0,     0,
02649        0,     0,     0,  -554,     0,     0,  -554,  -554,  -554,  -554,
02650     -554,  -554,  -554,  -554,  -554,  -554,  -554,  -554,     0,  -554,
02651     -554,  -554,     0,  -554,  -554,     0,     0,     0,     0,     0,
02652        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02653        0,     0,     0,  -554,     0,     0,  -554,  -554,     0,  -554,
02654     -554,     0,  -554,  -554,  -554,  -554,  -554,  -554,  -554,  -554,
02655     -554,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02656        0,     0,     0,     0,     0,     0,     0,     0,     0,  -554,
02657     -554,  -554,     0,     0,     0,     0,     0,     0,     0,     0,
02658        0,     0,     0,     0,     0,     0,     0,     0,     0,  -554,
02659      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
02660      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
02661      133,   134,   135,   136,     0,     0,     0,   137,   138,   139,
02662      140,   141,   142,   143,   144,   145,   146,     0,     0,     0,
02663        0,     0,   147,   148,   149,   150,   151,   152,   153,   154,
02664      155,   270,   271,   156,   272,     0,     0,     0,     0,     0,
02665        0,     0,     0,   157,   158,   159,   160,   161,   162,   163,
02666      164,   165,     0,     0,   166,   167,     0,     0,   168,   169,
02667      170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
02668        0,     0,   172,     0,     0,     0,     0,     0,     0,     0,
02669        0,     0,     0,     0,     0,     0,     0,     0,     0,   173,
02670      174,   175,   176,   177,   178,   179,   180,   181,   182,     0,
02671      183,   184,     0,     0,     0,     0,     0,     0,     0,     0,
02672        0,     0,     0,     0,     0,     0,     0,     0,   185,   113,
02673      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
02674      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02675      134,   135,   136,     0,     0,     0,   137,   138,   139,   140,
02676      141,   142,   143,   144,   145,   146,     0,     0,     0,     0,
02677        0,   147,   148,   149,   150,   151,   152,   153,   154,   155,
02678      226,     0,   156,     0,     0,     0,     0,     0,     0,     0,
02679        0,     0,   157,   158,   159,   160,   161,   162,   163,   164,
02680      165,     0,     0,   166,   167,     0,     0,   168,   169,   170,
02681      171,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02682        0,   172,     0,     0,    55,     0,     0,     0,     0,     0,
02683        0,     0,     0,     0,     0,     0,     0,     0,   173,   174,
02684      175,   176,   177,   178,   179,   180,   181,   182,     0,   183,
02685      184,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02686        0,     0,     0,     0,     0,     0,     0,   185,   113,   114,
02687      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
02688      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
02689      135,   136,     0,     0,     0,   137,   138,   139,   140,   141,
02690      142,   143,   144,   145,   146,     0,     0,     0,     0,     0,
02691      147,   148,   149,   150,   151,   152,   153,   154,   155,     0,
02692        0,   156,     0,     0,     0,     0,     0,     0,     0,     0,
02693        0,   157,   158,   159,   160,   161,   162,   163,   164,   165,
02694        0,     0,   166,   167,     0,     0,   168,   169,   170,   171,
02695        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02696      172,     0,     0,    55,     0,     0,     0,     0,     0,     0,
02697        0,     0,     0,     0,     0,     0,     0,   173,   174,   175,
02698      176,   177,   178,   179,   180,   181,   182,     0,   183,   184,
02699        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02700        0,     0,     0,     0,     0,     0,   185,   113,   114,   115,
02701      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
02702      126,   127,   128,   129,   130,   131,   132,   133,   134,   135,
02703      136,     0,     0,     0,   137,   138,   139,   140,   141,   142,
02704      143,   144,   145,   146,     0,     0,     0,     0,     0,   147,
02705      148,   149,   150,   151,   152,   153,   154,   155,     0,     0,
02706      156,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02707      157,   158,   159,   160,   161,   162,   163,   164,   165,     0,
02708        0,   166,   167,     0,     0,   168,   169,   170,   171,     0,
02709        0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
02710        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02711        0,     0,     0,     0,     0,     0,   173,   174,   175,   176,
02712      177,   178,   179,   180,   181,   182,     0,   183,   184,     0,
02713        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02714       11,     0,     0,     0,    12,   185,    13,    14,    15,   231,
02715      232,    18,    19,     0,     0,     0,     0,     0,   233,   234,
02716      235,    23,    24,    25,    26,     0,     0,   194,     0,     0,
02717        0,     0,     0,     0,   258,     0,     0,    32,    33,    34,
02718       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02719       43,    44,    45,     0,     0,     0,     0,     0,     0,     0,
02720        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02721        0,     0,     0,     0,   259,     0,     0,   197,    50,     0,
02722       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02723       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02724        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02725      260,    10,    11,     0,     0,     0,    12,     0,    13,    14,
02726       15,   231,   232,    18,    19,     0,     0,     0,   261,     0,
02727      233,   234,   235,    23,    24,    25,    26,     0,     0,   194,
02728        0,     0,     0,     0,     0,     0,   258,     0,     0,    32,
02729       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02730       42,     0,    43,    44,    45,     0,     0,     0,     0,     0,
02731        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02732        0,     0,     0,     0,     0,     0,   259,     0,     0,   197,
02733       50,     0,    51,    52,     0,     0,     0,    54,    55,    56,
02734       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02735        0,     0,     0,     0,     0,     5,     6,     7,     8,     9,
02736        0,     0,   260,    10,    11,     0,     0,     0,    12,     0,
02737       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02738      490,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02739        0,    27,     0,     0,     0,     0,     0,    28,    29,    30,
02740       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02741        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02742        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02743        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02744        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02745       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02746        0,     0,     0,     0,     5,     6,     7,     8,     9,     0,
02747        0,     0,    10,    11,    61,    62,    63,    12,     0,    13,
02748       14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
02749        0,    20,    21,    22,    23,    24,    25,    26,     0,     0,
02750       27,     0,     0,     0,     0,     0,    28,    29,     0,    31,
02751       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02752       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02753        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02754        0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
02755       49,    50,     0,    51,    52,     0,    53,     0,    54,    55,
02756       56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
02757        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02758        0,    10,    11,    61,    62,    63,    12,     0,    13,    14,
02759       15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
02760       20,    21,    22,    23,    24,    25,    26,     0,     0,   194,
02761        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02762       33,    34,    35,    36,    37,    38,    39,    40,   195,    41,
02763       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02764        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02765        0,     0,     0,     0,     0,     0,   196,     0,     0,   197,
02766       50,     0,    51,    52,     0,   198,   199,    54,    55,    56,
02767       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02768        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02769       10,    11,    61,   200,    63,    12,     0,    13,    14,    15,
02770      231,   232,    18,    19,     0,     0,     0,     0,     0,   233,
02771      234,   235,    23,    24,    25,    26,     0,     0,   194,     0,
02772        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02773       34,    35,    36,    37,    38,    39,    40,   195,    41,    42,
02774        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02775        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02776        0,     0,     0,     0,     0,   196,     0,     0,   197,    50,
02777        0,    51,    52,     0,   587,   199,    54,    55,    56,    57,
02778       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02779        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02780       11,    61,   200,    63,    12,     0,    13,    14,    15,   231,
02781      232,    18,    19,     0,     0,     0,     0,     0,   233,   234,
02782      235,    23,    24,    25,    26,     0,     0,   194,     0,     0,
02783        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02784       35,    36,    37,    38,    39,    40,   195,    41,    42,     0,
02785       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02786        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02787        0,     0,     0,     0,   196,     0,     0,   197,    50,     0,
02788       51,    52,     0,   198,     0,    54,    55,    56,    57,    58,
02789       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02790        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02791       61,   200,    63,    12,     0,    13,    14,    15,   231,   232,
02792       18,    19,     0,     0,     0,     0,     0,   233,   234,   235,
02793       23,    24,    25,    26,     0,     0,   194,     0,     0,     0,
02794        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02795       36,    37,    38,    39,    40,   195,    41,    42,     0,    43,
02796       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02797        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02798        0,     0,     0,   196,     0,     0,   197,    50,     0,    51,
02799       52,     0,     0,   199,    54,    55,    56,    57,    58,    59,
02800       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02801        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02802      200,    63,    12,     0,    13,    14,    15,   231,   232,    18,
02803       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02804       24,    25,    26,     0,     0,   194,     0,     0,     0,     0,
02805        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02806       37,    38,    39,    40,   195,    41,    42,     0,    43,    44,
02807       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02808        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02809        0,     0,   196,     0,     0,   197,    50,     0,    51,    52,
02810        0,   587,     0,    54,    55,    56,    57,    58,    59,    60,
02811        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02812        7,     0,     9,     0,     0,     0,    10,    11,    61,   200,
02813       63,    12,     0,    13,    14,    15,   231,   232,    18,    19,
02814        0,     0,     0,     0,     0,   233,   234,   235,    23,    24,
02815       25,    26,     0,     0,   194,     0,     0,     0,     0,     0,
02816        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02817       38,    39,    40,   195,    41,    42,     0,    43,    44,    45,
02818        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02819        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02820        0,   196,     0,     0,   197,    50,     0,    51,    52,     0,
02821        0,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02822        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02823        0,     9,     0,     0,     0,    10,    11,    61,   200,    63,
02824       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02825        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02826       26,     0,     0,   194,     0,     0,     0,     0,     0,     0,
02827       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02828       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02829       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02830        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02831      196,     0,     0,   197,    50,     0,    51,    52,     0,   484,
02832        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02833        0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02834        9,     0,     0,     0,    10,    11,    61,   200,    63,    12,
02835        0,    13,    14,    15,   231,   232,    18,    19,     0,     0,
02836        0,     0,     0,   233,   234,   235,    23,    24,    25,    26,
02837        0,     0,   194,     0,     0,     0,     0,     0,     0,    29,
02838        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02839       40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
02840       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02841        0,     0,     0,     0,     0,     0,     0,     0,     0,   196,
02842        0,     0,   197,    50,     0,    51,    52,     0,   198,     0,
02843       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02844        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02845        0,     0,     0,    10,    11,    61,   200,    63,    12,     0,
02846       13,    14,    15,   231,   232,    18,    19,     0,     0,     0,
02847        0,     0,   233,   234,   235,    23,    24,    25,    26,     0,
02848        0,   194,     0,     0,     0,     0,     0,     0,    29,     0,
02849        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02850        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02851        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02852        0,     0,     0,     0,     0,     0,     0,     0,   196,     0,
02853        0,   197,    50,     0,    51,    52,     0,   772,     0,    54,
02854       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02855        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02856        0,     0,    10,    11,    61,   200,    63,    12,     0,    13,
02857       14,    15,   231,   232,    18,    19,     0,     0,     0,     0,
02858        0,   233,   234,   235,    23,    24,    25,    26,     0,     0,
02859      194,     0,     0,     0,     0,     0,     0,    29,     0,     0,
02860       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02861       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02862        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02863        0,     0,     0,     0,     0,     0,     0,   196,     0,     0,
02864      197,    50,     0,    51,    52,     0,   484,     0,    54,    55,
02865       56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
02866        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02867        0,    10,    11,    61,   200,    63,    12,     0,    13,    14,
02868       15,   231,   232,    18,    19,     0,     0,     0,     0,     0,
02869      233,   234,   235,    23,    24,    25,    26,     0,     0,   194,
02870        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02871       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02872       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02873        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02874        0,     0,     0,     0,     0,     0,   196,     0,     0,   197,
02875       50,     0,    51,    52,     0,   587,     0,    54,    55,    56,
02876       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02877        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02878       10,    11,    61,   200,    63,    12,     0,    13,    14,    15,
02879      231,   232,    18,    19,     0,     0,     0,     0,     0,   233,
02880      234,   235,    23,    24,    25,    26,     0,     0,   194,     0,
02881        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02882       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02883        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02884        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02885        0,     0,     0,     0,     0,   196,     0,     0,   197,    50,
02886        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02887       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02888        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02889       11,    61,   200,    63,    12,     0,    13,    14,    15,    16,
02890       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02891       22,    23,    24,    25,    26,     0,     0,    27,     0,     0,
02892        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02893       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02894       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02895        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02896        0,     0,     0,     0,   196,     0,     0,   197,    50,     0,
02897       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02898       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02899        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02900       61,    62,    63,    12,     0,    13,    14,    15,    16,    17,
02901       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02902       23,    24,    25,    26,     0,     0,   194,     0,     0,     0,
02903        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02904       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02905       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02906        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02907        0,     0,     0,   196,     0,     0,   197,    50,     0,    51,
02908       52,     0,     0,     0,    54,    55,    56,    57,    58,    59,
02909       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02910        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02911      200,    63,    12,     0,    13,    14,    15,   231,   232,    18,
02912       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02913       24,    25,    26,     0,     0,   194,     0,     0,     0,     0,
02914        0,     0,   258,     0,     0,    32,    33,    34,    35,    36,
02915       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02916       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02917        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02918        0,     0,   259,     0,     0,   304,    50,     0,    51,    52,
02919        0,   305,     0,    54,    55,    56,    57,    58,    59,    60,
02920        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02921        0,     0,    10,    11,     0,     0,     0,    12,   260,    13,
02922       14,    15,   231,   232,    18,    19,     0,     0,     0,     0,
02923        0,   233,   234,   235,    23,    24,    25,    26,     0,     0,
02924      194,     0,     0,     0,     0,     0,     0,   258,     0,     0,
02925       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02926       41,    42,     0,    43,    44,    45,     0,     0,     0,     0,
02927        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02928        0,     0,     0,     0,     0,     0,     0,   346,     0,     0,
02929       49,    50,     0,    51,    52,     0,    53,     0,    54,    55,
02930       56,    57,    58,    59,    60,     0,     0,     0,     0,     5,
02931        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02932        0,     0,    12,   260,    13,    14,    15,   231,   232,    18,
02933       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02934       24,    25,    26,     0,     0,   194,     0,     0,     0,     0,
02935        0,     0,   258,     0,     0,    32,    33,    34,   354,    36,
02936       37,    38,   355,    40,     0,    41,    42,     0,    43,    44,
02937       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02938        0,     0,     0,     0,     0,     0,     0,     0,     0,   356,
02939        0,     0,   357,     0,     0,   197,    50,     0,    51,    52,
02940        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02941        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02942        0,     0,    10,    11,     0,     0,     0,    12,   260,    13,
02943       14,    15,   231,   232,    18,    19,     0,     0,     0,     0,
02944        0,   233,   234,   235,    23,    24,    25,    26,     0,     0,
02945      194,     0,     0,     0,     0,     0,     0,   258,     0,     0,
02946       32,    33,    34,   354,    36,    37,    38,   355,    40,     0,
02947       41,    42,     0,    43,    44,    45,     0,     0,     0,     0,
02948        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02949        0,     0,     0,     0,     0,     0,     0,   357,     0,     0,
02950      197,    50,     0,    51,    52,     0,     0,     0,    54,    55,
02951       56,    57,    58,    59,    60,     0,     0,     0,     0,     5,
02952        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02953        0,     0,    12,   260,    13,    14,    15,   231,   232,    18,
02954       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02955       24,    25,    26,     0,     0,   194,     0,     0,     0,     0,
02956        0,     0,   258,     0,     0,    32,    33,    34,    35,    36,
02957       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02958       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02959        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02960        0,     0,   259,     0,     0,   304,    50,     0,    51,    52,
02961        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02962        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02963        0,     0,    10,    11,     0,     0,     0,    12,   260,    13,
02964       14,    15,   231,   232,    18,    19,     0,     0,     0,     0,
02965        0,   233,   234,   235,    23,    24,    25,    26,     0,     0,
02966      194,     0,     0,     0,     0,     0,     0,   258,     0,     0,
02967       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02968       41,    42,     0,    43,    44,    45,     0,     0,     0,     0,
02969        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02970        0,     0,     0,     0,     0,     0,     0,   902,     0,     0,
02971      197,    50,     0,    51,    52,     0,     0,     0,    54,    55,
02972       56,    57,    58,    59,    60,     0,     0,     0,     0,     5,
02973        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02974        0,     0,    12,   260,    13,    14,    15,   231,   232,    18,
02975       19,     0,     0,     0,     0,     0,   233,   234,   235,    23,
02976       24,    25,    26,     0,     0,   194,     0,   663,     0,     0,
02977        0,     0,   258,     0,     0,    32,    33,    34,    35,    36,
02978       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02979       45,   308,   309,   310,   311,   312,   313,   314,   315,   316,
02980      317,   318,   319,   320,     0,     0,   321,   322,     0,     0,
02981        0,     0,   912,     0,     0,   197,    50,     0,    51,    52,
02982        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02983        0,     0,     0,   323,     0,   324,   325,   326,   327,   328,
02984      329,   330,   331,   332,   333,     0,     0,     0,   260,     0,
02985      525,   526,     0,     0,   527,     0,     0,     0,     0,     0,
02986        0,     0,     0,  -241,   157,   158,   159,   160,   161,   162,
02987      163,   164,   165,     0,     0,   166,   167,     0,     0,   168,
02988      169,   170,   171,     0,     0,     0,     0,     0,     0,     0,
02989        0,     0,     0,   172,     0,     0,     0,     0,     0,     0,
02990        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02991      173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
02992        0,   183,   184,     0,     0,     0,     0,   533,   534,     0,
02993        0,   535,     0,     0,     0,     0,     0,     0,     0,   185,
02994      220,   157,   158,   159,   160,   161,   162,   163,   164,   165,
02995        0,     0,   166,   167,     0,     0,   168,   169,   170,   171,
02996        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02997      172,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02998        0,     0,     0,     0,     0,     0,     0,   173,   174,   175,
02999      176,   177,   178,   179,   180,   181,   182,     0,   183,   184,
03000        0,     0,     0,     0,   591,   526,     0,     0,   592,     0,
03001        0,     0,     0,     0,     0,     0,   185,   220,   157,   158,
03002      159,   160,   161,   162,   163,   164,   165,     0,     0,   166,
03003      167,     0,     0,   168,   169,   170,   171,     0,     0,     0,
03004        0,     0,     0,     0,     0,     0,     0,   172,     0,     0,
03005        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03006        0,     0,     0,     0,   173,   174,   175,   176,   177,   178,
03007      179,   180,   181,   182,     0,   183,   184,     0,     0,     0,
03008        0,   594,   534,     0,     0,   595,     0,     0,     0,     0,
03009        0,     0,     0,   185,   220,   157,   158,   159,   160,   161,
03010      162,   163,   164,   165,     0,     0,   166,   167,     0,     0,
03011      168,   169,   170,   171,     0,     0,     0,     0,     0,     0,
03012        0,     0,     0,     0,   172,     0,     0,     0,     0,     0,
03013        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03014        0,   173,   174,   175,   176,   177,   178,   179,   180,   181,
03015      182,     0,   183,   184,     0,     0,     0,     0,   617,   526,
03016        0,     0,   618,     0,     0,     0,     0,     0,     0,     0,
03017      185,   220,   157,   158,   159,   160,   161,   162,   163,   164,
03018      165,     0,     0,   166,   167,     0,     0,   168,   169,   170,
03019      171,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03020        0,   172,     0,     0,     0,     0,     0,     0,     0,     0,
03021        0,     0,     0,     0,     0,     0,     0,     0,   173,   174,
03022      175,   176,   177,   178,   179,   180,   181,   182,     0,   183,
03023      184,     0,     0,     0,     0,   620,   534,     0,     0,   621,
03024        0,     0,     0,     0,     0,     0,     0,   185,   220,   157,
03025      158,   159,   160,   161,   162,   163,   164,   165,     0,     0,
03026      166,   167,     0,     0,   168,   169,   170,   171,     0,     0,
03027        0,     0,     0,     0,     0,     0,     0,     0,   172,     0,
03028        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03029        0,     0,     0,     0,     0,   173,   174,   175,   176,   177,
03030      178,   179,   180,   181,   182,     0,   183,   184,     0,     0,
03031        0,     0,   692,   526,     0,     0,   693,     0,     0,     0,
03032        0,     0,     0,     0,   185,   220,   157,   158,   159,   160,
03033      161,   162,   163,   164,   165,     0,     0,   166,   167,     0,
03034        0,   168,   169,   170,   171,     0,     0,     0,     0,     0,
03035        0,     0,     0,     0,     0,   172,     0,     0,     0,     0,
03036        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03037        0,     0,   173,   174,   175,   176,   177,   178,   179,   180,
03038      181,   182,     0,   183,   184,     0,     0,     0,     0,   695,
03039      534,     0,     0,   696,     0,     0,     0,     0,     0,     0,
03040        0,   185,   220,   157,   158,   159,   160,   161,   162,   163,
03041      164,   165,     0,     0,   166,   167,     0,     0,   168,   169,
03042      170,   171,     0,     0,     0,     0,     0,     0,     0,     0,
03043        0,     0,   172,     0,     0,     0,     0,     0,     0,     0,
03044        0,     0,     0,     0,     0,     0,     0,     0,     0,   173,
03045      174,   175,   176,   177,   178,   179,   180,   181,   182,     0,
03046      183,   184,     0,     0,     0,     0,   702,   526,     0,     0,
03047      703,     0,     0,     0,     0,     0,     0,     0,   185,   220,
03048      157,   158,   159,   160,   161,   162,   163,   164,   165,     0,
03049        0,   166,   167,     0,     0,   168,   169,   170,   171,     0,
03050        0,     0,     0,     0,     0,     0,     0,     0,     0,   172,
03051        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03052        0,     0,     0,     0,     0,     0,   173,   174,   175,   176,
03053      177,   178,   179,   180,   181,   182,     0,   183,   184,     0,
03054        0,     0,     0,   572,   534,     0,     0,   573,     0,     0,
03055        0,     0,     0,     0,     0,   185,   220,   157,   158,   159,
03056      160,   161,   162,   163,   164,   165,     0,     0,   166,   167,
03057        0,     0,   168,   169,   170,   171,     0,     0,     0,     0,
03058        0,     0,     0,     0,     0,     0,   172,     0,     0,     0,
03059        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03060        0,     0,     0,   173,   174,   175,   176,   177,   178,   179,
03061      180,   181,   182,     0,   183,   184,     0,     0,     0,     0,
03062      965,   526,     0,     0,   966,     0,     0,     0,     0,     0,
03063        0,     0,   185,   220,   157,   158,   159,   160,   161,   162,
03064      163,   164,   165,     0,     0,   166,   167,     0,     0,   168,
03065      169,   170,   171,     0,     0,     0,     0,     0,     0,     0,
03066        0,     0,     0,   172,     0,     0,     0,     0,     0,     0,
03067        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03068      173,   174,   175,   176,   177,   178,   179,   180,   181,   182,
03069        0,   183,   184,     0,     0,     0,     0,   971,   526,     0,
03070        0,   972,     0,     0,     0,     0,     0,     0,     0,   185,
03071      220,   157,   158,   159,   160,   161,   162,   163,   164,   165,
03072        0,     0,   166,   167,     0,     0,   168,   169,   170,   171,
03073        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03074      172,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03075        0,     0,     0,     0,     0,     0,     0,   173,   174,   175,
03076      176,   177,   178,   179,   180,   181,   182,     0,   183,   184,
03077        0,     0,     0,     0,   974,   534,     0,     0,   975,     0,
03078        0,     0,     0,     0,     0,     0,   185,   220,   157,   158,
03079      159,   160,   161,   162,   163,   164,   165,     0,     0,   166,
03080      167,     0,     0,   168,   169,   170,   171,     0,     0,     0,
03081        0,     0,     0,     0,     0,     0,     0,   172,     0,     0,
03082        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03083        0,     0,     0,     0,   173,   174,   175,   176,   177,   178,
03084      179,   180,   181,   182,     0,   183,   184,     0,     0,     0,
03085        0,   572,   534,     0,     0,   573,     0,     0,     0,     0,
03086        0,     0,     0,   185,   220,   157,   158,   159,   160,   161,
03087      162,   163,   164,   165,     0,     0,   166,   167,     0,     0,
03088      168,   169,   170,   171,     0,     0,     0,     0,     0,     0,
03089        0,     0,     0,     0,   172,     0,     0,     0,     0,     0,
03090        0,     0,   718,     0,     0,     0,     0,     0,     0,     0,
03091        0,   173,   174,   175,   176,   177,   178,   179,   180,   181,
03092      182,   663,   183,   184,     0,     0,   308,   309,   310,   311,
03093      312,   313,   314,   315,   316,   317,   318,   319,   320,     0,
03094      185,   321,   322,     0,     0,   308,   309,   310,   311,   312,
03095      313,   314,   315,   316,   317,   318,   319,   320,     0,     0,
03096      321,   322,     0,     0,     0,     0,     0,     0,   323,     0,
03097      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
03098        0,     0,     0,     0,     0,     0,     0,   323,     0,   324,
03099      325,   326,   327,   328,   329,   330,   331,   332,   333
03100 };
03101 
03102 static const yytype_int16 yycheck[] =
03103 {
03104        2,    55,   340,    28,     2,   454,     4,    52,   593,    16,
03105       17,   335,   307,    20,   307,     8,   547,   213,    16,    17,
03106        8,   566,    20,    27,    53,    29,    84,    22,     8,    87,
03107      546,    87,     4,    22,   619,    28,    49,    91,   252,    76,
03108       28,     2,   256,     4,   404,   357,     1,    65,    28,    51,
03109       52,    49,    50,   749,   450,    53,   746,    13,   334,   627,
03110      336,    53,   680,    25,    62,   762,   684,   454,    13,    16,
03111       17,    65,    26,    20,   396,    55,   400,    26,    76,    25,
03112      440,     0,   404,    27,    76,    83,    84,   576,   577,    87,
03113       88,    89,    90,    87,   490,    29,    88,    89,    90,    13,
03114      242,    25,   378,   379,    51,   851,   828,    85,    76,   694,
03115      136,    91,    87,    16,    17,   110,   147,    20,    85,   568,
03116      705,   110,   146,   399,    25,   401,    85,   653,   452,    61,
03117       87,    16,    17,    62,   109,    20,   276,    25,   278,    56,
03118      280,    13,   742,    37,    38,    87,   114,   109,    51,    52,
03119      195,   427,   109,   198,   199,   826,   701,    28,   113,   849,
03120      138,   139,   304,   763,   709,   140,    25,   109,   736,   737,
03121       25,    13,   139,   107,   106,   146,    13,   453,   140,   138,
03122      139,   143,   136,   632,   140,   147,   109,   136,   244,   145,
03123      145,   147,   147,   142,   140,   941,   892,   142,   140,   197,
03124      145,   145,   147,   147,   653,   207,   896,   904,   930,   140,
03125      217,   213,   219,   220,    25,   886,   140,   413,   220,   217,
03126      746,   219,   220,   749,   261,   223,   244,   225,   552,   242,
03127      719,   145,   230,   147,    50,   293,   294,   295,   296,   140,
03128      564,   601,   142,   241,   242,   632,   235,   147,   109,   238,
03129      244,   563,   140,   147,   258,   873,    99,   302,   826,   708,
03130      828,   932,   307,   261,    25,   661,    87,    83,    84,   261,
03131      217,    87,   219,   145,   140,   147,   305,   553,   600,   601,
03132      241,   140,    25,   341,   342,   140,    25,   343,   959,   565,
03133      806,   304,    85,    87,   292,   293,   294,   295,   296,   297,
03134      298,   299,    85,   145,   302,   147,   304,   305,   145,   307,
03135      147,    59,    60,   305,   217,   109,   219,    26,   886,   887,
03136      292,   708,   109,   849,   142,   851,    49,   467,   335,   140,
03137      875,   292,   217,   335,   219,    56,   297,   335,   145,   337,
03138      147,    87,   873,   341,   342,   138,   139,   336,    88,   343,
03139      395,   396,   690,   140,   334,   302,   139,    26,   356,   404,
03140      307,   140,   930,   109,   932,   359,   892,    85,   147,   662,
03141      109,    85,   109,   302,    61,    26,    85,   140,   307,   140,
03142       15,   142,    17,   928,   679,    87,   384,   385,   973,    85,
03143       85,   959,   437,   400,   590,   440,   421,   140,   400,   142,
03144      614,   140,   400,    85,   143,   140,    85,   223,   147,   225,
03145      412,   413,   401,   450,   142,   941,    85,   104,   105,   399,
03146      138,   139,   424,   136,   142,   139,   424,   136,   421,   138,
03147      139,   880,    85,   421,    85,   433,    85,   142,   427,   484,
03148      140,   421,   138,   139,   139,   452,   426,   147,    85,   142,
03149      452,    85,   450,   490,   452,   384,   385,   139,   450,   146,
03150      139,    85,   822,   424,   453,    68,    85,   136,    85,   138,
03151      139,   451,   433,   142,   197,    87,    85,   293,   294,   295,
03152      296,   483,   298,   299,    68,   136,   139,   138,   139,   138,
03153      139,   142,   490,   396,    85,    37,    38,   109,   490,   668,
03154      822,   223,   139,   548,   138,   139,   675,   230,   109,    52,
03155      514,    54,    55,    56,    57,   139,   119,   120,   121,   242,
03156      139,   138,   139,   861,   246,   341,   342,   143,   532,   867,
03157      139,    26,   728,    52,   437,   530,   538,    56,   540,    85,
03158      356,   530,   587,   538,   542,   552,   544,   138,   139,   538,
03159      552,   545,   546,    56,   552,   600,   601,   564,    85,   584,
03160       59,    60,   564,   144,   553,   559,   564,   137,   566,   567,
03161      106,   551,   574,   575,   576,   577,   565,    87,   615,   574,
03162      575,   304,   140,   563,   106,   574,   575,    87,   590,   593,
03163       85,   584,   138,   139,    87,    85,   584,   140,    68,   109,
03164       68,   548,    14,    15,   584,    85,   604,   609,    85,   109,
03165      140,   138,   139,   658,    17,   619,   109,   615,    56,   608,
03166      609,   574,   575,   615,   661,   145,    25,   951,    52,    94,
03167       54,    55,    56,    57,   679,   143,   638,   146,   640,   697,
03168      642,   136,   700,   138,   139,   137,   140,   142,   138,   139,
03169       52,   653,    54,    55,    56,    57,   654,   711,   138,   139,
03170       10,   138,   139,   661,   662,    89,    61,   665,   666,   661,
03171       65,    95,    96,   671,   672,   109,   952,   679,   680,   140,
03172      682,   140,   684,   140,   406,   140,   140,    89,   410,   734,
03173      694,   140,   116,   415,    96,   119,     8,   600,    13,   697,
03174       87,   705,   700,   701,   698,    61,    87,   137,   430,   104,
03175      105,   709,   109,   435,   116,    54,   710,   719,   716,   717,
03176      140,   145,   109,   140,    63,    64,   728,   772,   109,   140,
03177       68,   711,   679,   662,    87,    52,   665,   666,   796,    52,
03178      742,   111,   671,   672,   140,   743,   744,    87,   104,   105,
03179      106,   567,   144,   140,   549,    15,   109,   755,   803,   140,
03180        2,   763,     4,   765,    87,   767,   768,   489,    52,   109,
03181       54,    55,    56,    57,    16,    17,   140,   822,    20,   117,
03182      118,   119,   120,   121,   145,   783,   109,   140,   604,   791,
03183      109,   140,   794,   114,   140,   793,   140,   140,   796,    10,
03184      140,    88,   800,   801,   140,     9,   804,    49,    50,    10,
03185      137,   140,   806,    10,   808,    61,   140,   140,   140,   542,
03186       62,   544,   820,   137,   140,   114,    52,   137,    54,    55,
03187       56,    57,   834,   835,   140,   837,    68,   839,   840,   140,
03188      140,    83,    84,   137,   842,    87,    56,   140,   140,    68,
03189      842,    83,    84,    56,   783,   140,   140,   140,   104,   105,
03190      106,   140,   860,    89,    83,    84,   864,   140,   860,    95,
03191       96,   873,   142,   142,    61,   140,   424,   875,    90,    88,
03192       61,   697,   954,   736,   700,   117,   118,   119,   120,   121,
03193      116,    93,   904,   119,   689,   114,   115,   116,   117,   118,
03194      119,   120,   121,   953,   906,   907,   908,    96,   910,   911,
03195      640,   706,   642,    57,    91,   880,   142,   104,   105,   106,
03196      918,   849,   920,   104,   105,   106,   653,   746,   926,    -1,
03197      928,   654,   934,   935,   936,   937,    52,    -1,    54,    55,
03198       56,    57,    -1,    -1,   951,    -1,    -1,    54,    55,   951,
03199       57,   953,   954,   951,    -1,   197,    63,    64,    -1,   939,
03200       -1,    -1,    -1,   952,    -1,   967,   968,   969,   970,   973,
03201      950,    -1,    -1,    89,    -1,   217,    -1,   219,   220,   981,
03202      796,   223,    -1,   225,    -1,   707,    -1,   989,   230,    -1,
03203       -1,    -1,    -1,   716,   717,    68,    -1,    -1,    -1,   241,
03204      242,    -1,   797,    -1,   799,    -1,    -1,   729,    -1,    -1,
03205       83,    84,    -1,    -1,   809,    -1,    -1,    -1,   740,   814,
03206      743,   744,   749,    -1,    52,   752,    54,    55,    56,    57,
03207       -1,    -1,   755,    -1,    -1,   765,    -1,   767,   768,    -1,
03208       -1,    -1,    -1,   116,   117,   118,   119,   120,   121,    -1,
03209      292,   293,   294,   295,   296,   297,   298,   299,    -1,    -1,
03210      302,    89,   304,    -1,    -1,   307,    -1,    95,    -1,    52,
03211      793,    54,    55,    56,    57,   870,   871,   800,   801,    -1,
03212       -1,   804,    16,    17,    -1,    -1,    20,    -1,    -1,    -1,
03213       -1,   813,    -1,   335,    -1,   337,    -1,   820,    -1,   341,
03214      342,    -1,    -1,   825,   834,   835,    -1,   837,   830,   839,
03215      840,    -1,    46,    47,   356,    -1,    -1,    51,    52,    -1,
03216       -1,    -1,    -1,    -1,   851,    -1,   853,    -1,    62,    63,
03217       -1,    52,   927,    54,    55,    56,    57,    -1,    -1,    -1,
03218       -1,   864,   384,   385,    40,    41,    42,    43,    44,    -1,
03219       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   400,    -1,
03220      955,    -1,   957,    -1,    -1,   892,    -1,   894,    89,    -1,
03221       -1,   898,    -1,    -1,    95,    -1,   906,   907,   908,    -1,
03222      910,   911,   424,    52,    -1,    54,    55,    56,    57,    -1,
03223       -1,   433,    -1,    -1,    -1,   918,    -1,   920,    -1,    -1,
03224       -1,    -1,    -1,   926,   934,   935,   936,   937,    -1,    -1,
03225      452,    -1,    -1,    -1,   941,    -1,   943,    -1,    -1,   946,
03226       89,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
03227       -1,    -1,    -1,    -1,   961,    -1,    -1,   967,   968,   969,
03228      970,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,
03229      119,   981,    -1,    -1,    -1,    -1,   983,    -1,    -1,   989,
03230       -1,   195,    -1,    -1,   198,   199,   200,    -1,    -1,    -1,
03231        2,    -1,     4,   142,    -1,    52,    -1,    54,    55,    56,
03232       57,    -1,    -1,   217,    -1,   219,   220,    -1,    -1,    -1,
03233       -1,     2,    -1,     4,    -1,    -1,    -1,    -1,    -1,    -1,
03234      542,    -1,   544,    52,    -1,    54,    55,    56,    57,    -1,
03235      552,    -1,    89,    -1,    -1,    -1,    -1,    49,    95,    96,
03236       -1,    53,   564,    -1,   566,   567,    -1,    -1,    -1,    -1,
03237       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    49,   116,
03238       89,    -1,   119,    -1,    76,    -1,    95,    96,    -1,    -1,
03239       -1,    -1,    -1,    -1,    -1,    -1,    88,    89,    90,    91,
03240       -1,    -1,   604,    -1,    -1,    -1,    -1,   116,   302,    -1,
03241      119,    -1,    -1,   307,   308,   309,   310,   311,   312,   313,
03242      314,   315,   316,   317,   318,   319,   320,   321,   322,   323,
03243      324,   325,   326,   327,   328,   329,   330,   331,   332,   333,
03244       -1,   335,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03245       -1,    -1,   654,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03246      662,    -1,    -1,   665,   666,    -1,    -1,    -1,    -1,   671,
03247      672,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03248       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    -1,
03249      384,   385,    -1,    -1,    -1,   697,    -1,    -1,   700,   701,
03250      394,   395,   396,    -1,    -1,   197,   400,   709,   402,   403,
03251      404,    -1,    -1,    -1,   716,   717,   112,   113,   114,   115,
03252      116,   117,   118,   119,   120,   121,   197,    -1,    -1,   423,
03253       -1,    -1,    -1,    -1,   428,    -1,    -1,    -1,   230,    -1,
03254       -1,   743,   744,   437,    -1,    -1,   440,    -1,    -1,   241,
03255      242,    -1,    -1,   755,    -1,    -1,    -1,    -1,   452,   230,
03256       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   261,
03257      241,   242,    -1,    -1,    -1,    -1,    -1,    -1,   472,   473,
03258       -1,   783,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03259      484,   793,    -1,    -1,   796,    -1,    -1,    -1,   800,   801,
03260      292,    -1,   804,    -1,    -1,   297,    -1,    -1,    -1,    -1,
03261       -1,    -1,   304,   305,    -1,    -1,    -1,     2,   820,     4,
03262       -1,   292,    -1,    -1,    -1,    -1,   297,    -1,    -1,    -1,
03263       -1,    -1,    -1,   304,    -1,    -1,    -1,    -1,    -1,    -1,
03264       -1,    -1,    -1,    -1,    -1,   337,    -1,     2,    -1,     4,
03265       -1,    -1,    -1,    -1,   548,    -1,    -1,    -1,   552,    -1,
03266       -1,    -1,   864,    -1,    49,     2,   337,     4,    53,    -1,
03267      564,    -1,    -1,   875,    -1,    -1,    -1,    -1,    -1,    -1,
03268       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03269       -1,    76,    -1,   587,    49,    -1,    -1,    -1,    53,    -1,
03270       -1,    -1,    -1,    88,    89,    90,   600,   601,    -1,    -1,
03271       -1,    -1,    49,    -1,    -1,    -1,   918,    -1,   920,    -1,
03272       -1,    76,    -1,    -1,   926,    -1,   928,    -1,    -1,    -1,
03273       -1,    -1,   424,    88,    89,    90,    91,    -1,    -1,    -1,
03274       -1,   433,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   951,
03275       -1,    88,    -1,   424,    -1,    -1,    -1,    -1,   450,    -1,
03276       -1,    -1,   433,    -1,   658,    -1,    -1,    -1,   662,   663,
03277       -1,   665,   666,    -1,    -1,    -1,    -1,   671,   672,     0,
03278       -1,    -1,    -1,    -1,    -1,   679,    -1,     8,     9,    10,
03279       -1,    -1,    13,    14,    15,    -1,    17,    -1,   490,    -1,
03280       -1,    -1,    -1,    -1,    -1,    -1,    27,    -1,    -1,    -1,
03281       -1,    -1,   197,    -1,    -1,    -1,    37,    38,    -1,    40,
03282       41,    42,    43,    44,   718,    -1,    -1,    -1,    -1,   723,
03283      724,    -1,   726,   727,    -1,    -1,    -1,    -1,    -1,    -1,
03284      734,    -1,   197,    -1,    -1,   230,    -1,    -1,    -1,    -1,
03285      542,    -1,   544,    -1,    -1,    -1,   241,   242,    -1,    -1,
03286      197,    -1,    -1,    -1,    85,    -1,    -1,    -1,    -1,    -1,
03287       -1,   542,    -1,   544,   566,   230,   261,    -1,   772,    -1,
03288       -1,    -1,   776,    -1,    -1,    -1,   241,   242,    -1,   783,
03289       -1,    -1,    -1,   230,    -1,   566,    -1,    -1,    -1,    -1,
03290       -1,    -1,    -1,    -1,   241,   242,   261,   292,    -1,   803,
03291       -1,    -1,   297,    -1,    -1,    -1,   137,    -1,   139,   304,
03292      305,   142,   143,   615,   145,    -1,   147,   821,   822,    -1,
03293       -1,    -1,    -1,    -1,    -1,    -1,    -1,   292,    -1,    -1,
03294       -1,    -1,   297,    -1,    -1,    -1,    -1,    -1,    -1,   304,
03295      305,    -1,   337,    -1,    -1,   292,    -1,    -1,    -1,    -1,
03296      297,    -1,   654,    -1,    -1,    -1,    -1,   304,    -1,   661,
03297      307,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03298       -1,    -1,   337,   654,    -1,    -1,    -1,    -1,    -1,    -1,
03299       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03300      337,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   701,
03301       -1,    -1,    -1,    -1,    -1,    -1,    -1,   709,    -1,    -1,
03302       -1,    -1,    -1,    -1,   716,   717,    -1,    -1,    -1,    -1,
03303      701,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   709,   424,
03304       -1,    -1,    -1,    -1,    -1,   716,   717,    -1,   433,    -1,
03305       -1,   743,   744,    -1,    -1,    -1,    -1,   951,    -1,    -1,
03306       -1,    -1,    -1,   755,    -1,   450,    -1,    -1,    -1,   424,
03307       -1,    -1,   743,   744,    -1,    -1,    -1,    -1,   433,    -1,
03308       -1,    -1,    -1,    -1,   755,    -1,    -1,   424,    -1,    -1,
03309       -1,    -1,    -1,    -1,    -1,   450,   433,    -1,    -1,    -1,
03310       -1,   793,    -1,    -1,    -1,   490,    -1,    -1,   800,   801,
03311       -1,    -1,   804,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03312       -1,    -1,   793,    -1,    -1,    -1,    -1,    -1,   820,   800,
03313      801,    -1,    -1,   804,    -1,   490,    -1,    -1,    -1,    -1,
03314       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   820,
03315      842,    -1,    -1,    -1,    -1,    -1,    -1,   542,    -1,   544,
03316       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   860,    -1,
03317       -1,    -1,   864,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03318       -1,   566,    -1,   875,    -1,    -1,    -1,   542,    -1,   544,
03319       -1,    -1,    -1,   864,    -1,    -1,    -1,    -1,    -1,    -1,
03320       -1,    -1,    -1,    -1,   875,   542,    -1,   544,    -1,    -1,
03321       -1,   566,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03322       -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,   920,   566,
03323      615,    -1,    -1,    -1,   926,    -1,   928,    -1,    -1,    -1,
03324       -1,    -1,    -1,    -1,    -1,    -1,    -1,   918,    -1,   920,
03325       -1,    -1,    -1,    -1,    -1,   926,    -1,   928,    -1,    -1,
03326      615,   646,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   654,
03327       -1,    -1,    -1,    -1,    -1,    -1,   661,    -1,    -1,    -1,
03328       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03329       -1,    -1,    68,    69,    70,    71,    72,    73,    74,   654,
03330       -1,    77,    78,    -1,    -1,    -1,   661,    83,    84,    -1,
03331       -1,    -1,    -1,    -1,    -1,    -1,   701,   654,    -1,    -1,
03332       -1,    -1,    -1,    -1,   709,   662,    -1,    -1,    -1,    -1,
03333       -1,   716,   717,    -1,    -1,    -1,   112,   113,   114,   115,
03334      116,   117,   118,   119,   120,   121,   701,    -1,    -1,    -1,
03335       -1,    -1,    -1,    -1,   709,    -1,    -1,    -1,   743,   744,
03336       -1,   716,   717,    -1,   701,    -1,    -1,    -1,    -1,    -1,
03337      755,    -1,   709,    -1,    -1,    -1,    -1,    -1,    -1,   716,
03338      717,    68,    69,    70,    71,    72,    73,    74,   743,   744,
03339       77,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
03340      755,    -1,    -1,    -1,    -1,    -1,   743,   744,   793,    -1,
03341       -1,    -1,    -1,    -1,    -1,   800,   801,    -1,   755,   804,
03342       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03343      117,   118,   119,   120,   121,   820,    -1,    -1,   793,    -1,
03344       -1,    -1,    -1,    -1,    -1,   800,   801,    -1,    -1,   804,
03345       -1,    -1,    -1,    -1,    -1,    -1,   793,   842,    -1,    -1,
03346       -1,    -1,    -1,   800,   801,   820,    -1,   804,    -1,    -1,
03347       -1,    -1,    -1,    -1,    -1,   860,    -1,    -1,    -1,   864,
03348       -1,    -1,    -1,   820,    -1,    -1,    -1,   842,    -1,    -1,
03349      875,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03350       -1,    -1,    -1,    -1,    -1,   860,    -1,    -1,    -1,   864,
03351       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03352      875,    -1,    -1,   860,    -1,    -1,    -1,   864,    -1,    -1,
03353       -1,    -1,    -1,   918,    -1,   920,    -1,    -1,   875,    -1,
03354       -1,   926,    -1,   928,    -1,    -1,    -1,    -1,    -1,    -1,
03355       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03356       -1,    -1,    -1,   918,    -1,   920,    -1,    -1,    -1,    -1,
03357       -1,   926,    -1,   928,    -1,    -1,    -1,    -1,    -1,    -1,
03358       -1,   918,    -1,   920,    -1,    -1,    -1,    -1,    -1,   926,
03359       -1,   928,     0,     1,    -1,     3,     4,     5,     6,     7,
03360       -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,    -1,
03361       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03362       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03363       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03364       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03365       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03366       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03367       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03368       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03369       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03370       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03371       -1,    -1,    -1,     0,   122,   123,   124,    -1,    -1,    -1,
03372       -1,     8,     9,    10,    -1,    -1,    13,    14,    15,    -1,
03373       17,    -1,    -1,    -1,    -1,    -1,    -1,   145,    -1,   147,
03374       27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03375       37,    38,    -1,    40,    41,    42,    43,    44,    -1,    -1,
03376       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03377       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03378       84,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03379       77,    78,    79,    80,    -1,    -1,    83,    84,    85,    -1,
03380       87,    88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,
03381      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03382      107,    -1,   109,   110,   111,   112,   113,   114,   115,   116,
03383      117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
03384       -1,    -1,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,
03385      137,   138,   139,   140,     0,    -1,   143,   144,   145,    -1,
03386      147,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03387       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03388       26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03389       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03390       -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,
03391       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
03392       83,    84,    68,    69,    70,    71,    72,    73,    74,    75,
03393       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03394       -1,    -1,    88,    -1,    -1,    -1,    -1,   110,    94,   112,
03395      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03396       -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,
03397      116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
03398       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03399      136,   137,   138,   139,   140,     0,   142,   143,   144,   145,
03400       -1,   147,    -1,     8,     9,    10,    -1,    -1,    13,    14,
03401       15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03402       -1,    -1,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,
03403       -1,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03404       -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,
03405       72,    73,    74,    75,    -1,    77,    78,    -1,    -1,    -1,
03406       -1,    83,    84,    68,    69,    70,    71,    72,    73,    74,
03407       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03408       85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,
03409      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03410       -1,    -1,   107,    -1,    -1,   110,   111,   112,   113,   114,
03411      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03412       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03413       -1,    -1,   137,   138,   139,   140,     0,    -1,   143,   144,
03414      145,    -1,   147,    -1,     8,     9,    10,    -1,    -1,    13,
03415       14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,
03416       -1,    -1,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,
03417       -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,    43,
03418       44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03419       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03420       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03421       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03422       84,    85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,
03423       94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03424       -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,   112,   113,
03425      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03426       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03427       -1,    -1,   136,   137,   138,   139,   140,     0,   142,   143,
03428      144,   145,    -1,   147,    -1,     8,     9,    10,    -1,    -1,
03429       13,    14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,
03430       -1,    -1,    -1,    -1,    27,    28,    -1,    -1,    -1,    -1,
03431       -1,    -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,
03432       43,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03433       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03434       -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,
03435       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
03436       83,    84,    85,    -1,    -1,    88,    -1,    -1,    -1,    -1,
03437       -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03438       -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,   112,
03439      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03440       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03441       -1,    -1,    -1,    -1,   137,   138,   139,   140,     0,   142,
03442      143,   144,   145,    -1,   147,    -1,     8,     9,    10,    -1,
03443       -1,    -1,    14,    15,    -1,    17,    -1,    -1,    -1,    -1,
03444       -1,    -1,    -1,    -1,    26,    -1,    -1,    -1,    -1,    -1,
03445       -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,    41,
03446       42,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03447       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03448       -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,    71,
03449       72,    73,    74,    75,    76,    77,    78,    79,    80,    -1,
03450       -1,    83,    84,    85,     0,    87,    -1,    -1,    -1,    -1,
03451       -1,    -1,     8,     9,    10,    -1,    -1,    -1,    14,    15,
03452       -1,    17,    -1,    -1,    -1,    -1,    -1,   109,   110,    -1,
03453      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03454       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03455       -1,    -1,    -1,    -1,   136,   137,   138,   139,   140,    -1,
03456       -1,   143,    -1,   145,    -1,   147,    -1,    -1,    -1,    -1,
03457       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03458       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03459       -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03460       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03461       -1,    -1,    -1,   109,   110,    -1,   112,   113,   114,   115,
03462      116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
03463       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03464       -1,   137,   138,   139,   140,    -1,    -1,   143,    -1,   145,
03465        1,   147,     3,     4,     5,     6,     7,     8,     9,    10,
03466       11,    12,    -1,    -1,    15,    16,    -1,    18,    19,    20,
03467       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03468       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03469       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03470       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03471       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03472       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03473       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03474       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03475      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03476       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03477       -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
03478       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03479       -1,    -1,    -1,    -1,   145,     1,   147,     3,     4,     5,
03480        6,     7,    -1,    -1,    10,    11,    12,    -1,    14,    15,
03481       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03482       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03483       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03484       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03485       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03486       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03487       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03488       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03489       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03490       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03491       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03492       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03493       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,
03494        1,   147,     3,     4,     5,     6,     7,    -1,    -1,    10,
03495       11,    12,    -1,    -1,    15,    16,    17,    18,    19,    20,
03496       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03497       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03498       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03499       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03500       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03501       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03502       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03503       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03504      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03505       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03506       -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
03507        1,    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03508       11,    12,    -1,    -1,   145,    16,   147,    18,    19,    20,
03509       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03510       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03511       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
03512       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03513       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03514       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03515       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03516       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03517      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03518       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03519       -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
03520       -1,    -1,    -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,
03521       -1,    -1,    -1,    -1,   145,     1,   147,     3,     4,     5,
03522        6,     7,    -1,    -1,    10,    11,    12,    -1,    -1,    15,
03523       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03524       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03525       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03526       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03527       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03528       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03529       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03530       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03531       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03532       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03533       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03534       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
03535        6,     7,    -1,     9,    10,    11,    12,    -1,    -1,   145,
03536       16,   147,    18,    19,    20,    21,    22,    23,    24,    -1,
03537       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03538       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03539       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03540       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03541       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03542       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03543       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03544       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03545       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03546       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03547       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
03548        6,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,   145,
03549       16,   147,    18,    19,    20,    21,    22,    23,    24,    -1,
03550       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03551       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03552       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03553       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03554       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03555       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03556       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03557       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03558       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03559       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03560       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
03561        6,     7,    -1,    -1,    -1,    11,    12,   143,    -1,   145,
03562       16,   147,    18,    19,    20,    21,    22,    23,    24,    -1,
03563       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03564       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03565       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03566       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03567       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03568       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03569       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03570       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03571       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03572       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03573       -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,     5,
03574        6,     7,    -1,    -1,    -1,    11,    12,   143,    -1,   145,
03575       16,   147,    18,    19,    20,    21,    22,    23,    24,    -1,
03576       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03577       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03578       46,    -1,    48,    49,    50,    51,    52,    53,    54,    55,
03579       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03580       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03581       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03582       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03583       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03584       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03585       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03586       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03587       -1,   137,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,
03588        1,   147,     3,     4,     5,     6,     7,    -1,    -1,    10,
03589       11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,    20,
03590       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03591       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03592       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03593       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03594       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03595       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03596       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03597       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03598      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03599       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03600       -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,
03601       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03602       11,    12,    -1,    -1,   145,    16,   147,    18,    19,    20,
03603       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03604       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03605       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03606       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03607       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03608       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03609       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03610       -1,    92,    93,    -1,    95,    96,    97,    98,    99,   100,
03611      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03612       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03613       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03614       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03615       32,    33,    34,    35,    36,    -1,   147,    39,    -1,    -1,
03616       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03617       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03618       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03619       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03620       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03621       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03622      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03623       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03624      122,   123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03625       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03626       12,    -1,    -1,   145,    16,   147,    18,    19,    20,    21,
03627       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03628       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03629       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03630       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03631       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03632       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03633       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03634       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03635      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03636        3,     4,     5,     6,     7,    -1,    -1,    -1,    11,    12,
03637      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03638       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03639       33,    34,    35,    36,    -1,   147,    39,    -1,    -1,    -1,
03640       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03641       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03642       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03643       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03644       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03645       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03646      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03647       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03648      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03649        5,     6,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,
03650       -1,    16,   145,    18,    19,    20,    21,    22,    23,    24,
03651       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03652       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03653       45,    46,    -1,    48,    49,    50,    51,    52,    53,    54,
03654       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03655       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03657       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03658       95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03659       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03660       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03661       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03662       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03663      145,     3,     4,     5,     6,     7,     8,     9,    10,    11,
03664       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
03665       22,    23,    24,    25,    26,    -1,    -1,    -1,    30,    31,
03666       32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
03667       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
03668       52,    53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
03669       -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    71,
03670       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
03671       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03672       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
03673       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03674      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03675       -1,   123,   124,    -1,    -1,    -1,    -1,    -1,     3,     4,
03676        5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,   141,
03677      142,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03678       -1,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03679       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03680       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03681       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03682       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03683       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03684       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03685       95,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03686       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03687       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03688       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03689       -1,   136,    -1,    11,    12,    -1,    -1,   142,    16,    -1,
03690       18,    19,    20,    21,    22,    23,    24,    -1,    26,    -1,
03691       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03692       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03693       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03694       58,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03695       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03696       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03697       -1,    89,    90,    -1,    92,    93,    -1,    95,    96,    97,
03698       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03699       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03700       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03701       -1,    -1,     3,     4,     5,    -1,     7,    -1,   136,    -1,
03702       11,    12,    -1,    -1,   142,    16,    -1,    18,    19,    20,
03703       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03704       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03705       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03706       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03707       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03708       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03709       -1,    -1,    -1,    -1,    -1,    86,    87,    -1,    89,    90,
03710       -1,    92,    93,    -1,    95,    96,    97,    98,    99,   100,
03711      101,   102,   103,    -1,    -1,    -1,    -1,    -1,   109,    -1,
03712       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03713        7,   122,   123,   124,    11,    12,    -1,    -1,    -1,    16,
03714       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03715       -1,   142,    -1,    30,    31,    32,    33,    34,    35,    36,
03716       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03717       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03718       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03719       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03720       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03721       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    96,
03722       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03723       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03724        3,     4,     5,    -1,     7,   122,   123,   124,    11,    12,
03725       -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,    22,
03726       23,    24,    -1,    -1,    -1,   142,    -1,    30,    31,    32,
03727       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03728       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03729       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03730       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03731       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03732       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03733       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03734      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03735       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03736      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03737       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,
03738        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
03739       13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
03740       23,    24,    25,    26,    -1,    -1,    -1,    30,    31,    32,
03741       33,    34,    35,    36,    37,    38,    39,    -1,    -1,    -1,
03742       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03743       53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,    -1,
03744       -1,    -1,    -1,    66,    67,    68,    69,    70,    71,    72,
03745       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
03746       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03747       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03748       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
03749      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03750      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03751       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,     3,
03752        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
03753       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
03754       24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
03755       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
03756       -1,    45,    46,    47,    48,    49,    50,    51,    52,    53,
03757       54,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03758       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03759       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03760       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03761       -1,    95,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,
03762       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03763      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03764      124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03765       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,     3,     4,
03766        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
03767       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
03768       25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03769       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
03770       45,    46,    47,    48,    49,    50,    51,    52,    53,    -1,
03771       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03772       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03773       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03774       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03775       95,    -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,
03776       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03777      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03778       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03779       -1,    -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,
03780        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
03781       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
03782       26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03783       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
03784       46,    47,    48,    49,    50,    51,    52,    53,    -1,    -1,
03785       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03786       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03787       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03788       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03789       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03790       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03791      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03792       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03793       12,    -1,    -1,    -1,    16,   141,    18,    19,    20,    21,
03794       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03795       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03796       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03797       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03798       62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03799       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03800       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03801       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03802      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03803       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03804      122,    11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,
03805       20,    21,    22,    23,    24,    -1,    -1,    -1,   140,    -1,
03806       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03807       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03808       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03809       60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
03810       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03811       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03812       90,    -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,
03813      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03814       -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,
03815       -1,    -1,   122,    11,    12,    -1,    -1,    -1,    16,    -1,
03816       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03817      140,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03818       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03819       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03820       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03821       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03822       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03823       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03824       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03825       -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,
03826       -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
03827       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03828       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03829       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,    48,
03830       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03831       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03832       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03833       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03834       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
03835       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03836       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03837       -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
03838       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03839       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03840       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03841       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
03842       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03843       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03844       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03845       90,    -1,    92,    93,    -1,    95,    96,    97,    98,    99,
03846      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03847       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03848       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03849       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03850       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03851       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03852       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03853       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03854       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03855       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03856       -1,    92,    93,    -1,    95,    96,    97,    98,    99,   100,
03857      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03858       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03859       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03860       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03861       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03862       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03863       52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
03864       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03865       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03866       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03867       92,    93,    -1,    95,    -1,    97,    98,    99,   100,   101,
03868      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03869        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03870      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03871       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03872       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03873       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03874       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03875       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03876       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03877       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03878       93,    -1,    -1,    96,    97,    98,    99,   100,   101,   102,
03879      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03880        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03881      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03882       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03883       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03884       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03885       54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
03886       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03887       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03888       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03889       -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
03890       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03891        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03892      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03893       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03894       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03895       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03896       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03897       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03898       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03899       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03900       -1,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03901       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03902       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03903       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03904       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03905       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03906       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03907       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03908       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03909       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03910       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03911       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03912       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03913        7,    -1,    -1,    -1,    11,    12,   122,   123,   124,    16,
03914       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03915       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03916       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03917       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03918       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
03919       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03920       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03921       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
03922       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03923       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03924       -1,    -1,    -1,    11,    12,   122,   123,   124,    16,    -1,
03925       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03926       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03927       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03928       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03929       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03930       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03931       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03932       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03933       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03934       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
03935       -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
03936       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03937       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03938       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03939       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03940       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03941       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03942       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03943       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
03944       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03945       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03946       -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
03947       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03948       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03949       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03950       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03951       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03952       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03953       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03954       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03955      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03956       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03957       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03958       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03959       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03960       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03961       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03962       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03963       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03964       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03965       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03966      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03967       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03968       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03969       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03970       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03971       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03972       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03973       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03974       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03975       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03976       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03977      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03978        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03979      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03980       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03981       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03982       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03983       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03984       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03985       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03986       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03987       93,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
03988      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03989        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03990      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03991       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03992       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03993       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03994       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03995       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03996       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03997       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03998       -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
03999       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
04000       -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,    18,
04001       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
04002       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
04003       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
04004       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
04005       59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,
04006       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04007       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
04008       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
04009       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,     3,
04010        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
04011       -1,    -1,    16,   122,    18,    19,    20,    21,    22,    23,
04012       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
04013       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
04014       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
04015       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
04016       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04017       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,
04018       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
04019       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
04020       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
04021       -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,    18,
04022       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
04023       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
04024       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
04025       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
04026       59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,
04027       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04028       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
04029       89,    90,    -1,    92,    93,    -1,    -1,    -1,    97,    98,
04030       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,     3,
04031        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
04032       -1,    -1,    16,   122,    18,    19,    20,    21,    22,    23,
04033       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
04034       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
04035       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
04036       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
04037       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04038       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04039       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
04040       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
04041       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
04042       -1,    -1,    11,    12,    -1,    -1,    -1,    16,   122,    18,
04043       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
04044       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
04045       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
04046       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
04047       59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,
04048       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04049       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
04050       89,    90,    -1,    92,    93,    -1,    -1,    -1,    97,    98,
04051       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,     3,
04052        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
04053       -1,    -1,    16,   122,    18,    19,    20,    21,    22,    23,
04054       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
04055       34,    35,    36,    -1,    -1,    39,    -1,    44,    -1,    -1,
04056       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
04057       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
04058       64,    68,    69,    70,    71,    72,    73,    74,    75,    76,
04059       77,    78,    79,    80,    -1,    -1,    83,    84,    -1,    -1,
04060       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
04061       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
04062       -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,   116,
04063      117,   118,   119,   120,   121,    -1,    -1,    -1,   122,    -1,
04064       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
04065       -1,    -1,    -1,   140,    66,    67,    68,    69,    70,    71,
04066       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
04067       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04068       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
04069       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04070      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04071       -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,
04072       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
04073      142,    66,    67,    68,    69,    70,    71,    72,    73,    74,
04074       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
04075       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04076       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04077       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
04078      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
04079       -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
04080       -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,
04081       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
04082       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
04083       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
04084       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04085       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
04086      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,
04087       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
04088       -1,    -1,    -1,   141,   142,    66,    67,    68,    69,    70,
04089       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
04090       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
04091       -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
04092       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04093       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04094      121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,
04095       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04096      141,   142,    66,    67,    68,    69,    70,    71,    72,    73,
04097       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
04098       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04099       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04100       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
04101      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
04102      124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,
04103       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,
04104       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
04105       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
04106       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
04107       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04108       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
04109      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
04110       -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
04111       -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,    69,
04112       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
04113       -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
04114       -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
04115       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04116       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
04117      120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,
04118       53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
04119       -1,   141,   142,    66,    67,    68,    69,    70,    71,    72,
04120       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
04121       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04122       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04123       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
04124      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
04125      123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,
04126       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,
04127       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
04128       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
04129       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
04130       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04131       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
04132      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
04133       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
04134       -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,
04135       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
04136       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
04137       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
04138       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04139       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
04140      119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,
04141       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
04142       -1,    -1,   141,   142,    66,    67,    68,    69,    70,    71,
04143       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
04144       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04145       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
04146       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04147      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04148       -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,
04149       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
04150      142,    66,    67,    68,    69,    70,    71,    72,    73,    74,
04151       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
04152       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04153       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04154       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
04155      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
04156       -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
04157       -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,
04158       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
04159       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
04160       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
04161       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04162       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
04163      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,
04164       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
04165       -1,    -1,    -1,   141,   142,    66,    67,    68,    69,    70,
04166       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
04167       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
04168       -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
04169       -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04170       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04171      121,    44,   123,   124,    -1,    -1,    68,    69,    70,    71,
04172       72,    73,    74,    75,    76,    77,    78,    79,    80,    -1,
04173      141,    83,    84,    -1,    -1,    68,    69,    70,    71,    72,
04174       73,    74,    75,    76,    77,    78,    79,    80,    -1,    -1,
04175       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,
04176      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04177       -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,    -1,   112,
04178      113,   114,   115,   116,   117,   118,   119,   120,   121
04179 };
04180 
04181 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
04182    symbol of state STATE-NUM.  */
04183 static const yytype_uint16 yystos[] =
04184 {
04185        0,   149,   150,     0,     1,     3,     4,     5,     6,     7,
04186       11,    12,    16,    18,    19,    20,    21,    22,    23,    24,
04187       30,    31,    32,    33,    34,    35,    36,    39,    45,    46,
04188       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
04189       57,    59,    60,    62,    63,    64,    66,    67,    86,    89,
04190       90,    92,    93,    95,    97,    98,    99,   100,   101,   102,
04191      103,   122,   123,   124,   151,   152,   153,   158,   160,   161,
04192      163,   164,   167,   168,   170,   171,   172,   174,   175,   185,
04193      199,   216,   217,   218,   219,   220,   221,   222,   223,   224,
04194      225,   226,   249,   250,   260,   261,   262,   263,   264,   265,
04195      266,   269,   279,   281,   282,   283,   284,   285,   286,   287,
04196      310,   321,   153,     3,     4,     5,     6,     7,     8,     9,
04197       10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
04198       20,    21,    22,    23,    24,    25,    26,    30,    31,    32,
04199       33,    34,    35,    36,    37,    38,    39,    45,    46,    47,
04200       48,    49,    50,    51,    52,    53,    56,    66,    67,    68,
04201       69,    70,    71,    72,    73,    74,    77,    78,    81,    82,
04202       83,    84,    95,   112,   113,   114,   115,   116,   117,   118,
04203      119,   120,   121,   123,   124,   141,   178,   179,   180,   181,
04204      183,   184,   279,   281,    39,    58,    86,    89,    95,    96,
04205      123,   167,   175,   185,   187,   192,   195,   197,   216,   283,
04206      284,   286,   287,   308,   309,   192,   192,   142,   193,   194,
04207      142,   189,   193,   142,   147,   315,    54,   180,   315,   154,
04208      136,    21,    22,    30,    31,    32,   185,   216,   310,   185,
04209       56,     1,    89,   156,   157,   158,   169,   170,   321,   161,
04210      188,   197,   308,   321,   187,   307,   308,   321,    46,    86,
04211      122,   140,   174,   199,   216,   283,   284,   287,   242,   243,
04212       54,    55,    57,   178,   272,   280,   271,   272,   273,   146,
04213      267,   146,   270,    59,    60,   163,   185,   185,   145,   147,
04214      314,   319,   320,    40,    41,    42,    43,    44,    37,    38,
04215       28,   247,   109,   140,    89,    95,   171,   109,    68,    69,
04216       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
04217       80,    83,    84,   110,   112,   113,   114,   115,   116,   117,
04218      118,   119,   120,   121,    85,   138,   139,   200,   161,   162,
04219      162,   203,   205,   162,   314,   320,    86,   168,   175,   216,
04220      232,   283,   284,   287,    52,    56,    83,    86,   176,   177,
04221      216,   283,   284,   287,   177,    33,    34,    35,    36,    49,
04222       50,    51,    52,    56,   142,   178,   285,   305,    85,   139,
04223       26,   136,   251,   263,    87,    87,   189,   193,   251,   140,
04224      187,    56,   187,   187,   109,    88,   140,   196,   321,    85,
04225      138,   139,    87,    87,   140,   196,   192,   315,   316,   192,
04226      191,   192,   197,   308,   321,   161,   316,   161,    54,    63,
04227       64,   159,   142,   186,   136,   156,    85,   139,    87,   158,
04228      169,   143,   314,   320,   316,   201,   144,   140,   147,   318,
04229      140,   318,   137,   318,   315,    56,    59,    60,   171,   173,
04230      140,    85,   138,   139,   244,    61,   104,   105,   106,   274,
04231      106,   274,   106,    65,   274,   106,   106,   268,   274,   106,
04232       61,   106,    68,    68,   145,   153,   162,   162,   162,   162,
04233      158,   161,   161,   248,    95,   163,   187,   197,   198,   169,
04234      140,   174,   140,   160,   163,   175,   185,   187,   198,   185,
04235      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
04236      185,   185,   185,   185,   185,   185,   185,   185,   185,   185,
04237      185,   185,   185,   185,   185,    52,    53,    56,   183,   189,
04238      311,   312,   191,    52,    53,    56,   183,   189,   311,   155,
04239      156,    13,   228,   319,   228,   162,   162,   314,    17,   254,
04240       56,    85,   138,   139,    25,   161,    52,    56,   176,     1,
04241      113,   288,   319,    85,   138,   139,   212,   306,   213,    85,
04242      139,   313,    52,    56,   311,   311,   253,   252,   163,   185,
04243      163,   185,    94,   165,   182,   185,   187,    95,   187,   195,
04244      308,    52,    56,   191,    52,    56,   309,   316,   143,   316,
04245      140,   140,   316,   180,   202,   185,   151,   137,   311,   311,
04246      185,   316,   158,   316,   308,   140,   173,    52,    56,   191,
04247       52,    56,    52,    54,    55,    56,    57,    89,    95,    96,
04248      116,   119,   142,   245,   291,   292,   293,   294,   295,   296,
04249      299,   300,   301,   302,   303,   276,   275,   146,   274,   146,
04250      185,   185,    76,   114,   237,   238,   321,   187,   140,   316,
04251      173,   140,   109,    44,   315,    87,    87,   189,   193,   315,
04252      317,    87,    87,   189,   190,   193,   321,    10,   227,     8,
04253      256,   321,   156,    13,   156,    27,   229,   319,   229,   254,
04254      197,   227,    52,    56,   191,    52,    56,   207,   210,   319,
04255      289,   209,    52,    56,   176,   191,   155,   161,   142,   290,
04256      291,   214,   190,   193,   190,   193,   237,   237,    44,   166,
04257      180,   187,   196,    87,    87,   317,    87,    87,   308,   161,
04258      137,   318,   171,   317,   109,    52,    89,    95,   233,   234,
04259      235,   293,   291,    29,   107,   246,   140,   304,   321,   140,
04260      304,    52,   140,   304,    52,   277,    54,    55,    57,   278,
04261      287,    52,   145,   236,   239,   295,   297,   298,   301,   303,
04262      321,   156,    95,   187,   173,   185,   111,   163,   185,   163,
04263      185,   165,   144,    87,   163,   185,   163,   185,   165,   187,
04264      198,   257,   321,    15,   231,   321,    14,   230,   231,   231,
04265      204,   206,   227,   140,   228,   317,   162,   319,   162,   155,
04266      317,   227,   316,   291,   155,   319,   178,   156,   156,   185,
04267      237,    87,   140,   316,   187,   235,   140,   293,   140,   316,
04268      239,   156,   156,   294,   299,   301,   303,   295,   296,   301,
04269      295,   156,   109,    52,   240,   241,   292,   239,   114,   140,
04270      304,   140,   304,   140,   304,    10,   187,   185,   163,   185,
04271       88,   258,   321,   156,     9,   259,   321,   162,   227,   227,
04272      156,   156,   187,   156,   229,   211,   319,   227,   316,   227,
04273      215,    10,   137,   156,   316,   234,   140,    95,   233,   316,
04274       10,   137,   140,   304,   140,   304,   140,   304,   140,   304,
04275      304,   137,    86,   216,   140,   114,   298,   301,   295,   297,
04276      301,   295,    86,   175,   216,   283,   284,   287,   228,   156,
04277      228,   227,   227,   231,   254,   255,   208,   155,   290,   137,
04278      140,   234,   140,   293,   295,   301,   295,   295,    56,    85,
04279      241,   140,   304,   140,   304,   304,   140,   304,   304,    56,
04280       85,   138,   139,   156,   156,   156,   227,   155,   234,   140,
04281      304,   140,   304,   304,   304,    52,    56,   295,   301,   295,
04282      295,    52,    56,   191,    52,    56,   256,   230,   227,   227,
04283      234,   295,   304,   140,   304,   304,   304,   317,   304,   295,
04284      304
04285 };
04286 
04287 #define yyerrok         (yyerrstatus = 0)
04288 #define yyclearin       (yychar = YYEMPTY)
04289 #define YYEMPTY         (-2)
04290 #define YYEOF           0
04291 
04292 #define YYACCEPT        goto yyacceptlab
04293 #define YYABORT         goto yyabortlab
04294 #define YYERROR         goto yyerrorlab
04295 
04296 
04297 /* Like YYERROR except do call yyerror.  This remains here temporarily
04298    to ease the transition to the new meaning of YYERROR, for GCC.
04299    Once GCC version 2 has supplanted version 1, this can go.  */
04300 
04301 #define YYFAIL          goto yyerrlab
04302 
04303 #define YYRECOVERING()  (!!yyerrstatus)
04304 
04305 #define YYBACKUP(Token, Value)                                  \
04306 do                                                              \
04307   if (yychar == YYEMPTY && yylen == 1)                          \
04308     {                                                           \
04309       yychar = (Token);                                         \
04310       yylval = (Value);                                         \
04311       yytoken = YYTRANSLATE (yychar);                           \
04312       YYPOPSTACK (1);                                           \
04313       goto yybackup;                                            \
04314     }                                                           \
04315   else                                                          \
04316     {                                                           \
04317       parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04318       YYERROR;                                                  \
04319     }                                                           \
04320 while (YYID (0))
04321 
04322 
04323 #define YYTERROR        1
04324 #define YYERRCODE       256
04325 
04326 
04327 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
04328    If N is 0, then set CURRENT to the empty location which ends
04329    the previous symbol: RHS[0] (always defined).  */
04330 
04331 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04332 #ifndef YYLLOC_DEFAULT
04333 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
04334     do                                                                  \
04335       if (YYID (N))                                                    \
04336         {                                                               \
04337           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
04338           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
04339           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
04340           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
04341         }                                                               \
04342       else                                                              \
04343         {                                                               \
04344           (Current).first_line   = (Current).last_line   =              \
04345             YYRHSLOC (Rhs, 0).last_line;                                \
04346           (Current).first_column = (Current).last_column =              \
04347             YYRHSLOC (Rhs, 0).last_column;                              \
04348         }                                                               \
04349     while (YYID (0))
04350 #endif
04351 
04352 
04353 /* YY_LOCATION_PRINT -- Print the location on the stream.
04354    This macro was not mandated originally: define only if we know
04355    we won't break user code: when these are the locations we know.  */
04356 
04357 #ifndef YY_LOCATION_PRINT
04358 # if YYLTYPE_IS_TRIVIAL
04359 #  define YY_LOCATION_PRINT(File, Loc)                  \
04360      fprintf (File, "%d.%d-%d.%d",                      \
04361               (Loc).first_line, (Loc).first_column,     \
04362               (Loc).last_line,  (Loc).last_column)
04363 # else
04364 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04365 # endif
04366 #endif
04367 
04368 
04369 /* YYLEX -- calling `yylex' with the right arguments.  */
04370 
04371 #ifdef YYLEX_PARAM
04372 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04373 #else
04374 # define YYLEX yylex (&yylval)
04375 #endif
04376 
04377 /* Enable debugging if requested.  */
04378 #if YYDEBUG
04379 
04380 # ifndef YYFPRINTF
04381 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
04382 #  define YYFPRINTF fprintf
04383 # endif
04384 
04385 # define YYDPRINTF(Args)                        \
04386 do {                                            \
04387   if (yydebug)                                  \
04388     YYFPRINTF Args;                             \
04389 } while (YYID (0))
04390 
04391 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
04392 do {                                                                      \
04393   if (yydebug)                                                            \
04394     {                                                                     \
04395       YYFPRINTF (stderr, "%s ", Title);                                   \
04396       yy_symbol_print (stderr,                                            \
04397                   Type, Value, parser); \
04398       YYFPRINTF (stderr, "\n");                                           \
04399     }                                                                     \
04400 } while (YYID (0))
04401 
04402 
04403 /*--------------------------------.
04404 | Print this symbol on YYOUTPUT.  |
04405 `--------------------------------*/
04406 
04407 /*ARGSUSED*/
04408 #if (defined __STDC__ || defined __C99__FUNC__ \
04409      || defined __cplusplus || defined _MSC_VER)
04410 static void
04411 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04412 #else
04413 static void
04414 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04415     FILE *yyoutput;
04416     int yytype;
04417     YYSTYPE const * const yyvaluep;
04418     struct parser_params *parser;
04419 #endif
04420 {
04421   if (!yyvaluep)
04422     return;
04423   YYUSE (parser);
04424 # ifdef YYPRINT
04425   if (yytype < YYNTOKENS)
04426     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04427 # else
04428   YYUSE (yyoutput);
04429 # endif
04430   switch (yytype)
04431     {
04432       default:
04433         break;
04434     }
04435 }
04436 
04437 
04438 /*--------------------------------.
04439 | Print this symbol on YYOUTPUT.  |
04440 `--------------------------------*/
04441 
04442 #if (defined __STDC__ || defined __C99__FUNC__ \
04443      || defined __cplusplus || defined _MSC_VER)
04444 static void
04445 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04446 #else
04447 static void
04448 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04449     FILE *yyoutput;
04450     int yytype;
04451     YYSTYPE const * const yyvaluep;
04452     struct parser_params *parser;
04453 #endif
04454 {
04455   if (yytype < YYNTOKENS)
04456     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04457   else
04458     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04459 
04460   yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04461   YYFPRINTF (yyoutput, ")");
04462 }
04463 
04464 /*------------------------------------------------------------------.
04465 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
04466 | TOP (included).                                                   |
04467 `------------------------------------------------------------------*/
04468 
04469 #if (defined __STDC__ || defined __C99__FUNC__ \
04470      || defined __cplusplus || defined _MSC_VER)
04471 static void
04472 yy_stack_print (yytype_int16 *bottom, yytype_int16 *top)
04473 #else
04474 static void
04475 yy_stack_print (bottom, top)
04476     yytype_int16 *bottom;
04477     yytype_int16 *top;
04478 #endif
04479 {
04480   YYFPRINTF (stderr, "Stack now");
04481   for (; bottom <= top; ++bottom)
04482     YYFPRINTF (stderr, " %d", *bottom);
04483   YYFPRINTF (stderr, "\n");
04484 }
04485 
04486 # define YY_STACK_PRINT(Bottom, Top)                            \
04487 do {                                                            \
04488   if (yydebug)                                                  \
04489     yy_stack_print ((Bottom), (Top));                           \
04490 } while (YYID (0))
04491 
04492 
04493 /*------------------------------------------------.
04494 | Report that the YYRULE is going to be reduced.  |
04495 `------------------------------------------------*/
04496 
04497 #if (defined __STDC__ || defined __C99__FUNC__ \
04498      || defined __cplusplus || defined _MSC_VER)
04499 static void
04500 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04501 #else
04502 static void
04503 yy_reduce_print (yyvsp, yyrule, parser)
04504     YYSTYPE *yyvsp;
04505     int yyrule;
04506     struct parser_params *parser;
04507 #endif
04508 {
04509   int yynrhs = yyr2[yyrule];
04510   int yyi;
04511   unsigned long int yylno = yyrline[yyrule];
04512   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04513              yyrule - 1, yylno);
04514   /* The symbols being reduced.  */
04515   for (yyi = 0; yyi < yynrhs; yyi++)
04516     {
04517       fprintf (stderr, "   $%d = ", yyi + 1);
04518       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04519                        &(yyvsp[(yyi + 1) - (yynrhs)])
04520                                        , parser);
04521       fprintf (stderr, "\n");
04522     }
04523 }
04524 
04525 # define YY_REDUCE_PRINT(Rule)          \
04526 do {                                    \
04527   if (yydebug)                          \
04528     yy_reduce_print (yyvsp, Rule, parser); \
04529 } while (YYID (0))
04530 
04531 /* Nonzero means print parse trace.  It is left uninitialized so that
04532    multiple parsers can coexist.  */
04533 #ifndef yydebug
04534 int yydebug;
04535 #endif
04536 #else /* !YYDEBUG */
04537 # define YYDPRINTF(Args)
04538 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04539 # define YY_STACK_PRINT(Bottom, Top)
04540 # define YY_REDUCE_PRINT(Rule)
04541 #endif /* !YYDEBUG */
04542 
04543 
04544 /* YYINITDEPTH -- initial size of the parser's stacks.  */
04545 #ifndef YYINITDEPTH
04546 # define YYINITDEPTH 200
04547 #endif
04548 
04549 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
04550    if the built-in stack extension method is used).
04551 
04552    Do not make this value too large; the results are undefined if
04553    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
04554    evaluated with infinite-precision integer arithmetic.  */
04555 
04556 #ifndef YYMAXDEPTH
04557 # define YYMAXDEPTH 10000
04558 #endif
04559 
04560 
04561 
04562 #if YYERROR_VERBOSE
04563 
04564 # ifndef yystrlen
04565 #  if defined __GLIBC__ && defined _STRING_H
04566 #   define yystrlen strlen
04567 #  else
04568 /* Return the length of YYSTR.  */
04569 #if (defined __STDC__ || defined __C99__FUNC__ \
04570      || defined __cplusplus || defined _MSC_VER)
04571 static YYSIZE_T
04572 yystrlen (const char *yystr)
04573 #else
04574 static YYSIZE_T
04575 yystrlen (yystr)
04576     const char *yystr;
04577 #endif
04578 {
04579   YYSIZE_T yylen;
04580   for (yylen = 0; yystr[yylen]; yylen++)
04581     continue;
04582   return yylen;
04583 }
04584 #  endif
04585 # endif
04586 
04587 # ifndef yystpcpy
04588 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04589 #   define yystpcpy stpcpy
04590 #  else
04591 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
04592    YYDEST.  */
04593 #if (defined __STDC__ || defined __C99__FUNC__ \
04594      || defined __cplusplus || defined _MSC_VER)
04595 static char *
04596 yystpcpy (char *yydest, const char *yysrc)
04597 #else
04598 static char *
04599 yystpcpy (yydest, yysrc)
04600     char *yydest;
04601     const char *yysrc;
04602 #endif
04603 {
04604   char *yyd = yydest;
04605   const char *yys = yysrc;
04606 
04607   while ((*yyd++ = *yys++) != '\0')
04608     continue;
04609 
04610   return yyd - 1;
04611 }
04612 #  endif
04613 # endif
04614 
04615 # ifndef yytnamerr
04616 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
04617    quotes and backslashes, so that it's suitable for yyerror.  The
04618    heuristic is that double-quoting is unnecessary unless the string
04619    contains an apostrophe, a comma, or backslash (other than
04620    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
04621    null, do not copy; instead, return the length of what the result
04622    would have been.  */
04623 static YYSIZE_T
04624 yytnamerr (char *yyres, const char *yystr)
04625 {
04626   if (*yystr == '"')
04627     {
04628       YYSIZE_T yyn = 0;
04629       char const *yyp = yystr;
04630 
04631       for (;;)
04632         switch (*++yyp)
04633           {
04634           case '\'':
04635           case ',':
04636             goto do_not_strip_quotes;
04637 
04638           case '\\':
04639             if (*++yyp != '\\')
04640               goto do_not_strip_quotes;
04641             /* Fall through.  */
04642           default:
04643             if (yyres)
04644               yyres[yyn] = *yyp;
04645             yyn++;
04646             break;
04647 
04648           case '"':
04649             if (yyres)
04650               yyres[yyn] = '\0';
04651             return yyn;
04652           }
04653     do_not_strip_quotes: ;
04654     }
04655 
04656   if (! yyres)
04657     return yystrlen (yystr);
04658 
04659   return yystpcpy (yyres, yystr) - yyres;
04660 }
04661 # endif
04662 
04663 /* Copy into YYRESULT an error message about the unexpected token
04664    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
04665    including the terminating null byte.  If YYRESULT is null, do not
04666    copy anything; just return the number of bytes that would be
04667    copied.  As a special case, return 0 if an ordinary "syntax error"
04668    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
04669    size calculation.  */
04670 static YYSIZE_T
04671 yysyntax_error (char *yyresult, int yystate, int yychar)
04672 {
04673   int yyn = yypact[yystate];
04674 
04675   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
04676     return 0;
04677   else
04678     {
04679       int yytype = YYTRANSLATE (yychar);
04680       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
04681       YYSIZE_T yysize = yysize0;
04682       YYSIZE_T yysize1;
04683       int yysize_overflow = 0;
04684       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04685       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04686       int yyx;
04687 
04688 # if 0
04689       /* This is so xgettext sees the translatable formats that are
04690          constructed on the fly.  */
04691       YY_("syntax error, unexpected %s");
04692       YY_("syntax error, unexpected %s, expecting %s");
04693       YY_("syntax error, unexpected %s, expecting %s or %s");
04694       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
04695       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
04696 # endif
04697       char *yyfmt;
04698       char const *yyf;
04699       static char const yyunexpected[] = "syntax error, unexpected %s";
04700       static char const yyexpecting[] = ", expecting %s";
04701       static char const yyor[] = " or %s";
04702       char yyformat[sizeof yyunexpected
04703                     + sizeof yyexpecting - 1
04704                     + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
04705                        * (sizeof yyor - 1))];
04706       char const *yyprefix = yyexpecting;
04707 
04708       /* Start YYX at -YYN if negative to avoid negative indexes in
04709          YYCHECK.  */
04710       int yyxbegin = yyn < 0 ? -yyn : 0;
04711 
04712       /* Stay within bounds of both yycheck and yytname.  */
04713       int yychecklim = YYLAST - yyn + 1;
04714       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04715       int yycount = 1;
04716 
04717       yyarg[0] = yytname[yytype];
04718       yyfmt = yystpcpy (yyformat, yyunexpected);
04719 
04720       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04721         if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
04722           {
04723             if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04724               {
04725                 yycount = 1;
04726                 yysize = yysize0;
04727                 yyformat[sizeof yyunexpected - 1] = '\0';
04728                 break;
04729               }
04730             yyarg[yycount++] = yytname[yyx];
04731             yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04732             yysize_overflow |= (yysize1 < yysize);
04733             yysize = yysize1;
04734             yyfmt = yystpcpy (yyfmt, yyprefix);
04735             yyprefix = yyor;
04736           }
04737 
04738       yyf = YY_(yyformat);
04739       yysize1 = yysize + yystrlen (yyf);
04740       yysize_overflow |= (yysize1 < yysize);
04741       yysize = yysize1;
04742 
04743       if (yysize_overflow)
04744         return YYSIZE_MAXIMUM;
04745 
04746       if (yyresult)
04747         {
04748           /* Avoid sprintf, as that infringes on the user's name space.
04749              Don't have undefined behavior even if the translation
04750              produced a string with the wrong number of "%s"s.  */
04751           char *yyp = yyresult;
04752           int yyi = 0;
04753           while ((*yyp = *yyf) != '\0')
04754             {
04755               if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
04756                 {
04757                   yyp += yytnamerr (yyp, yyarg[yyi++]);
04758                   yyf += 2;
04759                 }
04760               else
04761                 {
04762                   yyp++;
04763                   yyf++;
04764                 }
04765             }
04766         }
04767       return yysize;
04768     }
04769 }
04770 #endif /* YYERROR_VERBOSE */
04771 
04772 
04773 /*-----------------------------------------------.
04774 | Release the memory associated to this symbol.  |
04775 `-----------------------------------------------*/
04776 
04777 /*ARGSUSED*/
04778 #if (defined __STDC__ || defined __C99__FUNC__ \
04779      || defined __cplusplus || defined _MSC_VER)
04780 static void
04781 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04782 #else
04783 static void
04784 yydestruct (yymsg, yytype, yyvaluep, parser)
04785     const char *yymsg;
04786     int yytype;
04787     YYSTYPE *yyvaluep;
04788     struct parser_params *parser;
04789 #endif
04790 {
04791   YYUSE (yyvaluep);
04792   YYUSE (parser);
04793 
04794   if (!yymsg)
04795     yymsg = "Deleting";
04796   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04797 
04798   switch (yytype)
04799     {
04800 
04801       default:
04802         break;
04803     }
04804 }
04805 
04806 
04807 /* Prevent warnings from -Wmissing-prototypes.  */
04808 
04809 #ifdef YYPARSE_PARAM
04810 #if defined __STDC__ || defined __cplusplus
04811 int yyparse (void *YYPARSE_PARAM);
04812 #else
04813 int yyparse ();
04814 #endif
04815 #else /* ! YYPARSE_PARAM */
04816 #if defined __STDC__ || defined __cplusplus
04817 int yyparse (struct parser_params *parser);
04818 #else
04819 int yyparse ();
04820 #endif
04821 #endif /* ! YYPARSE_PARAM */
04822 
04823 
04824 
04825 
04826 
04827 
04828 /*----------.
04829 | yyparse.  |
04830 `----------*/
04831 
04832 #ifdef YYPARSE_PARAM
04833 #if (defined __STDC__ || defined __C99__FUNC__ \
04834      || defined __cplusplus || defined _MSC_VER)
04835 int
04836 yyparse (void *YYPARSE_PARAM)
04837 #else
04838 int
04839 yyparse (YYPARSE_PARAM)
04840     void *YYPARSE_PARAM;
04841 #endif
04842 #else /* ! YYPARSE_PARAM */
04843 #if (defined __STDC__ || defined __C99__FUNC__ \
04844      || defined __cplusplus || defined _MSC_VER)
04845 int
04846 yyparse (struct parser_params *parser)
04847 #else
04848 int
04849 yyparse (parser)
04850     struct parser_params *parser;
04851 #endif
04852 #endif
04853 {
04854   /* The look-ahead symbol.  */
04855 int yychar;
04856 
04857 /* The semantic value of the look-ahead symbol.  */
04858 YYSTYPE yylval;
04859 
04860 /* Number of syntax errors so far.  */
04861 int yynerrs;
04862 
04863   int yystate;
04864   int yyn;
04865   int yyresult;
04866   /* Number of tokens to shift before error messages enabled.  */
04867   int yyerrstatus;
04868   /* Look-ahead token as an internal (translated) token number.  */
04869   int yytoken = 0;
04870 #if YYERROR_VERBOSE
04871   /* Buffer for error messages, and its allocated size.  */
04872   char yymsgbuf[128];
04873   char *yymsg = yymsgbuf;
04874   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04875 #endif
04876 
04877   /* Three stacks and their tools:
04878      `yyss': related to states,
04879      `yyvs': related to semantic values,
04880      `yyls': related to locations.
04881 
04882      Refer to the stacks thru separate pointers, to allow yyoverflow
04883      to reallocate them elsewhere.  */
04884 
04885   /* The state stack.  */
04886   yytype_int16 yyssa[YYINITDEPTH];
04887   yytype_int16 *yyss = yyssa;
04888   yytype_int16 *yyssp;
04889 
04890   /* The semantic value stack.  */
04891   YYSTYPE yyvsa[YYINITDEPTH];
04892   YYSTYPE *yyvs = yyvsa;
04893   YYSTYPE *yyvsp;
04894 
04895 
04896 
04897 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
04898 
04899   YYSIZE_T yystacksize = YYINITDEPTH;
04900 
04901   /* The variables used to return semantic value and location from the
04902      action routines.  */
04903   YYSTYPE yyval;
04904 
04905 
04906   /* The number of symbols on the RHS of the reduced rule.
04907      Keep to zero when no symbol should be popped.  */
04908   int yylen = 0;
04909 
04910   YYDPRINTF ((stderr, "Starting parse\n"));
04911 
04912   yystate = 0;
04913   yyerrstatus = 0;
04914   yynerrs = 0;
04915   yychar = YYEMPTY;             /* Cause a token to be read.  */
04916 
04917   /* Initialize stack pointers.
04918      Waste one element of value and location stack
04919      so that they stay on the same level as the state stack.
04920      The wasted elements are never initialized.  */
04921 
04922   yyssp = yyss;
04923   yyvsp = yyvs;
04924 
04925   goto yysetstate;
04926 
04927 /*------------------------------------------------------------.
04928 | yynewstate -- Push a new state, which is found in yystate.  |
04929 `------------------------------------------------------------*/
04930  yynewstate:
04931   /* In all cases, when you get here, the value and location stacks
04932      have just been pushed.  So pushing a state here evens the stacks.  */
04933   yyssp++;
04934 
04935  yysetstate:
04936   *yyssp = yystate;
04937 
04938   if (yyss + yystacksize - 1 <= yyssp)
04939     {
04940       /* Get the current used size of the three stacks, in elements.  */
04941       YYSIZE_T yysize = yyssp - yyss + 1;
04942 
04943 #ifdef yyoverflow
04944       {
04945         /* Give user a chance to reallocate the stack.  Use copies of
04946            these so that the &'s don't force the real ones into
04947            memory.  */
04948         YYSTYPE *yyvs1 = yyvs;
04949         yytype_int16 *yyss1 = yyss;
04950 
04951 
04952         /* Each stack pointer address is followed by the size of the
04953            data in use in that stack, in bytes.  This used to be a
04954            conditional around just the two extra args, but that might
04955            be undefined if yyoverflow is a macro.  */
04956         yyoverflow (YY_("memory exhausted"),
04957                     &yyss1, yysize * sizeof (*yyssp),
04958                     &yyvs1, yysize * sizeof (*yyvsp),
04959 
04960                     &yystacksize);
04961 
04962         yyss = yyss1;
04963         yyvs = yyvs1;
04964       }
04965 #else /* no yyoverflow */
04966 # ifndef YYSTACK_RELOCATE
04967       goto yyexhaustedlab;
04968 # else
04969       /* Extend the stack our own way.  */
04970       if (YYMAXDEPTH <= yystacksize)
04971         goto yyexhaustedlab;
04972       yystacksize *= 2;
04973       if (YYMAXDEPTH < yystacksize)
04974         yystacksize = YYMAXDEPTH;
04975 
04976       {
04977         yytype_int16 *yyss1 = yyss;
04978         union yyalloc *yyptr =
04979           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04980         if (! yyptr)
04981           goto yyexhaustedlab;
04982         YYSTACK_RELOCATE (yyss);
04983         YYSTACK_RELOCATE (yyvs);
04984 
04985 #  undef YYSTACK_RELOCATE
04986         if (yyss1 != yyssa)
04987           YYSTACK_FREE (yyss1);
04988       }
04989 # endif
04990 #endif /* no yyoverflow */
04991 
04992       yyssp = yyss + yysize - 1;
04993       yyvsp = yyvs + yysize - 1;
04994 
04995 
04996       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04997                   (unsigned long int) yystacksize));
04998 
04999       if (yyss + yystacksize - 1 <= yyssp)
05000         YYABORT;
05001     }
05002 
05003   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
05004 
05005   goto yybackup;
05006 
05007 /*-----------.
05008 | yybackup.  |
05009 `-----------*/
05010 yybackup:
05011 
05012   /* Do appropriate processing given the current state.  Read a
05013      look-ahead token if we need one and don't already have one.  */
05014 
05015   /* First try to decide what to do without reference to look-ahead token.  */
05016   yyn = yypact[yystate];
05017   if (yyn == YYPACT_NINF)
05018     goto yydefault;
05019 
05020   /* Not known => get a look-ahead token if don't already have one.  */
05021 
05022   /* YYCHAR is either YYEMPTY or YYEOF or a valid look-ahead symbol.  */
05023   if (yychar == YYEMPTY)
05024     {
05025       YYDPRINTF ((stderr, "Reading a token: "));
05026       yychar = YYLEX;
05027     }
05028 
05029   if (yychar <= YYEOF)
05030     {
05031       yychar = yytoken = YYEOF;
05032       YYDPRINTF ((stderr, "Now at end of input.\n"));
05033     }
05034   else
05035     {
05036       yytoken = YYTRANSLATE (yychar);
05037       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
05038     }
05039 
05040   /* If the proper action on seeing token YYTOKEN is to reduce or to
05041      detect an error, take that action.  */
05042   yyn += yytoken;
05043   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
05044     goto yydefault;
05045   yyn = yytable[yyn];
05046   if (yyn <= 0)
05047     {
05048       if (yyn == 0 || yyn == YYTABLE_NINF)
05049         goto yyerrlab;
05050       yyn = -yyn;
05051       goto yyreduce;
05052     }
05053 
05054   if (yyn == YYFINAL)
05055     YYACCEPT;
05056 
05057   /* Count tokens shifted since error; after three, turn off error
05058      status.  */
05059   if (yyerrstatus)
05060     yyerrstatus--;
05061 
05062   /* Shift the look-ahead token.  */
05063   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
05064 
05065   /* Discard the shifted token unless it is eof.  */
05066   if (yychar != YYEOF)
05067     yychar = YYEMPTY;
05068 
05069   yystate = yyn;
05070   *++yyvsp = yylval;
05071 
05072   goto yynewstate;
05073 
05074 
05075 /*-----------------------------------------------------------.
05076 | yydefault -- do the default action for the current state.  |
05077 `-----------------------------------------------------------*/
05078 yydefault:
05079   yyn = yydefact[yystate];
05080   if (yyn == 0)
05081     goto yyerrlab;
05082   goto yyreduce;
05083 
05084 
05085 /*-----------------------------.
05086 | yyreduce -- Do a reduction.  |
05087 `-----------------------------*/
05088 yyreduce:
05089   /* yyn is the number of a rule to reduce with.  */
05090   yylen = yyr2[yyn];
05091 
05092   /* If YYLEN is nonzero, implement the default value of the action:
05093      `$$ = $1'.
05094 
05095      Otherwise, the following line sets YYVAL to garbage.
05096      This behavior is undocumented and Bison
05097      users should not rely upon it.  Assigning to YYVAL
05098      unconditionally makes the parser a bit smaller, and it avoids a
05099      GCC warning that YYVAL may be used uninitialized.  */
05100   yyval = yyvsp[1-yylen];
05101 
05102 
05103   YY_REDUCE_PRINT (yyn);
05104   switch (yyn)
05105     {
05106         case 2:
05107 #line 782 "ripper.y"
05108     {
05109                         lex_state = EXPR_BEG;
05110 #if 0
05111                         local_push(compile_for_eval || rb_parse_in_main());
05112 #endif
05113                         local_push(0);
05114 
05115                     ;}
05116     break;
05117 
05118   case 3:
05119 #line 791 "ripper.y"
05120     {
05121 #if 0
05122                         if ((yyvsp[(2) - (2)].val) && !compile_for_eval) {
05123                             /* last expression should not be void */
05124                             if (nd_type((yyvsp[(2) - (2)].val)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].val));
05125                             else {
05126                                 NODE *node = (yyvsp[(2) - (2)].val);
05127                                 while (node->nd_next) {
05128                                     node = node->nd_next;
05129                                 }
05130                                 void_expr(node->nd_head);
05131                             }
05132                         }
05133                         ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].val)));
05134 #endif
05135                         (yyval.val) = (yyvsp[(2) - (2)].val);
05136                         parser->result = dispatch1(program, (yyval.val));
05137 
05138                         local_pop();
05139                     ;}
05140     break;
05141 
05142   case 4:
05143 #line 814 "ripper.y"
05144     {
05145 #if 0
05146                         void_stmts((yyvsp[(1) - (2)].val));
05147                         fixup_nodes(&deferred_nodes);
05148 #endif
05149 
05150                         (yyval.val) = (yyvsp[(1) - (2)].val);
05151                     ;}
05152     break;
05153 
05154   case 5:
05155 #line 825 "ripper.y"
05156     {
05157 #if 0
05158                         (yyval.val) = NEW_BEGIN(0);
05159 #endif
05160                         (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new),
05161                                                   dispatch0(void_stmt));
05162 
05163                     ;}
05164     break;
05165 
05166   case 6:
05167 #line 834 "ripper.y"
05168     {
05169 #if 0
05170                         (yyval.val) = newline_node((yyvsp[(1) - (1)].val));
05171 #endif
05172                         (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val));
05173 
05174                     ;}
05175     break;
05176 
05177   case 7:
05178 #line 842 "ripper.y"
05179     {
05180 #if 0
05181                         (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val)));
05182 #endif
05183                         (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05184 
05185                     ;}
05186     break;
05187 
05188   case 8:
05189 #line 850 "ripper.y"
05190     {
05191                         (yyval.val) = remove_begin((yyvsp[(2) - (2)].val));
05192                     ;}
05193     break;
05194 
05195   case 10:
05196 #line 857 "ripper.y"
05197     {
05198                         if (in_def || in_single) {
05199                             yyerror("BEGIN in method");
05200                         }
05201 #if 0
05202                         /* local_push(0); */
05203 #endif
05204 
05205                     ;}
05206     break;
05207 
05208   case 11:
05209 #line 867 "ripper.y"
05210     {
05211 #if 0
05212                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05213                                                             (yyvsp[(4) - (5)].val));
05214                         /* NEW_PREEXE($4)); */
05215                         /* local_pop(); */
05216                         (yyval.val) = NEW_BEGIN(0);
05217 #endif
05218                         (yyval.val) = dispatch1(BEGIN, (yyvsp[(4) - (5)].val));
05219 
05220                     ;}
05221     break;
05222 
05223   case 12:
05224 #line 884 "ripper.y"
05225     {
05226 #if 0
05227                         (yyval.val) = (yyvsp[(1) - (4)].val);
05228                         if ((yyvsp[(2) - (4)].val)) {
05229                             (yyval.val) = NEW_RESCUE((yyvsp[(1) - (4)].val), (yyvsp[(2) - (4)].val), (yyvsp[(3) - (4)].val));
05230                         }
05231                         else if ((yyvsp[(3) - (4)].val)) {
05232                             rb_warn0("else without rescue is useless");
05233                             (yyval.val) = block_append((yyval.val), (yyvsp[(3) - (4)].val));
05234                         }
05235                         if ((yyvsp[(4) - (4)].val)) {
05236                             if ((yyval.val)) {
05237                                 (yyval.val) = NEW_ENSURE((yyval.val), (yyvsp[(4) - (4)].val));
05238                             }
05239                             else {
05240                                 (yyval.val) = block_append((yyvsp[(4) - (4)].val), NEW_NIL());
05241                             }
05242                         }
05243                         fixpos((yyval.val), (yyvsp[(1) - (4)].val));
05244 #endif
05245                         (yyval.val) = dispatch4(bodystmt,
05246                                        escape_Qundef((yyvsp[(1) - (4)].val)),
05247                                        escape_Qundef((yyvsp[(2) - (4)].val)),
05248                                        escape_Qundef((yyvsp[(3) - (4)].val)),
05249                                        escape_Qundef((yyvsp[(4) - (4)].val)));
05250 
05251                     ;}
05252     break;
05253 
05254   case 13:
05255 #line 914 "ripper.y"
05256     {
05257 #if 0
05258                         void_stmts((yyvsp[(1) - (2)].val));
05259                         fixup_nodes(&deferred_nodes);
05260 #endif
05261 
05262                         (yyval.val) = (yyvsp[(1) - (2)].val);
05263                     ;}
05264     break;
05265 
05266   case 14:
05267 #line 925 "ripper.y"
05268     {
05269 #if 0
05270                         (yyval.val) = NEW_BEGIN(0);
05271 #endif
05272                         (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new),
05273                                                   dispatch0(void_stmt));
05274 
05275                     ;}
05276     break;
05277 
05278   case 15:
05279 #line 934 "ripper.y"
05280     {
05281 #if 0
05282                         (yyval.val) = newline_node((yyvsp[(1) - (1)].val));
05283 #endif
05284                         (yyval.val) = dispatch2(stmts_add, dispatch0(stmts_new), (yyvsp[(1) - (1)].val));
05285 
05286                     ;}
05287     break;
05288 
05289   case 16:
05290 #line 942 "ripper.y"
05291     {
05292 #if 0
05293                         (yyval.val) = block_append((yyvsp[(1) - (3)].val), newline_node((yyvsp[(3) - (3)].val)));
05294 #endif
05295                         (yyval.val) = dispatch2(stmts_add, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05296 
05297                     ;}
05298     break;
05299 
05300   case 17:
05301 #line 950 "ripper.y"
05302     {
05303                         (yyval.val) = remove_begin((yyvsp[(2) - (2)].val));
05304                     ;}
05305     break;
05306 
05307   case 18:
05308 #line 955 "ripper.y"
05309     {lex_state = EXPR_FNAME;;}
05310     break;
05311 
05312   case 19:
05313 #line 956 "ripper.y"
05314     {
05315 #if 0
05316                         (yyval.val) = NEW_ALIAS((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
05317 #endif
05318                         (yyval.val) = dispatch2(alias, (yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
05319 
05320                     ;}
05321     break;
05322 
05323   case 20:
05324 #line 964 "ripper.y"
05325     {
05326 #if 0
05327                         (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
05328 #endif
05329                         (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
05330 
05331                     ;}
05332     break;
05333 
05334   case 21:
05335 #line 972 "ripper.y"
05336     {
05337 #if 0
05338                         char buf[2];
05339                         buf[0] = '$';
05340                         buf[1] = (char)(yyvsp[(3) - (3)].val)->nd_nth;
05341                         (yyval.val) = NEW_VALIAS((yyvsp[(2) - (3)].val), rb_intern2(buf, 2));
05342 #endif
05343                         (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
05344 
05345                     ;}
05346     break;
05347 
05348   case 22:
05349 #line 983 "ripper.y"
05350     {
05351 #if 0
05352                         yyerror("can't make alias for the number variables");
05353                         (yyval.val) = NEW_BEGIN(0);
05354 #endif
05355                         (yyval.val) = dispatch2(var_alias, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
05356                         (yyval.val) = dispatch1(alias_error, (yyval.val));
05357 
05358                     ;}
05359     break;
05360 
05361   case 23:
05362 #line 993 "ripper.y"
05363     {
05364 #if 0
05365                         (yyval.val) = (yyvsp[(2) - (2)].val);
05366 #endif
05367                         (yyval.val) = dispatch1(undef, (yyvsp[(2) - (2)].val));
05368 
05369                     ;}
05370     break;
05371 
05372   case 24:
05373 #line 1001 "ripper.y"
05374     {
05375 #if 0
05376                         (yyval.val) = NEW_IF(cond((yyvsp[(3) - (3)].val)), remove_begin((yyvsp[(1) - (3)].val)), 0);
05377                         fixpos((yyval.val), (yyvsp[(3) - (3)].val));
05378 #endif
05379                         (yyval.val) = dispatch2(if_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
05380 
05381                     ;}
05382     break;
05383 
05384   case 25:
05385 #line 1010 "ripper.y"
05386     {
05387 #if 0
05388                         (yyval.val) = NEW_UNLESS(cond((yyvsp[(3) - (3)].val)), remove_begin((yyvsp[(1) - (3)].val)), 0);
05389                         fixpos((yyval.val), (yyvsp[(3) - (3)].val));
05390 #endif
05391                         (yyval.val) = dispatch2(unless_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
05392 
05393                     ;}
05394     break;
05395 
05396   case 26:
05397 #line 1019 "ripper.y"
05398     {
05399 #if 0
05400                         if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) {
05401                             (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0);
05402                         }
05403                         else {
05404                             (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1);
05405                         }
05406 #endif
05407                         (yyval.val) = dispatch2(while_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
05408 
05409                     ;}
05410     break;
05411 
05412   case 27:
05413 #line 1032 "ripper.y"
05414     {
05415 #if 0
05416                         if ((yyvsp[(1) - (3)].val) && nd_type((yyvsp[(1) - (3)].val)) == NODE_BEGIN) {
05417                             (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val)->nd_body, 0);
05418                         }
05419                         else {
05420                             (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (3)].val)), (yyvsp[(1) - (3)].val), 1);
05421                         }
05422 #endif
05423                         (yyval.val) = dispatch2(until_mod, (yyvsp[(3) - (3)].val), (yyvsp[(1) - (3)].val));
05424 
05425                     ;}
05426     break;
05427 
05428   case 28:
05429 #line 1045 "ripper.y"
05430     {
05431 #if 0
05432                         NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].val)), 0);
05433                         (yyval.val) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].val)), resq, 0);
05434 #endif
05435                         (yyval.val) = dispatch2(rescue_mod, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05436 
05437                     ;}
05438     break;
05439 
05440   case 29:
05441 #line 1054 "ripper.y"
05442     {
05443                         if (in_def || in_single) {
05444                             rb_warn0("END in method; use at_exit");
05445                         }
05446 #if 0
05447                         (yyval.val) = NEW_POSTEXE(NEW_NODE(
05448                             NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].val) /* body */, 0 /* args */));
05449 #endif
05450                         (yyval.val) = dispatch1(END, (yyvsp[(3) - (4)].val));
05451 
05452                     ;}
05453     break;
05454 
05455   case 31:
05456 #line 1067 "ripper.y"
05457     {
05458 #if 0
05459                         value_expr((yyvsp[(3) - (3)].val));
05460                         (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
05461                         (yyval.val) = (yyvsp[(1) - (3)].val);
05462 #endif
05463                         (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05464 
05465                     ;}
05466     break;
05467 
05468   case 32:
05469 #line 1077 "ripper.y"
05470     {
05471 #if 0
05472                         value_expr((yyvsp[(3) - (3)].val));
05473                         if ((yyvsp[(1) - (3)].val)) {
05474                             ID vid = (yyvsp[(1) - (3)].val)->nd_vid;
05475                             if ((yyvsp[(2) - (3)].val) == tOROP) {
05476                                 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
05477                                 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].val));
05478                                 if (is_asgn_or_id(vid)) {
05479                                     (yyval.val)->nd_aid = vid;
05480                                 }
05481                             }
05482                             else if ((yyvsp[(2) - (3)].val) == tANDOP) {
05483                                 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
05484                                 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].val));
05485                             }
05486                             else {
05487                                 (yyval.val) = (yyvsp[(1) - (3)].val);
05488                                 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].val), NEW_LIST((yyvsp[(3) - (3)].val)));
05489                             }
05490                         }
05491                         else {
05492                             (yyval.val) = NEW_BEGIN(0);
05493                         }
05494 #endif
05495                         (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
05496 
05497                     ;}
05498     break;
05499 
05500   case 33:
05501 #line 1106 "ripper.y"
05502     {
05503 #if 0
05504                         NODE *args;
05505 
05506                         value_expr((yyvsp[(6) - (6)].val));
05507                         if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY();
05508                         args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
05509                         if ((yyvsp[(5) - (6)].val) == tOROP) {
05510                             (yyvsp[(5) - (6)].val) = 0;
05511                         }
05512                         else if ((yyvsp[(5) - (6)].val) == tANDOP) {
05513                             (yyvsp[(5) - (6)].val) = 1;
05514                         }
05515                         (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args);
05516                         fixpos((yyval.val), (yyvsp[(1) - (6)].val));
05517 #endif
05518                         (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val)));
05519                         (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
05520 
05521                     ;}
05522     break;
05523 
05524   case 34:
05525 #line 1127 "ripper.y"
05526     {
05527 #if 0
05528                         value_expr((yyvsp[(5) - (5)].val));
05529                         if ((yyvsp[(4) - (5)].val) == tOROP) {
05530                             (yyvsp[(4) - (5)].val) = 0;
05531                         }
05532                         else if ((yyvsp[(4) - (5)].val) == tANDOP) {
05533                             (yyvsp[(4) - (5)].val) = 1;
05534                         }
05535                         (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
05536                         fixpos((yyval.val), (yyvsp[(1) - (5)].val));
05537 #endif
05538                         (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val));
05539                         (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
05540 
05541                     ;}
05542     break;
05543 
05544   case 35:
05545 #line 1144 "ripper.y"
05546     {
05547 #if 0
05548                         value_expr((yyvsp[(5) - (5)].val));
05549                         if ((yyvsp[(4) - (5)].val) == tOROP) {
05550                             (yyvsp[(4) - (5)].val) = 0;
05551                         }
05552                         else if ((yyvsp[(4) - (5)].val) == tANDOP) {
05553                             (yyvsp[(4) - (5)].val) = 1;
05554                         }
05555                         (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
05556                         fixpos((yyval.val), (yyvsp[(1) - (5)].val));
05557 #endif
05558                         (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val));
05559                         (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
05560 
05561                     ;}
05562     break;
05563 
05564   case 36:
05565 #line 1161 "ripper.y"
05566     {
05567 #if 0
05568                         yyerror("constant re-assignment");
05569                         (yyval.val) = 0;
05570 #endif
05571                         (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
05572                         (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
05573                         (yyval.val) = dispatch1(assign_error, (yyval.val));
05574 
05575                     ;}
05576     break;
05577 
05578   case 37:
05579 #line 1172 "ripper.y"
05580     {
05581 #if 0
05582                         value_expr((yyvsp[(5) - (5)].val));
05583                         if ((yyvsp[(4) - (5)].val) == tOROP) {
05584                             (yyvsp[(4) - (5)].val) = 0;
05585                         }
05586                         else if ((yyvsp[(4) - (5)].val) == tANDOP) {
05587                             (yyvsp[(4) - (5)].val) = 1;
05588                         }
05589                         (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
05590                         fixpos((yyval.val), (yyvsp[(1) - (5)].val));
05591 #endif
05592                         (yyval.val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val));
05593                         (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
05594 
05595                     ;}
05596     break;
05597 
05598   case 38:
05599 #line 1189 "ripper.y"
05600     {
05601 #if 0
05602                         rb_backref_error((yyvsp[(1) - (3)].val));
05603                         (yyval.val) = NEW_BEGIN(0);
05604 #endif
05605                         (yyval.val) = dispatch2(assign, dispatch1(var_field, (yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val));
05606                         (yyval.val) = dispatch1(assign_error, (yyval.val));
05607 
05608                     ;}
05609     break;
05610 
05611   case 39:
05612 #line 1199 "ripper.y"
05613     {
05614 #if 0
05615                         value_expr((yyvsp[(3) - (3)].val));
05616                         (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05617 #endif
05618                         (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05619 
05620                     ;}
05621     break;
05622 
05623   case 40:
05624 #line 1208 "ripper.y"
05625     {
05626 #if 0
05627                         (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
05628                         (yyval.val) = (yyvsp[(1) - (3)].val);
05629 #endif
05630                         (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05631 
05632                     ;}
05633     break;
05634 
05635   case 41:
05636 #line 1217 "ripper.y"
05637     {
05638 #if 0
05639                         (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
05640                         (yyval.val) = (yyvsp[(1) - (3)].val);
05641 #endif
05642                         (yyval.val) = dispatch2(massign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05643 
05644                     ;}
05645     break;
05646 
05647   case 43:
05648 #line 1229 "ripper.y"
05649     {
05650 #if 0
05651                         value_expr((yyvsp[(3) - (3)].val));
05652                         (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05653 #endif
05654                         (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05655 
05656                     ;}
05657     break;
05658 
05659   case 44:
05660 #line 1238 "ripper.y"
05661     {
05662 #if 0
05663                         value_expr((yyvsp[(3) - (3)].val));
05664                         (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05665 #endif
05666                         (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05667 
05668                     ;}
05669     break;
05670 
05671   case 46:
05672 #line 1251 "ripper.y"
05673     {
05674 #if 0
05675                         (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05676 #endif
05677                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("and"), (yyvsp[(3) - (3)].val));
05678 
05679                     ;}
05680     break;
05681 
05682   case 47:
05683 #line 1259 "ripper.y"
05684     {
05685 #if 0
05686                         (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05687 #endif
05688                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("or"), (yyvsp[(3) - (3)].val));
05689 
05690                     ;}
05691     break;
05692 
05693   case 48:
05694 #line 1267 "ripper.y"
05695     {
05696 #if 0
05697                         (yyval.val) = call_uni_op(cond((yyvsp[(3) - (3)].val)), '!');
05698 #endif
05699                         (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (3)].val));
05700 
05701                     ;}
05702     break;
05703 
05704   case 49:
05705 #line 1275 "ripper.y"
05706     {
05707 #if 0
05708                         (yyval.val) = call_uni_op(cond((yyvsp[(2) - (2)].val)), '!');
05709 #endif
05710                         (yyval.val) = dispatch2(unary, ripper_id2sym('!'), (yyvsp[(2) - (2)].val));
05711 
05712                     ;}
05713     break;
05714 
05715   case 51:
05716 #line 1286 "ripper.y"
05717     {
05718 #if 0
05719                         value_expr((yyvsp[(1) - (1)].val));
05720                         (yyval.val) = (yyvsp[(1) - (1)].val);
05721                         if (!(yyval.val)) (yyval.val) = NEW_NIL();
05722 #endif
05723                         (yyval.val) = (yyvsp[(1) - (1)].val);
05724 
05725                     ;}
05726     break;
05727 
05728   case 55:
05729 #line 1303 "ripper.y"
05730     {
05731 #if 0
05732                         (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
05733 #endif
05734                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val));
05735                         (yyval.val) = method_arg((yyval.val), (yyvsp[(4) - (4)].val));
05736 
05737                     ;}
05738     break;
05739 
05740   case 56:
05741 #line 1312 "ripper.y"
05742     {
05743 #if 0
05744                         (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
05745 #endif
05746                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val));
05747                         (yyval.val) = method_arg((yyval.val), (yyvsp[(4) - (4)].val));
05748 
05749                     ;}
05750     break;
05751 
05752   case 57:
05753 #line 1323 "ripper.y"
05754     {
05755                         (yyvsp[(1) - (1)].vars) = dyna_push();
05756 #if 0
05757                         (yyval.num) = ruby_sourceline;
05758 #endif
05759 
05760                     ;}
05761     break;
05762 
05763   case 58:
05764 #line 1333 "ripper.y"
05765     {
05766 #if 0
05767                         (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val));
05768                         nd_set_line((yyval.val), (yyvsp[(2) - (5)].num));
05769 #endif
05770                         (yyval.val) = dispatch2(brace_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val));
05771 
05772                         dyna_pop((yyvsp[(1) - (5)].vars));
05773                     ;}
05774     break;
05775 
05776   case 59:
05777 #line 1345 "ripper.y"
05778     {
05779 #if 0
05780                         (yyval.val) = NEW_FCALL((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
05781                         fixpos((yyval.val), (yyvsp[(2) - (2)].val));
05782 #endif
05783                         (yyval.val) = dispatch2(command, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
05784 
05785                     ;}
05786     break;
05787 
05788   case 60:
05789 #line 1354 "ripper.y"
05790     {
05791 #if 0
05792                         block_dup_check((yyvsp[(2) - (3)].val),(yyvsp[(3) - (3)].val));
05793                         (yyvsp[(3) - (3)].val)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
05794                         (yyval.val) = (yyvsp[(3) - (3)].val);
05795                         fixpos((yyval.val), (yyvsp[(2) - (3)].val));
05796 #endif
05797                         (yyval.val) = dispatch2(command, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
05798                         (yyval.val) = method_add_block((yyval.val), (yyvsp[(3) - (3)].val));
05799 
05800                     ;}
05801     break;
05802 
05803   case 61:
05804 #line 1366 "ripper.y"
05805     {
05806 #if 0
05807                         (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
05808                         fixpos((yyval.val), (yyvsp[(1) - (4)].val));
05809 #endif
05810                         (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
05811 
05812                     ;}
05813     break;
05814 
05815   case 62:
05816 #line 1375 "ripper.y"
05817     {
05818 #if 0
05819                         block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val));
05820                         (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
05821                         (yyval.val) = (yyvsp[(5) - (5)].val);
05822                         fixpos((yyval.val), (yyvsp[(1) - (5)].val));
05823 #endif
05824                         (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
05825                         (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
05826 
05827                    ;}
05828     break;
05829 
05830   case 63:
05831 #line 1387 "ripper.y"
05832     {
05833 #if 0
05834                         (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
05835                         fixpos((yyval.val), (yyvsp[(1) - (4)].val));
05836 #endif
05837                         (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
05838 
05839                     ;}
05840     break;
05841 
05842   case 64:
05843 #line 1396 "ripper.y"
05844     {
05845 #if 0
05846                         block_dup_check((yyvsp[(4) - (5)].val),(yyvsp[(5) - (5)].val));
05847                         (yyvsp[(5) - (5)].val)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
05848                         (yyval.val) = (yyvsp[(5) - (5)].val);
05849                         fixpos((yyval.val), (yyvsp[(1) - (5)].val));
05850 #endif
05851                         (yyval.val) = dispatch4(command_call, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val));
05852                         (yyval.val) = method_add_block((yyval.val), (yyvsp[(5) - (5)].val));
05853 
05854                    ;}
05855     break;
05856 
05857   case 65:
05858 #line 1408 "ripper.y"
05859     {
05860 #if 0
05861                         (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val));
05862                         fixpos((yyval.val), (yyvsp[(2) - (2)].val));
05863 #endif
05864                         (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val));
05865 
05866                     ;}
05867     break;
05868 
05869   case 66:
05870 #line 1417 "ripper.y"
05871     {
05872 #if 0
05873                         (yyval.val) = new_yield((yyvsp[(2) - (2)].val));
05874                         fixpos((yyval.val), (yyvsp[(2) - (2)].val));
05875 #endif
05876                         (yyval.val) = dispatch1(yield, (yyvsp[(2) - (2)].val));
05877 
05878                     ;}
05879     break;
05880 
05881   case 67:
05882 #line 1426 "ripper.y"
05883     {
05884 #if 0
05885                         (yyval.val) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].val)));
05886 #endif
05887                         (yyval.val) = dispatch1(return, (yyvsp[(2) - (2)].val));
05888 
05889                     ;}
05890     break;
05891 
05892   case 68:
05893 #line 1434 "ripper.y"
05894     {
05895 #if 0
05896                         (yyval.val) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].val)));
05897 #endif
05898                         (yyval.val) = dispatch1(break, (yyvsp[(2) - (2)].val));
05899 
05900                     ;}
05901     break;
05902 
05903   case 69:
05904 #line 1442 "ripper.y"
05905     {
05906 #if 0
05907                         (yyval.val) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].val)));
05908 #endif
05909                         (yyval.val) = dispatch1(next, (yyvsp[(2) - (2)].val));
05910 
05911                     ;}
05912     break;
05913 
05914   case 71:
05915 #line 1453 "ripper.y"
05916     {
05917 #if 0
05918                         (yyval.val) = (yyvsp[(2) - (3)].val);
05919 #endif
05920                         (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
05921 
05922                     ;}
05923     break;
05924 
05925   case 73:
05926 #line 1464 "ripper.y"
05927     {
05928 #if 0
05929                         (yyval.val) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].val)), 0);
05930 #endif
05931                         (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
05932 
05933                     ;}
05934     break;
05935 
05936   case 74:
05937 #line 1474 "ripper.y"
05938     {
05939 #if 0
05940                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0);
05941 #endif
05942                         (yyval.val) = (yyvsp[(1) - (1)].val);
05943 
05944                     ;}
05945     break;
05946 
05947   case 75:
05948 #line 1482 "ripper.y"
05949     {
05950 #if 0
05951                         (yyval.val) = NEW_MASGN(list_append((yyvsp[(1) - (2)].val),(yyvsp[(2) - (2)].val)), 0);
05952 #endif
05953                         (yyval.val) = mlhs_add((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
05954 
05955                     ;}
05956     break;
05957 
05958   case 76:
05959 #line 1490 "ripper.y"
05960     {
05961 #if 0
05962                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05963 #endif
05964                         (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
05965 
05966                     ;}
05967     break;
05968 
05969   case 77:
05970 #line 1498 "ripper.y"
05971     {
05972 #if 0
05973                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG((yyvsp[(3) - (5)].val),(yyvsp[(5) - (5)].val)));
05974 #endif
05975                         (yyvsp[(1) - (5)].val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
05976                         (yyval.val) = mlhs_add((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val));
05977 
05978                     ;}
05979     break;
05980 
05981   case 78:
05982 #line 1507 "ripper.y"
05983     {
05984 #if 0
05985                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (2)].val), -1);
05986 #endif
05987                         (yyval.val) = mlhs_add_star((yyvsp[(1) - (2)].val), Qnil);
05988 
05989                     ;}
05990     break;
05991 
05992   case 79:
05993 #line 1515 "ripper.y"
05994     {
05995 #if 0
05996                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), NEW_POSTARG(-1, (yyvsp[(4) - (4)].val)));
05997 #endif
05998                         (yyvsp[(1) - (4)].val) = mlhs_add_star((yyvsp[(1) - (4)].val), Qnil);
05999                         (yyval.val) = mlhs_add((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
06000 
06001                     ;}
06002     break;
06003 
06004   case 80:
06005 #line 1524 "ripper.y"
06006     {
06007 #if 0
06008                         (yyval.val) = NEW_MASGN(0, (yyvsp[(2) - (2)].val));
06009 #endif
06010                         (yyval.val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (2)].val));
06011 
06012                     ;}
06013     break;
06014 
06015   case 81:
06016 #line 1532 "ripper.y"
06017     {
06018 #if 0
06019                         (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].val),(yyvsp[(4) - (4)].val)));
06020 #endif
06021                         (yyvsp[(2) - (4)].val) = mlhs_add_star(mlhs_new(), (yyvsp[(2) - (4)].val));
06022                         (yyval.val) = mlhs_add((yyvsp[(2) - (4)].val), (yyvsp[(4) - (4)].val));
06023 
06024                     ;}
06025     break;
06026 
06027   case 82:
06028 #line 1541 "ripper.y"
06029     {
06030 #if 0
06031                         (yyval.val) = NEW_MASGN(0, -1);
06032 #endif
06033                         (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
06034 
06035                     ;}
06036     break;
06037 
06038   case 83:
06039 #line 1549 "ripper.y"
06040     {
06041 #if 0
06042                         (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val)));
06043 #endif
06044                         (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
06045                         (yyval.val) = mlhs_add((yyval.val), (yyvsp[(3) - (3)].val));
06046 
06047                     ;}
06048     break;
06049 
06050   case 85:
06051 #line 1561 "ripper.y"
06052     {
06053 #if 0
06054                         (yyval.val) = (yyvsp[(2) - (3)].val);
06055 #endif
06056                         (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
06057 
06058                     ;}
06059     break;
06060 
06061   case 86:
06062 #line 1571 "ripper.y"
06063     {
06064 #if 0
06065                         (yyval.val) = NEW_LIST((yyvsp[(1) - (2)].val));
06066 #endif
06067                         (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (2)].val));
06068 
06069                     ;}
06070     break;
06071 
06072   case 87:
06073 #line 1579 "ripper.y"
06074     {
06075 #if 0
06076                         (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
06077 #endif
06078                         (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
06079 
06080                     ;}
06081     break;
06082 
06083   case 88:
06084 #line 1589 "ripper.y"
06085     {
06086 #if 0
06087                         (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
06088 #endif
06089                         (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val));
06090 
06091                     ;}
06092     break;
06093 
06094   case 89:
06095 #line 1597 "ripper.y"
06096     {
06097 #if 0
06098                         (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06099 #endif
06100                         (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06101 
06102                     ;}
06103     break;
06104 
06105   case 90:
06106 #line 1607 "ripper.y"
06107     {
06108                         (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
06109                     ;}
06110     break;
06111 
06112   case 91:
06113 #line 1611 "ripper.y"
06114     {
06115                         (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
06116                     ;}
06117     break;
06118 
06119   case 92:
06120 #line 1615 "ripper.y"
06121     {
06122 #if 0
06123                         (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
06124 #endif
06125                         (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
06126 
06127                     ;}
06128     break;
06129 
06130   case 93:
06131 #line 1623 "ripper.y"
06132     {
06133 #if 0
06134                         (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06135 #endif
06136                         (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val));
06137 
06138                     ;}
06139     break;
06140 
06141   case 94:
06142 #line 1631 "ripper.y"
06143     {
06144 #if 0
06145                         (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06146 #endif
06147                         (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06148 
06149                     ;}
06150     break;
06151 
06152   case 95:
06153 #line 1639 "ripper.y"
06154     {
06155 #if 0
06156                         (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06157 #endif
06158                         (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val));
06159 
06160                     ;}
06161     break;
06162 
06163   case 96:
06164 #line 1647 "ripper.y"
06165     {
06166 #if 0
06167                         if (in_def || in_single)
06168                             yyerror("dynamic constant assignment");
06169                         (yyval.val) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)));
06170 #endif
06171                         if (in_def || in_single)
06172                             yyerror("dynamic constant assignment");
06173                         (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06174 
06175                     ;}
06176     break;
06177 
06178   case 97:
06179 #line 1659 "ripper.y"
06180     {
06181 #if 0
06182                         if (in_def || in_single)
06183                             yyerror("dynamic constant assignment");
06184                         (yyval.val) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].val)));
06185 #endif
06186                         (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (2)].val));
06187 
06188                     ;}
06189     break;
06190 
06191   case 98:
06192 #line 1669 "ripper.y"
06193     {
06194 #if 0
06195                         rb_backref_error((yyvsp[(1) - (1)].val));
06196                         (yyval.val) = NEW_BEGIN(0);
06197 #endif
06198                         (yyval.val) = dispatch1(var_field, (yyvsp[(1) - (1)].val));
06199                         (yyval.val) = dispatch1(assign_error, (yyval.val));
06200 
06201                     ;}
06202     break;
06203 
06204   case 99:
06205 #line 1681 "ripper.y"
06206     {
06207                         (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
06208 #if 0
06209                         if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0);
06210 #endif
06211                         (yyval.val) = dispatch1(var_field, (yyval.val));
06212 
06213                     ;}
06214     break;
06215 
06216   case 100:
06217 #line 1690 "ripper.y"
06218     {
06219                         (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
06220 #if 0
06221                         if (!(yyval.val)) (yyval.val) = NEW_BEGIN(0);
06222 #endif
06223                         (yyval.val) = dispatch1(var_field, (yyval.val));
06224 
06225                     ;}
06226     break;
06227 
06228   case 101:
06229 #line 1699 "ripper.y"
06230     {
06231 #if 0
06232                         (yyval.val) = aryset((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
06233 #endif
06234                         (yyval.val) = dispatch2(aref_field, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
06235 
06236                     ;}
06237     break;
06238 
06239   case 102:
06240 #line 1707 "ripper.y"
06241     {
06242 #if 0
06243                         (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06244 #endif
06245                         (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val));
06246 
06247                     ;}
06248     break;
06249 
06250   case 103:
06251 #line 1715 "ripper.y"
06252     {
06253 #if 0
06254                         (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06255 #endif
06256                         (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_intern("::"), (yyvsp[(3) - (3)].val));
06257 
06258                     ;}
06259     break;
06260 
06261   case 104:
06262 #line 1723 "ripper.y"
06263     {
06264 #if 0
06265                         (yyval.val) = attrset((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06266 #endif
06267                         (yyval.val) = dispatch3(field, (yyvsp[(1) - (3)].val), ripper_id2sym('.'), (yyvsp[(3) - (3)].val));
06268 
06269                     ;}
06270     break;
06271 
06272   case 105:
06273 #line 1731 "ripper.y"
06274     {
06275 #if 0
06276                         if (in_def || in_single)
06277                             yyerror("dynamic constant assignment");
06278                         (yyval.val) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val)));
06279 #endif
06280                         (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06281                         if (in_def || in_single) {
06282                             (yyval.val) = dispatch1(assign_error, (yyval.val));
06283                         }
06284 
06285                     ;}
06286     break;
06287 
06288   case 106:
06289 #line 1744 "ripper.y"
06290     {
06291 #if 0
06292                         if (in_def || in_single)
06293                             yyerror("dynamic constant assignment");
06294                         (yyval.val) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].val)));
06295 #endif
06296                         (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (2)].val));
06297                         if (in_def || in_single) {
06298                             (yyval.val) = dispatch1(assign_error, (yyval.val));
06299                         }
06300 
06301                     ;}
06302     break;
06303 
06304   case 107:
06305 #line 1757 "ripper.y"
06306     {
06307 #if 0
06308                         rb_backref_error((yyvsp[(1) - (1)].val));
06309                         (yyval.val) = NEW_BEGIN(0);
06310 #endif
06311                         (yyval.val) = dispatch1(assign_error, (yyvsp[(1) - (1)].val));
06312 
06313                     ;}
06314     break;
06315 
06316   case 108:
06317 #line 1768 "ripper.y"
06318     {
06319 #if 0
06320                         yyerror("class/module name must be CONSTANT");
06321 #endif
06322                         (yyval.val) = dispatch1(class_name_error, (yyvsp[(1) - (1)].val));
06323 
06324                     ;}
06325     break;
06326 
06327   case 110:
06328 #line 1779 "ripper.y"
06329     {
06330 #if 0
06331                         (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val));
06332 #endif
06333                         (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val));
06334 
06335                     ;}
06336     break;
06337 
06338   case 111:
06339 #line 1787 "ripper.y"
06340     {
06341 #if 0
06342                         (yyval.val) = NEW_COLON2(0, (yyval.val));
06343 #endif
06344                         (yyval.val) = dispatch1(const_ref, (yyvsp[(1) - (1)].val));
06345 
06346                     ;}
06347     break;
06348 
06349   case 112:
06350 #line 1795 "ripper.y"
06351     {
06352 #if 0
06353                         (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06354 #endif
06355                         (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06356 
06357                     ;}
06358     break;
06359 
06360   case 116:
06361 #line 1808 "ripper.y"
06362     {
06363                         lex_state = EXPR_ENDFN;
06364                         (yyval.val) = (yyvsp[(1) - (1)].val);
06365                     ;}
06366     break;
06367 
06368   case 117:
06369 #line 1813 "ripper.y"
06370     {
06371                         lex_state = EXPR_ENDFN;
06372 #if 0
06373                         (yyval.val) = (yyvsp[(1) - (1)].id);
06374 #endif
06375                         (yyval.val) = (yyvsp[(1) - (1)].val);
06376 
06377                     ;}
06378     break;
06379 
06380   case 120:
06381 #line 1828 "ripper.y"
06382     {
06383 #if 0
06384                         (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val)));
06385 #endif
06386                         (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val));
06387 
06388                     ;}
06389     break;
06390 
06391   case 122:
06392 #line 1839 "ripper.y"
06393     {
06394 #if 0
06395                         (yyval.val) = NEW_UNDEF((yyvsp[(1) - (1)].val));
06396 #endif
06397                         (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
06398 
06399                     ;}
06400     break;
06401 
06402   case 123:
06403 #line 1846 "ripper.y"
06404     {lex_state = EXPR_FNAME;;}
06405     break;
06406 
06407   case 124:
06408 #line 1847 "ripper.y"
06409     {
06410 #if 0
06411                         (yyval.val) = block_append((yyvsp[(1) - (4)].val), NEW_UNDEF((yyvsp[(4) - (4)].val)));
06412 #endif
06413                         rb_ary_push((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
06414 
06415                     ;}
06416     break;
06417 
06418   case 125:
06419 #line 1856 "ripper.y"
06420     { ifndef_ripper((yyval.val) = '|'); ;}
06421     break;
06422 
06423   case 126:
06424 #line 1857 "ripper.y"
06425     { ifndef_ripper((yyval.val) = '^'); ;}
06426     break;
06427 
06428   case 127:
06429 #line 1858 "ripper.y"
06430     { ifndef_ripper((yyval.val) = '&'); ;}
06431     break;
06432 
06433   case 128:
06434 #line 1859 "ripper.y"
06435     { ifndef_ripper((yyval.val) = tCMP); ;}
06436     break;
06437 
06438   case 129:
06439 #line 1860 "ripper.y"
06440     { ifndef_ripper((yyval.val) = tEQ); ;}
06441     break;
06442 
06443   case 130:
06444 #line 1861 "ripper.y"
06445     { ifndef_ripper((yyval.val) = tEQQ); ;}
06446     break;
06447 
06448   case 131:
06449 #line 1862 "ripper.y"
06450     { ifndef_ripper((yyval.val) = tMATCH); ;}
06451     break;
06452 
06453   case 132:
06454 #line 1863 "ripper.y"
06455     { ifndef_ripper((yyval.val) = tNMATCH); ;}
06456     break;
06457 
06458   case 133:
06459 #line 1864 "ripper.y"
06460     { ifndef_ripper((yyval.val) = '>'); ;}
06461     break;
06462 
06463   case 134:
06464 #line 1865 "ripper.y"
06465     { ifndef_ripper((yyval.val) = tGEQ); ;}
06466     break;
06467 
06468   case 135:
06469 #line 1866 "ripper.y"
06470     { ifndef_ripper((yyval.val) = '<'); ;}
06471     break;
06472 
06473   case 136:
06474 #line 1867 "ripper.y"
06475     { ifndef_ripper((yyval.val) = tLEQ); ;}
06476     break;
06477 
06478   case 137:
06479 #line 1868 "ripper.y"
06480     { ifndef_ripper((yyval.val) = tNEQ); ;}
06481     break;
06482 
06483   case 138:
06484 #line 1869 "ripper.y"
06485     { ifndef_ripper((yyval.val) = tLSHFT); ;}
06486     break;
06487 
06488   case 139:
06489 #line 1870 "ripper.y"
06490     { ifndef_ripper((yyval.val) = tRSHFT); ;}
06491     break;
06492 
06493   case 140:
06494 #line 1871 "ripper.y"
06495     { ifndef_ripper((yyval.val) = '+'); ;}
06496     break;
06497 
06498   case 141:
06499 #line 1872 "ripper.y"
06500     { ifndef_ripper((yyval.val) = '-'); ;}
06501     break;
06502 
06503   case 142:
06504 #line 1873 "ripper.y"
06505     { ifndef_ripper((yyval.val) = '*'); ;}
06506     break;
06507 
06508   case 143:
06509 #line 1874 "ripper.y"
06510     { ifndef_ripper((yyval.val) = '*'); ;}
06511     break;
06512 
06513   case 144:
06514 #line 1875 "ripper.y"
06515     { ifndef_ripper((yyval.val) = '/'); ;}
06516     break;
06517 
06518   case 145:
06519 #line 1876 "ripper.y"
06520     { ifndef_ripper((yyval.val) = '%'); ;}
06521     break;
06522 
06523   case 146:
06524 #line 1877 "ripper.y"
06525     { ifndef_ripper((yyval.val) = tPOW); ;}
06526     break;
06527 
06528   case 147:
06529 #line 1878 "ripper.y"
06530     { ifndef_ripper((yyval.val) = '!'); ;}
06531     break;
06532 
06533   case 148:
06534 #line 1879 "ripper.y"
06535     { ifndef_ripper((yyval.val) = '~'); ;}
06536     break;
06537 
06538   case 149:
06539 #line 1880 "ripper.y"
06540     { ifndef_ripper((yyval.val) = tUPLUS); ;}
06541     break;
06542 
06543   case 150:
06544 #line 1881 "ripper.y"
06545     { ifndef_ripper((yyval.val) = tUMINUS); ;}
06546     break;
06547 
06548   case 151:
06549 #line 1882 "ripper.y"
06550     { ifndef_ripper((yyval.val) = tAREF); ;}
06551     break;
06552 
06553   case 152:
06554 #line 1883 "ripper.y"
06555     { ifndef_ripper((yyval.val) = tASET); ;}
06556     break;
06557 
06558   case 153:
06559 #line 1884 "ripper.y"
06560     { ifndef_ripper((yyval.val) = '`'); ;}
06561     break;
06562 
06563   case 195:
06564 #line 1902 "ripper.y"
06565     {
06566 #if 0
06567                         value_expr((yyvsp[(3) - (3)].val));
06568                         (yyval.val) = node_assign((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06569 #endif
06570                         (yyval.val) = dispatch2(assign, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06571 
06572                     ;}
06573     break;
06574 
06575   case 196:
06576 #line 1911 "ripper.y"
06577     {
06578 #if 0
06579                         value_expr((yyvsp[(3) - (5)].val));
06580                         (yyvsp[(3) - (5)].val) = NEW_RESCUE((yyvsp[(3) - (5)].val), NEW_RESBODY(0,(yyvsp[(5) - (5)].val),0), 0);
06581                         (yyval.val) = node_assign((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
06582 #endif
06583                         (yyval.val) = dispatch2(assign, (yyvsp[(1) - (5)].val), dispatch2(rescue_mod, (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val)));
06584 
06585                     ;}
06586     break;
06587 
06588   case 197:
06589 #line 1921 "ripper.y"
06590     {
06591 #if 0
06592                         value_expr((yyvsp[(3) - (3)].val));
06593                         if ((yyvsp[(1) - (3)].val)) {
06594                             ID vid = (yyvsp[(1) - (3)].val)->nd_vid;
06595                             if ((yyvsp[(2) - (3)].val) == tOROP) {
06596                                 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
06597                                 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].val));
06598                                 if (is_asgn_or_id(vid)) {
06599                                     (yyval.val)->nd_aid = vid;
06600                                 }
06601                             }
06602                             else if ((yyvsp[(2) - (3)].val) == tANDOP) {
06603                                 (yyvsp[(1) - (3)].val)->nd_value = (yyvsp[(3) - (3)].val);
06604                                 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].val));
06605                             }
06606                             else {
06607                                 (yyval.val) = (yyvsp[(1) - (3)].val);
06608                                 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].val), NEW_LIST((yyvsp[(3) - (3)].val)));
06609                             }
06610                         }
06611                         else {
06612                             (yyval.val) = NEW_BEGIN(0);
06613                         }
06614 #endif
06615                         (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
06616 
06617                     ;}
06618     break;
06619 
06620   case 198:
06621 #line 1950 "ripper.y"
06622     {
06623 #if 0
06624                         value_expr((yyvsp[(3) - (5)].val));
06625                         (yyvsp[(3) - (5)].val) = NEW_RESCUE((yyvsp[(3) - (5)].val), NEW_RESBODY(0,(yyvsp[(5) - (5)].val),0), 0);
06626                         if ((yyvsp[(1) - (5)].val)) {
06627                             ID vid = (yyvsp[(1) - (5)].val)->nd_vid;
06628                             if ((yyvsp[(2) - (5)].val) == tOROP) {
06629                                 (yyvsp[(1) - (5)].val)->nd_value = (yyvsp[(3) - (5)].val);
06630                                 (yyval.val) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].val));
06631                                 if (is_asgn_or_id(vid)) {
06632                                     (yyval.val)->nd_aid = vid;
06633                                 }
06634                             }
06635                             else if ((yyvsp[(2) - (5)].val) == tANDOP) {
06636                                 (yyvsp[(1) - (5)].val)->nd_value = (yyvsp[(3) - (5)].val);
06637                                 (yyval.val) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].val));
06638                             }
06639                             else {
06640                                 (yyval.val) = (yyvsp[(1) - (5)].val);
06641                                 (yyval.val)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].val), NEW_LIST((yyvsp[(3) - (5)].val)));
06642                             }
06643                         }
06644                         else {
06645                             (yyval.val) = NEW_BEGIN(0);
06646                         }
06647 #endif
06648                         (yyvsp[(3) - (5)].val) = dispatch2(rescue_mod, (yyvsp[(3) - (5)].val), (yyvsp[(5) - (5)].val));
06649                         (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(2) - (5)].val), (yyvsp[(3) - (5)].val));
06650 
06651                     ;}
06652     break;
06653 
06654   case 199:
06655 #line 1981 "ripper.y"
06656     {
06657 #if 0
06658                         NODE *args;
06659 
06660                         value_expr((yyvsp[(6) - (6)].val));
06661                         if (!(yyvsp[(3) - (6)].val)) (yyvsp[(3) - (6)].val) = NEW_ZARRAY();
06662                         if (nd_type((yyvsp[(3) - (6)].val)) == NODE_BLOCK_PASS) {
06663                             args = NEW_ARGSCAT((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
06664                         }
06665                         else {
06666                             args = arg_concat((yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
06667                         }
06668                         if ((yyvsp[(5) - (6)].val) == tOROP) {
06669                             (yyvsp[(5) - (6)].val) = 0;
06670                         }
06671                         else if ((yyvsp[(5) - (6)].val) == tANDOP) {
06672                             (yyvsp[(5) - (6)].val) = 1;
06673                         }
06674                         (yyval.val) = NEW_OP_ASGN1((yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), args);
06675                         fixpos((yyval.val), (yyvsp[(1) - (6)].val));
06676 #endif
06677                         (yyvsp[(1) - (6)].val) = dispatch2(aref_field, (yyvsp[(1) - (6)].val), escape_Qundef((yyvsp[(3) - (6)].val)));
06678                         (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
06679 
06680                     ;}
06681     break;
06682 
06683   case 200:
06684 #line 2007 "ripper.y"
06685     {
06686 #if 0
06687                         value_expr((yyvsp[(5) - (5)].val));
06688                         if ((yyvsp[(4) - (5)].val) == tOROP) {
06689                             (yyvsp[(4) - (5)].val) = 0;
06690                         }
06691                         else if ((yyvsp[(4) - (5)].val) == tANDOP) {
06692                             (yyvsp[(4) - (5)].val) = 1;
06693                         }
06694                         (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
06695                         fixpos((yyval.val), (yyvsp[(1) - (5)].val));
06696 #endif
06697                         (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val));
06698                         (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
06699 
06700                     ;}
06701     break;
06702 
06703   case 201:
06704 #line 2024 "ripper.y"
06705     {
06706 #if 0
06707                         value_expr((yyvsp[(5) - (5)].val));
06708                         if ((yyvsp[(4) - (5)].val) == tOROP) {
06709                             (yyvsp[(4) - (5)].val) = 0;
06710                         }
06711                         else if ((yyvsp[(4) - (5)].val) == tANDOP) {
06712                             (yyvsp[(4) - (5)].val) = 1;
06713                         }
06714                         (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
06715                         fixpos((yyval.val), (yyvsp[(1) - (5)].val));
06716 #endif
06717                         (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_id2sym('.'), (yyvsp[(3) - (5)].val));
06718                         (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
06719 
06720                     ;}
06721     break;
06722 
06723   case 202:
06724 #line 2041 "ripper.y"
06725     {
06726 #if 0
06727                         value_expr((yyvsp[(5) - (5)].val));
06728                         if ((yyvsp[(4) - (5)].val) == tOROP) {
06729                             (yyvsp[(4) - (5)].val) = 0;
06730                         }
06731                         else if ((yyvsp[(4) - (5)].val) == tANDOP) {
06732                             (yyvsp[(4) - (5)].val) = 1;
06733                         }
06734                         (yyval.val) = NEW_OP_ASGN2((yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
06735                         fixpos((yyval.val), (yyvsp[(1) - (5)].val));
06736 #endif
06737                         (yyvsp[(1) - (5)].val) = dispatch3(field, (yyvsp[(1) - (5)].val), ripper_intern("::"), (yyvsp[(3) - (5)].val));
06738                         (yyval.val) = dispatch3(opassign, (yyvsp[(1) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
06739 
06740                     ;}
06741     break;
06742 
06743   case 203:
06744 #line 2058 "ripper.y"
06745     {
06746 #if 0
06747                         yyerror("constant re-assignment");
06748                         (yyval.val) = NEW_BEGIN(0);
06749 #endif
06750                         (yyval.val) = dispatch2(const_path_field, (yyvsp[(1) - (5)].val), (yyvsp[(3) - (5)].val));
06751                         (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
06752                         (yyval.val) = dispatch1(assign_error, (yyval.val));
06753 
06754                     ;}
06755     break;
06756 
06757   case 204:
06758 #line 2069 "ripper.y"
06759     {
06760 #if 0
06761                         yyerror("constant re-assignment");
06762                         (yyval.val) = NEW_BEGIN(0);
06763 #endif
06764                         (yyval.val) = dispatch1(top_const_field, (yyvsp[(2) - (4)].val));
06765                         (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
06766                         (yyval.val) = dispatch1(assign_error, (yyval.val));
06767 
06768                     ;}
06769     break;
06770 
06771   case 205:
06772 #line 2080 "ripper.y"
06773     {
06774 #if 0
06775                         rb_backref_error((yyvsp[(1) - (3)].val));
06776                         (yyval.val) = NEW_BEGIN(0);
06777 #endif
06778                         (yyval.val) = dispatch1(var_field, (yyvsp[(1) - (3)].val));
06779                         (yyval.val) = dispatch3(opassign, (yyval.val), (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
06780                         (yyval.val) = dispatch1(assign_error, (yyval.val));
06781 
06782                     ;}
06783     break;
06784 
06785   case 206:
06786 #line 2091 "ripper.y"
06787     {
06788 #if 0
06789                         value_expr((yyvsp[(1) - (3)].val));
06790                         value_expr((yyvsp[(3) - (3)].val));
06791                         (yyval.val) = NEW_DOT2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06792                         if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].val)->nd_lit) &&
06793                             nd_type((yyvsp[(3) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].val)->nd_lit)) {
06794                             deferred_nodes = list_append(deferred_nodes, (yyval.val));
06795                         }
06796 #endif
06797                         (yyval.val) = dispatch2(dot2, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06798 
06799                     ;}
06800     break;
06801 
06802   case 207:
06803 #line 2105 "ripper.y"
06804     {
06805 #if 0
06806                         value_expr((yyvsp[(1) - (3)].val));
06807                         value_expr((yyvsp[(3) - (3)].val));
06808                         (yyval.val) = NEW_DOT3((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06809                         if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].val)->nd_lit) &&
06810                             nd_type((yyvsp[(3) - (3)].val)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].val)->nd_lit)) {
06811                             deferred_nodes = list_append(deferred_nodes, (yyval.val));
06812                         }
06813 #endif
06814                         (yyval.val) = dispatch2(dot3, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
06815 
06816                     ;}
06817     break;
06818 
06819   case 208:
06820 #line 2119 "ripper.y"
06821     {
06822 #if 0
06823                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '+', (yyvsp[(3) - (3)].val));
06824 #endif
06825                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('+'), (yyvsp[(3) - (3)].val));
06826 
06827                     ;}
06828     break;
06829 
06830   case 209:
06831 #line 2127 "ripper.y"
06832     {
06833 #if 0
06834                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '-', (yyvsp[(3) - (3)].val));
06835 #endif
06836                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('-'), (yyvsp[(3) - (3)].val));
06837 
06838                     ;}
06839     break;
06840 
06841   case 210:
06842 #line 2135 "ripper.y"
06843     {
06844 #if 0
06845                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '*', (yyvsp[(3) - (3)].val));
06846 #endif
06847                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('*'), (yyvsp[(3) - (3)].val));
06848 
06849                     ;}
06850     break;
06851 
06852   case 211:
06853 #line 2143 "ripper.y"
06854     {
06855 #if 0
06856                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '/', (yyvsp[(3) - (3)].val));
06857 #endif
06858                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('/'), (yyvsp[(3) - (3)].val));
06859 
06860                     ;}
06861     break;
06862 
06863   case 212:
06864 #line 2151 "ripper.y"
06865     {
06866 #if 0
06867                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '%', (yyvsp[(3) - (3)].val));
06868 #endif
06869                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('%'), (yyvsp[(3) - (3)].val));
06870 
06871                     ;}
06872     break;
06873 
06874   case 213:
06875 #line 2159 "ripper.y"
06876     {
06877 #if 0
06878                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tPOW, (yyvsp[(3) - (3)].val));
06879 #endif
06880                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("**"), (yyvsp[(3) - (3)].val));
06881 
06882                     ;}
06883     break;
06884 
06885   case 214:
06886 #line 2167 "ripper.y"
06887     {
06888 #if 0
06889                         (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0);
06890 #endif
06891                         (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ripper_intern("**"), (yyvsp[(4) - (4)].val));
06892                         (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyval.val));
06893 
06894                     ;}
06895     break;
06896 
06897   case 215:
06898 #line 2176 "ripper.y"
06899     {
06900 #if 0
06901                         (yyval.val) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].val), tPOW, (yyvsp[(4) - (4)].val)), tUMINUS, 0);
06902 #endif
06903                         (yyval.val) = dispatch3(binary, (yyvsp[(2) - (4)].val), ripper_intern("**"), (yyvsp[(4) - (4)].val));
06904                         (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyval.val));
06905 
06906                     ;}
06907     break;
06908 
06909   case 216:
06910 #line 2185 "ripper.y"
06911     {
06912 #if 0
06913                         (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUPLUS);
06914 #endif
06915                         (yyval.val) = dispatch2(unary, ripper_intern("+@"), (yyvsp[(2) - (2)].val));
06916 
06917                     ;}
06918     break;
06919 
06920   case 217:
06921 #line 2193 "ripper.y"
06922     {
06923 #if 0
06924                         (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), tUMINUS);
06925 #endif
06926                         (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val));
06927 
06928                     ;}
06929     break;
06930 
06931   case 218:
06932 #line 2201 "ripper.y"
06933     {
06934 #if 0
06935                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '|', (yyvsp[(3) - (3)].val));
06936 #endif
06937                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('|'), (yyvsp[(3) - (3)].val));
06938 
06939                     ;}
06940     break;
06941 
06942   case 219:
06943 #line 2209 "ripper.y"
06944     {
06945 #if 0
06946                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '^', (yyvsp[(3) - (3)].val));
06947 #endif
06948                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('^'), (yyvsp[(3) - (3)].val));
06949 
06950                     ;}
06951     break;
06952 
06953   case 220:
06954 #line 2217 "ripper.y"
06955     {
06956 #if 0
06957                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '&', (yyvsp[(3) - (3)].val));
06958 #endif
06959                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('&'), (yyvsp[(3) - (3)].val));
06960 
06961                     ;}
06962     break;
06963 
06964   case 221:
06965 #line 2225 "ripper.y"
06966     {
06967 #if 0
06968                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tCMP, (yyvsp[(3) - (3)].val));
06969 #endif
06970                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<=>"), (yyvsp[(3) - (3)].val));
06971 
06972                     ;}
06973     break;
06974 
06975   case 222:
06976 #line 2233 "ripper.y"
06977     {
06978 #if 0
06979                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '>', (yyvsp[(3) - (3)].val));
06980 #endif
06981                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('>'), (yyvsp[(3) - (3)].val));
06982 
06983                     ;}
06984     break;
06985 
06986   case 223:
06987 #line 2241 "ripper.y"
06988     {
06989 #if 0
06990                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tGEQ, (yyvsp[(3) - (3)].val));
06991 #endif
06992                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern(">="), (yyvsp[(3) - (3)].val));
06993 
06994                     ;}
06995     break;
06996 
06997   case 224:
06998 #line 2249 "ripper.y"
06999     {
07000 #if 0
07001                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), '<', (yyvsp[(3) - (3)].val));
07002 #endif
07003                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ID2SYM('<'), (yyvsp[(3) - (3)].val));
07004 
07005                     ;}
07006     break;
07007 
07008   case 225:
07009 #line 2257 "ripper.y"
07010     {
07011 #if 0
07012                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLEQ, (yyvsp[(3) - (3)].val));
07013 #endif
07014                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<="), (yyvsp[(3) - (3)].val));
07015 
07016                     ;}
07017     break;
07018 
07019   case 226:
07020 #line 2265 "ripper.y"
07021     {
07022 #if 0
07023                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQ, (yyvsp[(3) - (3)].val));
07024 #endif
07025                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("=="), (yyvsp[(3) - (3)].val));
07026 
07027                     ;}
07028     break;
07029 
07030   case 227:
07031 #line 2273 "ripper.y"
07032     {
07033 #if 0
07034                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tEQQ, (yyvsp[(3) - (3)].val));
07035 #endif
07036                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("==="), (yyvsp[(3) - (3)].val));
07037 
07038                     ;}
07039     break;
07040 
07041   case 228:
07042 #line 2281 "ripper.y"
07043     {
07044 #if 0
07045                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNEQ, (yyvsp[(3) - (3)].val));
07046 #endif
07047                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("!="), (yyvsp[(3) - (3)].val));
07048 
07049                     ;}
07050     break;
07051 
07052   case 229:
07053 #line 2289 "ripper.y"
07054     {
07055 #if 0
07056                         (yyval.val) = match_op((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
07057                         if (nd_type((yyvsp[(1) - (3)].val)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].val)->nd_lit) == T_REGEXP) {
07058                             (yyval.val) = reg_named_capture_assign((yyvsp[(1) - (3)].val)->nd_lit, (yyval.val));
07059                         }
07060 #endif
07061                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("=~"), (yyvsp[(3) - (3)].val));
07062 
07063                     ;}
07064     break;
07065 
07066   case 230:
07067 #line 2300 "ripper.y"
07068     {
07069 #if 0
07070                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tNMATCH, (yyvsp[(3) - (3)].val));
07071 #endif
07072                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("!~"), (yyvsp[(3) - (3)].val));
07073 
07074                     ;}
07075     break;
07076 
07077   case 231:
07078 #line 2308 "ripper.y"
07079     {
07080 #if 0
07081                         (yyval.val) = call_uni_op(cond((yyvsp[(2) - (2)].val)), '!');
07082 #endif
07083                         (yyval.val) = dispatch2(unary, ID2SYM('!'), (yyvsp[(2) - (2)].val));
07084 
07085                     ;}
07086     break;
07087 
07088   case 232:
07089 #line 2316 "ripper.y"
07090     {
07091 #if 0
07092                         (yyval.val) = call_uni_op((yyvsp[(2) - (2)].val), '~');
07093 #endif
07094                         (yyval.val) = dispatch2(unary, ID2SYM('~'), (yyvsp[(2) - (2)].val));
07095 
07096                     ;}
07097     break;
07098 
07099   case 233:
07100 #line 2324 "ripper.y"
07101     {
07102 #if 0
07103                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tLSHFT, (yyvsp[(3) - (3)].val));
07104 #endif
07105                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("<<"), (yyvsp[(3) - (3)].val));
07106 
07107                     ;}
07108     break;
07109 
07110   case 234:
07111 #line 2332 "ripper.y"
07112     {
07113 #if 0
07114                         (yyval.val) = call_bin_op((yyvsp[(1) - (3)].val), tRSHFT, (yyvsp[(3) - (3)].val));
07115 #endif
07116                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern(">>"), (yyvsp[(3) - (3)].val));
07117 
07118                     ;}
07119     break;
07120 
07121   case 235:
07122 #line 2340 "ripper.y"
07123     {
07124 #if 0
07125                         (yyval.val) = logop(NODE_AND, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
07126 #endif
07127                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("&&"), (yyvsp[(3) - (3)].val));
07128 
07129                     ;}
07130     break;
07131 
07132   case 236:
07133 #line 2348 "ripper.y"
07134     {
07135 #if 0
07136                         (yyval.val) = logop(NODE_OR, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
07137 #endif
07138                         (yyval.val) = dispatch3(binary, (yyvsp[(1) - (3)].val), ripper_intern("||"), (yyvsp[(3) - (3)].val));
07139 
07140                     ;}
07141     break;
07142 
07143   case 237:
07144 #line 2355 "ripper.y"
07145     {in_defined = 1;;}
07146     break;
07147 
07148   case 238:
07149 #line 2356 "ripper.y"
07150     {
07151 #if 0
07152                         in_defined = 0;
07153                         (yyval.val) = NEW_DEFINED((yyvsp[(4) - (4)].val));
07154 #endif
07155                         in_defined = 0;
07156                         (yyval.val) = dispatch1(defined, (yyvsp[(4) - (4)].val));
07157 
07158                     ;}
07159     break;
07160 
07161   case 239:
07162 #line 2366 "ripper.y"
07163     {
07164 #if 0
07165                         value_expr((yyvsp[(1) - (6)].val));
07166                         (yyval.val) = NEW_IF(cond((yyvsp[(1) - (6)].val)), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
07167                         fixpos((yyval.val), (yyvsp[(1) - (6)].val));
07168 #endif
07169                         (yyval.val) = dispatch3(ifop, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(6) - (6)].val));
07170 
07171                     ;}
07172     break;
07173 
07174   case 240:
07175 #line 2376 "ripper.y"
07176     {
07177                         (yyval.val) = (yyvsp[(1) - (1)].val);
07178                     ;}
07179     break;
07180 
07181   case 241:
07182 #line 2382 "ripper.y"
07183     {
07184 #if 0
07185                         value_expr((yyvsp[(1) - (1)].val));
07186                         (yyval.val) = (yyvsp[(1) - (1)].val);
07187                         if (!(yyval.val)) (yyval.val) = NEW_NIL();
07188 #endif
07189                         (yyval.val) = (yyvsp[(1) - (1)].val);
07190 
07191                     ;}
07192     break;
07193 
07194   case 243:
07195 #line 2395 "ripper.y"
07196     {
07197                         (yyval.val) = (yyvsp[(1) - (2)].val);
07198                     ;}
07199     break;
07200 
07201   case 244:
07202 #line 2399 "ripper.y"
07203     {
07204 #if 0
07205                         (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val)));
07206 #endif
07207                         (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
07208 
07209                     ;}
07210     break;
07211 
07212   case 245:
07213 #line 2407 "ripper.y"
07214     {
07215 #if 0
07216                         (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val)));
07217 #endif
07218                         (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
07219 
07220                     ;}
07221     break;
07222 
07223   case 246:
07224 #line 2417 "ripper.y"
07225     {
07226 #if 0
07227                         (yyval.val) = (yyvsp[(2) - (3)].val);
07228 #endif
07229                         (yyval.val) = dispatch1(arg_paren, escape_Qundef((yyvsp[(2) - (3)].val)));
07230 
07231                     ;}
07232     break;
07233 
07234   case 251:
07235 #line 2433 "ripper.y"
07236     {
07237                       (yyval.val) = (yyvsp[(1) - (2)].val);
07238                     ;}
07239     break;
07240 
07241   case 252:
07242 #line 2437 "ripper.y"
07243     {
07244 #if 0
07245                         (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val)));
07246 #endif
07247                         (yyval.val) = arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val));
07248 
07249                     ;}
07250     break;
07251 
07252   case 253:
07253 #line 2445 "ripper.y"
07254     {
07255 #if 0
07256                         (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val)));
07257 #endif
07258                         (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
07259 
07260                     ;}
07261     break;
07262 
07263   case 254:
07264 #line 2455 "ripper.y"
07265     {
07266 #if 0
07267                         value_expr((yyvsp[(1) - (1)].val));
07268                         (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
07269 #endif
07270                         (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val));
07271 
07272                     ;}
07273     break;
07274 
07275   case 255:
07276 #line 2464 "ripper.y"
07277     {
07278 #if 0
07279                         (yyval.val) = arg_blk_pass((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
07280 #endif
07281                         (yyval.val) = arg_add_optblock((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
07282 
07283                     ;}
07284     break;
07285 
07286   case 256:
07287 #line 2472 "ripper.y"
07288     {
07289 #if 0
07290                         (yyval.val) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].val)));
07291                         (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(2) - (2)].val));
07292 #endif
07293                         (yyval.val) = arg_add_assocs(arg_new(), (yyvsp[(1) - (2)].val));
07294                         (yyval.val) = arg_add_optblock((yyval.val), (yyvsp[(2) - (2)].val));
07295 
07296                     ;}
07297     break;
07298 
07299   case 257:
07300 #line 2482 "ripper.y"
07301     {
07302 #if 0
07303                         (yyval.val) = arg_append((yyvsp[(1) - (4)].val), NEW_HASH((yyvsp[(3) - (4)].val)));
07304                         (yyval.val) = arg_blk_pass((yyval.val), (yyvsp[(4) - (4)].val));
07305 #endif
07306                         (yyval.val) = arg_add_optblock(arg_add_assocs((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val)), (yyvsp[(4) - (4)].val));
07307 
07308                     ;}
07309     break;
07310 
07311   case 258:
07312 #line 2493 "ripper.y"
07313     {
07314                         (yyval.val) = arg_add_block(arg_new(), (yyvsp[(1) - (1)].val));
07315                     ;}
07316     break;
07317 
07318   case 259:
07319 #line 2499 "ripper.y"
07320     {
07321                         (yyval.val) = cmdarg_stack;
07322                         CMDARG_PUSH(1);
07323                     ;}
07324     break;
07325 
07326   case 260:
07327 #line 2504 "ripper.y"
07328     {
07329                         /* CMDARG_POP() */
07330                         cmdarg_stack = (yyvsp[(1) - (2)].val);
07331                         (yyval.val) = (yyvsp[(2) - (2)].val);
07332                     ;}
07333     break;
07334 
07335   case 261:
07336 #line 2512 "ripper.y"
07337     {
07338 #if 0
07339                         (yyval.val) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].val));
07340 #endif
07341                         (yyval.val) = (yyvsp[(2) - (2)].val);
07342 
07343                     ;}
07344     break;
07345 
07346   case 262:
07347 #line 2522 "ripper.y"
07348     {
07349                         (yyval.val) = (yyvsp[(2) - (2)].val);
07350                     ;}
07351     break;
07352 
07353   case 263:
07354 #line 2526 "ripper.y"
07355     {
07356                         (yyval.val) = 0;
07357                     ;}
07358     break;
07359 
07360   case 264:
07361 #line 2532 "ripper.y"
07362     {
07363 #if 0
07364                         (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
07365 #endif
07366                         (yyval.val) = arg_add(arg_new(), (yyvsp[(1) - (1)].val));
07367 
07368                     ;}
07369     break;
07370 
07371   case 265:
07372 #line 2540 "ripper.y"
07373     {
07374 #if 0
07375                         (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val));
07376 #endif
07377                         (yyval.val) = arg_add_star(arg_new(), (yyvsp[(2) - (2)].val));
07378 
07379                     ;}
07380     break;
07381 
07382   case 266:
07383 #line 2548 "ripper.y"
07384     {
07385 #if 0
07386                         NODE *n1;
07387                         if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) {
07388                             (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val));
07389                         }
07390                         else {
07391                             (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
07392                         }
07393 #endif
07394                         (yyval.val) = arg_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
07395 
07396                     ;}
07397     break;
07398 
07399   case 267:
07400 #line 2562 "ripper.y"
07401     {
07402 #if 0
07403                         NODE *n1;
07404                         if ((nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) {
07405                             (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val));
07406                         }
07407                         else {
07408                             (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
07409                         }
07410 #endif
07411                         (yyval.val) = arg_add_star((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
07412 
07413                     ;}
07414     break;
07415 
07416   case 268:
07417 #line 2578 "ripper.y"
07418     {
07419 #if 0
07420                         NODE *n1;
07421                         if ((n1 = splat_array((yyvsp[(1) - (3)].val))) != 0) {
07422                             (yyval.val) = list_append(n1, (yyvsp[(3) - (3)].val));
07423                         }
07424                         else {
07425                             (yyval.val) = arg_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
07426                         }
07427 #endif
07428                         (yyval.val) = mrhs_add(args2mrhs((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val));
07429 
07430                     ;}
07431     break;
07432 
07433   case 269:
07434 #line 2592 "ripper.y"
07435     {
07436 #if 0
07437                         NODE *n1;
07438                         if (nd_type((yyvsp[(4) - (4)].val)) == NODE_ARRAY &&
07439                             (n1 = splat_array((yyvsp[(1) - (4)].val))) != 0) {
07440                             (yyval.val) = list_concat(n1, (yyvsp[(4) - (4)].val));
07441                         }
07442                         else {
07443                             (yyval.val) = arg_concat((yyvsp[(1) - (4)].val), (yyvsp[(4) - (4)].val));
07444                         }
07445 #endif
07446                         (yyval.val) = mrhs_add_star(args2mrhs((yyvsp[(1) - (4)].val)), (yyvsp[(4) - (4)].val));
07447 
07448                     ;}
07449     break;
07450 
07451   case 270:
07452 #line 2607 "ripper.y"
07453     {
07454 #if 0
07455                         (yyval.val) = NEW_SPLAT((yyvsp[(2) - (2)].val));
07456 #endif
07457                         (yyval.val) = mrhs_add_star(mrhs_new(), (yyvsp[(2) - (2)].val));
07458 
07459                     ;}
07460     break;
07461 
07462   case 279:
07463 #line 2625 "ripper.y"
07464     {
07465 #if 0
07466                         (yyval.val) = NEW_FCALL((yyvsp[(1) - (1)].val), 0);
07467 #endif
07468                         (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (1)].val)), arg_new());
07469 
07470                     ;}
07471     break;
07472 
07473   case 280:
07474 #line 2633 "ripper.y"
07475     {
07476 #if 0
07477                         (yyval.num) = ruby_sourceline;
07478 #endif
07479 
07480                     ;}
07481     break;
07482 
07483   case 281:
07484 #line 2641 "ripper.y"
07485     {
07486 #if 0
07487                         if ((yyvsp[(3) - (4)].val) == NULL) {
07488                             (yyval.val) = NEW_NIL();
07489                         }
07490                         else {
07491                             if (nd_type((yyvsp[(3) - (4)].val)) == NODE_RESCUE ||
07492                                 nd_type((yyvsp[(3) - (4)].val)) == NODE_ENSURE)
07493                                 nd_set_line((yyvsp[(3) - (4)].val), (yyvsp[(2) - (4)].num));
07494                             (yyval.val) = NEW_BEGIN((yyvsp[(3) - (4)].val));
07495                         }
07496                         nd_set_line((yyval.val), (yyvsp[(2) - (4)].num));
07497 #endif
07498                         (yyval.val) = dispatch1(begin, (yyvsp[(3) - (4)].val));
07499 
07500                     ;}
07501     break;
07502 
07503   case 282:
07504 #line 2657 "ripper.y"
07505     {lex_state = EXPR_ENDARG;;}
07506     break;
07507 
07508   case 283:
07509 #line 2658 "ripper.y"
07510     {
07511                         rb_warning0("(...) interpreted as grouped expression");
07512 #if 0
07513                         (yyval.val) = (yyvsp[(2) - (4)].val);
07514 #endif
07515                         (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val));
07516 
07517                     ;}
07518     break;
07519 
07520   case 284:
07521 #line 2667 "ripper.y"
07522     {
07523 #if 0
07524                         (yyval.val) = (yyvsp[(2) - (3)].val);
07525 #endif
07526                         (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val));
07527 
07528                     ;}
07529     break;
07530 
07531   case 285:
07532 #line 2675 "ripper.y"
07533     {
07534 #if 0
07535                         (yyval.val) = NEW_COLON2((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
07536 #endif
07537                         (yyval.val) = dispatch2(const_path_ref, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
07538 
07539                     ;}
07540     break;
07541 
07542   case 286:
07543 #line 2683 "ripper.y"
07544     {
07545 #if 0
07546                         (yyval.val) = NEW_COLON3((yyvsp[(2) - (2)].val));
07547 #endif
07548                         (yyval.val) = dispatch1(top_const_ref, (yyvsp[(2) - (2)].val));
07549 
07550                     ;}
07551     break;
07552 
07553   case 287:
07554 #line 2691 "ripper.y"
07555     {
07556 #if 0
07557                         if ((yyvsp[(2) - (3)].val) == 0) {
07558                             (yyval.val) = NEW_ZARRAY(); /* zero length array*/
07559                         }
07560                         else {
07561                             (yyval.val) = (yyvsp[(2) - (3)].val);
07562                         }
07563 #endif
07564                         (yyval.val) = dispatch1(array, escape_Qundef((yyvsp[(2) - (3)].val)));
07565 
07566                     ;}
07567     break;
07568 
07569   case 288:
07570 #line 2704 "ripper.y"
07571     {
07572 #if 0
07573                         (yyval.val) = NEW_HASH((yyvsp[(2) - (3)].val));
07574 #endif
07575                         (yyval.val) = dispatch1(hash, escape_Qundef((yyvsp[(2) - (3)].val)));
07576 
07577                     ;}
07578     break;
07579 
07580   case 289:
07581 #line 2712 "ripper.y"
07582     {
07583 #if 0
07584                         (yyval.val) = NEW_RETURN(0);
07585 #endif
07586                         (yyval.val) = dispatch0(return0);
07587 
07588                     ;}
07589     break;
07590 
07591   case 290:
07592 #line 2720 "ripper.y"
07593     {
07594 #if 0
07595                         (yyval.val) = new_yield((yyvsp[(3) - (4)].val));
07596 #endif
07597                         (yyval.val) = dispatch1(yield, dispatch1(paren, (yyvsp[(3) - (4)].val)));
07598 
07599                     ;}
07600     break;
07601 
07602   case 291:
07603 #line 2728 "ripper.y"
07604     {
07605 #if 0
07606                         (yyval.val) = NEW_YIELD(0, Qfalse);
07607 #endif
07608                         (yyval.val) = dispatch1(yield, dispatch1(paren, arg_new()));
07609 
07610                     ;}
07611     break;
07612 
07613   case 292:
07614 #line 2736 "ripper.y"
07615     {
07616 #if 0
07617                         (yyval.val) = NEW_YIELD(0, Qfalse);
07618 #endif
07619                         (yyval.val) = dispatch0(yield0);
07620 
07621                     ;}
07622     break;
07623 
07624   case 293:
07625 #line 2743 "ripper.y"
07626     {in_defined = 1;;}
07627     break;
07628 
07629   case 294:
07630 #line 2744 "ripper.y"
07631     {
07632 #if 0
07633                         in_defined = 0;
07634                         (yyval.val) = NEW_DEFINED((yyvsp[(5) - (6)].val));
07635 #endif
07636                         in_defined = 0;
07637                         (yyval.val) = dispatch1(defined, (yyvsp[(5) - (6)].val));
07638 
07639                     ;}
07640     break;
07641 
07642   case 295:
07643 #line 2754 "ripper.y"
07644     {
07645 #if 0
07646                         (yyval.val) = call_uni_op(cond((yyvsp[(3) - (4)].val)), '!');
07647 #endif
07648                         (yyval.val) = dispatch2(unary, ripper_intern("not"), (yyvsp[(3) - (4)].val));
07649 
07650                     ;}
07651     break;
07652 
07653   case 296:
07654 #line 2762 "ripper.y"
07655     {
07656 #if 0
07657                         (yyval.val) = call_uni_op(cond(NEW_NIL()), '!');
07658 #endif
07659                         (yyval.val) = dispatch2(unary, ripper_intern("not"), Qnil);
07660 
07661                     ;}
07662     break;
07663 
07664   case 297:
07665 #line 2770 "ripper.y"
07666     {
07667 #if 0
07668                         (yyvsp[(2) - (2)].val)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].val), 0);
07669                         (yyval.val) = (yyvsp[(2) - (2)].val);
07670                         fixpos((yyvsp[(2) - (2)].val)->nd_iter, (yyvsp[(2) - (2)].val));
07671 #endif
07672                         (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), arg_new());
07673                         (yyval.val) = method_add_block((yyval.val), (yyvsp[(2) - (2)].val));
07674 
07675                     ;}
07676     break;
07677 
07678   case 299:
07679 #line 2782 "ripper.y"
07680     {
07681 #if 0
07682                         block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val));
07683                         (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val);
07684                         (yyval.val) = (yyvsp[(2) - (2)].val);
07685                         fixpos((yyval.val), (yyvsp[(1) - (2)].val));
07686 #endif
07687                         (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
07688 
07689                     ;}
07690     break;
07691 
07692   case 300:
07693 #line 2793 "ripper.y"
07694     {
07695                         (yyval.val) = (yyvsp[(2) - (2)].val);
07696                     ;}
07697     break;
07698 
07699   case 301:
07700 #line 2800 "ripper.y"
07701     {
07702 #if 0
07703                         (yyval.val) = NEW_IF(cond((yyvsp[(2) - (6)].val)), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val));
07704                         fixpos((yyval.val), (yyvsp[(2) - (6)].val));
07705 #endif
07706                         (yyval.val) = dispatch3(if, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val)));
07707 
07708                     ;}
07709     break;
07710 
07711   case 302:
07712 #line 2812 "ripper.y"
07713     {
07714 #if 0
07715                         (yyval.val) = NEW_UNLESS(cond((yyvsp[(2) - (6)].val)), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val));
07716                         fixpos((yyval.val), (yyvsp[(2) - (6)].val));
07717 #endif
07718                         (yyval.val) = dispatch3(unless, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), escape_Qundef((yyvsp[(5) - (6)].val)));
07719 
07720                     ;}
07721     break;
07722 
07723   case 303:
07724 #line 2820 "ripper.y"
07725     {COND_PUSH(1);;}
07726     break;
07727 
07728   case 304:
07729 #line 2820 "ripper.y"
07730     {COND_POP();;}
07731     break;
07732 
07733   case 305:
07734 #line 2823 "ripper.y"
07735     {
07736 #if 0
07737                         (yyval.val) = NEW_WHILE(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1);
07738                         fixpos((yyval.val), (yyvsp[(3) - (7)].val));
07739 #endif
07740                         (yyval.val) = dispatch2(while, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val));
07741 
07742                     ;}
07743     break;
07744 
07745   case 306:
07746 #line 2831 "ripper.y"
07747     {COND_PUSH(1);;}
07748     break;
07749 
07750   case 307:
07751 #line 2831 "ripper.y"
07752     {COND_POP();;}
07753     break;
07754 
07755   case 308:
07756 #line 2834 "ripper.y"
07757     {
07758 #if 0
07759                         (yyval.val) = NEW_UNTIL(cond((yyvsp[(3) - (7)].val)), (yyvsp[(6) - (7)].val), 1);
07760                         fixpos((yyval.val), (yyvsp[(3) - (7)].val));
07761 #endif
07762                         (yyval.val) = dispatch2(until, (yyvsp[(3) - (7)].val), (yyvsp[(6) - (7)].val));
07763 
07764                     ;}
07765     break;
07766 
07767   case 309:
07768 #line 2845 "ripper.y"
07769     {
07770 #if 0
07771                         (yyval.val) = NEW_CASE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
07772                         fixpos((yyval.val), (yyvsp[(2) - (5)].val));
07773 #endif
07774                         (yyval.val) = dispatch2(case, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
07775 
07776                     ;}
07777     break;
07778 
07779   case 310:
07780 #line 2854 "ripper.y"
07781     {
07782 #if 0
07783                         (yyval.val) = NEW_CASE(0, (yyvsp[(3) - (4)].val));
07784 #endif
07785                         (yyval.val) = dispatch2(case, Qnil, (yyvsp[(3) - (4)].val));
07786 
07787                     ;}
07788     break;
07789 
07790   case 311:
07791 #line 2862 "ripper.y"
07792     {COND_PUSH(1);;}
07793     break;
07794 
07795   case 312:
07796 #line 2864 "ripper.y"
07797     {COND_POP();;}
07798     break;
07799 
07800   case 313:
07801 #line 2867 "ripper.y"
07802     {
07803 #if 0
07804                         /*
07805                          *  for a, b, c in e
07806                          *  #=>
07807                          *  e.each{|*x| a, b, c = x
07808                          *
07809                          *  for a in e
07810                          *  #=>
07811                          *  e.each{|x| a, = x}
07812                          */
07813                         ID id = internal_id();
07814                         ID *tbl = ALLOC_N(ID, 2);
07815                         NODE *m = NEW_ARGS_AUX(0, 0);
07816                         NODE *args, *scope;
07817 
07818                         if (nd_type((yyvsp[(2) - (9)].val)) == NODE_MASGN) {
07819                             /* if args.length == 1 && args[0].kind_of?(Array)
07820                              *   args = args[0]
07821                              * end
07822                              */
07823                             NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
07824                             NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
07825                             m->nd_next = block_append(
07826                                 NEW_IF(
07827                                     NEW_NODE(NODE_AND,
07828                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
07829                                                       rb_intern("=="), one),
07830                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
07831                                                       rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
07832                                              0),
07833                                     NEW_DASGN_CURR(id,
07834                                                    NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
07835                                     0),
07836                                 node_assign((yyvsp[(2) - (9)].val), NEW_DVAR(id)));
07837 
07838                             args = new_args(m, 0, id, 0, 0);
07839                         }
07840                         else {
07841                             if (nd_type((yyvsp[(2) - (9)].val)) == NODE_LASGN ||
07842                                 nd_type((yyvsp[(2) - (9)].val)) == NODE_DASGN ||
07843                                 nd_type((yyvsp[(2) - (9)].val)) == NODE_DASGN_CURR) {
07844                                 (yyvsp[(2) - (9)].val)->nd_value = NEW_DVAR(id);
07845                                 m->nd_plen = 1;
07846                                 m->nd_next = (yyvsp[(2) - (9)].val);
07847                                 args = new_args(m, 0, 0, 0, 0);
07848                             }
07849                             else {
07850                                 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].val)), 0), NEW_DVAR(id));
07851                                 args = new_args(m, 0, id, 0, 0);
07852                             }
07853                         }
07854                         scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].val), args);
07855                         tbl[0] = 1; tbl[1] = id;
07856                         (yyval.val) = NEW_FOR(0, (yyvsp[(5) - (9)].val), scope);
07857                         fixpos((yyval.val), (yyvsp[(2) - (9)].val));
07858 #endif
07859                         (yyval.val) = dispatch3(for, (yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(8) - (9)].val));
07860 
07861                     ;}
07862     break;
07863 
07864   case 314:
07865 #line 2928 "ripper.y"
07866     {
07867                         if (in_def || in_single)
07868                             yyerror("class definition in method body");
07869                         local_push(0);
07870 #if 0
07871                         (yyval.num) = ruby_sourceline;
07872 #endif
07873 
07874                     ;}
07875     break;
07876 
07877   case 315:
07878 #line 2939 "ripper.y"
07879     {
07880 #if 0
07881                         (yyval.val) = NEW_CLASS((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(3) - (6)].val));
07882                         nd_set_line((yyval.val), (yyvsp[(4) - (6)].num));
07883 #endif
07884                         (yyval.val) = dispatch3(class, (yyvsp[(2) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val));
07885 
07886                         local_pop();
07887                     ;}
07888     break;
07889 
07890   case 316:
07891 #line 2949 "ripper.y"
07892     {
07893                         (yyval.num) = in_def;
07894                         in_def = 0;
07895                     ;}
07896     break;
07897 
07898   case 317:
07899 #line 2954 "ripper.y"
07900     {
07901                         (yyval.num) = in_single;
07902                         in_single = 0;
07903                         local_push(0);
07904                     ;}
07905     break;
07906 
07907   case 318:
07908 #line 2961 "ripper.y"
07909     {
07910 #if 0
07911                         (yyval.val) = NEW_SCLASS((yyvsp[(3) - (8)].val), (yyvsp[(7) - (8)].val));
07912                         fixpos((yyval.val), (yyvsp[(3) - (8)].val));
07913 #endif
07914                         (yyval.val) = dispatch2(sclass, (yyvsp[(3) - (8)].val), (yyvsp[(7) - (8)].val));
07915 
07916                         local_pop();
07917                         in_def = (yyvsp[(4) - (8)].num);
07918                         in_single = (yyvsp[(6) - (8)].num);
07919                     ;}
07920     break;
07921 
07922   case 319:
07923 #line 2973 "ripper.y"
07924     {
07925                         if (in_def || in_single)
07926                             yyerror("module definition in method body");
07927                         local_push(0);
07928 #if 0
07929                         (yyval.num) = ruby_sourceline;
07930 #endif
07931 
07932                     ;}
07933     break;
07934 
07935   case 320:
07936 #line 2984 "ripper.y"
07937     {
07938 #if 0
07939                         (yyval.val) = NEW_MODULE((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
07940                         nd_set_line((yyval.val), (yyvsp[(3) - (5)].num));
07941 #endif
07942                         (yyval.val) = dispatch2(module, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val));
07943 
07944                         local_pop();
07945                     ;}
07946     break;
07947 
07948   case 321:
07949 #line 2994 "ripper.y"
07950     {
07951                         (yyval.id) = cur_mid;
07952                         cur_mid = (yyvsp[(2) - (2)].val);
07953                         in_def++;
07954                         local_push(0);
07955                     ;}
07956     break;
07957 
07958   case 322:
07959 #line 3003 "ripper.y"
07960     {
07961 #if 0
07962                         NODE *body = remove_begin((yyvsp[(5) - (6)].val));
07963                         reduce_nodes(&body);
07964                         (yyval.val) = NEW_DEFN((yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), body, NOEX_PRIVATE);
07965                         nd_set_line((yyval.val), (yyvsp[(1) - (6)].num));
07966 #endif
07967                         (yyval.val) = dispatch3(def, (yyvsp[(2) - (6)].val), (yyvsp[(4) - (6)].val), (yyvsp[(5) - (6)].val));
07968 
07969                         local_pop();
07970                         in_def--;
07971                         cur_mid = (yyvsp[(3) - (6)].id);
07972                     ;}
07973     break;
07974 
07975   case 323:
07976 #line 3016 "ripper.y"
07977     {lex_state = EXPR_FNAME;;}
07978     break;
07979 
07980   case 324:
07981 #line 3017 "ripper.y"
07982     {
07983                         in_single++;
07984                         lex_state = EXPR_ENDFN; /* force for args */
07985                         local_push(0);
07986                     ;}
07987     break;
07988 
07989   case 325:
07990 #line 3025 "ripper.y"
07991     {
07992 #if 0
07993                         NODE *body = remove_begin((yyvsp[(8) - (9)].val));
07994                         reduce_nodes(&body);
07995                         (yyval.val) = NEW_DEFS((yyvsp[(2) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), body);
07996                         nd_set_line((yyval.val), (yyvsp[(1) - (9)].num));
07997 #endif
07998                         (yyval.val) = dispatch5(defs, (yyvsp[(2) - (9)].val), (yyvsp[(3) - (9)].val), (yyvsp[(5) - (9)].val), (yyvsp[(7) - (9)].val), (yyvsp[(8) - (9)].val));
07999 
08000                         local_pop();
08001                         in_single--;
08002                     ;}
08003     break;
08004 
08005   case 326:
08006 #line 3038 "ripper.y"
08007     {
08008 #if 0
08009                         (yyval.val) = NEW_BREAK(0);
08010 #endif
08011                         (yyval.val) = dispatch1(break, arg_new());
08012 
08013                     ;}
08014     break;
08015 
08016   case 327:
08017 #line 3046 "ripper.y"
08018     {
08019 #if 0
08020                         (yyval.val) = NEW_NEXT(0);
08021 #endif
08022                         (yyval.val) = dispatch1(next, arg_new());
08023 
08024                     ;}
08025     break;
08026 
08027   case 328:
08028 #line 3054 "ripper.y"
08029     {
08030 #if 0
08031                         (yyval.val) = NEW_REDO();
08032 #endif
08033                         (yyval.val) = dispatch0(redo);
08034 
08035                     ;}
08036     break;
08037 
08038   case 329:
08039 #line 3062 "ripper.y"
08040     {
08041 #if 0
08042                         (yyval.val) = NEW_RETRY();
08043 #endif
08044                         (yyval.val) = dispatch0(retry);
08045 
08046                     ;}
08047     break;
08048 
08049   case 330:
08050 #line 3072 "ripper.y"
08051     {
08052 #if 0
08053                         value_expr((yyvsp[(1) - (1)].val));
08054                         (yyval.val) = (yyvsp[(1) - (1)].val);
08055                         if (!(yyval.val)) (yyval.val) = NEW_NIL();
08056 #endif
08057                         (yyval.val) = (yyvsp[(1) - (1)].val);
08058 
08059                     ;}
08060     break;
08061 
08062   case 331:
08063 #line 3084 "ripper.y"
08064     {
08065                         token_info_push("begin");
08066                     ;}
08067     break;
08068 
08069   case 332:
08070 #line 3090 "ripper.y"
08071     {
08072                         token_info_push("if");
08073                     ;}
08074     break;
08075 
08076   case 333:
08077 #line 3096 "ripper.y"
08078     {
08079                         token_info_push("unless");
08080                     ;}
08081     break;
08082 
08083   case 334:
08084 #line 3102 "ripper.y"
08085     {
08086                         token_info_push("while");
08087                     ;}
08088     break;
08089 
08090   case 335:
08091 #line 3108 "ripper.y"
08092     {
08093                         token_info_push("until");
08094                     ;}
08095     break;
08096 
08097   case 336:
08098 #line 3114 "ripper.y"
08099     {
08100                         token_info_push("case");
08101                     ;}
08102     break;
08103 
08104   case 337:
08105 #line 3120 "ripper.y"
08106     {
08107                         token_info_push("for");
08108                     ;}
08109     break;
08110 
08111   case 338:
08112 #line 3126 "ripper.y"
08113     {
08114                         token_info_push("class");
08115                     ;}
08116     break;
08117 
08118   case 339:
08119 #line 3132 "ripper.y"
08120     {
08121                         token_info_push("module");
08122                     ;}
08123     break;
08124 
08125   case 340:
08126 #line 3138 "ripper.y"
08127     {
08128                         token_info_push("def");
08129 #if 0
08130                         (yyval.num) = ruby_sourceline;
08131 #endif
08132 
08133                     ;}
08134     break;
08135 
08136   case 341:
08137 #line 3148 "ripper.y"
08138     {
08139                         token_info_pop("end");
08140                     ;}
08141     break;
08142 
08143   case 342:
08144 #line 3156 "ripper.y"
08145     { (yyval.val) = Qnil; ;}
08146     break;
08147 
08148   case 344:
08149 #line 3162 "ripper.y"
08150     { (yyval.val) = (yyvsp[(2) - (2)].val); ;}
08151     break;
08152 
08153   case 345:
08154 #line 3169 "ripper.y"
08155     { (yyval.val) = Qnil; ;}
08156     break;
08157 
08158   case 348:
08159 #line 3178 "ripper.y"
08160     {
08161 #if 0
08162                         (yyval.val) = NEW_IF(cond((yyvsp[(2) - (5)].val)), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
08163                         fixpos((yyval.val), (yyvsp[(2) - (5)].val));
08164 #endif
08165                         (yyval.val) = dispatch3(elsif, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val)));
08166 
08167                     ;}
08168     break;
08169 
08170   case 350:
08171 #line 3190 "ripper.y"
08172     {
08173 #if 0
08174                         (yyval.val) = (yyvsp[(2) - (2)].val);
08175 #endif
08176                         (yyval.val) = dispatch1(else, (yyvsp[(2) - (2)].val));
08177 
08178                     ;}
08179     break;
08180 
08181   case 353:
08182 #line 3204 "ripper.y"
08183     {
08184                         (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
08185 #if 0
08186 #endif
08187                         (yyval.val) = dispatch1(mlhs_paren, (yyval.val));
08188 
08189                     ;}
08190     break;
08191 
08192   case 354:
08193 #line 3212 "ripper.y"
08194     {
08195 #if 0
08196                         (yyval.val) = (yyvsp[(2) - (3)].val);
08197 #endif
08198                         (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
08199 
08200                     ;}
08201     break;
08202 
08203   case 355:
08204 #line 3222 "ripper.y"
08205     {
08206 #if 0
08207                         (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
08208 #endif
08209                         (yyval.val) = mlhs_add(mlhs_new(), (yyvsp[(1) - (1)].val));
08210 
08211                     ;}
08212     break;
08213 
08214   case 356:
08215 #line 3230 "ripper.y"
08216     {
08217 #if 0
08218                         (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
08219 #endif
08220                         (yyval.val) = mlhs_add((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
08221 
08222                     ;}
08223     break;
08224 
08225   case 357:
08226 #line 3240 "ripper.y"
08227     {
08228 #if 0
08229                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (1)].val), 0);
08230 #endif
08231                         (yyval.val) = (yyvsp[(1) - (1)].val);
08232 
08233                     ;}
08234     break;
08235 
08236   case 358:
08237 #line 3248 "ripper.y"
08238     {
08239                         (yyval.val) = assignable((yyvsp[(4) - (4)].val), 0);
08240 #if 0
08241                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (4)].val), (yyval.val));
08242 #endif
08243                         (yyval.val) = mlhs_add_star((yyvsp[(1) - (4)].val), (yyval.val));
08244 
08245                     ;}
08246     break;
08247 
08248   case 359:
08249 #line 3257 "ripper.y"
08250     {
08251                         (yyval.val) = assignable((yyvsp[(4) - (6)].val), 0);
08252 #if 0
08253                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (6)].val), NEW_POSTARG((yyval.val), (yyvsp[(6) - (6)].val)));
08254 #endif
08255                         (yyval.val) = mlhs_add_star((yyvsp[(1) - (6)].val), (yyval.val));
08256 
08257                     ;}
08258     break;
08259 
08260   case 360:
08261 #line 3266 "ripper.y"
08262     {
08263 #if 0
08264                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (3)].val), -1);
08265 #endif
08266                         (yyval.val) = mlhs_add_star((yyvsp[(1) - (3)].val), Qnil);
08267 
08268                     ;}
08269     break;
08270 
08271   case 361:
08272 #line 3274 "ripper.y"
08273     {
08274 #if 0
08275                         (yyval.val) = NEW_MASGN((yyvsp[(1) - (5)].val), NEW_POSTARG(-1, (yyvsp[(5) - (5)].val)));
08276 #endif
08277                         (yyval.val) = mlhs_add_star((yyvsp[(1) - (5)].val), (yyvsp[(5) - (5)].val));
08278 
08279                     ;}
08280     break;
08281 
08282   case 362:
08283 #line 3282 "ripper.y"
08284     {
08285                         (yyval.val) = assignable((yyvsp[(2) - (2)].val), 0);
08286 #if 0
08287                         (yyval.val) = NEW_MASGN(0, (yyval.val));
08288 #endif
08289                         (yyval.val) = mlhs_add_star(mlhs_new(), (yyval.val));
08290 
08291                     ;}
08292     break;
08293 
08294   case 363:
08295 #line 3291 "ripper.y"
08296     {
08297                         (yyval.val) = assignable((yyvsp[(2) - (4)].val), 0);
08298 #if 0
08299                         (yyval.val) = NEW_MASGN(0, NEW_POSTARG((yyval.val), (yyvsp[(4) - (4)].val)));
08300 #endif
08301                       #if 0
08302                       TODO: Check me
08303                       #endif
08304                         (yyval.val) = mlhs_add_star((yyval.val), (yyvsp[(4) - (4)].val));
08305 
08306                     ;}
08307     break;
08308 
08309   case 364:
08310 #line 3303 "ripper.y"
08311     {
08312 #if 0
08313                         (yyval.val) = NEW_MASGN(0, -1);
08314 #endif
08315                         (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
08316 
08317                     ;}
08318     break;
08319 
08320   case 365:
08321 #line 3311 "ripper.y"
08322     {
08323 #if 0
08324                         (yyval.val) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].val)));
08325 #endif
08326                         (yyval.val) = mlhs_add_star(mlhs_new(), Qnil);
08327 
08328                     ;}
08329     break;
08330 
08331   case 366:
08332 #line 3321 "ripper.y"
08333     {
08334 #if 0
08335                         (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), 0, (yyvsp[(6) - (6)].val));
08336 #endif
08337                         (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnil, escape_Qundef((yyvsp[(6) - (6)].val)));
08338 
08339                     ;}
08340     break;
08341 
08342   case 367:
08343 #line 3329 "ripper.y"
08344     {
08345 #if 0
08346                         (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val));
08347 #endif
08348                         (yyval.val) = params_new((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), escape_Qundef((yyvsp[(8) - (8)].val)));
08349 
08350                     ;}
08351     break;
08352 
08353   case 368:
08354 #line 3337 "ripper.y"
08355     {
08356 #if 0
08357                         (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, 0, (yyvsp[(4) - (4)].val));
08358 #endif
08359                         (yyval.val) = params_new((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, Qnil, escape_Qundef((yyvsp[(4) - (4)].val)));
08360 
08361                     ;}
08362     break;
08363 
08364   case 369:
08365 #line 3345 "ripper.y"
08366     {
08367 #if 0
08368                         (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), 0, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
08369 #endif
08370                         (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnil, (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val)));
08371 
08372                     ;}
08373     break;
08374 
08375   case 370:
08376 #line 3353 "ripper.y"
08377     {
08378 #if 0
08379                         (yyval.val) = new_args((yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val));
08380 #endif
08381                         (yyval.val) = params_new((yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val)));
08382 
08383                     ;}
08384     break;
08385 
08386   case 371:
08387 #line 3361 "ripper.y"
08388     {
08389 #if 0
08390                         (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 1, 0, 0);
08391 #endif
08392                         (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil, Qnil, Qnil, Qnil);
08393                         dispatch1(excessed_comma, (yyval.val));
08394 
08395                     ;}
08396     break;
08397 
08398   case 372:
08399 #line 3370 "ripper.y"
08400     {
08401 #if 0
08402                         (yyval.val) = new_args((yyvsp[(1) - (6)].val), 0, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
08403 #endif
08404                         (yyval.val) = params_new((yyvsp[(1) - (6)].val), Qnil, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val)));
08405 
08406                     ;}
08407     break;
08408 
08409   case 373:
08410 #line 3378 "ripper.y"
08411     {
08412 #if 0
08413                         (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 0, 0, (yyvsp[(2) - (2)].val));
08414 #endif
08415                         (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil,Qnil, Qnil, escape_Qundef((yyvsp[(2) - (2)].val)));
08416 
08417                     ;}
08418     break;
08419 
08420   case 374:
08421 #line 3386 "ripper.y"
08422     {
08423 #if 0
08424                         (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val));
08425 #endif
08426                         (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val)));
08427 
08428                     ;}
08429     break;
08430 
08431   case 375:
08432 #line 3394 "ripper.y"
08433     {
08434 #if 0
08435                         (yyval.val) = new_args(0, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
08436 #endif
08437                         (yyval.val) = params_new(Qnil, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val)));
08438 
08439                     ;}
08440     break;
08441 
08442   case 376:
08443 #line 3402 "ripper.y"
08444     {
08445 #if 0
08446                         (yyval.val) = new_args(0, (yyvsp[(1) - (2)].val), 0, 0, (yyvsp[(2) - (2)].val));
08447 #endif
08448                         (yyval.val) = params_new(Qnil, (yyvsp[(1) - (2)].val), Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val)));
08449 
08450                     ;}
08451     break;
08452 
08453   case 377:
08454 #line 3410 "ripper.y"
08455     {
08456 #if 0
08457                         (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
08458 #endif
08459                         (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val)));
08460 
08461                     ;}
08462     break;
08463 
08464   case 378:
08465 #line 3418 "ripper.y"
08466     {
08467 #if 0
08468                         (yyval.val) = new_args(0, 0, (yyvsp[(1) - (2)].val), 0, (yyvsp[(2) - (2)].val));
08469 #endif
08470                         (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (2)].val), Qnil, escape_Qundef((yyvsp[(2) - (2)].val)));
08471 
08472                     ;}
08473     break;
08474 
08475   case 379:
08476 #line 3426 "ripper.y"
08477     {
08478 #if 0
08479                         (yyval.val) = new_args(0, 0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
08480 #endif
08481                         (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val)));
08482 
08483                     ;}
08484     break;
08485 
08486   case 380:
08487 #line 3434 "ripper.y"
08488     {
08489 #if 0
08490                         (yyval.val) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].val));
08491 #endif
08492                         (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, (yyvsp[(1) - (1)].val));
08493 
08494                     ;}
08495     break;
08496 
08497   case 382:
08498 #line 3445 "ripper.y"
08499     {
08500                         command_start = TRUE;
08501                     ;}
08502     break;
08503 
08504   case 383:
08505 #line 3451 "ripper.y"
08506     {
08507 #if 0
08508                         (yyval.val) = 0;
08509 #endif
08510                         (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08511                                           escape_Qundef((yyvsp[(2) - (3)].val)));
08512 
08513                     ;}
08514     break;
08515 
08516   case 384:
08517 #line 3460 "ripper.y"
08518     {
08519 #if 0
08520                         (yyval.val) = 0;
08521 #endif
08522                         (yyval.val) = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08523                                           Qnil);
08524 
08525                     ;}
08526     break;
08527 
08528   case 385:
08529 #line 3469 "ripper.y"
08530     {
08531 #if 0
08532                         (yyval.val) = (yyvsp[(2) - (4)].val);
08533 #endif
08534                         (yyval.val) = blockvar_new(escape_Qundef((yyvsp[(2) - (4)].val)), escape_Qundef((yyvsp[(3) - (4)].val)));
08535 
08536                     ;}
08537     break;
08538 
08539   case 387:
08540 #line 3481 "ripper.y"
08541     {
08542 #if 0
08543                         (yyval.val) = 0;
08544 #endif
08545                         (yyval.val) = (yyvsp[(2) - (2)].val);
08546 
08547                     ;}
08548     break;
08549 
08550   case 388:
08551 #line 3493 "ripper.y"
08552     {
08553                         (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
08554                     ;}
08555     break;
08556 
08557   case 389:
08558 #line 3500 "ripper.y"
08559     {
08560                         rb_ary_push((yyval.val), (yyvsp[(3) - (3)].val));
08561                     ;}
08562     break;
08563 
08564   case 390:
08565 #line 3507 "ripper.y"
08566     {
08567                         new_bv(get_id((yyvsp[(1) - (1)].val)));
08568 #if 0
08569 #endif
08570                         (yyval.val) = get_value((yyvsp[(1) - (1)].val));
08571 
08572                     ;}
08573     break;
08574 
08575   case 391:
08576 #line 3515 "ripper.y"
08577     {
08578                         (yyval.val) = 0;
08579                     ;}
08580     break;
08581 
08582   case 392:
08583 #line 3520 "ripper.y"
08584     {
08585                         (yyval.vars) = dyna_push();
08586                     ;}
08587     break;
08588 
08589   case 393:
08590 #line 3523 "ripper.y"
08591     {
08592                         (yyval.num) = lpar_beg;
08593                         lpar_beg = ++paren_nest;
08594                     ;}
08595     break;
08596 
08597   case 394:
08598 #line 3529 "ripper.y"
08599     {
08600                         lpar_beg = (yyvsp[(2) - (4)].num);
08601 #if 0
08602                         (yyval.val) = (yyvsp[(3) - (4)].val);
08603                         (yyval.val)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].val)->nd_head, (yyvsp[(4) - (4)].val));
08604 #endif
08605                         (yyval.val) = dispatch2(lambda, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
08606 
08607                         dyna_pop((yyvsp[(1) - (4)].vars));
08608                     ;}
08609     break;
08610 
08611   case 395:
08612 #line 3542 "ripper.y"
08613     {
08614 #if 0
08615                         (yyval.val) = NEW_LAMBDA((yyvsp[(2) - (4)].val));
08616 #endif
08617                         (yyval.val) = dispatch1(paren, (yyvsp[(2) - (4)].val));
08618 
08619                     ;}
08620     break;
08621 
08622   case 396:
08623 #line 3550 "ripper.y"
08624     {
08625 #if 0
08626                         (yyval.val) = NEW_LAMBDA((yyvsp[(1) - (1)].val));
08627 #endif
08628                         (yyval.val) = (yyvsp[(1) - (1)].val);
08629 
08630                     ;}
08631     break;
08632 
08633   case 397:
08634 #line 3560 "ripper.y"
08635     {
08636                         (yyval.val) = (yyvsp[(2) - (3)].val);
08637                     ;}
08638     break;
08639 
08640   case 398:
08641 #line 3564 "ripper.y"
08642     {
08643                         (yyval.val) = (yyvsp[(2) - (3)].val);
08644                     ;}
08645     break;
08646 
08647   case 399:
08648 #line 3570 "ripper.y"
08649     {
08650                         (yyvsp[(1) - (1)].vars) = dyna_push();
08651 #if 0
08652                         (yyval.num) = ruby_sourceline;
08653 #endif
08654                     ;}
08655     break;
08656 
08657   case 400:
08658 #line 3579 "ripper.y"
08659     {
08660 #if 0
08661                         (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val));
08662                         nd_set_line((yyval.val), (yyvsp[(2) - (5)].num));
08663 #endif
08664                         (yyval.val) = dispatch2(do_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val));
08665 
08666                         dyna_pop((yyvsp[(1) - (5)].vars));
08667                     ;}
08668     break;
08669 
08670   case 401:
08671 #line 3591 "ripper.y"
08672     {
08673 #if 0
08674                         if (nd_type((yyvsp[(1) - (2)].val)) == NODE_YIELD) {
08675                             compile_error(PARSER_ARG "block given to yield");
08676                         }
08677                         else {
08678                             block_dup_check((yyvsp[(1) - (2)].val)->nd_args, (yyvsp[(2) - (2)].val));
08679                         }
08680                         (yyvsp[(2) - (2)].val)->nd_iter = (yyvsp[(1) - (2)].val);
08681                         (yyval.val) = (yyvsp[(2) - (2)].val);
08682                         fixpos((yyval.val), (yyvsp[(1) - (2)].val));
08683 #endif
08684                         (yyval.val) = method_add_block((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
08685 
08686                     ;}
08687     break;
08688 
08689   case 402:
08690 #line 3607 "ripper.y"
08691     {
08692 #if 0
08693                         (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
08694 #endif
08695                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val));
08696                         (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
08697 
08698                     ;}
08699     break;
08700 
08701   case 403:
08702 #line 3616 "ripper.y"
08703     {
08704 #if 0
08705                         (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
08706 #endif
08707                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_intern("::"), (yyvsp[(3) - (4)].val));
08708                         (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
08709 
08710                     ;}
08711     break;
08712 
08713   case 404:
08714 #line 3627 "ripper.y"
08715     {
08716 #if 0
08717                         (yyval.val) = NEW_FCALL((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
08718                         fixpos((yyval.val), (yyvsp[(2) - (2)].val));
08719 #endif
08720                         (yyval.val) = method_arg(dispatch1(fcall, (yyvsp[(1) - (2)].val)), (yyvsp[(2) - (2)].val));
08721 
08722                     ;}
08723     break;
08724 
08725   case 405:
08726 #line 3636 "ripper.y"
08727     {
08728 #if 0
08729                         (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
08730                         fixpos((yyval.val), (yyvsp[(1) - (4)].val));
08731 #endif
08732                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val));
08733                         (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
08734 
08735                     ;}
08736     break;
08737 
08738   case 406:
08739 #line 3646 "ripper.y"
08740     {
08741 #if 0
08742                         (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
08743                         fixpos((yyval.val), (yyvsp[(1) - (4)].val));
08744 #endif
08745                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (4)].val), ripper_id2sym('.'), (yyvsp[(3) - (4)].val));
08746                         (yyval.val) = method_optarg((yyval.val), (yyvsp[(4) - (4)].val));
08747 
08748                     ;}
08749     break;
08750 
08751   case 407:
08752 #line 3656 "ripper.y"
08753     {
08754 #if 0
08755                         (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val), 0);
08756 #endif
08757                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_intern("::"), (yyvsp[(3) - (3)].val));
08758 
08759                     ;}
08760     break;
08761 
08762   case 408:
08763 #line 3664 "ripper.y"
08764     {
08765 #if 0
08766                         (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), rb_intern("call"), (yyvsp[(3) - (3)].val));
08767                         fixpos((yyval.val), (yyvsp[(1) - (3)].val));
08768 #endif
08769                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_id2sym('.'),
08770                                        ripper_intern("call"));
08771                         (yyval.val) = method_optarg((yyval.val), (yyvsp[(3) - (3)].val));
08772 
08773                     ;}
08774     break;
08775 
08776   case 409:
08777 #line 3675 "ripper.y"
08778     {
08779 #if 0
08780                         (yyval.val) = NEW_CALL((yyvsp[(1) - (3)].val), rb_intern("call"), (yyvsp[(3) - (3)].val));
08781                         fixpos((yyval.val), (yyvsp[(1) - (3)].val));
08782 #endif
08783                         (yyval.val) = dispatch3(call, (yyvsp[(1) - (3)].val), ripper_intern("::"),
08784                                        ripper_intern("call"));
08785                         (yyval.val) = method_optarg((yyval.val), (yyvsp[(3) - (3)].val));
08786 
08787                     ;}
08788     break;
08789 
08790   case 410:
08791 #line 3686 "ripper.y"
08792     {
08793 #if 0
08794                         (yyval.val) = NEW_SUPER((yyvsp[(2) - (2)].val));
08795 #endif
08796                         (yyval.val) = dispatch1(super, (yyvsp[(2) - (2)].val));
08797 
08798                     ;}
08799     break;
08800 
08801   case 411:
08802 #line 3694 "ripper.y"
08803     {
08804 #if 0
08805                         (yyval.val) = NEW_ZSUPER();
08806 #endif
08807                         (yyval.val) = dispatch0(zsuper);
08808 
08809                     ;}
08810     break;
08811 
08812   case 412:
08813 #line 3702 "ripper.y"
08814     {
08815 #if 0
08816                         if ((yyvsp[(1) - (4)].val) && nd_type((yyvsp[(1) - (4)].val)) == NODE_SELF)
08817                             (yyval.val) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].val));
08818                         else
08819                             (yyval.val) = NEW_CALL((yyvsp[(1) - (4)].val), tAREF, (yyvsp[(3) - (4)].val));
08820                         fixpos((yyval.val), (yyvsp[(1) - (4)].val));
08821 #endif
08822                         (yyval.val) = dispatch2(aref, (yyvsp[(1) - (4)].val), escape_Qundef((yyvsp[(3) - (4)].val)));
08823 
08824                     ;}
08825     break;
08826 
08827   case 413:
08828 #line 3716 "ripper.y"
08829     {
08830                         (yyvsp[(1) - (1)].vars) = dyna_push();
08831 #if 0
08832                         (yyval.num) = ruby_sourceline;
08833 #endif
08834 
08835                     ;}
08836     break;
08837 
08838   case 414:
08839 #line 3725 "ripper.y"
08840     {
08841 #if 0
08842                         (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val));
08843                         nd_set_line((yyval.val), (yyvsp[(2) - (5)].num));
08844 #endif
08845                         (yyval.val) = dispatch2(brace_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val));
08846 
08847                         dyna_pop((yyvsp[(1) - (5)].vars));
08848                     ;}
08849     break;
08850 
08851   case 415:
08852 #line 3735 "ripper.y"
08853     {
08854                         (yyvsp[(1) - (1)].vars) = dyna_push();
08855 #if 0
08856                         (yyval.num) = ruby_sourceline;
08857 #endif
08858 
08859                     ;}
08860     break;
08861 
08862   case 416:
08863 #line 3744 "ripper.y"
08864     {
08865 #if 0
08866                         (yyval.val) = NEW_ITER((yyvsp[(3) - (5)].val),(yyvsp[(4) - (5)].val));
08867                         nd_set_line((yyval.val), (yyvsp[(2) - (5)].num));
08868 #endif
08869                         (yyval.val) = dispatch2(do_block, escape_Qundef((yyvsp[(3) - (5)].val)), (yyvsp[(4) - (5)].val));
08870 
08871                         dyna_pop((yyvsp[(1) - (5)].vars));
08872                     ;}
08873     break;
08874 
08875   case 417:
08876 #line 3758 "ripper.y"
08877     {
08878 #if 0
08879                         (yyval.val) = NEW_WHEN((yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), (yyvsp[(5) - (5)].val));
08880 #endif
08881                         (yyval.val) = dispatch3(when, (yyvsp[(2) - (5)].val), (yyvsp[(4) - (5)].val), escape_Qundef((yyvsp[(5) - (5)].val)));
08882 
08883                     ;}
08884     break;
08885 
08886   case 420:
08887 #line 3774 "ripper.y"
08888     {
08889 #if 0
08890                         if ((yyvsp[(3) - (6)].val)) {
08891                             (yyvsp[(3) - (6)].val) = node_assign((yyvsp[(3) - (6)].val), NEW_ERRINFO());
08892                             (yyvsp[(5) - (6)].val) = block_append((yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val));
08893                         }
08894                         (yyval.val) = NEW_RESBODY((yyvsp[(2) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
08895                         fixpos((yyval.val), (yyvsp[(2) - (6)].val)?(yyvsp[(2) - (6)].val):(yyvsp[(5) - (6)].val));
08896 #endif
08897                         (yyval.val) = dispatch4(rescue,
08898                                        escape_Qundef((yyvsp[(2) - (6)].val)),
08899                                        escape_Qundef((yyvsp[(3) - (6)].val)),
08900                                        escape_Qundef((yyvsp[(5) - (6)].val)),
08901                                        escape_Qundef((yyvsp[(6) - (6)].val)));
08902 
08903                     ;}
08904     break;
08905 
08906   case 422:
08907 #line 3794 "ripper.y"
08908     {
08909 #if 0
08910                         (yyval.val) = NEW_LIST((yyvsp[(1) - (1)].val));
08911 #endif
08912                         (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
08913 
08914                     ;}
08915     break;
08916 
08917   case 423:
08918 #line 3802 "ripper.y"
08919     {
08920 #if 0
08921                         if (!((yyval.val) = splat_array((yyvsp[(1) - (1)].val)))) (yyval.val) = (yyvsp[(1) - (1)].val);
08922 #endif
08923                         (yyval.val) = (yyvsp[(1) - (1)].val);
08924 
08925                     ;}
08926     break;
08927 
08928   case 425:
08929 #line 3813 "ripper.y"
08930     {
08931                         (yyval.val) = (yyvsp[(2) - (2)].val);
08932                     ;}
08933     break;
08934 
08935   case 427:
08936 #line 3820 "ripper.y"
08937     {
08938 #if 0
08939                         (yyval.val) = (yyvsp[(2) - (2)].val);
08940 #endif
08941                         (yyval.val) = dispatch1(ensure, (yyvsp[(2) - (2)].val));
08942 
08943                     ;}
08944     break;
08945 
08946   case 430:
08947 #line 3832 "ripper.y"
08948     {
08949 #if 0
08950                         (yyval.val) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].val)));
08951 #endif
08952                         (yyval.val) = dispatch1(symbol_literal, (yyvsp[(1) - (1)].val));
08953 
08954                     ;}
08955     break;
08956 
08957   case 432:
08958 #line 3843 "ripper.y"
08959     {
08960 #if 0
08961                         NODE *node = (yyvsp[(1) - (1)].val);
08962                         if (!node) {
08963                             node = NEW_STR(STR_NEW0());
08964                         }
08965                         else {
08966                             node = evstr2dstr(node);
08967                         }
08968                         (yyval.val) = node;
08969 #endif
08970                         (yyval.val) = (yyvsp[(1) - (1)].val);
08971 
08972                     ;}
08973     break;
08974 
08975   case 435:
08976 #line 3862 "ripper.y"
08977     {
08978 #if 0
08979                         (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
08980 #endif
08981                         (yyval.val) = dispatch2(string_concat, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
08982 
08983                     ;}
08984     break;
08985 
08986   case 436:
08987 #line 3872 "ripper.y"
08988     {
08989 #if 0
08990                         (yyval.val) = (yyvsp[(2) - (3)].val);
08991 #endif
08992                         (yyval.val) = dispatch1(string_literal, (yyvsp[(2) - (3)].val));
08993 
08994                     ;}
08995     break;
08996 
08997   case 437:
08998 #line 3882 "ripper.y"
08999     {
09000 #if 0
09001                         NODE *node = (yyvsp[(2) - (3)].val);
09002                         if (!node) {
09003                             node = NEW_XSTR(STR_NEW0());
09004                         }
09005                         else {
09006                             switch (nd_type(node)) {
09007                               case NODE_STR:
09008                                 nd_set_type(node, NODE_XSTR);
09009                                 break;
09010                               case NODE_DSTR:
09011                                 nd_set_type(node, NODE_DXSTR);
09012                                 break;
09013                               default:
09014                                 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09015                                 break;
09016                             }
09017                         }
09018                         (yyval.val) = node;
09019 #endif
09020                         (yyval.val) = dispatch1(xstring_literal, (yyvsp[(2) - (3)].val));
09021 
09022                     ;}
09023     break;
09024 
09025   case 438:
09026 #line 3909 "ripper.y"
09027     {
09028 #if 0
09029                         int options = (yyvsp[(3) - (3)].val);
09030                         NODE *node = (yyvsp[(2) - (3)].val);
09031                         NODE *list, *prev;
09032                         if (!node) {
09033                             node = NEW_LIT(reg_compile(STR_NEW0(), options));
09034                         }
09035                         else switch (nd_type(node)) {
09036                           case NODE_STR:
09037                             {
09038                                 VALUE src = node->nd_lit;
09039                                 nd_set_type(node, NODE_LIT);
09040                                 node->nd_lit = reg_compile(src, options);
09041                             }
09042                             break;
09043                           default:
09044                             node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09045                           case NODE_DSTR:
09046                             if (options & RE_OPTION_ONCE) {
09047                                 nd_set_type(node, NODE_DREGX_ONCE);
09048                             }
09049                             else {
09050                                 nd_set_type(node, NODE_DREGX);
09051                             }
09052                             node->nd_cflag = options & RE_OPTION_MASK;
09053                             if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09054                             for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09055                                 if (nd_type(list->nd_head) == NODE_STR) {
09056                                     VALUE tail = list->nd_head->nd_lit;
09057                                     if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09058                                         VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09059                                         if (!literal_concat0(parser, lit, tail)) {
09060                                             node = 0;
09061                                             break;
09062                                         }
09063                                         rb_str_resize(tail, 0);
09064                                         prev->nd_next = list->nd_next;
09065                                         rb_gc_force_recycle((VALUE)list->nd_head);
09066                                         rb_gc_force_recycle((VALUE)list);
09067                                         list = prev;
09068                                     }
09069                                     else {
09070                                         prev = list;
09071                                     }
09072                                 }
09073                                 else {
09074                                     prev = 0;
09075                                 }
09076                             }
09077                             if (!node->nd_next) {
09078                                 VALUE src = node->nd_lit;
09079                                 nd_set_type(node, NODE_LIT);
09080                                 node->nd_lit = reg_compile(src, options);
09081                             }
09082                             break;
09083                         }
09084                         (yyval.val) = node;
09085 #endif
09086                         (yyval.val) = dispatch2(regexp_literal, (yyvsp[(2) - (3)].val), (yyvsp[(3) - (3)].val));
09087 
09088                     ;}
09089     break;
09090 
09091   case 439:
09092 #line 3974 "ripper.y"
09093     {
09094 #if 0
09095                         (yyval.val) = NEW_ZARRAY();
09096 #endif
09097                         (yyval.val) = dispatch0(words_new);
09098                         (yyval.val) = dispatch1(array, (yyval.val));
09099 
09100                     ;}
09101     break;
09102 
09103   case 440:
09104 #line 3983 "ripper.y"
09105     {
09106 #if 0
09107                         (yyval.val) = (yyvsp[(2) - (3)].val);
09108 #endif
09109                         (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
09110 
09111                     ;}
09112     break;
09113 
09114   case 441:
09115 #line 3993 "ripper.y"
09116     {
09117 #if 0
09118                         (yyval.val) = 0;
09119 #endif
09120                         (yyval.val) = dispatch0(words_new);
09121 
09122                     ;}
09123     break;
09124 
09125   case 442:
09126 #line 4001 "ripper.y"
09127     {
09128 #if 0
09129                         (yyval.val) = list_append((yyvsp[(1) - (3)].val), evstr2dstr((yyvsp[(2) - (3)].val)));
09130 #endif
09131                         (yyval.val) = dispatch2(words_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
09132 
09133                     ;}
09134     break;
09135 
09136   case 443:
09137 #line 4013 "ripper.y"
09138     {
09139                         (yyval.val) = dispatch0(word_new);
09140                         (yyval.val) = dispatch2(word_add, (yyval.val), (yyvsp[(1) - (1)].val));
09141                     ;}
09142     break;
09143 
09144   case 444:
09145 #line 4019 "ripper.y"
09146     {
09147 #if 0
09148                         (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
09149 #endif
09150                         (yyval.val) = dispatch2(word_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
09151 
09152                     ;}
09153     break;
09154 
09155   case 445:
09156 #line 4029 "ripper.y"
09157     {
09158 #if 0
09159                         (yyval.val) = NEW_ZARRAY();
09160 #endif
09161                         (yyval.val) = dispatch0(qwords_new);
09162                         (yyval.val) = dispatch1(array, (yyval.val));
09163 
09164                     ;}
09165     break;
09166 
09167   case 446:
09168 #line 4038 "ripper.y"
09169     {
09170 #if 0
09171                         (yyval.val) = (yyvsp[(2) - (3)].val);
09172 #endif
09173                         (yyval.val) = dispatch1(array, (yyvsp[(2) - (3)].val));
09174 
09175                     ;}
09176     break;
09177 
09178   case 447:
09179 #line 4048 "ripper.y"
09180     {
09181 #if 0
09182                         (yyval.val) = 0;
09183 #endif
09184                         (yyval.val) = dispatch0(qwords_new);
09185 
09186                     ;}
09187     break;
09188 
09189   case 448:
09190 #line 4056 "ripper.y"
09191     {
09192 #if 0
09193                         (yyval.val) = list_append((yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
09194 #endif
09195                         (yyval.val) = dispatch2(qwords_add, (yyvsp[(1) - (3)].val), (yyvsp[(2) - (3)].val));
09196 
09197                     ;}
09198     break;
09199 
09200   case 449:
09201 #line 4066 "ripper.y"
09202     {
09203 #if 0
09204                         (yyval.val) = 0;
09205 #endif
09206                         (yyval.val) = dispatch0(string_content);
09207 
09208                     ;}
09209     break;
09210 
09211   case 450:
09212 #line 4074 "ripper.y"
09213     {
09214 #if 0
09215                         (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
09216 #endif
09217                         (yyval.val) = dispatch2(string_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
09218 
09219                     ;}
09220     break;
09221 
09222   case 451:
09223 #line 4084 "ripper.y"
09224     {
09225 #if 0
09226                         (yyval.val) = 0;
09227 #endif
09228                         (yyval.val) = dispatch0(xstring_new);
09229 
09230                     ;}
09231     break;
09232 
09233   case 452:
09234 #line 4092 "ripper.y"
09235     {
09236 #if 0
09237                         (yyval.val) = literal_concat((yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
09238 #endif
09239                         (yyval.val) = dispatch2(xstring_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
09240 
09241                     ;}
09242     break;
09243 
09244   case 453:
09245 #line 4102 "ripper.y"
09246     {
09247 #if 0
09248                         (yyval.val) = 0;
09249 #endif
09250                         (yyval.val) = dispatch0(regexp_new);
09251 
09252                     ;}
09253     break;
09254 
09255   case 454:
09256 #line 4110 "ripper.y"
09257     {
09258 #if 0
09259                         NODE *head = (yyvsp[(1) - (2)].val), *tail = (yyvsp[(2) - (2)].val);
09260                         if (!head) {
09261                             (yyval.val) = tail;
09262                         }
09263                         else if (!tail) {
09264                             (yyval.val) = head;
09265                         }
09266                         else {
09267                             switch (nd_type(head)) {
09268                               case NODE_STR:
09269                                 nd_set_type(head, NODE_DSTR);
09270                                 break;
09271                               case NODE_DSTR:
09272                                 break;
09273                               default:
09274                                 head = list_append(NEW_DSTR(Qnil), head);
09275                                 break;
09276                             }
09277                             (yyval.val) = list_append(head, tail);
09278                         }
09279 #endif
09280                         (yyval.val) = dispatch2(regexp_add, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
09281 
09282                     ;}
09283     break;
09284 
09285   case 456:
09286 #line 4140 "ripper.y"
09287     {
09288                         (yyval.node) = lex_strterm;
09289                         lex_strterm = 0;
09290                         lex_state = EXPR_BEG;
09291                     ;}
09292     break;
09293 
09294   case 457:
09295 #line 4146 "ripper.y"
09296     {
09297 #if 0
09298                         lex_strterm = (yyvsp[(2) - (3)].node);
09299                         (yyval.val) = NEW_EVSTR((yyvsp[(3) - (3)].val));
09300 #endif
09301                         lex_strterm = (yyvsp[(2) - (3)].node);
09302                         (yyval.val) = dispatch1(string_dvar, (yyvsp[(3) - (3)].val));
09303 
09304                     ;}
09305     break;
09306 
09307   case 458:
09308 #line 4156 "ripper.y"
09309     {
09310                         (yyvsp[(1) - (1)].val) = cond_stack;
09311                         (yyval.val) = cmdarg_stack;
09312                         cond_stack = 0;
09313                         cmdarg_stack = 0;
09314                     ;}
09315     break;
09316 
09317   case 459:
09318 #line 4162 "ripper.y"
09319     {
09320                         (yyval.node) = lex_strterm;
09321                         lex_strterm = 0;
09322                         lex_state = EXPR_BEG;
09323                     ;}
09324     break;
09325 
09326   case 460:
09327 #line 4168 "ripper.y"
09328     {
09329                         cond_stack = (yyvsp[(1) - (5)].val);
09330                         cmdarg_stack = (yyvsp[(2) - (5)].val);
09331                         lex_strterm = (yyvsp[(3) - (5)].node);
09332 #if 0
09333                         if ((yyvsp[(4) - (5)].val)) (yyvsp[(4) - (5)].val)->flags &= ~NODE_FL_NEWLINE;
09334                         (yyval.val) = new_evstr((yyvsp[(4) - (5)].val));
09335 #endif
09336                         (yyval.val) = dispatch1(string_embexpr, (yyvsp[(4) - (5)].val));
09337 
09338                     ;}
09339     break;
09340 
09341   case 461:
09342 #line 4182 "ripper.y"
09343     {
09344 #if 0
09345                         (yyval.val) = NEW_GVAR((yyvsp[(1) - (1)].val));
09346 #endif
09347                         (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
09348 
09349                     ;}
09350     break;
09351 
09352   case 462:
09353 #line 4190 "ripper.y"
09354     {
09355 #if 0
09356                         (yyval.val) = NEW_IVAR((yyvsp[(1) - (1)].val));
09357 #endif
09358                         (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
09359 
09360                     ;}
09361     break;
09362 
09363   case 463:
09364 #line 4198 "ripper.y"
09365     {
09366 #if 0
09367                         (yyval.val) = NEW_CVAR((yyvsp[(1) - (1)].val));
09368 #endif
09369                         (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
09370 
09371                     ;}
09372     break;
09373 
09374   case 465:
09375 #line 4209 "ripper.y"
09376     {
09377                         lex_state = EXPR_END;
09378 #if 0
09379                         (yyval.val) = (yyvsp[(2) - (2)].val);
09380 #endif
09381                         (yyval.val) = dispatch1(symbol, (yyvsp[(2) - (2)].val));
09382 
09383                     ;}
09384     break;
09385 
09386   case 470:
09387 #line 4226 "ripper.y"
09388     {
09389                         lex_state = EXPR_END;
09390 #if 0
09391                         if (!((yyval.val) = (yyvsp[(2) - (3)].val))) {
09392                             (yyval.val) = NEW_LIT(ID2SYM(rb_intern("")));
09393                         }
09394                         else {
09395                             VALUE lit;
09396 
09397                             switch (nd_type((yyval.val))) {
09398                               case NODE_DSTR:
09399                                 nd_set_type((yyval.val), NODE_DSYM);
09400                                 break;
09401                               case NODE_STR:
09402                                 lit = (yyval.val)->nd_lit;
09403                                 (yyval.val)->nd_lit = ID2SYM(rb_intern_str(lit));
09404                                 nd_set_type((yyval.val), NODE_LIT);
09405                                 break;
09406                               default:
09407                                 (yyval.val) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.val)));
09408                                 break;
09409                             }
09410                         }
09411 #endif
09412                         (yyval.val) = dispatch1(dyna_symbol, (yyvsp[(2) - (3)].val));
09413 
09414                     ;}
09415     break;
09416 
09417   case 473:
09418 #line 4258 "ripper.y"
09419     {
09420 #if 0
09421                         (yyval.val) = negate_lit((yyvsp[(2) - (2)].val));
09422 #endif
09423                         (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val));
09424 
09425                     ;}
09426     break;
09427 
09428   case 474:
09429 #line 4266 "ripper.y"
09430     {
09431 #if 0
09432                         (yyval.val) = negate_lit((yyvsp[(2) - (2)].val));
09433 #endif
09434                         (yyval.val) = dispatch2(unary, ripper_intern("-@"), (yyvsp[(2) - (2)].val));
09435 
09436                     ;}
09437     break;
09438 
09439   case 480:
09440 #line 4282 "ripper.y"
09441     {ifndef_ripper((yyval.val) = keyword_nil);;}
09442     break;
09443 
09444   case 481:
09445 #line 4283 "ripper.y"
09446     {ifndef_ripper((yyval.val) = keyword_self);;}
09447     break;
09448 
09449   case 482:
09450 #line 4284 "ripper.y"
09451     {ifndef_ripper((yyval.val) = keyword_true);;}
09452     break;
09453 
09454   case 483:
09455 #line 4285 "ripper.y"
09456     {ifndef_ripper((yyval.val) = keyword_false);;}
09457     break;
09458 
09459   case 484:
09460 #line 4286 "ripper.y"
09461     {ifndef_ripper((yyval.val) = keyword__FILE__);;}
09462     break;
09463 
09464   case 485:
09465 #line 4287 "ripper.y"
09466     {ifndef_ripper((yyval.val) = keyword__LINE__);;}
09467     break;
09468 
09469   case 486:
09470 #line 4288 "ripper.y"
09471     {ifndef_ripper((yyval.val) = keyword__ENCODING__);;}
09472     break;
09473 
09474   case 487:
09475 #line 4292 "ripper.y"
09476     {
09477 #if 0
09478                         if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0);
09479 #endif
09480                         if (id_is_var(get_id((yyvsp[(1) - (1)].val)))) {
09481                             (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
09482                         }
09483                         else {
09484                             (yyval.val) = dispatch1(vcall, (yyvsp[(1) - (1)].val));
09485                         }
09486 
09487                     ;}
09488     break;
09489 
09490   case 488:
09491 #line 4305 "ripper.y"
09492     {
09493 #if 0
09494                         if (!((yyval.val) = gettable((yyvsp[(1) - (1)].val)))) (yyval.val) = NEW_BEGIN(0);
09495 #endif
09496                         (yyval.val) = dispatch1(var_ref, (yyvsp[(1) - (1)].val));
09497 
09498                     ;}
09499     break;
09500 
09501   case 489:
09502 #line 4315 "ripper.y"
09503     {
09504                         (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
09505 #if 0
09506 #endif
09507                         (yyval.val) = dispatch1(var_field, (yyval.val));
09508 
09509                     ;}
09510     break;
09511 
09512   case 490:
09513 #line 4323 "ripper.y"
09514     {
09515                         (yyval.val) = assignable((yyvsp[(1) - (1)].val), 0);
09516 #if 0
09517 #endif
09518                         (yyval.val) = dispatch1(var_field, (yyval.val));
09519 
09520                     ;}
09521     break;
09522 
09523   case 493:
09524 #line 4337 "ripper.y"
09525     {
09526 #if 0
09527                         (yyval.val) = 0;
09528 #endif
09529                         (yyval.val) = Qnil;
09530 
09531                     ;}
09532     break;
09533 
09534   case 494:
09535 #line 4345 "ripper.y"
09536     {
09537                         lex_state = EXPR_BEG;
09538                     ;}
09539     break;
09540 
09541   case 495:
09542 #line 4349 "ripper.y"
09543     {
09544                         (yyval.val) = (yyvsp[(3) - (4)].val);
09545                     ;}
09546     break;
09547 
09548   case 496:
09549 #line 4353 "ripper.y"
09550     {
09551 #if 0
09552                         yyerrok;
09553                         (yyval.val) = 0;
09554 #endif
09555                         yyerrok;
09556                         (yyval.val) = Qnil;
09557 
09558                     ;}
09559     break;
09560 
09561   case 497:
09562 #line 4365 "ripper.y"
09563     {
09564 #if 0
09565                         (yyval.val) = (yyvsp[(2) - (3)].val);
09566 #endif
09567                         (yyval.val) = dispatch1(paren, (yyvsp[(2) - (3)].val));
09568 
09569                         lex_state = EXPR_BEG;
09570                         command_start = TRUE;
09571                     ;}
09572     break;
09573 
09574   case 498:
09575 #line 4375 "ripper.y"
09576     {
09577                         (yyval.val) = (yyvsp[(1) - (2)].val);
09578                         lex_state = EXPR_BEG;
09579                         command_start = TRUE;
09580                     ;}
09581     break;
09582 
09583   case 499:
09584 #line 4383 "ripper.y"
09585     {
09586 #if 0
09587                         (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), 0, (yyvsp[(6) - (6)].val));
09588 #endif
09589                         (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), Qnil, escape_Qundef((yyvsp[(6) - (6)].val)));
09590 
09591                     ;}
09592     break;
09593 
09594   case 500:
09595 #line 4391 "ripper.y"
09596     {
09597 #if 0
09598                         (yyval.val) = new_args((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), (yyvsp[(8) - (8)].val));
09599 #endif
09600                         (yyval.val) = params_new((yyvsp[(1) - (8)].val), (yyvsp[(3) - (8)].val), (yyvsp[(5) - (8)].val), (yyvsp[(7) - (8)].val), escape_Qundef((yyvsp[(8) - (8)].val)));
09601 
09602                     ;}
09603     break;
09604 
09605   case 501:
09606 #line 4399 "ripper.y"
09607     {
09608 #if 0
09609                         (yyval.val) = new_args((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, 0, (yyvsp[(4) - (4)].val));
09610 #endif
09611                         (yyval.val) = params_new((yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, Qnil, escape_Qundef((yyvsp[(4) - (4)].val)));
09612 
09613                     ;}
09614     break;
09615 
09616   case 502:
09617 #line 4407 "ripper.y"
09618     {
09619 #if 0
09620                         (yyval.val) = new_args((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), 0, (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
09621 #endif
09622                         (yyval.val) = params_new((yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), Qnil, (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val)));
09623 
09624                     ;}
09625     break;
09626 
09627   case 503:
09628 #line 4415 "ripper.y"
09629     {
09630 #if 0
09631                         (yyval.val) = new_args((yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val));
09632 #endif
09633                         (yyval.val) = params_new((yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val)));
09634 
09635                     ;}
09636     break;
09637 
09638   case 504:
09639 #line 4423 "ripper.y"
09640     {
09641 #if 0
09642                         (yyval.val) = new_args((yyvsp[(1) - (6)].val), 0, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
09643 #endif
09644                         (yyval.val) = params_new((yyvsp[(1) - (6)].val), Qnil, (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val)));
09645 
09646                     ;}
09647     break;
09648 
09649   case 505:
09650 #line 4431 "ripper.y"
09651     {
09652 #if 0
09653                         (yyval.val) = new_args((yyvsp[(1) - (2)].val), 0, 0, 0, (yyvsp[(2) - (2)].val));
09654 #endif
09655                         (yyval.val) = params_new((yyvsp[(1) - (2)].val), Qnil, Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val)));
09656 
09657                     ;}
09658     break;
09659 
09660   case 506:
09661 #line 4439 "ripper.y"
09662     {
09663 #if 0
09664                         (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), 0, (yyvsp[(4) - (4)].val));
09665 #endif
09666                         (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), Qnil, escape_Qundef((yyvsp[(4) - (4)].val)));
09667 
09668                     ;}
09669     break;
09670 
09671   case 507:
09672 #line 4447 "ripper.y"
09673     {
09674 #if 0
09675                         (yyval.val) = new_args(0, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), (yyvsp[(6) - (6)].val));
09676 #endif
09677                         (yyval.val) = params_new(Qnil, (yyvsp[(1) - (6)].val), (yyvsp[(3) - (6)].val), (yyvsp[(5) - (6)].val), escape_Qundef((yyvsp[(6) - (6)].val)));
09678 
09679                     ;}
09680     break;
09681 
09682   case 508:
09683 #line 4455 "ripper.y"
09684     {
09685 #if 0
09686                         (yyval.val) = new_args(0, (yyvsp[(1) - (2)].val), 0, 0, (yyvsp[(2) - (2)].val));
09687 #endif
09688                         (yyval.val) = params_new(Qnil, (yyvsp[(1) - (2)].val), Qnil, Qnil,escape_Qundef((yyvsp[(2) - (2)].val)));
09689 
09690                     ;}
09691     break;
09692 
09693   case 509:
09694 #line 4463 "ripper.y"
09695     {
09696 #if 0
09697                         (yyval.val) = new_args(0, (yyvsp[(1) - (4)].val), 0, (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
09698 #endif
09699                         (yyval.val) = params_new(Qnil, (yyvsp[(1) - (4)].val), Qnil, (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val)));
09700 
09701                     ;}
09702     break;
09703 
09704   case 510:
09705 #line 4471 "ripper.y"
09706     {
09707 #if 0
09708                         (yyval.val) = new_args(0, 0, (yyvsp[(1) - (2)].val), 0, (yyvsp[(2) - (2)].val));
09709 #endif
09710                         (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (2)].val), Qnil,escape_Qundef((yyvsp[(2) - (2)].val)));
09711 
09712                     ;}
09713     break;
09714 
09715   case 511:
09716 #line 4479 "ripper.y"
09717     {
09718 #if 0
09719                         (yyval.val) = new_args(0, 0, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), (yyvsp[(4) - (4)].val));
09720 #endif
09721                         (yyval.val) = params_new(Qnil, Qnil, (yyvsp[(1) - (4)].val), (yyvsp[(3) - (4)].val), escape_Qundef((yyvsp[(4) - (4)].val)));
09722 
09723                     ;}
09724     break;
09725 
09726   case 512:
09727 #line 4487 "ripper.y"
09728     {
09729 #if 0
09730                         (yyval.val) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].val));
09731 #endif
09732                         (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, (yyvsp[(1) - (1)].val));
09733 
09734                     ;}
09735     break;
09736 
09737   case 513:
09738 #line 4495 "ripper.y"
09739     {
09740 #if 0
09741                         (yyval.val) = new_args(0, 0, 0, 0, 0);
09742 #endif
09743                         (yyval.val) = params_new(Qnil, Qnil, Qnil, Qnil, Qnil);
09744 
09745                     ;}
09746     break;
09747 
09748   case 514:
09749 #line 4505 "ripper.y"
09750     {
09751 #if 0
09752                         yyerror("formal argument cannot be a constant");
09753                         (yyval.val) = 0;
09754 #endif
09755                         (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
09756 
09757                     ;}
09758     break;
09759 
09760   case 515:
09761 #line 4514 "ripper.y"
09762     {
09763 #if 0
09764                         yyerror("formal argument cannot be an instance variable");
09765                         (yyval.val) = 0;
09766 #endif
09767                         (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
09768 
09769                     ;}
09770     break;
09771 
09772   case 516:
09773 #line 4523 "ripper.y"
09774     {
09775 #if 0
09776                         yyerror("formal argument cannot be a global variable");
09777                         (yyval.val) = 0;
09778 #endif
09779                         (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
09780 
09781                     ;}
09782     break;
09783 
09784   case 517:
09785 #line 4532 "ripper.y"
09786     {
09787 #if 0
09788                         yyerror("formal argument cannot be a class variable");
09789                         (yyval.val) = 0;
09790 #endif
09791                         (yyval.val) = dispatch1(param_error, (yyvsp[(1) - (1)].val));
09792 
09793                     ;}
09794     break;
09795 
09796   case 519:
09797 #line 4544 "ripper.y"
09798     {
09799                         formal_argument(get_id((yyvsp[(1) - (1)].val)));
09800                         (yyval.val) = (yyvsp[(1) - (1)].val);
09801                     ;}
09802     break;
09803 
09804   case 520:
09805 #line 4551 "ripper.y"
09806     {
09807                         arg_var(get_id((yyvsp[(1) - (1)].val)));
09808 #if 0
09809                         (yyval.val) = NEW_ARGS_AUX((yyvsp[(1) - (1)].val), 1);
09810 #endif
09811                         (yyval.val) = get_value((yyvsp[(1) - (1)].val));
09812 
09813                     ;}
09814     break;
09815 
09816   case 521:
09817 #line 4560 "ripper.y"
09818     {
09819                         ID tid = internal_id();
09820                         arg_var(tid);
09821 #if 0
09822                         if (dyna_in_block()) {
09823                             (yyvsp[(2) - (3)].val)->nd_value = NEW_DVAR(tid);
09824                         }
09825                         else {
09826                             (yyvsp[(2) - (3)].val)->nd_value = NEW_LVAR(tid);
09827                         }
09828                         (yyval.val) = NEW_ARGS_AUX(tid, 1);
09829                         (yyval.val)->nd_next = (yyvsp[(2) - (3)].val);
09830 #endif
09831                         (yyval.val) = dispatch1(mlhs_paren, (yyvsp[(2) - (3)].val));
09832 
09833                     ;}
09834     break;
09835 
09836   case 522:
09837 #line 4581 "ripper.y"
09838     {
09839                         (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
09840                     ;}
09841     break;
09842 
09843   case 523:
09844 #line 4586 "ripper.y"
09845     {
09846 #if 0
09847                         (yyval.val) = (yyvsp[(1) - (3)].val);
09848                         (yyval.val)->nd_plen++;
09849                         (yyval.val)->nd_next = block_append((yyval.val)->nd_next, (yyvsp[(3) - (3)].val)->nd_next);
09850                         rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].val));
09851 #endif
09852                         (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
09853 
09854                     ;}
09855     break;
09856 
09857   case 524:
09858 #line 4599 "ripper.y"
09859     {
09860                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].val))));
09861                         (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
09862 #if 0
09863                         (yyval.val) = NEW_OPT_ARG(0, (yyval.val));
09864 #endif
09865                         (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val));
09866 
09867                     ;}
09868     break;
09869 
09870   case 525:
09871 #line 4611 "ripper.y"
09872     {
09873                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].val))));
09874                         (yyval.val) = assignable((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
09875 #if 0
09876                         (yyval.val) = NEW_OPT_ARG(0, (yyval.val));
09877 #endif
09878                         (yyval.val) = rb_assoc_new((yyval.val), (yyvsp[(3) - (3)].val));
09879 
09880                     ;}
09881     break;
09882 
09883   case 526:
09884 #line 4623 "ripper.y"
09885     {
09886 #if 0
09887                         (yyval.val) = (yyvsp[(1) - (1)].val);
09888 #endif
09889                         (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
09890 
09891                     ;}
09892     break;
09893 
09894   case 527:
09895 #line 4631 "ripper.y"
09896     {
09897 #if 0
09898                         NODE *opts = (yyvsp[(1) - (3)].val);
09899 
09900                         while (opts->nd_next) {
09901                             opts = opts->nd_next;
09902                         }
09903                         opts->nd_next = (yyvsp[(3) - (3)].val);
09904                         (yyval.val) = (yyvsp[(1) - (3)].val);
09905 #endif
09906                         (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
09907 
09908                     ;}
09909     break;
09910 
09911   case 528:
09912 #line 4647 "ripper.y"
09913     {
09914 #if 0
09915                         (yyval.val) = (yyvsp[(1) - (1)].val);
09916 #endif
09917                         (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
09918 
09919                     ;}
09920     break;
09921 
09922   case 529:
09923 #line 4655 "ripper.y"
09924     {
09925 #if 0
09926                         NODE *opts = (yyvsp[(1) - (3)].val);
09927 
09928                         while (opts->nd_next) {
09929                             opts = opts->nd_next;
09930                         }
09931                         opts->nd_next = (yyvsp[(3) - (3)].val);
09932                         (yyval.val) = (yyvsp[(1) - (3)].val);
09933 #endif
09934                         (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
09935 
09936                     ;}
09937     break;
09938 
09939   case 532:
09940 #line 4675 "ripper.y"
09941     {
09942 #if 0
09943                         if (!is_local_id((yyvsp[(2) - (2)].val)))
09944                             yyerror("rest argument must be local variable");
09945 #endif
09946                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val))));
09947 #if 0
09948                         (yyval.val) = (yyvsp[(2) - (2)].val);
09949 #endif
09950                         (yyval.val) = dispatch1(rest_param, (yyvsp[(2) - (2)].val));
09951 
09952                     ;}
09953     break;
09954 
09955   case 533:
09956 #line 4688 "ripper.y"
09957     {
09958 #if 0
09959                         (yyval.val) = internal_id();
09960                         arg_var((yyval.val));
09961 #endif
09962                         (yyval.val) = dispatch1(rest_param, Qnil);
09963 
09964                     ;}
09965     break;
09966 
09967   case 536:
09968 #line 4703 "ripper.y"
09969     {
09970 #if 0
09971                         if (!is_local_id((yyvsp[(2) - (2)].val)))
09972                             yyerror("block argument must be local variable");
09973                         else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].val)))
09974                             yyerror("duplicated block argument name");
09975 #endif
09976                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].val))));
09977 #if 0
09978                         (yyval.val) = (yyvsp[(2) - (2)].val);
09979 #endif
09980                         (yyval.val) = dispatch1(blockarg, (yyvsp[(2) - (2)].val));
09981 
09982                     ;}
09983     break;
09984 
09985   case 537:
09986 #line 4720 "ripper.y"
09987     {
09988                         (yyval.val) = (yyvsp[(2) - (2)].val);
09989                     ;}
09990     break;
09991 
09992   case 538:
09993 #line 4724 "ripper.y"
09994     {
09995 #if 0
09996                         (yyval.val) = 0;
09997 #endif
09998                         (yyval.val) = Qundef;
09999 
10000                     ;}
10001     break;
10002 
10003   case 539:
10004 #line 4734 "ripper.y"
10005     {
10006 #if 0
10007                         value_expr((yyvsp[(1) - (1)].val));
10008                         (yyval.val) = (yyvsp[(1) - (1)].val);
10009                         if (!(yyval.val)) (yyval.val) = NEW_NIL();
10010 #endif
10011                         (yyval.val) = (yyvsp[(1) - (1)].val);
10012 
10013                     ;}
10014     break;
10015 
10016   case 540:
10017 #line 4743 "ripper.y"
10018     {lex_state = EXPR_BEG;;}
10019     break;
10020 
10021   case 541:
10022 #line 4744 "ripper.y"
10023     {
10024 #if 0
10025                         if ((yyvsp[(3) - (4)].val) == 0) {
10026                             yyerror("can't define singleton method for ().");
10027                         }
10028                         else {
10029                             switch (nd_type((yyvsp[(3) - (4)].val))) {
10030                               case NODE_STR:
10031                               case NODE_DSTR:
10032                               case NODE_XSTR:
10033                               case NODE_DXSTR:
10034                               case NODE_DREGX:
10035                               case NODE_LIT:
10036                               case NODE_ARRAY:
10037                               case NODE_ZARRAY:
10038                                 yyerror("can't define singleton method for literals");
10039                               default:
10040                                 value_expr((yyvsp[(3) - (4)].val));
10041                                 break;
10042                             }
10043                         }
10044                         (yyval.val) = (yyvsp[(3) - (4)].val);
10045 #endif
10046                         (yyval.val) = dispatch1(paren, (yyvsp[(3) - (4)].val));
10047 
10048                     ;}
10049     break;
10050 
10051   case 543:
10052 #line 4774 "ripper.y"
10053     {
10054 #if 0
10055                         (yyval.val) = (yyvsp[(1) - (2)].val);
10056 #endif
10057                         (yyval.val) = dispatch1(assoclist_from_args, (yyvsp[(1) - (2)].val));
10058 
10059                     ;}
10060     break;
10061 
10062   case 544:
10063 #line 4786 "ripper.y"
10064     {
10065                         (yyval.val) = rb_ary_new3(1, (yyvsp[(1) - (1)].val));
10066                     ;}
10067     break;
10068 
10069   case 545:
10070 #line 4791 "ripper.y"
10071     {
10072 #if 0
10073                         (yyval.val) = list_concat((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10074 #endif
10075                         (yyval.val) = rb_ary_push((yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10076 
10077                     ;}
10078     break;
10079 
10080   case 546:
10081 #line 4801 "ripper.y"
10082     {
10083 #if 0
10084                         (yyval.val) = list_append(NEW_LIST((yyvsp[(1) - (3)].val)), (yyvsp[(3) - (3)].val));
10085 #endif
10086                         (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (3)].val), (yyvsp[(3) - (3)].val));
10087 
10088                     ;}
10089     break;
10090 
10091   case 547:
10092 #line 4809 "ripper.y"
10093     {
10094 #if 0
10095                         (yyval.val) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].val)))), (yyvsp[(2) - (2)].val));
10096 #endif
10097                         (yyval.val) = dispatch2(assoc_new, (yyvsp[(1) - (2)].val), (yyvsp[(2) - (2)].val));
10098 
10099                     ;}
10100     break;
10101 
10102   case 558:
10103 #line 4837 "ripper.y"
10104     { (yyval.val) = (yyvsp[(1) - (1)].val); ;}
10105     break;
10106 
10107   case 559:
10108 #line 4842 "ripper.y"
10109     { (yyval.val) = (yyvsp[(1) - (1)].val); ;}
10110     break;
10111 
10112   case 569:
10113 #line 4865 "ripper.y"
10114     {yyerrok;;}
10115     break;
10116 
10117   case 572:
10118 #line 4870 "ripper.y"
10119     {yyerrok;;}
10120     break;
10121 
10122   case 573:
10123 #line 4874 "ripper.y"
10124     {
10125 #if 0
10126                         (yyval.val) = 0;
10127 #endif
10128                         (yyval.val) = Qundef;
10129 
10130                     ;}
10131     break;
10132 
10133 
10134 /* Line 1267 of yacc.c.  */
10135 #line 10134 "parse.c"
10136       default: break;
10137     }
10138   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10139 
10140   YYPOPSTACK (yylen);
10141   yylen = 0;
10142   YY_STACK_PRINT (yyss, yyssp);
10143 
10144   *++yyvsp = yyval;
10145 
10146 
10147   /* Now `shift' the result of the reduction.  Determine what state
10148      that goes to, based on the state we popped back to and the rule
10149      number reduced by.  */
10150 
10151   yyn = yyr1[yyn];
10152 
10153   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10154   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10155     yystate = yytable[yystate];
10156   else
10157     yystate = yydefgoto[yyn - YYNTOKENS];
10158 
10159   goto yynewstate;
10160 
10161 
10162 /*------------------------------------.
10163 | yyerrlab -- here on detecting error |
10164 `------------------------------------*/
10165 yyerrlab:
10166   /* If not already recovering from an error, report this error.  */
10167   if (!yyerrstatus)
10168     {
10169       ++yynerrs;
10170 #if ! YYERROR_VERBOSE
10171       parser_yyerror (parser, YY_("syntax error"));
10172 #else
10173       {
10174         YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10175         if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10176           {
10177             YYSIZE_T yyalloc = 2 * yysize;
10178             if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10179               yyalloc = YYSTACK_ALLOC_MAXIMUM;
10180             if (yymsg != yymsgbuf)
10181               YYSTACK_FREE (yymsg);
10182             yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10183             if (yymsg)
10184               yymsg_alloc = yyalloc;
10185             else
10186               {
10187                 yymsg = yymsgbuf;
10188                 yymsg_alloc = sizeof yymsgbuf;
10189               }
10190           }
10191 
10192         if (0 < yysize && yysize <= yymsg_alloc)
10193           {
10194             (void) yysyntax_error (yymsg, yystate, yychar);
10195             parser_yyerror (parser, yymsg);
10196           }
10197         else
10198           {
10199             parser_yyerror (parser, YY_("syntax error"));
10200             if (yysize != 0)
10201               goto yyexhaustedlab;
10202           }
10203       }
10204 #endif
10205     }
10206 
10207 
10208 
10209   if (yyerrstatus == 3)
10210     {
10211       /* If just tried and failed to reuse look-ahead token after an
10212          error, discard it.  */
10213 
10214       if (yychar <= YYEOF)
10215         {
10216           /* Return failure if at end of input.  */
10217           if (yychar == YYEOF)
10218             YYABORT;
10219         }
10220       else
10221         {
10222           yydestruct ("Error: discarding",
10223                       yytoken, &yylval, parser);
10224           yychar = YYEMPTY;
10225         }
10226     }
10227 
10228   /* Else will try to reuse look-ahead token after shifting the error
10229      token.  */
10230   goto yyerrlab1;
10231 
10232 
10233 /*---------------------------------------------------.
10234 | yyerrorlab -- error raised explicitly by YYERROR.  |
10235 `---------------------------------------------------*/
10236 yyerrorlab:
10237 
10238   /* Pacify compilers like GCC when the user code never invokes
10239      YYERROR and the label yyerrorlab therefore never appears in user
10240      code.  */
10241   if (/*CONSTCOND*/ 0)
10242      goto yyerrorlab;
10243 
10244   /* Do not reclaim the symbols of the rule which action triggered
10245      this YYERROR.  */
10246   YYPOPSTACK (yylen);
10247   yylen = 0;
10248   YY_STACK_PRINT (yyss, yyssp);
10249   yystate = *yyssp;
10250   goto yyerrlab1;
10251 
10252 
10253 /*-------------------------------------------------------------.
10254 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
10255 `-------------------------------------------------------------*/
10256 yyerrlab1:
10257   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
10258 
10259   for (;;)
10260     {
10261       yyn = yypact[yystate];
10262       if (yyn != YYPACT_NINF)
10263         {
10264           yyn += YYTERROR;
10265           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10266             {
10267               yyn = yytable[yyn];
10268               if (0 < yyn)
10269                 break;
10270             }
10271         }
10272 
10273       /* Pop the current state because it cannot handle the error token.  */
10274       if (yyssp == yyss)
10275         YYABORT;
10276 
10277 
10278       yydestruct ("Error: popping",
10279                   yystos[yystate], yyvsp, parser);
10280       YYPOPSTACK (1);
10281       yystate = *yyssp;
10282       YY_STACK_PRINT (yyss, yyssp);
10283     }
10284 
10285   if (yyn == YYFINAL)
10286     YYACCEPT;
10287 
10288   *++yyvsp = yylval;
10289 
10290 
10291   /* Shift the error token.  */
10292   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10293 
10294   yystate = yyn;
10295   goto yynewstate;
10296 
10297 
10298 /*-------------------------------------.
10299 | yyacceptlab -- YYACCEPT comes here.  |
10300 `-------------------------------------*/
10301 yyacceptlab:
10302   yyresult = 0;
10303   goto yyreturn;
10304 
10305 /*-----------------------------------.
10306 | yyabortlab -- YYABORT comes here.  |
10307 `-----------------------------------*/
10308 yyabortlab:
10309   yyresult = 1;
10310   goto yyreturn;
10311 
10312 #ifndef yyoverflow
10313 /*-------------------------------------------------.
10314 | yyexhaustedlab -- memory exhaustion comes here.  |
10315 `-------------------------------------------------*/
10316 yyexhaustedlab:
10317   parser_yyerror (parser, YY_("memory exhausted"));
10318   yyresult = 2;
10319   /* Fall through.  */
10320 #endif
10321 
10322 yyreturn:
10323   if (yychar != YYEOF && yychar != YYEMPTY)
10324      yydestruct ("Cleanup: discarding lookahead",
10325                  yytoken, &yylval, parser);
10326   /* Do not reclaim the symbols of the rule which action triggered
10327      this YYABORT or YYACCEPT.  */
10328   YYPOPSTACK (yylen);
10329   YY_STACK_PRINT (yyss, yyssp);
10330   while (yyssp != yyss)
10331     {
10332       yydestruct ("Cleanup: popping",
10333                   yystos[*yyssp], yyvsp, parser);
10334       YYPOPSTACK (1);
10335     }
10336 #ifndef yyoverflow
10337   if (yyss != yyssa)
10338     YYSTACK_FREE (yyss);
10339 #endif
10340 #if YYERROR_VERBOSE
10341   if (yymsg != yymsgbuf)
10342     YYSTACK_FREE (yymsg);
10343 #endif
10344   /* Make sure YYID is used.  */
10345   return YYID (yyresult);
10346 }
10347 
10348 
10349 #line 4882 "ripper.y"
10350 
10351 # undef parser
10352 # undef yylex
10353 # undef yylval
10354 # define yylval  (*((YYSTYPE*)(parser->parser_yylval)))
10355 
10356 static int parser_regx_options(struct parser_params*);
10357 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10358 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10359 static int parser_parse_string(struct parser_params*,NODE*);
10360 static int parser_here_document(struct parser_params*,NODE*);
10361 
10362 
10363 # define nextc()                   parser_nextc(parser)
10364 # define pushback(c)               parser_pushback(parser, (c))
10365 # define newtok()                  parser_newtok(parser)
10366 # define tokspace(n)               parser_tokspace(parser, (n))
10367 # define tokadd(c)                 parser_tokadd(parser, (c))
10368 # define tok_hex(numlen)           parser_tok_hex(parser, (numlen))
10369 # define read_escape(flags,e)      parser_read_escape(parser, (flags), (e))
10370 # define tokadd_escape(e)          parser_tokadd_escape(parser, (e))
10371 # define regx_options()            parser_regx_options(parser)
10372 # define tokadd_string(f,t,p,n,e)  parser_tokadd_string(parser,(f),(t),(p),(n),(e))
10373 # define parse_string(n)           parser_parse_string(parser,(n))
10374 # define tokaddmbc(c, enc)         parser_tokaddmbc(parser, (c), (enc))
10375 # define here_document(n)          parser_here_document(parser,(n))
10376 # define heredoc_identifier()      parser_heredoc_identifier(parser)
10377 # define heredoc_restore(n)        parser_heredoc_restore(parser,(n))
10378 # define whole_match_p(e,l,i)      parser_whole_match_p(parser,(e),(l),(i))
10379 
10380 #ifndef RIPPER
10381 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
10382 # define set_yylval_num(x) (yylval.num = (x))
10383 # define set_yylval_id(x)  (yylval.id = (x))
10384 # define set_yylval_name(x)  (yylval.id = (x))
10385 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
10386 # define set_yylval_node(x) (yylval.node = (x))
10387 # define yylval_id() (yylval.id)
10388 #else
10389 static inline VALUE
10390 ripper_yylval_id(ID x)
10391 {
10392     return (VALUE)NEW_LASGN(x, ID2SYM(x));
10393 }
10394 # define set_yylval_str(x) (void)(x)
10395 # define set_yylval_num(x) (void)(x)
10396 # define set_yylval_id(x)  (void)(x)
10397 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10398 # define set_yylval_literal(x) (void)(x)
10399 # define set_yylval_node(x) (void)(x)
10400 # define yylval_id() yylval.id
10401 #endif
10402 
10403 #ifndef RIPPER
10404 #define ripper_flush(p) (void)(p)
10405 #else
10406 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
10407 
10408 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
10409 
10410 static int
10411 ripper_has_scan_event(struct parser_params *parser)
10412 {
10413 
10414     if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10415     return lex_p > parser->tokp;
10416 }
10417 
10418 static VALUE
10419 ripper_scan_event_val(struct parser_params *parser, int t)
10420 {
10421     VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10422     VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10423     ripper_flush(parser);
10424     return rval;
10425 }
10426 
10427 static void
10428 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10429 {
10430     if (!ripper_has_scan_event(parser)) return;
10431     yylval_rval = ripper_scan_event_val(parser, t);
10432 }
10433 
10434 static void
10435 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10436 {
10437     if (!ripper_has_scan_event(parser)) return;
10438     (void)ripper_scan_event_val(parser, t);
10439 }
10440 
10441 static void
10442 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10443 {
10444     int saved_line = ruby_sourceline;
10445     const char *saved_tokp = parser->tokp;
10446 
10447     ruby_sourceline = parser->delayed_line;
10448     parser->tokp = lex_pbeg + parser->delayed_col;
10449     yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10450     parser->delayed = Qnil;
10451     ruby_sourceline = saved_line;
10452     parser->tokp = saved_tokp;
10453 }
10454 #endif /* RIPPER */
10455 
10456 #include "ruby/regex.h"
10457 #include "ruby/util.h"
10458 
10459 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
10460    since ours (we hope) works properly with all combinations of
10461    machines, compilers, `char' and `unsigned char' argument types.
10462    (Per Bothner suggested the basic approach.)  */
10463 #undef SIGN_EXTEND_CHAR
10464 #if __STDC__
10465 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10466 #else  /* not __STDC__ */
10467 /* As in Harbison and Steele.  */
10468 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10469 #endif
10470 
10471 #define parser_encoding_name()  (parser->enc->name)
10472 #define parser_mbclen()  mbclen((lex_p-1),lex_pend,parser->enc)
10473 #define parser_precise_mbclen()  rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
10474 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
10475 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
10476 
10477 #define parser_isascii() ISASCII(*(lex_p-1))
10478 
10479 #ifndef RIPPER
10480 static int
10481 token_info_get_column(struct parser_params *parser, const char *token)
10482 {
10483     int column = 1;
10484     const char *p, *pend = lex_p - strlen(token);
10485     for (p = lex_pbeg; p < pend; p++) {
10486         if (*p == '\t') {
10487             column = (((column - 1) / 8) + 1) * 8;
10488         }
10489         column++;
10490     }
10491     return column;
10492 }
10493 
10494 static int
10495 token_info_has_nonspaces(struct parser_params *parser, const char *token)
10496 {
10497     const char *p, *pend = lex_p - strlen(token);
10498     for (p = lex_pbeg; p < pend; p++) {
10499         if (*p != ' ' && *p != '\t') {
10500             return 1;
10501         }
10502     }
10503     return 0;
10504 }
10505 
10506 #undef token_info_push
10507 static void
10508 token_info_push(struct parser_params *parser, const char *token)
10509 {
10510     token_info *ptinfo;
10511 
10512     if (!parser->parser_token_info_enabled) return;
10513     ptinfo = ALLOC(token_info);
10514     ptinfo->token = token;
10515     ptinfo->linenum = ruby_sourceline;
10516     ptinfo->column = token_info_get_column(parser, token);
10517     ptinfo->nonspc = token_info_has_nonspaces(parser, token);
10518     ptinfo->next = parser->parser_token_info;
10519 
10520     parser->parser_token_info = ptinfo;
10521 }
10522 
10523 #undef token_info_pop
10524 static void
10525 token_info_pop(struct parser_params *parser, const char *token)
10526 {
10527     int linenum;
10528     token_info *ptinfo = parser->parser_token_info;
10529 
10530     if (!ptinfo) return;
10531     parser->parser_token_info = ptinfo->next;
10532     if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
10533         goto finish;
10534     }
10535     linenum = ruby_sourceline;
10536     if (linenum == ptinfo->linenum) { /* SKIP */
10537         goto finish;
10538     }
10539     if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
10540         goto finish;
10541     }
10542     if (parser->parser_token_info_enabled) {
10543         rb_compile_warn(ruby_sourcefile, linenum,
10544                         "mismatched indentations at '%s' with '%s' at %d",
10545                         token, ptinfo->token, ptinfo->linenum);
10546     }
10547 
10548   finish:
10549     xfree(ptinfo);
10550 }
10551 #endif  /* RIPPER */
10552 
10553 static int
10554 parser_yyerror(struct parser_params *parser, const char *msg)
10555 {
10556 #ifndef RIPPER
10557     const int max_line_margin = 30;
10558     const char *p, *pe;
10559     char *buf;
10560     long len;
10561     int i;
10562 
10563     compile_error(PARSER_ARG "%s", msg);
10564     p = lex_p;
10565     while (lex_pbeg <= p) {
10566         if (*p == '\n') break;
10567         p--;
10568     }
10569     p++;
10570 
10571     pe = lex_p;
10572     while (pe < lex_pend) {
10573         if (*pe == '\n') break;
10574         pe++;
10575     }
10576 
10577     len = pe - p;
10578     if (len > 4) {
10579         char *p2;
10580         const char *pre = "", *post = "";
10581 
10582         if (len > max_line_margin * 2 + 10) {
10583             if (lex_p - p > max_line_margin) {
10584                 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
10585                 pre = "...";
10586             }
10587             if (pe - lex_p > max_line_margin) {
10588                 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
10589                 post = "...";
10590             }
10591             len = pe - p;
10592         }
10593         buf = ALLOCA_N(char, len+2);
10594         MEMCPY(buf, p, char, len);
10595         buf[len] = '\0';
10596         rb_compile_error_append("%s%s%s", pre, buf, post);
10597 
10598         i = (int)(lex_p - p);
10599         p2 = buf; pe = buf + len;
10600 
10601         while (p2 < pe) {
10602             if (*p2 != '\t') *p2 = ' ';
10603             p2++;
10604         }
10605         buf[i] = '^';
10606         buf[i+1] = '\0';
10607         rb_compile_error_append("%s%s", pre, buf);
10608     }
10609 #else
10610     dispatch1(parse_error, STR_NEW2(msg));
10611 #endif /* !RIPPER */
10612     return 0;
10613 }
10614 
10615 static void parser_prepare(struct parser_params *parser);
10616 
10617 #ifndef RIPPER
10618 static VALUE
10619 debug_lines(const char *f)
10620 {
10621     ID script_lines;
10622     CONST_ID(script_lines, "SCRIPT_LINES__");
10623     if (rb_const_defined_at(rb_cObject, script_lines)) {
10624         VALUE hash = rb_const_get_at(rb_cObject, script_lines);
10625         if (TYPE(hash) == T_HASH) {
10626             VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding());
10627             VALUE lines = rb_ary_new();
10628             rb_hash_aset(hash, fname, lines);
10629             return lines;
10630         }
10631     }
10632     return 0;
10633 }
10634 
10635 static VALUE
10636 coverage(const char *f, int n)
10637 {
10638     VALUE coverages = rb_get_coverages();
10639     if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
10640         VALUE fname = rb_external_str_new_with_enc(f, strlen(f), rb_filesystem_encoding());
10641         VALUE lines = rb_ary_new2(n);
10642         int i;
10643         RBASIC(lines)->klass = 0;
10644         for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
10645         RARRAY(lines)->as.heap.len = n;
10646         rb_hash_aset(coverages, fname, lines);
10647         return lines;
10648     }
10649     return 0;
10650 }
10651 
10652 static int
10653 e_option_supplied(struct parser_params *parser)
10654 {
10655     return strcmp(ruby_sourcefile, "-e") == 0;
10656 }
10657 
10658 static VALUE
10659 yycompile0(VALUE arg, int tracing)
10660 {
10661     int n;
10662     NODE *tree;
10663     struct parser_params *parser = (struct parser_params *)arg;
10664 
10665     if (!compile_for_eval && rb_safe_level() == 0) {
10666         ruby_debug_lines = debug_lines(ruby_sourcefile);
10667         if (ruby_debug_lines && ruby_sourceline > 0) {
10668             VALUE str = STR_NEW0();
10669             n = ruby_sourceline;
10670             do {
10671                 rb_ary_push(ruby_debug_lines, str);
10672             } while (--n);
10673         }
10674 
10675         if (!e_option_supplied(parser)) {
10676             ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
10677         }
10678     }
10679 
10680     parser_prepare(parser);
10681     deferred_nodes = 0;
10682 #ifndef RIPPER
10683     parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose);
10684 #endif
10685     n = yyparse((void*)parser);
10686     ruby_debug_lines = 0;
10687     ruby_coverage = 0;
10688     compile_for_eval = 0;
10689 
10690     lex_strterm = 0;
10691     lex_p = lex_pbeg = lex_pend = 0;
10692     lex_lastline = lex_nextline = 0;
10693     if (parser->nerr) {
10694         return 0;
10695     }
10696     tree = ruby_eval_tree;
10697     if (!tree) {
10698         tree = NEW_NIL();
10699     }
10700     else if (ruby_eval_tree_begin) {
10701         tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
10702     }
10703     return (VALUE)tree;
10704 }
10705 
10706 static NODE*
10707 yycompile(struct parser_params *parser, const char *f, int line)
10708 {
10709     ruby_sourcefile = ruby_strdup(f);
10710     ruby_sourceline = line - 1;
10711     return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
10712 }
10713 #endif /* !RIPPER */
10714 
10715 static rb_encoding *
10716 must_be_ascii_compatible(VALUE s)
10717 {
10718     rb_encoding *enc = rb_enc_get(s);
10719     if (!rb_enc_asciicompat(enc)) {
10720         rb_raise(rb_eArgError, "invalid source encoding");
10721     }
10722     return enc;
10723 }
10724 
10725 static VALUE
10726 lex_get_str(struct parser_params *parser, VALUE s)
10727 {
10728     char *beg, *end, *pend;
10729     rb_encoding *enc = must_be_ascii_compatible(s);
10730 
10731     beg = RSTRING_PTR(s);
10732     if (lex_gets_ptr) {
10733         if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
10734         beg += lex_gets_ptr;
10735     }
10736     pend = RSTRING_PTR(s) + RSTRING_LEN(s);
10737     end = beg;
10738     while (end < pend) {
10739         if (*end++ == '\n') break;
10740     }
10741     lex_gets_ptr = end - RSTRING_PTR(s);
10742     return rb_enc_str_new(beg, end - beg, enc);
10743 }
10744 
10745 static VALUE
10746 lex_getline(struct parser_params *parser)
10747 {
10748     VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
10749     if (NIL_P(line)) return line;
10750     must_be_ascii_compatible(line);
10751 #ifndef RIPPER
10752     if (ruby_debug_lines) {
10753         rb_enc_associate(line, parser->enc);
10754         rb_ary_push(ruby_debug_lines, line);
10755     }
10756     if (ruby_coverage) {
10757         rb_ary_push(ruby_coverage, Qnil);
10758     }
10759 #endif
10760     return line;
10761 }
10762 
10763 #ifdef RIPPER
10764 static rb_data_type_t parser_data_type;
10765 #else
10766 static const rb_data_type_t parser_data_type;
10767 
10768 static NODE*
10769 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
10770 {
10771     struct parser_params *parser;
10772     NODE *node;
10773     volatile VALUE tmp;
10774 
10775     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
10776     lex_gets = lex_get_str;
10777     lex_gets_ptr = 0;
10778     lex_input = s;
10779     lex_pbeg = lex_p = lex_pend = 0;
10780     compile_for_eval = rb_parse_in_eval();
10781 
10782     node = yycompile(parser, f, line);
10783     tmp = vparser; /* prohibit tail call optimization */
10784 
10785     return node;
10786 }
10787 
10788 NODE*
10789 rb_compile_string(const char *f, VALUE s, int line)
10790 {
10791     must_be_ascii_compatible(s);
10792     return parser_compile_string(rb_parser_new(), f, s, line);
10793 }
10794 
10795 NODE*
10796 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
10797 {
10798     must_be_ascii_compatible(s);
10799     return parser_compile_string(vparser, f, s, line);
10800 }
10801 
10802 NODE*
10803 rb_compile_cstr(const char *f, const char *s, int len, int line)
10804 {
10805     VALUE str = rb_str_new(s, len);
10806     return parser_compile_string(rb_parser_new(), f, str, line);
10807 }
10808 
10809 NODE*
10810 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
10811 {
10812     VALUE str = rb_str_new(s, len);
10813     return parser_compile_string(vparser, f, str, line);
10814 }
10815 
10816 static VALUE
10817 lex_io_gets(struct parser_params *parser, VALUE io)
10818 {
10819     return rb_io_gets(io);
10820 }
10821 
10822 NODE*
10823 rb_compile_file(const char *f, VALUE file, int start)
10824 {
10825     VALUE volatile vparser = rb_parser_new();
10826 
10827     return rb_parser_compile_file(vparser, f, file, start);
10828 }
10829 
10830 NODE*
10831 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
10832 {
10833     struct parser_params *parser;
10834     volatile VALUE tmp;
10835     NODE *node;
10836 
10837     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
10838     lex_gets = lex_io_gets;
10839     lex_input = file;
10840     lex_pbeg = lex_p = lex_pend = 0;
10841     compile_for_eval = rb_parse_in_eval();
10842 
10843     node = yycompile(parser, f, start);
10844     tmp = vparser; /* prohibit tail call optimization */
10845 
10846     return node;
10847 }
10848 #endif  /* !RIPPER */
10849 
10850 #define STR_FUNC_ESCAPE 0x01
10851 #define STR_FUNC_EXPAND 0x02
10852 #define STR_FUNC_REGEXP 0x04
10853 #define STR_FUNC_QWORDS 0x08
10854 #define STR_FUNC_SYMBOL 0x10
10855 #define STR_FUNC_INDENT 0x20
10856 
10857 enum string_type {
10858     str_squote = (0),
10859     str_dquote = (STR_FUNC_EXPAND),
10860     str_xquote = (STR_FUNC_EXPAND),
10861     str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
10862     str_sword  = (STR_FUNC_QWORDS),
10863     str_dword  = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
10864     str_ssym   = (STR_FUNC_SYMBOL),
10865     str_dsym   = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
10866 };
10867 
10868 static VALUE
10869 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
10870 {
10871     VALUE str;
10872 
10873     str = rb_enc_str_new(p, n, enc);
10874     if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
10875         if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
10876         }
10877         else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
10878             rb_enc_associate(str, rb_ascii8bit_encoding());
10879         }
10880     }
10881 
10882     return str;
10883 }
10884 
10885 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
10886 #define lex_eol_p() (lex_p >= lex_pend)
10887 #define peek(c) peek_n((c), 0)
10888 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
10889 
10890 static inline int
10891 parser_nextc(struct parser_params *parser)
10892 {
10893     int c;
10894 
10895     if (lex_p == lex_pend) {
10896         VALUE v = lex_nextline;
10897         lex_nextline = 0;
10898         if (!v) {
10899             if (parser->eofp)
10900                 return -1;
10901 
10902             if (!lex_input || NIL_P(v = lex_getline(parser))) {
10903                 parser->eofp = Qtrue;
10904                 lex_goto_eol(parser);
10905                 return -1;
10906             }
10907         }
10908         {
10909 #ifdef RIPPER
10910             if (parser->tokp < lex_pend) {
10911                 if (NIL_P(parser->delayed)) {
10912                     parser->delayed = rb_str_buf_new(1024);
10913                     rb_enc_associate(parser->delayed, parser->enc);
10914                     rb_str_buf_cat(parser->delayed,
10915                                    parser->tokp, lex_pend - parser->tokp);
10916                     parser->delayed_line = ruby_sourceline;
10917                     parser->delayed_col = (int)(parser->tokp - lex_pbeg);
10918                 }
10919                 else {
10920                     rb_str_buf_cat(parser->delayed,
10921                                    parser->tokp, lex_pend - parser->tokp);
10922                 }
10923             }
10924 #endif
10925             if (heredoc_end > 0) {
10926                 ruby_sourceline = heredoc_end;
10927                 heredoc_end = 0;
10928             }
10929             ruby_sourceline++;
10930             parser->line_count++;
10931             lex_pbeg = lex_p = RSTRING_PTR(v);
10932             lex_pend = lex_p + RSTRING_LEN(v);
10933             ripper_flush(parser);
10934             lex_lastline = v;
10935         }
10936     }
10937     c = (unsigned char)*lex_p++;
10938     if (c == '\r' && peek('\n')) {
10939         lex_p++;
10940         c = '\n';
10941     }
10942 
10943     return c;
10944 }
10945 
10946 static void
10947 parser_pushback(struct parser_params *parser, int c)
10948 {
10949     if (c == -1) return;
10950     lex_p--;
10951     if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
10952         lex_p--;
10953     }
10954 }
10955 
10956 #define was_bol() (lex_p == lex_pbeg + 1)
10957 
10958 #define tokfix() (tokenbuf[tokidx]='\0')
10959 #define tok() tokenbuf
10960 #define toklen() tokidx
10961 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
10962 
10963 static char*
10964 parser_newtok(struct parser_params *parser)
10965 {
10966     tokidx = 0;
10967     if (!tokenbuf) {
10968         toksiz = 60;
10969         tokenbuf = ALLOC_N(char, 60);
10970     }
10971     if (toksiz > 4096) {
10972         toksiz = 60;
10973         REALLOC_N(tokenbuf, char, 60);
10974     }
10975     return tokenbuf;
10976 }
10977 
10978 static char *
10979 parser_tokspace(struct parser_params *parser, int n)
10980 {
10981     tokidx += n;
10982 
10983     if (tokidx >= toksiz) {
10984         do {toksiz *= 2;} while (toksiz < tokidx);
10985         REALLOC_N(tokenbuf, char, toksiz);
10986     }
10987     return &tokenbuf[tokidx-n];
10988 }
10989 
10990 static void
10991 parser_tokadd(struct parser_params *parser, int c)
10992 {
10993     tokenbuf[tokidx++] = (char)c;
10994     if (tokidx >= toksiz) {
10995         toksiz *= 2;
10996         REALLOC_N(tokenbuf, char, toksiz);
10997     }
10998 }
10999 
11000 static int
11001 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11002 {
11003     int c;
11004 
11005     c = scan_hex(lex_p, 2, numlen);
11006     if (!*numlen) {
11007         yyerror("invalid hex escape");
11008         return 0;
11009     }
11010     lex_p += *numlen;
11011     return c;
11012 }
11013 
11014 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11015 
11016 static int
11017 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11018                    int string_literal, int symbol_literal, int regexp_literal)
11019 {
11020     /*
11021      * If string_literal is true, then we allow multiple codepoints
11022      * in \u{}, and add the codepoints to the current token.
11023      * Otherwise we're parsing a character literal and return a single
11024      * codepoint without adding it
11025      */
11026 
11027     int codepoint;
11028     size_t numlen;
11029 
11030     if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11031 
11032     if (peek('{')) {  /* handle \u{...} form */
11033         do {
11034             if (regexp_literal) { tokadd(*lex_p); }
11035             nextc();
11036             codepoint = scan_hex(lex_p, 6, &numlen);
11037             if (numlen == 0)  {
11038                 yyerror("invalid Unicode escape");
11039                 return 0;
11040             }
11041             if (codepoint > 0x10ffff) {
11042                 yyerror("invalid Unicode codepoint (too large)");
11043                 return 0;
11044             }
11045             lex_p += numlen;
11046             if (regexp_literal) {
11047                 tokcopy((int)numlen);
11048             }
11049             else if (codepoint >= 0x80) {
11050                 *encp = UTF8_ENC();
11051                 if (string_literal) tokaddmbc(codepoint, *encp);
11052             }
11053             else if (string_literal) {
11054                 tokadd(codepoint);
11055             }
11056         } while (string_literal && (peek(' ') || peek('\t')));
11057 
11058         if (!peek('}')) {
11059             yyerror("unterminated Unicode escape");
11060             return 0;
11061         }
11062 
11063         if (regexp_literal) { tokadd('}'); }
11064         nextc();
11065     }
11066     else {                      /* handle \uxxxx form */
11067         codepoint = scan_hex(lex_p, 4, &numlen);
11068         if (numlen < 4) {
11069             yyerror("invalid Unicode escape");
11070             return 0;
11071         }
11072         lex_p += 4;
11073         if (regexp_literal) {
11074             tokcopy(4);
11075         }
11076         else if (codepoint >= 0x80) {
11077             *encp = UTF8_ENC();
11078             if (string_literal) tokaddmbc(codepoint, *encp);
11079         }
11080         else if (string_literal) {
11081             tokadd(codepoint);
11082         }
11083     }
11084 
11085     return codepoint;
11086 }
11087 
11088 #define ESCAPE_CONTROL 1
11089 #define ESCAPE_META    2
11090 
11091 static int
11092 parser_read_escape(struct parser_params *parser, int flags,
11093                    rb_encoding **encp)
11094 {
11095     int c;
11096     size_t numlen;
11097 
11098     switch (c = nextc()) {
11099       case '\\':        /* Backslash */
11100         return c;
11101 
11102       case 'n': /* newline */
11103         return '\n';
11104 
11105       case 't': /* horizontal tab */
11106         return '\t';
11107 
11108       case 'r': /* carriage-return */
11109         return '\r';
11110 
11111       case 'f': /* form-feed */
11112         return '\f';
11113 
11114       case 'v': /* vertical tab */
11115         return '\13';
11116 
11117       case 'a': /* alarm(bell) */
11118         return '\007';
11119 
11120       case 'e': /* escape */
11121         return 033;
11122 
11123       case '0': case '1': case '2': case '3': /* octal constant */
11124       case '4': case '5': case '6': case '7':
11125         pushback(c);
11126         c = scan_oct(lex_p, 3, &numlen);
11127         lex_p += numlen;
11128         return c;
11129 
11130       case 'x': /* hex constant */
11131         c = tok_hex(&numlen);
11132         if (numlen == 0) return 0;
11133         return c;
11134 
11135       case 'b': /* backspace */
11136         return '\010';
11137 
11138       case 's': /* space */
11139         return ' ';
11140 
11141       case 'M':
11142         if (flags & ESCAPE_META) goto eof;
11143         if ((c = nextc()) != '-') {
11144             pushback(c);
11145             goto eof;
11146         }
11147         if ((c = nextc()) == '\\') {
11148             if (peek('u')) goto eof;
11149             return read_escape(flags|ESCAPE_META, encp) | 0x80;
11150         }
11151         else if (c == -1 || !ISASCII(c)) goto eof;
11152         else {
11153             return ((c & 0xff) | 0x80);
11154         }
11155 
11156       case 'C':
11157         if ((c = nextc()) != '-') {
11158             pushback(c);
11159             goto eof;
11160         }
11161       case 'c':
11162         if (flags & ESCAPE_CONTROL) goto eof;
11163         if ((c = nextc())== '\\') {
11164             if (peek('u')) goto eof;
11165             c = read_escape(flags|ESCAPE_CONTROL, encp);
11166         }
11167         else if (c == '?')
11168             return 0177;
11169         else if (c == -1 || !ISASCII(c)) goto eof;
11170         return c & 0x9f;
11171 
11172       eof:
11173       case -1:
11174         yyerror("Invalid escape character syntax");
11175         return '\0';
11176 
11177       default:
11178         return c;
11179     }
11180 }
11181 
11182 static void
11183 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11184 {
11185     int len = rb_enc_codelen(c, enc);
11186     rb_enc_mbcput(c, tokspace(len), enc);
11187 }
11188 
11189 static int
11190 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11191 {
11192     int c;
11193     int flags = 0;
11194     size_t numlen;
11195 
11196   first:
11197     switch (c = nextc()) {
11198       case '\n':
11199         return 0;               /* just ignore */
11200 
11201       case '0': case '1': case '2': case '3': /* octal constant */
11202       case '4': case '5': case '6': case '7':
11203         {
11204             ruby_scan_oct(--lex_p, 3, &numlen);
11205             if (numlen == 0) goto eof;
11206             lex_p += numlen;
11207             tokcopy((int)numlen + 1);
11208         }
11209         return 0;
11210 
11211       case 'x': /* hex constant */
11212         {
11213             tok_hex(&numlen);
11214             if (numlen == 0) return -1;
11215             tokcopy((int)numlen + 2);
11216         }
11217         return 0;
11218 
11219       case 'M':
11220         if (flags & ESCAPE_META) goto eof;
11221         if ((c = nextc()) != '-') {
11222             pushback(c);
11223             goto eof;
11224         }
11225         tokcopy(3);
11226         flags |= ESCAPE_META;
11227         goto escaped;
11228 
11229       case 'C':
11230         if (flags & ESCAPE_CONTROL) goto eof;
11231         if ((c = nextc()) != '-') {
11232             pushback(c);
11233             goto eof;
11234         }
11235         tokcopy(3);
11236         goto escaped;
11237 
11238       case 'c':
11239         if (flags & ESCAPE_CONTROL) goto eof;
11240         tokcopy(2);
11241         flags |= ESCAPE_CONTROL;
11242       escaped:
11243         if ((c = nextc()) == '\\') {
11244             goto first;
11245         }
11246         else if (c == -1) goto eof;
11247         tokadd(c);
11248         return 0;
11249 
11250       eof:
11251       case -1:
11252         yyerror("Invalid escape character syntax");
11253         return -1;
11254 
11255       default:
11256         tokadd('\\');
11257         tokadd(c);
11258     }
11259     return 0;
11260 }
11261 
11262 static int
11263 parser_regx_options(struct parser_params *parser)
11264 {
11265     int kcode = 0;
11266     int kopt = 0;
11267     int options = 0;
11268     int c, opt, kc;
11269 
11270     newtok();
11271     while (c = nextc(), ISALPHA(c)) {
11272         if (c == 'o') {
11273             options |= RE_OPTION_ONCE;
11274         }
11275         else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11276             if (kc >= 0) {
11277                 if (kc != rb_ascii8bit_encindex()) kcode = c;
11278                 kopt = opt;
11279             }
11280             else {
11281                 options |= opt;
11282             }
11283         }
11284         else {
11285             tokadd(c);
11286         }
11287     }
11288     options |= kopt;
11289     pushback(c);
11290     if (toklen()) {
11291         tokfix();
11292         compile_error(PARSER_ARG "unknown regexp option%s - %s",
11293                       toklen() > 1 ? "s" : "", tok());
11294     }
11295     return options | RE_OPTION_ENCODING(kcode);
11296 }
11297 
11298 static void
11299 dispose_string(VALUE str)
11300 {
11301     /* TODO: should use another API? */
11302     if (RBASIC(str)->flags & RSTRING_NOEMBED)
11303         xfree(RSTRING_PTR(str));
11304     rb_gc_force_recycle(str);
11305 }
11306 
11307 static int
11308 parser_tokadd_mbchar(struct parser_params *parser, int c)
11309 {
11310     int len = parser_precise_mbclen();
11311     if (!MBCLEN_CHARFOUND_P(len)) {
11312         compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11313         return -1;
11314     }
11315     tokadd(c);
11316     lex_p += --len;
11317     if (len > 0) tokcopy(len);
11318     return c;
11319 }
11320 
11321 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
11322 
11323 static int
11324 parser_tokadd_string(struct parser_params *parser,
11325                      int func, int term, int paren, long *nest,
11326                      rb_encoding **encp)
11327 {
11328     int c;
11329     int has_nonascii = 0;
11330     rb_encoding *enc = *encp;
11331     char *errbuf = 0;
11332     static const char mixed_msg[] = "%s mixed within %s source";
11333 
11334 #define mixed_error(enc1, enc2) if (!errbuf) {  \
11335         size_t len = sizeof(mixed_msg) - 4;     \
11336         len += strlen(rb_enc_name(enc1));       \
11337         len += strlen(rb_enc_name(enc2));       \
11338         errbuf = ALLOCA_N(char, len);           \
11339         snprintf(errbuf, len, mixed_msg,        \
11340                  rb_enc_name(enc1),             \
11341                  rb_enc_name(enc2));            \
11342         yyerror(errbuf);                        \
11343     }
11344 #define mixed_escape(beg, enc1, enc2) do {      \
11345         const char *pos = lex_p;                \
11346         lex_p = (beg);                          \
11347         mixed_error((enc1), (enc2));            \
11348         lex_p = pos;                            \
11349     } while (0)
11350 
11351     while ((c = nextc()) != -1) {
11352         if (paren && c == paren) {
11353             ++*nest;
11354         }
11355         else if (c == term) {
11356             if (!nest || !*nest) {
11357                 pushback(c);
11358                 break;
11359             }
11360             --*nest;
11361         }
11362         else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11363             int c2 = *lex_p;
11364             if (c2 == '$' || c2 == '@' || c2 == '{') {
11365                 pushback(c);
11366                 break;
11367             }
11368         }
11369         else if (c == '\\') {
11370             const char *beg = lex_p - 1;
11371             c = nextc();
11372             switch (c) {
11373               case '\n':
11374                 if (func & STR_FUNC_QWORDS) break;
11375                 if (func & STR_FUNC_EXPAND) continue;
11376                 tokadd('\\');
11377                 break;
11378 
11379               case '\\':
11380                 if (func & STR_FUNC_ESCAPE) tokadd(c);
11381                 break;
11382 
11383               case 'u':
11384                 if ((func & STR_FUNC_EXPAND) == 0) {
11385                     tokadd('\\');
11386                     break;
11387                 }
11388                 parser_tokadd_utf8(parser, &enc, 1,
11389                                    func & STR_FUNC_SYMBOL,
11390                                    func & STR_FUNC_REGEXP);
11391                 if (has_nonascii && enc != *encp) {
11392                     mixed_escape(beg, enc, *encp);
11393                 }
11394                 continue;
11395 
11396               default:
11397                 if (c == -1) return -1;
11398                 if (!ISASCII(c)) {
11399                     if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
11400                     goto non_ascii;
11401                 }
11402                 if (func & STR_FUNC_REGEXP) {
11403                     pushback(c);
11404                     if ((c = tokadd_escape(&enc)) < 0)
11405                         return -1;
11406                     if (has_nonascii && enc != *encp) {
11407                         mixed_escape(beg, enc, *encp);
11408                     }
11409                     continue;
11410                 }
11411                 else if (func & STR_FUNC_EXPAND) {
11412                     pushback(c);
11413                     if (func & STR_FUNC_ESCAPE) tokadd('\\');
11414                     c = read_escape(0, &enc);
11415                 }
11416                 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11417                     /* ignore backslashed spaces in %w */
11418                 }
11419                 else if (c != term && !(paren && c == paren)) {
11420                     tokadd('\\');
11421                     pushback(c);
11422                     continue;
11423                 }
11424             }
11425         }
11426         else if (!parser_isascii()) {
11427           non_ascii:
11428             has_nonascii = 1;
11429             if (enc != *encp) {
11430                 mixed_error(enc, *encp);
11431                 continue;
11432             }
11433             if (tokadd_mbchar(c) == -1) return -1;
11434             continue;
11435         }
11436         else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11437             pushback(c);
11438             break;
11439         }
11440         if (c & 0x80) {
11441             has_nonascii = 1;
11442             if (enc != *encp) {
11443                 mixed_error(enc, *encp);
11444                 continue;
11445             }
11446         }
11447         tokadd(c);
11448     }
11449     *encp = enc;
11450     return c;
11451 }
11452 
11453 #define NEW_STRTERM(func, term, paren) \
11454         rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11455 
11456 #ifdef RIPPER
11457 static void
11458 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
11459 {
11460     if (!NIL_P(parser->delayed)) {
11461         ptrdiff_t len = lex_p - parser->tokp;
11462         if (len > 0) {
11463             rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
11464         }
11465         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
11466         parser->tokp = lex_p;
11467     }
11468 }
11469 
11470 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
11471 #else
11472 #define flush_string_content(enc) ((void)(enc))
11473 #endif
11474 
11475 static int
11476 parser_parse_string(struct parser_params *parser, NODE *quote)
11477 {
11478     int func = (int)quote->nd_func;
11479     int term = nd_term(quote);
11480     int paren = nd_paren(quote);
11481     int c, space = 0;
11482     rb_encoding *enc = parser->enc;
11483 
11484     if (func == -1) return tSTRING_END;
11485     c = nextc();
11486     if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11487         do {c = nextc();} while (ISSPACE(c));
11488         space = 1;
11489     }
11490     if (c == term && !quote->nd_nest) {
11491         if (func & STR_FUNC_QWORDS) {
11492             quote->nd_func = -1;
11493             return ' ';
11494         }
11495         if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11496         set_yylval_num(regx_options());
11497         return tREGEXP_END;
11498     }
11499     if (space) {
11500         pushback(c);
11501         return ' ';
11502     }
11503     newtok();
11504     if ((func & STR_FUNC_EXPAND) && c == '#') {
11505         switch (c = nextc()) {
11506           case '$':
11507           case '@':
11508             pushback(c);
11509             return tSTRING_DVAR;
11510           case '{':
11511             return tSTRING_DBEG;
11512         }
11513         tokadd('#');
11514     }
11515     pushback(c);
11516     if (tokadd_string(func, term, paren, &quote->nd_nest,
11517                       &enc) == -1) {
11518         ruby_sourceline = nd_line(quote);
11519         if (func & STR_FUNC_REGEXP) {
11520             if (parser->eofp)
11521                 compile_error(PARSER_ARG "unterminated regexp meets end of file");
11522             return tREGEXP_END;
11523         }
11524         else {
11525             if (parser->eofp)
11526                 compile_error(PARSER_ARG "unterminated string meets end of file");
11527             return tSTRING_END;
11528         }
11529     }
11530 
11531     tokfix();
11532     set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
11533     flush_string_content(enc);
11534 
11535     return tSTRING_CONTENT;
11536 }
11537 
11538 static int
11539 parser_heredoc_identifier(struct parser_params *parser)
11540 {
11541     int c = nextc(), term, func = 0;
11542     long len;
11543 
11544     if (c == '-') {
11545         c = nextc();
11546         func = STR_FUNC_INDENT;
11547     }
11548     switch (c) {
11549       case '\'':
11550         func |= str_squote; goto quoted;
11551       case '"':
11552         func |= str_dquote; goto quoted;
11553       case '`':
11554         func |= str_xquote;
11555       quoted:
11556         newtok();
11557         tokadd(func);
11558         term = c;
11559         while ((c = nextc()) != -1 && c != term) {
11560             if (tokadd_mbchar(c) == -1) return 0;
11561         }
11562         if (c == -1) {
11563             compile_error(PARSER_ARG "unterminated here document identifier");
11564             return 0;
11565         }
11566         break;
11567 
11568       default:
11569         if (!parser_is_identchar()) {
11570             pushback(c);
11571             if (func & STR_FUNC_INDENT) {
11572                 pushback('-');
11573             }
11574             return 0;
11575         }
11576         newtok();
11577         term = '"';
11578         tokadd(func |= str_dquote);
11579         do {
11580             if (tokadd_mbchar(c) == -1) return 0;
11581         } while ((c = nextc()) != -1 && parser_is_identchar());
11582         pushback(c);
11583         break;
11584     }
11585 
11586     tokfix();
11587 #ifdef RIPPER
11588     ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
11589 #endif
11590     len = lex_p - lex_pbeg;
11591     lex_goto_eol(parser);
11592     lex_strterm = rb_node_newnode(NODE_HEREDOC,
11593                                   STR_NEW(tok(), toklen()),     /* nd_lit */
11594                                   len,                          /* nd_nth */
11595                                   lex_lastline);                /* nd_orig */
11596     nd_set_line(lex_strterm, ruby_sourceline);
11597     ripper_flush(parser);
11598     return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
11599 }
11600 
11601 static void
11602 parser_heredoc_restore(struct parser_params *parser, NODE *here)
11603 {
11604     VALUE line;
11605 
11606     line = here->nd_orig;
11607     lex_lastline = line;
11608     lex_pbeg = RSTRING_PTR(line);
11609     lex_pend = lex_pbeg + RSTRING_LEN(line);
11610     lex_p = lex_pbeg + here->nd_nth;
11611     heredoc_end = ruby_sourceline;
11612     ruby_sourceline = nd_line(here);
11613     dispose_string(here->nd_lit);
11614     rb_gc_force_recycle((VALUE)here);
11615     ripper_flush(parser);
11616 }
11617 
11618 static int
11619 parser_whole_match_p(struct parser_params *parser,
11620     const char *eos, long len, int indent)
11621 {
11622     const char *p = lex_pbeg;
11623     long n;
11624 
11625     if (indent) {
11626         while (*p && ISSPACE(*p)) p++;
11627     }
11628     n = lex_pend - (p + len);
11629     if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
11630     return strncmp(eos, p, len) == 0;
11631 }
11632 
11633 #ifdef RIPPER
11634 static void
11635 ripper_dispatch_heredoc_end(struct parser_params *parser)
11636 {
11637     if (!NIL_P(parser->delayed))
11638         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
11639     lex_goto_eol(parser);
11640     ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
11641 }
11642 
11643 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
11644 #else
11645 #define dispatch_heredoc_end() ((void)0)
11646 #endif
11647 
11648 static int
11649 parser_here_document(struct parser_params *parser, NODE *here)
11650 {
11651     int c, func, indent = 0;
11652     const char *eos, *p, *pend;
11653     long len;
11654     VALUE str = 0;
11655     rb_encoding *enc = parser->enc;
11656 
11657     eos = RSTRING_PTR(here->nd_lit);
11658     len = RSTRING_LEN(here->nd_lit) - 1;
11659     indent = (func = *eos++) & STR_FUNC_INDENT;
11660 
11661     if ((c = nextc()) == -1) {
11662       error:
11663         compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
11664 #ifdef RIPPER
11665         if (NIL_P(parser->delayed)) {
11666             ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
11667         }
11668         else {
11669             if (str ||
11670                 ((len = lex_p - parser->tokp) > 0 &&
11671                  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
11672                 rb_str_append(parser->delayed, str);
11673             }
11674             ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
11675         }
11676         lex_goto_eol(parser);
11677 #endif
11678       restore:
11679         heredoc_restore(lex_strterm);
11680         lex_strterm = 0;
11681         return 0;
11682     }
11683     if (was_bol() && whole_match_p(eos, len, indent)) {
11684         dispatch_heredoc_end();
11685         heredoc_restore(lex_strterm);
11686         return tSTRING_END;
11687     }
11688 
11689     if (!(func & STR_FUNC_EXPAND)) {
11690         do {
11691             p = RSTRING_PTR(lex_lastline);
11692             pend = lex_pend;
11693             if (pend > p) {
11694                 switch (pend[-1]) {
11695                   case '\n':
11696                     if (--pend == p || pend[-1] != '\r') {
11697                         pend++;
11698                         break;
11699                     }
11700                   case '\r':
11701                     --pend;
11702                 }
11703             }
11704             if (str)
11705                 rb_str_cat(str, p, pend - p);
11706             else
11707                 str = STR_NEW(p, pend - p);
11708             if (pend < lex_pend) rb_str_cat(str, "\n", 1);
11709             lex_goto_eol(parser);
11710             if (nextc() == -1) {
11711                 if (str) dispose_string(str);
11712                 goto error;
11713             }
11714         } while (!whole_match_p(eos, len, indent));
11715     }
11716     else {
11717         /*      int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
11718         newtok();
11719         if (c == '#') {
11720             switch (c = nextc()) {
11721               case '$':
11722               case '@':
11723                 pushback(c);
11724                 return tSTRING_DVAR;
11725               case '{':
11726                 return tSTRING_DBEG;
11727             }
11728             tokadd('#');
11729         }
11730         do {
11731             pushback(c);
11732             if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
11733                 if (parser->eofp) goto error;
11734                 goto restore;
11735             }
11736             if (c != '\n') {
11737                 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
11738                 flush_string_content(enc);
11739                 return tSTRING_CONTENT;
11740             }
11741             tokadd(nextc());
11742             /*      if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
11743             if ((c = nextc()) == -1) goto error;
11744         } while (!whole_match_p(eos, len, indent));
11745         str = STR_NEW3(tok(), toklen(), enc, func);
11746     }
11747     dispatch_heredoc_end();
11748     heredoc_restore(lex_strterm);
11749     lex_strterm = NEW_STRTERM(-1, 0, 0);
11750     set_yylval_str(str);
11751     return tSTRING_CONTENT;
11752 }
11753 
11754 #include "lex.c"
11755 
11756 static void
11757 arg_ambiguous_gen(struct parser_params *parser)
11758 {
11759 #ifndef RIPPER
11760     rb_warning0("ambiguous first argument; put parentheses or even spaces");
11761 #else
11762     dispatch0(arg_ambiguous);
11763 #endif
11764 }
11765 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
11766 
11767 static ID
11768 formal_argument_gen(struct parser_params *parser, ID lhs)
11769 {
11770 #ifndef RIPPER
11771     if (!is_local_id(lhs))
11772         yyerror("formal argument must be local variable");
11773 #endif
11774     shadowing_lvar(lhs);
11775     return lhs;
11776 }
11777 
11778 static int
11779 lvar_defined_gen(struct parser_params *parser, ID id)
11780 {
11781     return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
11782 }
11783 
11784 /* emacsen -*- hack */
11785 static long
11786 parser_encode_length(struct parser_params *parser, const char *name, long len)
11787 {
11788     long nlen;
11789 
11790     if (len > 5 && name[nlen = len - 5] == '-') {
11791         if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
11792             return nlen;
11793     }
11794     if (len > 4 && name[nlen = len - 4] == '-') {
11795         if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
11796             return nlen;
11797         if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
11798             !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
11799             /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
11800             return nlen;
11801     }
11802     return len;
11803 }
11804 
11805 static void
11806 parser_set_encode(struct parser_params *parser, const char *name)
11807 {
11808     int idx = rb_enc_find_index(name);
11809     rb_encoding *enc;
11810     VALUE excargs[3];
11811 
11812     if (idx < 0) {
11813         excargs[1] = rb_sprintf("unknown encoding name: %s", name);
11814       error:
11815         excargs[0] = rb_eArgError;
11816         excargs[2] = rb_make_backtrace();
11817         rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
11818         rb_exc_raise(rb_make_exception(3, excargs));
11819     }
11820     enc = rb_enc_from_index(idx);
11821     if (!rb_enc_asciicompat(enc)) {
11822         excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
11823         goto error;
11824     }
11825     parser->enc = enc;
11826 #ifndef RIPPER
11827     if (ruby_debug_lines) {
11828         long i, n = RARRAY_LEN(ruby_debug_lines);
11829         const VALUE *p = RARRAY_PTR(ruby_debug_lines);
11830         for (i = 0; i < n; ++i) {
11831             rb_enc_associate_index(*p, idx);
11832         }
11833     }
11834 #endif
11835 }
11836 
11837 static int
11838 comment_at_top(struct parser_params *parser)
11839 {
11840     const char *p = lex_pbeg, *pend = lex_p - 1;
11841     if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
11842     while (p < pend) {
11843         if (!ISSPACE(*p)) return 0;
11844         p++;
11845     }
11846     return 1;
11847 }
11848 
11849 #ifndef RIPPER
11850 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
11851 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
11852 
11853 static void
11854 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
11855 {
11856     if (!comment_at_top(parser)) {
11857         return;
11858     }
11859     parser_set_encode(parser, val);
11860 }
11861 
11862 static void
11863 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
11864 {
11865     int *p = &parser->parser_token_info_enabled;
11866 
11867     switch (*val) {
11868       case 't': case 'T':
11869         if (strcasecmp(val, "true") == 0) {
11870             *p = TRUE;
11871             return;
11872         }
11873         break;
11874       case 'f': case 'F':
11875         if (strcasecmp(val, "false") == 0) {
11876             *p = FALSE;
11877             return;
11878         }
11879         break;
11880     }
11881     rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
11882 }
11883 
11884 struct magic_comment {
11885     const char *name;
11886     rb_magic_comment_setter_t func;
11887     rb_magic_comment_length_t length;
11888 };
11889 
11890 static const struct magic_comment magic_comments[] = {
11891     {"coding", magic_comment_encoding, parser_encode_length},
11892     {"encoding", magic_comment_encoding, parser_encode_length},
11893     {"warn_indent", parser_set_token_info},
11894 };
11895 #endif
11896 
11897 static const char *
11898 magic_comment_marker(const char *str, long len)
11899 {
11900     long i = 2;
11901 
11902     while (i < len) {
11903         switch (str[i]) {
11904           case '-':
11905             if (str[i-1] == '*' && str[i-2] == '-') {
11906                 return str + i + 1;
11907             }
11908             i += 2;
11909             break;
11910           case '*':
11911             if (i + 1 >= len) return 0;
11912             if (str[i+1] != '-') {
11913                 i += 4;
11914             }
11915             else if (str[i-1] != '-') {
11916                 i += 2;
11917             }
11918             else {
11919                 return str + i + 2;
11920             }
11921             break;
11922           default:
11923             i += 3;
11924             break;
11925         }
11926     }
11927     return 0;
11928 }
11929 
11930 static int
11931 parser_magic_comment(struct parser_params *parser, const char *str, long len)
11932 {
11933     VALUE name = 0, val = 0;
11934     const char *beg, *end, *vbeg, *vend;
11935 #define str_copy(_s, _p, _n) ((_s) \
11936         ? (void)(rb_str_resize((_s), (_n)), \
11937            MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
11938         : (void)((_s) = STR_NEW((_p), (_n))))
11939 
11940     if (len <= 7) return FALSE;
11941     if (!(beg = magic_comment_marker(str, len))) return FALSE;
11942     if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
11943     str = beg;
11944     len = end - beg - 3;
11945 
11946     /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
11947     while (len > 0) {
11948 #ifndef RIPPER
11949         const struct magic_comment *p = magic_comments;
11950 #endif
11951         char *s;
11952         int i;
11953         long n = 0;
11954 
11955         for (; len > 0 && *str; str++, --len) {
11956             switch (*str) {
11957               case '\'': case '"': case ':': case ';':
11958                 continue;
11959             }
11960             if (!ISSPACE(*str)) break;
11961         }
11962         for (beg = str; len > 0; str++, --len) {
11963             switch (*str) {
11964               case '\'': case '"': case ':': case ';':
11965                 break;
11966               default:
11967                 if (ISSPACE(*str)) break;
11968                 continue;
11969             }
11970             break;
11971         }
11972         for (end = str; len > 0 && ISSPACE(*str); str++, --len);
11973         if (!len) break;
11974         if (*str != ':') continue;
11975 
11976         do str++; while (--len > 0 && ISSPACE(*str));
11977         if (!len) break;
11978         if (*str == '"') {
11979             for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
11980                 if (*str == '\\') {
11981                     --len;
11982                     ++str;
11983                 }
11984             }
11985             vend = str;
11986             if (len) {
11987                 --len;
11988                 ++str;
11989             }
11990         }
11991         else {
11992             for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
11993             vend = str;
11994         }
11995         while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
11996 
11997         n = end - beg;
11998         str_copy(name, beg, n);
11999         s = RSTRING_PTR(name);
12000         for (i = 0; i < n; ++i) {
12001             if (s[i] == '-') s[i] = '_';
12002         }
12003 #ifndef RIPPER
12004         do {
12005             if (STRNCASECMP(p->name, s, n) == 0) {
12006                 n = vend - vbeg;
12007                 if (p->length) {
12008                     n = (*p->length)(parser, vbeg, n);
12009                 }
12010                 str_copy(val, vbeg, n);
12011                 (*p->func)(parser, s, RSTRING_PTR(val));
12012                 break;
12013             }
12014         } while (++p < magic_comments + numberof(magic_comments));
12015 #else
12016         dispatch2(magic_comment, name, val);
12017 #endif
12018     }
12019 
12020     return TRUE;
12021 }
12022 
12023 static void
12024 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12025 {
12026     int sep = 0;
12027     const char *beg = str;
12028     VALUE s;
12029 
12030     for (;;) {
12031         if (send - str <= 6) return;
12032         switch (str[6]) {
12033           case 'C': case 'c': str += 6; continue;
12034           case 'O': case 'o': str += 5; continue;
12035           case 'D': case 'd': str += 4; continue;
12036           case 'I': case 'i': str += 3; continue;
12037           case 'N': case 'n': str += 2; continue;
12038           case 'G': case 'g': str += 1; continue;
12039           case '=': case ':':
12040             sep = 1;
12041             str += 6;
12042             break;
12043           default:
12044             str += 6;
12045             if (ISSPACE(*str)) break;
12046             continue;
12047         }
12048         if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12049     }
12050     for (;;) {
12051         do {
12052             if (++str >= send) return;
12053         } while (ISSPACE(*str));
12054         if (sep) break;
12055         if (*str != '=' && *str != ':') return;
12056         sep = 1;
12057         str++;
12058     }
12059     beg = str;
12060     while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12061     s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12062     parser_set_encode(parser, RSTRING_PTR(s));
12063     rb_str_resize(s, 0);
12064 }
12065 
12066 static void
12067 parser_prepare(struct parser_params *parser)
12068 {
12069     int c = nextc();
12070     switch (c) {
12071       case '#':
12072         if (peek('!')) parser->has_shebang = 1;
12073         break;
12074       case 0xef:                /* UTF-8 BOM marker */
12075         if (lex_pend - lex_p >= 2 &&
12076             (unsigned char)lex_p[0] == 0xbb &&
12077             (unsigned char)lex_p[1] == 0xbf) {
12078             parser->enc = rb_utf8_encoding();
12079             lex_p += 2;
12080             lex_pbeg = lex_p;
12081             return;
12082         }
12083         break;
12084       case EOF:
12085         return;
12086     }
12087     pushback(c);
12088     parser->enc = rb_enc_get(lex_lastline);
12089 }
12090 
12091 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12092 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12093 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12094 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12095 #define IS_LABEL_POSSIBLE() ((lex_state == EXPR_BEG && !cmd_state) || IS_ARG())
12096 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
12097 
12098 #ifndef RIPPER
12099 #define ambiguous_operator(op, syn) ( \
12100     rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12101     rb_warning0("even though it seems like "syn""))
12102 #else
12103 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12104 #endif
12105 #define warn_balanced(op, syn) ((void) \
12106     (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12107      last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12108      last_state != EXPR_ENDARG && \
12109      space_seen && !ISSPACE(c) && \
12110      (ambiguous_operator(op, syn), 0)))
12111 
12112 static int
12113 parser_yylex(struct parser_params *parser)
12114 {
12115     register int c;
12116     int space_seen = 0;
12117     int cmd_state;
12118     enum lex_state_e last_state;
12119     rb_encoding *enc;
12120     int mb;
12121 #ifdef RIPPER
12122     int fallthru = FALSE;
12123 #endif
12124 
12125     if (lex_strterm) {
12126         int token;
12127         if (nd_type(lex_strterm) == NODE_HEREDOC) {
12128             token = here_document(lex_strterm);
12129             if (token == tSTRING_END) {
12130                 lex_strterm = 0;
12131                 lex_state = EXPR_END;
12132             }
12133         }
12134         else {
12135             token = parse_string(lex_strterm);
12136             if (token == tSTRING_END || token == tREGEXP_END) {
12137                 rb_gc_force_recycle((VALUE)lex_strterm);
12138                 lex_strterm = 0;
12139                 lex_state = EXPR_END;
12140             }
12141         }
12142         return token;
12143     }
12144     cmd_state = command_start;
12145     command_start = FALSE;
12146   retry:
12147     last_state = lex_state;
12148     switch (c = nextc()) {
12149       case '\0':                /* NUL */
12150       case '\004':              /* ^D */
12151       case '\032':              /* ^Z */
12152       case -1:                  /* end of script. */
12153         return 0;
12154 
12155         /* white spaces */
12156       case ' ': case '\t': case '\f': case '\r':
12157       case '\13': /* '\v' */
12158         space_seen = 1;
12159 #ifdef RIPPER
12160         while ((c = nextc())) {
12161             switch (c) {
12162               case ' ': case '\t': case '\f': case '\r':
12163               case '\13': /* '\v' */
12164                 break;
12165               default:
12166                 goto outofloop;
12167             }
12168         }
12169       outofloop:
12170         pushback(c);
12171         ripper_dispatch_scan_event(parser, tSP);
12172 #endif
12173         goto retry;
12174 
12175       case '#':         /* it's a comment */
12176         /* no magic_comment in shebang line */
12177         if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12178             if (comment_at_top(parser)) {
12179                 set_file_encoding(parser, lex_p, lex_pend);
12180             }
12181         }
12182         lex_p = lex_pend;
12183 #ifdef RIPPER
12184         ripper_dispatch_scan_event(parser, tCOMMENT);
12185         fallthru = TRUE;
12186 #endif
12187         /* fall through */
12188       case '\n':
12189         switch (lex_state) {
12190           case EXPR_BEG:
12191           case EXPR_FNAME:
12192           case EXPR_DOT:
12193           case EXPR_CLASS:
12194           case EXPR_VALUE:
12195 #ifdef RIPPER
12196             if (!fallthru) {
12197                 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12198             }
12199             fallthru = FALSE;
12200 #endif
12201             goto retry;
12202           default:
12203             break;
12204         }
12205         while ((c = nextc())) {
12206             switch (c) {
12207               case ' ': case '\t': case '\f': case '\r':
12208               case '\13': /* '\v' */
12209                 space_seen = 1;
12210                 break;
12211               case '.': {
12212                   if ((c = nextc()) != '.') {
12213                       pushback(c);
12214                       pushback('.');
12215                       goto retry;
12216                   }
12217               }
12218               default:
12219                 --ruby_sourceline;
12220                 lex_nextline = lex_lastline;
12221               case -1:          /* EOF no decrement*/
12222                 lex_goto_eol(parser);
12223 #ifdef RIPPER
12224                 if (c != -1) {
12225                     parser->tokp = lex_p;
12226                 }
12227 #endif
12228                 goto normal_newline;
12229             }
12230         }
12231       normal_newline:
12232         command_start = TRUE;
12233         lex_state = EXPR_BEG;
12234         return '\n';
12235 
12236       case '*':
12237         if ((c = nextc()) == '*') {
12238             if ((c = nextc()) == '=') {
12239                 set_yylval_id(tPOW);
12240                 lex_state = EXPR_BEG;
12241                 return tOP_ASGN;
12242             }
12243             pushback(c);
12244             c = tPOW;
12245         }
12246         else {
12247             if (c == '=') {
12248                 set_yylval_id('*');
12249                 lex_state = EXPR_BEG;
12250                 return tOP_ASGN;
12251             }
12252             pushback(c);
12253             if (IS_SPCARG(c)) {
12254                 rb_warning0("`*' interpreted as argument prefix");
12255                 c = tSTAR;
12256             }
12257             else if (IS_BEG()) {
12258                 c = tSTAR;
12259             }
12260             else {
12261                 warn_balanced("*", "argument prefix");
12262                 c = '*';
12263             }
12264         }
12265         switch (lex_state) {
12266           case EXPR_FNAME: case EXPR_DOT:
12267             lex_state = EXPR_ARG; break;
12268           default:
12269             lex_state = EXPR_BEG; break;
12270         }
12271         return c;
12272 
12273       case '!':
12274         c = nextc();
12275         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12276             lex_state = EXPR_ARG;
12277             if (c == '@') {
12278                 return '!';
12279             }
12280         }
12281         else {
12282             lex_state = EXPR_BEG;
12283         }
12284         if (c == '=') {
12285             return tNEQ;
12286         }
12287         if (c == '~') {
12288             return tNMATCH;
12289         }
12290         pushback(c);
12291         return '!';
12292 
12293       case '=':
12294         if (was_bol()) {
12295             /* skip embedded rd document */
12296             if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12297 #ifdef RIPPER
12298                 int first_p = TRUE;
12299 
12300                 lex_goto_eol(parser);
12301                 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12302 #endif
12303                 for (;;) {
12304                     lex_goto_eol(parser);
12305 #ifdef RIPPER
12306                     if (!first_p) {
12307                         ripper_dispatch_scan_event(parser, tEMBDOC);
12308                     }
12309                     first_p = FALSE;
12310 #endif
12311                     c = nextc();
12312                     if (c == -1) {
12313                         compile_error(PARSER_ARG "embedded document meets end of file");
12314                         return 0;
12315                     }
12316                     if (c != '=') continue;
12317                     if (strncmp(lex_p, "end", 3) == 0 &&
12318                         (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12319                         break;
12320                     }
12321                 }
12322                 lex_goto_eol(parser);
12323 #ifdef RIPPER
12324                 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12325 #endif
12326                 goto retry;
12327             }
12328         }
12329 
12330         switch (lex_state) {
12331           case EXPR_FNAME: case EXPR_DOT:
12332             lex_state = EXPR_ARG; break;
12333           default:
12334             lex_state = EXPR_BEG; break;
12335         }
12336         if ((c = nextc()) == '=') {
12337             if ((c = nextc()) == '=') {
12338                 return tEQQ;
12339             }
12340             pushback(c);
12341             return tEQ;
12342         }
12343         if (c == '~') {
12344             return tMATCH;
12345         }
12346         else if (c == '>') {
12347             return tASSOC;
12348         }
12349         pushback(c);
12350         return '=';
12351 
12352       case '<':
12353         last_state = lex_state;
12354         c = nextc();
12355         if (c == '<' &&
12356             lex_state != EXPR_DOT &&
12357             lex_state != EXPR_CLASS &&
12358             !IS_END() &&
12359             (!IS_ARG() || space_seen)) {
12360             int token = heredoc_identifier();
12361             if (token) return token;
12362         }
12363         switch (lex_state) {
12364           case EXPR_FNAME: case EXPR_DOT:
12365             lex_state = EXPR_ARG; break;
12366           default:
12367             lex_state = EXPR_BEG; break;
12368         }
12369         if (c == '=') {
12370             if ((c = nextc()) == '>') {
12371                 return tCMP;
12372             }
12373             pushback(c);
12374             return tLEQ;
12375         }
12376         if (c == '<') {
12377             if ((c = nextc()) == '=') {
12378                 set_yylval_id(tLSHFT);
12379                 lex_state = EXPR_BEG;
12380                 return tOP_ASGN;
12381             }
12382             pushback(c);
12383             warn_balanced("<<", "here document");
12384             return tLSHFT;
12385         }
12386         pushback(c);
12387         return '<';
12388 
12389       case '>':
12390         switch (lex_state) {
12391           case EXPR_FNAME: case EXPR_DOT:
12392             lex_state = EXPR_ARG; break;
12393           default:
12394             lex_state = EXPR_BEG; break;
12395         }
12396         if ((c = nextc()) == '=') {
12397             return tGEQ;
12398         }
12399         if (c == '>') {
12400             if ((c = nextc()) == '=') {
12401                 set_yylval_id(tRSHFT);
12402                 lex_state = EXPR_BEG;
12403                 return tOP_ASGN;
12404             }
12405             pushback(c);
12406             return tRSHFT;
12407         }
12408         pushback(c);
12409         return '>';
12410 
12411       case '"':
12412         lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12413         return tSTRING_BEG;
12414 
12415       case '`':
12416         if (lex_state == EXPR_FNAME) {
12417             lex_state = EXPR_ENDFN;
12418             return c;
12419         }
12420         if (lex_state == EXPR_DOT) {
12421             if (cmd_state)
12422                 lex_state = EXPR_CMDARG;
12423             else
12424                 lex_state = EXPR_ARG;
12425             return c;
12426         }
12427         lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12428         return tXSTRING_BEG;
12429 
12430       case '\'':
12431         lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12432         return tSTRING_BEG;
12433 
12434       case '?':
12435         if (IS_END()) {
12436             lex_state = EXPR_VALUE;
12437             return '?';
12438         }
12439         c = nextc();
12440         if (c == -1) {
12441             compile_error(PARSER_ARG "incomplete character syntax");
12442             return 0;
12443         }
12444         if (rb_enc_isspace(c, parser->enc)) {
12445             if (!IS_ARG()) {
12446                 int c2 = 0;
12447                 switch (c) {
12448                   case ' ':
12449                     c2 = 's';
12450                     break;
12451                   case '\n':
12452                     c2 = 'n';
12453                     break;
12454                   case '\t':
12455                     c2 = 't';
12456                     break;
12457                   case '\v':
12458                     c2 = 'v';
12459                     break;
12460                   case '\r':
12461                     c2 = 'r';
12462                     break;
12463                   case '\f':
12464                     c2 = 'f';
12465                     break;
12466                 }
12467                 if (c2) {
12468                     rb_warnI("invalid character syntax; use ?\\%c", c2);
12469                 }
12470             }
12471           ternary:
12472             pushback(c);
12473             lex_state = EXPR_VALUE;
12474             return '?';
12475         }
12476         newtok();
12477         enc = parser->enc;
12478         if (!parser_isascii()) {
12479             if (tokadd_mbchar(c) == -1) return 0;
12480         }
12481         else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12482                  lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12483             goto ternary;
12484         }
12485         else if (c == '\\') {
12486             if (peek('u')) {
12487                 nextc();
12488                 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12489                 if (0x80 <= c) {
12490                     tokaddmbc(c, enc);
12491                 }
12492                 else {
12493                     tokadd(c);
12494                 }
12495             }
12496             else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
12497                 nextc();
12498                 if (tokadd_mbchar(c) == -1) return 0;
12499             }
12500             else {
12501                 c = read_escape(0, &enc);
12502                 tokadd(c);
12503             }
12504         }
12505         else {
12506             tokadd(c);
12507         }
12508         tokfix();
12509         set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12510         lex_state = EXPR_END;
12511         return tCHAR;
12512 
12513       case '&':
12514         if ((c = nextc()) == '&') {
12515             lex_state = EXPR_BEG;
12516             if ((c = nextc()) == '=') {
12517                 set_yylval_id(tANDOP);
12518                 lex_state = EXPR_BEG;
12519                 return tOP_ASGN;
12520             }
12521             pushback(c);
12522             return tANDOP;
12523         }
12524         else if (c == '=') {
12525             set_yylval_id('&');
12526             lex_state = EXPR_BEG;
12527             return tOP_ASGN;
12528         }
12529         pushback(c);
12530         if (IS_SPCARG(c)) {
12531             rb_warning0("`&' interpreted as argument prefix");
12532             c = tAMPER;
12533         }
12534         else if (IS_BEG()) {
12535             c = tAMPER;
12536         }
12537         else {
12538             warn_balanced("&", "argument prefix");
12539             c = '&';
12540         }
12541         switch (lex_state) {
12542           case EXPR_FNAME: case EXPR_DOT:
12543             lex_state = EXPR_ARG; break;
12544           default:
12545             lex_state = EXPR_BEG;
12546         }
12547         return c;
12548 
12549       case '|':
12550         if ((c = nextc()) == '|') {
12551             lex_state = EXPR_BEG;
12552             if ((c = nextc()) == '=') {
12553                 set_yylval_id(tOROP);
12554                 lex_state = EXPR_BEG;
12555                 return tOP_ASGN;
12556             }
12557             pushback(c);
12558             return tOROP;
12559         }
12560         if (c == '=') {
12561             set_yylval_id('|');
12562             lex_state = EXPR_BEG;
12563             return tOP_ASGN;
12564         }
12565         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12566             lex_state = EXPR_ARG;
12567         }
12568         else {
12569             lex_state = EXPR_BEG;
12570         }
12571         pushback(c);
12572         return '|';
12573 
12574       case '+':
12575         c = nextc();
12576         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12577             lex_state = EXPR_ARG;
12578             if (c == '@') {
12579                 return tUPLUS;
12580             }
12581             pushback(c);
12582             return '+';
12583         }
12584         if (c == '=') {
12585             set_yylval_id('+');
12586             lex_state = EXPR_BEG;
12587             return tOP_ASGN;
12588         }
12589         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
12590             lex_state = EXPR_BEG;
12591             pushback(c);
12592             if (c != -1 && ISDIGIT(c)) {
12593                 c = '+';
12594                 goto start_num;
12595             }
12596             return tUPLUS;
12597         }
12598         lex_state = EXPR_BEG;
12599         pushback(c);
12600         warn_balanced("+", "unary operator");
12601         return '+';
12602 
12603       case '-':
12604         c = nextc();
12605         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12606             lex_state = EXPR_ARG;
12607             if (c == '@') {
12608                 return tUMINUS;
12609             }
12610             pushback(c);
12611             return '-';
12612         }
12613         if (c == '=') {
12614             set_yylval_id('-');
12615             lex_state = EXPR_BEG;
12616             return tOP_ASGN;
12617         }
12618         if (c == '>') {
12619             lex_state = EXPR_ARG;
12620             return tLAMBDA;
12621         }
12622         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
12623             lex_state = EXPR_BEG;
12624             pushback(c);
12625             if (c != -1 && ISDIGIT(c)) {
12626                 return tUMINUS_NUM;
12627             }
12628             return tUMINUS;
12629         }
12630         lex_state = EXPR_BEG;
12631         pushback(c);
12632         warn_balanced("-", "unary operator");
12633         return '-';
12634 
12635       case '.':
12636         lex_state = EXPR_BEG;
12637         if ((c = nextc()) == '.') {
12638             if ((c = nextc()) == '.') {
12639                 return tDOT3;
12640             }
12641             pushback(c);
12642             return tDOT2;
12643         }
12644         pushback(c);
12645         if (c != -1 && ISDIGIT(c)) {
12646             yyerror("no .<digit> floating literal anymore; put 0 before dot");
12647         }
12648         lex_state = EXPR_DOT;
12649         return '.';
12650 
12651       start_num:
12652       case '0': case '1': case '2': case '3': case '4':
12653       case '5': case '6': case '7': case '8': case '9':
12654         {
12655             int is_float, seen_point, seen_e, nondigit;
12656 
12657             is_float = seen_point = seen_e = nondigit = 0;
12658             lex_state = EXPR_END;
12659             newtok();
12660             if (c == '-' || c == '+') {
12661                 tokadd(c);
12662                 c = nextc();
12663             }
12664             if (c == '0') {
12665 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
12666                 int start = toklen();
12667                 c = nextc();
12668                 if (c == 'x' || c == 'X') {
12669                     /* hexadecimal */
12670                     c = nextc();
12671                     if (c != -1 && ISXDIGIT(c)) {
12672                         do {
12673                             if (c == '_') {
12674                                 if (nondigit) break;
12675                                 nondigit = c;
12676                                 continue;
12677                             }
12678                             if (!ISXDIGIT(c)) break;
12679                             nondigit = 0;
12680                             tokadd(c);
12681                         } while ((c = nextc()) != -1);
12682                     }
12683                     pushback(c);
12684                     tokfix();
12685                     if (toklen() == start) {
12686                         no_digits();
12687                     }
12688                     else if (nondigit) goto trailing_uc;
12689                     set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
12690                     return tINTEGER;
12691                 }
12692                 if (c == 'b' || c == 'B') {
12693                     /* binary */
12694                     c = nextc();
12695                     if (c == '0' || c == '1') {
12696                         do {
12697                             if (c == '_') {
12698                                 if (nondigit) break;
12699                                 nondigit = c;
12700                                 continue;
12701                             }
12702                             if (c != '0' && c != '1') break;
12703                             nondigit = 0;
12704                             tokadd(c);
12705                         } while ((c = nextc()) != -1);
12706                     }
12707                     pushback(c);
12708                     tokfix();
12709                     if (toklen() == start) {
12710                         no_digits();
12711                     }
12712                     else if (nondigit) goto trailing_uc;
12713                     set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
12714                     return tINTEGER;
12715                 }
12716                 if (c == 'd' || c == 'D') {
12717                     /* decimal */
12718                     c = nextc();
12719                     if (c != -1 && ISDIGIT(c)) {
12720                         do {
12721                             if (c == '_') {
12722                                 if (nondigit) break;
12723                                 nondigit = c;
12724                                 continue;
12725                             }
12726                             if (!ISDIGIT(c)) break;
12727                             nondigit = 0;
12728                             tokadd(c);
12729                         } while ((c = nextc()) != -1);
12730                     }
12731                     pushback(c);
12732                     tokfix();
12733                     if (toklen() == start) {
12734                         no_digits();
12735                     }
12736                     else if (nondigit) goto trailing_uc;
12737                     set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
12738                     return tINTEGER;
12739                 }
12740                 if (c == '_') {
12741                     /* 0_0 */
12742                     goto octal_number;
12743                 }
12744                 if (c == 'o' || c == 'O') {
12745                     /* prefixed octal */
12746                     c = nextc();
12747                     if (c == -1 || c == '_' || !ISDIGIT(c)) {
12748                         no_digits();
12749                     }
12750                 }
12751                 if (c >= '0' && c <= '7') {
12752                     /* octal */
12753                   octal_number:
12754                     do {
12755                         if (c == '_') {
12756                             if (nondigit) break;
12757                             nondigit = c;
12758                             continue;
12759                         }
12760                         if (c < '0' || c > '9') break;
12761                         if (c > '7') goto invalid_octal;
12762                         nondigit = 0;
12763                         tokadd(c);
12764                     } while ((c = nextc()) != -1);
12765                     if (toklen() > start) {
12766                         pushback(c);
12767                         tokfix();
12768                         if (nondigit) goto trailing_uc;
12769                         set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
12770                         return tINTEGER;
12771                     }
12772                     if (nondigit) {
12773                         pushback(c);
12774                         goto trailing_uc;
12775                     }
12776                 }
12777                 if (c > '7' && c <= '9') {
12778                   invalid_octal:
12779                     yyerror("Invalid octal digit");
12780                 }
12781                 else if (c == '.' || c == 'e' || c == 'E') {
12782                     tokadd('0');
12783                 }
12784                 else {
12785                     pushback(c);
12786                     set_yylval_literal(INT2FIX(0));
12787                     return tINTEGER;
12788                 }
12789             }
12790 
12791             for (;;) {
12792                 switch (c) {
12793                   case '0': case '1': case '2': case '3': case '4':
12794                   case '5': case '6': case '7': case '8': case '9':
12795                     nondigit = 0;
12796                     tokadd(c);
12797                     break;
12798 
12799                   case '.':
12800                     if (nondigit) goto trailing_uc;
12801                     if (seen_point || seen_e) {
12802                         goto decode_num;
12803                     }
12804                     else {
12805                         int c0 = nextc();
12806                         if (c0 == -1 || !ISDIGIT(c0)) {
12807                             pushback(c0);
12808                             goto decode_num;
12809                         }
12810                         c = c0;
12811                     }
12812                     tokadd('.');
12813                     tokadd(c);
12814                     is_float++;
12815                     seen_point++;
12816                     nondigit = 0;
12817                     break;
12818 
12819                   case 'e':
12820                   case 'E':
12821                     if (nondigit) {
12822                         pushback(c);
12823                         c = nondigit;
12824                         goto decode_num;
12825                     }
12826                     if (seen_e) {
12827                         goto decode_num;
12828                     }
12829                     tokadd(c);
12830                     seen_e++;
12831                     is_float++;
12832                     nondigit = c;
12833                     c = nextc();
12834                     if (c != '-' && c != '+') continue;
12835                     tokadd(c);
12836                     nondigit = c;
12837                     break;
12838 
12839                   case '_':     /* `_' in number just ignored */
12840                     if (nondigit) goto decode_num;
12841                     nondigit = c;
12842                     break;
12843 
12844                   default:
12845                     goto decode_num;
12846                 }
12847                 c = nextc();
12848             }
12849 
12850           decode_num:
12851             pushback(c);
12852             if (nondigit) {
12853                 char tmp[30];
12854               trailing_uc:
12855                 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
12856                 yyerror(tmp);
12857             }
12858             tokfix();
12859             if (is_float) {
12860                 double d = strtod(tok(), 0);
12861                 if (errno == ERANGE) {
12862                     rb_warningS("Float %s out of range", tok());
12863                     errno = 0;
12864                 }
12865                 set_yylval_literal(DBL2NUM(d));
12866                 return tFLOAT;
12867             }
12868             set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
12869             return tINTEGER;
12870         }
12871 
12872       case ')':
12873       case ']':
12874         paren_nest--;
12875       case '}':
12876         COND_LEXPOP();
12877         CMDARG_LEXPOP();
12878         if (c == ')')
12879             lex_state = EXPR_ENDFN;
12880         else
12881             lex_state = EXPR_ENDARG;
12882         return c;
12883 
12884       case ':':
12885         c = nextc();
12886         if (c == ':') {
12887             if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
12888                 lex_state = EXPR_BEG;
12889                 return tCOLON3;
12890             }
12891             lex_state = EXPR_DOT;
12892             return tCOLON2;
12893         }
12894         if (IS_END() || ISSPACE(c)) {
12895             pushback(c);
12896             warn_balanced(":", "symbol literal");
12897             lex_state = EXPR_BEG;
12898             return ':';
12899         }
12900         switch (c) {
12901           case '\'':
12902             lex_strterm = NEW_STRTERM(str_ssym, c, 0);
12903             break;
12904           case '"':
12905             lex_strterm = NEW_STRTERM(str_dsym, c, 0);
12906             break;
12907           default:
12908             pushback(c);
12909             break;
12910         }
12911         lex_state = EXPR_FNAME;
12912         return tSYMBEG;
12913 
12914       case '/':
12915         if (IS_BEG()) {
12916             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
12917             return tREGEXP_BEG;
12918         }
12919         if ((c = nextc()) == '=') {
12920             set_yylval_id('/');
12921             lex_state = EXPR_BEG;
12922             return tOP_ASGN;
12923         }
12924         pushback(c);
12925         if (IS_SPCARG(c)) {
12926             (void)arg_ambiguous();
12927             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
12928             return tREGEXP_BEG;
12929         }
12930         switch (lex_state) {
12931           case EXPR_FNAME: case EXPR_DOT:
12932             lex_state = EXPR_ARG; break;
12933           default:
12934             lex_state = EXPR_BEG; break;
12935         }
12936         warn_balanced("/", "regexp literal");
12937         return '/';
12938 
12939       case '^':
12940         if ((c = nextc()) == '=') {
12941             set_yylval_id('^');
12942             lex_state = EXPR_BEG;
12943             return tOP_ASGN;
12944         }
12945         switch (lex_state) {
12946           case EXPR_FNAME: case EXPR_DOT:
12947             lex_state = EXPR_ARG; break;
12948           default:
12949             lex_state = EXPR_BEG; break;
12950         }
12951         pushback(c);
12952         return '^';
12953 
12954       case ';':
12955         lex_state = EXPR_BEG;
12956         command_start = TRUE;
12957         return ';';
12958 
12959       case ',':
12960         lex_state = EXPR_BEG;
12961         return ',';
12962 
12963       case '~':
12964         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12965             if ((c = nextc()) != '@') {
12966                 pushback(c);
12967             }
12968             lex_state = EXPR_ARG;
12969         }
12970         else {
12971             lex_state = EXPR_BEG;
12972         }
12973         return '~';
12974 
12975       case '(':
12976         if (IS_BEG()) {
12977             c = tLPAREN;
12978         }
12979         else if (IS_SPCARG(-1)) {
12980             c = tLPAREN_ARG;
12981         }
12982         paren_nest++;
12983         COND_PUSH(0);
12984         CMDARG_PUSH(0);
12985         lex_state = EXPR_BEG;
12986         return c;
12987 
12988       case '[':
12989         paren_nest++;
12990         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12991             lex_state = EXPR_ARG;
12992             if ((c = nextc()) == ']') {
12993                 if ((c = nextc()) == '=') {
12994                     return tASET;
12995                 }
12996                 pushback(c);
12997                 return tAREF;
12998             }
12999             pushback(c);
13000             return '[';
13001         }
13002         else if (IS_BEG()) {
13003             c = tLBRACK;
13004         }
13005         else if (IS_ARG() && space_seen) {
13006             c = tLBRACK;
13007         }
13008         lex_state = EXPR_BEG;
13009         COND_PUSH(0);
13010         CMDARG_PUSH(0);
13011         return c;
13012 
13013       case '{':
13014         if (lpar_beg && lpar_beg == paren_nest) {
13015             lex_state = EXPR_BEG;
13016             lpar_beg = 0;
13017             --paren_nest;
13018             COND_PUSH(0);
13019             CMDARG_PUSH(0);
13020             return tLAMBEG;
13021         }
13022         if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13023             c = '{';          /* block (primary) */
13024         else if (lex_state == EXPR_ENDARG)
13025             c = tLBRACE_ARG;  /* block (expr) */
13026         else
13027             c = tLBRACE;      /* hash */
13028         COND_PUSH(0);
13029         CMDARG_PUSH(0);
13030         lex_state = EXPR_BEG;
13031         if (c != tLBRACE) command_start = TRUE;
13032         return c;
13033 
13034       case '\\':
13035         c = nextc();
13036         if (c == '\n') {
13037             space_seen = 1;
13038 #ifdef RIPPER
13039             ripper_dispatch_scan_event(parser, tSP);
13040 #endif
13041             goto retry; /* skip \\n */
13042         }
13043         pushback(c);
13044         return '\\';
13045 
13046       case '%':
13047         if (IS_BEG()) {
13048             int term;
13049             int paren;
13050 
13051             c = nextc();
13052           quotation:
13053             if (c == -1 || !ISALNUM(c)) {
13054                 term = c;
13055                 c = 'Q';
13056             }
13057             else {
13058                 term = nextc();
13059                 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13060                     yyerror("unknown type of %string");
13061                     return 0;
13062                 }
13063             }
13064             if (c == -1 || term == -1) {
13065                 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13066                 return 0;
13067             }
13068             paren = term;
13069             if (term == '(') term = ')';
13070             else if (term == '[') term = ']';
13071             else if (term == '{') term = '}';
13072             else if (term == '<') term = '>';
13073             else paren = 0;
13074 
13075             switch (c) {
13076               case 'Q':
13077                 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13078                 return tSTRING_BEG;
13079 
13080               case 'q':
13081                 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13082                 return tSTRING_BEG;
13083 
13084               case 'W':
13085                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13086                 do {c = nextc();} while (ISSPACE(c));
13087                 pushback(c);
13088                 return tWORDS_BEG;
13089 
13090               case 'w':
13091                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13092                 do {c = nextc();} while (ISSPACE(c));
13093                 pushback(c);
13094                 return tQWORDS_BEG;
13095 
13096               case 'x':
13097                 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13098                 return tXSTRING_BEG;
13099 
13100               case 'r':
13101                 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13102                 return tREGEXP_BEG;
13103 
13104               case 's':
13105                 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13106                 lex_state = EXPR_FNAME;
13107                 return tSYMBEG;
13108 
13109               default:
13110                 yyerror("unknown type of %string");
13111                 return 0;
13112             }
13113         }
13114         if ((c = nextc()) == '=') {
13115             set_yylval_id('%');
13116             lex_state = EXPR_BEG;
13117             return tOP_ASGN;
13118         }
13119         if (IS_SPCARG(c)) {
13120             goto quotation;
13121         }
13122         switch (lex_state) {
13123           case EXPR_FNAME: case EXPR_DOT:
13124             lex_state = EXPR_ARG; break;
13125           default:
13126             lex_state = EXPR_BEG; break;
13127         }
13128         pushback(c);
13129         warn_balanced("%%", "string literal");
13130         return '%';
13131 
13132       case '$':
13133         lex_state = EXPR_END;
13134         newtok();
13135         c = nextc();
13136         switch (c) {
13137           case '_':             /* $_: last read line string */
13138             c = nextc();
13139             if (parser_is_identchar()) {
13140                 tokadd('$');
13141                 tokadd('_');
13142                 break;
13143             }
13144             pushback(c);
13145             c = '_';
13146             /* fall through */
13147           case '~':             /* $~: match-data */
13148           case '*':             /* $*: argv */
13149           case '$':             /* $$: pid */
13150           case '?':             /* $?: last status */
13151           case '!':             /* $!: error string */
13152           case '@':             /* $@: error position */
13153           case '/':             /* $/: input record separator */
13154           case '\\':            /* $\: output record separator */
13155           case ';':             /* $;: field separator */
13156           case ',':             /* $,: output field separator */
13157           case '.':             /* $.: last read line number */
13158           case '=':             /* $=: ignorecase */
13159           case ':':             /* $:: load path */
13160           case '<':             /* $<: reading filename */
13161           case '>':             /* $>: default output handle */
13162           case '\"':            /* $": already loaded files */
13163             tokadd('$');
13164             tokadd(c);
13165             tokfix();
13166             set_yylval_name(rb_intern(tok()));
13167             return tGVAR;
13168 
13169           case '-':
13170             tokadd('$');
13171             tokadd(c);
13172             c = nextc();
13173             if (parser_is_identchar()) {
13174                 if (tokadd_mbchar(c) == -1) return 0;
13175             }
13176             else {
13177                 pushback(c);
13178             }
13179           gvar:
13180             tokfix();
13181             set_yylval_name(rb_intern(tok()));
13182             return tGVAR;
13183 
13184           case '&':             /* $&: last match */
13185           case '`':             /* $`: string before last match */
13186           case '\'':            /* $': string after last match */
13187           case '+':             /* $+: string matches last paren. */
13188             if (last_state == EXPR_FNAME) {
13189                 tokadd('$');
13190                 tokadd(c);
13191                 goto gvar;
13192             }
13193             set_yylval_node(NEW_BACK_REF(c));
13194             return tBACK_REF;
13195 
13196           case '1': case '2': case '3':
13197           case '4': case '5': case '6':
13198           case '7': case '8': case '9':
13199             tokadd('$');
13200             do {
13201                 tokadd(c);
13202                 c = nextc();
13203             } while (c != -1 && ISDIGIT(c));
13204             pushback(c);
13205             if (last_state == EXPR_FNAME) goto gvar;
13206             tokfix();
13207             set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13208             return tNTH_REF;
13209 
13210           default:
13211             if (!parser_is_identchar()) {
13212                 pushback(c);
13213                 return '$';
13214             }
13215           case '0':
13216             tokadd('$');
13217         }
13218         break;
13219 
13220       case '@':
13221         c = nextc();
13222         newtok();
13223         tokadd('@');
13224         if (c == '@') {
13225             tokadd('@');
13226             c = nextc();
13227         }
13228         if (c != -1 && ISDIGIT(c)) {
13229             if (tokidx == 1) {
13230                 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13231             }
13232             else {
13233                 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13234             }
13235             return 0;
13236         }
13237         if (!parser_is_identchar()) {
13238             pushback(c);
13239             return '@';
13240         }
13241         break;
13242 
13243       case '_':
13244         if (was_bol() && whole_match_p("__END__", 7, 0)) {
13245             ruby__end__seen = 1;
13246             parser->eofp = Qtrue;
13247 #ifndef RIPPER
13248             return -1;
13249 #else
13250             lex_goto_eol(parser);
13251             ripper_dispatch_scan_event(parser, k__END__);
13252             return 0;
13253 #endif
13254         }
13255         newtok();
13256         break;
13257 
13258       default:
13259         if (!parser_is_identchar()) {
13260             rb_compile_error(PARSER_ARG  "Invalid char `\\x%02X' in expression", c);
13261             goto retry;
13262         }
13263 
13264         newtok();
13265         break;
13266     }
13267 
13268     mb = ENC_CODERANGE_7BIT;
13269     do {
13270         if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13271         if (tokadd_mbchar(c) == -1) return 0;
13272         c = nextc();
13273     } while (parser_is_identchar());
13274     switch (tok()[0]) {
13275       case '@': case '$':
13276         pushback(c);
13277         break;
13278       default:
13279         if ((c == '!' || c == '?') && !peek('=')) {
13280             tokadd(c);
13281         }
13282         else {
13283             pushback(c);
13284         }
13285     }
13286     tokfix();
13287 
13288     {
13289         int result = 0;
13290 
13291         last_state = lex_state;
13292         switch (tok()[0]) {
13293           case '$':
13294             lex_state = EXPR_END;
13295             result = tGVAR;
13296             break;
13297           case '@':
13298             lex_state = EXPR_END;
13299             if (tok()[1] == '@')
13300                 result = tCVAR;
13301             else
13302                 result = tIVAR;
13303             break;
13304 
13305           default:
13306             if (toklast() == '!' || toklast() == '?') {
13307                 result = tFID;
13308             }
13309             else {
13310                 if (lex_state == EXPR_FNAME) {
13311                     if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13312                         (!peek('=') || (peek_n('>', 1)))) {
13313                         result = tIDENTIFIER;
13314                         tokadd(c);
13315                         tokfix();
13316                     }
13317                     else {
13318                         pushback(c);
13319                     }
13320                 }
13321                 if (result == 0 && ISUPPER(tok()[0])) {
13322                     result = tCONSTANT;
13323                 }
13324                 else {
13325                     result = tIDENTIFIER;
13326                 }
13327             }
13328 
13329             if (IS_LABEL_POSSIBLE()) {
13330                 if (IS_LABEL_SUFFIX(0)) {
13331                     lex_state = EXPR_BEG;
13332                     nextc();
13333                     set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13334                     return tLABEL;
13335                 }
13336             }
13337             if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13338                 const struct kwtable *kw;
13339 
13340                 /* See if it is a reserved word.  */
13341                 kw = rb_reserved_word(tok(), toklen());
13342                 if (kw) {
13343                     enum lex_state_e state = lex_state;
13344                     lex_state = kw->state;
13345                     if (state == EXPR_FNAME) {
13346                         set_yylval_name(rb_intern(kw->name));
13347                         return kw->id[0];
13348                     }
13349                     if (kw->id[0] == keyword_do) {
13350                         command_start = TRUE;
13351                         if (lpar_beg && lpar_beg == paren_nest) {
13352                             lpar_beg = 0;
13353                             --paren_nest;
13354                             return keyword_do_LAMBDA;
13355                         }
13356                         if (COND_P()) return keyword_do_cond;
13357                         if (CMDARG_P() && state != EXPR_CMDARG)
13358                             return keyword_do_block;
13359                         if (state == EXPR_ENDARG || state == EXPR_BEG)
13360                             return keyword_do_block;
13361                         return keyword_do;
13362                     }
13363                     if (state == EXPR_BEG || state == EXPR_VALUE)
13364                         return kw->id[0];
13365                     else {
13366                         if (kw->id[0] != kw->id[1])
13367                             lex_state = EXPR_BEG;
13368                         return kw->id[1];
13369                     }
13370                 }
13371             }
13372 
13373             if (IS_BEG() ||
13374                 lex_state == EXPR_DOT ||
13375                 IS_ARG()) {
13376                 if (cmd_state) {
13377                     lex_state = EXPR_CMDARG;
13378                 }
13379                 else {
13380                     lex_state = EXPR_ARG;
13381                 }
13382             }
13383             else if (lex_state == EXPR_FNAME) {
13384                 lex_state = EXPR_ENDFN;
13385             }
13386             else {
13387                 lex_state = EXPR_END;
13388             }
13389         }
13390         {
13391             ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13392 
13393             set_yylval_name(ident);
13394             if (last_state != EXPR_DOT && last_state != EXPR_FNAME &&
13395                 is_local_id(ident) && lvar_defined(ident)) {
13396                 lex_state = EXPR_END;
13397             }
13398         }
13399         return result;
13400     }
13401 }
13402 
13403 #if YYPURE
13404 static int
13405 yylex(void *lval, void *p)
13406 #else
13407 yylex(void *p)
13408 #endif
13409 {
13410     struct parser_params *parser = (struct parser_params*)p;
13411     int t;
13412 
13413 #if YYPURE
13414     parser->parser_yylval = lval;
13415     parser->parser_yylval->val = Qundef;
13416 #endif
13417     t = parser_yylex(parser);
13418 #ifdef RIPPER
13419     if (!NIL_P(parser->delayed)) {
13420         ripper_dispatch_delayed_token(parser, t);
13421         return t;
13422     }
13423     if (t != 0)
13424         ripper_dispatch_scan_event(parser, t);
13425 #endif
13426 
13427     return t;
13428 }
13429 
13430 #ifndef RIPPER
13431 static NODE*
13432 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13433 {
13434     NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13435     nd_set_line(n, ruby_sourceline);
13436     return n;
13437 }
13438 
13439 enum node_type
13440 nodetype(NODE *node)                    /* for debug */
13441 {
13442     return (enum node_type)nd_type(node);
13443 }
13444 
13445 int
13446 nodeline(NODE *node)
13447 {
13448     return nd_line(node);
13449 }
13450 
13451 static NODE*
13452 newline_node(NODE *node)
13453 {
13454     if (node) {
13455         node = remove_begin(node);
13456         node->flags |= NODE_FL_NEWLINE;
13457     }
13458     return node;
13459 }
13460 
13461 static void
13462 fixpos(NODE *node, NODE *orig)
13463 {
13464     if (!node) return;
13465     if (!orig) return;
13466     if (orig == (NODE*)1) return;
13467     nd_set_line(node, nd_line(orig));
13468 }
13469 
13470 static void
13471 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13472 {
13473     rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13474 }
13475 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
13476 
13477 static void
13478 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13479 {
13480     rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13481 }
13482 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
13483 
13484 static NODE*
13485 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13486 {
13487     NODE *end, *h = head, *nd;
13488 
13489     if (tail == 0) return head;
13490 
13491     if (h == 0) return tail;
13492     switch (nd_type(h)) {
13493       case NODE_LIT:
13494       case NODE_STR:
13495       case NODE_SELF:
13496       case NODE_TRUE:
13497       case NODE_FALSE:
13498       case NODE_NIL:
13499         parser_warning(h, "unused literal ignored");
13500         return tail;
13501       default:
13502         h = end = NEW_BLOCK(head);
13503         end->nd_end = end;
13504         fixpos(end, head);
13505         head = end;
13506         break;
13507       case NODE_BLOCK:
13508         end = h->nd_end;
13509         break;
13510     }
13511 
13512     nd = end->nd_head;
13513     switch (nd_type(nd)) {
13514       case NODE_RETURN:
13515       case NODE_BREAK:
13516       case NODE_NEXT:
13517       case NODE_REDO:
13518       case NODE_RETRY:
13519         if (RTEST(ruby_verbose)) {
13520             parser_warning(nd, "statement not reached");
13521         }
13522         break;
13523 
13524       default:
13525         break;
13526     }
13527 
13528     if (nd_type(tail) != NODE_BLOCK) {
13529         tail = NEW_BLOCK(tail);
13530         tail->nd_end = tail;
13531     }
13532     end->nd_next = tail;
13533     h->nd_end = tail->nd_end;
13534     return head;
13535 }
13536 
13537 /* append item to the list */
13538 static NODE*
13539 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
13540 {
13541     NODE *last;
13542 
13543     if (list == 0) return NEW_LIST(item);
13544     if (list->nd_next) {
13545         last = list->nd_next->nd_end;
13546     }
13547     else {
13548         last = list;
13549     }
13550 
13551     list->nd_alen += 1;
13552     last->nd_next = NEW_LIST(item);
13553     list->nd_next->nd_end = last->nd_next;
13554     return list;
13555 }
13556 
13557 /* concat two lists */
13558 static NODE*
13559 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13560 {
13561     NODE *last;
13562 
13563     if (head->nd_next) {
13564         last = head->nd_next->nd_end;
13565     }
13566     else {
13567         last = head;
13568     }
13569 
13570     head->nd_alen += tail->nd_alen;
13571     last->nd_next = tail;
13572     if (tail->nd_next) {
13573         head->nd_next->nd_end = tail->nd_next->nd_end;
13574     }
13575     else {
13576         head->nd_next->nd_end = tail;
13577     }
13578 
13579     return head;
13580 }
13581 
13582 static int
13583 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
13584 {
13585     if (NIL_P(tail)) return 1;
13586     if (!rb_enc_compatible(head, tail)) {
13587         compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
13588                       rb_enc_name(rb_enc_get(head)),
13589                       rb_enc_name(rb_enc_get(tail)));
13590         rb_str_resize(head, 0);
13591         rb_str_resize(tail, 0);
13592         return 0;
13593     }
13594     rb_str_buf_append(head, tail);
13595     return 1;
13596 }
13597 
13598 /* concat two string literals */
13599 static NODE *
13600 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13601 {
13602     enum node_type htype;
13603 
13604     if (!head) return tail;
13605     if (!tail) return head;
13606 
13607     htype = nd_type(head);
13608     if (htype == NODE_EVSTR) {
13609         NODE *node = NEW_DSTR(Qnil);
13610         head = list_append(node, head);
13611     }
13612     switch (nd_type(tail)) {
13613       case NODE_STR:
13614         if (htype == NODE_STR) {
13615             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
13616               error:
13617                 rb_gc_force_recycle((VALUE)head);
13618                 rb_gc_force_recycle((VALUE)tail);
13619                 return 0;
13620             }
13621             rb_gc_force_recycle((VALUE)tail);
13622         }
13623         else {
13624             list_append(head, tail);
13625         }
13626         break;
13627 
13628       case NODE_DSTR:
13629         if (htype == NODE_STR) {
13630             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
13631                 goto error;
13632             tail->nd_lit = head->nd_lit;
13633             rb_gc_force_recycle((VALUE)head);
13634             head = tail;
13635         }
13636         else if (NIL_P(tail->nd_lit)) {
13637             head->nd_alen += tail->nd_alen - 1;
13638             head->nd_next->nd_end->nd_next = tail->nd_next;
13639             head->nd_next->nd_end = tail->nd_next->nd_end;
13640             rb_gc_force_recycle((VALUE)tail);
13641         }
13642         else {
13643             nd_set_type(tail, NODE_ARRAY);
13644             tail->nd_head = NEW_STR(tail->nd_lit);
13645             list_concat(head, tail);
13646         }
13647         break;
13648 
13649       case NODE_EVSTR:
13650         if (htype == NODE_STR) {
13651             nd_set_type(head, NODE_DSTR);
13652             head->nd_alen = 1;
13653         }
13654         list_append(head, tail);
13655         break;
13656     }
13657     return head;
13658 }
13659 
13660 static NODE *
13661 evstr2dstr_gen(struct parser_params *parser, NODE *node)
13662 {
13663     if (nd_type(node) == NODE_EVSTR) {
13664         node = list_append(NEW_DSTR(Qnil), node);
13665     }
13666     return node;
13667 }
13668 
13669 static NODE *
13670 new_evstr_gen(struct parser_params *parser, NODE *node)
13671 {
13672     NODE *head = node;
13673 
13674     if (node) {
13675         switch (nd_type(node)) {
13676           case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
13677             return node;
13678         }
13679     }
13680     return NEW_EVSTR(head);
13681 }
13682 
13683 static NODE *
13684 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
13685 {
13686     value_expr(recv);
13687     value_expr(arg1);
13688     return NEW_CALL(recv, id, NEW_LIST(arg1));
13689 }
13690 
13691 static NODE *
13692 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
13693 {
13694     value_expr(recv);
13695     return NEW_CALL(recv, id, 0);
13696 }
13697 
13698 static NODE*
13699 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
13700 {
13701     value_expr(node1);
13702     value_expr(node2);
13703     if (node1) {
13704         switch (nd_type(node1)) {
13705           case NODE_DREGX:
13706           case NODE_DREGX_ONCE:
13707             return NEW_MATCH2(node1, node2);
13708 
13709           case NODE_LIT:
13710             if (TYPE(node1->nd_lit) == T_REGEXP) {
13711                 return NEW_MATCH2(node1, node2);
13712             }
13713         }
13714     }
13715 
13716     if (node2) {
13717         switch (nd_type(node2)) {
13718           case NODE_DREGX:
13719           case NODE_DREGX_ONCE:
13720             return NEW_MATCH3(node2, node1);
13721 
13722           case NODE_LIT:
13723             if (TYPE(node2->nd_lit) == T_REGEXP) {
13724                 return NEW_MATCH3(node2, node1);
13725             }
13726         }
13727     }
13728 
13729     return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
13730 }
13731 
13732 static NODE*
13733 gettable_gen(struct parser_params *parser, ID id)
13734 {
13735     if (id == keyword_self) {
13736         return NEW_SELF();
13737     }
13738     else if (id == keyword_nil) {
13739         return NEW_NIL();
13740     }
13741     else if (id == keyword_true) {
13742         return NEW_TRUE();
13743     }
13744     else if (id == keyword_false) {
13745         return NEW_FALSE();
13746     }
13747     else if (id == keyword__FILE__) {
13748         return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
13749                                                     rb_filesystem_encoding()));
13750     }
13751     else if (id == keyword__LINE__) {
13752         return NEW_LIT(INT2FIX(ruby_sourceline));
13753     }
13754     else if (id == keyword__ENCODING__) {
13755         return NEW_LIT(rb_enc_from_encoding(parser->enc));
13756     }
13757     else if (is_local_id(id)) {
13758         if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
13759         if (local_id(id)) return NEW_LVAR(id);
13760         /* method call without arguments */
13761         return NEW_VCALL(id);
13762     }
13763     else if (is_global_id(id)) {
13764         return NEW_GVAR(id);
13765     }
13766     else if (is_instance_id(id)) {
13767         return NEW_IVAR(id);
13768     }
13769     else if (is_const_id(id)) {
13770         return NEW_CONST(id);
13771     }
13772     else if (is_class_id(id)) {
13773         return NEW_CVAR(id);
13774     }
13775     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
13776     return 0;
13777 }
13778 #else  /* !RIPPER */
13779 static int
13780 id_is_var_gen(struct parser_params *parser, ID id)
13781 {
13782     if (is_notop_id(id)) {
13783         switch (id & ID_SCOPE_MASK) {
13784           case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
13785             return 1;
13786           case ID_LOCAL:
13787             if (dyna_in_block() && dvar_defined(id)) return 1;
13788             if (local_id(id)) return 1;
13789             /* method call without arguments */
13790             return 0;
13791         }
13792     }
13793     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
13794     return 0;
13795 }
13796 #endif /* !RIPPER */
13797 
13798 #ifdef RIPPER
13799 static VALUE
13800 assignable_gen(struct parser_params *parser, VALUE lhs)
13801 #else
13802 static NODE*
13803 assignable_gen(struct parser_params *parser, ID id, NODE *val)
13804 #endif
13805 {
13806 #ifdef RIPPER
13807     ID id = get_id(lhs);
13808 # define assignable_result(x) get_value(lhs)
13809 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
13810 #else
13811 # define assignable_result(x) (x)
13812 #endif
13813     if (!id) return assignable_result(0);
13814     if (id == keyword_self) {
13815         yyerror("Can't change the value of self");
13816     }
13817     else if (id == keyword_nil) {
13818         yyerror("Can't assign to nil");
13819     }
13820     else if (id == keyword_true) {
13821         yyerror("Can't assign to true");
13822     }
13823     else if (id == keyword_false) {
13824         yyerror("Can't assign to false");
13825     }
13826     else if (id == keyword__FILE__) {
13827         yyerror("Can't assign to __FILE__");
13828     }
13829     else if (id == keyword__LINE__) {
13830         yyerror("Can't assign to __LINE__");
13831     }
13832     else if (id == keyword__ENCODING__) {
13833         yyerror("Can't assign to __ENCODING__");
13834     }
13835     else if (is_local_id(id)) {
13836         if (dyna_in_block()) {
13837             if (dvar_curr(id)) {
13838                 return assignable_result(NEW_DASGN_CURR(id, val));
13839             }
13840             else if (dvar_defined(id)) {
13841                 return assignable_result(NEW_DASGN(id, val));
13842             }
13843             else if (local_id(id)) {
13844                 return assignable_result(NEW_LASGN(id, val));
13845             }
13846             else {
13847                 dyna_var(id);
13848                 return assignable_result(NEW_DASGN_CURR(id, val));
13849             }
13850         }
13851         else {
13852             if (!local_id(id)) {
13853                 local_var(id);
13854             }
13855             return assignable_result(NEW_LASGN(id, val));
13856         }
13857     }
13858     else if (is_global_id(id)) {
13859         return assignable_result(NEW_GASGN(id, val));
13860     }
13861     else if (is_instance_id(id)) {
13862         return assignable_result(NEW_IASGN(id, val));
13863     }
13864     else if (is_const_id(id)) {
13865         if (!in_def && !in_single)
13866             return assignable_result(NEW_CDECL(id, val, 0));
13867         yyerror("dynamic constant assignment");
13868     }
13869     else if (is_class_id(id)) {
13870         return assignable_result(NEW_CVASGN(id, val));
13871     }
13872     else {
13873         compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
13874     }
13875     return assignable_result(0);
13876 #undef assignable_result
13877 #undef parser_yyerror
13878 }
13879 
13880 #define LVAR_USED ((int)1 << (sizeof(int) * CHAR_BIT - 1))
13881 
13882 static ID
13883 shadowing_lvar_gen(struct parser_params *parser, ID name)
13884 {
13885     if (idUScore == name) return name;
13886     if (dyna_in_block()) {
13887         if (dvar_curr(name)) {
13888             yyerror("duplicated argument name");
13889         }
13890         else if (dvar_defined_get(name) || local_id(name)) {
13891             rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
13892             vtable_add(lvtbl->vars, name);
13893             if (lvtbl->used) {
13894                 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
13895             }
13896         }
13897     }
13898     else {
13899         if (local_id(name)) {
13900             yyerror("duplicated argument name");
13901         }
13902     }
13903     return name;
13904 }
13905 
13906 static void
13907 new_bv_gen(struct parser_params *parser, ID name)
13908 {
13909     if (!name) return;
13910     if (!is_local_id(name)) {
13911         compile_error(PARSER_ARG "invalid local variable - %s",
13912                       rb_id2name(name));
13913         return;
13914     }
13915     shadowing_lvar(name);
13916     dyna_var(name);
13917 }
13918 
13919 #ifndef RIPPER
13920 static NODE *
13921 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
13922 {
13923     if (recv && nd_type(recv) == NODE_SELF)
13924         recv = (NODE *)1;
13925     return NEW_ATTRASGN(recv, tASET, idx);
13926 }
13927 
13928 static void
13929 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
13930 {
13931     if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
13932         compile_error(PARSER_ARG "both block arg and actual block given");
13933     }
13934 }
13935 
13936 ID
13937 rb_id_attrset(ID id)
13938 {
13939     id &= ~ID_SCOPE_MASK;
13940     id |= ID_ATTRSET;
13941     return id;
13942 }
13943 
13944 static NODE *
13945 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
13946 {
13947     if (recv && nd_type(recv) == NODE_SELF)
13948         recv = (NODE *)1;
13949     return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
13950 }
13951 
13952 static void
13953 rb_backref_error_gen(struct parser_params *parser, NODE *node)
13954 {
13955     switch (nd_type(node)) {
13956       case NODE_NTH_REF:
13957         compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
13958         break;
13959       case NODE_BACK_REF:
13960         compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
13961         break;
13962     }
13963 }
13964 
13965 static NODE *
13966 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
13967 {
13968     if (!node2) return node1;
13969     switch (nd_type(node1)) {
13970       case NODE_BLOCK_PASS:
13971         if (node1->nd_head)
13972             node1->nd_head = arg_concat(node1->nd_head, node2);
13973         else
13974             node1->nd_head = NEW_LIST(node2);
13975         return node1;
13976       case NODE_ARGSPUSH:
13977         if (nd_type(node2) != NODE_ARRAY) break;
13978         node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
13979         nd_set_type(node1, NODE_ARGSCAT);
13980         return node1;
13981       case NODE_ARGSCAT:
13982         if (nd_type(node2) != NODE_ARRAY ||
13983             nd_type(node1->nd_body) != NODE_ARRAY) break;
13984         node1->nd_body = list_concat(node1->nd_body, node2);
13985         return node1;
13986     }
13987     return NEW_ARGSCAT(node1, node2);
13988 }
13989 
13990 static NODE *
13991 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
13992 {
13993     if (!node1) return NEW_LIST(node2);
13994     switch (nd_type(node1))  {
13995       case NODE_ARRAY:
13996         return list_append(node1, node2);
13997       case NODE_BLOCK_PASS:
13998         node1->nd_head = arg_append(node1->nd_head, node2);
13999         return node1;
14000       case NODE_ARGSPUSH:
14001         node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14002         nd_set_type(node1, NODE_ARGSCAT);
14003         return node1;
14004     }
14005     return NEW_ARGSPUSH(node1, node2);
14006 }
14007 
14008 static NODE *
14009 splat_array(NODE* node)
14010 {
14011     if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14012     if (nd_type(node) == NODE_ARRAY) return node;
14013     return 0;
14014 }
14015 
14016 static NODE *
14017 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14018 {
14019     if (!lhs) return 0;
14020 
14021     switch (nd_type(lhs)) {
14022       case NODE_GASGN:
14023       case NODE_IASGN:
14024       case NODE_IASGN2:
14025       case NODE_LASGN:
14026       case NODE_DASGN:
14027       case NODE_DASGN_CURR:
14028       case NODE_MASGN:
14029       case NODE_CDECL:
14030       case NODE_CVASGN:
14031         lhs->nd_value = rhs;
14032         break;
14033 
14034       case NODE_ATTRASGN:
14035       case NODE_CALL:
14036         lhs->nd_args = arg_append(lhs->nd_args, rhs);
14037         break;
14038 
14039       default:
14040         /* should not happen */
14041         break;
14042     }
14043 
14044     return lhs;
14045 }
14046 
14047 static int
14048 value_expr_gen(struct parser_params *parser, NODE *node)
14049 {
14050     int cond = 0;
14051 
14052     if (!node) {
14053         rb_warning0("empty expression");
14054     }
14055     while (node) {
14056         switch (nd_type(node)) {
14057           case NODE_DEFN:
14058           case NODE_DEFS:
14059             parser_warning(node, "void value expression");
14060             return FALSE;
14061 
14062           case NODE_RETURN:
14063           case NODE_BREAK:
14064           case NODE_NEXT:
14065           case NODE_REDO:
14066           case NODE_RETRY:
14067             if (!cond) yyerror("void value expression");
14068             /* or "control never reach"? */
14069             return FALSE;
14070 
14071           case NODE_BLOCK:
14072             while (node->nd_next) {
14073                 node = node->nd_next;
14074             }
14075             node = node->nd_head;
14076             break;
14077 
14078           case NODE_BEGIN:
14079             node = node->nd_body;
14080             break;
14081 
14082           case NODE_IF:
14083             if (!node->nd_body) {
14084                 node = node->nd_else;
14085                 break;
14086             }
14087             else if (!node->nd_else) {
14088                 node = node->nd_body;
14089                 break;
14090             }
14091             if (!value_expr(node->nd_body)) return FALSE;
14092             node = node->nd_else;
14093             break;
14094 
14095           case NODE_AND:
14096           case NODE_OR:
14097             cond = 1;
14098             node = node->nd_2nd;
14099             break;
14100 
14101           default:
14102             return TRUE;
14103         }
14104     }
14105 
14106     return TRUE;
14107 }
14108 
14109 static void
14110 void_expr_gen(struct parser_params *parser, NODE *node)
14111 {
14112     const char *useless = 0;
14113 
14114     if (!RTEST(ruby_verbose)) return;
14115 
14116     if (!node) return;
14117     switch (nd_type(node)) {
14118       case NODE_CALL:
14119         switch (node->nd_mid) {
14120           case '+':
14121           case '-':
14122           case '*':
14123           case '/':
14124           case '%':
14125           case tPOW:
14126           case tUPLUS:
14127           case tUMINUS:
14128           case '|':
14129           case '^':
14130           case '&':
14131           case tCMP:
14132           case '>':
14133           case tGEQ:
14134           case '<':
14135           case tLEQ:
14136           case tEQ:
14137           case tNEQ:
14138             useless = rb_id2name(node->nd_mid);
14139             break;
14140         }
14141         break;
14142 
14143       case NODE_LVAR:
14144       case NODE_DVAR:
14145       case NODE_GVAR:
14146       case NODE_IVAR:
14147       case NODE_CVAR:
14148       case NODE_NTH_REF:
14149       case NODE_BACK_REF:
14150         useless = "a variable";
14151         break;
14152       case NODE_CONST:
14153         useless = "a constant";
14154         break;
14155       case NODE_LIT:
14156       case NODE_STR:
14157       case NODE_DSTR:
14158       case NODE_DREGX:
14159       case NODE_DREGX_ONCE:
14160         useless = "a literal";
14161         break;
14162       case NODE_COLON2:
14163       case NODE_COLON3:
14164         useless = "::";
14165         break;
14166       case NODE_DOT2:
14167         useless = "..";
14168         break;
14169       case NODE_DOT3:
14170         useless = "...";
14171         break;
14172       case NODE_SELF:
14173         useless = "self";
14174         break;
14175       case NODE_NIL:
14176         useless = "nil";
14177         break;
14178       case NODE_TRUE:
14179         useless = "true";
14180         break;
14181       case NODE_FALSE:
14182         useless = "false";
14183         break;
14184       case NODE_DEFINED:
14185         useless = "defined?";
14186         break;
14187     }
14188 
14189     if (useless) {
14190         int line = ruby_sourceline;
14191 
14192         ruby_sourceline = nd_line(node);
14193         rb_warnS("possibly useless use of %s in void context", useless);
14194         ruby_sourceline = line;
14195     }
14196 }
14197 
14198 static void
14199 void_stmts_gen(struct parser_params *parser, NODE *node)
14200 {
14201     if (!RTEST(ruby_verbose)) return;
14202     if (!node) return;
14203     if (nd_type(node) != NODE_BLOCK) return;
14204 
14205     for (;;) {
14206         if (!node->nd_next) return;
14207         void_expr0(node->nd_head);
14208         node = node->nd_next;
14209     }
14210 }
14211 
14212 static NODE *
14213 remove_begin(NODE *node)
14214 {
14215     NODE **n = &node, *n1 = node;
14216     while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14217         *n = n1 = n1->nd_body;
14218     }
14219     return node;
14220 }
14221 
14222 static void
14223 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14224 {
14225     NODE *node = *body;
14226 
14227     if (!node) {
14228         *body = NEW_NIL();
14229         return;
14230     }
14231 #define subnodes(n1, n2) \
14232     ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14233      (!node->n2) ? (body = &node->n1, 1) : \
14234      (reduce_nodes(&node->n1), body = &node->n2, 1))
14235 
14236     while (node) {
14237         int newline = (int)(node->flags & NODE_FL_NEWLINE);
14238         switch (nd_type(node)) {
14239           end:
14240           case NODE_NIL:
14241             *body = 0;
14242             return;
14243           case NODE_RETURN:
14244             *body = node = node->nd_stts;
14245             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14246             continue;
14247           case NODE_BEGIN:
14248             *body = node = node->nd_body;
14249             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14250             continue;
14251           case NODE_BLOCK:
14252             body = &node->nd_end->nd_head;
14253             break;
14254           case NODE_IF:
14255             if (subnodes(nd_body, nd_else)) break;
14256             return;
14257           case NODE_CASE:
14258             body = &node->nd_body;
14259             break;
14260           case NODE_WHEN:
14261             if (!subnodes(nd_body, nd_next)) goto end;
14262             break;
14263           case NODE_ENSURE:
14264             if (!subnodes(nd_head, nd_resq)) goto end;
14265             break;
14266           case NODE_RESCUE:
14267             if (node->nd_else) {
14268                 body = &node->nd_resq;
14269                 break;
14270             }
14271             if (!subnodes(nd_head, nd_resq)) goto end;
14272             break;
14273           default:
14274             return;
14275         }
14276         node = *body;
14277         if (newline && node) node->flags |= NODE_FL_NEWLINE;
14278     }
14279 
14280 #undef subnodes
14281 }
14282 
14283 static int
14284 assign_in_cond(struct parser_params *parser, NODE *node)
14285 {
14286     switch (nd_type(node)) {
14287       case NODE_MASGN:
14288         yyerror("multiple assignment in conditional");
14289         return 1;
14290 
14291       case NODE_LASGN:
14292       case NODE_DASGN:
14293       case NODE_DASGN_CURR:
14294       case NODE_GASGN:
14295       case NODE_IASGN:
14296         break;
14297 
14298       default:
14299         return 0;
14300     }
14301 
14302     if (!node->nd_value) return 1;
14303     switch (nd_type(node->nd_value)) {
14304       case NODE_LIT:
14305       case NODE_STR:
14306       case NODE_NIL:
14307       case NODE_TRUE:
14308       case NODE_FALSE:
14309         /* reports always */
14310         parser_warn(node->nd_value, "found = in conditional, should be ==");
14311         return 1;
14312 
14313       case NODE_DSTR:
14314       case NODE_XSTR:
14315       case NODE_DXSTR:
14316       case NODE_EVSTR:
14317       case NODE_DREGX:
14318       default:
14319         break;
14320     }
14321     return 1;
14322 }
14323 
14324 static void
14325 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14326 {
14327     if (!e_option_supplied(parser)) parser_warn(node, str);
14328 }
14329 
14330 static void
14331 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14332 {
14333     if (!e_option_supplied(parser)) parser_warning(node, str);
14334 }
14335 
14336 static void
14337 fixup_nodes(NODE **rootnode)
14338 {
14339     NODE *node, *next, *head;
14340 
14341     for (node = *rootnode; node; node = next) {
14342         enum node_type type;
14343         VALUE val;
14344 
14345         next = node->nd_next;
14346         head = node->nd_head;
14347         rb_gc_force_recycle((VALUE)node);
14348         *rootnode = next;
14349         switch (type = nd_type(head)) {
14350           case NODE_DOT2:
14351           case NODE_DOT3:
14352             val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14353                                type == NODE_DOT3);
14354             rb_gc_force_recycle((VALUE)head->nd_beg);
14355             rb_gc_force_recycle((VALUE)head->nd_end);
14356             nd_set_type(head, NODE_LIT);
14357             head->nd_lit = val;
14358             break;
14359           default:
14360             break;
14361         }
14362     }
14363 }
14364 
14365 static NODE *cond0(struct parser_params*,NODE*);
14366 
14367 static NODE*
14368 range_op(struct parser_params *parser, NODE *node)
14369 {
14370     enum node_type type;
14371 
14372     if (node == 0) return 0;
14373 
14374     type = nd_type(node);
14375     value_expr(node);
14376     if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14377         warn_unless_e_option(parser, node, "integer literal in conditional range");
14378         return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14379     }
14380     return cond0(parser, node);
14381 }
14382 
14383 static int
14384 literal_node(NODE *node)
14385 {
14386     if (!node) return 1;        /* same as NODE_NIL */
14387     switch (nd_type(node)) {
14388       case NODE_LIT:
14389       case NODE_STR:
14390       case NODE_DSTR:
14391       case NODE_EVSTR:
14392       case NODE_DREGX:
14393       case NODE_DREGX_ONCE:
14394       case NODE_DSYM:
14395         return 2;
14396       case NODE_TRUE:
14397       case NODE_FALSE:
14398       case NODE_NIL:
14399         return 1;
14400     }
14401     return 0;
14402 }
14403 
14404 static NODE*
14405 cond0(struct parser_params *parser, NODE *node)
14406 {
14407     if (node == 0) return 0;
14408     assign_in_cond(parser, node);
14409 
14410     switch (nd_type(node)) {
14411       case NODE_DSTR:
14412       case NODE_EVSTR:
14413       case NODE_STR:
14414         rb_warn0("string literal in condition");
14415         break;
14416 
14417       case NODE_DREGX:
14418       case NODE_DREGX_ONCE:
14419         warning_unless_e_option(parser, node, "regex literal in condition");
14420         return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14421 
14422       case NODE_AND:
14423       case NODE_OR:
14424         node->nd_1st = cond0(parser, node->nd_1st);
14425         node->nd_2nd = cond0(parser, node->nd_2nd);
14426         break;
14427 
14428       case NODE_DOT2:
14429       case NODE_DOT3:
14430         node->nd_beg = range_op(parser, node->nd_beg);
14431         node->nd_end = range_op(parser, node->nd_end);
14432         if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14433         else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14434         if (!e_option_supplied(parser)) {
14435             int b = literal_node(node->nd_beg);
14436             int e = literal_node(node->nd_end);
14437             if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14438                 parser_warn(node, "range literal in condition");
14439             }
14440         }
14441         break;
14442 
14443       case NODE_DSYM:
14444         parser_warning(node, "literal in condition");
14445         break;
14446 
14447       case NODE_LIT:
14448         if (TYPE(node->nd_lit) == T_REGEXP) {
14449             warn_unless_e_option(parser, node, "regex literal in condition");
14450             nd_set_type(node, NODE_MATCH);
14451         }
14452         else {
14453             parser_warning(node, "literal in condition");
14454         }
14455       default:
14456         break;
14457     }
14458     return node;
14459 }
14460 
14461 static NODE*
14462 cond_gen(struct parser_params *parser, NODE *node)
14463 {
14464     if (node == 0) return 0;
14465     return cond0(parser, node);
14466 }
14467 
14468 static NODE*
14469 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14470 {
14471     value_expr(left);
14472     if (left && (enum node_type)nd_type(left) == type) {
14473         NODE *node = left, *second;
14474         while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14475             node = second;
14476         }
14477         node->nd_2nd = NEW_NODE(type, second, right, 0);
14478         return left;
14479     }
14480     return NEW_NODE(type, left, right, 0);
14481 }
14482 
14483 static void
14484 no_blockarg(struct parser_params *parser, NODE *node)
14485 {
14486     if (node && nd_type(node) == NODE_BLOCK_PASS) {
14487         compile_error(PARSER_ARG "block argument should not be given");
14488     }
14489 }
14490 
14491 static NODE *
14492 ret_args_gen(struct parser_params *parser, NODE *node)
14493 {
14494     if (node) {
14495         no_blockarg(parser, node);
14496         if (nd_type(node) == NODE_ARRAY) {
14497             if (node->nd_next == 0) {
14498                 node = node->nd_head;
14499             }
14500             else {
14501                 nd_set_type(node, NODE_VALUES);
14502             }
14503         }
14504     }
14505     return node;
14506 }
14507 
14508 static NODE *
14509 new_yield_gen(struct parser_params *parser, NODE *node)
14510 {
14511     long state = Qtrue;
14512 
14513     if (node) {
14514         no_blockarg(parser, node);
14515         if (node && nd_type(node) == NODE_SPLAT) {
14516             state = Qtrue;
14517         }
14518     }
14519     else {
14520         state = Qfalse;
14521     }
14522     return NEW_YIELD(node, state);
14523 }
14524 
14525 static NODE*
14526 negate_lit(NODE *node)
14527 {
14528     switch (TYPE(node->nd_lit)) {
14529       case T_FIXNUM:
14530         node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14531         break;
14532       case T_BIGNUM:
14533         node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14534         break;
14535       case T_FLOAT:
14536         RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14537         break;
14538       default:
14539         break;
14540     }
14541     return node;
14542 }
14543 
14544 static NODE *
14545 arg_blk_pass(NODE *node1, NODE *node2)
14546 {
14547     if (node2) {
14548         node2->nd_head = node1;
14549         return node2;
14550     }
14551     return node1;
14552 }
14553 
14554 static NODE*
14555 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
14556 {
14557     int saved_line = ruby_sourceline;
14558     NODE *node;
14559     NODE *i1, *i2 = 0;
14560 
14561     node = NEW_ARGS(m ? m->nd_plen : 0, o);
14562     i1 = m ? m->nd_next : 0;
14563     node->nd_next = NEW_ARGS_AUX(r, b);
14564 
14565     if (p) {
14566         i2 = p->nd_next;
14567         node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
14568     }
14569     else if (i1) {
14570         node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
14571     }
14572     if (i1 || i2) {
14573         node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
14574     }
14575     ruby_sourceline = saved_line;
14576     return node;
14577 }
14578 #endif /* !RIPPER */
14579 
14580 static void
14581 warn_unused_var(struct parser_params *parser, struct local_vars *local)
14582 {
14583     int i, cnt;
14584     ID *v, *u;
14585 
14586     if (!local->used) return;
14587     v = local->vars->tbl;
14588     u = local->used->tbl;
14589     cnt = local->used->pos;
14590     if (cnt != local->vars->pos) {
14591         rb_bug("local->used->pos != local->vars->pos");
14592     }
14593     for (i = 0; i < cnt; ++i) {
14594         if (!v[i] || (u[i] & LVAR_USED)) continue;
14595         if (idUScore == v[i]) continue;
14596         rb_compile_warn(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
14597     }
14598 }
14599 
14600 static void
14601 local_push_gen(struct parser_params *parser, int inherit_dvars)
14602 {
14603     struct local_vars *local;
14604 
14605     local = ALLOC(struct local_vars);
14606     local->prev = lvtbl;
14607     local->args = vtable_alloc(0);
14608     local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
14609     local->used = !inherit_dvars && RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
14610     lvtbl = local;
14611 }
14612 
14613 static void
14614 local_pop_gen(struct parser_params *parser)
14615 {
14616     struct local_vars *local = lvtbl->prev;
14617     if (lvtbl->used) {
14618         warn_unused_var(parser, lvtbl);
14619         vtable_free(lvtbl->used);
14620     }
14621     vtable_free(lvtbl->args);
14622     vtable_free(lvtbl->vars);
14623     xfree(lvtbl);
14624     lvtbl = local;
14625 }
14626 
14627 #ifndef RIPPER
14628 static ID*
14629 vtable_tblcpy(ID *buf, const struct vtable *src)
14630 {
14631     int i, cnt = vtable_size(src);
14632 
14633     if (cnt > 0) {
14634         buf[0] = cnt;
14635         for (i = 0; i < cnt; i++) {
14636             buf[i] = src->tbl[i];
14637         }
14638         return buf;
14639     }
14640     return 0;
14641 }
14642 
14643 static ID*
14644 local_tbl_gen(struct parser_params *parser)
14645 {
14646     int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
14647     ID *buf;
14648 
14649     if (cnt <= 0) return 0;
14650     buf = ALLOC_N(ID, cnt + 1);
14651     vtable_tblcpy(buf+1, lvtbl->args);
14652     vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
14653     buf[0] = cnt;
14654     return buf;
14655 }
14656 #endif
14657 
14658 static int
14659 arg_var_gen(struct parser_params *parser, ID id)
14660 {
14661     vtable_add(lvtbl->args, id);
14662     return vtable_size(lvtbl->args) - 1;
14663 }
14664 
14665 static int
14666 local_var_gen(struct parser_params *parser, ID id)
14667 {
14668     vtable_add(lvtbl->vars, id);
14669     if (lvtbl->used) {
14670         vtable_add(lvtbl->used, (ID)ruby_sourceline);
14671     }
14672     return vtable_size(lvtbl->vars) - 1;
14673 }
14674 
14675 static int
14676 local_id_gen(struct parser_params *parser, ID id)
14677 {
14678     struct vtable *vars, *args, *used;
14679 
14680     vars = lvtbl->vars;
14681     args = lvtbl->args;
14682     used = lvtbl->used;
14683 
14684     while (vars && POINTER_P(vars->prev)) {
14685         vars = vars->prev;
14686         args = args->prev;
14687         if (used) used = used->prev;
14688     }
14689 
14690     if (vars && vars->prev == DVARS_INHERIT) {
14691         return rb_local_defined(id);
14692     }
14693     else if (vtable_included(args, id)) {
14694         return 1;
14695     }
14696     else {
14697         int i = vtable_included(vars, id);
14698         if (i && used) used->tbl[i-1] |= LVAR_USED;
14699         return i != 0;
14700     }
14701 }
14702 
14703 static const struct vtable *
14704 dyna_push_gen(struct parser_params *parser)
14705 {
14706     lvtbl->args = vtable_alloc(lvtbl->args);
14707     lvtbl->vars = vtable_alloc(lvtbl->vars);
14708     if (lvtbl->used) {
14709         lvtbl->used = vtable_alloc(lvtbl->used);
14710     }
14711     return lvtbl->args;
14712 }
14713 
14714 static void
14715 dyna_pop_1(struct parser_params *parser)
14716 {
14717     struct vtable *tmp;
14718 
14719     if ((tmp = lvtbl->used) != 0) {
14720         warn_unused_var(parser, lvtbl);
14721         lvtbl->used = lvtbl->used->prev;
14722         vtable_free(tmp);
14723     }
14724     tmp = lvtbl->args;
14725     lvtbl->args = lvtbl->args->prev;
14726     vtable_free(tmp);
14727     tmp = lvtbl->vars;
14728     lvtbl->vars = lvtbl->vars->prev;
14729     vtable_free(tmp);
14730 }
14731 
14732 static void
14733 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
14734 {
14735     while (lvtbl->args != lvargs) {
14736         dyna_pop_1(parser);
14737         if (!lvtbl->args) {
14738             struct local_vars *local = lvtbl->prev;
14739             xfree(lvtbl);
14740             lvtbl = local;
14741         }
14742     }
14743     dyna_pop_1(parser);
14744 }
14745 
14746 static int
14747 dyna_in_block_gen(struct parser_params *parser)
14748 {
14749     return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
14750 }
14751 
14752 static int
14753 dvar_defined_gen(struct parser_params *parser, ID id, int get)
14754 {
14755     struct vtable *vars, *args, *used;
14756     int i;
14757 
14758     args = lvtbl->args;
14759     vars = lvtbl->vars;
14760     used = lvtbl->used;
14761 
14762     while (POINTER_P(vars)) {
14763         if (vtable_included(args, id)) {
14764             return 1;
14765         }
14766         if ((i = vtable_included(vars, id)) != 0) {
14767             if (used) used->tbl[i-1] |= LVAR_USED;
14768             return 1;
14769         }
14770         args = args->prev;
14771         vars = vars->prev;
14772         if (get) used = 0;
14773         if (used) used = used->prev;
14774     }
14775 
14776     if (vars == DVARS_INHERIT) {
14777         return rb_dvar_defined(id);
14778     }
14779 
14780     return 0;
14781 }
14782 
14783 static int
14784 dvar_curr_gen(struct parser_params *parser, ID id)
14785 {
14786     return (vtable_included(lvtbl->args, id) ||
14787             vtable_included(lvtbl->vars, id));
14788 }
14789 
14790 #ifndef RIPPER
14791 static void
14792 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
14793 {
14794     int c = RE_OPTION_ENCODING_IDX(options);
14795 
14796     if (c) {
14797         int opt, idx;
14798         rb_char_to_option_kcode(c, &opt, &idx);
14799         if (idx != ENCODING_GET(str) &&
14800             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
14801             goto error;
14802         }
14803         ENCODING_SET(str, idx);
14804     }
14805     else if (RE_OPTION_ENCODING_NONE(options)) {
14806         if (!ENCODING_IS_ASCII8BIT(str) &&
14807             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
14808             c = 'n';
14809             goto error;
14810         }
14811         rb_enc_associate(str, rb_ascii8bit_encoding());
14812     }
14813     else if (parser->enc == rb_usascii_encoding()) {
14814         if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
14815             /* raise in re.c */
14816             rb_enc_associate(str, rb_usascii_encoding());
14817         }
14818         else {
14819             rb_enc_associate(str, rb_ascii8bit_encoding());
14820         }
14821     }
14822     return;
14823 
14824   error:
14825     compile_error(PARSER_ARG
14826         "regexp encoding option '%c' differs from source encoding '%s'",
14827         c, rb_enc_name(rb_enc_get(str)));
14828 }
14829 
14830 static int
14831 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
14832 {
14833     VALUE err;
14834     reg_fragment_setenc(str, options);
14835     err = rb_reg_check_preprocess(str);
14836     if (err != Qnil) {
14837         err = rb_obj_as_string(err);
14838         compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
14839         RB_GC_GUARD(err);
14840         return 0;
14841     }
14842     return 1;
14843 }
14844 
14845 typedef struct {
14846     struct parser_params* parser;
14847     rb_encoding *enc;
14848     NODE *succ_block;
14849     NODE *fail_block;
14850     int num;
14851 } reg_named_capture_assign_t;
14852 
14853 static int
14854 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
14855           int back_num, int *back_refs, OnigRegex regex, void *arg0)
14856 {
14857     reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
14858     struct parser_params* parser = arg->parser;
14859     rb_encoding *enc = arg->enc;
14860     long len = name_end - name;
14861     const char *s = (const char *)name;
14862     ID var;
14863 
14864     arg->num++;
14865 
14866     if (arg->succ_block == 0) {
14867         arg->succ_block = NEW_BEGIN(0);
14868         arg->fail_block = NEW_BEGIN(0);
14869     }
14870 
14871     if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
14872         (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
14873         !rb_enc_symname2_p(s, len, enc)) {
14874         return ST_CONTINUE;
14875     }
14876     var = rb_intern3(s, len, enc);
14877     if (dvar_defined(var) || local_id(var)) {
14878         rb_warningS("named capture conflicts a local variable - %s",
14879                     rb_id2name(var));
14880     }
14881     arg->succ_block = block_append(arg->succ_block,
14882         newline_node(node_assign(assignable(var,0),
14883             NEW_CALL(
14884               gettable(rb_intern("$~")),
14885               idAREF,
14886               NEW_LIST(NEW_LIT(ID2SYM(var))))
14887             )));
14888     arg->fail_block = block_append(arg->fail_block,
14889         newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
14890     return ST_CONTINUE;
14891 }
14892 
14893 static NODE *
14894 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
14895 {
14896     reg_named_capture_assign_t arg;
14897 
14898     arg.parser = parser;
14899     arg.enc = rb_enc_get(regexp);
14900     arg.succ_block = 0;
14901     arg.fail_block = 0;
14902     arg.num = 0;
14903     onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
14904 
14905     if (arg.num == 0)
14906         return match;
14907 
14908     return
14909         block_append(
14910             newline_node(match),
14911             NEW_IF(gettable(rb_intern("$~")),
14912                 block_append(
14913                     newline_node(arg.succ_block),
14914                     newline_node(
14915                         NEW_CALL(
14916                           gettable(rb_intern("$~")),
14917                           rb_intern("begin"),
14918                           NEW_LIST(NEW_LIT(INT2FIX(0)))))),
14919                 block_append(
14920                     newline_node(arg.fail_block),
14921                     newline_node(
14922                         NEW_LIT(Qnil)))));
14923 }
14924 
14925 static VALUE
14926 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
14927 {
14928     VALUE re;
14929     VALUE err;
14930 
14931     reg_fragment_setenc(str, options);
14932     err = rb_errinfo();
14933     re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
14934     if (NIL_P(re)) {
14935         ID mesg = rb_intern("mesg");
14936         VALUE m = rb_attr_get(rb_errinfo(), mesg);
14937         rb_set_errinfo(err);
14938         if (!NIL_P(err)) {
14939             rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
14940         }
14941         else {
14942             compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
14943         }
14944         return Qnil;
14945     }
14946     return re;
14947 }
14948 
14949 void
14950 rb_gc_mark_parser(void)
14951 {
14952 }
14953 
14954 NODE*
14955 rb_parser_append_print(VALUE vparser, NODE *node)
14956 {
14957     NODE *prelude = 0;
14958     NODE *scope = node;
14959     struct parser_params *parser;
14960 
14961     if (!node) return node;
14962 
14963     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
14964 
14965     node = node->nd_body;
14966 
14967     if (nd_type(node) == NODE_PRELUDE) {
14968         prelude = node;
14969         node = node->nd_body;
14970     }
14971 
14972     node = block_append(node,
14973                         NEW_FCALL(rb_intern("print"),
14974                                   NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
14975     if (prelude) {
14976         prelude->nd_body = node;
14977         scope->nd_body = prelude;
14978     }
14979     else {
14980         scope->nd_body = node;
14981     }
14982 
14983     return scope;
14984 }
14985 
14986 NODE *
14987 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
14988 {
14989     NODE *prelude = 0;
14990     NODE *scope = node;
14991     struct parser_params *parser;
14992 
14993     if (!node) return node;
14994 
14995     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
14996 
14997     node = node->nd_body;
14998 
14999     if (nd_type(node) == NODE_PRELUDE) {
15000         prelude = node;
15001         node = node->nd_body;
15002     }
15003     if (split) {
15004         node = block_append(NEW_GASGN(rb_intern("$F"),
15005                                       NEW_CALL(NEW_GVAR(rb_intern("$_")),
15006                                                rb_intern("split"), 0)),
15007                             node);
15008     }
15009     if (chop) {
15010         node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15011                                      rb_intern("chop!"), 0), node);
15012     }
15013 
15014     node = NEW_OPT_N(node);
15015 
15016     if (prelude) {
15017         prelude->nd_body = node;
15018         scope->nd_body = prelude;
15019     }
15020     else {
15021         scope->nd_body = node;
15022     }
15023 
15024     return scope;
15025 }
15026 
15027 static const struct {
15028     ID token;
15029     const char *name;
15030 } op_tbl[] = {
15031     {tDOT2,     ".."},
15032     {tDOT3,     "..."},
15033     {'+',       "+(binary)"},
15034     {'-',       "-(binary)"},
15035     {tPOW,      "**"},
15036     {tUPLUS,    "+@"},
15037     {tUMINUS,   "-@"},
15038     {tCMP,      "<=>"},
15039     {tGEQ,      ">="},
15040     {tLEQ,      "<="},
15041     {tEQ,       "=="},
15042     {tEQQ,      "==="},
15043     {tNEQ,      "!="},
15044     {tMATCH,    "=~"},
15045     {tNMATCH,   "!~"},
15046     {tAREF,     "[]"},
15047     {tASET,     "[]="},
15048     {tLSHFT,    "<<"},
15049     {tRSHFT,    ">>"},
15050     {tCOLON2,   "::"},
15051 };
15052 
15053 #define op_tbl_count numberof(op_tbl)
15054 
15055 #ifndef ENABLE_SELECTOR_NAMESPACE
15056 #define ENABLE_SELECTOR_NAMESPACE 0
15057 #endif
15058 
15059 static struct symbols {
15060     ID last_id;
15061     st_table *sym_id;
15062     st_table *id_str;
15063 #if ENABLE_SELECTOR_NAMESPACE
15064     st_table *ivar2_id;
15065     st_table *id_ivar2;
15066 #endif
15067     VALUE op_sym[tLAST_TOKEN];
15068 } global_symbols = {tLAST_ID};
15069 
15070 static const struct st_hash_type symhash = {
15071     rb_str_hash_cmp,
15072     rb_str_hash,
15073 };
15074 
15075 #if ENABLE_SELECTOR_NAMESPACE
15076 struct ivar2_key {
15077     ID id;
15078     VALUE klass;
15079 };
15080 
15081 static int
15082 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15083 {
15084     if (key1->id == key2->id && key1->klass == key2->klass) {
15085         return 0;
15086     }
15087     return 1;
15088 }
15089 
15090 static int
15091 ivar2_hash(struct ivar2_key *key)
15092 {
15093     return (key->id << 8) ^ (key->klass >> 2);
15094 }
15095 
15096 static const struct st_hash_type ivar2_hash_type = {
15097     ivar2_cmp,
15098     ivar2_hash,
15099 };
15100 #endif
15101 
15102 void
15103 Init_sym(void)
15104 {
15105     global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15106     global_symbols.id_str = st_init_numtable_with_size(1000);
15107 #if ENABLE_SELECTOR_NAMESPACE
15108     global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15109     global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15110 #endif
15111 
15112     Init_id();
15113 }
15114 
15115 void
15116 rb_gc_mark_symbols(void)
15117 {
15118     rb_mark_tbl(global_symbols.id_str);
15119     rb_gc_mark_locations(global_symbols.op_sym,
15120                          global_symbols.op_sym + tLAST_TOKEN);
15121 }
15122 #endif /* !RIPPER */
15123 
15124 static ID
15125 internal_id_gen(struct parser_params *parser)
15126 {
15127     ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15128     id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15129     return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15130 }
15131 
15132 #ifndef RIPPER
15133 static int
15134 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15135 {
15136     int mb = 0;
15137 
15138     if (m >= e) return 0;
15139     switch (*m) {
15140       case '~': case '*': case '$': case '?': case '!': case '@':
15141       case '/': case '\\': case ';': case ',': case '.': case '=':
15142       case ':': case '<': case '>': case '\"':
15143       case '&': case '`': case '\'': case '+':
15144       case '0':
15145         ++m;
15146         break;
15147       case '-':
15148         ++m;
15149         if (m < e && is_identchar(m, e, enc)) {
15150             if (!ISASCII(*m)) mb = 1;
15151             m += rb_enc_mbclen(m, e, enc);
15152         }
15153         break;
15154       default:
15155         if (!rb_enc_isdigit(*m, enc)) return 0;
15156         do {
15157             if (!ISASCII(*m)) mb = 1;
15158             ++m;
15159         } while (m < e && rb_enc_isdigit(*m, enc));
15160     }
15161     return m == e ? mb + 1 : 0;
15162 }
15163 
15164 int
15165 rb_symname_p(const char *name)
15166 {
15167     return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15168 }
15169 
15170 int
15171 rb_enc_symname_p(const char *name, rb_encoding *enc)
15172 {
15173     return rb_enc_symname2_p(name, strlen(name), enc);
15174 }
15175 
15176 int
15177 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15178 {
15179     const char *m = name;
15180     const char *e = m + len;
15181     int localid = FALSE;
15182 
15183     if (!m || len <= 0) return FALSE;
15184     switch (*m) {
15185       case '\0':
15186         return FALSE;
15187 
15188       case '$':
15189         if (is_special_global_name(++m, e, enc)) return TRUE;
15190         goto id;
15191 
15192       case '@':
15193         if (*++m == '@') ++m;
15194         goto id;
15195 
15196       case '<':
15197         switch (*++m) {
15198           case '<': ++m; break;
15199           case '=': if (*++m == '>') ++m; break;
15200           default: break;
15201         }
15202         break;
15203 
15204       case '>':
15205         switch (*++m) {
15206           case '>': case '=': ++m; break;
15207         }
15208         break;
15209 
15210       case '=':
15211         switch (*++m) {
15212           case '~': ++m; break;
15213           case '=': if (*++m == '=') ++m; break;
15214           default: return FALSE;
15215         }
15216         break;
15217 
15218       case '*':
15219         if (*++m == '*') ++m;
15220         break;
15221 
15222       case '+': case '-':
15223         if (*++m == '@') ++m;
15224         break;
15225 
15226       case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15227         ++m;
15228         break;
15229 
15230       case '[':
15231         if (*++m != ']') return FALSE;
15232         if (*++m == '=') ++m;
15233         break;
15234 
15235       case '!':
15236         if (len == 1) return TRUE;
15237         switch (*++m) {
15238           case '=': case '~': ++m; break;
15239           default: return FALSE;
15240         }
15241         break;
15242 
15243       default:
15244         localid = !rb_enc_isupper(*m, enc);
15245       id:
15246         if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15247             return FALSE;
15248         while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15249         if (localid) {
15250             switch (*m) {
15251               case '!': case '?': case '=': ++m;
15252             }
15253         }
15254         break;
15255     }
15256     return m == e;
15257 }
15258 
15259 static ID
15260 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15261 {
15262     VALUE str = rb_enc_str_new(name, len, enc);
15263     OBJ_FREEZE(str);
15264     st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15265     st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15266     return id;
15267 }
15268 
15269 ID
15270 rb_intern3(const char *name, long len, rb_encoding *enc)
15271 {
15272     const char *m = name;
15273     const char *e = m + len;
15274     unsigned char c;
15275     VALUE str;
15276     ID id;
15277     long last;
15278     int mb;
15279     st_data_t data;
15280     struct RString fake_str;
15281     fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
15282     fake_str.basic.klass = rb_cString;
15283     fake_str.as.heap.len = len;
15284     fake_str.as.heap.ptr = (char *)name;
15285     fake_str.as.heap.aux.capa = len;
15286     str = (VALUE)&fake_str;
15287     rb_enc_associate(str, enc);
15288     OBJ_FREEZE(str);
15289 
15290     if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15291         rb_raise(rb_eEncodingError, "invalid encoding symbol");
15292     }
15293 
15294     if (st_lookup(global_symbols.sym_id, str, &data))
15295         return (ID)data;
15296 
15297     if (rb_cString && !rb_enc_asciicompat(enc)) {
15298         id = ID_JUNK;
15299         goto new_id;
15300     }
15301     last = len-1;
15302     id = 0;
15303     switch (*m) {
15304       case '$':
15305         id |= ID_GLOBAL;
15306         if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15307             if (!--mb) enc = rb_ascii8bit_encoding();
15308             goto new_id;
15309         }
15310         break;
15311       case '@':
15312         if (m[1] == '@') {
15313             m++;
15314             id |= ID_CLASS;
15315         }
15316         else {
15317             id |= ID_INSTANCE;
15318         }
15319         m++;
15320         break;
15321       default:
15322         c = m[0];
15323         if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15324             /* operators */
15325             int i;
15326 
15327             if (len == 1) {
15328                 id = c;
15329                 goto id_register;
15330             }
15331             for (i = 0; i < op_tbl_count; i++) {
15332                 if (*op_tbl[i].name == *m &&
15333                     strcmp(op_tbl[i].name, m) == 0) {
15334                     id = op_tbl[i].token;
15335                     goto id_register;
15336                 }
15337             }
15338         }
15339 
15340         if (m[last] == '=') {
15341             /* attribute assignment */
15342             id = rb_intern3(name, last, enc);
15343             if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15344                 enc = rb_enc_get(rb_id2str(id));
15345                 id = rb_id_attrset(id);
15346                 goto id_register;
15347             }
15348             id = ID_ATTRSET;
15349         }
15350         else if (rb_enc_isupper(m[0], enc)) {
15351             id = ID_CONST;
15352         }
15353         else {
15354             id = ID_LOCAL;
15355         }
15356         break;
15357     }
15358     mb = 0;
15359     if (!rb_enc_isdigit(*m, enc)) {
15360         while (m <= name + last && is_identchar(m, e, enc)) {
15361             if (ISASCII(*m)) {
15362                 m++;
15363             }
15364             else {
15365                 mb = 1;
15366                 m += rb_enc_mbclen(m, e, enc);
15367             }
15368         }
15369     }
15370     if (m - name < len) id = ID_JUNK;
15371     if (enc != rb_usascii_encoding()) {
15372         /*
15373          * this clause makes sense only when called from other than
15374          * rb_intern_str() taking care of code-range.
15375          */
15376         if (!mb) {
15377             for (; m <= name + len; ++m) {
15378                 if (!ISASCII(*m)) goto mbstr;
15379             }
15380             enc = rb_usascii_encoding();
15381         }
15382       mbstr:;
15383     }
15384   new_id:
15385     if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15386         if (len > 20) {
15387             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15388                      name);
15389         }
15390         else {
15391             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15392                      (int)len, name);
15393         }
15394     }
15395     id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15396   id_register:
15397     return register_symid(id, name, len, enc);
15398 }
15399 
15400 ID
15401 rb_intern2(const char *name, long len)
15402 {
15403     return rb_intern3(name, len, rb_usascii_encoding());
15404 }
15405 
15406 #undef rb_intern
15407 ID
15408 rb_intern(const char *name)
15409 {
15410     return rb_intern2(name, strlen(name));
15411 }
15412 
15413 ID
15414 rb_intern_str(VALUE str)
15415 {
15416     rb_encoding *enc;
15417     ID id;
15418 
15419     if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15420         enc = rb_usascii_encoding();
15421     }
15422     else {
15423         enc = rb_enc_get(str);
15424     }
15425     id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15426     RB_GC_GUARD(str);
15427     return id;
15428 }
15429 
15430 VALUE
15431 rb_id2str(ID id)
15432 {
15433     st_data_t data;
15434 
15435     if (id < tLAST_TOKEN) {
15436         int i = 0;
15437 
15438         if (id < INT_MAX && rb_ispunct((int)id)) {
15439             VALUE str = global_symbols.op_sym[i = (int)id];
15440             if (!str) {
15441                 char name[2];
15442                 name[0] = (char)id;
15443                 name[1] = 0;
15444                 str = rb_usascii_str_new(name, 1);
15445                 OBJ_FREEZE(str);
15446                 global_symbols.op_sym[i] = str;
15447             }
15448             return str;
15449         }
15450         for (i = 0; i < op_tbl_count; i++) {
15451             if (op_tbl[i].token == id) {
15452                 VALUE str = global_symbols.op_sym[i];
15453                 if (!str) {
15454                     str = rb_usascii_str_new2(op_tbl[i].name);
15455                     OBJ_FREEZE(str);
15456                     global_symbols.op_sym[i] = str;
15457                 }
15458                 return str;
15459             }
15460         }
15461     }
15462 
15463     if (st_lookup(global_symbols.id_str, id, &data)) {
15464         VALUE str = (VALUE)data;
15465         if (RBASIC(str)->klass == 0)
15466             RBASIC(str)->klass = rb_cString;
15467         return str;
15468     }
15469 
15470     if (is_attrset_id(id)) {
15471         ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15472         VALUE str;
15473 
15474         while (!(str = rb_id2str(id2))) {
15475             if (!is_local_id(id2)) return 0;
15476             id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15477         }
15478         str = rb_str_dup(str);
15479         rb_str_cat(str, "=", 1);
15480         rb_intern_str(str);
15481         if (st_lookup(global_symbols.id_str, id, &data)) {
15482             VALUE str = (VALUE)data;
15483             if (RBASIC(str)->klass == 0)
15484                 RBASIC(str)->klass = rb_cString;
15485             return str;
15486         }
15487     }
15488     return 0;
15489 }
15490 
15491 const char *
15492 rb_id2name(ID id)
15493 {
15494     VALUE str = rb_id2str(id);
15495 
15496     if (!str) return 0;
15497     return RSTRING_PTR(str);
15498 }
15499 
15500 static int
15501 symbols_i(VALUE sym, ID value, VALUE ary)
15502 {
15503     rb_ary_push(ary, ID2SYM(value));
15504     return ST_CONTINUE;
15505 }
15506 
15507 /*
15508  *  call-seq:
15509  *     Symbol.all_symbols    => array
15510  *
15511  *  Returns an array of all the symbols currently in Ruby's symbol
15512  *  table.
15513  *
15514  *     Symbol.all_symbols.size    #=> 903
15515  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
15516  *                                     :chown, :EOFError, :$;, :String,
15517  *                                     :LOCK_SH, :"setuid?", :$<,
15518  *                                     :default_proc, :compact, :extend,
15519  *                                     :Tms, :getwd, :$=, :ThreadGroup,
15520  *                                     :wait2, :$>]
15521  */
15522 
15523 VALUE
15524 rb_sym_all_symbols(void)
15525 {
15526     VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15527 
15528     st_foreach(global_symbols.sym_id, symbols_i, ary);
15529     return ary;
15530 }
15531 
15532 int
15533 rb_is_const_id(ID id)
15534 {
15535     return is_const_id(id);
15536 }
15537 
15538 int
15539 rb_is_class_id(ID id)
15540 {
15541     return is_class_id(id);
15542 }
15543 
15544 int
15545 rb_is_instance_id(ID id)
15546 {
15547     return is_instance_id(id);
15548 }
15549 
15550 int
15551 rb_is_local_id(ID id)
15552 {
15553     return is_local_id(id);
15554 }
15555 
15556 int
15557 rb_is_junk_id(ID id)
15558 {
15559     return is_junk_id(id);
15560 }
15561 
15562 #endif /* !RIPPER */
15563 
15564 static void
15565 parser_initialize(struct parser_params *parser)
15566 {
15567     parser->eofp = Qfalse;
15568 
15569     parser->parser_lex_strterm = 0;
15570     parser->parser_cond_stack = 0;
15571     parser->parser_cmdarg_stack = 0;
15572     parser->parser_class_nest = 0;
15573     parser->parser_paren_nest = 0;
15574     parser->parser_lpar_beg = 0;
15575     parser->parser_in_single = 0;
15576     parser->parser_in_def = 0;
15577     parser->parser_in_defined = 0;
15578     parser->parser_compile_for_eval = 0;
15579     parser->parser_cur_mid = 0;
15580     parser->parser_tokenbuf = NULL;
15581     parser->parser_tokidx = 0;
15582     parser->parser_toksiz = 0;
15583     parser->parser_heredoc_end = 0;
15584     parser->parser_command_start = TRUE;
15585     parser->parser_deferred_nodes = 0;
15586     parser->parser_lex_pbeg = 0;
15587     parser->parser_lex_p = 0;
15588     parser->parser_lex_pend = 0;
15589     parser->parser_lvtbl = 0;
15590     parser->parser_ruby__end__seen = 0;
15591     parser->parser_ruby_sourcefile = 0;
15592 #ifndef RIPPER
15593     parser->is_ripper = 0;
15594     parser->parser_eval_tree_begin = 0;
15595     parser->parser_eval_tree = 0;
15596 #else
15597     parser->is_ripper = 1;
15598     parser->parser_ruby_sourcefile_string = Qnil;
15599     parser->delayed = Qnil;
15600 
15601     parser->result = Qnil;
15602     parser->parsing_thread = Qnil;
15603     parser->toplevel_p = TRUE;
15604 #endif
15605 #ifdef YYMALLOC
15606     parser->heap = NULL;
15607 #endif
15608     parser->enc = rb_usascii_encoding();
15609 }
15610 
15611 #ifdef RIPPER
15612 #define parser_mark ripper_parser_mark
15613 #define parser_free ripper_parser_free
15614 #endif
15615 
15616 static void
15617 parser_mark(void *ptr)
15618 {
15619     struct parser_params *p = (struct parser_params*)ptr;
15620 
15621     rb_gc_mark((VALUE)p->parser_lex_strterm);
15622     rb_gc_mark((VALUE)p->parser_deferred_nodes);
15623     rb_gc_mark(p->parser_lex_input);
15624     rb_gc_mark(p->parser_lex_lastline);
15625     rb_gc_mark(p->parser_lex_nextline);
15626 #ifndef RIPPER
15627     rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
15628     rb_gc_mark((VALUE)p->parser_eval_tree) ;
15629     rb_gc_mark(p->debug_lines);
15630 #else
15631     rb_gc_mark(p->parser_ruby_sourcefile_string);
15632     rb_gc_mark(p->delayed);
15633     rb_gc_mark(p->value);
15634     rb_gc_mark(p->result);
15635     rb_gc_mark(p->parsing_thread);
15636 #endif
15637 #ifdef YYMALLOC
15638     rb_gc_mark((VALUE)p->heap);
15639 #endif
15640 }
15641 
15642 static void
15643 parser_free(void *ptr)
15644 {
15645     struct parser_params *p = (struct parser_params*)ptr;
15646     struct local_vars *local, *prev;
15647 
15648     if (p->parser_tokenbuf) {
15649         xfree(p->parser_tokenbuf);
15650     }
15651     for (local = p->parser_lvtbl; local; local = prev) {
15652         if (local->vars) xfree(local->vars);
15653         prev = local->prev;
15654         xfree(local);
15655     }
15656 #ifndef RIPPER
15657     xfree(p->parser_ruby_sourcefile);
15658 #endif
15659     xfree(p);
15660 }
15661 
15662 static size_t
15663 parser_memsize(const void *ptr)
15664 {
15665     struct parser_params *p = (struct parser_params*)ptr;
15666     struct local_vars *local;
15667     size_t size = sizeof(*p);
15668 
15669     if (!ptr) return 0;
15670     size += p->parser_toksiz;
15671     for (local = p->parser_lvtbl; local; local = local->prev) {
15672         size += sizeof(*local);
15673         if (local->vars) size += local->vars->capa * sizeof(ID);
15674     }
15675 #ifndef RIPPER
15676     if (p->parser_ruby_sourcefile) {
15677         size += strlen(p->parser_ruby_sourcefile) + 1;
15678     }
15679 #endif
15680     return size;
15681 }
15682 
15683 static
15684 #ifndef RIPPER
15685 const
15686 #endif
15687 rb_data_type_t parser_data_type = {
15688     "parser",
15689     {
15690         parser_mark,
15691         parser_free,
15692         parser_memsize,
15693     },
15694 };
15695 
15696 #ifndef RIPPER
15697 #undef rb_reserved_word
15698 
15699 const struct kwtable *
15700 rb_reserved_word(const char *str, unsigned int len)
15701 {
15702     return reserved_word(str, len);
15703 }
15704 
15705 static struct parser_params *
15706 parser_new(void)
15707 {
15708     struct parser_params *p;
15709 
15710     p = ALLOC_N(struct parser_params, 1);
15711     MEMZERO(p, struct parser_params, 1);
15712     parser_initialize(p);
15713     return p;
15714 }
15715 
15716 VALUE
15717 rb_parser_new(void)
15718 {
15719     struct parser_params *p = parser_new();
15720 
15721     return TypedData_Wrap_Struct(0, &parser_data_type, p);
15722 }
15723 
15724 /*
15725  *  call-seq:
15726  *    ripper#end_seen?   -> Boolean
15727  *
15728  *  Return true if parsed source ended by +\_\_END\_\_+.
15729  */
15730 VALUE
15731 rb_parser_end_seen_p(VALUE vparser)
15732 {
15733     struct parser_params *parser;
15734 
15735     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15736     return ruby__end__seen ? Qtrue : Qfalse;
15737 }
15738 
15739 /*
15740  *  call-seq:
15741  *    ripper#encoding   -> encoding
15742  *
15743  *  Return encoding of the source.
15744  */
15745 VALUE
15746 rb_parser_encoding(VALUE vparser)
15747 {
15748     struct parser_params *parser;
15749 
15750     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15751     return rb_enc_from_encoding(parser->enc);
15752 }
15753 
15754 /*
15755  *  call-seq:
15756  *    ripper.yydebug   -> true or false
15757  *
15758  *  Get yydebug.
15759  */
15760 VALUE
15761 rb_parser_get_yydebug(VALUE self)
15762 {
15763     struct parser_params *parser;
15764 
15765     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
15766     return yydebug ? Qtrue : Qfalse;
15767 }
15768 
15769 /*
15770  *  call-seq:
15771  *    ripper.yydebug = flag
15772  *
15773  *  Set yydebug.
15774  */
15775 VALUE
15776 rb_parser_set_yydebug(VALUE self, VALUE flag)
15777 {
15778     struct parser_params *parser;
15779 
15780     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
15781     yydebug = RTEST(flag);
15782     return flag;
15783 }
15784 
15785 #ifdef YYMALLOC
15786 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
15787 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
15788 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
15789                            (n)->u3.cnt = (c), (p))
15790 
15791 void *
15792 rb_parser_malloc(struct parser_params *parser, size_t size)
15793 {
15794     size_t cnt = HEAPCNT(1, size);
15795     NODE *n = NEWHEAP();
15796     void *ptr = xmalloc(size);
15797 
15798     return ADD2HEAP(n, cnt, ptr);
15799 }
15800 
15801 void *
15802 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
15803 {
15804     size_t cnt = HEAPCNT(nelem, size);
15805     NODE *n = NEWHEAP();
15806     void *ptr = xcalloc(nelem, size);
15807 
15808     return ADD2HEAP(n, cnt, ptr);
15809 }
15810 
15811 void *
15812 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
15813 {
15814     NODE *n;
15815     size_t cnt = HEAPCNT(1, size);
15816 
15817     if (ptr && (n = parser->heap) != NULL) {
15818         do {
15819             if (n->u1.node == ptr) {
15820                 n->u1.node = ptr = xrealloc(ptr, size);
15821                 if (n->u3.cnt) n->u3.cnt = cnt;
15822                 return ptr;
15823             }
15824         } while ((n = n->u2.node) != NULL);
15825     }
15826     n = NEWHEAP();
15827     ptr = xrealloc(ptr, size);
15828     return ADD2HEAP(n, cnt, ptr);
15829 }
15830 
15831 void
15832 rb_parser_free(struct parser_params *parser, void *ptr)
15833 {
15834     NODE **prev = &parser->heap, *n;
15835 
15836     while ((n = *prev) != NULL) {
15837         if (n->u1.node == ptr) {
15838             *prev = n->u2.node;
15839             rb_gc_force_recycle((VALUE)n);
15840             break;
15841         }
15842         prev = &n->u2.node;
15843     }
15844     xfree(ptr);
15845 }
15846 #endif
15847 #endif
15848 
15849 #ifdef RIPPER
15850 #ifdef RIPPER_DEBUG
15851 extern int rb_is_pointer_to_heap(VALUE);
15852 
15853 /* :nodoc: */
15854 static VALUE
15855 ripper_validate_object(VALUE self, VALUE x)
15856 {
15857     if (x == Qfalse) return x;
15858     if (x == Qtrue) return x;
15859     if (x == Qnil) return x;
15860     if (x == Qundef)
15861         rb_raise(rb_eArgError, "Qundef given");
15862     if (FIXNUM_P(x)) return x;
15863     if (SYMBOL_P(x)) return x;
15864     if (!rb_is_pointer_to_heap(x))
15865         rb_raise(rb_eArgError, "invalid pointer: %p", x);
15866     switch (TYPE(x)) {
15867       case T_STRING:
15868       case T_OBJECT:
15869       case T_ARRAY:
15870       case T_BIGNUM:
15871       case T_FLOAT:
15872         return x;
15873       case T_NODE:
15874         if (nd_type(x) != NODE_LASGN) {
15875             rb_raise(rb_eArgError, "NODE given: %p", x);
15876         }
15877         return ((NODE *)x)->nd_rval;
15878       default:
15879         rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
15880                  x, rb_obj_classname(x));
15881     }
15882     return x;
15883 }
15884 #endif
15885 
15886 #define validate(x) ((x) = get_value(x))
15887 
15888 static VALUE
15889 ripper_dispatch0(struct parser_params *parser, ID mid)
15890 {
15891     return rb_funcall(parser->value, mid, 0);
15892 }
15893 
15894 static VALUE
15895 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
15896 {
15897     validate(a);
15898     return rb_funcall(parser->value, mid, 1, a);
15899 }
15900 
15901 static VALUE
15902 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
15903 {
15904     validate(a);
15905     validate(b);
15906     return rb_funcall(parser->value, mid, 2, a, b);
15907 }
15908 
15909 static VALUE
15910 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
15911 {
15912     validate(a);
15913     validate(b);
15914     validate(c);
15915     return rb_funcall(parser->value, mid, 3, a, b, c);
15916 }
15917 
15918 static VALUE
15919 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
15920 {
15921     validate(a);
15922     validate(b);
15923     validate(c);
15924     validate(d);
15925     return rb_funcall(parser->value, mid, 4, a, b, c, d);
15926 }
15927 
15928 static VALUE
15929 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
15930 {
15931     validate(a);
15932     validate(b);
15933     validate(c);
15934     validate(d);
15935     validate(e);
15936     return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
15937 }
15938 
15939 static const struct kw_assoc {
15940     ID id;
15941     const char *name;
15942 } keyword_to_name[] = {
15943     {keyword_class,     "class"},
15944     {keyword_module,    "module"},
15945     {keyword_def,       "def"},
15946     {keyword_undef,     "undef"},
15947     {keyword_begin,     "begin"},
15948     {keyword_rescue,    "rescue"},
15949     {keyword_ensure,    "ensure"},
15950     {keyword_end,       "end"},
15951     {keyword_if,        "if"},
15952     {keyword_unless,    "unless"},
15953     {keyword_then,      "then"},
15954     {keyword_elsif,     "elsif"},
15955     {keyword_else,      "else"},
15956     {keyword_case,      "case"},
15957     {keyword_when,      "when"},
15958     {keyword_while,     "while"},
15959     {keyword_until,     "until"},
15960     {keyword_for,       "for"},
15961     {keyword_break,     "break"},
15962     {keyword_next,      "next"},
15963     {keyword_redo,      "redo"},
15964     {keyword_retry,     "retry"},
15965     {keyword_in,        "in"},
15966     {keyword_do,        "do"},
15967     {keyword_do_cond,   "do"},
15968     {keyword_do_block,  "do"},
15969     {keyword_return,    "return"},
15970     {keyword_yield,     "yield"},
15971     {keyword_super,     "super"},
15972     {keyword_self,      "self"},
15973     {keyword_nil,       "nil"},
15974     {keyword_true,      "true"},
15975     {keyword_false,     "false"},
15976     {keyword_and,       "and"},
15977     {keyword_or,        "or"},
15978     {keyword_not,       "not"},
15979     {modifier_if,       "if"},
15980     {modifier_unless,   "unless"},
15981     {modifier_while,    "while"},
15982     {modifier_until,    "until"},
15983     {modifier_rescue,   "rescue"},
15984     {keyword_alias,     "alias"},
15985     {keyword_defined,   "defined?"},
15986     {keyword_BEGIN,     "BEGIN"},
15987     {keyword_END,       "END"},
15988     {keyword__LINE__,   "__LINE__"},
15989     {keyword__FILE__,   "__FILE__"},
15990     {keyword__ENCODING__, "__ENCODING__"},
15991     {0, NULL}
15992 };
15993 
15994 static const char*
15995 keyword_id_to_str(ID id)
15996 {
15997     const struct kw_assoc *a;
15998 
15999     for (a = keyword_to_name; a->id; a++) {
16000         if (a->id == id)
16001             return a->name;
16002     }
16003     return NULL;
16004 }
16005 
16006 #undef ripper_id2sym
16007 static VALUE
16008 ripper_id2sym(ID id)
16009 {
16010     const char *name;
16011     char buf[8];
16012 
16013     if (id <= 256) {
16014         buf[0] = (char)id;
16015         buf[1] = '\0';
16016         return ID2SYM(rb_intern2(buf, 1));
16017     }
16018     if ((name = keyword_id_to_str(id))) {
16019         return ID2SYM(rb_intern(name));
16020     }
16021     switch (id) {
16022       case tOROP:
16023         name = "||";
16024         break;
16025       case tANDOP:
16026         name = "&&";
16027         break;
16028       default:
16029         name = rb_id2name(id);
16030         if (!name) {
16031             rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16032         }
16033         return ID2SYM(id);
16034     }
16035     return ID2SYM(rb_intern(name));
16036 }
16037 
16038 static ID
16039 ripper_get_id(VALUE v)
16040 {
16041     NODE *nd;
16042     if (!RB_TYPE_P(v, T_NODE)) return 0;
16043     nd = (NODE *)v;
16044     if (nd_type(nd) != NODE_LASGN) return 0;
16045     return nd->nd_vid;
16046 }
16047 
16048 static VALUE
16049 ripper_get_value(VALUE v)
16050 {
16051     NODE *nd;
16052     if (v == Qundef) return Qnil;
16053     if (!RB_TYPE_P(v, T_NODE)) return v;
16054     nd = (NODE *)v;
16055     if (nd_type(nd) != NODE_LASGN) return Qnil;
16056     return nd->nd_rval;
16057 }
16058 
16059 static void
16060 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16061 {
16062     VALUE str;
16063     va_list args;
16064 
16065     va_start(args, fmt);
16066     str = rb_vsprintf(fmt, args);
16067     va_end(args);
16068     rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16069 }
16070 
16071 static void
16072 ripper_warn0(struct parser_params *parser, const char *fmt)
16073 {
16074     rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16075 }
16076 
16077 static void
16078 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16079 {
16080     rb_funcall(parser->value, rb_intern("warn"), 2,
16081                STR_NEW2(fmt), INT2NUM(a));
16082 }
16083 
16084 #if 0
16085 static void
16086 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16087 {
16088     rb_funcall(parser->value, rb_intern("warn"), 2,
16089                STR_NEW2(fmt), STR_NEW2(str));
16090 }
16091 #endif
16092 
16093 static void
16094 ripper_warning0(struct parser_params *parser, const char *fmt)
16095 {
16096     rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16097 }
16098 
16099 static void
16100 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16101 {
16102     rb_funcall(parser->value, rb_intern("warning"), 2,
16103                STR_NEW2(fmt), STR_NEW2(str));
16104 }
16105 
16106 static VALUE
16107 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16108 {
16109     return rb_funcall(src, ripper_id_gets, 0);
16110 }
16111 
16112 static VALUE
16113 ripper_s_allocate(VALUE klass)
16114 {
16115     struct parser_params *p;
16116     VALUE self;
16117 
16118     p = ALLOC_N(struct parser_params, 1);
16119     MEMZERO(p, struct parser_params, 1);
16120     self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16121     p->value = self;
16122     return self;
16123 }
16124 
16125 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16126 
16127 /*
16128  *  call-seq:
16129  *    Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
16130  *
16131  *  Create a new Ripper object.
16132  *  _src_ must be a String, an IO, or an Object which has #gets method.
16133  *
16134  *  This method does not starts parsing.
16135  *  See also Ripper#parse and Ripper.parse.
16136  */
16137 static VALUE
16138 ripper_initialize(int argc, VALUE *argv, VALUE self)
16139 {
16140     struct parser_params *parser;
16141     VALUE src, fname, lineno;
16142 
16143     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16144     rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16145     if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16146         parser->parser_lex_gets = ripper_lex_get_generic;
16147     }
16148     else {
16149         StringValue(src);
16150         parser->parser_lex_gets = lex_get_str;
16151     }
16152     parser->parser_lex_input = src;
16153     parser->eofp = Qfalse;
16154     if (NIL_P(fname)) {
16155         fname = STR_NEW2("(ripper)");
16156     }
16157     else {
16158         StringValue(fname);
16159     }
16160     parser_initialize(parser);
16161 
16162     parser->parser_ruby_sourcefile_string = fname;
16163     parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16164     parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16165 
16166     return Qnil;
16167 }
16168 
16169 struct ripper_args {
16170     struct parser_params *parser;
16171     int argc;
16172     VALUE *argv;
16173 };
16174 
16175 static VALUE
16176 ripper_parse0(VALUE parser_v)
16177 {
16178     struct parser_params *parser;
16179 
16180     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16181     parser_prepare(parser);
16182     ripper_yyparse((void*)parser);
16183     return parser->result;
16184 }
16185 
16186 static VALUE
16187 ripper_ensure(VALUE parser_v)
16188 {
16189     struct parser_params *parser;
16190 
16191     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16192     parser->parsing_thread = Qnil;
16193     return Qnil;
16194 }
16195 
16196 /*
16197  *  call-seq:
16198  *    ripper#parse
16199  *
16200  *  Start parsing and returns the value of the root action.
16201  */
16202 static VALUE
16203 ripper_parse(VALUE self)
16204 {
16205     struct parser_params *parser;
16206 
16207     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16208     if (!ripper_initialized_p(parser)) {
16209         rb_raise(rb_eArgError, "method called for uninitialized object");
16210     }
16211     if (!NIL_P(parser->parsing_thread)) {
16212         if (parser->parsing_thread == rb_thread_current())
16213             rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16214         else
16215             rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16216     }
16217     parser->parsing_thread = rb_thread_current();
16218     rb_ensure(ripper_parse0, self, ripper_ensure, self);
16219 
16220     return parser->result;
16221 }
16222 
16223 /*
16224  *  call-seq:
16225  *    ripper#column   -> Integer
16226  *
16227  *  Return column number of current parsing line.
16228  *  This number starts from 0.
16229  */
16230 static VALUE
16231 ripper_column(VALUE self)
16232 {
16233     struct parser_params *parser;
16234     long col;
16235 
16236     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16237     if (!ripper_initialized_p(parser)) {
16238         rb_raise(rb_eArgError, "method called for uninitialized object");
16239     }
16240     if (NIL_P(parser->parsing_thread)) return Qnil;
16241     col = parser->tokp - parser->parser_lex_pbeg;
16242     return LONG2NUM(col);
16243 }
16244 
16245 /*
16246  *  call-seq:
16247  *    ripper#filename   -> String
16248  *
16249  *  Return current parsing filename.
16250  */
16251 static VALUE
16252 ripper_filename(VALUE self)
16253 {
16254     struct parser_params *parser;
16255 
16256     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16257     if (!ripper_initialized_p(parser)) {
16258         rb_raise(rb_eArgError, "method called for uninitialized object");
16259     }
16260     return parser->parser_ruby_sourcefile_string;
16261 }
16262 
16263 /*
16264  *  call-seq:
16265  *    ripper#lineno   -> Integer
16266  *
16267  *  Return line number of current parsing line.
16268  *  This number starts from 1.
16269  */
16270 static VALUE
16271 ripper_lineno(VALUE self)
16272 {
16273     struct parser_params *parser;
16274 
16275     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16276     if (!ripper_initialized_p(parser)) {
16277         rb_raise(rb_eArgError, "method called for uninitialized object");
16278     }
16279     if (NIL_P(parser->parsing_thread)) return Qnil;
16280     return INT2NUM(parser->parser_ruby_sourceline);
16281 }
16282 
16283 #ifdef RIPPER_DEBUG
16284 /* :nodoc: */
16285 static VALUE
16286 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16287 {
16288     StringValue(msg);
16289     if (obj == Qundef) {
16290         rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16291     }
16292     return Qnil;
16293 }
16294 
16295 /* :nodoc: */
16296 static VALUE
16297 ripper_value(VALUE self, VALUE obj)
16298 {
16299     return ULONG2NUM(obj);
16300 }
16301 #endif
16302 
16303 
16304 void
16305 InitVM_ripper(void)
16306 {
16307     parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
16308 }
16309 
16310 void
16311 Init_ripper(void)
16312 {
16313     VALUE Ripper;
16314 
16315     InitVM(ripper);
16316     Ripper = rb_define_class("Ripper", rb_cObject);
16317     rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16318     rb_define_alloc_func(Ripper, ripper_s_allocate);
16319     rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16320     rb_define_method(Ripper, "parse", ripper_parse, 0);
16321     rb_define_method(Ripper, "column", ripper_column, 0);
16322     rb_define_method(Ripper, "filename", ripper_filename, 0);
16323     rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16324     rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16325     rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16326     rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16327     rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16328 #ifdef RIPPER_DEBUG
16329     rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16330     rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16331     rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16332 #endif
16333 
16334     ripper_id_gets = rb_intern("gets");
16335     ripper_init_eventids1(Ripper);
16336     ripper_init_eventids2(Ripper);
16337     /* ensure existing in symbol table */
16338     (void)rb_intern("||");
16339     (void)rb_intern("&&");
16340 
16341 # if 0
16342     /* Hack to let RDoc document SCRIPT_LINES__ */
16343 
16344     /*
16345      * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
16346      * after the assignment will be added as an Array of lines with the file
16347      * name as the key.
16348      */
16349     rb_define_global_const("SCRIPT_LINES__", Qnil);
16350 #endif
16351 
16352 }
16353 #endif /* RIPPER */
16354 
16355