Ruby 1.9.2p180(2011-02-18revision30909)

parse.c

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.4.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    2009, 2010 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 3 of the License, or
00011    (at your option) 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, see <http://www.gnu.org/licenses/>.  */
00020 
00021 /* As a special exception, you may create a larger work that contains
00022    part or all of the Bison parser skeleton and distribute that work
00023    under terms of your choice, so long as that work isn't itself a
00024    parser generator using the skeleton or a modified version thereof
00025    as a parser skeleton.  Alternatively, if you modify or redistribute
00026    the parser skeleton itself, you may (at your option) remove this
00027    special exception, which will cause the skeleton and the resulting
00028    Bison output files to be licensed under the GNU General Public
00029    License without this special exception.
00030    
00031    This special exception was added by the Free Software Foundation in
00032    version 2.2 of Bison.  */
00033 
00034 /* C LALR(1) parser skeleton written by Richard Stallman, by
00035    simplifying the original so-called "semantic" parser.  */
00036 
00037 /* All symbols defined below should begin with yy or YY, to avoid
00038    infringing on user name space.  This should be done even for local
00039    variables, as they might otherwise be expanded by user macros.
00040    There are some unavoidable exceptions within include files to
00041    define necessary library symbols; they are noted "INFRINGES ON
00042    USER NAME SPACE" below.  */
00043 
00044 /* Identify Bison output.  */
00045 #define YYBISON 1
00046 
00047 /* Bison version.  */
00048 #define YYBISON_VERSION "2.4.3"
00049 
00050 /* Skeleton name.  */
00051 #define YYSKELETON_NAME "yacc.c"
00052 
00053 /* Pure parsers.  */
00054 #define YYPURE 1
00055 
00056 /* Push parsers.  */
00057 #define YYPUSH 0
00058 
00059 /* Pull parsers.  */
00060 #define YYPULL 1
00061 
00062 /* Using locations.  */
00063 #define YYLSP_NEEDED 0
00064 
00065 
00066 
00067 /* Copy the first part of user declarations.  */
00068 
00069 /* Line 189 of yacc.c  */
00070 #line 12 "parse.y"
00071 
00072 
00073 #define YYDEBUG 1
00074 #define YYERROR_VERBOSE 1
00075 #define YYSTACK_USE_ALLOCA 0
00076 
00077 #include "ruby/ruby.h"
00078 #include "ruby/st.h"
00079 #include "ruby/encoding.h"
00080 #include "node.h"
00081 #include "parse.h"
00082 #include "id.h"
00083 #include "regenc.h"
00084 #include <stdio.h>
00085 #include <errno.h>
00086 #include <ctype.h>
00087 
00088 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00089 
00090 #define YYMALLOC(size)          rb_parser_malloc(parser, size)
00091 #define YYREALLOC(ptr, size)    rb_parser_realloc(parser, ptr, size)
00092 #define YYCALLOC(nelem, size)   rb_parser_calloc(parser, nelem, size)
00093 #define YYFREE(ptr)             rb_parser_free(parser, ptr)
00094 #define malloc  YYMALLOC
00095 #define realloc YYREALLOC
00096 #define calloc  YYCALLOC
00097 #define free    YYFREE
00098 
00099 #ifndef RIPPER
00100 static ID register_symid(ID, const char *, long, rb_encoding *);
00101 #define REGISTER_SYMID(id, name) register_symid(id, name, strlen(name), enc)
00102 #include "id.c"
00103 #endif
00104 
00105 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00106 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00107 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00108 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00109 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00110 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00111 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00112 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00113 
00114 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00115         (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00116          ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00117          ((id)&ID_SCOPE_MASK) == ID_CLASS))
00118 
00119 enum lex_state_e {
00120     EXPR_BEG,                   /* ignore newline, +/- is a sign. */
00121     EXPR_END,                   /* newline significant, +/- is an operator. */
00122     EXPR_ENDARG,                /* ditto, and unbound braces. */
00123     EXPR_ENDFN,                 /* ditto, and unbound braces. */
00124     EXPR_ARG,                   /* newline significant, +/- is an operator. */
00125     EXPR_CMDARG,                /* newline significant, +/- is an operator. */
00126     EXPR_MID,                   /* newline significant, +/- is an operator. */
00127     EXPR_FNAME,                 /* ignore newline, no reserved words. */
00128     EXPR_DOT,                   /* right after `.' or `::', no reserved words. */
00129     EXPR_CLASS,                 /* immediate after `class', no here document. */
00130     EXPR_VALUE,                 /* alike EXPR_BEG but label is disallowed. */
00131     EXPR_MAX_STATE
00132 };
00133 
00134 typedef VALUE stack_type;
00135 
00136 # define BITSTACK_PUSH(stack, n)        (stack = (stack<<1)|((n)&1))
00137 # define BITSTACK_POP(stack)    (stack = stack >> 1)
00138 # define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1))
00139 # define BITSTACK_SET_P(stack)  (stack&1)
00140 
00141 #define COND_PUSH(n)    BITSTACK_PUSH(cond_stack, n)
00142 #define COND_POP()      BITSTACK_POP(cond_stack)
00143 #define COND_LEXPOP()   BITSTACK_LEXPOP(cond_stack)
00144 #define COND_P()        BITSTACK_SET_P(cond_stack)
00145 
00146 #define CMDARG_PUSH(n)  BITSTACK_PUSH(cmdarg_stack, n)
00147 #define CMDARG_POP()    BITSTACK_POP(cmdarg_stack)
00148 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00149 #define CMDARG_P()      BITSTACK_SET_P(cmdarg_stack)
00150 
00151 struct vtable {
00152     ID *tbl;
00153     int pos;
00154     int capa;
00155     struct vtable *prev;
00156 };
00157 
00158 struct local_vars {
00159     struct vtable *args;
00160     struct vtable *vars;
00161     struct local_vars *prev;
00162 };
00163 
00164 #define DVARS_INHERIT ((void*)1)
00165 #define DVARS_TOPSCOPE NULL
00166 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00167 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00168 
00169 static int
00170 vtable_size(const struct vtable *tbl)
00171 {
00172     if (POINTER_P(tbl)) {
00173         return tbl->pos;
00174     }
00175     else {
00176         return 0;
00177     }
00178 }
00179 
00180 #define VTBL_DEBUG 0
00181 
00182 static struct vtable *
00183 vtable_alloc(struct vtable *prev)
00184 {
00185     struct vtable *tbl = ALLOC(struct vtable);
00186     tbl->pos = 0;
00187     tbl->capa = 8;
00188     tbl->tbl = ALLOC_N(ID, tbl->capa);
00189     tbl->prev = prev;
00190     if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00191     return tbl;
00192 }
00193 
00194 static void
00195 vtable_free(struct vtable *tbl)
00196 {
00197     if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00198     if (POINTER_P(tbl)) {
00199         if (tbl->tbl) {
00200             xfree(tbl->tbl);
00201         }
00202         xfree(tbl);
00203     }
00204 }
00205 
00206 static void
00207 vtable_add(struct vtable *tbl, ID id)
00208 {
00209     if (!POINTER_P(tbl)) {
00210         rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00211     }
00212     if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00213 
00214     if (tbl->pos == tbl->capa) {
00215         tbl->capa = tbl->capa * 2;
00216         REALLOC_N(tbl->tbl, ID, tbl->capa);
00217     }
00218     tbl->tbl[tbl->pos++] = id;
00219 }
00220 
00221 static int
00222 vtable_included(const struct vtable * tbl, ID id)
00223 {
00224     int i;
00225 
00226     if (POINTER_P(tbl)) {
00227         for (i = 0; i < tbl->pos; i++) {
00228             if (tbl->tbl[i] == id) {
00229                 return 1;
00230             }
00231         }
00232     }
00233     return 0;
00234 }
00235 
00236 
00237 #ifndef RIPPER
00238 typedef struct token_info {
00239     const char *token;
00240     int linenum;
00241     int column;
00242     int nonspc;
00243     struct token_info *next;
00244 } token_info;
00245 #endif
00246 
00247 /*
00248     Structure of Lexer Buffer:
00249 
00250  lex_pbeg      tokp         lex_p        lex_pend
00251     |           |              |            |
00252     |-----------+--------------+------------|
00253                 |<------------>|
00254                      token
00255 */
00256 struct parser_params {
00257     int is_ripper;
00258     NODE *heap;
00259 
00260     YYSTYPE *parser_yylval;
00261     VALUE eofp;
00262 
00263     NODE *parser_lex_strterm;
00264     enum lex_state_e parser_lex_state;
00265     stack_type parser_cond_stack;
00266     stack_type parser_cmdarg_stack;
00267     int parser_class_nest;
00268     int parser_paren_nest;
00269     int parser_lpar_beg;
00270     int parser_in_single;
00271     int parser_in_def;
00272     int parser_compile_for_eval;
00273     VALUE parser_cur_mid;
00274     int parser_in_defined;
00275     char *parser_tokenbuf;
00276     int parser_tokidx;
00277     int parser_toksiz;
00278     VALUE parser_lex_input;
00279     VALUE parser_lex_lastline;
00280     VALUE parser_lex_nextline;
00281     const char *parser_lex_pbeg;
00282     const char *parser_lex_p;
00283     const char *parser_lex_pend;
00284     int parser_heredoc_end;
00285     int parser_command_start;
00286     NODE *parser_deferred_nodes;
00287     long parser_lex_gets_ptr;
00288     VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00289     struct local_vars *parser_lvtbl;
00290     int parser_ruby__end__seen;
00291     int line_count;
00292     int has_shebang;
00293     char *parser_ruby_sourcefile; /* current source file */
00294     int parser_ruby_sourceline; /* current line no. */
00295     rb_encoding *enc;
00296     rb_encoding *utf8;
00297 
00298     int parser_yydebug;
00299 
00300 #ifndef RIPPER
00301     /* Ruby core only */
00302     NODE *parser_eval_tree_begin;
00303     NODE *parser_eval_tree;
00304     VALUE debug_lines;
00305     VALUE coverage;
00306     int nerr;
00307 
00308     token_info *parser_token_info;
00309 #else
00310     /* Ripper only */
00311     VALUE parser_ruby_sourcefile_string;
00312     const char *tokp;
00313     VALUE delayed;
00314     int delayed_line;
00315     int delayed_col;
00316 
00317     VALUE value;
00318     VALUE result;
00319     VALUE parsing_thread;
00320     int toplevel_p;
00321 #endif
00322 };
00323 
00324 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00325                     (parser->utf8 = rb_utf8_encoding()))
00326 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00327 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00328 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00329 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00330 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00331 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00332 
00333 #ifdef YYMALLOC
00334 void *rb_parser_malloc(struct parser_params *, size_t);
00335 void *rb_parser_realloc(struct parser_params *, void *, size_t);
00336 void *rb_parser_calloc(struct parser_params *, size_t, size_t);
00337 void rb_parser_free(struct parser_params *, void *);
00338 #endif
00339 
00340 static int parser_yyerror(struct parser_params*, const char*);
00341 #define yyerror(msg) parser_yyerror(parser, msg)
00342 
00343 #define YYLEX_PARAM parser
00344 
00345 #define lex_strterm             (parser->parser_lex_strterm)
00346 #define lex_state               (parser->parser_lex_state)
00347 #define cond_stack              (parser->parser_cond_stack)
00348 #define cmdarg_stack            (parser->parser_cmdarg_stack)
00349 #define class_nest              (parser->parser_class_nest)
00350 #define paren_nest              (parser->parser_paren_nest)
00351 #define lpar_beg                (parser->parser_lpar_beg)
00352 #define in_single               (parser->parser_in_single)
00353 #define in_def                  (parser->parser_in_def)
00354 #define compile_for_eval        (parser->parser_compile_for_eval)
00355 #define cur_mid                 (parser->parser_cur_mid)
00356 #define in_defined              (parser->parser_in_defined)
00357 #define tokenbuf                (parser->parser_tokenbuf)
00358 #define tokidx                  (parser->parser_tokidx)
00359 #define toksiz                  (parser->parser_toksiz)
00360 #define lex_input               (parser->parser_lex_input)
00361 #define lex_lastline            (parser->parser_lex_lastline)
00362 #define lex_nextline            (parser->parser_lex_nextline)
00363 #define lex_pbeg                (parser->parser_lex_pbeg)
00364 #define lex_p                   (parser->parser_lex_p)
00365 #define lex_pend                (parser->parser_lex_pend)
00366 #define heredoc_end             (parser->parser_heredoc_end)
00367 #define command_start           (parser->parser_command_start)
00368 #define deferred_nodes          (parser->parser_deferred_nodes)
00369 #define lex_gets_ptr            (parser->parser_lex_gets_ptr)
00370 #define lex_gets                (parser->parser_lex_gets)
00371 #define lvtbl                   (parser->parser_lvtbl)
00372 #define ruby__end__seen         (parser->parser_ruby__end__seen)
00373 #define ruby_sourceline         (parser->parser_ruby_sourceline)
00374 #define ruby_sourcefile         (parser->parser_ruby_sourcefile)
00375 #define yydebug                 (parser->parser_yydebug)
00376 #ifdef RIPPER
00377 #else
00378 #define ruby_eval_tree          (parser->parser_eval_tree)
00379 #define ruby_eval_tree_begin    (parser->parser_eval_tree_begin)
00380 #define ruby_debug_lines        (parser->debug_lines)
00381 #define ruby_coverage           (parser->coverage)
00382 #endif
00383 
00384 static int yylex(void*, void*);
00385 
00386 #ifndef RIPPER
00387 #define yyparse ruby_yyparse
00388 
00389 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00390 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, type, a1, a2, a3)
00391 
00392 static NODE *cond_gen(struct parser_params*,NODE*);
00393 #define cond(node) cond_gen(parser, node)
00394 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00395 #define logop(type,node1,node2) logop_gen(parser, type, node1, node2)
00396 
00397 static NODE *newline_node(NODE*);
00398 static void fixpos(NODE*,NODE*);
00399 
00400 static int value_expr_gen(struct parser_params*,NODE*);
00401 static void void_expr_gen(struct parser_params*,NODE*);
00402 static NODE *remove_begin(NODE*);
00403 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00404 #define void_expr0(node) void_expr_gen(parser, (node))
00405 #define void_expr(node) void_expr0((node) = remove_begin(node))
00406 static void void_stmts_gen(struct parser_params*,NODE*);
00407 #define void_stmts(node) void_stmts_gen(parser, node)
00408 static void reduce_nodes_gen(struct parser_params*,NODE**);
00409 #define reduce_nodes(n) reduce_nodes_gen(parser,n)
00410 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00411 #define block_dup_check(n1,n2) block_dup_check_gen(parser,n1,n2)
00412 
00413 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00414 #define block_append(h,t) block_append_gen(parser,h,t)
00415 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00416 #define list_append(l,i) list_append_gen(parser,l,i)
00417 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00418 #define list_concat(h,t) list_concat_gen(parser,h,t)
00419 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00420 #define arg_append(h,t) arg_append_gen(parser,h,t)
00421 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00422 #define arg_concat(h,t) arg_concat_gen(parser,h,t)
00423 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00424 #define literal_concat(h,t) literal_concat_gen(parser,h,t)
00425 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00426 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00427 #define new_evstr(n) new_evstr_gen(parser,n)
00428 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00429 #define evstr2dstr(n) evstr2dstr_gen(parser,n)
00430 static NODE *splat_array(NODE*);
00431 
00432 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00433 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1)
00434 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00435 #define call_uni_op(recv,id) call_uni_op_gen(parser, recv,id)
00436 
00437 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00438 #define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b)
00439 
00440 static NODE *negate_lit(NODE*);
00441 static NODE *ret_args_gen(struct parser_params*,NODE*);
00442 #define ret_args(node) ret_args_gen(parser, node)
00443 static NODE *arg_blk_pass(NODE*,NODE*);
00444 static NODE *new_yield_gen(struct parser_params*,NODE*);
00445 #define new_yield(node) new_yield_gen(parser, node)
00446 
00447 static NODE *gettable_gen(struct parser_params*,ID);
00448 #define gettable(id) gettable_gen(parser,id)
00449 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00450 #define assignable(id,node) assignable_gen(parser, id, node)
00451 
00452 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00453 #define aryset(node1,node2) aryset_gen(parser, node1, node2)
00454 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00455 #define attrset(node,id) attrset_gen(parser, node, id)
00456 
00457 static void rb_backref_error_gen(struct parser_params*,NODE*);
00458 #define rb_backref_error(n) rb_backref_error_gen(parser,n)
00459 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00460 #define node_assign(node1, node2) node_assign_gen(parser, node1, node2)
00461 
00462 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00463 #define match_op(node1,node2) match_op_gen(parser, node1, node2)
00464 
00465 static ID  *local_tbl_gen(struct parser_params*);
00466 #define local_tbl() local_tbl_gen(parser)
00467 
00468 static void fixup_nodes(NODE **);
00469 
00470 extern int rb_dvar_defined(ID);
00471 extern int rb_local_defined(ID);
00472 extern int rb_parse_in_eval(void);
00473 extern int rb_parse_in_main(void);
00474 
00475 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00476 #define reg_compile(str,options) reg_compile_gen(parser, str, options)
00477 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00478 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, str, options)
00479 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00480 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, str, options)
00481 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00482 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,regexp,match)
00483 
00484 #define get_id(id) (id)
00485 #define get_value(val) (val)
00486 #else
00487 #define remove_begin(node) (node)
00488 #define rb_dvar_defined(id) 0
00489 #define rb_local_defined(id) 0
00490 static ID ripper_get_id(VALUE);
00491 #define get_id(id) ripper_get_id(id)
00492 static VALUE ripper_get_value(VALUE);
00493 #define get_value(val) ripper_get_value(val)
00494 static VALUE assignable_gen(struct parser_params*,VALUE);
00495 #define assignable(lhs,node) assignable_gen(parser, lhs)
00496 #endif /* !RIPPER */
00497 
00498 static ID formal_argument_gen(struct parser_params*, ID);
00499 #define formal_argument(id) formal_argument_gen(parser, id)
00500 static ID shadowing_lvar_gen(struct parser_params*,ID);
00501 #define shadowing_lvar(name) shadowing_lvar_gen(parser, name)
00502 static void new_bv_gen(struct parser_params*,ID);
00503 #define new_bv(id) new_bv_gen(parser, id)
00504 
00505 static void local_push_gen(struct parser_params*,int);
00506 #define local_push(top) local_push_gen(parser,top)
00507 static void local_pop_gen(struct parser_params*);
00508 #define local_pop() local_pop_gen(parser)
00509 static int local_var_gen(struct parser_params*, ID);
00510 #define local_var(id) local_var_gen(parser, id);
00511 static int arg_var_gen(struct parser_params*, ID);
00512 #define arg_var(id) arg_var_gen(parser, id)
00513 static int  local_id_gen(struct parser_params*, ID);
00514 #define local_id(id) local_id_gen(parser, id)
00515 static ID   internal_id_gen(struct parser_params*);
00516 #define internal_id() internal_id_gen(parser)
00517 
00518 static const struct vtable *dyna_push_gen(struct parser_params *);
00519 #define dyna_push() dyna_push_gen(parser)
00520 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00521 #define dyna_pop(node) dyna_pop_gen(parser, node)
00522 static int dyna_in_block_gen(struct parser_params*);
00523 #define dyna_in_block() dyna_in_block_gen(parser)
00524 #define dyna_var(id) local_var(id)
00525 static int dvar_defined_gen(struct parser_params*,ID);
00526 #define dvar_defined(id) dvar_defined_gen(parser, id)
00527 static int dvar_curr_gen(struct parser_params*,ID);
00528 #define dvar_curr(id) dvar_curr_gen(parser, id)
00529 
00530 static int lvar_defined_gen(struct parser_params*, ID);
00531 #define lvar_defined(id) lvar_defined_gen(parser, id)
00532 
00533 #define RE_OPTION_ONCE (1<<16)
00534 #define RE_OPTION_ENCODING_SHIFT 8
00535 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00536 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00537 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00538 #define RE_OPTION_MASK  0xff
00539 #define RE_OPTION_ARG_ENCODING_NONE 32
00540 
00541 #define NODE_STRTERM NODE_ZARRAY        /* nothing to gc */
00542 #define NODE_HEREDOC NODE_ARRAY         /* 1, 3 to gc */
00543 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00544 #define nd_func u1.id
00545 #if SIZEOF_SHORT == 2
00546 #define nd_term(node) ((signed short)(node)->u2.id)
00547 #else
00548 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00549 #endif
00550 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00551 #define nd_nest u3.cnt
00552 
00553 /****** Ripper *******/
00554 
00555 #ifdef RIPPER
00556 #define RIPPER_VERSION "0.1.0"
00557 
00558 #include "eventids1.c"
00559 #include "eventids2.c"
00560 static ID ripper_id_gets;
00561 
00562 static VALUE ripper_dispatch0(struct parser_params*,ID);
00563 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00564 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00565 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00566 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00567 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00568 
00569 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00570 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), a)
00571 #define dispatch2(n,a,b)        ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), a, b)
00572 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), a, b, c)
00573 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d)
00574 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d, e)
00575 
00576 #define yyparse ripper_yyparse
00577 
00578 #define ripper_intern(s) ID2SYM(rb_intern(s))
00579 static VALUE ripper_id2sym(ID);
00580 #ifdef __GNUC__
00581 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00582                            ID2SYM(id) : ripper_id2sym(id))
00583 #endif
00584 
00585 #define arg_new() dispatch0(args_new)
00586 #define arg_add(l,a) dispatch2(args_add, l, a)
00587 #define arg_add_star(l,a) dispatch2(args_add_star, l, a)
00588 #define arg_add_block(l,b) dispatch2(args_add_block, l, b)
00589 #define arg_add_optblock(l,b) ((b)==Qundef? l : dispatch2(args_add_block, l, b))
00590 #define bare_assoc(v) dispatch1(bare_assoc_hash, v)
00591 #define arg_add_assocs(l,b) arg_add(l, bare_assoc(b))
00592 
00593 #define args2mrhs(a) dispatch1(mrhs_new_from_args, a)
00594 #define mrhs_new() dispatch0(mrhs_new)
00595 #define mrhs_add(l,a) dispatch2(mrhs_add, l, a)
00596 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, l, a)
00597 
00598 #define mlhs_new() dispatch0(mlhs_new)
00599 #define mlhs_add(l,a) dispatch2(mlhs_add, l, a)
00600 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, l, a)
00601 
00602 #define params_new(pars, opts, rest, pars2, blk) \
00603         dispatch5(params, pars, opts, rest, pars2, blk)
00604 
00605 #define blockvar_new(p,v) dispatch2(block_var, p, v)
00606 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, l, a)
00607 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, l, a)
00608 
00609 #define method_optarg(m,a) ((a)==Qundef ? m : dispatch2(method_add_arg,m,a))
00610 #define method_arg(m,a) dispatch2(method_add_arg,m,a)
00611 #define method_add_block(m,b) dispatch2(method_add_block, m, b)
00612 
00613 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00614 
00615 #define FIXME 0
00616 
00617 #endif /* RIPPER */
00618 
00619 #ifndef RIPPER
00620 # define ifndef_ripper(x) x
00621 #else
00622 # define ifndef_ripper(x)
00623 #endif
00624 
00625 #ifndef RIPPER
00626 # define rb_warn0(fmt)    rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt)
00627 # define rb_warnI(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00628 # define rb_warnS(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00629 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt)
00630 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt, a)
00631 #else
00632 # define rb_warn0(fmt)    ripper_warn0(parser, fmt)
00633 # define rb_warnI(fmt,a)  ripper_warnI(parser, fmt, a)
00634 # define rb_warnS(fmt,a)  ripper_warnS(parser, fmt, a)
00635 # define rb_warning0(fmt) ripper_warning0(parser, fmt)
00636 # define rb_warningS(fmt,a) ripper_warningS(parser, fmt, a)
00637 static void ripper_warn0(struct parser_params*, const char*);
00638 static void ripper_warnI(struct parser_params*, const char*, int);
00639 #if 0
00640 static void ripper_warnS(struct parser_params*, const char*, const char*);
00641 #endif
00642 static void ripper_warning0(struct parser_params*, const char*);
00643 static void ripper_warningS(struct parser_params*, const char*, const char*);
00644 #endif
00645 
00646 #ifdef RIPPER
00647 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00648 # define rb_compile_error ripper_compile_error
00649 # define compile_error ripper_compile_error
00650 # define PARSER_ARG parser,
00651 #else
00652 # define compile_error parser->nerr++,rb_compile_error
00653 # define PARSER_ARG ruby_sourcefile, ruby_sourceline,
00654 #endif
00655 
00656 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
00657    for instance).  This is too low for Ruby to parse some files, such as
00658    date/format.rb, therefore bump the value up to at least Bison's default. */
00659 #ifdef OLD_YACC
00660 #ifndef YYMAXDEPTH
00661 #define YYMAXDEPTH 10000
00662 #endif
00663 #endif
00664 
00665 #ifndef RIPPER
00666 static void token_info_push(struct parser_params*, const char *token);
00667 static void token_info_pop(struct parser_params*, const char *token);
00668 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, token) : (void)0)
00669 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, token) : (void)0)
00670 #else
00671 #define token_info_push(token) /* nothing */
00672 #define token_info_pop(token) /* nothing */
00673 #endif
00674 
00675 
00676 /* Line 189 of yacc.c  */
00677 #line 678 "parse.c"
00678 
00679 /* Enabling traces.  */
00680 #ifndef YYDEBUG
00681 # define YYDEBUG 0
00682 #endif
00683 
00684 /* Enabling verbose error messages.  */
00685 #ifdef YYERROR_VERBOSE
00686 # undef YYERROR_VERBOSE
00687 # define YYERROR_VERBOSE 1
00688 #else
00689 # define YYERROR_VERBOSE 0
00690 #endif
00691 
00692 /* Enabling the token table.  */
00693 #ifndef YYTOKEN_TABLE
00694 # define YYTOKEN_TABLE 0
00695 #endif
00696 
00697 
00698 /* Tokens.  */
00699 #ifndef YYTOKENTYPE
00700 # define YYTOKENTYPE
00701    /* Put the tokens into the symbol table, so that GDB and other debuggers
00702       know about them.  */
00703    enum yytokentype {
00704      keyword_class = 258,
00705      keyword_module = 259,
00706      keyword_def = 260,
00707      keyword_undef = 261,
00708      keyword_begin = 262,
00709      keyword_rescue = 263,
00710      keyword_ensure = 264,
00711      keyword_end = 265,
00712      keyword_if = 266,
00713      keyword_unless = 267,
00714      keyword_then = 268,
00715      keyword_elsif = 269,
00716      keyword_else = 270,
00717      keyword_case = 271,
00718      keyword_when = 272,
00719      keyword_while = 273,
00720      keyword_until = 274,
00721      keyword_for = 275,
00722      keyword_break = 276,
00723      keyword_next = 277,
00724      keyword_redo = 278,
00725      keyword_retry = 279,
00726      keyword_in = 280,
00727      keyword_do = 281,
00728      keyword_do_cond = 282,
00729      keyword_do_block = 283,
00730      keyword_do_LAMBDA = 284,
00731      keyword_return = 285,
00732      keyword_yield = 286,
00733      keyword_super = 287,
00734      keyword_self = 288,
00735      keyword_nil = 289,
00736      keyword_true = 290,
00737      keyword_false = 291,
00738      keyword_and = 292,
00739      keyword_or = 293,
00740      keyword_not = 294,
00741      modifier_if = 295,
00742      modifier_unless = 296,
00743      modifier_while = 297,
00744      modifier_until = 298,
00745      modifier_rescue = 299,
00746      keyword_alias = 300,
00747      keyword_defined = 301,
00748      keyword_BEGIN = 302,
00749      keyword_END = 303,
00750      keyword__LINE__ = 304,
00751      keyword__FILE__ = 305,
00752      keyword__ENCODING__ = 306,
00753      tIDENTIFIER = 307,
00754      tFID = 308,
00755      tGVAR = 309,
00756      tIVAR = 310,
00757      tCONSTANT = 311,
00758      tCVAR = 312,
00759      tLABEL = 313,
00760      tINTEGER = 314,
00761      tFLOAT = 315,
00762      tSTRING_CONTENT = 316,
00763      tCHAR = 317,
00764      tNTH_REF = 318,
00765      tBACK_REF = 319,
00766      tREGEXP_END = 320,
00767      tUPLUS = 321,
00768      tUMINUS = 322,
00769      tPOW = 323,
00770      tCMP = 324,
00771      tEQ = 325,
00772      tEQQ = 326,
00773      tNEQ = 327,
00774      tGEQ = 328,
00775      tLEQ = 329,
00776      tANDOP = 330,
00777      tOROP = 331,
00778      tMATCH = 332,
00779      tNMATCH = 333,
00780      tDOT2 = 334,
00781      tDOT3 = 335,
00782      tAREF = 336,
00783      tASET = 337,
00784      tLSHFT = 338,
00785      tRSHFT = 339,
00786      tCOLON2 = 340,
00787      tCOLON3 = 341,
00788      tOP_ASGN = 342,
00789      tASSOC = 343,
00790      tLPAREN = 344,
00791      tLPAREN_ARG = 345,
00792      tRPAREN = 346,
00793      tLBRACK = 347,
00794      tLBRACE = 348,
00795      tLBRACE_ARG = 349,
00796      tSTAR = 350,
00797      tAMPER = 351,
00798      tLAMBDA = 352,
00799      tSYMBEG = 353,
00800      tSTRING_BEG = 354,
00801      tXSTRING_BEG = 355,
00802      tREGEXP_BEG = 356,
00803      tWORDS_BEG = 357,
00804      tQWORDS_BEG = 358,
00805      tSTRING_DBEG = 359,
00806      tSTRING_DVAR = 360,
00807      tSTRING_END = 361,
00808      tLAMBEG = 362,
00809      tLOWEST = 363,
00810      tUMINUS_NUM = 364,
00811      idNULL = 365,
00812      idRespond_to = 366,
00813      idIFUNC = 367,
00814      idCFUNC = 368,
00815      id_core_set_method_alias = 369,
00816      id_core_set_variable_alias = 370,
00817      id_core_undef_method = 371,
00818      id_core_define_method = 372,
00819      id_core_define_singleton_method = 373,
00820      id_core_set_postexe = 374,
00821      tLAST_TOKEN = 375
00822    };
00823 #endif
00824 
00825 
00826 
00827 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00828 typedef union YYSTYPE
00829 {
00830 
00831 /* Line 214 of yacc.c  */
00832 #line 620 "parse.y"
00833 
00834     VALUE val;
00835     NODE *node;
00836     ID id;
00837     int num;
00838     const struct vtable *vars;
00839 
00840 
00841 
00842 /* Line 214 of yacc.c  */
00843 #line 844 "parse.c"
00844 } YYSTYPE;
00845 # define YYSTYPE_IS_TRIVIAL 1
00846 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00847 # define YYSTYPE_IS_DECLARED 1
00848 #endif
00849 
00850 
00851 /* Copy the second part of user declarations.  */
00852 
00853 
00854 /* Line 264 of yacc.c  */
00855 #line 856 "parse.c"
00856 
00857 #ifdef short
00858 # undef short
00859 #endif
00860 
00861 #ifdef YYTYPE_UINT8
00862 typedef YYTYPE_UINT8 yytype_uint8;
00863 #else
00864 typedef unsigned char yytype_uint8;
00865 #endif
00866 
00867 #ifdef YYTYPE_INT8
00868 typedef YYTYPE_INT8 yytype_int8;
00869 #elif (defined __STDC__ || defined __C99__FUNC__ \
00870      || defined __cplusplus || defined _MSC_VER)
00871 typedef signed char yytype_int8;
00872 #else
00873 typedef short int yytype_int8;
00874 #endif
00875 
00876 #ifdef YYTYPE_UINT16
00877 typedef YYTYPE_UINT16 yytype_uint16;
00878 #else
00879 typedef unsigned short int yytype_uint16;
00880 #endif
00881 
00882 #ifdef YYTYPE_INT16
00883 typedef YYTYPE_INT16 yytype_int16;
00884 #else
00885 typedef short int yytype_int16;
00886 #endif
00887 
00888 #ifndef YYSIZE_T
00889 # ifdef __SIZE_TYPE__
00890 #  define YYSIZE_T __SIZE_TYPE__
00891 # elif defined size_t
00892 #  define YYSIZE_T size_t
00893 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00894      || defined __cplusplus || defined _MSC_VER)
00895 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00896 #  define YYSIZE_T size_t
00897 # else
00898 #  define YYSIZE_T unsigned int
00899 # endif
00900 #endif
00901 
00902 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00903 
00904 #ifndef YY_
00905 # if defined YYENABLE_NLS && YYENABLE_NLS
00906 #  if ENABLE_NLS
00907 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
00908 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
00909 #  endif
00910 # endif
00911 # ifndef YY_
00912 #  define YY_(msgid) msgid
00913 # endif
00914 #endif
00915 
00916 /* Suppress unused-variable warnings by "using" E.  */
00917 #if ! defined lint || defined __GNUC__
00918 # define YYUSE(e) ((void) (e))
00919 #else
00920 # define YYUSE(e) /* empty */
00921 #endif
00922 
00923 /* Identity function, used to suppress warnings about constant conditions.  */
00924 #ifndef lint
00925 # define YYID(n) (n)
00926 #else
00927 #if (defined __STDC__ || defined __C99__FUNC__ \
00928      || defined __cplusplus || defined _MSC_VER)
00929 static int
00930 YYID (int yyi)
00931 #else
00932 static int
00933 YYID (yyi)
00934     int yyi;
00935 #endif
00936 {
00937   return yyi;
00938 }
00939 #endif
00940 
00941 #if ! defined yyoverflow || YYERROR_VERBOSE
00942 
00943 /* The parser invokes alloca or malloc; define the necessary symbols.  */
00944 
00945 # ifdef YYSTACK_USE_ALLOCA
00946 #  if YYSTACK_USE_ALLOCA
00947 #   ifdef __GNUC__
00948 #    define YYSTACK_ALLOC __builtin_alloca
00949 #   elif defined __BUILTIN_VA_ARG_INCR
00950 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
00951 #   elif defined _AIX
00952 #    define YYSTACK_ALLOC __alloca
00953 #   elif defined _MSC_VER
00954 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
00955 #    define alloca _alloca
00956 #   else
00957 #    define YYSTACK_ALLOC alloca
00958 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00959      || defined __cplusplus || defined _MSC_VER)
00960 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00961 #     ifndef _STDLIB_H
00962 #      define _STDLIB_H 1
00963 #     endif
00964 #    endif
00965 #   endif
00966 #  endif
00967 # endif
00968 
00969 # ifdef YYSTACK_ALLOC
00970    /* Pacify GCC's `empty if-body' warning.  */
00971 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
00972 #  ifndef YYSTACK_ALLOC_MAXIMUM
00973     /* The OS might guarantee only one guard page at the bottom of the stack,
00974        and a page size can be as small as 4096 bytes.  So we cannot safely
00975        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
00976        to allow for a few compiler-allocated temporary stack slots.  */
00977 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
00978 #  endif
00979 # else
00980 #  define YYSTACK_ALLOC YYMALLOC
00981 #  define YYSTACK_FREE YYFREE
00982 #  ifndef YYSTACK_ALLOC_MAXIMUM
00983 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00984 #  endif
00985 #  if (defined __cplusplus && ! defined _STDLIB_H \
00986        && ! ((defined YYMALLOC || defined malloc) \
00987              && (defined YYFREE || defined free)))
00988 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00989 #   ifndef _STDLIB_H
00990 #    define _STDLIB_H 1
00991 #   endif
00992 #  endif
00993 #  ifndef YYMALLOC
00994 #   define YYMALLOC malloc
00995 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00996      || defined __cplusplus || defined _MSC_VER)
00997 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
00998 #   endif
00999 #  endif
01000 #  ifndef YYFREE
01001 #   define YYFREE free
01002 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01003      || defined __cplusplus || defined _MSC_VER)
01004 void free (void *); /* INFRINGES ON USER NAME SPACE */
01005 #   endif
01006 #  endif
01007 # endif
01008 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
01009 
01010 
01011 #if (! defined yyoverflow \
01012      && (! defined __cplusplus \
01013          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01014 
01015 /* A type that is properly aligned for any stack member.  */
01016 union yyalloc
01017 {
01018   yytype_int16 yyss_alloc;
01019   YYSTYPE yyvs_alloc;
01020 };
01021 
01022 /* The size of the maximum gap between one aligned stack and the next.  */
01023 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01024 
01025 /* The size of an array large to enough to hold all stacks, each with
01026    N elements.  */
01027 # define YYSTACK_BYTES(N) \
01028      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01029       + YYSTACK_GAP_MAXIMUM)
01030 
01031 /* Copy COUNT objects from FROM to TO.  The source and destination do
01032    not overlap.  */
01033 # ifndef YYCOPY
01034 #  if defined __GNUC__ && 1 < __GNUC__
01035 #   define YYCOPY(To, From, Count) \
01036       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01037 #  else
01038 #   define YYCOPY(To, From, Count)              \
01039       do                                        \
01040         {                                       \
01041           YYSIZE_T yyi;                         \
01042           for (yyi = 0; yyi < (Count); yyi++)   \
01043             (To)[yyi] = (From)[yyi];            \
01044         }                                       \
01045       while (YYID (0))
01046 #  endif
01047 # endif
01048 
01049 /* Relocate STACK from its old location to the new one.  The
01050    local variables YYSIZE and YYSTACKSIZE give the old and new number of
01051    elements in the stack, and YYPTR gives the new location of the
01052    stack.  Advance YYPTR to a properly aligned location for the next
01053    stack.  */
01054 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
01055     do                                                                  \
01056       {                                                                 \
01057         YYSIZE_T yynewbytes;                                            \
01058         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
01059         Stack = &yyptr->Stack_alloc;                                    \
01060         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01061         yyptr += yynewbytes / sizeof (*yyptr);                          \
01062       }                                                                 \
01063     while (YYID (0))
01064 
01065 #endif
01066 
01067 /* YYFINAL -- State number of the termination state.  */
01068 #define YYFINAL  3
01069 /* YYLAST -- Last index in YYTABLE.  */
01070 #define YYLAST   10410
01071 
01072 /* YYNTOKENS -- Number of terminals.  */
01073 #define YYNTOKENS  148
01074 /* YYNNTS -- Number of nonterminals.  */
01075 #define YYNNTS  172
01076 /* YYNRULES -- Number of rules.  */
01077 #define YYNRULES  565
01078 /* YYNRULES -- Number of states.  */
01079 #define YYNSTATES  975
01080 
01081 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
01082 #define YYUNDEFTOK  2
01083 #define YYMAXUTOK   375
01084 
01085 #define YYTRANSLATE(YYX)                                                \
01086   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01087 
01088 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
01089 static const yytype_uint8 yytranslate[] =
01090 {
01091        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01092      147,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01093        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01094        2,     2,   146,   123,     2,     2,     2,   121,   116,     2,
01095      142,   143,   119,   117,   140,   118,   139,   120,     2,     2,
01096        2,     2,     2,     2,     2,     2,     2,     2,   111,   145,
01097      113,   109,   112,   110,     2,     2,     2,     2,     2,     2,
01098        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01099        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01100        2,   138,     2,   144,   115,     2,   141,     2,     2,     2,
01101        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01102        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01103        2,     2,     2,   136,   114,   137,   124,     2,     2,     2,
01104        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01105        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01106        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01107        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01108        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01109        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01110        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01111        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01112        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01113        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01114        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01115        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01116        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
01117        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
01118       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
01119       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
01120       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
01121       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
01122       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
01123       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
01124       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
01125       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
01126       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
01127      105,   106,   107,   108,   122,   125,   126,   127,   128,   129,
01128      130,   131,   132,   133,   134,   135
01129 };
01130 
01131 #if YYDEBUG
01132 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
01133    YYRHS.  */
01134 static const yytype_uint16 yyprhs[] =
01135 {
01136        0,     0,     3,     4,     7,    10,    12,    14,    18,    21,
01137       23,    24,    30,    35,    38,    40,    42,    46,    49,    50,
01138       55,    59,    63,    67,    70,    74,    78,    82,    86,    90,
01139       95,    99,   103,   107,   114,   120,   126,   132,   138,   142,
01140      146,   150,   154,   156,   158,   162,   166,   170,   173,   175,
01141      177,   179,   181,   183,   188,   193,   194,   200,   203,   207,
01142      212,   218,   223,   229,   232,   235,   238,   241,   244,   246,
01143      250,   252,   256,   258,   261,   265,   271,   274,   279,   282,
01144      287,   289,   293,   295,   299,   302,   306,   308,   312,   314,
01145      319,   323,   327,   331,   335,   338,   340,   342,   347,   351,
01146      355,   359,   363,   366,   368,   370,   372,   375,   377,   381,
01147      383,   385,   387,   389,   391,   393,   395,   397,   399,   401,
01148      402,   407,   409,   411,   413,   415,   417,   419,   421,   423,
01149      425,   427,   429,   431,   433,   435,   437,   439,   441,   443,
01150      445,   447,   449,   451,   453,   455,   457,   459,   461,   463,
01151      465,   467,   469,   471,   473,   475,   477,   479,   481,   483,
01152      485,   487,   489,   491,   493,   495,   497,   499,   501,   503,
01153      505,   507,   509,   511,   513,   515,   517,   519,   521,   523,
01154      525,   527,   529,   531,   533,   535,   537,   539,   541,   543,
01155      545,   547,   551,   557,   561,   567,   574,   580,   586,   592,
01156      598,   603,   607,   611,   615,   619,   623,   627,   631,   635,
01157      639,   644,   649,   652,   655,   659,   663,   667,   671,   675,
01158      679,   683,   687,   691,   695,   699,   703,   707,   710,   713,
01159      717,   721,   725,   729,   730,   735,   742,   744,   746,   748,
01160      751,   756,   759,   763,   765,   767,   769,   771,   773,   776,
01161      779,   784,   786,   787,   790,   793,   796,   798,   800,   802,
01162      805,   809,   814,   818,   823,   826,   828,   830,   832,   834,
01163      836,   838,   840,   842,   844,   845,   850,   851,   856,   860,
01164      864,   867,   871,   875,   877,   882,   886,   888,   889,   896,
01165      901,   905,   908,   910,   913,   916,   923,   930,   931,   932,
01166      940,   941,   942,   950,   956,   961,   962,   963,   973,   974,
01167      981,   982,   983,   992,   993,   999,  1000,  1007,  1008,  1009,
01168     1019,  1021,  1023,  1025,  1027,  1029,  1031,  1033,  1035,  1037,
01169     1039,  1041,  1043,  1045,  1047,  1049,  1051,  1053,  1055,  1058,
01170     1060,  1062,  1064,  1070,  1072,  1075,  1077,  1079,  1081,  1085,
01171     1087,  1091,  1093,  1098,  1105,  1109,  1115,  1118,  1123,  1125,
01172     1129,  1136,  1145,  1150,  1157,  1162,  1165,  1172,  1175,  1180,
01173     1187,  1190,  1195,  1198,  1203,  1205,  1207,  1209,  1213,  1215,
01174     1220,  1222,  1225,  1227,  1231,  1233,  1235,  1236,  1237,  1242,
01175     1247,  1249,  1253,  1257,  1258,  1264,  1267,  1272,  1277,  1280,
01176     1285,  1290,  1294,  1298,  1302,  1305,  1307,  1312,  1313,  1319,
01177     1320,  1326,  1332,  1334,  1336,  1343,  1345,  1347,  1349,  1351,
01178     1354,  1356,  1359,  1361,  1363,  1365,  1367,  1369,  1371,  1373,
01179     1376,  1380,  1384,  1388,  1392,  1396,  1397,  1401,  1403,  1406,
01180     1410,  1414,  1415,  1419,  1420,  1423,  1424,  1427,  1428,  1431,
01181     1433,  1434,  1438,  1439,  1440,  1446,  1448,  1450,  1452,  1454,
01182     1457,  1459,  1461,  1463,  1465,  1469,  1471,  1473,  1476,  1479,
01183     1481,  1483,  1485,  1487,  1489,  1491,  1493,  1495,  1497,  1499,
01184     1501,  1503,  1505,  1507,  1509,  1511,  1513,  1514,  1519,  1522,
01185     1526,  1529,  1536,  1545,  1550,  1557,  1562,  1569,  1572,  1577,
01186     1584,  1587,  1592,  1595,  1600,  1602,  1603,  1605,  1607,  1609,
01187     1611,  1613,  1615,  1617,  1621,  1623,  1627,  1631,  1635,  1637,
01188     1641,  1643,  1647,  1649,  1651,  1654,  1656,  1658,  1660,  1663,
01189     1666,  1668,  1670,  1671,  1676,  1678,  1681,  1683,  1687,  1691,
01190     1694,  1696,  1698,  1700,  1702,  1704,  1706,  1708,  1710,  1712,
01191     1714,  1716,  1718,  1719,  1721,  1722,  1724,  1727,  1730,  1731,
01192     1733,  1735,  1737,  1739,  1741,  1744
01193 };
01194 
01195 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
01196 static const yytype_int16 yyrhs[] =
01197 {
01198      149,     0,    -1,    -1,   150,   151,    -1,   152,   312,    -1,
01199      319,    -1,   153,    -1,   152,   318,   153,    -1,     1,   153,
01200       -1,   158,    -1,    -1,    47,   154,   136,   151,   137,    -1,
01201      156,   255,   230,   258,    -1,   157,   312,    -1,   319,    -1,
01202      158,    -1,   157,   318,   158,    -1,     1,   158,    -1,    -1,
01203       45,   179,   159,   179,    -1,    45,    54,    54,    -1,    45,
01204       54,    64,    -1,    45,    54,    63,    -1,     6,   180,    -1,
01205      158,    40,   161,    -1,   158,    41,   161,    -1,   158,    42,
01206      161,    -1,   158,    43,   161,    -1,   158,    44,   158,    -1,
01207       48,   136,   156,   137,    -1,   174,   109,   162,    -1,   167,
01208      109,   162,    -1,   284,    87,   162,    -1,   215,   138,   190,
01209      315,    87,   162,    -1,   215,   139,    52,    87,   162,    -1,
01210      215,   139,    56,    87,   162,    -1,   215,    85,    56,    87,
01211      162,    -1,   215,    85,    52,    87,   162,    -1,   285,    87,
01212      162,    -1,   174,   109,   197,    -1,   167,   109,   186,    -1,
01213      167,   109,   197,    -1,   160,    -1,   162,    -1,   160,    37,
01214      160,    -1,   160,    38,   160,    -1,    39,   313,   160,    -1,
01215      123,   162,    -1,   184,    -1,   160,    -1,   166,    -1,   163,
01216       -1,   248,    -1,   248,   139,   309,   192,    -1,   248,    85,
01217      309,   192,    -1,    -1,    94,   165,   236,   156,   137,    -1,
01218      308,   192,    -1,   308,   192,   164,    -1,   215,   139,   309,
01219      192,    -1,   215,   139,   309,   192,   164,    -1,   215,    85,
01220      309,   192,    -1,   215,    85,   309,   192,   164,    -1,    32,
01221      192,    -1,    31,   192,    -1,    30,   191,    -1,    21,   191,
01222       -1,    22,   191,    -1,   169,    -1,    89,   168,   314,    -1,
01223      169,    -1,    89,   168,   314,    -1,   171,    -1,   171,   170,
01224       -1,   171,    95,   173,    -1,   171,    95,   173,   140,   172,
01225       -1,   171,    95,    -1,   171,    95,   140,   172,    -1,    95,
01226      173,    -1,    95,   173,   140,   172,    -1,    95,    -1,    95,
01227      140,   172,    -1,   173,    -1,    89,   168,   314,    -1,   170,
01228      140,    -1,   171,   170,   140,    -1,   170,    -1,   172,   140,
01229      170,    -1,   282,    -1,   215,   138,   190,   315,    -1,   215,
01230      139,    52,    -1,   215,    85,    52,    -1,   215,   139,    56,
01231       -1,   215,    85,    56,    -1,    86,    56,    -1,   285,    -1,
01232      282,    -1,   215,   138,   190,   315,    -1,   215,   139,    52,
01233       -1,   215,    85,    52,    -1,   215,   139,    56,    -1,   215,
01234       85,    56,    -1,    86,    56,    -1,   285,    -1,    52,    -1,
01235       56,    -1,    86,   175,    -1,   175,    -1,   215,    85,   175,
01236       -1,    52,    -1,    56,    -1,    53,    -1,   182,    -1,   183,
01237       -1,   177,    -1,   278,    -1,   178,    -1,   280,    -1,   179,
01238       -1,    -1,   180,   140,   181,   179,    -1,   114,    -1,   115,
01239       -1,   116,    -1,    69,    -1,    70,    -1,    71,    -1,    77,
01240       -1,    78,    -1,   112,    -1,    73,    -1,   113,    -1,    74,
01241       -1,    72,    -1,    83,    -1,    84,    -1,   117,    -1,   118,
01242       -1,   119,    -1,    95,    -1,   120,    -1,   121,    -1,    68,
01243       -1,   123,    -1,   124,    -1,    66,    -1,    67,    -1,    81,
01244       -1,    82,    -1,   141,    -1,    49,    -1,    50,    -1,    51,
01245       -1,    47,    -1,    48,    -1,    45,    -1,    37,    -1,     7,
01246       -1,    21,    -1,    16,    -1,     3,    -1,     5,    -1,    46,
01247       -1,    26,    -1,    15,    -1,    14,    -1,    10,    -1,     9,
01248       -1,    36,    -1,    20,    -1,    25,    -1,     4,    -1,    22,
01249       -1,    34,    -1,    39,    -1,    38,    -1,    23,    -1,     8,
01250       -1,    24,    -1,    30,    -1,    33,    -1,    32,    -1,    13,
01251       -1,    35,    -1,     6,    -1,    17,    -1,    31,    -1,    11,
01252       -1,    12,    -1,    18,    -1,    19,    -1,   174,   109,   184,
01253       -1,   174,   109,   184,    44,   184,    -1,   284,    87,   184,
01254       -1,   284,    87,   184,    44,   184,    -1,   215,   138,   190,
01255      315,    87,   184,    -1,   215,   139,    52,    87,   184,    -1,
01256      215,   139,    56,    87,   184,    -1,   215,    85,    52,    87,
01257      184,    -1,   215,    85,    56,    87,   184,    -1,    86,    56,
01258       87,   184,    -1,   285,    87,   184,    -1,   184,    79,   184,
01259       -1,   184,    80,   184,    -1,   184,   117,   184,    -1,   184,
01260      118,   184,    -1,   184,   119,   184,    -1,   184,   120,   184,
01261       -1,   184,   121,   184,    -1,   184,    68,   184,    -1,   122,
01262       59,    68,   184,    -1,   122,    60,    68,   184,    -1,    66,
01263      184,    -1,    67,   184,    -1,   184,   114,   184,    -1,   184,
01264      115,   184,    -1,   184,   116,   184,    -1,   184,    69,   184,
01265       -1,   184,   112,   184,    -1,   184,    73,   184,    -1,   184,
01266      113,   184,    -1,   184,    74,   184,    -1,   184,    70,   184,
01267       -1,   184,    71,   184,    -1,   184,    72,   184,    -1,   184,
01268       77,   184,    -1,   184,    78,   184,    -1,   123,   184,    -1,
01269      124,   184,    -1,   184,    83,   184,    -1,   184,    84,   184,
01270       -1,   184,    75,   184,    -1,   184,    76,   184,    -1,    -1,
01271       46,   313,   185,   184,    -1,   184,   110,   184,   313,   111,
01272      184,    -1,   198,    -1,   184,    -1,   319,    -1,   196,   316,
01273       -1,   196,   140,   306,   316,    -1,   306,   316,    -1,   142,
01274      190,   314,    -1,   319,    -1,   188,    -1,   319,    -1,   191,
01275       -1,   166,    -1,   196,   195,    -1,   306,   195,    -1,   196,
01276      140,   306,   195,    -1,   194,    -1,    -1,   193,   191,    -1,
01277       96,   186,    -1,   140,   194,    -1,   140,    -1,   319,    -1,
01278      186,    -1,    95,   186,    -1,   196,   140,   186,    -1,   196,
01279      140,    95,   186,    -1,   196,   140,   186,    -1,   196,   140,
01280       95,   186,    -1,    95,   186,    -1,   259,    -1,   260,    -1,
01281      263,    -1,   264,    -1,   265,    -1,   268,    -1,   283,    -1,
01282      285,    -1,    53,    -1,    -1,   216,   199,   155,   226,    -1,
01283       -1,    90,   160,   200,   314,    -1,    89,   156,   143,    -1,
01284      215,    85,    56,    -1,    86,    56,    -1,    92,   187,   144,
01285       -1,    93,   305,   137,    -1,    30,    -1,    31,   142,   191,
01286      314,    -1,    31,   142,   314,    -1,    31,    -1,    -1,    46,
01287      313,   142,   201,   160,   314,    -1,    39,   142,   160,   314,
01288       -1,    39,   142,   314,    -1,   308,   250,    -1,   249,    -1,
01289      249,   250,    -1,    97,   241,    -1,   217,   161,   227,   156,
01290      229,   226,    -1,   218,   161,   227,   156,   230,   226,    -1,
01291       -1,    -1,   219,   202,   161,   228,   203,   156,   226,    -1,
01292       -1,    -1,   220,   204,   161,   228,   205,   156,   226,    -1,
01293      221,   161,   312,   253,   226,    -1,   221,   312,   253,   226,
01294       -1,    -1,    -1,   222,   231,    25,   206,   161,   228,   207,
01295      156,   226,    -1,    -1,   223,   176,   286,   208,   155,   226,
01296       -1,    -1,    -1,   223,    83,   160,   209,   317,   210,   155,
01297      226,    -1,    -1,   224,   176,   211,   155,   226,    -1,    -1,
01298      225,   177,   212,   288,   155,   226,    -1,    -1,    -1,   225,
01299      303,   311,   213,   177,   214,   288,   155,   226,    -1,    21,
01300       -1,    22,    -1,    23,    -1,    24,    -1,   198,    -1,     7,
01301       -1,    11,    -1,    12,    -1,    18,    -1,    19,    -1,    16,
01302       -1,    20,    -1,     3,    -1,     4,    -1,     5,    -1,    10,
01303       -1,   317,    -1,    13,    -1,   317,    13,    -1,   317,    -1,
01304       27,    -1,   230,    -1,    14,   161,   227,   156,   229,    -1,
01305      319,    -1,    15,   156,    -1,   174,    -1,   167,    -1,   291,
01306       -1,    89,   234,   314,    -1,   232,    -1,   233,   140,   232,
01307       -1,   233,    -1,   233,   140,    95,   291,    -1,   233,   140,
01308       95,   291,   140,   233,    -1,   233,   140,    95,    -1,   233,
01309      140,    95,   140,   233,    -1,    95,   291,    -1,    95,   291,
01310      140,   233,    -1,    95,    -1,    95,   140,   233,    -1,   293,
01311      140,   296,   140,   299,   302,    -1,   293,   140,   296,   140,
01312      299,   140,   293,   302,    -1,   293,   140,   296,   302,    -1,
01313      293,   140,   296,   140,   293,   302,    -1,   293,   140,   299,
01314      302,    -1,   293,   140,    -1,   293,   140,   299,   140,   293,
01315      302,    -1,   293,   302,    -1,   296,   140,   299,   302,    -1,
01316      296,   140,   299,   140,   293,   302,    -1,   296,   302,    -1,
01317      296,   140,   293,   302,    -1,   299,   302,    -1,   299,   140,
01318      293,   302,    -1,   301,    -1,   319,    -1,   237,    -1,   114,
01319      238,   114,    -1,    76,    -1,   114,   235,   238,   114,    -1,
01320      319,    -1,   145,   239,    -1,   240,    -1,   239,   140,   240,
01321       -1,    52,    -1,   290,    -1,    -1,    -1,   242,   243,   244,
01322      245,    -1,   142,   289,   238,   314,    -1,   289,    -1,   107,
01323      156,   137,    -1,    29,   156,    10,    -1,    -1,    28,   247,
01324      236,   156,    10,    -1,   166,   246,    -1,   248,   139,   309,
01325      189,    -1,   248,    85,   309,   189,    -1,   308,   188,    -1,
01326      215,   139,   309,   189,    -1,   215,    85,   309,   188,    -1,
01327      215,    85,   310,    -1,   215,   139,   188,    -1,   215,    85,
01328      188,    -1,    32,   188,    -1,    32,    -1,   215,   138,   190,
01329      315,    -1,    -1,   136,   251,   236,   156,   137,    -1,    -1,
01330       26,   252,   236,   156,    10,    -1,    17,   196,   227,   156,
01331      254,    -1,   230,    -1,   253,    -1,     8,   256,   257,   227,
01332      156,   255,    -1,   319,    -1,   186,    -1,   197,    -1,   319,
01333       -1,    88,   174,    -1,   319,    -1,     9,   156,    -1,   319,
01334       -1,   281,    -1,   278,    -1,   280,    -1,   261,    -1,    62,
01335       -1,   262,    -1,   261,   262,    -1,    99,   270,   106,    -1,
01336      100,   271,   106,    -1,   101,   272,    65,    -1,   102,   146,
01337      106,    -1,   102,   266,   106,    -1,    -1,   266,   267,   146,
01338       -1,   273,    -1,   267,   273,    -1,   103,   146,   106,    -1,
01339      103,   269,   106,    -1,    -1,   269,    61,   146,    -1,    -1,
01340      270,   273,    -1,    -1,   271,   273,    -1,    -1,   272,   273,
01341       -1,    61,    -1,    -1,   105,   274,   277,    -1,    -1,    -1,
01342      104,   275,   276,   156,   137,    -1,    54,    -1,    55,    -1,
01343       57,    -1,   285,    -1,    98,   279,    -1,   177,    -1,    55,
01344       -1,    54,    -1,    57,    -1,    98,   271,   106,    -1,    59,
01345       -1,    60,    -1,   122,    59,    -1,   122,    60,    -1,    52,
01346       -1,    55,    -1,    54,    -1,    56,    -1,    57,    -1,    34,
01347       -1,    33,    -1,    35,    -1,    36,    -1,    50,    -1,    49,
01348       -1,    51,    -1,   282,    -1,   282,    -1,    63,    -1,    64,
01349       -1,   317,    -1,    -1,   113,   287,   161,   317,    -1,     1,
01350      317,    -1,   142,   289,   314,    -1,   289,   317,    -1,   293,
01351      140,   297,   140,   299,   302,    -1,   293,   140,   297,   140,
01352      299,   140,   293,   302,    -1,   293,   140,   297,   302,    -1,
01353      293,   140,   297,   140,   293,   302,    -1,   293,   140,   299,
01354      302,    -1,   293,   140,   299,   140,   293,   302,    -1,   293,
01355      302,    -1,   297,   140,   299,   302,    -1,   297,   140,   299,
01356      140,   293,   302,    -1,   297,   302,    -1,   297,   140,   293,
01357      302,    -1,   299,   302,    -1,   299,   140,   293,   302,    -1,
01358      301,    -1,    -1,    56,    -1,    55,    -1,    54,    -1,    57,
01359       -1,   290,    -1,    52,    -1,   291,    -1,    89,   234,   314,
01360       -1,   292,    -1,   293,   140,   292,    -1,    52,   109,   186,
01361       -1,    52,   109,   215,    -1,   295,    -1,   296,   140,   295,
01362       -1,   294,    -1,   297,   140,   294,    -1,   119,    -1,    95,
01363       -1,   298,    52,    -1,   298,    -1,   116,    -1,    96,    -1,
01364      300,    52,    -1,   140,   301,    -1,   319,    -1,   283,    -1,
01365       -1,   142,   304,   160,   314,    -1,   319,    -1,   306,   316,
01366       -1,   307,    -1,   306,   140,   307,    -1,   186,    88,   186,
01367       -1,    58,   186,    -1,    52,    -1,    56,    -1,    53,    -1,
01368       52,    -1,    56,    -1,    53,    -1,   182,    -1,    52,    -1,
01369       53,    -1,   182,    -1,   139,    -1,    85,    -1,    -1,   318,
01370       -1,    -1,   147,    -1,   313,   143,    -1,   313,   144,    -1,
01371       -1,   147,    -1,   140,    -1,   145,    -1,   147,    -1,   317,
01372       -1,   318,   145,    -1,    -1
01373 };
01374 
01375 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
01376 static const yytype_uint16 yyrline[] =
01377 {
01378        0,   786,   786,   786,   817,   828,   837,   845,   853,   859,
01379      861,   860,   884,   917,   928,   937,   945,   953,   959,   959,
01380      967,   975,   986,   996,  1004,  1013,  1022,  1035,  1048,  1057,
01381     1069,  1078,  1088,  1117,  1138,  1155,  1172,  1183,  1200,  1210,
01382     1219,  1228,  1237,  1240,  1241,  1249,  1257,  1265,  1273,  1276,
01383     1288,  1289,  1292,  1293,  1302,  1314,  1313,  1335,  1344,  1356,
01384     1365,  1377,  1386,  1398,  1407,  1416,  1424,  1432,  1442,  1443,
01385     1453,  1454,  1464,  1472,  1480,  1488,  1497,  1505,  1513,  1521,
01386     1529,  1537,  1547,  1548,  1558,  1566,  1576,  1584,  1594,  1598,
01387     1606,  1614,  1622,  1630,  1642,  1652,  1664,  1673,  1681,  1689,
01388     1697,  1705,  1718,  1731,  1742,  1750,  1753,  1761,  1769,  1779,
01389     1780,  1781,  1782,  1787,  1798,  1799,  1802,  1810,  1813,  1821,
01390     1821,  1831,  1832,  1833,  1834,  1835,  1836,  1837,  1838,  1839,
01391     1840,  1841,  1842,  1843,  1844,  1845,  1846,  1847,  1848,  1849,
01392     1850,  1851,  1852,  1853,  1854,  1855,  1856,  1857,  1858,  1859,
01393     1862,  1862,  1862,  1863,  1863,  1864,  1864,  1864,  1865,  1865,
01394     1865,  1865,  1866,  1866,  1866,  1866,  1867,  1867,  1867,  1868,
01395     1868,  1868,  1868,  1869,  1869,  1869,  1869,  1870,  1870,  1870,
01396     1870,  1871,  1871,  1871,  1871,  1872,  1872,  1872,  1872,  1873,
01397     1873,  1876,  1885,  1895,  1924,  1955,  1981,  1998,  2015,  2032,
01398     2043,  2054,  2065,  2079,  2093,  2101,  2109,  2117,  2125,  2133,
01399     2141,  2150,  2159,  2167,  2175,  2183,  2191,  2199,  2207,  2215,
01400     2223,  2231,  2239,  2247,  2255,  2263,  2274,  2282,  2290,  2298,
01401     2306,  2314,  2322,  2330,  2330,  2340,  2350,  2356,  2368,  2369,
01402     2373,  2381,  2391,  2401,  2402,  2405,  2406,  2409,  2418,  2426,
01403     2436,  2445,  2454,  2454,  2466,  2476,  2480,  2484,  2490,  2498,
01404     2506,  2520,  2536,  2550,  2565,  2575,  2576,  2577,  2578,  2579,
01405     2580,  2581,  2582,  2583,  2592,  2591,  2616,  2616,  2625,  2633,
01406     2641,  2649,  2662,  2670,  2678,  2686,  2694,  2702,  2702,  2712,
01407     2720,  2728,  2739,  2740,  2751,  2755,  2767,  2779,  2779,  2779,
01408     2790,  2790,  2790,  2801,  2812,  2821,  2823,  2820,  2887,  2886,
01409     2908,  2913,  2907,  2932,  2931,  2953,  2952,  2975,  2976,  2975,
01410     2996,  3004,  3012,  3020,  3030,  3042,  3048,  3054,  3060,  3066,
01411     3072,  3078,  3084,  3090,  3096,  3106,  3112,  3117,  3118,  3125,
01412     3130,  3133,  3134,  3147,  3148,  3158,  3159,  3162,  3170,  3180,
01413     3188,  3198,  3206,  3215,  3224,  3232,  3240,  3249,  3261,  3269,
01414     3279,  3287,  3295,  3303,  3311,  3319,  3328,  3336,  3344,  3352,
01415     3360,  3368,  3376,  3384,  3392,  3402,  3403,  3409,  3418,  3427,
01416     3438,  3439,  3449,  3456,  3465,  3473,  3479,  3482,  3479,  3500,
01417     3508,  3518,  3522,  3529,  3528,  3549,  3565,  3574,  3585,  3594,
01418     3604,  3614,  3622,  3633,  3644,  3652,  3660,  3675,  3674,  3694,
01419     3693,  3714,  3726,  3727,  3730,  3749,  3752,  3760,  3768,  3771,
01420     3775,  3778,  3786,  3789,  3790,  3798,  3801,  3818,  3819,  3820,
01421     3830,  3840,  3867,  3932,  3940,  3947,  3954,  3964,  3972,  3982,
01422     3990,  3997,  4004,  4015,  4022,  4033,  4040,  4051,  4058,  4087,
01423     4089,  4088,  4105,  4111,  4104,  4130,  4138,  4146,  4154,  4157,
01424     4168,  4169,  4170,  4171,  4174,  4204,  4205,  4206,  4214,  4224,
01425     4225,  4226,  4227,  4228,  4229,  4230,  4231,  4232,  4233,  4234,
01426     4235,  4238,  4248,  4258,  4259,  4262,  4271,  4270,  4278,  4290,
01427     4300,  4306,  4314,  4322,  4330,  4338,  4346,  4354,  4362,  4370,
01428     4378,  4386,  4394,  4402,  4410,  4419,  4428,  4437,  4446,  4455,
01429     4466,  4467,  4474,  4483,  4502,  4509,  4522,  4534,  4546,  4554,
01430     4570,  4578,  4594,  4595,  4598,  4611,  4622,  4623,  4626,  4643,
01431     4647,  4657,  4667,  4667,  4696,  4697,  4707,  4714,  4724,  4732,
01432     4742,  4743,  4744,  4747,  4748,  4749,  4750,  4753,  4754,  4755,
01433     4758,  4763,  4770,  4771,  4774,  4775,  4778,  4781,  4784,  4785,
01434     4786,  4789,  4790,  4793,  4794,  4798
01435 };
01436 #endif
01437 
01438 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01439 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01440    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
01441 static const char *const yytname[] =
01442 {
01443   "$end", "error", "$undefined", "keyword_class", "keyword_module",
01444   "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01445   "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01446   "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01447   "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01448   "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01449   "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01450   "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01451   "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01452   "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01453   "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01454   "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01455   "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01456   "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01457   "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01458   "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01459   "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01460   "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01461   "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01462   "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01463   "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01464   "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01465   "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01466   "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01467   "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01468   "id_core_set_variable_alias", "id_core_undef_method",
01469   "id_core_define_method", "id_core_define_singleton_method",
01470   "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01471   "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01472   "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01473   "compstmt", "stmts", "stmt", "$@3", "expr", "expr_value", "command_call",
01474   "block_command", "cmd_brace_block", "@4", "command", "mlhs",
01475   "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
01476   "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
01477   "undef_list", "$@5", "op", "reswords", "arg", "$@6", "arg_value",
01478   "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01479   "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01480   "mrhs", "primary", "@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
01481   "$@15", "$@16", "@17", "@18", "@19", "@20", "@21", "$@22", "$@23",
01482   "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until",
01483   "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do",
01484   "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01485   "block_param", "opt_block_param", "block_param_def", "opt_bv_decl",
01486   "bv_decls", "bvar", "lambda", "@24", "@25", "f_larglist", "lambda_body",
01487   "do_block", "@26", "block_call", "method_call", "brace_block", "@27",
01488   "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
01489   "opt_ensure", "literal", "strings", "string", "string1", "xstring",
01490   "regexp", "words", "word_list", "word", "qwords", "qword_list",
01491   "string_contents", "xstring_contents", "regexp_contents",
01492   "string_content", "@29", "@30", "@31", "string_dvar", "symbol", "sym",
01493   "dsym", "numeric", "variable", "var_ref", "var_lhs", "backref",
01494   "superclass", "$@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01495   "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01496   "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01497   "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", "assoc",
01498   "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01499   "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01500 };
01501 #endif
01502 
01503 # ifdef YYPRINT
01504 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
01505    token YYLEX-NUM.  */
01506 static const yytype_uint16 yytoknum[] =
01507 {
01508        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
01509      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
01510      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
01511      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
01512      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
01513      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
01514      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
01515      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
01516      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
01517      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
01518      355,   356,   357,   358,   359,   360,   361,   362,   363,    61,
01519       63,    58,    62,    60,   124,    94,    38,    43,    45,    42,
01520       47,    37,   364,    33,   126,   365,   366,   367,   368,   369,
01521      370,   371,   372,   373,   374,   375,   123,   125,    91,    46,
01522       44,    96,    40,    41,    93,    59,    32,    10
01523 };
01524 # endif
01525 
01526 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
01527 static const yytype_uint16 yyr1[] =
01528 {
01529        0,   148,   150,   149,   151,   152,   152,   152,   152,   153,
01530      154,   153,   155,   156,   157,   157,   157,   157,   159,   158,
01531      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01532      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01533      158,   158,   158,   160,   160,   160,   160,   160,   160,   161,
01534      162,   162,   163,   163,   163,   165,   164,   166,   166,   166,
01535      166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
01536      168,   168,   169,   169,   169,   169,   169,   169,   169,   169,
01537      169,   169,   170,   170,   171,   171,   172,   172,   173,   173,
01538      173,   173,   173,   173,   173,   173,   174,   174,   174,   174,
01539      174,   174,   174,   174,   175,   175,   176,   176,   176,   177,
01540      177,   177,   177,   177,   178,   178,   179,   179,   180,   181,
01541      180,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01542      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01543      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01544      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01545      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01546      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01547      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01548      183,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01549      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01550      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01551      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01552      184,   184,   184,   185,   184,   184,   184,   186,   187,   187,
01553      187,   187,   188,   189,   189,   190,   190,   191,   191,   191,
01554      191,   191,   193,   192,   194,   195,   195,   195,   196,   196,
01555      196,   196,   197,   197,   197,   198,   198,   198,   198,   198,
01556      198,   198,   198,   198,   199,   198,   200,   198,   198,   198,
01557      198,   198,   198,   198,   198,   198,   198,   201,   198,   198,
01558      198,   198,   198,   198,   198,   198,   198,   202,   203,   198,
01559      204,   205,   198,   198,   198,   206,   207,   198,   208,   198,
01560      209,   210,   198,   211,   198,   212,   198,   213,   214,   198,
01561      198,   198,   198,   198,   215,   216,   217,   218,   219,   220,
01562      221,   222,   223,   224,   225,   226,   227,   227,   227,   228,
01563      228,   229,   229,   230,   230,   231,   231,   232,   232,   233,
01564      233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
01565      235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
01566      235,   235,   235,   235,   235,   236,   236,   237,   237,   237,
01567      238,   238,   239,   239,   240,   240,   242,   243,   241,   244,
01568      244,   245,   245,   247,   246,   248,   248,   248,   249,   249,
01569      249,   249,   249,   249,   249,   249,   249,   251,   250,   252,
01570      250,   253,   254,   254,   255,   255,   256,   256,   256,   257,
01571      257,   258,   258,   259,   259,   259,   260,   261,   261,   261,
01572      262,   263,   264,   265,   265,   266,   266,   267,   267,   268,
01573      268,   269,   269,   270,   270,   271,   271,   272,   272,   273,
01574      274,   273,   275,   276,   273,   277,   277,   277,   277,   278,
01575      279,   279,   279,   279,   280,   281,   281,   281,   281,   282,
01576      282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
01577      282,   283,   284,   285,   285,   286,   287,   286,   286,   288,
01578      288,   289,   289,   289,   289,   289,   289,   289,   289,   289,
01579      289,   289,   289,   289,   289,   289,   290,   290,   290,   290,
01580      291,   291,   292,   292,   293,   293,   294,   295,   296,   296,
01581      297,   297,   298,   298,   299,   299,   300,   300,   301,   302,
01582      302,   303,   304,   303,   305,   305,   306,   306,   307,   307,
01583      308,   308,   308,   309,   309,   309,   309,   310,   310,   310,
01584      311,   311,   312,   312,   313,   313,   314,   315,   316,   316,
01585      316,   317,   317,   318,   318,   319
01586 };
01587 
01588 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
01589 static const yytype_uint8 yyr2[] =
01590 {
01591        0,     2,     0,     2,     2,     1,     1,     3,     2,     1,
01592        0,     5,     4,     2,     1,     1,     3,     2,     0,     4,
01593        3,     3,     3,     2,     3,     3,     3,     3,     3,     4,
01594        3,     3,     3,     6,     5,     5,     5,     5,     3,     3,
01595        3,     3,     1,     1,     3,     3,     3,     2,     1,     1,
01596        1,     1,     1,     4,     4,     0,     5,     2,     3,     4,
01597        5,     4,     5,     2,     2,     2,     2,     2,     1,     3,
01598        1,     3,     1,     2,     3,     5,     2,     4,     2,     4,
01599        1,     3,     1,     3,     2,     3,     1,     3,     1,     4,
01600        3,     3,     3,     3,     2,     1,     1,     4,     3,     3,
01601        3,     3,     2,     1,     1,     1,     2,     1,     3,     1,
01602        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
01603        4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01604        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01605        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01606        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01607        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01608        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01609        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01610        1,     3,     5,     3,     5,     6,     5,     5,     5,     5,
01611        4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
01612        4,     4,     2,     2,     3,     3,     3,     3,     3,     3,
01613        3,     3,     3,     3,     3,     3,     3,     2,     2,     3,
01614        3,     3,     3,     0,     4,     6,     1,     1,     1,     2,
01615        4,     2,     3,     1,     1,     1,     1,     1,     2,     2,
01616        4,     1,     0,     2,     2,     2,     1,     1,     1,     2,
01617        3,     4,     3,     4,     2,     1,     1,     1,     1,     1,
01618        1,     1,     1,     1,     0,     4,     0,     4,     3,     3,
01619        2,     3,     3,     1,     4,     3,     1,     0,     6,     4,
01620        3,     2,     1,     2,     2,     6,     6,     0,     0,     7,
01621        0,     0,     7,     5,     4,     0,     0,     9,     0,     6,
01622        0,     0,     8,     0,     5,     0,     6,     0,     0,     9,
01623        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01624        1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
01625        1,     1,     5,     1,     2,     1,     1,     1,     3,     1,
01626        3,     1,     4,     6,     3,     5,     2,     4,     1,     3,
01627        6,     8,     4,     6,     4,     2,     6,     2,     4,     6,
01628        2,     4,     2,     4,     1,     1,     1,     3,     1,     4,
01629        1,     2,     1,     3,     1,     1,     0,     0,     4,     4,
01630        1,     3,     3,     0,     5,     2,     4,     4,     2,     4,
01631        4,     3,     3,     3,     2,     1,     4,     0,     5,     0,
01632        5,     5,     1,     1,     6,     1,     1,     1,     1,     2,
01633        1,     2,     1,     1,     1,     1,     1,     1,     1,     2,
01634        3,     3,     3,     3,     3,     0,     3,     1,     2,     3,
01635        3,     0,     3,     0,     2,     0,     2,     0,     2,     1,
01636        0,     3,     0,     0,     5,     1,     1,     1,     1,     2,
01637        1,     1,     1,     1,     3,     1,     1,     2,     2,     1,
01638        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01639        1,     1,     1,     1,     1,     1,     0,     4,     2,     3,
01640        2,     6,     8,     4,     6,     4,     6,     2,     4,     6,
01641        2,     4,     2,     4,     1,     0,     1,     1,     1,     1,
01642        1,     1,     1,     3,     1,     3,     3,     3,     1,     3,
01643        1,     3,     1,     1,     2,     1,     1,     1,     2,     2,
01644        1,     1,     0,     4,     1,     2,     1,     3,     3,     2,
01645        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01646        1,     1,     0,     1,     0,     1,     2,     2,     0,     1,
01647        1,     1,     1,     1,     2,     0
01648 };
01649 
01650 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
01651    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
01652    means the default is an error.  */
01653 static const yytype_uint16 yydefact[] =
01654 {
01655        2,     0,     0,     1,     0,   332,   333,   334,     0,   325,
01656      326,   327,   330,   328,   329,   331,   320,   321,   322,   323,
01657      283,   252,   252,   475,   474,   476,   477,   554,     0,   554,
01658       10,     0,   479,   478,   480,   469,   542,   471,   470,   472,
01659      473,   465,   466,   427,   483,   484,     0,     0,     0,     0,
01660        0,   565,   565,    80,   386,   445,   443,   445,   447,   435,
01661      441,     0,     0,     0,     3,   552,     6,     9,    42,    43,
01662       51,    50,     0,    68,     0,    72,    82,     0,    48,   236,
01663        0,   274,     0,     0,   297,   300,   552,     0,     0,     0,
01664        0,    52,   292,   265,   266,   426,   428,   267,   268,   269,
01665      270,   424,   425,   423,   481,   271,     0,   272,   252,     5,
01666        8,   160,   171,   161,   184,   157,   177,   167,   166,   187,
01667      188,   182,   165,   164,   159,   185,   189,   190,   169,   158,
01668      172,   176,   178,   170,   163,   179,   186,   181,   180,   173,
01669      183,   168,   156,   175,   174,   155,   162,   153,   154,   150,
01670      151,   152,   109,   111,   110,   145,   146,   142,   124,   125,
01671      126,   133,   130,   132,   127,   128,   147,   148,   134,   135,
01672      139,   129,   131,   121,   122,   123,   136,   137,   138,   140,
01673      141,   143,   144,   149,   114,   116,   118,    23,   112,   113,
01674      115,   117,     0,     0,     0,     0,     0,     0,     0,   247,
01675        0,   237,   258,    66,   251,   565,     0,   481,     0,   272,
01676      565,   536,    67,    65,   554,    64,     0,   565,   404,    63,
01677      554,   555,     0,     0,    18,   233,     0,     0,   320,   321,
01678      283,   286,   405,   212,     0,     0,   213,   280,     0,     0,
01679        0,   552,    15,   554,    70,    14,   276,     0,   558,   558,
01680      238,     0,     0,   558,   534,   554,     0,     0,     0,    78,
01681      324,     0,    88,    95,   294,   387,   462,   461,   463,   460,
01682        0,   459,     0,     0,     0,     0,     0,     0,     0,   467,
01683      468,    47,   227,   228,   561,   562,     4,   563,   553,     0,
01684        0,     0,     0,     0,     0,     0,   393,   395,     0,    84,
01685        0,    76,    73,     0,     0,     0,     0,     0,     0,     0,
01686        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01687        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01688        0,   565,     0,     0,    49,     0,     0,     0,     0,   552,
01689        0,   553,     0,   346,   345,     0,     0,   481,   272,   104,
01690      105,     0,     0,   107,     0,     0,   481,   272,   313,   180,
01691      173,   183,   168,   150,   151,   152,   109,   110,   532,   315,
01692      531,     0,     0,     0,   409,   407,   293,   429,     0,     0,
01693      398,    57,   291,   119,   539,   280,   259,   254,     0,     0,
01694      256,   248,   257,     0,   565,     0,     0,     0,   256,   249,
01695      554,     0,   285,   253,   554,   246,   245,   554,   290,    46,
01696       20,    22,    21,     0,   287,     0,     0,     0,     0,     0,
01697        0,    17,   554,   278,    13,   553,    69,   554,   281,   560,
01698      559,   239,   560,   241,   282,   535,     0,    94,   467,   468,
01699       86,    81,     0,     0,   565,     0,   505,   449,   452,   450,
01700      464,   446,   430,   444,   431,   432,   448,   433,   434,     0,
01701      437,   439,     0,   440,     0,     0,   564,     7,    24,    25,
01702       26,    27,    28,    44,    45,   565,     0,    31,    40,     0,
01703       41,   554,     0,    74,    85,    30,   191,   258,    39,   209,
01704      217,   222,   223,   224,   219,   221,   231,   232,   225,   226,
01705      202,   203,   229,   230,   554,   218,   220,   214,   215,   216,
01706      204,   205,   206,   207,   208,   543,   548,   544,   549,   403,
01707      252,   401,   554,   543,   545,   544,   546,   402,   252,     0,
01708      565,   337,     0,   336,     0,     0,     0,     0,     0,     0,
01709      280,     0,   565,     0,   305,   310,   104,   105,   106,     0,
01710      486,   308,   485,     0,   565,     0,     0,     0,   505,   551,
01711      550,   317,   543,   544,   252,   252,   565,   565,    32,   193,
01712       38,   201,    55,    58,     0,   191,   538,     0,   260,   255,
01713      565,   547,   544,   554,   543,   544,   537,   284,   556,   242,
01714      289,    19,     0,   234,     0,    29,     0,   565,   200,    71,
01715       16,   277,   558,     0,    79,    91,    93,   554,   543,   544,
01716      511,   508,   507,   506,   509,     0,   523,   527,   526,   522,
01717      505,     0,   390,   510,   512,   514,   565,   520,   565,   525,
01718      565,     0,   504,   453,     0,   436,   438,   442,   210,   211,
01719      378,   565,     0,   376,   375,   264,     0,    83,    77,     0,
01720        0,     0,     0,     0,   400,    61,     0,   406,     0,     0,
01721      244,   399,    59,   243,   335,   275,   565,   565,   415,   565,
01722      338,   565,   340,   298,   339,   301,     0,     0,   304,   547,
01723      279,   554,   543,   544,     0,     0,   488,     0,     0,   104,
01724      105,   108,   554,     0,   554,   505,     0,     0,     0,   397,
01725       54,   396,    53,     0,     0,     0,   565,   120,   261,   250,
01726        0,     0,   406,     0,     0,   554,    11,   240,    87,    89,
01727        0,   511,     0,   358,   349,   351,   554,   347,   565,     0,
01728        0,   388,     0,   497,   530,     0,   500,   524,     0,   502,
01729      528,     0,   455,   456,   457,   451,   458,   511,     0,   565,
01730        0,   565,   518,   565,   565,   374,   380,     0,     0,   262,
01731       75,   192,     0,    37,   198,    36,   199,    62,   557,     0,
01732       34,   196,    35,   197,    60,   416,   417,   565,   418,     0,
01733      565,   343,     0,     0,   341,     0,     0,     0,   303,     0,
01734        0,   406,     0,   311,     0,     0,   406,   314,   533,   554,
01735        0,   490,   318,     0,     0,   194,     0,     0,   288,   516,
01736      554,     0,   356,     0,   513,   554,     0,     0,   515,   565,
01737      565,   529,   565,   521,   565,   565,     0,     0,   384,   381,
01738      382,   385,     0,   377,   365,   367,     0,   370,     0,   372,
01739      394,   263,   235,    33,   195,     0,     0,   420,   344,     0,
01740       12,   422,     0,   295,   296,     0,     0,   260,   565,   306,
01741        0,   487,   309,   489,   316,   505,   410,   408,     0,   348,
01742      359,     0,   354,   350,   389,   392,   391,     0,   493,     0,
01743      495,     0,   501,     0,   498,   503,   454,     0,   517,     0,
01744      379,   565,   565,   565,   519,   565,   565,     0,   419,     0,
01745       96,   103,     0,   421,     0,   299,   302,   412,   413,   411,
01746        0,     0,     0,    56,     0,   357,     0,   352,   565,   565,
01747      565,   565,   280,     0,   383,     0,   362,     0,   364,   371,
01748        0,   368,   373,   102,     0,   565,     0,   565,   565,     0,
01749      312,     0,   355,     0,   494,     0,   491,   496,   499,   547,
01750      279,   565,   565,   565,   565,   547,   101,   554,   543,   544,
01751      414,   342,   307,   319,   353,   565,   363,     0,   360,   366,
01752      369,   406,   492,   565,   361
01753 };
01754 
01755 /* YYDEFGOTO[NTERM-NUM].  */
01756 static const yytype_int16 yydefgoto[] =
01757 {
01758       -1,     1,     2,    64,    65,    66,   226,   529,   530,   241,
01759      242,   413,    68,   335,    69,    70,   573,   706,    71,    72,
01760      243,    73,    74,    75,   441,    76,   200,   353,   354,   184,
01761      185,   186,   187,   574,   526,   189,    78,   415,   202,   247,
01762      519,   661,   404,   405,   215,   216,   204,   391,   205,   480,
01763       79,   333,   427,   592,   337,   786,   338,   787,   684,   910,
01764      688,   685,   860,   556,   558,   698,   865,   234,    81,    82,
01765       83,    84,    85,    86,    87,    88,    89,    90,   665,   532,
01766      673,   783,   784,   346,   724,   725,   726,   749,   642,   643,
01767      750,   829,   830,   264,   265,   446,   621,   731,   297,   475,
01768       91,    92,   382,   567,   566,   539,   909,   667,   777,   846,
01769      850,    93,    94,    95,    96,    97,    98,    99,   276,   459,
01770      100,   278,   272,   270,   274,   451,   634,   633,   741,   745,
01771      101,   271,   102,   103,   207,   105,   208,   209,   551,   687,
01772      696,   697,   623,   624,   625,   626,   627,   752,   753,   628,
01773      629,   630,   631,   821,   733,   371,   557,   252,   210,   211,
01774      108,   596,   521,   561,   286,   401,   402,   657,   431,   533,
01775      341,   245
01776 };
01777 
01778 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
01779    STATE-NUM.  */
01780 #define YYPACT_NINF -778
01781 static const yytype_int16 yypact[] =
01782 {
01783     -778,   133,  2394,  -778,  7010,  -778,  -778,  -778,  6523,  -778,
01784     -778,  -778,  -778,  -778,  -778,  -778,  7228,  7228,  -778,  -778,
01785     7228,  3145,  2722,  -778,  -778,  -778,  -778,   164,  6384,   -11,
01786     -778,    69,  -778,  -778,  -778,  5623,  2863,  -778,  -778,  5750,
01787     -778,  -778,  -778,  -778,  -778,  -778,  8427,  8427,    96,  4342,
01788     8536,  7446,  7773,  6786,  -778,  6245,  -778,  -778,  -778,    74,
01789       93,   122,  8645,  8427,  -778,   187,  -778,   698,   288,  -778,
01790     -778,   230,   167,  -778,   180,  8754,  -778,   234,  2846,   273,
01791      310,  -778,  8536,  8536,  -778,  -778,  4986,  8859,  8964,  9069,
01792     5496,    16,    60,  -778,  -778,   174,  -778,  -778,  -778,  -778,
01793     -778,  -778,  -778,  -778,   201,  -778,   258,   282,   206,  -778,
01794     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01795     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01796     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01797     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01798     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01799     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01800     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01801     -778,  -778,  -778,  -778,  -778,  -778,  -778,   212,  -778,  -778,
01802     -778,  -778,   215,  8427,   303,  4472,  8427,  8427,  8427,  -778,
01803      257,  2846,   285,  -778,  -778,   281,   343,    38,   337,   263,
01804      290,  -778,  -778,  -778,  4877,  -778,  7228,  7228,  -778,  -778,
01805     5116,  -778,  8536,   599,  -778,   296,   315,  4602,  -778,  -778,
01806     -778,   311,   328,  -778,   347,   206,   396,   446,  7119,  4342,
01807      329,   187,   698,   -11,   370,  -778,   288,   339,   -30,    30,
01808     -778,   285,   356,    30,  -778,   -11,   442,   375,  9174,   390,
01809     -778,   351,   373,   383,  -778,  -778,  -778,  -778,  -778,  -778,
01810      515,  -778,   552,   587,   620,   397,   607,   407,    34,   473,
01811      474,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  5225,  8536,
01812     8536,  8536,  8536,  7119,  8536,  8536,  -778,  -778,  7882,  -778,
01813     4342,  6898,   413,  7882,  8427,  8427,  8427,  8427,  8427,  8427,
01814     8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,
01815     8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,
01816     1712,  7228,  2060,  3517,   288,    80,    80,  8536,  8536,   187,
01817      534,   416,   516,  -778,  -778,   386,   568,    50,    72,   301,
01818      321,  8536,   363,  -778,    66,   393,  -778,  -778,  -778,    36,
01819       41,   103,   224,   259,   266,   322,   348,   369,  -778,  -778,
01820     -778,   377, 10211, 10211,  -778,  -778,  -778,  -778,  8645,  8645,
01821     -778,   483,  -778,  -778,  -778,   268,  -778,  -778,  8427,  8427,
01822     7337,  -778,  -778,  2216,  7228,  9441,  8427,  8427,  7555,  -778,
01823      -11,   454,  -778,  -778,   -11,  -778,  -778,    70,  -778,  -778,
01824     -778,  -778,  -778,  6523,  -778,  8427,  3937,   463,  2216,  9441,
01825     8427,   698,   -11,  -778,  -778,  5353,   462,   -11,  -778,  7664,
01826     -778,  -778,  7773,  -778,  -778,  -778,   296,   411,  -778,  -778,
01827     -778,   467,  9174,  9518,  7228,  9595,  1033,  -778,  -778,  -778,
01828     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,    39,
01829     -778,  -778,   472,  -778,  8427,  8427,  -778,  -778,  -778,  -778,
01830     -778,  -778,  -778,  -778,  -778,    28,  8427,  -778,   468,   487,
01831     -778,   -11,  9174,   496,  -778,  -778,  1576,  -778,  -778,   396,
01832     1512,  1512,  1512,  1512,  1223,  1223,  1879,  2079,  1512,  1512,
01833     2146,  2146,   582,   582,  2705,  1223,  1223,  1098,  1098,   790,
01834      514,   514,   396,   396,   396,  3286,  5991,  3372,  6105,  -778,
01835      328,  -778,   -11,   448,  -778,   451,  -778,  -778,  3004,   639,
01836      644,  -778,  3662,   646,  4082,    42,    42,   534,  7991,   639,
01837      109,  9672,  7228,  9749,  -778,   288,  -778,   411,  -778,   187,
01838     -778,  -778,  -778,  9826,  7228,  9903,  3517,  8536,  1115,  -778,
01839     -778,  -778,  -778,  -778,  1235,  1235,    28,    28,  -778, 10270,
01840     -778,  2846,  -778,  -778,  6523, 10289,  -778,  8427,   285,  -778,
01841      290,  5877,  2581,   -11,   410,   529,  -778,  -778,  -778,  -778,
01842     -778,  -778,  8536,  2846,   535,  -778,   328,   328,  2846,    20,
01843      698,  -778,    30,  9174,   467,   338,   271,   -11,   228,   261,
01844      557,  -778,  -778,  -778,  -778,   666,  -778,  -778,  -778,  -778,
01845      923,    43,  -778,  -778,  -778,  -778,   543,  -778,   544,   623,
01846      547,   642,  -778,  -778,   722,  -778,  -778,  -778,   396,   396,
01847     -778,   904,  4747,  -778,  -778,   555,  8100,  -778,   467,  9174,
01848     8427,   598,  8645,  8645,  -778,   483,   570,   538,  8645,  8645,
01849     -778,  -778,   483,  -778,  -778,  -778,  8209,   701,  -778,   441,
01850     -778,   701,  -778,  -778,  -778,  -778,   639,    31,  -778,   110,
01851      132,   -11,   126,   144,  8536,   187,  -778,  8536,  3517,   338,
01852      271,  -778,   -11,   639,    70,   923,  3517,   187,  6662,  -778,
01853     -778,  -778,  -778,  4747,  4602,  8427,    28,  -778,  -778,  -778,
01854     8427,  8427,   536,  8427,  8427,    70,  -778,  -778,  -778,   251,
01855     8427,  -778,   666,   450,  -778,   579,   -11,  -778,   583,  4747,
01856     4602,  -778,   923,  -778,  -778,   923,  -778,  -778,   779,  -778,
01857     -778,  4602,  -778,  -778,  -778,  -778,  -778,   625,   809,   583,
01858      615,   595,  -778,   604,   605,  -778,  -778,   740,  8427,   619,
01859      467,  2846,  8427,  -778,  2846,  -778,  2846,  -778,  -778,  8645,
01860     -778,  2846,  -778,  2846,  -778,   468,  -778,   675,  -778,  4212,
01861      757,  -778,  8536,   639,  -778,   639,  4747,  4747,  -778,  8318,
01862     3807,   147,    42,  -778,   187,   639,  -778,  -778,  -778,   -11,
01863      639,  -778,  -778,   759,   630,  2846,  4602,  8427,  -778,  -778,
01864      -11,   845,   632,   826,  -778,   -11,   760,   637,  -778,   640,
01865      643,  -778,   647,  -778,   651,   647,   656,  9279,  -778,   657,
01866     -778,  -778,   682,  -778,  1199,  -778,  1199,  -778,   779,  -778,
01867     -778,   658,  2846,  -778,  2846,  9384,    80,  -778,  -778,  4747,
01868     -778,  -778,    80,  -778,  -778,   639,   639,  -778,   115,  -778,
01869     3517,  -778,  -778,  -778,  -778,  1115,  -778,  -778,   664,  -778,
01870      662,   845,   491,  -778,  -778,  -778,  -778,   923,  -778,   779,
01871     -778,   779,  -778,   779,  -778,  -778,  -778,   751,   429,   809,
01872     -778,   672,   673,   647,  -778,   679,   647,   765,  -778,   432,
01873      373,   383,  3517,  -778,  3662,  -778,  -778,  -778,  -778,  -778,
01874     4747,   639,  3517,  -778,   845,   662,   845,   685,   647,   686,
01875      647,   647,  -778,  9980,  -778,  1199,  -778,   779,  -778,  -778,
01876      779,  -778,  -778,   411, 10057,  7228, 10134,   644,   441,   639,
01877     -778,   639,   662,   845,  -778,   779,  -778,  -778,  -778,   688,
01878      690,   647,   687,   647,   647,    81,   271,   -11,    86,   118,
01879     -778,  -778,  -778,  -778,   662,   647,  -778,   779,  -778,  -778,
01880     -778,   124,  -778,   647,  -778
01881 };
01882 
01883 /* YYPGOTO[NTERM-NUM].  */
01884 static const yytype_int16 yypgoto[] =
01885 {
01886     -778,  -778,  -778,   399,  -778,    33,  -778,  -530,   -33,  -778,
01887      159,  -778,    23,   -55,    21,  -778,  -462,  -778,   -15,   741,
01888     -136,    -1,   -66,  -778,  -403,   -26,  1181,  -306,   750,   -52,
01889     -778,   -20,  -778,  -778,    32,  -778,   748,  -778,   540,  -778,
01890       46,   -98,  -298,    54,    76,  -778,  -278,  -196,   -44,  -283,
01891       27,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01892     -778,  -778,  -778,  -778,  -778,  -778,  -778,     2,  -778,  -778,
01893     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,   298,  -323,
01894     -512,   -97,  -610,  -778,  -755,  -748,   120,  -778,  -485,  -778,
01895     -636,  -778,   -49,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01896     -778,  -778,   752,  -778,  -778,  -520,  -778,   -92,  -778,  -778,
01897     -778,  -778,  -778,  -778,   753,  -778,  -778,  -778,  -778,  -778,
01898     -778,  -778,  -778,   792,  -778,  -229,  -778,  -778,  -778,  -778,
01899        7,  -778,    13,  -778,  1031,   762,  1198,  1109,  -778,  -778,
01900      -12,  -416,  -706,  -549,  -667,  -121,  -679,  -777,    25,   128,
01901     -778,  -579,  -778,  -434,   531,  -778,  -778,  -778,   -41,  -287,
01902     1927,  -254,  -778,  -778,   -32,    -4,    88,  -554,  -217,    63,
01903      -31,    -2
01904 };
01905 
01906 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
01907    positive, shift that token.  If negative, reduce the rule which
01908    number is the opposite.  If zero, do what YYDEFACT says.
01909    If YYTABLE_NINF, syntax error.  */
01910 #define YYTABLE_NINF -566
01911 static const yytype_int16 yytable[] =
01912 {
01913      109,   199,   199,   269,    80,   199,    80,   248,   224,   302,
01914      249,   253,   632,   534,   399,   190,   240,   676,   206,   206,
01915      488,   191,   206,   222,   675,   225,   693,   259,   336,   712,
01916      622,   339,   433,   522,   288,   190,   435,   110,   369,   604,
01917      188,   191,   831,   453,   531,   456,   548,   460,   244,   250,
01918      254,    80,   206,   719,   340,   261,   823,   780,   873,   894,
01919      188,   785,   754,   870,   206,   818,   727,   549,   218,   672,
01920      203,   212,   729,   246,   213,   -96,   520,   261,   528,   648,
01921      260,   703,   704,   281,   206,   206,   374,   188,   206,   345,
01922      355,   355,   815,   531,   -99,   462,   583,  -103,   219,   -98,
01923      447,   372,   260,   422,   640,   334,   334,   294,   295,   334,
01924      429,   586,   579,   832,   260,   260,   260,   430,   564,   565,
01925      579,  -475,   188,   915,   632,  -482,  -474,   791,   287,   -69,
01926      779,  -100,   538,     3,  -102,   -99,   221,   -97,   796,   520,
01927      463,   528,   641,   448,   449,   586,   607,   -96,   894,   287,
01928      730,   -98,   237,   820,   380,   373,   824,  -101,   795,   873,
01929      -83,    67,   240,    67,   481,   597,   800,   818,   942,  -100,
01930      432,   789,   -97,   727,   812,  -475,   284,   430,   285,   550,
01931     -474,   279,   280,   831,   381,   635,   632,   284,  -476,   285,
01932      -88,   597,   440,   767,   417,   964,   375,    80,   823,   199,
01933      774,   199,   199,   392,   728,   227,   240,   755,   392,   424,
01934      425,   284,   -95,   285,   818,   406,   206,   221,   206,   206,
01935      275,   806,   206,  -543,   206,   284,   -99,   285,   -99,    80,
01936      636,   -98,   374,   -98,   468,   469,   470,   471,   244,   277,
01937       80,    80,  -476,   407,   681,   409,   760,   691,   907,   -94,
01938      -91,   436,  -543,   -90,   479,   892,   692,   895,   296,   479,
01939      261,   632,   727,  -100,   727,  -100,   -90,   240,   400,   -97,
01940      403,   -97,   -93,    56,  -544,   483,   298,  -406,   218,   799,
01941      859,   380,   535,   536,   -92,   260,   -92,   -89,  -482,   597,
01942       80,   206,   206,   206,   206,    80,   206,   206,   919,   244,
01943      206,   597,    80,   261,   287,   206,   220,   537,   408,  -477,
01944      -96,   221,   334,   334,   334,   334,   199,   473,   474,   477,
01945      299,   467,   727,   917,   485,   294,   295,  -540,   260,   406,
01946      911,   426,   284,   206,   285,    80,  -406,   -90,   908,   206,
01947      206,   -88,   375,   303,  -479,   378,   952,  -541,   217,   580,
01948      397,  -478,   383,   206,   790,   420,  -279,   220,  -324,   385,
01949      334,   334,   518,  -477,  -547,   727,   388,   727,   -90,   379,
01950      -92,   -90,  -103,   389,   545,   -90,   440,  -102,   527,   199,
01951      206,   206,   941,   776,   709,   717,  -469,  -406,   602,  -406,
01952     -406,  -103,   406,   591,   727,   330,   206,   421,  -479,   568,
01953      570,   -92,   287,   971,   -92,  -478,  -472,  -480,   -92,  -279,
01954     -279,  -324,  -324,  -544,   109,   546,   440,   552,    80,   547,
01955      190,   390,   -95,  -547,   396,   518,   191,    80,   393,   199,
01956      398,   632,   418,  -469,   438,   439,   443,  -540,   414,  -469,
01957     -469,   527,   406,  -540,   261,   188,   206,    67,   331,   332,
01958      518,   416,   472,   214,  -472,   782,   779,  -541,  -481,  -472,
01959     -472,  -480,   559,  -541,   304,   527,   699,   701,  -272,   260,
01960      217,   541,   423,   644,  -547,   518,  -547,  -547,   553,   -68,
01961     -543,   394,   395,   428,   261,   394,   419,  -469,   587,   444,
01962      445,   527,   589,   434,   677,   590,  -280,   713,   437,   669,
01963      651,   671,   721,   457,   611,   612,   613,   614,  -472,   260,
01964      599,  -481,  -481,   461,   923,   601,   560,   934,   656,   -98,
01965      751,  -272,  -272,   902,   542,   543,   663,   199,   668,   904,
01966      442,   554,   555,   420,    80,   658,    80,   718,   659,   199,
01967      406,   464,   465,   721,   206,   611,   612,   613,   614,  -280,
01968     -280,   538,   406,   484,   707,  -102,   206,   -98,    80,   206,
01969     -100,   466,   663,   663,   644,   644,   654,   554,   555,   647,
01970      935,   936,   540,   518,   660,    67,   447,   572,   392,   656,
01971      694,   190,   304,   440,   600,   518,   -94,   191,   -90,   527,
01972      811,   -92,   251,   544,   206,   663,   655,   588,   674,   674,
01973      595,   527,   -83,   656,   662,   261,   188,   603,  -258,   757,
01974      660,   660,   686,   447,   822,   715,   714,   825,   637,   448,
01975      449,   450,   479,   807,   734,   769,   734,   646,   734,   792,
01976      260,   916,   794,   327,   328,   329,   649,   957,  -100,   756,
01977      700,   702,   654,   660,    80,   -97,   802,   -97,   447,   664,
01978      304,   261,   666,   410,   206,   206,   448,   449,   452,   670,
01979      206,   206,   411,   412,   778,   781,   720,   781,   447,   781,
01980      803,   804,   716,   763,   765,   737,   260,   656,   -89,   770,
01981      772,   447,   597,   732,   735,   455,   206,   738,   656,   206,
01982       80,   448,   449,   454,   740,  -259,   816,   817,    80,   325,
01983      326,   327,   328,   329,   644,    80,    80,   334,   826,   762,
01984      334,   448,   449,   458,   768,   893,   779,   896,   721,   813,
01985      611,   612,   613,   614,   448,   449,   756,   852,   748,   833,
01986      188,    80,    80,   384,   827,   834,   386,   387,   289,   290,
01987      291,   292,   293,    80,   836,   838,   848,   756,   793,   734,
01988      840,   734,   734,   855,   856,   722,   918,   858,   920,  -260,
01989      801,   723,   921,   845,   201,   201,   849,   867,   201,   866,
01990      875,   206,   871,   868,   876,   847,   742,   743,   851,   744,
01991      877,    80,   798,   879,   206,    44,    45,   881,    80,    80,
01992      843,   883,    80,   886,   233,   236,   890,   889,  -261,   201,
01993      201,   913,   914,   808,   951,   334,   953,   922,    80,   954,
01994      282,   283,   925,   927,   814,   594,   903,   734,   734,   930,
01995      734,   933,   734,   734,   965,   943,   945,   967,   343,   888,
01996     -543,   721,  -544,   611,   612,   613,   614,   678,   478,   358,
01997      924,   961,   810,   487,   376,   960,   973,   899,   377,   273,
01998        0,    80,   370,   912,   260,   674,   781,   861,   304,   891,
01999      819,   828,    80,   611,   612,   613,   614,     0,   615,   937,
02000        0,   938,   260,   317,   318,   617,     0,   939,   721,     0,
02001      611,   612,   613,   614,     0,     0,     0,   863,     0,   734,
02002      734,   734,     0,   734,   734,   618,     0,   721,   869,   611,
02003      612,   613,   614,   874,    80,     0,    80,   325,   326,   327,
02004      328,   329,    80,     0,    80,   722,   734,   734,   734,   734,
02005      199,   872,     0,     0,     0,     0,     0,     0,     0,   576,
02006      578,     0,     0,   406,   722,   668,   781,   206,   251,     0,
02007        0,   201,     0,     0,   201,   201,   282,     0,     0,   734,
02008      734,   734,   734,   656,     0,   518,   747,     0,   611,   612,
02009      613,   614,   201,   734,   201,   201,   518,     0,     0,   578,
02010        0,   734,   251,     0,   788,   610,     0,   611,   612,   613,
02011      614,     0,   527,     0,     0,     0,     0,     0,     0,     0,
02012        0,   797,     0,   615,     0,     0,     0,     0,     0,   616,
02013      617,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02014        0,     0,   615,     0,     0,     0,   645,     0,   616,   617,
02015      618,     0,     0,   619,     0,     0,     0,     0,     0,     0,
02016        0,     0,     0,   104,     0,   104,     0,     0,     0,   618,
02017        0,     0,   619,     0,     0,     0,   201,     0,     0,   748,
02018        0,   486,   489,   490,   491,   492,   493,   494,   495,   496,
02019      497,   498,   499,   500,   501,   502,   503,   504,   505,   506,
02020      507,   508,   509,   510,   511,   512,   513,   514,   487,   201,
02021      104,   853,     0,   854,   262,   610,     0,   611,   612,   613,
02022      614,     0,     0,   862,     0,     0,     0,     0,   864,     0,
02023        0,     0,     0,     0,     0,     0,   262,     0,     0,     0,
02024        0,   107,     0,   107,     0,     0,     0,   708,   347,   356,
02025      356,   356,   615,     0,     0,     0,   569,   571,   616,   617,
02026        0,     0,     0,     0,     0,     0,   575,   201,   201,     0,
02027        0,     0,   201,     0,   569,   571,   201,     0,     0,   618,
02028        0,     0,   619,   905,   906,     0,     0,     0,   107,   736,
02029        0,   739,   263,   593,     0,     0,   304,   610,   598,   611,
02030      612,   613,   614,     0,     0,   620,     0,   201,     0,     0,
02031      201,   317,   318,    77,   263,    77,   759,     0,     0,     0,
02032        0,     0,   201,     0,     0,     0,   348,   357,   357,     0,
02033      106,     0,   106,     0,   615,     0,   775,     0,     0,   940,
02034      616,   617,   638,   639,   324,   325,   326,   327,   328,   329,
02035        0,     0,     0,     0,   201,     0,   104,     0,     0,     0,
02036       77,   618,     0,     0,   619,  -565,     0,   962,     0,   963,
02037        0,     0,     0,  -565,  -565,  -565,     0,   106,  -565,  -565,
02038     -565,   747,  -565,   611,   612,   613,   614,   695,   104,     0,
02039      809,     0,  -565,     0,     0,     0,     0,     0,   344,   104,
02040      104,     0,  -565,  -565,     0,  -565,  -565,  -565,  -565,  -565,
02041        0,     0,   835,     0,   837,   839,   201,     0,   615,   262,
02042      201,   304,     0,     0,   616,   617,     0,     0,   841,     0,
02043        0,     0,   201,     0,   107,     0,   317,   318,     0,     0,
02044        0,     0,     0,     0,     0,   618,     0,     0,   619,   104,
02045     -565,     0,     0,     0,   104,   201,     0,     0,     0,   857,
02046        0,   104,   262,     0,     0,     0,   107,   322,   323,   324,
02047      325,   326,   327,   328,   329,     0,     0,   107,   107,     0,
02048      878,   880,     0,   882,     0,   884,   885,     0,     0,     0,
02049        0,     0,     0,     0,   104,     0,     0,   263,     0,     0,
02050        0,     0,  -565,     0,  -565,     0,    77,   217,  -565,     0,
02051     -565,     0,  -565,     0,     0,     0,     0,     0,     0,     0,
02052        0,     0,     0,   106,   201,     0,     0,   107,   761,     0,
02053      764,   766,   107,     0,     0,     0,   771,   773,    77,   107,
02054      263,     0,     0,     0,   201,     0,     0,     0,     0,    77,
02055       77,     0,   926,   928,   929,   106,   931,   932,     0,     0,
02056        0,     0,     0,     0,     0,     0,   106,   106,     0,     0,
02057        0,     0,   107,     0,     0,     0,     0,   104,     0,   944,
02058      946,   947,   948,   805,     0,     0,   104,     0,   764,   766,
02059        0,   771,   773,     0,     0,     0,     0,     0,   201,    77,
02060        0,     0,     0,   262,    77,     0,     0,     0,     0,     0,
02061        0,    77,   966,   968,   969,   970,   106,     0,     0,     0,
02062        0,   106,     0,     0,     0,     0,   972,     0,   106,     0,
02063        0,     0,     0,     0,   974,     0,   201,     0,     0,     0,
02064      842,     0,     0,   262,    77,     0,     0,   844,     0,     0,
02065        0,     0,     0,     0,     0,   107,     0,     0,     0,     0,
02066        0,   106,     0,     0,   107,     0,     0,   201,     0,     0,
02067        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02068        0,   263,     0,     0,     0,   844,     0,     0,     0,     0,
02069        0,     0,     0,   104,     0,   104,     0,     0,     0,     0,
02070        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02071      304,  -566,  -566,  -566,  -566,   309,   310,   104,     0,  -566,
02072     -566,   263,     0,     0,     0,   317,   318,    77,     0,     0,
02073        0,     0,     0,     0,     0,     0,    77,     0,     0,     0,
02074        0,     0,     0,     0,   106,     0,     0,     0,     0,     0,
02075      650,     0,     0,   106,   320,   321,   322,   323,   324,   325,
02076      326,   327,   328,   329,   262,     0,     0,     0,     0,     0,
02077        0,   107,     0,   107,   304,   305,   306,   307,   308,   309,
02078      310,   311,   312,   313,   314,   315,   316,     0,     0,   317,
02079      318,     0,     0,     0,     0,   107,     0,     0,     0,     0,
02080        0,     0,     0,   104,     0,     0,     0,     0,     0,     0,
02081      262,     0,     0,   201,     0,     0,   319,     0,   320,   321,
02082      322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
02083        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02084        0,     0,   263,    77,     0,    77,  -237,     0,     0,   104,
02085        0,     0,     0,     0,     0,     0,     0,   104,     0,     0,
02086      106,     0,   106,     0,   104,   104,     0,    77,     0,     0,
02087        0,     0,     0,   746,     0,     0,     0,     0,     0,     0,
02088        0,   107,     0,     0,   106,     0,     0,     0,   263,     0,
02089      104,   104,     0,     0,   515,   516,     0,     0,   517,     0,
02090        0,     0,   104,     0,     0,     0,     0,     0,   155,   156,
02091      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02092      165,     0,     0,   166,   167,   168,   169,   107,     0,     0,
02093        0,     0,     0,     0,     0,   107,     0,   170,     0,     0,
02094      104,     0,   107,   107,     0,     0,     0,   104,   104,     0,
02095        0,   104,     0,    77,   171,   172,   173,   174,   175,   176,
02096      177,   178,   179,   180,     0,   181,   182,   104,   107,   107,
02097      106,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02098      107,     0,     0,   183,   217,     0,     0,     0,   356,     0,
02099        0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
02100        0,     0,     0,     0,     0,     0,   900,    77,     0,     0,
02101      104,     0,     0,     0,    77,    77,   106,     0,   107,     0,
02102        0,   104,     0,     0,   106,   107,   107,     0,     0,   107,
02103        0,   106,   106,     0,     0,     0,     0,     0,     0,     0,
02104       77,    77,     0,     0,     0,   107,     0,     0,     0,     0,
02105        0,     0,    77,     0,     0,     0,     0,   106,   106,     0,
02106        0,     0,     0,   104,     0,   104,   357,     0,     0,   106,
02107        0,   104,     0,   104,     0,     0,     0,   304,   305,   306,
02108      307,   308,   309,   310,   901,     0,   313,   314,   107,     0,
02109       77,     0,   317,   318,     0,     0,     0,    77,    77,   107,
02110        0,    77,     0,   235,   235,     0,     0,   106,   235,   235,
02111      235,     0,     0,     0,   106,   106,     0,    77,   106,     0,
02112      235,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02113      329,     0,   235,     0,   106,     0,     0,     0,     0,     0,
02114        0,   107,     0,   107,   235,   235,   235,     0,     0,   107,
02115        0,   107,     0,     0,     0,     0,   898,     0,     0,     0,
02116       77,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02117        0,    77,     0,     0,     0,     0,     0,   106,     0,     0,
02118        0,     0,     0,     0,     0,     0,     0,     0,   106,     0,
02119        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02120        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02121        0,     0,     0,    77,     0,    77,     0,     0,     0,     0,
02122        0,    77,     0,    77,     0,     0,     0,     0,     0,     0,
02123      106,     0,   106,     0,     0,     0,     0,     0,   106,     0,
02124      106,     0,   523,   524,     0,     0,   525,     0,     0,     0,
02125      235,     0,     0,   235,   235,   235,   155,   156,   157,   158,
02126      159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
02127        0,   166,   167,   168,   169,     0,     0,   304,   305,   306,
02128      307,   308,   309,   310,   311,   170,   313,   314,     0,     0,
02129        0,     0,   317,   318,     0,     0,     0,     0,     0,     0,
02130        0,     0,   171,   172,   173,   174,   175,   176,   177,   178,
02131      179,   180,     0,   181,   182,   235,     0,     0,     0,     0,
02132        0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02133      329,   183,   217,     0,     0,     0,     0,     0,     0,     0,
02134        0,     0,     0,     0,   304,   305,   306,   307,   308,   309,
02135      310,   311,   312,   313,   314,  -566,  -566,     0,   235,   317,
02136      318,   235,   235,   235,   235,   235,   235,   235,   235,   235,
02137      235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
02138      235,   235,   235,   235,   235,   235,   235,     0,   320,   321,
02139      322,   323,   324,   325,   326,   327,   328,   329,   581,   516,
02140        0,     0,   582,     0,     0,     0,     0,     0,     0,     0,
02141        0,     0,   155,   156,   157,   158,   159,   160,   161,   162,
02142      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02143      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02144        0,   170,     0,     0,     0,   235,   235,   235,     0,     0,
02145        0,     0,     0,   235,   235,   235,     0,     0,   171,   172,
02146      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02147      182,     0,   235,     0,     0,     0,     0,   235,     0,     0,
02148        0,     0,     0,     0,     0,     0,   235,   183,   217,   235,
02149        0,     0,     0,     0,     0,     0,     0,     0,     0,   235,
02150        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02151        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02152        0,   235,   235,     0,  -565,     4,     0,     5,     6,     7,
02153        8,     9,     0,   235,     0,    10,    11,     0,     0,   235,
02154       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02155        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02156       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02157       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
02158       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02159       46,    47,     0,     0,     0,   235,     0,     0,     0,     0,
02160        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02161       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02162        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02163        0,     0,     0,     0,   235,     0,     0,     0,     0,     0,
02164        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02165        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02166      235,     0,     0,     0,     0,     0,     0,     0,     0,  -565,
02167        0,  -565,     0,     0,     0,     0,     0,     0,     0,     0,
02168        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02169        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02170        0,     0,     0,   235,     0,     0,   235,   235,     0,     0,
02171        0,  -279,     0,     0,     0,     0,     0,     0,     0,  -279,
02172     -279,  -279,     0,   235,  -279,  -279,  -279,     0,  -279,     0,
02173        0,     0,     0,     0,     0,     0,     0,     0,  -279,  -279,
02174     -279,     0,     0,     0,     0,     0,     0,     0,  -279,  -279,
02175        0,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,     0,
02176        0,     0,   235,     0,     0,     0,     0,   235,   235,     0,
02177      235,   235,     0,     0,     0,     0,     0,   235,     0,  -279,
02178     -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02179     -279,  -279,     0,     0,  -279,  -279,  -279,     0,   711,  -279,
02180        0,     0,     0,     0,     0,  -279,     0,     0,     0,     0,
02181        0,     0,     0,     0,     0,   235,     0,     0,  -279,   235,
02182     -101,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02183     -279,  -279,  -279,     0,     0,     0,     0,     0,     0,     0,
02184        0,     0,     0,     0,     0,     0,   235,     0,  -279,  -279,
02185     -279,  -279,  -405,     0,  -279,  -279,  -279,     0,  -279,     0,
02186     -405,  -405,  -405,     0,   235,  -405,  -405,  -405,     0,  -405,
02187        0,     0,     0,     0,     0,     0,     0,     0,  -405,  -405,
02188     -405,     0,     0,     0,   235,     0,     0,     0,     0,  -405,
02189     -405,     0,  -405,  -405,  -405,  -405,  -405,     0,     0,     0,
02190        0,     0,   235,   304,   305,   306,   307,   308,   309,   310,
02191      311,   312,   313,   314,   315,   316,     0,     0,   317,   318,
02192     -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,
02193     -405,  -405,  -405,     0,     0,  -405,  -405,  -405,     0,     0,
02194     -405,     0,     0,     0,     0,   319,  -405,   320,   321,   322,
02195      323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
02196        0,     0,  -405,     0,  -405,  -405,  -405,  -405,  -405,  -405,
02197     -405,  -405,  -405,  -405,     0,     0,     0,     0,     0,     0,
02198        0,     0,   221,     0,     0,     0,     0,     0,  -405,  -405,
02199     -405,  -405,  -405,  -273,   217,  -405,  -405,  -405,     0,  -405,
02200        0,  -273,  -273,  -273,     0,     0,  -273,  -273,  -273,     0,
02201     -273,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02202     -273,  -273,  -273,     0,     0,     0,     0,     0,     0,     0,
02203     -273,  -273,     0,  -273,  -273,  -273,  -273,  -273,     0,     0,
02204        0,     0,     0,     0,   304,   305,   306,   307,   308,   309,
02205      310,   311,   312,   313,   314,   315,   316,     0,     0,   317,
02206      318,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
02207     -273,  -273,  -273,  -273,     0,     0,  -273,  -273,  -273,     0,
02208        0,  -273,     0,     0,     0,     0,   319,  -273,   320,   321,
02209      322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
02210     -273,     0,     0,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
02211     -273,  -273,  -273,  -273,  -273,     0,     0,     0,     0,     0,
02212        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02213     -273,  -273,  -273,  -273,  -565,     0,  -273,  -273,  -273,     0,
02214     -273,     0,  -565,  -565,  -565,     0,     0,  -565,  -565,  -565,
02215        0,  -565,     0,     0,     0,     0,     0,     0,     0,     0,
02216     -565,  -565,  -565,     0,     0,     0,     0,     0,     0,     0,
02217        0,  -565,  -565,     0,  -565,  -565,  -565,  -565,  -565,     0,
02218        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02219        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02220        0,     0,  -565,  -565,  -565,  -565,  -565,  -565,  -565,  -565,
02221     -565,  -565,  -565,  -565,  -565,     0,     0,  -565,  -565,  -565,
02222        0,     0,  -565,     0,     0,     0,     0,     0,  -565,     0,
02223        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02224        0,     0,     0,     0,  -565,     0,  -565,  -565,  -565,  -565,
02225     -565,  -565,  -565,  -565,  -565,  -565,     0,     0,     0,     0,
02226        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02227     -565,  -565,  -565,  -565,  -565,  -286,   217,  -565,  -565,  -565,
02228        0,  -565,     0,  -286,  -286,  -286,     0,     0,  -286,  -286,
02229     -286,     0,  -286,     0,     0,     0,     0,     0,     0,     0,
02230        0,     0,  -286,  -286,     0,     0,     0,     0,     0,     0,
02231        0,     0,  -286,  -286,     0,  -286,  -286,  -286,  -286,  -286,
02232        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02233        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02234        0,     0,     0,  -286,  -286,  -286,  -286,  -286,  -286,  -286,
02235     -286,  -286,  -286,  -286,  -286,  -286,     0,     0,  -286,  -286,
02236     -286,     0,     0,  -286,     0,     0,     0,     0,     0,  -286,
02237        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02238        0,     0,     0,     0,     0,  -286,     0,  -286,  -286,  -286,
02239     -286,  -286,  -286,  -286,  -286,  -286,  -286,     0,     0,     0,
02240        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02241        0,     0,  -286,  -286,  -286,  -286,  -547,   214,  -286,  -286,
02242     -286,     0,  -286,     0,  -547,  -547,  -547,     0,     0,     0,
02243     -547,  -547,     0,  -547,     0,     0,     0,     0,     0,     0,
02244        0,     0,  -547,     0,     0,     0,     0,     0,     0,     0,
02245        0,     0,     0,  -547,  -547,     0,  -547,  -547,  -547,  -547,
02246     -547,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02247        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02248        0,     0,     0,     0,  -547,  -547,  -547,  -547,  -547,  -547,
02249     -547,  -547,  -547,  -547,  -547,  -547,  -547,     0,     0,  -547,
02250     -547,  -547,  -279,   652,     0,     0,     0,     0,     0,     0,
02251     -279,  -279,  -279,     0,     0,     0,  -279,  -279,     0,  -279,
02252        0,     0,     0,     0,     0,   -99,  -547,     0,  -547,  -547,
02253     -547,  -547,  -547,  -547,  -547,  -547,  -547,  -547,     0,  -279,
02254     -279,     0,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,
02255        0,     0,  -547,  -547,  -547,  -547,   -91,     0,     0,  -547,
02256        0,  -547,     0,  -547,     0,     0,     0,     0,     0,     0,
02257     -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02258     -279,  -279,  -279,     0,     0,  -279,  -279,  -279,     0,   653,
02259        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02260        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02261        0,  -101,  -279,     0,  -279,  -279,  -279,  -279,  -279,  -279,
02262     -279,  -279,  -279,  -279,     0,     0,     0,     0,     0,     0,
02263        0,     0,     0,     0,     0,     0,     0,     0,     0,  -279,
02264     -279,  -279,   -93,     0,     0,  -279,     0,  -279,   238,  -279,
02265        5,     6,     7,     8,     9,  -565,  -565,  -565,    10,    11,
02266        0,     0,  -565,    12,     0,    13,    14,    15,    16,    17,
02267       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02268       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02269        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02270       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02271       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02272        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02273        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02274       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02275       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02276        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02277       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02278        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02279        0,     0,  -565,   238,  -565,     5,     6,     7,     8,     9,
02280        0,     0,  -565,    10,    11,     0,  -565,  -565,    12,     0,
02281       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02282        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02283        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02284       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02285        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02286        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02287        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02288        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02289       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02290        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02291        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02292        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02293        0,     0,     0,     0,     0,     0,     0,  -565,   238,  -565,
02294        5,     6,     7,     8,     9,     0,     0,  -565,    10,    11,
02295        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02296       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02297       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02298        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02299       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02300       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02301        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02302        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02303       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02304       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02305        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02306       62,    63,     0,     0,     0,     0,     0,     0,     4,     0,
02307        5,     6,     7,     8,     9,     0,     0,     0,    10,    11,
02308        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02309       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02310       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02311        0,     0,    28,    29,    30,    31,    32,    33,    34,    35,
02312       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02313       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02314        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02315        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02316       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02317       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02318        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02319       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02320        0,     0,     0,     0,  -565,     0,     0,     0,     0,     0,
02321        0,     0,  -565,   238,  -565,     5,     6,     7,     8,     9,
02322        0,     0,  -565,    10,    11,     0,     0,  -565,    12,     0,
02323       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02324        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02325        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02326       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02327        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02328        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02329        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02330        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02331       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02332        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02333        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02334        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02335        0,  -565,  -565,    10,    11,     0,     0,  -565,    12,  -565,
02336       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02337        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02338        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02339       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02340        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02341        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02342        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02343        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02344       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02345        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02346        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02347        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02348        0,     0,     0,    10,    11,     0,     0,  -565,    12,  -565,
02349       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02350        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02351        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02352       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02353        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02354        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02355        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02356        0,   239,    50,     0,    51,    52,     0,    53,     0,    54,
02357       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02358        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02359        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02360        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02361        0,     0,     0,    10,    11,  -565,     0,  -565,    12,  -565,
02362       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02363        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02364        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02365       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02366        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02367        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02368        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02369        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02370       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02371        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02372        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02373        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02374        0,     0,     0,    10,    11,  -565,     0,  -565,    12,  -565,
02375       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02376        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02377        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02378       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02379        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02380        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02381        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02382        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02383       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02384        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02385        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02386        0,     0,     0,     0,     0,     0,     0,     0,     0,  -565,
02387        0,     0,     0,     0,     0,     0,     0,  -565,   238,  -565,
02388        5,     6,     7,     8,     9,     0,     0,  -565,    10,    11,
02389        0,     0,     0,    12,     0,    13,    14,    15,    16,    17,
02390       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02391       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02392        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02393       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02394       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02395        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02396        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02397       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02398       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02399        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02400       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02401        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02402        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02403       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02404       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02405        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02406       36,    37,    38,    39,    40,   193,    41,    42,     0,    43,
02407       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02408        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02409        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02410       52,     0,   196,   197,    54,    55,    56,    57,    58,    59,
02411       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02412        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02413      198,    63,    12,     0,    13,    14,    15,    16,    17,    18,
02414       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02415       24,    25,    26,     0,   221,    27,     0,     0,     0,     0,
02416        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02417       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02418       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02419        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02420        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02421        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02422        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02423        0,     0,     0,     0,     0,     0,     0,     0,    61,    62,
02424       63,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02425        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02426        0,   284,    12,   285,    13,    14,    15,    16,    17,    18,
02427       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02428       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02429        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02430       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02431       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02432        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02433        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02434        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02435        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02436        7,     8,     9,     0,     0,     0,    10,    11,    61,    62,
02437       63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02438        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02439       25,    26,     0,   221,    27,     0,     0,     0,     0,     0,
02440       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
02441       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02442        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02443        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02444        0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
02445       53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02446        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02447        0,     0,     0,     0,     0,     0,     0,    61,    62,    63,
02448        0,     0,     0,     0,     0,     0,     5,     6,     7,     8,
02449        9,     0,     0,     0,    10,    11,     0,     0,     0,    12,
02450      466,    13,    14,    15,    16,    17,    18,    19,     0,     0,
02451        0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
02452        0,     0,    27,     0,     0,     0,     0,     0,    28,    29,
02453        0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
02454       40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
02455       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02456        0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
02457        0,     0,    49,    50,     0,    51,    52,     0,    53,     0,
02458       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02459        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02460        0,     0,     0,     0,     0,    61,    62,    63,     0,     0,
02461        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02462        0,     0,     0,     0,     0,     0,     0,     0,   466,   111,
02463      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
02464      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
02465      132,   133,   134,     0,     0,     0,   135,   136,   137,   359,
02466      360,   361,   362,   142,   143,   144,     0,     0,     0,     0,
02467        0,   145,   146,   147,   148,   363,   364,   365,   366,   153,
02468       37,    38,   367,    40,     0,     0,     0,     0,     0,     0,
02469        0,     0,   155,   156,   157,   158,   159,   160,   161,   162,
02470      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02471      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02472        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
02473        0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
02474      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02475      182,     0,     0,     0,     0,     0,  -540,  -540,  -540,     0,
02476     -540,     0,     0,     0,  -540,  -540,     0,   183,   368,  -540,
02477        0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,     0,  -540,
02478        0,     0,     0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,
02479        0,     0,  -540,     0,     0,     0,     0,     0,     0,  -540,
02480        0,     0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,  -540,
02481     -540,  -540,  -540,  -540,     0,  -540,  -540,  -540,     0,  -540,
02482     -540,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02483        0,     0,     0,     0,     0,     0,     0,     0,     0,  -540,
02484        0,     0,  -540,  -540,     0,  -540,  -540,     0,  -540,  -540,
02485     -540,  -540,  -540,  -540,  -540,  -540,  -540,     0,     0,     0,
02486        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02487        0,     0,     0,     0,     0,  -540,  -540,  -540,     0,     0,
02488        0,     0,     0,  -541,  -541,  -541,     0,  -541,     0,  -540,
02489        0,  -541,  -541,     0,     0,  -540,  -541,     0,  -541,  -541,
02490     -541,  -541,  -541,  -541,  -541,     0,  -541,     0,     0,     0,
02491     -541,  -541,  -541,  -541,  -541,  -541,  -541,     0,     0,  -541,
02492        0,     0,     0,     0,     0,     0,  -541,     0,     0,  -541,
02493     -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
02494     -541,     0,  -541,  -541,  -541,     0,  -541,  -541,     0,     0,
02495        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02496        0,     0,     0,     0,     0,     0,  -541,     0,     0,  -541,
02497     -541,     0,  -541,  -541,     0,  -541,  -541,  -541,  -541,  -541,
02498     -541,  -541,  -541,  -541,     0,     0,     0,     0,     0,     0,
02499        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02500        0,     0,  -541,  -541,  -541,     0,     0,     0,     0,     0,
02501     -543,  -543,  -543,     0,  -543,     0,  -541,     0,  -543,  -543,
02502        0,     0,  -541,  -543,     0,  -543,  -543,  -543,  -543,  -543,
02503     -543,  -543,     0,     0,     0,     0,     0,  -543,  -543,  -543,
02504     -543,  -543,  -543,  -543,     0,     0,  -543,     0,     0,     0,
02505        0,     0,     0,  -543,     0,     0,  -543,  -543,  -543,  -543,
02506     -543,  -543,  -543,  -543,  -543,  -543,  -543,  -543,     0,  -543,
02507     -543,  -543,     0,  -543,  -543,     0,     0,     0,     0,     0,
02508        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02509        0,     0,     0,  -543,   710,     0,  -543,  -543,     0,  -543,
02510     -543,     0,  -543,  -543,  -543,  -543,  -543,  -543,  -543,  -543,
02511     -543,     0,     0,     0,     0,     0,   -99,     0,     0,     0,
02512        0,     0,     0,     0,  -545,  -545,  -545,     0,  -545,  -543,
02513     -543,  -543,  -545,  -545,     0,     0,     0,  -545,     0,  -545,
02514     -545,  -545,  -545,  -545,  -545,  -545,     0,     0,     0,  -543,
02515        0,  -545,  -545,  -545,  -545,  -545,  -545,  -545,     0,     0,
02516     -545,     0,     0,     0,     0,     0,     0,  -545,     0,     0,
02517     -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,
02518     -545,  -545,     0,  -545,  -545,  -545,     0,  -545,  -545,     0,
02519        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02520        0,     0,     0,     0,     0,     0,     0,  -545,     0,     0,
02521     -545,  -545,     0,  -545,  -545,     0,  -545,  -545,  -545,  -545,
02522     -545,  -545,  -545,  -545,  -545,     0,     0,     0,     0,     0,
02523        0,     0,     0,     0,     0,     0,     0,     0,  -546,  -546,
02524     -546,     0,  -546,  -545,  -545,  -545,  -546,  -546,     0,     0,
02525        0,  -546,     0,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
02526        0,     0,     0,  -545,     0,  -546,  -546,  -546,  -546,  -546,
02527     -546,  -546,     0,     0,  -546,     0,     0,     0,     0,     0,
02528        0,  -546,     0,     0,  -546,  -546,  -546,  -546,  -546,  -546,
02529     -546,  -546,  -546,  -546,  -546,  -546,     0,  -546,  -546,  -546,
02530        0,  -546,  -546,     0,     0,     0,     0,     0,     0,     0,
02531        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02532        0,  -546,     0,     0,  -546,  -546,     0,  -546,  -546,     0,
02533     -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,     0,
02534        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02535        0,     0,     0,     0,     0,     0,     0,  -546,  -546,  -546,
02536        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02537        0,     0,     0,     0,     0,     0,     0,  -546,   111,   112,
02538      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
02539      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
02540      133,   134,     0,     0,     0,   135,   136,   137,   138,   139,
02541      140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
02542      145,   146,   147,   148,   149,   150,   151,   152,   153,   266,
02543      267,   154,   268,     0,     0,     0,     0,     0,     0,     0,
02544        0,   155,   156,   157,   158,   159,   160,   161,   162,   163,
02545        0,     0,   164,   165,     0,     0,   166,   167,   168,   169,
02546        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02547      170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02548        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
02549      174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
02550        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02551        0,     0,     0,     0,     0,     0,   183,   111,   112,   113,
02552      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
02553      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02554      134,     0,     0,     0,   135,   136,   137,   138,   139,   140,
02555      141,   142,   143,   144,     0,     0,     0,     0,     0,   145,
02556      146,   147,   148,   149,   150,   151,   152,   153,   223,     0,
02557      154,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02558      155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
02559        0,   164,   165,     0,     0,   166,   167,   168,   169,     0,
02560        0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
02561        0,     0,    55,     0,     0,     0,     0,     0,     0,     0,
02562        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
02563      175,   176,   177,   178,   179,   180,     0,   181,   182,     0,
02564        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02565        0,     0,     0,     0,     0,   183,   111,   112,   113,   114,
02566      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
02567      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
02568        0,     0,     0,   135,   136,   137,   138,   139,   140,   141,
02569      142,   143,   144,     0,     0,     0,     0,     0,   145,   146,
02570      147,   148,   149,   150,   151,   152,   153,     0,     0,   154,
02571        0,     0,     0,     0,     0,     0,     0,     0,     0,   155,
02572      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02573      164,   165,     0,     0,   166,   167,   168,   169,     0,     0,
02574        0,     0,     0,     0,     0,     0,     0,     0,   170,     0,
02575        0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
02576        0,     0,     0,     0,     0,   171,   172,   173,   174,   175,
02577      176,   177,   178,   179,   180,     0,   181,   182,     0,     0,
02578        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02579        0,     0,     0,     0,   183,   111,   112,   113,   114,   115,
02580      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
02581      126,   127,   128,   129,   130,   131,   132,   133,   134,     0,
02582        0,     0,   135,   136,   137,   138,   139,   140,   141,   142,
02583      143,   144,     0,     0,     0,     0,     0,   145,   146,   147,
02584      148,   149,   150,   151,   152,   153,     0,     0,   154,     0,
02585        0,     0,     0,     0,     0,     0,     0,     0,   155,   156,
02586      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02587      165,     0,     0,   166,   167,   168,   169,     0,     0,     0,
02588        0,     0,     0,     0,     0,     0,     0,   170,     0,     0,
02589        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02590        0,     0,     0,     0,   171,   172,   173,   174,   175,   176,
02591      177,   178,   179,   180,     0,   181,   182,     0,     0,     5,
02592        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02593        0,     0,    12,   183,    13,    14,    15,   228,   229,    18,
02594       19,     0,     0,     0,     0,     0,   230,   231,   232,    23,
02595       24,    25,    26,     0,     0,   192,     0,     0,     0,     0,
02596        0,     0,   255,     0,     0,    32,    33,    34,    35,    36,
02597       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02598       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02599        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02600        0,     0,   256,     0,     0,   195,    50,     0,    51,    52,
02601        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02602        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02603        0,     5,     6,     7,     0,     9,     0,     0,   257,    10,
02604       11,     0,     0,     0,    12,     0,    13,    14,    15,   228,
02605      229,    18,    19,     0,     0,     0,   258,     0,   230,   231,
02606      232,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02607        0,     0,     0,     0,   255,     0,     0,    32,    33,    34,
02608       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02609       43,    44,    45,     0,     0,     0,     0,     0,     0,     0,
02610        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02611        0,     0,     0,     0,   256,     0,     0,   195,    50,     0,
02612       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02613       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02614        0,     0,     0,     5,     6,     7,     8,     9,     0,     0,
02615      257,    10,    11,     0,     0,     0,    12,     0,    13,    14,
02616       15,    16,    17,    18,    19,     0,     0,     0,   482,     0,
02617       20,    21,    22,    23,    24,    25,    26,     0,     0,    27,
02618        0,     0,     0,     0,     0,    28,    29,    30,    31,    32,
02619       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02620       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02621        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02622        0,     0,     0,     0,     0,     0,    48,     0,     0,    49,
02623       50,     0,    51,    52,     0,    53,     0,    54,    55,    56,
02624       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02625        0,     0,     5,     6,     7,     8,     9,     0,     0,     0,
02626       10,    11,    61,    62,    63,    12,     0,    13,    14,    15,
02627       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02628       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02629        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02630       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02631        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02632        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02633        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02634        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02635       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02636        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02637       11,    61,    62,    63,    12,     0,    13,    14,    15,    16,
02638       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02639       22,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02640        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02641       35,    36,    37,    38,    39,    40,   193,    41,    42,     0,
02642       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02643        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02644        0,     0,     0,     0,   194,     0,     0,   195,    50,     0,
02645       51,    52,     0,   196,   197,    54,    55,    56,    57,    58,
02646       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02647        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02648       61,   198,    63,    12,     0,    13,    14,    15,   228,   229,
02649       18,    19,     0,     0,     0,     0,     0,   230,   231,   232,
02650       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02651        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02652       36,    37,    38,    39,    40,   193,    41,    42,     0,    43,
02653       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02654        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02655        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02656       52,     0,   577,   197,    54,    55,    56,    57,    58,    59,
02657       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02658        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02659      198,    63,    12,     0,    13,    14,    15,   228,   229,    18,
02660       19,     0,     0,     0,     0,     0,   230,   231,   232,    23,
02661       24,    25,    26,     0,     0,   192,     0,     0,     0,     0,
02662        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02663       37,    38,    39,    40,   193,    41,    42,     0,    43,    44,
02664       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02665        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02666        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02667        0,   196,     0,    54,    55,    56,    57,    58,    59,    60,
02668        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02669        7,     0,     9,     0,     0,     0,    10,    11,    61,   198,
02670       63,    12,     0,    13,    14,    15,   228,   229,    18,    19,
02671        0,     0,     0,     0,     0,   230,   231,   232,    23,    24,
02672       25,    26,     0,     0,   192,     0,     0,     0,     0,     0,
02673        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02674       38,    39,    40,   193,    41,    42,     0,    43,    44,    45,
02675        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02676        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02677        0,   194,     0,     0,   195,    50,     0,    51,    52,     0,
02678        0,   197,    54,    55,    56,    57,    58,    59,    60,     0,
02679        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02680        0,     9,     0,     0,     0,    10,    11,    61,   198,    63,
02681       12,     0,    13,    14,    15,   228,   229,    18,    19,     0,
02682        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02683       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02684       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02685       39,    40,   193,    41,    42,     0,    43,    44,    45,     0,
02686       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02687        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02688      194,     0,     0,   195,    50,     0,    51,    52,     0,   577,
02689        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02690        0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02691        9,     0,     0,     0,    10,    11,    61,   198,    63,    12,
02692        0,    13,    14,    15,   228,   229,    18,    19,     0,     0,
02693        0,     0,     0,   230,   231,   232,    23,    24,    25,    26,
02694        0,     0,   192,     0,     0,     0,     0,     0,     0,    29,
02695        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02696       40,   193,    41,    42,     0,    43,    44,    45,     0,    46,
02697       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02698        0,     0,     0,     0,     0,     0,     0,     0,     0,   194,
02699        0,     0,   195,    50,     0,    51,    52,     0,     0,     0,
02700       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02701        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02702        0,     0,     0,    10,    11,    61,   198,    63,    12,     0,
02703       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02704        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02705        0,   192,     0,     0,     0,     0,     0,     0,    29,     0,
02706        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02707        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02708        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02709        0,     0,     0,     0,     0,     0,     0,     0,   194,     0,
02710        0,   195,    50,     0,    51,    52,     0,   476,     0,    54,
02711       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02712        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02713        0,     0,    10,    11,    61,   198,    63,    12,     0,    13,
02714       14,    15,   228,   229,    18,    19,     0,     0,     0,     0,
02715        0,   230,   231,   232,    23,    24,    25,    26,     0,     0,
02716      192,     0,     0,     0,     0,     0,     0,    29,     0,     0,
02717       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02718       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02719        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02720        0,     0,     0,     0,     0,     0,     0,   194,     0,     0,
02721      195,    50,     0,    51,    52,     0,   196,     0,    54,    55,
02722       56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
02723        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02724        0,    10,    11,    61,   198,    63,    12,     0,    13,    14,
02725       15,   228,   229,    18,    19,     0,     0,     0,     0,     0,
02726      230,   231,   232,    23,    24,    25,    26,     0,     0,   192,
02727        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02728       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02729       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02730        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02731        0,     0,     0,     0,     0,     0,   194,     0,     0,   195,
02732       50,     0,    51,    52,     0,   758,     0,    54,    55,    56,
02733       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02734        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02735       10,    11,    61,   198,    63,    12,     0,    13,    14,    15,
02736      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02737      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02738        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02739       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02740        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02741        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02742        0,     0,     0,     0,     0,   194,     0,     0,   195,    50,
02743        0,    51,    52,     0,   476,     0,    54,    55,    56,    57,
02744       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02745        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02746       11,    61,   198,    63,    12,     0,    13,    14,    15,   228,
02747      229,    18,    19,     0,     0,     0,     0,     0,   230,   231,
02748      232,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02749        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02750       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02751       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02752        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02753        0,     0,     0,     0,   194,     0,     0,   195,    50,     0,
02754       51,    52,     0,   577,     0,    54,    55,    56,    57,    58,
02755       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02756        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02757       61,   198,    63,    12,     0,    13,    14,    15,   228,   229,
02758       18,    19,     0,     0,     0,     0,     0,   230,   231,   232,
02759       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02760        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02761       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02762       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02763        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02764        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02765       52,     0,     0,     0,    54,    55,    56,    57,    58,    59,
02766       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02767        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02768      198,    63,    12,     0,    13,    14,    15,    16,    17,    18,
02769       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02770       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02771        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02772       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02773       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02774        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02775        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02776        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02777        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02778        7,     0,     9,     0,     0,     0,    10,    11,    61,    62,
02779       63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02780        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02781       25,    26,     0,     0,   192,     0,     0,     0,     0,     0,
02782        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02783       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02784        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02785        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02786        0,   194,     0,     0,   195,    50,     0,    51,    52,     0,
02787        0,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02788        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02789        0,     9,     0,     0,     0,    10,    11,    61,   198,    63,
02790       12,     0,    13,    14,    15,   228,   229,    18,    19,     0,
02791        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02792       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02793      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02794       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02795        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02796        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02797      256,     0,     0,   300,    50,     0,    51,    52,     0,   301,
02798        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02799        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02800       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02801      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02802      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02803        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02804       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02805        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02806        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02807        0,     0,     0,     0,     0,   342,     0,     0,    49,    50,
02808        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02809       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02810        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02811       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02812        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02813       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02814      255,     0,     0,    32,    33,    34,   349,    36,    37,    38,
02815      350,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02816        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02817        0,     0,     0,     0,     0,     0,     0,   351,     0,     0,
02818      352,     0,     0,   195,    50,     0,    51,    52,     0,     0,
02819        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02820        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02821       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02822      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02823      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02824        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02825       34,   349,    36,    37,    38,   350,    40,     0,    41,    42,
02826        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02827        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02828        0,     0,     0,     0,     0,   352,     0,     0,   195,    50,
02829        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02830       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02831        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02832       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02833        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02834       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02835      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02836       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02837        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02838        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02839      256,     0,     0,   300,    50,     0,    51,    52,     0,     0,
02840        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02841        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02842       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02843      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02844      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02845        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02846       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02847        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02848        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02849        0,     0,     0,     0,     0,   887,     0,     0,   195,    50,
02850        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02851       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02852        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02853       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02854        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02855       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02856      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02857       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02858        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02859        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02860      897,     0,     0,   195,    50,     0,    51,    52,     0,     0,
02861        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02862        0,     0,     0,   584,   524,     0,     0,   585,     0,     0,
02863        0,     0,     0,     0,     0,     0,   257,   155,   156,   157,
02864      158,   159,   160,   161,   162,   163,     0,     0,   164,   165,
02865        0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
02866        0,     0,     0,     0,     0,     0,   170,     0,     0,     0,
02867        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02868        0,     0,     0,   171,   172,   173,   174,   175,   176,   177,
02869      178,   179,   180,     0,   181,   182,     0,     0,     0,     0,
02870      605,   516,     0,     0,   606,     0,     0,     0,     0,     0,
02871        0,     0,   183,   217,   155,   156,   157,   158,   159,   160,
02872      161,   162,   163,     0,     0,   164,   165,     0,     0,   166,
02873      167,   168,   169,     0,     0,     0,     0,     0,     0,     0,
02874        0,     0,     0,   170,     0,     0,     0,     0,     0,     0,
02875        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02876      171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
02877        0,   181,   182,     0,     0,     0,     0,   608,   524,     0,
02878        0,   609,     0,     0,     0,     0,     0,     0,     0,   183,
02879      217,   155,   156,   157,   158,   159,   160,   161,   162,   163,
02880        0,     0,   164,   165,     0,     0,   166,   167,   168,   169,
02881        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02882      170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02883        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
02884      174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
02885        0,     0,     0,     0,   679,   516,     0,     0,   680,     0,
02886        0,     0,     0,     0,     0,     0,   183,   217,   155,   156,
02887      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02888      165,     0,     0,   166,   167,   168,   169,     0,     0,     0,
02889        0,     0,     0,     0,     0,     0,     0,   170,     0,     0,
02890        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02891        0,     0,     0,     0,   171,   172,   173,   174,   175,   176,
02892      177,   178,   179,   180,     0,   181,   182,     0,     0,     0,
02893        0,   682,   524,     0,     0,   683,     0,     0,     0,     0,
02894        0,     0,     0,   183,   217,   155,   156,   157,   158,   159,
02895      160,   161,   162,   163,     0,     0,   164,   165,     0,     0,
02896      166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
02897        0,     0,     0,     0,   170,     0,     0,     0,     0,     0,
02898        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02899        0,   171,   172,   173,   174,   175,   176,   177,   178,   179,
02900      180,     0,   181,   182,     0,     0,     0,     0,   689,   516,
02901        0,     0,   690,     0,     0,     0,     0,     0,     0,     0,
02902      183,   217,   155,   156,   157,   158,   159,   160,   161,   162,
02903      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02904      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02905        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
02906        0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
02907      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02908      182,     0,     0,     0,     0,   562,   524,     0,     0,   563,
02909        0,     0,     0,     0,     0,     0,     0,   183,   217,   155,
02910      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02911      164,   165,     0,     0,   166,   167,   168,   169,     0,     0,
02912        0,     0,     0,     0,     0,     0,     0,     0,   170,     0,
02913        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02914        0,     0,     0,     0,     0,   171,   172,   173,   174,   175,
02915      176,   177,   178,   179,   180,     0,   181,   182,     0,     0,
02916        0,     0,   949,   516,     0,     0,   950,     0,     0,     0,
02917        0,     0,     0,     0,   183,   217,   155,   156,   157,   158,
02918      159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
02919        0,   166,   167,   168,   169,     0,     0,     0,     0,     0,
02920        0,     0,     0,     0,     0,   170,     0,     0,     0,     0,
02921        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02922        0,     0,   171,   172,   173,   174,   175,   176,   177,   178,
02923      179,   180,     0,   181,   182,     0,     0,     0,     0,   955,
02924      516,     0,     0,   956,     0,     0,     0,     0,     0,     0,
02925        0,   183,   217,   155,   156,   157,   158,   159,   160,   161,
02926      162,   163,     0,     0,   164,   165,     0,     0,   166,   167,
02927      168,   169,     0,     0,     0,     0,     0,     0,     0,     0,
02928        0,     0,   170,     0,     0,     0,     0,     0,     0,     0,
02929        0,     0,     0,     0,     0,     0,     0,     0,     0,   171,
02930      172,   173,   174,   175,   176,   177,   178,   179,   180,     0,
02931      181,   182,     0,     0,     0,     0,   958,   524,     0,     0,
02932      959,     0,     0,     0,     0,     0,     0,     0,   183,   217,
02933      155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
02934        0,   164,   165,     0,     0,   166,   167,   168,   169,     0,
02935        0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
02936        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02937        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
02938      175,   176,   177,   178,   179,   180,     0,   181,   182,     0,
02939        0,     0,     0,   562,   524,     0,     0,   563,     0,     0,
02940        0,     0,     0,     0,     0,   183,   217,   155,   156,   157,
02941      158,   159,   160,   161,   162,   163,     0,     0,   164,   165,
02942        0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
02943        0,     0,     0,     0,     0,     0,   170,     0,     0,     0,
02944        0,     0,     0,     0,   705,     0,     0,     0,     0,     0,
02945        0,     0,     0,   171,   172,   173,   174,   175,   176,   177,
02946      178,   179,   180,   650,   181,   182,     0,     0,   304,   305,
02947      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
02948      316,     0,   183,   317,   318,     0,     0,   304,   305,   306,
02949      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
02950        0,     0,   317,   318,     0,     0,     0,     0,     0,     0,
02951      319,     0,   320,   321,   322,   323,   324,   325,   326,   327,
02952      328,   329,     0,     0,     0,     0,     0,     0,     0,   319,
02953        0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02954      329
02955 };
02956 
02957 static const yytype_int16 yycheck[] =
02958 {
02959        2,    16,    17,    55,     2,    20,     4,    51,    28,    75,
02960       51,    52,   446,   336,   210,     8,    49,   537,    16,    17,
02961      303,     8,    20,    27,   536,    29,   556,    53,    83,   583,
02962      446,    86,   249,   331,    65,    28,   253,     4,    90,   442,
02963        8,    28,   748,   272,    13,   274,   352,   276,    49,    51,
02964       52,    49,    50,   607,    86,    53,   735,   667,   813,   836,
02965       28,   671,   641,   811,    62,   732,   615,     1,    22,    27,
02966       16,    17,    29,    50,    20,    25,   330,    75,   332,   482,
02967       53,   566,   567,    62,    82,    83,    26,    55,    86,    87,
02968       88,    89,   728,    13,    13,    61,   394,    25,    22,    13,
02969       61,    85,    75,   239,    76,    82,    83,    37,    38,    86,
02970      140,   398,   390,   749,    87,    88,    89,   147,   372,   373,
02971      398,    85,    90,   871,   558,    87,    85,   681,    65,   109,
02972       15,    13,    17,     0,    25,    25,   147,    13,   692,   393,
02973      106,   395,   114,   104,   105,   432,   444,   109,   925,    86,
02974      107,    25,    56,   732,   108,   139,   735,    25,   688,   914,
02975      140,     2,   195,     4,   300,   419,   696,   834,   916,    25,
02976      140,   140,    25,   722,   723,   139,   145,   147,   147,   113,
02977      139,    59,    60,   889,   108,   146,   620,   145,    85,   147,
02978      140,   445,   258,   655,   227,   943,   136,   195,   877,   214,
02979      662,   216,   217,   205,   620,   136,   239,   641,   210,   241,
02980      241,   145,   140,   147,   881,   217,   214,   147,   216,   217,
02981      146,   706,   220,   142,   222,   145,   145,   147,   147,   227,
02982      459,   145,    26,   147,   289,   290,   291,   292,   239,   146,
02983      238,   239,   139,   220,   542,   222,   649,   553,   858,   140,
02984      140,   255,   142,    25,   298,   834,   554,   836,    28,   303,
02985      258,   695,   811,   145,   813,   147,   140,   300,   214,   145,
02986      216,   147,   140,    99,   142,   301,   109,    26,   232,   695,
02987      792,   235,   337,   338,   140,   258,    25,   140,    87,   543,
02988      288,   289,   290,   291,   292,   293,   294,   295,   877,   300,
02989      298,   555,   300,   301,   241,   303,   142,   339,   220,    85,
02990      109,   147,   289,   290,   291,   292,   331,   294,   295,   298,
02991      140,   288,   871,   872,   303,    37,    38,    26,   301,   331,
02992      860,   243,   145,   331,   147,   333,    85,   109,   858,   337,
02993      338,   140,   136,   109,    85,    87,   925,    26,   142,   390,
02994       87,    85,   140,   351,   677,    87,    85,   142,    85,    56,
02995      337,   338,   330,   139,    26,   914,   109,   916,   140,    87,
02996      109,   143,   109,    88,   351,   147,   442,   109,   332,   394,
02997      378,   379,   912,   666,   580,   602,    85,   136,   429,   138,
02998      139,   109,   394,   413,   943,    85,   394,   238,   139,   378,
02999      379,   140,   339,   957,   143,   139,    85,    85,   147,   138,
03000      139,   138,   139,   142,   416,    52,   482,   354,   416,    56,
03001      413,   140,   140,    85,    87,   393,   413,   425,    85,   444,
03002      140,   865,    85,    85,    59,    60,    85,   136,   142,   138,
03003      139,   395,   444,   142,   442,   413,   444,   288,   138,   139,
03004      418,   136,   293,   142,    85,    14,    15,   136,    85,   138,
03005      139,   139,    85,   142,    68,   419,   564,   565,    85,   442,
03006      142,    85,   143,   475,   136,   443,   138,   139,    85,   109,
03007      142,   138,   139,   144,   482,   138,   139,   139,   400,   138,
03008      139,   445,   404,   137,   538,   407,    85,    87,    56,   532,
03009      504,   534,    52,   106,    54,    55,    56,    57,   139,   482,
03010      422,   138,   139,   106,    85,   427,   139,    85,   522,   109,
03011      641,   138,   139,   846,   138,   139,   528,   542,   530,   852,
03012      140,   138,   139,    87,   532,    87,   534,   603,    87,   554,
03013      542,    68,    68,    52,   542,    54,    55,    56,    57,   138,
03014      139,    17,   554,   140,   574,   109,   554,   109,   556,   557,
03015      109,   145,   564,   565,   566,   567,   520,   138,   139,   481,
03016      138,   139,    56,   541,   528,   416,    61,    94,   580,   583,
03017      557,   574,    68,   649,   425,   553,   140,   574,   140,   543,
03018      140,   140,    52,    25,   592,   597,   520,   143,   535,   536,
03019      137,   555,   140,   607,   528,   603,   574,   140,   140,   642,
03020      564,   565,   549,    61,   735,   592,    87,   738,   146,   104,
03021      105,   106,   666,    87,   626,    87,   628,   140,   630,   684,
03022      603,   140,   687,   119,   120,   121,   140,   935,   109,   641,
03023      564,   565,   596,   597,   642,   109,   698,   109,    61,    10,
03024       68,   649,     8,    54,   652,   653,   104,   105,   106,    13,
03025      658,   659,    63,    64,   666,   667,   109,   669,    61,   671,
03026      703,   704,   137,   652,   653,    52,   649,   681,   140,   658,
03027      659,    61,   936,   140,   140,    65,   684,   140,   692,   687,
03028      688,   104,   105,   106,    52,   140,   729,   730,   696,   117,
03029      118,   119,   120,   121,   706,   703,   704,   684,   741,   111,
03030      687,   104,   105,   106,   144,   836,    15,   838,    52,   140,
03031       54,    55,    56,    57,   104,   105,   728,   782,   145,   114,
03032      698,   729,   730,   193,   109,   140,   196,   197,    40,    41,
03033       42,    43,    44,   741,   140,   140,   779,   749,   685,   751,
03034       10,   753,   754,   786,   787,    89,   877,   790,   879,   140,
03035      697,    95,   883,    88,    16,    17,     9,   137,    20,    10,
03036       10,   769,   140,   806,   137,   777,    54,    55,   780,    57,
03037      140,   779,   694,   140,   782,    63,    64,   140,   786,   787,
03038      769,   140,   790,   137,    46,    47,   114,   140,   140,    51,
03039       52,   137,   140,   715,   925,   782,   927,    56,   806,   930,
03040       62,    63,   140,   140,   726,   416,   849,   819,   820,   140,
03041      822,    56,   824,   825,   945,   140,   140,   140,    87,   827,
03042      142,    52,   142,    54,    55,    56,    57,   539,   298,    89,
03043      889,   938,   722,   303,    92,   937,   967,   845,    95,    57,
03044       -1,   849,    90,   865,   827,   792,   858,   794,    68,   834,
03045      732,    52,   860,    54,    55,    56,    57,    -1,    89,   902,
03046       -1,   904,   845,    83,    84,    96,    -1,   910,    52,    -1,
03047       54,    55,    56,    57,    -1,    -1,    -1,   799,    -1,   891,
03048      892,   893,    -1,   895,   896,   116,    -1,    52,   810,    54,
03049       55,    56,    57,   815,   902,    -1,   904,   117,   118,   119,
03050      120,   121,   910,    -1,   912,    89,   918,   919,   920,   921,
03051      935,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   389,
03052      390,    -1,    -1,   935,    89,   937,   938,   935,   398,    -1,
03053       -1,   193,    -1,    -1,   196,   197,   198,    -1,    -1,   951,
03054      952,   953,   954,   957,    -1,   923,    52,    -1,    54,    55,
03055       56,    57,   214,   965,   216,   217,   934,    -1,    -1,   429,
03056       -1,   973,   432,    -1,   676,    52,    -1,    54,    55,    56,
03057       57,    -1,   936,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03058       -1,   693,    -1,    89,    -1,    -1,    -1,    -1,    -1,    95,
03059       96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03060       -1,    -1,    89,    -1,    -1,    -1,   476,    -1,    95,    96,
03061      116,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,
03062       -1,    -1,    -1,     2,    -1,     4,    -1,    -1,    -1,   116,
03063       -1,    -1,   119,    -1,    -1,    -1,   298,    -1,    -1,   145,
03064       -1,   303,   304,   305,   306,   307,   308,   309,   310,   311,
03065      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
03066      322,   323,   324,   325,   326,   327,   328,   329,   538,   331,
03067       49,   783,    -1,   785,    53,    52,    -1,    54,    55,    56,
03068       57,    -1,    -1,   795,    -1,    -1,    -1,    -1,   800,    -1,
03069       -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,
03070       -1,     2,    -1,     4,    -1,    -1,    -1,   577,    87,    88,
03071       89,    90,    89,    -1,    -1,    -1,   378,   379,    95,    96,
03072       -1,    -1,    -1,    -1,    -1,    -1,   388,   389,   390,    -1,
03073       -1,    -1,   394,    -1,   396,   397,   398,    -1,    -1,   116,
03074       -1,    -1,   119,   855,   856,    -1,    -1,    -1,    49,   628,
03075       -1,   630,    53,   415,    -1,    -1,    68,    52,   420,    54,
03076       55,    56,    57,    -1,    -1,   142,    -1,   429,    -1,    -1,
03077      432,    83,    84,     2,    75,     4,   646,    -1,    -1,    -1,
03078       -1,    -1,   444,    -1,    -1,    -1,    87,    88,    89,    -1,
03079        2,    -1,     4,    -1,    89,    -1,   666,    -1,    -1,   911,
03080       95,    96,   464,   465,   116,   117,   118,   119,   120,   121,
03081       -1,    -1,    -1,    -1,   476,    -1,   195,    -1,    -1,    -1,
03082       49,   116,    -1,    -1,   119,     0,    -1,   939,    -1,   941,
03083       -1,    -1,    -1,     8,     9,    10,    -1,    49,    13,    14,
03084       15,    52,    17,    54,    55,    56,    57,   142,   227,    -1,
03085      720,    -1,    27,    -1,    -1,    -1,    -1,    -1,    87,   238,
03086      239,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03087       -1,    -1,   751,    -1,   753,   754,   538,    -1,    89,   258,
03088      542,    68,    -1,    -1,    95,    96,    -1,    -1,   758,    -1,
03089       -1,    -1,   554,    -1,   195,    -1,    83,    84,    -1,    -1,
03090       -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,   119,   288,
03091       85,    -1,    -1,    -1,   293,   577,    -1,    -1,    -1,   789,
03092       -1,   300,   301,    -1,    -1,    -1,   227,   114,   115,   116,
03093      117,   118,   119,   120,   121,    -1,    -1,   238,   239,    -1,
03094      819,   820,    -1,   822,    -1,   824,   825,    -1,    -1,    -1,
03095       -1,    -1,    -1,    -1,   333,    -1,    -1,   258,    -1,    -1,
03096       -1,    -1,   137,    -1,   139,    -1,   195,   142,   143,    -1,
03097      145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03098       -1,    -1,    -1,   195,   646,    -1,    -1,   288,   650,    -1,
03099      652,   653,   293,    -1,    -1,    -1,   658,   659,   227,   300,
03100      301,    -1,    -1,    -1,   666,    -1,    -1,    -1,    -1,   238,
03101      239,    -1,   891,   892,   893,   227,   895,   896,    -1,    -1,
03102       -1,    -1,    -1,    -1,    -1,    -1,   238,   239,    -1,    -1,
03103       -1,    -1,   333,    -1,    -1,    -1,    -1,   416,    -1,   918,
03104      919,   920,   921,   705,    -1,    -1,   425,    -1,   710,   711,
03105       -1,   713,   714,    -1,    -1,    -1,    -1,    -1,   720,   288,
03106       -1,    -1,    -1,   442,   293,    -1,    -1,    -1,    -1,    -1,
03107       -1,   300,   951,   952,   953,   954,   288,    -1,    -1,    -1,
03108       -1,   293,    -1,    -1,    -1,    -1,   965,    -1,   300,    -1,
03109       -1,    -1,    -1,    -1,   973,    -1,   758,    -1,    -1,    -1,
03110      762,    -1,    -1,   482,   333,    -1,    -1,   769,    -1,    -1,
03111       -1,    -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,
03112       -1,   333,    -1,    -1,   425,    -1,    -1,   789,    -1,    -1,
03113       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03114       -1,   442,    -1,    -1,    -1,   807,    -1,    -1,    -1,    -1,
03115       -1,    -1,    -1,   532,    -1,   534,    -1,    -1,    -1,    -1,
03116       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03117       68,    69,    70,    71,    72,    73,    74,   556,    -1,    77,
03118       78,   482,    -1,    -1,    -1,    83,    84,   416,    -1,    -1,
03119       -1,    -1,    -1,    -1,    -1,    -1,   425,    -1,    -1,    -1,
03120       -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
03121       44,    -1,    -1,   425,   112,   113,   114,   115,   116,   117,
03122      118,   119,   120,   121,   603,    -1,    -1,    -1,    -1,    -1,
03123       -1,   532,    -1,   534,    68,    69,    70,    71,    72,    73,
03124       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03125       84,    -1,    -1,    -1,    -1,   556,    -1,    -1,    -1,    -1,
03126       -1,    -1,    -1,   642,    -1,    -1,    -1,    -1,    -1,    -1,
03127      649,    -1,    -1,   935,    -1,    -1,   110,    -1,   112,   113,
03128      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03129       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03130       -1,    -1,   603,   532,    -1,   534,   140,    -1,    -1,   688,
03131       -1,    -1,    -1,    -1,    -1,    -1,    -1,   696,    -1,    -1,
03132      532,    -1,   534,    -1,   703,   704,    -1,   556,    -1,    -1,
03133       -1,    -1,    -1,   634,    -1,    -1,    -1,    -1,    -1,    -1,
03134       -1,   642,    -1,    -1,   556,    -1,    -1,    -1,   649,    -1,
03135      729,   730,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
03136       -1,    -1,   741,    -1,    -1,    -1,    -1,    -1,    66,    67,
03137       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03138       78,    -1,    -1,    81,    82,    83,    84,   688,    -1,    -1,
03139       -1,    -1,    -1,    -1,    -1,   696,    -1,    95,    -1,    -1,
03140      779,    -1,   703,   704,    -1,    -1,    -1,   786,   787,    -1,
03141       -1,   790,    -1,   642,   112,   113,   114,   115,   116,   117,
03142      118,   119,   120,   121,    -1,   123,   124,   806,   729,   730,
03143      642,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03144      741,    -1,    -1,   141,   142,    -1,    -1,    -1,   827,    -1,
03145       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   688,
03146       -1,    -1,    -1,    -1,    -1,    -1,   845,   696,    -1,    -1,
03147      849,    -1,    -1,    -1,   703,   704,   688,    -1,   779,    -1,
03148       -1,   860,    -1,    -1,   696,   786,   787,    -1,    -1,   790,
03149       -1,   703,   704,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03150      729,   730,    -1,    -1,    -1,   806,    -1,    -1,    -1,    -1,
03151       -1,    -1,   741,    -1,    -1,    -1,    -1,   729,   730,    -1,
03152       -1,    -1,    -1,   902,    -1,   904,   827,    -1,    -1,   741,
03153       -1,   910,    -1,   912,    -1,    -1,    -1,    68,    69,    70,
03154       71,    72,    73,    74,   845,    -1,    77,    78,   849,    -1,
03155      779,    -1,    83,    84,    -1,    -1,    -1,   786,   787,   860,
03156       -1,   790,    -1,    46,    47,    -1,    -1,   779,    51,    52,
03157       53,    -1,    -1,    -1,   786,   787,    -1,   806,   790,    -1,
03158       63,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03159      121,    -1,    75,    -1,   806,    -1,    -1,    -1,    -1,    -1,
03160       -1,   902,    -1,   904,    87,    88,    89,    -1,    -1,   910,
03161       -1,   912,    -1,    -1,    -1,    -1,   845,    -1,    -1,    -1,
03162      849,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03163       -1,   860,    -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,
03164       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   860,    -1,
03165       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03166       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03167       -1,    -1,    -1,   902,    -1,   904,    -1,    -1,    -1,    -1,
03168       -1,   910,    -1,   912,    -1,    -1,    -1,    -1,    -1,    -1,
03169      902,    -1,   904,    -1,    -1,    -1,    -1,    -1,   910,    -1,
03170      912,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
03171      193,    -1,    -1,   196,   197,   198,    66,    67,    68,    69,
03172       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
03173       -1,    81,    82,    83,    84,    -1,    -1,    68,    69,    70,
03174       71,    72,    73,    74,    75,    95,    77,    78,    -1,    -1,
03175       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03176       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03177      120,   121,    -1,   123,   124,   258,    -1,    -1,    -1,    -1,
03178       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03179      121,   141,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03180       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03181       74,    75,    76,    77,    78,    79,    80,    -1,   301,    83,
03182       84,   304,   305,   306,   307,   308,   309,   310,   311,   312,
03183      313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
03184      323,   324,   325,   326,   327,   328,   329,    -1,   112,   113,
03185      114,   115,   116,   117,   118,   119,   120,   121,    52,    53,
03186       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03187       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03188       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03189       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03190       -1,    95,    -1,    -1,    -1,   388,   389,   390,    -1,    -1,
03191       -1,    -1,    -1,   396,   397,   398,    -1,    -1,   112,   113,
03192      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03193      124,    -1,   415,    -1,    -1,    -1,    -1,   420,    -1,    -1,
03194       -1,    -1,    -1,    -1,    -1,    -1,   429,   141,   142,   432,
03195       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,
03196       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03197       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03198       -1,   464,   465,    -1,     0,     1,    -1,     3,     4,     5,
03199        6,     7,    -1,   476,    -1,    11,    12,    -1,    -1,   482,
03200       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03201       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03202       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03203       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03204       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03205       66,    67,    -1,    -1,    -1,   538,    -1,    -1,    -1,    -1,
03206       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03207       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03208       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03209       -1,    -1,    -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,
03210       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03211       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03212      603,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,
03213       -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03214       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03215       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03216       -1,    -1,    -1,   646,    -1,    -1,   649,   650,    -1,    -1,
03217       -1,     0,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
03218        9,    10,    -1,   666,    13,    14,    15,    -1,    17,    -1,
03219       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,
03220       29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,
03221       -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,    -1,
03222       -1,    -1,   705,    -1,    -1,    -1,    -1,   710,   711,    -1,
03223      713,   714,    -1,    -1,    -1,    -1,    -1,   720,    -1,    68,
03224       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
03225       79,    80,    -1,    -1,    83,    84,    85,    -1,    87,    88,
03226       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
03227       -1,    -1,    -1,    -1,    -1,   758,    -1,    -1,   107,   762,
03228      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
03229      119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03230       -1,    -1,    -1,    -1,    -1,    -1,   789,    -1,   137,   138,
03231      139,   140,     0,    -1,   143,   144,   145,    -1,   147,    -1,
03232        8,     9,    10,    -1,   807,    13,    14,    15,    -1,    17,
03233       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,    27,
03234       28,    -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    37,
03235       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03236       -1,    -1,   845,    68,    69,    70,    71,    72,    73,    74,
03237       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03238       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
03239       78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    -1,
03240       88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,   114,
03241      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03242       -1,    -1,   110,    -1,   112,   113,   114,   115,   116,   117,
03243      118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
03244       -1,    -1,   147,    -1,    -1,    -1,    -1,    -1,   136,   137,
03245      138,   139,   140,     0,   142,   143,   144,   145,    -1,   147,
03246       -1,     8,     9,    10,    -1,    -1,    13,    14,    15,    -1,
03247       17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03248       27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03249       37,    38,    -1,    40,    41,    42,    43,    44,    -1,    -1,
03250       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03251       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03252       84,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03253       77,    78,    79,    80,    -1,    -1,    83,    84,    85,    -1,
03254       -1,    88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,
03255      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03256      107,    -1,    -1,   110,   111,   112,   113,   114,   115,   116,
03257      117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
03258       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03259      137,   138,   139,   140,     0,    -1,   143,   144,   145,    -1,
03260      147,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03261       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03262       26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03263       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03264       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03265       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03266       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03267       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03268       -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,    -1,
03269       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03270       -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,
03271      116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
03272       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03273      136,   137,   138,   139,   140,     0,   142,   143,   144,   145,
03274       -1,   147,    -1,     8,     9,    10,    -1,    -1,    13,    14,
03275       15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03276       -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
03277       -1,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03278       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03279       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03280       -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
03281       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03282       85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,
03283       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03284       -1,    -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,
03285      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03286       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03287       -1,    -1,   137,   138,   139,   140,     0,   142,   143,   144,
03288      145,    -1,   147,    -1,     8,     9,    10,    -1,    -1,    -1,
03289       14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,
03290       -1,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03291       -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,    43,
03292       44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03293       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03294       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03295       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03296       84,    85,     0,    87,    -1,    -1,    -1,    -1,    -1,    -1,
03297        8,     9,    10,    -1,    -1,    -1,    14,    15,    -1,    17,
03298       -1,    -1,    -1,    -1,    -1,   109,   110,    -1,   112,   113,
03299      114,   115,   116,   117,   118,   119,   120,   121,    -1,    37,
03300       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03301       -1,    -1,   136,   137,   138,   139,   140,    -1,    -1,   143,
03302       -1,   145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,
03303       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
03304       78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    87,
03305       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03306       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03307       -1,   109,   110,    -1,   112,   113,   114,   115,   116,   117,
03308      118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
03309       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,
03310      138,   139,   140,    -1,    -1,   143,    -1,   145,     1,   147,
03311        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
03312       -1,    -1,    15,    16,    -1,    18,    19,    20,    21,    22,
03313       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03314       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03315       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03316       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03317       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03318       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03319       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03320       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03321      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03322       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03323      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03324       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03325       -1,    -1,   145,     1,   147,     3,     4,     5,     6,     7,
03326       -1,    -1,    10,    11,    12,    -1,    14,    15,    16,    -1,
03327       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03328       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03329       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03330       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03331       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03332       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03333       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03334       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03335       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03336       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03337       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03338       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03339       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     1,   147,
03340        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03341       -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
03342       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03343       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03344       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03345       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03346       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03347       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03348       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03349       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03350      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03351       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03352      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
03353        3,     4,     5,     6,     7,    -1,    -1,    -1,    11,    12,
03354       -1,    -1,   145,    16,   147,    18,    19,    20,    21,    22,
03355       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03356       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03357       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03358       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03359       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03360       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03361       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03362       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03363      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03364       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03365      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03366       -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,    -1,    -1,
03367       -1,    -1,   145,     1,   147,     3,     4,     5,     6,     7,
03368       -1,    -1,    10,    11,    12,    -1,    -1,    15,    16,    -1,
03369       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03370       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03371       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03372       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03373       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03374       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03375       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03376       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03377       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03378       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03379       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03380       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03381       -1,     9,    10,    11,    12,    -1,    -1,   145,    16,   147,
03382       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03383       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03384       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03385       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03386       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03387       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03388       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03389       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03390       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03391       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03392       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03393       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03394       -1,    -1,    -1,    11,    12,    -1,    -1,   145,    16,   147,
03395       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03396       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03397       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03398       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03399       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03400       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03401       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03402       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03403       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03404       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03405       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03406       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03407       -1,    -1,    -1,    11,    12,   143,    -1,   145,    16,   147,
03408       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03409       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03410       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03411       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03412       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03413       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03414       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03415       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03416       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03417       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03418       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03419       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03420       -1,    -1,    -1,    11,    12,   143,    -1,   145,    16,   147,
03421       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03422       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03423       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03424       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03425       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03426       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03427       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03428       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03429       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03430       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03431       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03432       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,
03433       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     1,   147,
03434        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03435       -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,    22,
03436       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03437       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03438       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03439       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03440       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03441       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03442       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03443       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03444      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03445       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03446      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03447        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03448       -1,    -1,   145,    16,   147,    18,    19,    20,    21,    22,
03449       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03450       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03451       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03452       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03453       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03454       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03455       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03456       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03457      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03458        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03459      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03460       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03461       34,    35,    36,    -1,   147,    39,    -1,    -1,    -1,    -1,
03462       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03463       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03464       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03465       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03466       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03467       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03468       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03469       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
03470      124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03471        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03472       -1,   145,    16,   147,    18,    19,    20,    21,    22,    23,
03473       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03474       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03475       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03476       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03477       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03478       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03479       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03480       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03481       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03482        5,     6,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03483      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03484       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03485       35,    36,    -1,   147,    39,    -1,    -1,    -1,    -1,    -1,
03486       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03487       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03488       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03489       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03490       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03491       95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03492       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03493       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03494       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
03495        7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,
03496      145,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03497       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03498       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03499       -1,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03500       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
03501       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03502       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03503       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
03504       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03505       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03506       -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
03507       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03508       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     3,
03509        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
03510       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
03511       24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
03512       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
03513       -1,    45,    46,    47,    48,    49,    50,    51,    52,    53,
03514       54,    55,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
03515       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03516       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03517       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03518       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03519       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03520      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03521      124,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03522        7,    -1,    -1,    -1,    11,    12,    -1,   141,   142,    16,
03523       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
03524       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03525       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03526       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03527       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03528       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03529       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03530       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    96,
03531       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03532       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03533       -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
03534       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,   136,
03535       -1,    11,    12,    -1,    -1,   142,    16,    -1,    18,    19,
03536       20,    21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,
03537       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03538       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03539       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
03540       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03541       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03542       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03543       90,    -1,    92,    93,    -1,    95,    96,    97,    98,    99,
03544      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03545       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03546       -1,    -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,
03547        3,     4,     5,    -1,     7,    -1,   136,    -1,    11,    12,
03548       -1,    -1,   142,    16,    -1,    18,    19,    20,    21,    22,
03549       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03550       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03551       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03552       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03553       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03554       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03555       -1,    -1,    -1,    86,    87,    -1,    89,    90,    -1,    92,
03556       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03557      103,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
03558       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,   122,
03559      123,   124,    11,    12,    -1,    -1,    -1,    16,    -1,    18,
03560       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,   142,
03561       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03562       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03563       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
03564       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03565       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03566       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03567       89,    90,    -1,    92,    93,    -1,    95,    96,    97,    98,
03568       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03569       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03570        5,    -1,     7,   122,   123,   124,    11,    12,    -1,    -1,
03571       -1,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03572       -1,    -1,    -1,   142,    -1,    30,    31,    32,    33,    34,
03573       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03574       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03575       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03576       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03577       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03578       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03579       95,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03580       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03581       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03582       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03583       -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,     3,     4,
03584        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
03585       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
03586       25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03587       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
03588       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03589       55,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03590       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03591       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03592       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03593       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03594       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03595      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03596       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03597       -1,    -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,
03598        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
03599       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
03600       26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03601       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
03602       46,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
03603       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03604       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03605       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03606       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03607       -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03608       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03609      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03610       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03611       -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,
03612        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
03613       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
03614       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03615       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03616       47,    48,    49,    50,    51,    52,    53,    -1,    -1,    56,
03617       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
03618       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03619       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
03620       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
03621       -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03622       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03623      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
03624       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03625       -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,     7,
03626        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
03627       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
03628       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    37,
03629       38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03630       48,    49,    50,    51,    52,    53,    -1,    -1,    56,    -1,
03631       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
03632       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03633       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03634       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
03635       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03636       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
03637      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,     3,
03638        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03639       -1,    -1,    16,   141,    18,    19,    20,    21,    22,    23,
03640       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03641       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03642       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03643       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03644       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03645       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03646       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03647       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03648       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03649       -1,     3,     4,     5,    -1,     7,    -1,    -1,   122,    11,
03650       12,    -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,
03651       22,    23,    24,    -1,    -1,    -1,   140,    -1,    30,    31,
03652       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03653       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03654       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03655       62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03657       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03658       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03659      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03660       -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,
03661      122,    11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,
03662       20,    21,    22,    23,    24,    -1,    -1,    -1,   140,    -1,
03663       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03664       -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
03665       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03666       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03667       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03668       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03669       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03670      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03671       -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03672       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03673       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03674       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03675       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03676       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03677       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03678       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03679       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03680       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03681      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03682       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03683       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03684       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03685       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03686       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03687       52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
03688       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03689       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03690       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03691       92,    93,    -1,    95,    96,    97,    98,    99,   100,   101,
03692      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03693        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03694      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03695       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03696       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03697       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03698       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03699       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03700       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03701       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03702       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03703      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03704        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03705      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03706       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03707       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03708       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03709       54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
03710       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03711       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03712       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03713       -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
03714       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03715        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03716      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03717       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03718       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03719       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03720       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03721       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03722       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03723       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03724       -1,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03725       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03726       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03727       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03728       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03729       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03730       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03731       56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
03732       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03733       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03734       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03735       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03736       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03737        7,    -1,    -1,    -1,    11,    12,   122,   123,   124,    16,
03738       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03739       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03740       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03741       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03742       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03743       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03744       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03745       -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,    -1,
03746       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03747       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03748       -1,    -1,    -1,    11,    12,   122,   123,   124,    16,    -1,
03749       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03750       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03751       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03752       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03753       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03754       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03755       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03756       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03757       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03758       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
03759       -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
03760       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03761       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03762       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03763       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03764       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03765       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03766       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03767       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
03768       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03769       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03770       -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
03771       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03772       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03773       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03774       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03775       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03776       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03777       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03778       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03779      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03780       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03781       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03782       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03783       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03784       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03785       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03786       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03787       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03788       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03789       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03790      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03791       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03792       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03793       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03794       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03795       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03796       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03797       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03798       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03799       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03800       92,    93,    -1,    95,    -1,    97,    98,    99,   100,   101,
03801      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03802        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03803      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03804       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03805       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03806       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03807       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03808       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03809       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03810       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03811       93,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
03812      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03813        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03814      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03815       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03816       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03817       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03818       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03819       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03820       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03821       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03822       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03823       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03824        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03825      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03826       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03827       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03828       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03829       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03830       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03831       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03832       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03833       -1,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03834       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03835       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03836       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03837       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03838       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03839       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03840       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03841       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03842       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03843       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03844       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03845       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03846       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03847       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03848       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03849       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03850       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03851       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03852       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03853       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03854       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03855      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03856       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03857       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03858       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03859       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03860       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03861       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03862       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03863       -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,
03864       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03865       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03866       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03867       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03868       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03869       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03870       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03871       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03872       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03873       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03874       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03875       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03876      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03877       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03878       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03879       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03880       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03881       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03882       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03883       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03884       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03885       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03886       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03887       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03888       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03889       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03890       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03891       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03892       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03893       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03894       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03895       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03896       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03897      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03898       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03899       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03900       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03901       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03902       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03903       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03904       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03905       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03906       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03907       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03908       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
03909       -1,    -1,    -1,    -1,    -1,    -1,   122,    66,    67,    68,
03910       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03911       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03912       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
03913       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03914       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
03915      119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,
03916       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
03917       -1,    -1,   141,   142,    66,    67,    68,    69,    70,    71,
03918       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
03919       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03920       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
03921       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03922      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03923       -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,
03924       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
03925      142,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03926       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03927       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03928       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03929       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03930      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03931       -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
03932       -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,
03933       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03934       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03935       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
03936       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03937       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
03938      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,
03939       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
03940       -1,    -1,    -1,   141,   142,    66,    67,    68,    69,    70,
03941       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
03942       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03943       -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
03944       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03945       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03946      121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,
03947       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03948      141,   142,    66,    67,    68,    69,    70,    71,    72,    73,
03949       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03950       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03951       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03952       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03953      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03954      124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,
03955       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,
03956       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03957       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
03958       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
03959       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03960       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03961      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
03962       -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
03963       -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,    69,
03964       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
03965       -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
03966       -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
03967       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03968       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03969      120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,
03970       53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
03971       -1,   141,   142,    66,    67,    68,    69,    70,    71,    72,
03972       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
03973       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03974       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03975       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
03976      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03977      123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,
03978       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,
03979       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03980       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03981       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03982       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03983       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03984      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03985       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
03986       -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,
03987       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03988       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03989       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
03990       -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,
03991       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
03992      119,   120,   121,    44,   123,   124,    -1,    -1,    68,    69,
03993       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
03994       80,    -1,   141,    83,    84,    -1,    -1,    68,    69,    70,
03995       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03996       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03997      110,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03998      120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
03999       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04000      121
04001 };
04002 
04003 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
04004    symbol of state STATE-NUM.  */
04005 static const yytype_uint16 yystos[] =
04006 {
04007        0,   149,   150,     0,     1,     3,     4,     5,     6,     7,
04008       11,    12,    16,    18,    19,    20,    21,    22,    23,    24,
04009       30,    31,    32,    33,    34,    35,    36,    39,    45,    46,
04010       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
04011       57,    59,    60,    62,    63,    64,    66,    67,    86,    89,
04012       90,    92,    93,    95,    97,    98,    99,   100,   101,   102,
04013      103,   122,   123,   124,   151,   152,   153,   158,   160,   162,
04014      163,   166,   167,   169,   170,   171,   173,   174,   184,   198,
04015      215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
04016      225,   248,   249,   259,   260,   261,   262,   263,   264,   265,
04017      268,   278,   280,   281,   282,   283,   284,   285,   308,   319,
04018      153,     3,     4,     5,     6,     7,     8,     9,    10,    11,
04019       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
04020       22,    23,    24,    25,    26,    30,    31,    32,    33,    34,
04021       35,    36,    37,    38,    39,    45,    46,    47,    48,    49,
04022       50,    51,    52,    53,    56,    66,    67,    68,    69,    70,
04023       71,    72,    73,    74,    77,    78,    81,    82,    83,    84,
04024       95,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04025      121,   123,   124,   141,   177,   178,   179,   180,   182,   183,
04026      278,   280,    39,    58,    86,    89,    95,    96,   123,   166,
04027      174,   184,   186,   191,   194,   196,   215,   282,   284,   285,
04028      306,   307,   191,   191,   142,   192,   193,   142,   188,   192,
04029      142,   147,   313,    54,   179,   313,   154,   136,    21,    22,
04030       30,    31,    32,   184,   215,   308,   184,    56,     1,    89,
04031      156,   157,   158,   168,   169,   319,   160,   187,   196,   306,
04032      319,   186,   305,   306,   319,    46,    86,   122,   140,   173,
04033      198,   215,   282,   285,   241,   242,    54,    55,    57,   177,
04034      271,   279,   270,   271,   272,   146,   266,   146,   269,    59,
04035       60,   162,   184,   184,   145,   147,   312,   317,   318,    40,
04036       41,    42,    43,    44,    37,    38,    28,   246,   109,   140,
04037       89,    95,   170,   109,    68,    69,    70,    71,    72,    73,
04038       74,    75,    76,    77,    78,    79,    80,    83,    84,   110,
04039      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04040       85,   138,   139,   199,   160,   161,   161,   202,   204,   161,
04041      312,   318,    86,   167,   174,   215,   231,   282,   285,    52,
04042       56,    83,    86,   175,   176,   215,   282,   285,   176,    33,
04043       34,    35,    36,    49,    50,    51,    52,    56,   142,   177,
04044      283,   303,    85,   139,    26,   136,   250,   262,    87,    87,
04045      188,   192,   250,   140,   186,    56,   186,   186,   109,    88,
04046      140,   195,   319,    85,   138,   139,    87,    87,   140,   195,
04047      191,   313,   314,   191,   190,   191,   319,   160,   314,   160,
04048       54,    63,    64,   159,   142,   185,   136,   156,    85,   139,
04049       87,   158,   168,   143,   312,   318,   314,   200,   144,   140,
04050      147,   316,   140,   316,   137,   316,   313,    56,    59,    60,
04051      170,   172,   140,    85,   138,   139,   243,    61,   104,   105,
04052      106,   273,   106,   273,   106,    65,   273,   106,   106,   267,
04053      273,   106,    61,   106,    68,    68,   145,   153,   161,   161,
04054      161,   161,   158,   160,   160,   247,    95,   162,   186,   196,
04055      197,   168,   140,   173,   140,   162,   184,   186,   197,   184,
04056      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04057      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04058      184,   184,   184,   184,   184,    52,    53,    56,   182,   188,
04059      309,   310,   190,    52,    53,    56,   182,   188,   309,   155,
04060      156,    13,   227,   317,   227,   161,   161,   312,    17,   253,
04061       56,    85,   138,   139,    25,   160,    52,    56,   175,     1,
04062      113,   286,   317,    85,   138,   139,   211,   304,   212,    85,
04063      139,   311,    52,    56,   309,   309,   252,   251,   162,   184,
04064      162,   184,    94,   164,   181,   184,   186,    95,   186,   194,
04065      306,    52,    56,   190,    52,    56,   307,   314,   143,   314,
04066      314,   179,   201,   184,   151,   137,   309,   309,   184,   314,
04067      158,   314,   306,   140,   172,    52,    56,   190,    52,    56,
04068       52,    54,    55,    56,    57,    89,    95,    96,   116,   119,
04069      142,   244,   289,   290,   291,   292,   293,   294,   297,   298,
04070      299,   300,   301,   275,   274,   146,   273,   146,   184,   184,
04071       76,   114,   236,   237,   319,   186,   140,   314,   172,   140,
04072       44,   313,    87,    87,   188,   192,   313,   315,    87,    87,
04073      188,   189,   192,   319,    10,   226,     8,   255,   319,   156,
04074       13,   156,    27,   228,   317,   228,   253,   196,   226,    52,
04075       56,   190,    52,    56,   206,   209,   317,   287,   208,    52,
04076       56,   175,   190,   155,   160,   142,   288,   289,   213,   189,
04077      192,   189,   192,   236,   236,    44,   165,   179,   186,   195,
04078       87,    87,   315,    87,    87,   160,   137,   316,   170,   315,
04079      109,    52,    89,    95,   232,   233,   234,   291,   289,    29,
04080      107,   245,   140,   302,   319,   140,   302,    52,   140,   302,
04081       52,   276,    54,    55,    57,   277,   285,    52,   145,   235,
04082      238,   293,   295,   296,   299,   301,   319,   156,    95,   186,
04083      172,   184,   111,   162,   184,   162,   184,   164,   144,    87,
04084      162,   184,   162,   184,   164,   186,   197,   256,   319,    15,
04085      230,   319,    14,   229,   230,   230,   203,   205,   226,   140,
04086      227,   315,   161,   317,   161,   155,   315,   226,   314,   289,
04087      155,   317,   177,   156,   156,   184,   236,    87,   314,   186,
04088      234,   140,   291,   140,   314,   238,   156,   156,   292,   297,
04089      299,   301,   293,   294,   299,   293,   156,   109,    52,   239,
04090      240,   290,   238,   114,   140,   302,   140,   302,   140,   302,
04091       10,   186,   184,   162,   184,    88,   257,   319,   156,     9,
04092      258,   319,   161,   226,   226,   156,   156,   186,   156,   228,
04093      210,   317,   226,   314,   226,   214,    10,   137,   156,   314,
04094      233,   140,    95,   232,   314,    10,   137,   140,   302,   140,
04095      302,   140,   302,   140,   302,   302,   137,    86,   215,   140,
04096      114,   296,   299,   293,   295,   299,   293,    86,   174,   215,
04097      282,   285,   227,   156,   227,   226,   226,   230,   253,   254,
04098      207,   155,   288,   137,   140,   233,   140,   291,   293,   299,
04099      293,   293,    56,    85,   240,   140,   302,   140,   302,   302,
04100      140,   302,   302,    56,    85,   138,   139,   156,   156,   156,
04101      226,   155,   233,   140,   302,   140,   302,   302,   302,    52,
04102       56,   293,   299,   293,   293,    52,    56,   190,    52,    56,
04103      255,   229,   226,   226,   233,   293,   302,   140,   302,   302,
04104      302,   315,   302,   293,   302
04105 };
04106 
04107 #define yyerrok         (yyerrstatus = 0)
04108 #define yyclearin       (yychar = YYEMPTY)
04109 #define YYEMPTY         (-2)
04110 #define YYEOF           0
04111 
04112 #define YYACCEPT        goto yyacceptlab
04113 #define YYABORT         goto yyabortlab
04114 #define YYERROR         goto yyerrorlab
04115 
04116 
04117 /* Like YYERROR except do call yyerror.  This remains here temporarily
04118    to ease the transition to the new meaning of YYERROR, for GCC.
04119    Once GCC version 2 has supplanted version 1, this can go.  However,
04120    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
04121    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
04122    discussed.  */
04123 
04124 #define YYFAIL          goto yyerrlab
04125 #if defined YYFAIL
04126   /* This is here to suppress warnings from the GCC cpp's
04127      -Wunused-macros.  Normally we don't worry about that warning, but
04128      some users do, and we want to make it easy for users to remove
04129      YYFAIL uses, which will produce warnings from Bison 2.5.  */
04130 #endif
04131 
04132 #define YYRECOVERING()  (!!yyerrstatus)
04133 
04134 #define YYBACKUP(Token, Value)                                  \
04135 do                                                              \
04136   if (yychar == YYEMPTY && yylen == 1)                          \
04137     {                                                           \
04138       yychar = (Token);                                         \
04139       yylval = (Value);                                         \
04140       yytoken = YYTRANSLATE (yychar);                           \
04141       YYPOPSTACK (1);                                           \
04142       goto yybackup;                                            \
04143     }                                                           \
04144   else                                                          \
04145     {                                                           \
04146       parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04147       YYERROR;                                                  \
04148     }                                                           \
04149 while (YYID (0))
04150 
04151 
04152 #define YYTERROR        1
04153 #define YYERRCODE       256
04154 
04155 
04156 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
04157    If N is 0, then set CURRENT to the empty location which ends
04158    the previous symbol: RHS[0] (always defined).  */
04159 
04160 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04161 #ifndef YYLLOC_DEFAULT
04162 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
04163     do                                                                  \
04164       if (YYID (N))                                                    \
04165         {                                                               \
04166           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
04167           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
04168           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
04169           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
04170         }                                                               \
04171       else                                                              \
04172         {                                                               \
04173           (Current).first_line   = (Current).last_line   =              \
04174             YYRHSLOC (Rhs, 0).last_line;                                \
04175           (Current).first_column = (Current).last_column =              \
04176             YYRHSLOC (Rhs, 0).last_column;                              \
04177         }                                                               \
04178     while (YYID (0))
04179 #endif
04180 
04181 
04182 /* YY_LOCATION_PRINT -- Print the location on the stream.
04183    This macro was not mandated originally: define only if we know
04184    we won't break user code: when these are the locations we know.  */
04185 
04186 #ifndef YY_LOCATION_PRINT
04187 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
04188 #  define YY_LOCATION_PRINT(File, Loc)                  \
04189      fprintf (File, "%d.%d-%d.%d",                      \
04190               (Loc).first_line, (Loc).first_column,     \
04191               (Loc).last_line,  (Loc).last_column)
04192 # else
04193 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04194 # endif
04195 #endif
04196 
04197 
04198 /* YYLEX -- calling `yylex' with the right arguments.  */
04199 
04200 #ifdef YYLEX_PARAM
04201 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04202 #else
04203 # define YYLEX yylex (&yylval)
04204 #endif
04205 
04206 /* Enable debugging if requested.  */
04207 #if YYDEBUG
04208 
04209 # ifndef YYFPRINTF
04210 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
04211 #  define YYFPRINTF fprintf
04212 # endif
04213 
04214 # define YYDPRINTF(Args)                        \
04215 do {                                            \
04216   if (yydebug)                                  \
04217     YYFPRINTF Args;                             \
04218 } while (YYID (0))
04219 
04220 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
04221 do {                                                                      \
04222   if (yydebug)                                                            \
04223     {                                                                     \
04224       YYFPRINTF (stderr, "%s ", Title);                                   \
04225       yy_symbol_print (stderr,                                            \
04226                   Type, Value, parser); \
04227       YYFPRINTF (stderr, "\n");                                           \
04228     }                                                                     \
04229 } while (YYID (0))
04230 
04231 
04232 /*--------------------------------.
04233 | Print this symbol on YYOUTPUT.  |
04234 `--------------------------------*/
04235 
04236 /*ARGSUSED*/
04237 #if (defined __STDC__ || defined __C99__FUNC__ \
04238      || defined __cplusplus || defined _MSC_VER)
04239 static void
04240 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04241 #else
04242 static void
04243 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04244     FILE *yyoutput;
04245     int yytype;
04246     YYSTYPE const * const yyvaluep;
04247     struct parser_params *parser;
04248 #endif
04249 {
04250   if (!yyvaluep)
04251     return;
04252   YYUSE (parser);
04253 # ifdef YYPRINT
04254   if (yytype < YYNTOKENS)
04255     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04256 # else
04257   YYUSE (yyoutput);
04258 # endif
04259   switch (yytype)
04260     {
04261       default:
04262         break;
04263     }
04264 }
04265 
04266 
04267 /*--------------------------------.
04268 | Print this symbol on YYOUTPUT.  |
04269 `--------------------------------*/
04270 
04271 #if (defined __STDC__ || defined __C99__FUNC__ \
04272      || defined __cplusplus || defined _MSC_VER)
04273 static void
04274 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04275 #else
04276 static void
04277 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04278     FILE *yyoutput;
04279     int yytype;
04280     YYSTYPE const * const yyvaluep;
04281     struct parser_params *parser;
04282 #endif
04283 {
04284   if (yytype < YYNTOKENS)
04285     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04286   else
04287     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04288 
04289   yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04290   YYFPRINTF (yyoutput, ")");
04291 }
04292 
04293 /*------------------------------------------------------------------.
04294 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
04295 | TOP (included).                                                   |
04296 `------------------------------------------------------------------*/
04297 
04298 #if (defined __STDC__ || defined __C99__FUNC__ \
04299      || defined __cplusplus || defined _MSC_VER)
04300 static void
04301 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04302 #else
04303 static void
04304 yy_stack_print (yybottom, yytop)
04305     yytype_int16 *yybottom;
04306     yytype_int16 *yytop;
04307 #endif
04308 {
04309   YYFPRINTF (stderr, "Stack now");
04310   for (; yybottom <= yytop; yybottom++)
04311     {
04312       int yybot = *yybottom;
04313       YYFPRINTF (stderr, " %d", yybot);
04314     }
04315   YYFPRINTF (stderr, "\n");
04316 }
04317 
04318 # define YY_STACK_PRINT(Bottom, Top)                            \
04319 do {                                                            \
04320   if (yydebug)                                                  \
04321     yy_stack_print ((Bottom), (Top));                           \
04322 } while (YYID (0))
04323 
04324 
04325 /*------------------------------------------------.
04326 | Report that the YYRULE is going to be reduced.  |
04327 `------------------------------------------------*/
04328 
04329 #if (defined __STDC__ || defined __C99__FUNC__ \
04330      || defined __cplusplus || defined _MSC_VER)
04331 static void
04332 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04333 #else
04334 static void
04335 yy_reduce_print (yyvsp, yyrule, parser)
04336     YYSTYPE *yyvsp;
04337     int yyrule;
04338     struct parser_params *parser;
04339 #endif
04340 {
04341   int yynrhs = yyr2[yyrule];
04342   int yyi;
04343   unsigned long int yylno = yyrline[yyrule];
04344   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04345              yyrule - 1, yylno);
04346   /* The symbols being reduced.  */
04347   for (yyi = 0; yyi < yynrhs; yyi++)
04348     {
04349       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
04350       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04351                        &(yyvsp[(yyi + 1) - (yynrhs)])
04352                                        , parser);
04353       YYFPRINTF (stderr, "\n");
04354     }
04355 }
04356 
04357 # define YY_REDUCE_PRINT(Rule)          \
04358 do {                                    \
04359   if (yydebug)                          \
04360     yy_reduce_print (yyvsp, Rule, parser); \
04361 } while (YYID (0))
04362 
04363 /* Nonzero means print parse trace.  It is left uninitialized so that
04364    multiple parsers can coexist.  */
04365 #ifndef yydebug
04366 int yydebug;
04367 #endif
04368 #else /* !YYDEBUG */
04369 # define YYDPRINTF(Args)
04370 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04371 # define YY_STACK_PRINT(Bottom, Top)
04372 # define YY_REDUCE_PRINT(Rule)
04373 #endif /* !YYDEBUG */
04374 
04375 
04376 /* YYINITDEPTH -- initial size of the parser's stacks.  */
04377 #ifndef YYINITDEPTH
04378 # define YYINITDEPTH 200
04379 #endif
04380 
04381 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
04382    if the built-in stack extension method is used).
04383 
04384    Do not make this value too large; the results are undefined if
04385    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
04386    evaluated with infinite-precision integer arithmetic.  */
04387 
04388 #ifndef YYMAXDEPTH
04389 # define YYMAXDEPTH 10000
04390 #endif
04391 
04392 
04393 
04394 #if YYERROR_VERBOSE
04395 
04396 # ifndef yystrlen
04397 #  if defined __GLIBC__ && defined _STRING_H
04398 #   define yystrlen strlen
04399 #  else
04400 /* Return the length of YYSTR.  */
04401 #if (defined __STDC__ || defined __C99__FUNC__ \
04402      || defined __cplusplus || defined _MSC_VER)
04403 static YYSIZE_T
04404 yystrlen (const char *yystr)
04405 #else
04406 static YYSIZE_T
04407 yystrlen (yystr)
04408     const char *yystr;
04409 #endif
04410 {
04411   YYSIZE_T yylen;
04412   for (yylen = 0; yystr[yylen]; yylen++)
04413     continue;
04414   return yylen;
04415 }
04416 #  endif
04417 # endif
04418 
04419 # ifndef yystpcpy
04420 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04421 #   define yystpcpy stpcpy
04422 #  else
04423 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
04424    YYDEST.  */
04425 #if (defined __STDC__ || defined __C99__FUNC__ \
04426      || defined __cplusplus || defined _MSC_VER)
04427 static char *
04428 yystpcpy (char *yydest, const char *yysrc)
04429 #else
04430 static char *
04431 yystpcpy (yydest, yysrc)
04432     char *yydest;
04433     const char *yysrc;
04434 #endif
04435 {
04436   char *yyd = yydest;
04437   const char *yys = yysrc;
04438 
04439   while ((*yyd++ = *yys++) != '\0')
04440     continue;
04441 
04442   return yyd - 1;
04443 }
04444 #  endif
04445 # endif
04446 
04447 # ifndef yytnamerr
04448 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
04449    quotes and backslashes, so that it's suitable for yyerror.  The
04450    heuristic is that double-quoting is unnecessary unless the string
04451    contains an apostrophe, a comma, or backslash (other than
04452    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
04453    null, do not copy; instead, return the length of what the result
04454    would have been.  */
04455 static YYSIZE_T
04456 yytnamerr (char *yyres, const char *yystr)
04457 {
04458   if (*yystr == '"')
04459     {
04460       YYSIZE_T yyn = 0;
04461       char const *yyp = yystr;
04462 
04463       for (;;)
04464         switch (*++yyp)
04465           {
04466           case '\'':
04467           case ',':
04468             goto do_not_strip_quotes;
04469 
04470           case '\\':
04471             if (*++yyp != '\\')
04472               goto do_not_strip_quotes;
04473             /* Fall through.  */
04474           default:
04475             if (yyres)
04476               yyres[yyn] = *yyp;
04477             yyn++;
04478             break;
04479 
04480           case '"':
04481             if (yyres)
04482               yyres[yyn] = '\0';
04483             return yyn;
04484           }
04485     do_not_strip_quotes: ;
04486     }
04487 
04488   if (! yyres)
04489     return yystrlen (yystr);
04490 
04491   return yystpcpy (yyres, yystr) - yyres;
04492 }
04493 # endif
04494 
04495 /* Copy into YYRESULT an error message about the unexpected token
04496    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
04497    including the terminating null byte.  If YYRESULT is null, do not
04498    copy anything; just return the number of bytes that would be
04499    copied.  As a special case, return 0 if an ordinary "syntax error"
04500    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
04501    size calculation.  */
04502 static YYSIZE_T
04503 yysyntax_error (char *yyresult, int yystate, int yychar)
04504 {
04505   int yyn = yypact[yystate];
04506 
04507   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
04508     return 0;
04509   else
04510     {
04511       int yytype = YYTRANSLATE (yychar);
04512       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
04513       YYSIZE_T yysize = yysize0;
04514       YYSIZE_T yysize1;
04515       int yysize_overflow = 0;
04516       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04517       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04518       int yyx;
04519 
04520 # if 0
04521       /* This is so xgettext sees the translatable formats that are
04522          constructed on the fly.  */
04523       YY_("syntax error, unexpected %s");
04524       YY_("syntax error, unexpected %s, expecting %s");
04525       YY_("syntax error, unexpected %s, expecting %s or %s");
04526       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
04527       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
04528 # endif
04529       char *yyfmt;
04530       char const *yyf;
04531       static char const yyunexpected[] = "syntax error, unexpected %s";
04532       static char const yyexpecting[] = ", expecting %s";
04533       static char const yyor[] = " or %s";
04534       char yyformat[sizeof yyunexpected
04535                     + sizeof yyexpecting - 1
04536                     + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
04537                        * (sizeof yyor - 1))];
04538       char const *yyprefix = yyexpecting;
04539 
04540       /* Start YYX at -YYN if negative to avoid negative indexes in
04541          YYCHECK.  */
04542       int yyxbegin = yyn < 0 ? -yyn : 0;
04543 
04544       /* Stay within bounds of both yycheck and yytname.  */
04545       int yychecklim = YYLAST - yyn + 1;
04546       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04547       int yycount = 1;
04548 
04549       yyarg[0] = yytname[yytype];
04550       yyfmt = yystpcpy (yyformat, yyunexpected);
04551 
04552       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04553         if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
04554           {
04555             if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04556               {
04557                 yycount = 1;
04558                 yysize = yysize0;
04559                 yyformat[sizeof yyunexpected - 1] = '\0';
04560                 break;
04561               }
04562             yyarg[yycount++] = yytname[yyx];
04563             yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04564             yysize_overflow |= (yysize1 < yysize);
04565             yysize = yysize1;
04566             yyfmt = yystpcpy (yyfmt, yyprefix);
04567             yyprefix = yyor;
04568           }
04569 
04570       yyf = YY_(yyformat);
04571       yysize1 = yysize + yystrlen (yyf);
04572       yysize_overflow |= (yysize1 < yysize);
04573       yysize = yysize1;
04574 
04575       if (yysize_overflow)
04576         return YYSIZE_MAXIMUM;
04577 
04578       if (yyresult)
04579         {
04580           /* Avoid sprintf, as that infringes on the user's name space.
04581              Don't have undefined behavior even if the translation
04582              produced a string with the wrong number of "%s"s.  */
04583           char *yyp = yyresult;
04584           int yyi = 0;
04585           while ((*yyp = *yyf) != '\0')
04586             {
04587               if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
04588                 {
04589                   yyp += yytnamerr (yyp, yyarg[yyi++]);
04590                   yyf += 2;
04591                 }
04592               else
04593                 {
04594                   yyp++;
04595                   yyf++;
04596                 }
04597             }
04598         }
04599       return yysize;
04600     }
04601 }
04602 #endif /* YYERROR_VERBOSE */
04603 
04604 
04605 /*-----------------------------------------------.
04606 | Release the memory associated to this symbol.  |
04607 `-----------------------------------------------*/
04608 
04609 /*ARGSUSED*/
04610 #if (defined __STDC__ || defined __C99__FUNC__ \
04611      || defined __cplusplus || defined _MSC_VER)
04612 static void
04613 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04614 #else
04615 static void
04616 yydestruct (yymsg, yytype, yyvaluep, parser)
04617     const char *yymsg;
04618     int yytype;
04619     YYSTYPE *yyvaluep;
04620     struct parser_params *parser;
04621 #endif
04622 {
04623   YYUSE (yyvaluep);
04624   YYUSE (parser);
04625 
04626   if (!yymsg)
04627     yymsg = "Deleting";
04628   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04629 
04630   switch (yytype)
04631     {
04632 
04633       default:
04634         break;
04635     }
04636 }
04637 
04638 /* Prevent warnings from -Wmissing-prototypes.  */
04639 #ifdef YYPARSE_PARAM
04640 #if defined __STDC__ || defined __cplusplus
04641 int yyparse (void *YYPARSE_PARAM);
04642 #else
04643 int yyparse ();
04644 #endif
04645 #else /* ! YYPARSE_PARAM */
04646 #if defined __STDC__ || defined __cplusplus
04647 int yyparse (struct parser_params *parser);
04648 #else
04649 int yyparse ();
04650 #endif
04651 #endif /* ! YYPARSE_PARAM */
04652 
04653 
04654 
04655 
04656 
04657 /*-------------------------.
04658 | yyparse or yypush_parse.  |
04659 `-------------------------*/
04660 
04661 #ifdef YYPARSE_PARAM
04662 #if (defined __STDC__ || defined __C99__FUNC__ \
04663      || defined __cplusplus || defined _MSC_VER)
04664 int
04665 yyparse (void *YYPARSE_PARAM)
04666 #else
04667 int
04668 yyparse (YYPARSE_PARAM)
04669     void *YYPARSE_PARAM;
04670 #endif
04671 #else /* ! YYPARSE_PARAM */
04672 #if (defined __STDC__ || defined __C99__FUNC__ \
04673      || defined __cplusplus || defined _MSC_VER)
04674 int
04675 yyparse (struct parser_params *parser)
04676 #else
04677 int
04678 yyparse (parser)
04679     struct parser_params *parser;
04680 #endif
04681 #endif
04682 {
04683 /* The lookahead symbol.  */
04684 int yychar;
04685 
04686 /* The semantic value of the lookahead symbol.  */
04687 YYSTYPE yylval;
04688 
04689     /* Number of syntax errors so far.  */
04690     int yynerrs;
04691 
04692     int yystate;
04693     /* Number of tokens to shift before error messages enabled.  */
04694     int yyerrstatus;
04695 
04696     /* The stacks and their tools:
04697        `yyss': related to states.
04698        `yyvs': related to semantic values.
04699 
04700        Refer to the stacks thru separate pointers, to allow yyoverflow
04701        to reallocate them elsewhere.  */
04702 
04703     /* The state stack.  */
04704     yytype_int16 yyssa[YYINITDEPTH];
04705     yytype_int16 *yyss;
04706     yytype_int16 *yyssp;
04707 
04708     /* The semantic value stack.  */
04709     YYSTYPE yyvsa[YYINITDEPTH];
04710     YYSTYPE *yyvs;
04711     YYSTYPE *yyvsp;
04712 
04713     YYSIZE_T yystacksize;
04714 
04715   int yyn;
04716   int yyresult;
04717   /* Lookahead token as an internal (translated) token number.  */
04718   int yytoken;
04719   /* The variables used to return semantic value and location from the
04720      action routines.  */
04721   YYSTYPE yyval;
04722 
04723 #if YYERROR_VERBOSE
04724   /* Buffer for error messages, and its allocated size.  */
04725   char yymsgbuf[128];
04726   char *yymsg = yymsgbuf;
04727   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04728 #endif
04729 
04730 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
04731 
04732   /* The number of symbols on the RHS of the reduced rule.
04733      Keep to zero when no symbol should be popped.  */
04734   int yylen = 0;
04735 
04736   yytoken = 0;
04737   yyss = yyssa;
04738   yyvs = yyvsa;
04739   yystacksize = YYINITDEPTH;
04740 
04741   YYDPRINTF ((stderr, "Starting parse\n"));
04742 
04743   yystate = 0;
04744   yyerrstatus = 0;
04745   yynerrs = 0;
04746   yychar = YYEMPTY; /* Cause a token to be read.  */
04747 
04748   /* Initialize stack pointers.
04749      Waste one element of value and location stack
04750      so that they stay on the same level as the state stack.
04751      The wasted elements are never initialized.  */
04752   yyssp = yyss;
04753   yyvsp = yyvs;
04754 
04755   goto yysetstate;
04756 
04757 /*------------------------------------------------------------.
04758 | yynewstate -- Push a new state, which is found in yystate.  |
04759 `------------------------------------------------------------*/
04760  yynewstate:
04761   /* In all cases, when you get here, the value and location stacks
04762      have just been pushed.  So pushing a state here evens the stacks.  */
04763   yyssp++;
04764 
04765  yysetstate:
04766   *yyssp = yystate;
04767 
04768   if (yyss + yystacksize - 1 <= yyssp)
04769     {
04770       /* Get the current used size of the three stacks, in elements.  */
04771       YYSIZE_T yysize = yyssp - yyss + 1;
04772 
04773 #ifdef yyoverflow
04774       {
04775         /* Give user a chance to reallocate the stack.  Use copies of
04776            these so that the &'s don't force the real ones into
04777            memory.  */
04778         YYSTYPE *yyvs1 = yyvs;
04779         yytype_int16 *yyss1 = yyss;
04780 
04781         /* Each stack pointer address is followed by the size of the
04782            data in use in that stack, in bytes.  This used to be a
04783            conditional around just the two extra args, but that might
04784            be undefined if yyoverflow is a macro.  */
04785         yyoverflow (YY_("memory exhausted"),
04786                     &yyss1, yysize * sizeof (*yyssp),
04787                     &yyvs1, yysize * sizeof (*yyvsp),
04788                     &yystacksize);
04789 
04790         yyss = yyss1;
04791         yyvs = yyvs1;
04792       }
04793 #else /* no yyoverflow */
04794 # ifndef YYSTACK_RELOCATE
04795       goto yyexhaustedlab;
04796 # else
04797       /* Extend the stack our own way.  */
04798       if (YYMAXDEPTH <= yystacksize)
04799         goto yyexhaustedlab;
04800       yystacksize *= 2;
04801       if (YYMAXDEPTH < yystacksize)
04802         yystacksize = YYMAXDEPTH;
04803 
04804       {
04805         yytype_int16 *yyss1 = yyss;
04806         union yyalloc *yyptr =
04807           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04808         if (! yyptr)
04809           goto yyexhaustedlab;
04810         YYSTACK_RELOCATE (yyss_alloc, yyss);
04811         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04812 #  undef YYSTACK_RELOCATE
04813         if (yyss1 != yyssa)
04814           YYSTACK_FREE (yyss1);
04815       }
04816 # endif
04817 #endif /* no yyoverflow */
04818 
04819       yyssp = yyss + yysize - 1;
04820       yyvsp = yyvs + yysize - 1;
04821 
04822       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04823                   (unsigned long int) yystacksize));
04824 
04825       if (yyss + yystacksize - 1 <= yyssp)
04826         YYABORT;
04827     }
04828 
04829   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04830 
04831   if (yystate == YYFINAL)
04832     YYACCEPT;
04833 
04834   goto yybackup;
04835 
04836 /*-----------.
04837 | yybackup.  |
04838 `-----------*/
04839 yybackup:
04840 
04841   /* Do appropriate processing given the current state.  Read a
04842      lookahead token if we need one and don't already have one.  */
04843 
04844   /* First try to decide what to do without reference to lookahead token.  */
04845   yyn = yypact[yystate];
04846   if (yyn == YYPACT_NINF)
04847     goto yydefault;
04848 
04849   /* Not known => get a lookahead token if don't already have one.  */
04850 
04851   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
04852   if (yychar == YYEMPTY)
04853     {
04854       YYDPRINTF ((stderr, "Reading a token: "));
04855       yychar = YYLEX;
04856     }
04857 
04858   if (yychar <= YYEOF)
04859     {
04860       yychar = yytoken = YYEOF;
04861       YYDPRINTF ((stderr, "Now at end of input.\n"));
04862     }
04863   else
04864     {
04865       yytoken = YYTRANSLATE (yychar);
04866       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04867     }
04868 
04869   /* If the proper action on seeing token YYTOKEN is to reduce or to
04870      detect an error, take that action.  */
04871   yyn += yytoken;
04872   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04873     goto yydefault;
04874   yyn = yytable[yyn];
04875   if (yyn <= 0)
04876     {
04877       if (yyn == 0 || yyn == YYTABLE_NINF)
04878         goto yyerrlab;
04879       yyn = -yyn;
04880       goto yyreduce;
04881     }
04882 
04883   /* Count tokens shifted since error; after three, turn off error
04884      status.  */
04885   if (yyerrstatus)
04886     yyerrstatus--;
04887 
04888   /* Shift the lookahead token.  */
04889   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04890 
04891   /* Discard the shifted token.  */
04892   yychar = YYEMPTY;
04893 
04894   yystate = yyn;
04895   *++yyvsp = yylval;
04896 
04897   goto yynewstate;
04898 
04899 
04900 /*-----------------------------------------------------------.
04901 | yydefault -- do the default action for the current state.  |
04902 `-----------------------------------------------------------*/
04903 yydefault:
04904   yyn = yydefact[yystate];
04905   if (yyn == 0)
04906     goto yyerrlab;
04907   goto yyreduce;
04908 
04909 
04910 /*-----------------------------.
04911 | yyreduce -- Do a reduction.  |
04912 `-----------------------------*/
04913 yyreduce:
04914   /* yyn is the number of a rule to reduce with.  */
04915   yylen = yyr2[yyn];
04916 
04917   /* If YYLEN is nonzero, implement the default value of the action:
04918      `$$ = $1'.
04919 
04920      Otherwise, the following line sets YYVAL to garbage.
04921      This behavior is undocumented and Bison
04922      users should not rely upon it.  Assigning to YYVAL
04923      unconditionally makes the parser a bit smaller, and it avoids a
04924      GCC warning that YYVAL may be used uninitialized.  */
04925   yyval = yyvsp[1-yylen];
04926 
04927 
04928   YY_REDUCE_PRINT (yyn);
04929   switch (yyn)
04930     {
04931         case 2:
04932 
04933 /* Line 1464 of yacc.c  */
04934 #line 786 "parse.y"
04935     {
04936                         lex_state = EXPR_BEG;
04937                     /*%%%*/
04938                         local_push(compile_for_eval || rb_parse_in_main());
04939                     /*%
04940                         local_push(0);
04941                     %*/
04942                     ;}
04943     break;
04944 
04945   case 3:
04946 
04947 /* Line 1464 of yacc.c  */
04948 #line 795 "parse.y"
04949     {
04950                     /*%%%*/
04951                         if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
04952                             /* last expression should not be void */
04953                             if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
04954                             else {
04955                                 NODE *node = (yyvsp[(2) - (2)].node);
04956                                 while (node->nd_next) {
04957                                     node = node->nd_next;
04958                                 }
04959                                 void_expr(node->nd_head);
04960                             }
04961                         }
04962                         ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
04963                     /*%
04964                         $$ = $2;
04965                         parser->result = dispatch1(program, $$);
04966                     %*/
04967                         local_pop();
04968                     ;}
04969     break;
04970 
04971   case 4:
04972 
04973 /* Line 1464 of yacc.c  */
04974 #line 818 "parse.y"
04975     {
04976                     /*%%%*/
04977                         void_stmts((yyvsp[(1) - (2)].node));
04978                         fixup_nodes(&deferred_nodes);
04979                     /*%
04980                     %*/
04981                         (yyval.node) = (yyvsp[(1) - (2)].node);
04982                     ;}
04983     break;
04984 
04985   case 5:
04986 
04987 /* Line 1464 of yacc.c  */
04988 #line 829 "parse.y"
04989     {
04990                     /*%%%*/
04991                         (yyval.node) = NEW_BEGIN(0);
04992                     /*%
04993                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
04994                                                   dispatch0(void_stmt));
04995                     %*/
04996                     ;}
04997     break;
04998 
04999   case 6:
05000 
05001 /* Line 1464 of yacc.c  */
05002 #line 838 "parse.y"
05003     {
05004                     /*%%%*/
05005                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05006                     /*%
05007                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05008                     %*/
05009                     ;}
05010     break;
05011 
05012   case 7:
05013 
05014 /* Line 1464 of yacc.c  */
05015 #line 846 "parse.y"
05016     {
05017                     /*%%%*/
05018                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05019                     /*%
05020                         $$ = dispatch2(stmts_add, $1, $3);
05021                     %*/
05022                     ;}
05023     break;
05024 
05025   case 8:
05026 
05027 /* Line 1464 of yacc.c  */
05028 #line 854 "parse.y"
05029     {
05030                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05031                     ;}
05032     break;
05033 
05034   case 10:
05035 
05036 /* Line 1464 of yacc.c  */
05037 #line 861 "parse.y"
05038     {
05039                         if (in_def || in_single) {
05040                             yyerror("BEGIN in method");
05041                         }
05042                     /*%%%*/
05043                         /* local_push(0); */
05044                     /*%
05045                     %*/
05046                     ;}
05047     break;
05048 
05049   case 11:
05050 
05051 /* Line 1464 of yacc.c  */
05052 #line 871 "parse.y"
05053     {
05054                     /*%%%*/
05055                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05056                                                             (yyvsp[(4) - (5)].node));
05057                         /* NEW_PREEXE($4)); */
05058                         /* local_pop(); */
05059                         (yyval.node) = NEW_BEGIN(0);
05060                     /*%
05061                         $$ = dispatch1(BEGIN, $4);
05062                     %*/
05063                     ;}
05064     break;
05065 
05066   case 12:
05067 
05068 /* Line 1464 of yacc.c  */
05069 #line 888 "parse.y"
05070     {
05071                     /*%%%*/
05072                         (yyval.node) = (yyvsp[(1) - (4)].node);
05073                         if ((yyvsp[(2) - (4)].node)) {
05074                             (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05075                         }
05076                         else if ((yyvsp[(3) - (4)].node)) {
05077                             rb_warn0("else without rescue is useless");
05078                             (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05079                         }
05080                         if ((yyvsp[(4) - (4)].node)) {
05081                             if ((yyval.node)) {
05082                                 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05083                             }
05084                             else {
05085                                 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05086                             }
05087                         }
05088                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05089                     /*%
05090                         $$ = dispatch4(bodystmt,
05091                                        escape_Qundef($1),
05092                                        escape_Qundef($2),
05093                                        escape_Qundef($3),
05094                                        escape_Qundef($4));
05095                     %*/
05096                     ;}
05097     break;
05098 
05099   case 13:
05100 
05101 /* Line 1464 of yacc.c  */
05102 #line 918 "parse.y"
05103     {
05104                     /*%%%*/
05105                         void_stmts((yyvsp[(1) - (2)].node));
05106                         fixup_nodes(&deferred_nodes);
05107                     /*%
05108                     %*/
05109                         (yyval.node) = (yyvsp[(1) - (2)].node);
05110                     ;}
05111     break;
05112 
05113   case 14:
05114 
05115 /* Line 1464 of yacc.c  */
05116 #line 929 "parse.y"
05117     {
05118                     /*%%%*/
05119                         (yyval.node) = NEW_BEGIN(0);
05120                     /*%
05121                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05122                                                   dispatch0(void_stmt));
05123                     %*/
05124                     ;}
05125     break;
05126 
05127   case 15:
05128 
05129 /* Line 1464 of yacc.c  */
05130 #line 938 "parse.y"
05131     {
05132                     /*%%%*/
05133                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05134                     /*%
05135                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05136                     %*/
05137                     ;}
05138     break;
05139 
05140   case 16:
05141 
05142 /* Line 1464 of yacc.c  */
05143 #line 946 "parse.y"
05144     {
05145                     /*%%%*/
05146                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05147                     /*%
05148                         $$ = dispatch2(stmts_add, $1, $3);
05149                     %*/
05150                     ;}
05151     break;
05152 
05153   case 17:
05154 
05155 /* Line 1464 of yacc.c  */
05156 #line 954 "parse.y"
05157     {
05158                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05159                     ;}
05160     break;
05161 
05162   case 18:
05163 
05164 /* Line 1464 of yacc.c  */
05165 #line 959 "parse.y"
05166     {lex_state = EXPR_FNAME;;}
05167     break;
05168 
05169   case 19:
05170 
05171 /* Line 1464 of yacc.c  */
05172 #line 960 "parse.y"
05173     {
05174                     /*%%%*/
05175                         (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05176                     /*%
05177                         $$ = dispatch2(alias, $2, $4);
05178                     %*/
05179                     ;}
05180     break;
05181 
05182   case 20:
05183 
05184 /* Line 1464 of yacc.c  */
05185 #line 968 "parse.y"
05186     {
05187                     /*%%%*/
05188                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05189                     /*%
05190                         $$ = dispatch2(var_alias, $2, $3);
05191                     %*/
05192                     ;}
05193     break;
05194 
05195   case 21:
05196 
05197 /* Line 1464 of yacc.c  */
05198 #line 976 "parse.y"
05199     {
05200                     /*%%%*/
05201                         char buf[2];
05202                         buf[0] = '$';
05203                         buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05204                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05205                     /*%
05206                         $$ = dispatch2(var_alias, $2, $3);
05207                     %*/
05208                     ;}
05209     break;
05210 
05211   case 22:
05212 
05213 /* Line 1464 of yacc.c  */
05214 #line 987 "parse.y"
05215     {
05216                     /*%%%*/
05217                         yyerror("can't make alias for the number variables");
05218                         (yyval.node) = NEW_BEGIN(0);
05219                     /*%
05220                         $$ = dispatch2(var_alias, $2, $3);
05221                         $$ = dispatch1(alias_error, $$);
05222                     %*/
05223                     ;}
05224     break;
05225 
05226   case 23:
05227 
05228 /* Line 1464 of yacc.c  */
05229 #line 997 "parse.y"
05230     {
05231                     /*%%%*/
05232                         (yyval.node) = (yyvsp[(2) - (2)].node);
05233                     /*%
05234                         $$ = dispatch1(undef, $2);
05235                     %*/
05236                     ;}
05237     break;
05238 
05239   case 24:
05240 
05241 /* Line 1464 of yacc.c  */
05242 #line 1005 "parse.y"
05243     {
05244                     /*%%%*/
05245                         (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05246                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05247                     /*%
05248                         $$ = dispatch2(if_mod, $3, $1);
05249                     %*/
05250                     ;}
05251     break;
05252 
05253   case 25:
05254 
05255 /* Line 1464 of yacc.c  */
05256 #line 1014 "parse.y"
05257     {
05258                     /*%%%*/
05259                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05260                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05261                     /*%
05262                         $$ = dispatch2(unless_mod, $3, $1);
05263                     %*/
05264                     ;}
05265     break;
05266 
05267   case 26:
05268 
05269 /* Line 1464 of yacc.c  */
05270 #line 1023 "parse.y"
05271     {
05272                     /*%%%*/
05273                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05274                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05275                         }
05276                         else {
05277                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05278                         }
05279                     /*%
05280                         $$ = dispatch2(while_mod, $3, $1);
05281                     %*/
05282                     ;}
05283     break;
05284 
05285   case 27:
05286 
05287 /* Line 1464 of yacc.c  */
05288 #line 1036 "parse.y"
05289     {
05290                     /*%%%*/
05291                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05292                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05293                         }
05294                         else {
05295                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05296                         }
05297                     /*%
05298                         $$ = dispatch2(until_mod, $3, $1);
05299                     %*/
05300                     ;}
05301     break;
05302 
05303   case 28:
05304 
05305 /* Line 1464 of yacc.c  */
05306 #line 1049 "parse.y"
05307     {
05308                     /*%%%*/
05309                         NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05310                         (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05311                     /*%
05312                         $$ = dispatch2(rescue_mod, $3, $1);
05313                     %*/
05314                     ;}
05315     break;
05316 
05317   case 29:
05318 
05319 /* Line 1464 of yacc.c  */
05320 #line 1058 "parse.y"
05321     {
05322                         if (in_def || in_single) {
05323                             rb_warn0("END in method; use at_exit");
05324                         }
05325                     /*%%%*/
05326                         (yyval.node) = NEW_POSTEXE(NEW_NODE(
05327                             NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
05328                     /*%
05329                         $$ = dispatch1(END, $3);
05330                     %*/
05331                     ;}
05332     break;
05333 
05334   case 30:
05335 
05336 /* Line 1464 of yacc.c  */
05337 #line 1070 "parse.y"
05338     {
05339                     /*%%%*/
05340                         value_expr((yyvsp[(3) - (3)].node));
05341                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05342                     /*%
05343                         $$ = dispatch2(assign, $1, $3);
05344                     %*/
05345                     ;}
05346     break;
05347 
05348   case 31:
05349 
05350 /* Line 1464 of yacc.c  */
05351 #line 1079 "parse.y"
05352     {
05353                     /*%%%*/
05354                         value_expr((yyvsp[(3) - (3)].node));
05355                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05356                         (yyval.node) = (yyvsp[(1) - (3)].node);
05357                     /*%
05358                         $$ = dispatch2(massign, $1, $3);
05359                     %*/
05360                     ;}
05361     break;
05362 
05363   case 32:
05364 
05365 /* Line 1464 of yacc.c  */
05366 #line 1089 "parse.y"
05367     {
05368                     /*%%%*/
05369                         value_expr((yyvsp[(3) - (3)].node));
05370                         if ((yyvsp[(1) - (3)].node)) {
05371                             ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05372                             if ((yyvsp[(2) - (3)].id) == tOROP) {
05373                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05374                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05375                                 if (is_asgn_or_id(vid)) {
05376                                     (yyval.node)->nd_aid = vid;
05377                                 }
05378                             }
05379                             else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05380                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05381                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05382                             }
05383                             else {
05384                                 (yyval.node) = (yyvsp[(1) - (3)].node);
05385                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05386                             }
05387                         }
05388                         else {
05389                             (yyval.node) = NEW_BEGIN(0);
05390                         }
05391                     /*%
05392                         $$ = dispatch3(opassign, $1, $2, $3);
05393                     %*/
05394                     ;}
05395     break;
05396 
05397   case 33:
05398 
05399 /* Line 1464 of yacc.c  */
05400 #line 1118 "parse.y"
05401     {
05402                     /*%%%*/
05403                         NODE *args;
05404 
05405                         value_expr((yyvsp[(6) - (6)].node));
05406                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05407                         args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05408                         if ((yyvsp[(5) - (6)].id) == tOROP) {
05409                             (yyvsp[(5) - (6)].id) = 0;
05410                         }
05411                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05412                             (yyvsp[(5) - (6)].id) = 1;
05413                         }
05414                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05415                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05416                     /*%
05417                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
05418                         $$ = dispatch3(opassign, $$, $5, $6);
05419                     %*/
05420                     ;}
05421     break;
05422 
05423   case 34:
05424 
05425 /* Line 1464 of yacc.c  */
05426 #line 1139 "parse.y"
05427     {
05428                     /*%%%*/
05429                         value_expr((yyvsp[(5) - (5)].node));
05430                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05431                             (yyvsp[(4) - (5)].id) = 0;
05432                         }
05433                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05434                             (yyvsp[(4) - (5)].id) = 1;
05435                         }
05436                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05437                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05438                     /*%
05439                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05440                         $$ = dispatch3(opassign, $$, $4, $5);
05441                     %*/
05442                     ;}
05443     break;
05444 
05445   case 35:
05446 
05447 /* Line 1464 of yacc.c  */
05448 #line 1156 "parse.y"
05449     {
05450                     /*%%%*/
05451                         value_expr((yyvsp[(5) - (5)].node));
05452                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05453                             (yyvsp[(4) - (5)].id) = 0;
05454                         }
05455                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05456                             (yyvsp[(4) - (5)].id) = 1;
05457                         }
05458                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05459                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05460                     /*%
05461                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05462                         $$ = dispatch3(opassign, $$, $4, $5);
05463                     %*/
05464                     ;}
05465     break;
05466 
05467   case 36:
05468 
05469 /* Line 1464 of yacc.c  */
05470 #line 1173 "parse.y"
05471     {
05472                     /*%%%*/
05473                         yyerror("constant re-assignment");
05474                         (yyval.node) = 0;
05475                     /*%
05476                         $$ = dispatch2(const_path_field, $1, $3);
05477                         $$ = dispatch3(opassign, $$, $4, $5);
05478                         $$ = dispatch1(assign_error, $$);
05479                     %*/
05480                     ;}
05481     break;
05482 
05483   case 37:
05484 
05485 /* Line 1464 of yacc.c  */
05486 #line 1184 "parse.y"
05487     {
05488                     /*%%%*/
05489                         value_expr((yyvsp[(5) - (5)].node));
05490                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05491                             (yyvsp[(4) - (5)].id) = 0;
05492                         }
05493                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05494                             (yyvsp[(4) - (5)].id) = 1;
05495                         }
05496                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05497                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05498                     /*%
05499                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
05500                         $$ = dispatch3(opassign, $$, $4, $5);
05501                     %*/
05502                     ;}
05503     break;
05504 
05505   case 38:
05506 
05507 /* Line 1464 of yacc.c  */
05508 #line 1201 "parse.y"
05509     {
05510                     /*%%%*/
05511                         rb_backref_error((yyvsp[(1) - (3)].node));
05512                         (yyval.node) = NEW_BEGIN(0);
05513                     /*%
05514                         $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
05515                         $$ = dispatch1(assign_error, $$);
05516                     %*/
05517                     ;}
05518     break;
05519 
05520   case 39:
05521 
05522 /* Line 1464 of yacc.c  */
05523 #line 1211 "parse.y"
05524     {
05525                     /*%%%*/
05526                         value_expr((yyvsp[(3) - (3)].node));
05527                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05528                     /*%
05529                         $$ = dispatch2(assign, $1, $3);
05530                     %*/
05531                     ;}
05532     break;
05533 
05534   case 40:
05535 
05536 /* Line 1464 of yacc.c  */
05537 #line 1220 "parse.y"
05538     {
05539                     /*%%%*/
05540                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05541                         (yyval.node) = (yyvsp[(1) - (3)].node);
05542                     /*%
05543                         $$ = dispatch2(massign, $1, $3);
05544                     %*/
05545                     ;}
05546     break;
05547 
05548   case 41:
05549 
05550 /* Line 1464 of yacc.c  */
05551 #line 1229 "parse.y"
05552     {
05553                     /*%%%*/
05554                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05555                         (yyval.node) = (yyvsp[(1) - (3)].node);
05556                     /*%
05557                         $$ = dispatch2(massign, $1, $3);
05558                     %*/
05559                     ;}
05560     break;
05561 
05562   case 44:
05563 
05564 /* Line 1464 of yacc.c  */
05565 #line 1242 "parse.y"
05566     {
05567                     /*%%%*/
05568                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05569                     /*%
05570                         $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
05571                     %*/
05572                     ;}
05573     break;
05574 
05575   case 45:
05576 
05577 /* Line 1464 of yacc.c  */
05578 #line 1250 "parse.y"
05579     {
05580                     /*%%%*/
05581                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05582                     /*%
05583                         $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
05584                     %*/
05585                     ;}
05586     break;
05587 
05588   case 46:
05589 
05590 /* Line 1464 of yacc.c  */
05591 #line 1258 "parse.y"
05592     {
05593                     /*%%%*/
05594                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05595                     /*%
05596                         $$ = dispatch2(unary, ripper_intern("not"), $3);
05597                     %*/
05598                     ;}
05599     break;
05600 
05601   case 47:
05602 
05603 /* Line 1464 of yacc.c  */
05604 #line 1266 "parse.y"
05605     {
05606                     /*%%%*/
05607                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05608                     /*%
05609                         $$ = dispatch2(unary, ripper_id2sym('!'), $2);
05610                     %*/
05611                     ;}
05612     break;
05613 
05614   case 49:
05615 
05616 /* Line 1464 of yacc.c  */
05617 #line 1277 "parse.y"
05618     {
05619                     /*%%%*/
05620                         value_expr((yyvsp[(1) - (1)].node));
05621                         (yyval.node) = (yyvsp[(1) - (1)].node);
05622                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
05623                     /*%
05624                         $$ = $1;
05625                     %*/
05626                     ;}
05627     break;
05628 
05629   case 53:
05630 
05631 /* Line 1464 of yacc.c  */
05632 #line 1294 "parse.y"
05633     {
05634                     /*%%%*/
05635                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05636                     /*%
05637                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
05638                         $$ = method_arg($$, $4);
05639                     %*/
05640                     ;}
05641     break;
05642 
05643   case 54:
05644 
05645 /* Line 1464 of yacc.c  */
05646 #line 1303 "parse.y"
05647     {
05648                     /*%%%*/
05649                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05650                     /*%
05651                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
05652                         $$ = method_arg($$, $4);
05653                     %*/
05654                     ;}
05655     break;
05656 
05657   case 55:
05658 
05659 /* Line 1464 of yacc.c  */
05660 #line 1314 "parse.y"
05661     {
05662                         (yyvsp[(1) - (1)].vars) = dyna_push();
05663                     /*%%%*/
05664                         (yyval.num) = ruby_sourceline;
05665                     /*%
05666                     %*/
05667                     ;}
05668     break;
05669 
05670   case 56:
05671 
05672 /* Line 1464 of yacc.c  */
05673 #line 1324 "parse.y"
05674     {
05675                     /*%%%*/
05676                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05677                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05678                     /*%
05679                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
05680                     %*/
05681                         dyna_pop((yyvsp[(1) - (5)].vars));
05682                     ;}
05683     break;
05684 
05685   case 57:
05686 
05687 /* Line 1464 of yacc.c  */
05688 #line 1336 "parse.y"
05689     {
05690                     /*%%%*/
05691                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05692                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05693                     /*%
05694                         $$ = dispatch2(command, $1, $2);
05695                     %*/
05696                     ;}
05697     break;
05698 
05699   case 58:
05700 
05701 /* Line 1464 of yacc.c  */
05702 #line 1345 "parse.y"
05703     {
05704                     /*%%%*/
05705                         block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05706                         (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05707                         (yyval.node) = (yyvsp[(3) - (3)].node);
05708                         fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05709                     /*%
05710                         $$ = dispatch2(command, $1, $2);
05711                         $$ = method_add_block($$, $3);
05712                     %*/
05713                     ;}
05714     break;
05715 
05716   case 59:
05717 
05718 /* Line 1464 of yacc.c  */
05719 #line 1357 "parse.y"
05720     {
05721                     /*%%%*/
05722                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05723                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05724                     /*%
05725                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05726                     %*/
05727                     ;}
05728     break;
05729 
05730   case 60:
05731 
05732 /* Line 1464 of yacc.c  */
05733 #line 1366 "parse.y"
05734     {
05735                     /*%%%*/
05736                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05737                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05738                         (yyval.node) = (yyvsp[(5) - (5)].node);
05739                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05740                     /*%
05741                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05742                         $$ = method_add_block($$, $5);
05743                     %*/
05744                    ;}
05745     break;
05746 
05747   case 61:
05748 
05749 /* Line 1464 of yacc.c  */
05750 #line 1378 "parse.y"
05751     {
05752                     /*%%%*/
05753                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05754                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05755                     /*%
05756                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05757                     %*/
05758                     ;}
05759     break;
05760 
05761   case 62:
05762 
05763 /* Line 1464 of yacc.c  */
05764 #line 1387 "parse.y"
05765     {
05766                     /*%%%*/
05767                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05768                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05769                         (yyval.node) = (yyvsp[(5) - (5)].node);
05770                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05771                     /*%
05772                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05773                         $$ = method_add_block($$, $5);
05774                     %*/
05775                    ;}
05776     break;
05777 
05778   case 63:
05779 
05780 /* Line 1464 of yacc.c  */
05781 #line 1399 "parse.y"
05782     {
05783                     /*%%%*/
05784                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05785                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05786                     /*%
05787                         $$ = dispatch1(super, $2);
05788                     %*/
05789                     ;}
05790     break;
05791 
05792   case 64:
05793 
05794 /* Line 1464 of yacc.c  */
05795 #line 1408 "parse.y"
05796     {
05797                     /*%%%*/
05798                         (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05799                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05800                     /*%
05801                         $$ = dispatch1(yield, $2);
05802                     %*/
05803                     ;}
05804     break;
05805 
05806   case 65:
05807 
05808 /* Line 1464 of yacc.c  */
05809 #line 1417 "parse.y"
05810     {
05811                     /*%%%*/
05812                         (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05813                     /*%
05814                         $$ = dispatch1(return, $2);
05815                     %*/
05816                     ;}
05817     break;
05818 
05819   case 66:
05820 
05821 /* Line 1464 of yacc.c  */
05822 #line 1425 "parse.y"
05823     {
05824                     /*%%%*/
05825                         (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05826                     /*%
05827                         $$ = dispatch1(break, $2);
05828                     %*/
05829                     ;}
05830     break;
05831 
05832   case 67:
05833 
05834 /* Line 1464 of yacc.c  */
05835 #line 1433 "parse.y"
05836     {
05837                     /*%%%*/
05838                         (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05839                     /*%
05840                         $$ = dispatch1(next, $2);
05841                     %*/
05842                     ;}
05843     break;
05844 
05845   case 69:
05846 
05847 /* Line 1464 of yacc.c  */
05848 #line 1444 "parse.y"
05849     {
05850                     /*%%%*/
05851                         (yyval.node) = (yyvsp[(2) - (3)].node);
05852                     /*%
05853                         $$ = dispatch1(mlhs_paren, $2);
05854                     %*/
05855                     ;}
05856     break;
05857 
05858   case 71:
05859 
05860 /* Line 1464 of yacc.c  */
05861 #line 1455 "parse.y"
05862     {
05863                     /*%%%*/
05864                         (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05865                     /*%
05866                         $$ = dispatch1(mlhs_paren, $2);
05867                     %*/
05868                     ;}
05869     break;
05870 
05871   case 72:
05872 
05873 /* Line 1464 of yacc.c  */
05874 #line 1465 "parse.y"
05875     {
05876                     /*%%%*/
05877                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05878                     /*%
05879                         $$ = $1;
05880                     %*/
05881                     ;}
05882     break;
05883 
05884   case 73:
05885 
05886 /* Line 1464 of yacc.c  */
05887 #line 1473 "parse.y"
05888     {
05889                     /*%%%*/
05890                         (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
05891                     /*%
05892                         $$ = mlhs_add($1, $2);
05893                     %*/
05894                     ;}
05895     break;
05896 
05897   case 74:
05898 
05899 /* Line 1464 of yacc.c  */
05900 #line 1481 "parse.y"
05901     {
05902                     /*%%%*/
05903                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05904                     /*%
05905                         $$ = mlhs_add_star($1, $3);
05906                     %*/
05907                     ;}
05908     break;
05909 
05910   case 75:
05911 
05912 /* Line 1464 of yacc.c  */
05913 #line 1489 "parse.y"
05914     {
05915                     /*%%%*/
05916                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
05917                     /*%
05918                         $1 = mlhs_add_star($1, $3);
05919                         $$ = mlhs_add($1, $5);
05920                     %*/
05921                     ;}
05922     break;
05923 
05924   case 76:
05925 
05926 /* Line 1464 of yacc.c  */
05927 #line 1498 "parse.y"
05928     {
05929                     /*%%%*/
05930                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
05931                     /*%
05932                         $$ = mlhs_add_star($1, Qnil);
05933                     %*/
05934                     ;}
05935     break;
05936 
05937   case 77:
05938 
05939 /* Line 1464 of yacc.c  */
05940 #line 1506 "parse.y"
05941     {
05942                     /*%%%*/
05943                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
05944                     /*%
05945                         $$ = mlhs_add_star($1, Qnil);
05946                     %*/
05947                     ;}
05948     break;
05949 
05950   case 78:
05951 
05952 /* Line 1464 of yacc.c  */
05953 #line 1514 "parse.y"
05954     {
05955                     /*%%%*/
05956                         (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
05957                     /*%
05958                         $$ = mlhs_add_star(mlhs_new(), $2);
05959                     %*/
05960                     ;}
05961     break;
05962 
05963   case 79:
05964 
05965 /* Line 1464 of yacc.c  */
05966 #line 1522 "parse.y"
05967     {
05968                     /*%%%*/
05969                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
05970                     /*%
05971                         $$ = mlhs_add_star(mlhs_new(), $2);
05972                     %*/
05973                     ;}
05974     break;
05975 
05976   case 80:
05977 
05978 /* Line 1464 of yacc.c  */
05979 #line 1530 "parse.y"
05980     {
05981                     /*%%%*/
05982                         (yyval.node) = NEW_MASGN(0, -1);
05983                     /*%
05984                         $$ = mlhs_add_star(mlhs_new(), Qnil);
05985                     %*/
05986                     ;}
05987     break;
05988 
05989   case 81:
05990 
05991 /* Line 1464 of yacc.c  */
05992 #line 1538 "parse.y"
05993     {
05994                     /*%%%*/
05995                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
05996                     /*%
05997                         $$ = mlhs_add_star(mlhs_new(), Qnil);
05998                     %*/
05999                     ;}
06000     break;
06001 
06002   case 83:
06003 
06004 /* Line 1464 of yacc.c  */
06005 #line 1549 "parse.y"
06006     {
06007                     /*%%%*/
06008                         (yyval.node) = (yyvsp[(2) - (3)].node);
06009                     /*%
06010                         $$ = dispatch1(mlhs_paren, $2);
06011                     %*/
06012                     ;}
06013     break;
06014 
06015   case 84:
06016 
06017 /* Line 1464 of yacc.c  */
06018 #line 1559 "parse.y"
06019     {
06020                     /*%%%*/
06021                         (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06022                     /*%
06023                         $$ = mlhs_add(mlhs_new(), $1);
06024                     %*/
06025                     ;}
06026     break;
06027 
06028   case 85:
06029 
06030 /* Line 1464 of yacc.c  */
06031 #line 1567 "parse.y"
06032     {
06033                     /*%%%*/
06034                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06035                     /*%
06036                         $$ = mlhs_add($1, $2);
06037                     %*/
06038                     ;}
06039     break;
06040 
06041   case 86:
06042 
06043 /* Line 1464 of yacc.c  */
06044 #line 1577 "parse.y"
06045     {
06046                     /*%%%*/
06047                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06048                     /*%
06049                         $$ = mlhs_add(mlhs_new(), $1);
06050                     %*/
06051                     ;}
06052     break;
06053 
06054   case 87:
06055 
06056 /* Line 1464 of yacc.c  */
06057 #line 1585 "parse.y"
06058     {
06059                     /*%%%*/
06060                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06061                     /*%
06062                         $$ = mlhs_add($1, $3);
06063                     %*/
06064                     ;}
06065     break;
06066 
06067   case 88:
06068 
06069 /* Line 1464 of yacc.c  */
06070 #line 1595 "parse.y"
06071     {
06072                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06073                     ;}
06074     break;
06075 
06076   case 89:
06077 
06078 /* Line 1464 of yacc.c  */
06079 #line 1599 "parse.y"
06080     {
06081                     /*%%%*/
06082                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06083                     /*%
06084                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06085                     %*/
06086                     ;}
06087     break;
06088 
06089   case 90:
06090 
06091 /* Line 1464 of yacc.c  */
06092 #line 1607 "parse.y"
06093     {
06094                     /*%%%*/
06095                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06096                     /*%
06097                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06098                     %*/
06099                     ;}
06100     break;
06101 
06102   case 91:
06103 
06104 /* Line 1464 of yacc.c  */
06105 #line 1615 "parse.y"
06106     {
06107                     /*%%%*/
06108                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06109                     /*%
06110                         $$ = dispatch2(const_path_field, $1, $3);
06111                     %*/
06112                     ;}
06113     break;
06114 
06115   case 92:
06116 
06117 /* Line 1464 of yacc.c  */
06118 #line 1623 "parse.y"
06119     {
06120                     /*%%%*/
06121                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06122                     /*%
06123                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06124                     %*/
06125                     ;}
06126     break;
06127 
06128   case 93:
06129 
06130 /* Line 1464 of yacc.c  */
06131 #line 1631 "parse.y"
06132     {
06133                     /*%%%*/
06134                         if (in_def || in_single)
06135                             yyerror("dynamic constant assignment");
06136                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06137                     /*%
06138                         if (in_def || in_single)
06139                             yyerror("dynamic constant assignment");
06140                         $$ = dispatch2(const_path_field, $1, $3);
06141                     %*/
06142                     ;}
06143     break;
06144 
06145   case 94:
06146 
06147 /* Line 1464 of yacc.c  */
06148 #line 1643 "parse.y"
06149     {
06150                     /*%%%*/
06151                         if (in_def || in_single)
06152                             yyerror("dynamic constant assignment");
06153                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06154                     /*%
06155                         $$ = dispatch1(top_const_field, $2);
06156                     %*/
06157                     ;}
06158     break;
06159 
06160   case 95:
06161 
06162 /* Line 1464 of yacc.c  */
06163 #line 1653 "parse.y"
06164     {
06165                     /*%%%*/
06166                         rb_backref_error((yyvsp[(1) - (1)].node));
06167                         (yyval.node) = NEW_BEGIN(0);
06168                     /*%
06169                         $$ = dispatch1(var_field, $1);
06170                         $$ = dispatch1(assign_error, $$);
06171                     %*/
06172                     ;}
06173     break;
06174 
06175   case 96:
06176 
06177 /* Line 1464 of yacc.c  */
06178 #line 1665 "parse.y"
06179     {
06180                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06181                     /*%%%*/
06182                         if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06183                     /*%
06184                         $$ = dispatch1(var_field, $$);
06185                     %*/
06186                     ;}
06187     break;
06188 
06189   case 97:
06190 
06191 /* Line 1464 of yacc.c  */
06192 #line 1674 "parse.y"
06193     {
06194                     /*%%%*/
06195                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06196                     /*%
06197                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06198                     %*/
06199                     ;}
06200     break;
06201 
06202   case 98:
06203 
06204 /* Line 1464 of yacc.c  */
06205 #line 1682 "parse.y"
06206     {
06207                     /*%%%*/
06208                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06209                     /*%
06210                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06211                     %*/
06212                     ;}
06213     break;
06214 
06215   case 99:
06216 
06217 /* Line 1464 of yacc.c  */
06218 #line 1690 "parse.y"
06219     {
06220                     /*%%%*/
06221                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06222                     /*%
06223                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
06224                     %*/
06225                     ;}
06226     break;
06227 
06228   case 100:
06229 
06230 /* Line 1464 of yacc.c  */
06231 #line 1698 "parse.y"
06232     {
06233                     /*%%%*/
06234                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06235                     /*%
06236                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06237                     %*/
06238                     ;}
06239     break;
06240 
06241   case 101:
06242 
06243 /* Line 1464 of yacc.c  */
06244 #line 1706 "parse.y"
06245     {
06246                     /*%%%*/
06247                         if (in_def || in_single)
06248                             yyerror("dynamic constant assignment");
06249                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06250                     /*%
06251                         $$ = dispatch2(const_path_field, $1, $3);
06252                         if (in_def || in_single) {
06253                             $$ = dispatch1(assign_error, $$);
06254                         }
06255                     %*/
06256                     ;}
06257     break;
06258 
06259   case 102:
06260 
06261 /* Line 1464 of yacc.c  */
06262 #line 1719 "parse.y"
06263     {
06264                     /*%%%*/
06265                         if (in_def || in_single)
06266                             yyerror("dynamic constant assignment");
06267                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06268                     /*%
06269                         $$ = dispatch1(top_const_field, $2);
06270                         if (in_def || in_single) {
06271                             $$ = dispatch1(assign_error, $$);
06272                         }
06273                     %*/
06274                     ;}
06275     break;
06276 
06277   case 103:
06278 
06279 /* Line 1464 of yacc.c  */
06280 #line 1732 "parse.y"
06281     {
06282                     /*%%%*/
06283                         rb_backref_error((yyvsp[(1) - (1)].node));
06284                         (yyval.node) = NEW_BEGIN(0);
06285                     /*%
06286                         $$ = dispatch1(assign_error, $1);
06287                     %*/
06288                     ;}
06289     break;
06290 
06291   case 104:
06292 
06293 /* Line 1464 of yacc.c  */
06294 #line 1743 "parse.y"
06295     {
06296                     /*%%%*/
06297                         yyerror("class/module name must be CONSTANT");
06298                     /*%
06299                         $$ = dispatch1(class_name_error, $1);
06300                     %*/
06301                     ;}
06302     break;
06303 
06304   case 106:
06305 
06306 /* Line 1464 of yacc.c  */
06307 #line 1754 "parse.y"
06308     {
06309                     /*%%%*/
06310                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06311                     /*%
06312                         $$ = dispatch1(top_const_ref, $2);
06313                     %*/
06314                     ;}
06315     break;
06316 
06317   case 107:
06318 
06319 /* Line 1464 of yacc.c  */
06320 #line 1762 "parse.y"
06321     {
06322                     /*%%%*/
06323                         (yyval.node) = NEW_COLON2(0, (yyval.node));
06324                     /*%
06325                         $$ = dispatch1(const_ref, $1);
06326                     %*/
06327                     ;}
06328     break;
06329 
06330   case 108:
06331 
06332 /* Line 1464 of yacc.c  */
06333 #line 1770 "parse.y"
06334     {
06335                     /*%%%*/
06336                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06337                     /*%
06338                         $$ = dispatch2(const_path_ref, $1, $3);
06339                     %*/
06340                     ;}
06341     break;
06342 
06343   case 112:
06344 
06345 /* Line 1464 of yacc.c  */
06346 #line 1783 "parse.y"
06347     {
06348                         lex_state = EXPR_ENDFN;
06349                         (yyval.id) = (yyvsp[(1) - (1)].id);
06350                     ;}
06351     break;
06352 
06353   case 113:
06354 
06355 /* Line 1464 of yacc.c  */
06356 #line 1788 "parse.y"
06357     {
06358                         lex_state = EXPR_ENDFN;
06359                     /*%%%*/
06360                         (yyval.id) = (yyvsp[(1) - (1)].id);
06361                     /*%
06362                         $$ = $1;
06363                     %*/
06364                     ;}
06365     break;
06366 
06367   case 116:
06368 
06369 /* Line 1464 of yacc.c  */
06370 #line 1803 "parse.y"
06371     {
06372                     /*%%%*/
06373                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06374                     /*%
06375                         $$ = dispatch1(symbol_literal, $1);
06376                     %*/
06377                     ;}
06378     break;
06379 
06380   case 118:
06381 
06382 /* Line 1464 of yacc.c  */
06383 #line 1814 "parse.y"
06384     {
06385                     /*%%%*/
06386                         (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06387                     /*%
06388                         $$ = rb_ary_new3(1, $1);
06389                     %*/
06390                     ;}
06391     break;
06392 
06393   case 119:
06394 
06395 /* Line 1464 of yacc.c  */
06396 #line 1821 "parse.y"
06397     {lex_state = EXPR_FNAME;;}
06398     break;
06399 
06400   case 120:
06401 
06402 /* Line 1464 of yacc.c  */
06403 #line 1822 "parse.y"
06404     {
06405                     /*%%%*/
06406                         (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06407                     /*%
06408                         rb_ary_push($1, $4);
06409                     %*/
06410                     ;}
06411     break;
06412 
06413   case 121:
06414 
06415 /* Line 1464 of yacc.c  */
06416 #line 1831 "parse.y"
06417     { ifndef_ripper((yyval.id) = '|'); ;}
06418     break;
06419 
06420   case 122:
06421 
06422 /* Line 1464 of yacc.c  */
06423 #line 1832 "parse.y"
06424     { ifndef_ripper((yyval.id) = '^'); ;}
06425     break;
06426 
06427   case 123:
06428 
06429 /* Line 1464 of yacc.c  */
06430 #line 1833 "parse.y"
06431     { ifndef_ripper((yyval.id) = '&'); ;}
06432     break;
06433 
06434   case 124:
06435 
06436 /* Line 1464 of yacc.c  */
06437 #line 1834 "parse.y"
06438     { ifndef_ripper((yyval.id) = tCMP); ;}
06439     break;
06440 
06441   case 125:
06442 
06443 /* Line 1464 of yacc.c  */
06444 #line 1835 "parse.y"
06445     { ifndef_ripper((yyval.id) = tEQ); ;}
06446     break;
06447 
06448   case 126:
06449 
06450 /* Line 1464 of yacc.c  */
06451 #line 1836 "parse.y"
06452     { ifndef_ripper((yyval.id) = tEQQ); ;}
06453     break;
06454 
06455   case 127:
06456 
06457 /* Line 1464 of yacc.c  */
06458 #line 1837 "parse.y"
06459     { ifndef_ripper((yyval.id) = tMATCH); ;}
06460     break;
06461 
06462   case 128:
06463 
06464 /* Line 1464 of yacc.c  */
06465 #line 1838 "parse.y"
06466     { ifndef_ripper((yyval.id) = tNMATCH); ;}
06467     break;
06468 
06469   case 129:
06470 
06471 /* Line 1464 of yacc.c  */
06472 #line 1839 "parse.y"
06473     { ifndef_ripper((yyval.id) = '>'); ;}
06474     break;
06475 
06476   case 130:
06477 
06478 /* Line 1464 of yacc.c  */
06479 #line 1840 "parse.y"
06480     { ifndef_ripper((yyval.id) = tGEQ); ;}
06481     break;
06482 
06483   case 131:
06484 
06485 /* Line 1464 of yacc.c  */
06486 #line 1841 "parse.y"
06487     { ifndef_ripper((yyval.id) = '<'); ;}
06488     break;
06489 
06490   case 132:
06491 
06492 /* Line 1464 of yacc.c  */
06493 #line 1842 "parse.y"
06494     { ifndef_ripper((yyval.id) = tLEQ); ;}
06495     break;
06496 
06497   case 133:
06498 
06499 /* Line 1464 of yacc.c  */
06500 #line 1843 "parse.y"
06501     { ifndef_ripper((yyval.id) = tNEQ); ;}
06502     break;
06503 
06504   case 134:
06505 
06506 /* Line 1464 of yacc.c  */
06507 #line 1844 "parse.y"
06508     { ifndef_ripper((yyval.id) = tLSHFT); ;}
06509     break;
06510 
06511   case 135:
06512 
06513 /* Line 1464 of yacc.c  */
06514 #line 1845 "parse.y"
06515     { ifndef_ripper((yyval.id) = tRSHFT); ;}
06516     break;
06517 
06518   case 136:
06519 
06520 /* Line 1464 of yacc.c  */
06521 #line 1846 "parse.y"
06522     { ifndef_ripper((yyval.id) = '+'); ;}
06523     break;
06524 
06525   case 137:
06526 
06527 /* Line 1464 of yacc.c  */
06528 #line 1847 "parse.y"
06529     { ifndef_ripper((yyval.id) = '-'); ;}
06530     break;
06531 
06532   case 138:
06533 
06534 /* Line 1464 of yacc.c  */
06535 #line 1848 "parse.y"
06536     { ifndef_ripper((yyval.id) = '*'); ;}
06537     break;
06538 
06539   case 139:
06540 
06541 /* Line 1464 of yacc.c  */
06542 #line 1849 "parse.y"
06543     { ifndef_ripper((yyval.id) = '*'); ;}
06544     break;
06545 
06546   case 140:
06547 
06548 /* Line 1464 of yacc.c  */
06549 #line 1850 "parse.y"
06550     { ifndef_ripper((yyval.id) = '/'); ;}
06551     break;
06552 
06553   case 141:
06554 
06555 /* Line 1464 of yacc.c  */
06556 #line 1851 "parse.y"
06557     { ifndef_ripper((yyval.id) = '%'); ;}
06558     break;
06559 
06560   case 142:
06561 
06562 /* Line 1464 of yacc.c  */
06563 #line 1852 "parse.y"
06564     { ifndef_ripper((yyval.id) = tPOW); ;}
06565     break;
06566 
06567   case 143:
06568 
06569 /* Line 1464 of yacc.c  */
06570 #line 1853 "parse.y"
06571     { ifndef_ripper((yyval.id) = '!'); ;}
06572     break;
06573 
06574   case 144:
06575 
06576 /* Line 1464 of yacc.c  */
06577 #line 1854 "parse.y"
06578     { ifndef_ripper((yyval.id) = '~'); ;}
06579     break;
06580 
06581   case 145:
06582 
06583 /* Line 1464 of yacc.c  */
06584 #line 1855 "parse.y"
06585     { ifndef_ripper((yyval.id) = tUPLUS); ;}
06586     break;
06587 
06588   case 146:
06589 
06590 /* Line 1464 of yacc.c  */
06591 #line 1856 "parse.y"
06592     { ifndef_ripper((yyval.id) = tUMINUS); ;}
06593     break;
06594 
06595   case 147:
06596 
06597 /* Line 1464 of yacc.c  */
06598 #line 1857 "parse.y"
06599     { ifndef_ripper((yyval.id) = tAREF); ;}
06600     break;
06601 
06602   case 148:
06603 
06604 /* Line 1464 of yacc.c  */
06605 #line 1858 "parse.y"
06606     { ifndef_ripper((yyval.id) = tASET); ;}
06607     break;
06608 
06609   case 149:
06610 
06611 /* Line 1464 of yacc.c  */
06612 #line 1859 "parse.y"
06613     { ifndef_ripper((yyval.id) = '`'); ;}
06614     break;
06615 
06616   case 191:
06617 
06618 /* Line 1464 of yacc.c  */
06619 #line 1877 "parse.y"
06620     {
06621                     /*%%%*/
06622                         value_expr((yyvsp[(3) - (3)].node));
06623                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06624                     /*%
06625                         $$ = dispatch2(assign, $1, $3);
06626                     %*/
06627                     ;}
06628     break;
06629 
06630   case 192:
06631 
06632 /* Line 1464 of yacc.c  */
06633 #line 1886 "parse.y"
06634     {
06635                     /*%%%*/
06636                         value_expr((yyvsp[(3) - (5)].node));
06637                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06638                         (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06639                     /*%
06640                         $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
06641                     %*/
06642                     ;}
06643     break;
06644 
06645   case 193:
06646 
06647 /* Line 1464 of yacc.c  */
06648 #line 1896 "parse.y"
06649     {
06650                     /*%%%*/
06651                         value_expr((yyvsp[(3) - (3)].node));
06652                         if ((yyvsp[(1) - (3)].node)) {
06653                             ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06654                             if ((yyvsp[(2) - (3)].id) == tOROP) {
06655                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06656                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06657                                 if (is_asgn_or_id(vid)) {
06658                                     (yyval.node)->nd_aid = vid;
06659                                 }
06660                             }
06661                             else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06662                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06663                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06664                             }
06665                             else {
06666                                 (yyval.node) = (yyvsp[(1) - (3)].node);
06667                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06668                             }
06669                         }
06670                         else {
06671                             (yyval.node) = NEW_BEGIN(0);
06672                         }
06673                     /*%
06674                         $$ = dispatch3(opassign, $1, $2, $3);
06675                     %*/
06676                     ;}
06677     break;
06678 
06679   case 194:
06680 
06681 /* Line 1464 of yacc.c  */
06682 #line 1925 "parse.y"
06683     {
06684                     /*%%%*/
06685                         value_expr((yyvsp[(3) - (5)].node));
06686                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06687                         if ((yyvsp[(1) - (5)].node)) {
06688                             ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06689                             if ((yyvsp[(2) - (5)].id) == tOROP) {
06690                                 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06691                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06692                                 if (is_asgn_or_id(vid)) {
06693                                     (yyval.node)->nd_aid = vid;
06694                                 }
06695                             }
06696                             else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06697                                 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06698                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06699                             }
06700                             else {
06701                                 (yyval.node) = (yyvsp[(1) - (5)].node);
06702                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06703                             }
06704                         }
06705                         else {
06706                             (yyval.node) = NEW_BEGIN(0);
06707                         }
06708                     /*%
06709                         $3 = dispatch2(rescue_mod, $3, $5);
06710                         $$ = dispatch3(opassign, $1, $2, $3);
06711                     %*/
06712                     ;}
06713     break;
06714 
06715   case 195:
06716 
06717 /* Line 1464 of yacc.c  */
06718 #line 1956 "parse.y"
06719     {
06720                     /*%%%*/
06721                         NODE *args;
06722 
06723                         value_expr((yyvsp[(6) - (6)].node));
06724                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06725                         if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06726                             args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06727                         }
06728                         else {
06729                             args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06730                         }
06731                         if ((yyvsp[(5) - (6)].id) == tOROP) {
06732                             (yyvsp[(5) - (6)].id) = 0;
06733                         }
06734                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06735                             (yyvsp[(5) - (6)].id) = 1;
06736                         }
06737                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06738                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06739                     /*%
06740                         $1 = dispatch2(aref_field, $1, escape_Qundef($3));
06741                         $$ = dispatch3(opassign, $1, $5, $6);
06742                     %*/
06743                     ;}
06744     break;
06745 
06746   case 196:
06747 
06748 /* Line 1464 of yacc.c  */
06749 #line 1982 "parse.y"
06750     {
06751                     /*%%%*/
06752                         value_expr((yyvsp[(5) - (5)].node));
06753                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06754                             (yyvsp[(4) - (5)].id) = 0;
06755                         }
06756                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06757                             (yyvsp[(4) - (5)].id) = 1;
06758                         }
06759                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06760                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06761                     /*%
06762                         $1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
06763                         $$ = dispatch3(opassign, $1, $4, $5);
06764                     %*/
06765                     ;}
06766     break;
06767 
06768   case 197:
06769 
06770 /* Line 1464 of yacc.c  */
06771 #line 1999 "parse.y"
06772     {
06773                     /*%%%*/
06774                         value_expr((yyvsp[(5) - (5)].node));
06775                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06776                             (yyvsp[(4) - (5)].id) = 0;
06777                         }
06778                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06779                             (yyvsp[(4) - (5)].id) = 1;
06780                         }
06781                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06782                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06783                     /*%
06784                         $1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
06785                         $$ = dispatch3(opassign, $1, $4, $5);
06786                     %*/
06787                     ;}
06788     break;
06789 
06790   case 198:
06791 
06792 /* Line 1464 of yacc.c  */
06793 #line 2016 "parse.y"
06794     {
06795                     /*%%%*/
06796                         value_expr((yyvsp[(5) - (5)].node));
06797                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06798                             (yyvsp[(4) - (5)].id) = 0;
06799                         }
06800                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06801                             (yyvsp[(4) - (5)].id) = 1;
06802                         }
06803                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06804                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06805                     /*%
06806                         $1 = dispatch3(field, $1, ripper_intern("::"), $3);
06807                         $$ = dispatch3(opassign, $1, $4, $5);
06808                     %*/
06809                     ;}
06810     break;
06811 
06812   case 199:
06813 
06814 /* Line 1464 of yacc.c  */
06815 #line 2033 "parse.y"
06816     {
06817                     /*%%%*/
06818                         yyerror("constant re-assignment");
06819                         (yyval.node) = NEW_BEGIN(0);
06820                     /*%
06821                         $$ = dispatch2(const_path_field, $1, $3);
06822                         $$ = dispatch3(opassign, $$, $4, $5);
06823                         $$ = dispatch1(assign_error, $$);
06824                     %*/
06825                     ;}
06826     break;
06827 
06828   case 200:
06829 
06830 /* Line 1464 of yacc.c  */
06831 #line 2044 "parse.y"
06832     {
06833                     /*%%%*/
06834                         yyerror("constant re-assignment");
06835                         (yyval.node) = NEW_BEGIN(0);
06836                     /*%
06837                         $$ = dispatch1(top_const_field, $2);
06838                         $$ = dispatch3(opassign, $$, $3, $4);
06839                         $$ = dispatch1(assign_error, $$);
06840                     %*/
06841                     ;}
06842     break;
06843 
06844   case 201:
06845 
06846 /* Line 1464 of yacc.c  */
06847 #line 2055 "parse.y"
06848     {
06849                     /*%%%*/
06850                         rb_backref_error((yyvsp[(1) - (3)].node));
06851                         (yyval.node) = NEW_BEGIN(0);
06852                     /*%
06853                         $$ = dispatch1(var_field, $1);
06854                         $$ = dispatch3(opassign, $$, $2, $3);
06855                         $$ = dispatch1(assign_error, $$);
06856                     %*/
06857                     ;}
06858     break;
06859 
06860   case 202:
06861 
06862 /* Line 1464 of yacc.c  */
06863 #line 2066 "parse.y"
06864     {
06865                     /*%%%*/
06866                         value_expr((yyvsp[(1) - (3)].node));
06867                         value_expr((yyvsp[(3) - (3)].node));
06868                         (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06869                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06870                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06871                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
06872                         }
06873                     /*%
06874                         $$ = dispatch2(dot2, $1, $3);
06875                     %*/
06876                     ;}
06877     break;
06878 
06879   case 203:
06880 
06881 /* Line 1464 of yacc.c  */
06882 #line 2080 "parse.y"
06883     {
06884                     /*%%%*/
06885                         value_expr((yyvsp[(1) - (3)].node));
06886                         value_expr((yyvsp[(3) - (3)].node));
06887                         (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06888                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06889                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06890                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
06891                         }
06892                     /*%
06893                         $$ = dispatch2(dot3, $1, $3);
06894                     %*/
06895                     ;}
06896     break;
06897 
06898   case 204:
06899 
06900 /* Line 1464 of yacc.c  */
06901 #line 2094 "parse.y"
06902     {
06903                     /*%%%*/
06904                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
06905                     /*%
06906                         $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
06907                     %*/
06908                     ;}
06909     break;
06910 
06911   case 205:
06912 
06913 /* Line 1464 of yacc.c  */
06914 #line 2102 "parse.y"
06915     {
06916                     /*%%%*/
06917                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
06918                     /*%
06919                         $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
06920                     %*/
06921                     ;}
06922     break;
06923 
06924   case 206:
06925 
06926 /* Line 1464 of yacc.c  */
06927 #line 2110 "parse.y"
06928     {
06929                     /*%%%*/
06930                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
06931                     /*%
06932                         $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
06933                     %*/
06934                     ;}
06935     break;
06936 
06937   case 207:
06938 
06939 /* Line 1464 of yacc.c  */
06940 #line 2118 "parse.y"
06941     {
06942                     /*%%%*/
06943                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
06944                     /*%
06945                         $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
06946                     %*/
06947                     ;}
06948     break;
06949 
06950   case 208:
06951 
06952 /* Line 1464 of yacc.c  */
06953 #line 2126 "parse.y"
06954     {
06955                     /*%%%*/
06956                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
06957                     /*%
06958                         $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
06959                     %*/
06960                     ;}
06961     break;
06962 
06963   case 209:
06964 
06965 /* Line 1464 of yacc.c  */
06966 #line 2134 "parse.y"
06967     {
06968                     /*%%%*/
06969                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
06970                     /*%
06971                         $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
06972                     %*/
06973                     ;}
06974     break;
06975 
06976   case 210:
06977 
06978 /* Line 1464 of yacc.c  */
06979 #line 2142 "parse.y"
06980     {
06981                     /*%%%*/
06982                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06983                     /*%
06984                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
06985                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
06986                     %*/
06987                     ;}
06988     break;
06989 
06990   case 211:
06991 
06992 /* Line 1464 of yacc.c  */
06993 #line 2151 "parse.y"
06994     {
06995                     /*%%%*/
06996                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06997                     /*%
06998                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
06999                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
07000                     %*/
07001                     ;}
07002     break;
07003 
07004   case 212:
07005 
07006 /* Line 1464 of yacc.c  */
07007 #line 2160 "parse.y"
07008     {
07009                     /*%%%*/
07010                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07011                     /*%
07012                         $$ = dispatch2(unary, ripper_intern("+@"), $2);
07013                     %*/
07014                     ;}
07015     break;
07016 
07017   case 213:
07018 
07019 /* Line 1464 of yacc.c  */
07020 #line 2168 "parse.y"
07021     {
07022                     /*%%%*/
07023                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07024                     /*%
07025                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
07026                     %*/
07027                     ;}
07028     break;
07029 
07030   case 214:
07031 
07032 /* Line 1464 of yacc.c  */
07033 #line 2176 "parse.y"
07034     {
07035                     /*%%%*/
07036                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07037                     /*%
07038                         $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
07039                     %*/
07040                     ;}
07041     break;
07042 
07043   case 215:
07044 
07045 /* Line 1464 of yacc.c  */
07046 #line 2184 "parse.y"
07047     {
07048                     /*%%%*/
07049                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07050                     /*%
07051                         $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
07052                     %*/
07053                     ;}
07054     break;
07055 
07056   case 216:
07057 
07058 /* Line 1464 of yacc.c  */
07059 #line 2192 "parse.y"
07060     {
07061                     /*%%%*/
07062                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07063                     /*%
07064                         $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
07065                     %*/
07066                     ;}
07067     break;
07068 
07069   case 217:
07070 
07071 /* Line 1464 of yacc.c  */
07072 #line 2200 "parse.y"
07073     {
07074                     /*%%%*/
07075                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07076                     /*%
07077                         $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
07078                     %*/
07079                     ;}
07080     break;
07081 
07082   case 218:
07083 
07084 /* Line 1464 of yacc.c  */
07085 #line 2208 "parse.y"
07086     {
07087                     /*%%%*/
07088                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07089                     /*%
07090                         $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
07091                     %*/
07092                     ;}
07093     break;
07094 
07095   case 219:
07096 
07097 /* Line 1464 of yacc.c  */
07098 #line 2216 "parse.y"
07099     {
07100                     /*%%%*/
07101                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07102                     /*%
07103                         $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
07104                     %*/
07105                     ;}
07106     break;
07107 
07108   case 220:
07109 
07110 /* Line 1464 of yacc.c  */
07111 #line 2224 "parse.y"
07112     {
07113                     /*%%%*/
07114                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07115                     /*%
07116                         $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
07117                     %*/
07118                     ;}
07119     break;
07120 
07121   case 221:
07122 
07123 /* Line 1464 of yacc.c  */
07124 #line 2232 "parse.y"
07125     {
07126                     /*%%%*/
07127                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07128                     /*%
07129                         $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
07130                     %*/
07131                     ;}
07132     break;
07133 
07134   case 222:
07135 
07136 /* Line 1464 of yacc.c  */
07137 #line 2240 "parse.y"
07138     {
07139                     /*%%%*/
07140                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07141                     /*%
07142                         $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
07143                     %*/
07144                     ;}
07145     break;
07146 
07147   case 223:
07148 
07149 /* Line 1464 of yacc.c  */
07150 #line 2248 "parse.y"
07151     {
07152                     /*%%%*/
07153                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07154                     /*%
07155                         $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
07156                     %*/
07157                     ;}
07158     break;
07159 
07160   case 224:
07161 
07162 /* Line 1464 of yacc.c  */
07163 #line 2256 "parse.y"
07164     {
07165                     /*%%%*/
07166                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07167                     /*%
07168                         $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
07169                     %*/
07170                     ;}
07171     break;
07172 
07173   case 225:
07174 
07175 /* Line 1464 of yacc.c  */
07176 #line 2264 "parse.y"
07177     {
07178                     /*%%%*/
07179                         (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07180                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07181                             (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07182                         }
07183                     /*%
07184                         $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
07185                     %*/
07186                     ;}
07187     break;
07188 
07189   case 226:
07190 
07191 /* Line 1464 of yacc.c  */
07192 #line 2275 "parse.y"
07193     {
07194                     /*%%%*/
07195                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07196                     /*%
07197                         $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
07198                     %*/
07199                     ;}
07200     break;
07201 
07202   case 227:
07203 
07204 /* Line 1464 of yacc.c  */
07205 #line 2283 "parse.y"
07206     {
07207                     /*%%%*/
07208                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07209                     /*%
07210                         $$ = dispatch2(unary, ID2SYM('!'), $2);
07211                     %*/
07212                     ;}
07213     break;
07214 
07215   case 228:
07216 
07217 /* Line 1464 of yacc.c  */
07218 #line 2291 "parse.y"
07219     {
07220                     /*%%%*/
07221                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07222                     /*%
07223                         $$ = dispatch2(unary, ID2SYM('~'), $2);
07224                     %*/
07225                     ;}
07226     break;
07227 
07228   case 229:
07229 
07230 /* Line 1464 of yacc.c  */
07231 #line 2299 "parse.y"
07232     {
07233                     /*%%%*/
07234                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07235                     /*%
07236                         $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
07237                     %*/
07238                     ;}
07239     break;
07240 
07241   case 230:
07242 
07243 /* Line 1464 of yacc.c  */
07244 #line 2307 "parse.y"
07245     {
07246                     /*%%%*/
07247                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07248                     /*%
07249                         $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
07250                     %*/
07251                     ;}
07252     break;
07253 
07254   case 231:
07255 
07256 /* Line 1464 of yacc.c  */
07257 #line 2315 "parse.y"
07258     {
07259                     /*%%%*/
07260                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07261                     /*%
07262                         $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
07263                     %*/
07264                     ;}
07265     break;
07266 
07267   case 232:
07268 
07269 /* Line 1464 of yacc.c  */
07270 #line 2323 "parse.y"
07271     {
07272                     /*%%%*/
07273                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07274                     /*%
07275                         $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
07276                     %*/
07277                     ;}
07278     break;
07279 
07280   case 233:
07281 
07282 /* Line 1464 of yacc.c  */
07283 #line 2330 "parse.y"
07284     {in_defined = 1;;}
07285     break;
07286 
07287   case 234:
07288 
07289 /* Line 1464 of yacc.c  */
07290 #line 2331 "parse.y"
07291     {
07292                     /*%%%*/
07293                         in_defined = 0;
07294                         (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07295                     /*%
07296                         in_defined = 0;
07297                         $$ = dispatch1(defined, $4);
07298                     %*/
07299                     ;}
07300     break;
07301 
07302   case 235:
07303 
07304 /* Line 1464 of yacc.c  */
07305 #line 2341 "parse.y"
07306     {
07307                     /*%%%*/
07308                         value_expr((yyvsp[(1) - (6)].node));
07309                         (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07310                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07311                     /*%
07312                         $$ = dispatch3(ifop, $1, $3, $6);
07313                     %*/
07314                     ;}
07315     break;
07316 
07317   case 236:
07318 
07319 /* Line 1464 of yacc.c  */
07320 #line 2351 "parse.y"
07321     {
07322                         (yyval.node) = (yyvsp[(1) - (1)].node);
07323                     ;}
07324     break;
07325 
07326   case 237:
07327 
07328 /* Line 1464 of yacc.c  */
07329 #line 2357 "parse.y"
07330     {
07331                     /*%%%*/
07332                         value_expr((yyvsp[(1) - (1)].node));
07333                         (yyval.node) = (yyvsp[(1) - (1)].node);
07334                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
07335                     /*%
07336                         $$ = $1;
07337                     %*/
07338                     ;}
07339     break;
07340 
07341   case 239:
07342 
07343 /* Line 1464 of yacc.c  */
07344 #line 2370 "parse.y"
07345     {
07346                         (yyval.node) = (yyvsp[(1) - (2)].node);
07347                     ;}
07348     break;
07349 
07350   case 240:
07351 
07352 /* Line 1464 of yacc.c  */
07353 #line 2374 "parse.y"
07354     {
07355                     /*%%%*/
07356                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07357                     /*%
07358                         $$ = arg_add_assocs($1, $3);
07359                     %*/
07360                     ;}
07361     break;
07362 
07363   case 241:
07364 
07365 /* Line 1464 of yacc.c  */
07366 #line 2382 "parse.y"
07367     {
07368                     /*%%%*/
07369                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07370                     /*%
07371                         $$ = arg_add_assocs(arg_new(), $1);
07372                     %*/
07373                     ;}
07374     break;
07375 
07376   case 242:
07377 
07378 /* Line 1464 of yacc.c  */
07379 #line 2392 "parse.y"
07380     {
07381                     /*%%%*/
07382                         (yyval.node) = (yyvsp[(2) - (3)].node);
07383                     /*%
07384                         $$ = dispatch1(arg_paren, escape_Qundef($2));
07385                     %*/
07386                     ;}
07387     break;
07388 
07389   case 247:
07390 
07391 /* Line 1464 of yacc.c  */
07392 #line 2410 "parse.y"
07393     {
07394                     /*%%%*/
07395                         value_expr((yyvsp[(1) - (1)].node));
07396                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07397                     /*%
07398                         $$ = arg_add(arg_new(), $1);
07399                     %*/
07400                     ;}
07401     break;
07402 
07403   case 248:
07404 
07405 /* Line 1464 of yacc.c  */
07406 #line 2419 "parse.y"
07407     {
07408                     /*%%%*/
07409                         (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07410                     /*%
07411                         $$ = arg_add_optblock($1, $2);
07412                     %*/
07413                     ;}
07414     break;
07415 
07416   case 249:
07417 
07418 /* Line 1464 of yacc.c  */
07419 #line 2427 "parse.y"
07420     {
07421                     /*%%%*/
07422                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07423                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07424                     /*%
07425                         $$ = arg_add_assocs(arg_new(), $1);
07426                         $$ = arg_add_optblock($$, $2);
07427                     %*/
07428                     ;}
07429     break;
07430 
07431   case 250:
07432 
07433 /* Line 1464 of yacc.c  */
07434 #line 2437 "parse.y"
07435     {
07436                     /*%%%*/
07437                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07438                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07439                     /*%
07440                         $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
07441                     %*/
07442                     ;}
07443     break;
07444 
07445   case 252:
07446 
07447 /* Line 1464 of yacc.c  */
07448 #line 2454 "parse.y"
07449     {
07450                         (yyval.val) = cmdarg_stack;
07451                         CMDARG_PUSH(1);
07452                     ;}
07453     break;
07454 
07455   case 253:
07456 
07457 /* Line 1464 of yacc.c  */
07458 #line 2459 "parse.y"
07459     {
07460                         /* CMDARG_POP() */
07461                         cmdarg_stack = (yyvsp[(1) - (2)].val);
07462                         (yyval.node) = (yyvsp[(2) - (2)].node);
07463                     ;}
07464     break;
07465 
07466   case 254:
07467 
07468 /* Line 1464 of yacc.c  */
07469 #line 2467 "parse.y"
07470     {
07471                     /*%%%*/
07472                         (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07473                     /*%
07474                         $$ = $2;
07475                     %*/
07476                     ;}
07477     break;
07478 
07479   case 255:
07480 
07481 /* Line 1464 of yacc.c  */
07482 #line 2477 "parse.y"
07483     {
07484                         (yyval.node) = (yyvsp[(2) - (2)].node);
07485                     ;}
07486     break;
07487 
07488   case 256:
07489 
07490 /* Line 1464 of yacc.c  */
07491 #line 2481 "parse.y"
07492     {
07493                         (yyval.node) = 0;
07494                     ;}
07495     break;
07496 
07497   case 257:
07498 
07499 /* Line 1464 of yacc.c  */
07500 #line 2485 "parse.y"
07501     {
07502                         (yyval.node) = 0;
07503                     ;}
07504     break;
07505 
07506   case 258:
07507 
07508 /* Line 1464 of yacc.c  */
07509 #line 2491 "parse.y"
07510     {
07511                     /*%%%*/
07512                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07513                     /*%
07514                         $$ = arg_add(arg_new(), $1);
07515                     %*/
07516                     ;}
07517     break;
07518 
07519   case 259:
07520 
07521 /* Line 1464 of yacc.c  */
07522 #line 2499 "parse.y"
07523     {
07524                     /*%%%*/
07525                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07526                     /*%
07527                         $$ = arg_add_star(arg_new(), $2);
07528                     %*/
07529                     ;}
07530     break;
07531 
07532   case 260:
07533 
07534 /* Line 1464 of yacc.c  */
07535 #line 2507 "parse.y"
07536     {
07537                     /*%%%*/
07538                         NODE *n1;
07539                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07540                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07541                         }
07542                         else {
07543                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07544                         }
07545                     /*%
07546                         $$ = arg_add($1, $3);
07547                     %*/
07548                     ;}
07549     break;
07550 
07551   case 261:
07552 
07553 /* Line 1464 of yacc.c  */
07554 #line 2521 "parse.y"
07555     {
07556                     /*%%%*/
07557                         NODE *n1;
07558                         if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07559                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07560                         }
07561                         else {
07562                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07563                         }
07564                     /*%
07565                         $$ = arg_add_star($1, $4);
07566                     %*/
07567                     ;}
07568     break;
07569 
07570   case 262:
07571 
07572 /* Line 1464 of yacc.c  */
07573 #line 2537 "parse.y"
07574     {
07575                     /*%%%*/
07576                         NODE *n1;
07577                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07578                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07579                         }
07580                         else {
07581                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07582                         }
07583                     /*%
07584                         $$ = mrhs_add(args2mrhs($1), $3);
07585                     %*/
07586                     ;}
07587     break;
07588 
07589   case 263:
07590 
07591 /* Line 1464 of yacc.c  */
07592 #line 2551 "parse.y"
07593     {
07594                     /*%%%*/
07595                         NODE *n1;
07596                         if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07597                             (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07598                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07599                         }
07600                         else {
07601                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07602                         }
07603                     /*%
07604                         $$ = mrhs_add_star(args2mrhs($1), $4);
07605                     %*/
07606                     ;}
07607     break;
07608 
07609   case 264:
07610 
07611 /* Line 1464 of yacc.c  */
07612 #line 2566 "parse.y"
07613     {
07614                     /*%%%*/
07615                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07616                     /*%
07617                         $$ = mrhs_add_star(mrhs_new(), $2);
07618                     %*/
07619                     ;}
07620     break;
07621 
07622   case 273:
07623 
07624 /* Line 1464 of yacc.c  */
07625 #line 2584 "parse.y"
07626     {
07627                     /*%%%*/
07628                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07629                     /*%
07630                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07631                     %*/
07632                     ;}
07633     break;
07634 
07635   case 274:
07636 
07637 /* Line 1464 of yacc.c  */
07638 #line 2592 "parse.y"
07639     {
07640                     /*%%%*/
07641                         (yyval.num) = ruby_sourceline;
07642                     /*%
07643                     %*/
07644                     ;}
07645     break;
07646 
07647   case 275:
07648 
07649 /* Line 1464 of yacc.c  */
07650 #line 2600 "parse.y"
07651     {
07652                     /*%%%*/
07653                         if ((yyvsp[(3) - (4)].node) == NULL) {
07654                             (yyval.node) = NEW_NIL();
07655                         }
07656                         else {
07657                             if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07658                                 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07659                                 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07660                             (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07661                         }
07662                         nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07663                     /*%
07664                         $$ = dispatch1(begin, $3);
07665                     %*/
07666                     ;}
07667     break;
07668 
07669   case 276:
07670 
07671 /* Line 1464 of yacc.c  */
07672 #line 2616 "parse.y"
07673     {lex_state = EXPR_ENDARG;;}
07674     break;
07675 
07676   case 277:
07677 
07678 /* Line 1464 of yacc.c  */
07679 #line 2617 "parse.y"
07680     {
07681                         rb_warning0("(...) interpreted as grouped expression");
07682                     /*%%%*/
07683                         (yyval.node) = (yyvsp[(2) - (4)].node);
07684                     /*%
07685                         $$ = dispatch1(paren, $2);
07686                     %*/
07687                     ;}
07688     break;
07689 
07690   case 278:
07691 
07692 /* Line 1464 of yacc.c  */
07693 #line 2626 "parse.y"
07694     {
07695                     /*%%%*/
07696                         (yyval.node) = (yyvsp[(2) - (3)].node);
07697                     /*%
07698                         $$ = dispatch1(paren, $2);
07699                     %*/
07700                     ;}
07701     break;
07702 
07703   case 279:
07704 
07705 /* Line 1464 of yacc.c  */
07706 #line 2634 "parse.y"
07707     {
07708                     /*%%%*/
07709                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07710                     /*%
07711                         $$ = dispatch2(const_path_ref, $1, $3);
07712                     %*/
07713                     ;}
07714     break;
07715 
07716   case 280:
07717 
07718 /* Line 1464 of yacc.c  */
07719 #line 2642 "parse.y"
07720     {
07721                     /*%%%*/
07722                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07723                     /*%
07724                         $$ = dispatch1(top_const_ref, $2);
07725                     %*/
07726                     ;}
07727     break;
07728 
07729   case 281:
07730 
07731 /* Line 1464 of yacc.c  */
07732 #line 2650 "parse.y"
07733     {
07734                     /*%%%*/
07735                         if ((yyvsp[(2) - (3)].node) == 0) {
07736                             (yyval.node) = NEW_ZARRAY(); /* zero length array*/
07737                         }
07738                         else {
07739                             (yyval.node) = (yyvsp[(2) - (3)].node);
07740                         }
07741                     /*%
07742                         $$ = dispatch1(array, escape_Qundef($2));
07743                     %*/
07744                     ;}
07745     break;
07746 
07747   case 282:
07748 
07749 /* Line 1464 of yacc.c  */
07750 #line 2663 "parse.y"
07751     {
07752                     /*%%%*/
07753                         (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07754                     /*%
07755                         $$ = dispatch1(hash, escape_Qundef($2));
07756                     %*/
07757                     ;}
07758     break;
07759 
07760   case 283:
07761 
07762 /* Line 1464 of yacc.c  */
07763 #line 2671 "parse.y"
07764     {
07765                     /*%%%*/
07766                         (yyval.node) = NEW_RETURN(0);
07767                     /*%
07768                         $$ = dispatch0(return0);
07769                     %*/
07770                     ;}
07771     break;
07772 
07773   case 284:
07774 
07775 /* Line 1464 of yacc.c  */
07776 #line 2679 "parse.y"
07777     {
07778                     /*%%%*/
07779                         (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07780                     /*%
07781                         $$ = dispatch1(yield, dispatch1(paren, $3));
07782                     %*/
07783                     ;}
07784     break;
07785 
07786   case 285:
07787 
07788 /* Line 1464 of yacc.c  */
07789 #line 2687 "parse.y"
07790     {
07791                     /*%%%*/
07792                         (yyval.node) = NEW_YIELD(0, Qfalse);
07793                     /*%
07794                         $$ = dispatch1(yield, dispatch1(paren, arg_new()));
07795                     %*/
07796                     ;}
07797     break;
07798 
07799   case 286:
07800 
07801 /* Line 1464 of yacc.c  */
07802 #line 2695 "parse.y"
07803     {
07804                     /*%%%*/
07805                         (yyval.node) = NEW_YIELD(0, Qfalse);
07806                     /*%
07807                         $$ = dispatch0(yield0);
07808                     %*/
07809                     ;}
07810     break;
07811 
07812   case 287:
07813 
07814 /* Line 1464 of yacc.c  */
07815 #line 2702 "parse.y"
07816     {in_defined = 1;;}
07817     break;
07818 
07819   case 288:
07820 
07821 /* Line 1464 of yacc.c  */
07822 #line 2703 "parse.y"
07823     {
07824                     /*%%%*/
07825                         in_defined = 0;
07826                         (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07827                     /*%
07828                         in_defined = 0;
07829                         $$ = dispatch1(defined, $5);
07830                     %*/
07831                     ;}
07832     break;
07833 
07834   case 289:
07835 
07836 /* Line 1464 of yacc.c  */
07837 #line 2713 "parse.y"
07838     {
07839                     /*%%%*/
07840                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
07841                     /*%
07842                         $$ = dispatch2(unary, ripper_intern("not"), $3);
07843                     %*/
07844                     ;}
07845     break;
07846 
07847   case 290:
07848 
07849 /* Line 1464 of yacc.c  */
07850 #line 2721 "parse.y"
07851     {
07852                     /*%%%*/
07853                         (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
07854                     /*%
07855                         $$ = dispatch2(unary, ripper_intern("not"), Qnil);
07856                     %*/
07857                     ;}
07858     break;
07859 
07860   case 291:
07861 
07862 /* Line 1464 of yacc.c  */
07863 #line 2729 "parse.y"
07864     {
07865                     /*%%%*/
07866                         (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
07867                         (yyval.node) = (yyvsp[(2) - (2)].node);
07868                         fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
07869                     /*%
07870                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07871                         $$ = method_add_block($$, $2);
07872                     %*/
07873                     ;}
07874     break;
07875 
07876   case 293:
07877 
07878 /* Line 1464 of yacc.c  */
07879 #line 2741 "parse.y"
07880     {
07881                     /*%%%*/
07882                         block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
07883                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
07884                         (yyval.node) = (yyvsp[(2) - (2)].node);
07885                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
07886                     /*%
07887                         $$ = method_add_block($1, $2);
07888                     %*/
07889                     ;}
07890     break;
07891 
07892   case 294:
07893 
07894 /* Line 1464 of yacc.c  */
07895 #line 2752 "parse.y"
07896     {
07897                         (yyval.node) = (yyvsp[(2) - (2)].node);
07898                     ;}
07899     break;
07900 
07901   case 295:
07902 
07903 /* Line 1464 of yacc.c  */
07904 #line 2759 "parse.y"
07905     {
07906                     /*%%%*/
07907                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07908                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07909                     /*%
07910                         $$ = dispatch3(if, $2, $4, escape_Qundef($5));
07911                     %*/
07912                     ;}
07913     break;
07914 
07915   case 296:
07916 
07917 /* Line 1464 of yacc.c  */
07918 #line 2771 "parse.y"
07919     {
07920                     /*%%%*/
07921                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07922                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07923                     /*%
07924                         $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
07925                     %*/
07926                     ;}
07927     break;
07928 
07929   case 297:
07930 
07931 /* Line 1464 of yacc.c  */
07932 #line 2779 "parse.y"
07933     {COND_PUSH(1);;}
07934     break;
07935 
07936   case 298:
07937 
07938 /* Line 1464 of yacc.c  */
07939 #line 2779 "parse.y"
07940     {COND_POP();;}
07941     break;
07942 
07943   case 299:
07944 
07945 /* Line 1464 of yacc.c  */
07946 #line 2782 "parse.y"
07947     {
07948                     /*%%%*/
07949                         (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07950                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07951                     /*%
07952                         $$ = dispatch2(while, $3, $6);
07953                     %*/
07954                     ;}
07955     break;
07956 
07957   case 300:
07958 
07959 /* Line 1464 of yacc.c  */
07960 #line 2790 "parse.y"
07961     {COND_PUSH(1);;}
07962     break;
07963 
07964   case 301:
07965 
07966 /* Line 1464 of yacc.c  */
07967 #line 2790 "parse.y"
07968     {COND_POP();;}
07969     break;
07970 
07971   case 302:
07972 
07973 /* Line 1464 of yacc.c  */
07974 #line 2793 "parse.y"
07975     {
07976                     /*%%%*/
07977                         (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07978                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07979                     /*%
07980                         $$ = dispatch2(until, $3, $6);
07981                     %*/
07982                     ;}
07983     break;
07984 
07985   case 303:
07986 
07987 /* Line 1464 of yacc.c  */
07988 #line 2804 "parse.y"
07989     {
07990                     /*%%%*/
07991                         (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
07992                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
07993                     /*%
07994                         $$ = dispatch2(case, $2, $4);
07995                     %*/
07996                     ;}
07997     break;
07998 
07999   case 304:
08000 
08001 /* Line 1464 of yacc.c  */
08002 #line 2813 "parse.y"
08003     {
08004                     /*%%%*/
08005                         (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08006                     /*%
08007                         $$ = dispatch2(case, Qnil, $3);
08008                     %*/
08009                     ;}
08010     break;
08011 
08012   case 305:
08013 
08014 /* Line 1464 of yacc.c  */
08015 #line 2821 "parse.y"
08016     {COND_PUSH(1);;}
08017     break;
08018 
08019   case 306:
08020 
08021 /* Line 1464 of yacc.c  */
08022 #line 2823 "parse.y"
08023     {COND_POP();;}
08024     break;
08025 
08026   case 307:
08027 
08028 /* Line 1464 of yacc.c  */
08029 #line 2826 "parse.y"
08030     {
08031                     /*%%%*/
08032                         /*
08033                          *  for a, b, c in e
08034                          *  #=>
08035                          *  e.each{|*x| a, b, c = x
08036                          *
08037                          *  for a in e
08038                          *  #=>
08039                          *  e.each{|x| a, = x}
08040                          */
08041                         ID id = internal_id();
08042                         ID *tbl = ALLOC_N(ID, 2);
08043                         NODE *m = NEW_ARGS_AUX(0, 0);
08044                         NODE *args, *scope;
08045 
08046                         if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08047                             /* if args.length == 1 && args[0].kind_of?(Array)
08048                              *   args = args[0]
08049                              * end
08050                              */
08051                             NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08052                             NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08053                             m->nd_next = block_append(
08054                                 NEW_IF(
08055                                     NEW_NODE(NODE_AND,
08056                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08057                                                       rb_intern("=="), one),
08058                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08059                                                       rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08060                                              0),
08061                                     NEW_DASGN_CURR(id,
08062                                                    NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08063                                     0),
08064                                 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08065 
08066                             args = new_args(m, 0, id, 0, 0);
08067                         }
08068                         else {
08069                             if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08070                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08071                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08072                                 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08073                                 m->nd_plen = 1;
08074                                 m->nd_next = (yyvsp[(2) - (9)].node);
08075                                 args = new_args(m, 0, 0, 0, 0);
08076                             }
08077                             else {
08078                                 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08079                                 args = new_args(m, 0, id, 0, 0);
08080                             }
08081                         }
08082                         scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08083                         tbl[0] = 1; tbl[1] = id;
08084                         (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08085                         fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08086                     /*%
08087                         $$ = dispatch3(for, $2, $5, $8);
08088                     %*/
08089                     ;}
08090     break;
08091 
08092   case 308:
08093 
08094 /* Line 1464 of yacc.c  */
08095 #line 2887 "parse.y"
08096     {
08097                         if (in_def || in_single)
08098                             yyerror("class definition in method body");
08099                         local_push(0);
08100                     /*%%%*/
08101                         (yyval.num) = ruby_sourceline;
08102                     /*%
08103                     %*/
08104                     ;}
08105     break;
08106 
08107   case 309:
08108 
08109 /* Line 1464 of yacc.c  */
08110 #line 2898 "parse.y"
08111     {
08112                     /*%%%*/
08113                         (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08114                         nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08115                     /*%
08116                         $$ = dispatch3(class, $2, $3, $5);
08117                     %*/
08118                         local_pop();
08119                     ;}
08120     break;
08121 
08122   case 310:
08123 
08124 /* Line 1464 of yacc.c  */
08125 #line 2908 "parse.y"
08126     {
08127                         (yyval.num) = in_def;
08128                         in_def = 0;
08129                     ;}
08130     break;
08131 
08132   case 311:
08133 
08134 /* Line 1464 of yacc.c  */
08135 #line 2913 "parse.y"
08136     {
08137                         (yyval.num) = in_single;
08138                         in_single = 0;
08139                         local_push(0);
08140                     ;}
08141     break;
08142 
08143   case 312:
08144 
08145 /* Line 1464 of yacc.c  */
08146 #line 2920 "parse.y"
08147     {
08148                     /*%%%*/
08149                         (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08150                         fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08151                     /*%
08152                         $$ = dispatch2(sclass, $3, $7);
08153                     %*/
08154                         local_pop();
08155                         in_def = (yyvsp[(4) - (8)].num);
08156                         in_single = (yyvsp[(6) - (8)].num);
08157                     ;}
08158     break;
08159 
08160   case 313:
08161 
08162 /* Line 1464 of yacc.c  */
08163 #line 2932 "parse.y"
08164     {
08165                         if (in_def || in_single)
08166                             yyerror("module definition in method body");
08167                         local_push(0);
08168                     /*%%%*/
08169                         (yyval.num) = ruby_sourceline;
08170                     /*%
08171                     %*/
08172                     ;}
08173     break;
08174 
08175   case 314:
08176 
08177 /* Line 1464 of yacc.c  */
08178 #line 2943 "parse.y"
08179     {
08180                     /*%%%*/
08181                         (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08182                         nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08183                     /*%
08184                         $$ = dispatch2(module, $2, $4);
08185                     %*/
08186                         local_pop();
08187                     ;}
08188     break;
08189 
08190   case 315:
08191 
08192 /* Line 1464 of yacc.c  */
08193 #line 2953 "parse.y"
08194     {
08195                         (yyval.id) = cur_mid;
08196                         cur_mid = (yyvsp[(2) - (2)].id);
08197                         in_def++;
08198                         local_push(0);
08199                     ;}
08200     break;
08201 
08202   case 316:
08203 
08204 /* Line 1464 of yacc.c  */
08205 #line 2962 "parse.y"
08206     {
08207                     /*%%%*/
08208                         NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08209                         reduce_nodes(&body);
08210                         (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08211                         nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08212                     /*%
08213                         $$ = dispatch3(def, $2, $4, $5);
08214                     %*/
08215                         local_pop();
08216                         in_def--;
08217                         cur_mid = (yyvsp[(3) - (6)].id);
08218                     ;}
08219     break;
08220 
08221   case 317:
08222 
08223 /* Line 1464 of yacc.c  */
08224 #line 2975 "parse.y"
08225     {lex_state = EXPR_FNAME;;}
08226     break;
08227 
08228   case 318:
08229 
08230 /* Line 1464 of yacc.c  */
08231 #line 2976 "parse.y"
08232     {
08233                         in_single++;
08234                         lex_state = EXPR_ENDFN; /* force for args */
08235                         local_push(0);
08236                     ;}
08237     break;
08238 
08239   case 319:
08240 
08241 /* Line 1464 of yacc.c  */
08242 #line 2984 "parse.y"
08243     {
08244                     /*%%%*/
08245                         NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08246                         reduce_nodes(&body);
08247                         (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08248                         nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08249                     /*%
08250                         $$ = dispatch5(defs, $2, $3, $5, $7, $8);
08251                     %*/
08252                         local_pop();
08253                         in_single--;
08254                     ;}
08255     break;
08256 
08257   case 320:
08258 
08259 /* Line 1464 of yacc.c  */
08260 #line 2997 "parse.y"
08261     {
08262                     /*%%%*/
08263                         (yyval.node) = NEW_BREAK(0);
08264                     /*%
08265                         $$ = dispatch1(break, arg_new());
08266                     %*/
08267                     ;}
08268     break;
08269 
08270   case 321:
08271 
08272 /* Line 1464 of yacc.c  */
08273 #line 3005 "parse.y"
08274     {
08275                     /*%%%*/
08276                         (yyval.node) = NEW_NEXT(0);
08277                     /*%
08278                         $$ = dispatch1(next, arg_new());
08279                     %*/
08280                     ;}
08281     break;
08282 
08283   case 322:
08284 
08285 /* Line 1464 of yacc.c  */
08286 #line 3013 "parse.y"
08287     {
08288                     /*%%%*/
08289                         (yyval.node) = NEW_REDO();
08290                     /*%
08291                         $$ = dispatch0(redo);
08292                     %*/
08293                     ;}
08294     break;
08295 
08296   case 323:
08297 
08298 /* Line 1464 of yacc.c  */
08299 #line 3021 "parse.y"
08300     {
08301                     /*%%%*/
08302                         (yyval.node) = NEW_RETRY();
08303                     /*%
08304                         $$ = dispatch0(retry);
08305                     %*/
08306                     ;}
08307     break;
08308 
08309   case 324:
08310 
08311 /* Line 1464 of yacc.c  */
08312 #line 3031 "parse.y"
08313     {
08314                     /*%%%*/
08315                         value_expr((yyvsp[(1) - (1)].node));
08316                         (yyval.node) = (yyvsp[(1) - (1)].node);
08317                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
08318                     /*%
08319                         $$ = $1;
08320                     %*/
08321                     ;}
08322     break;
08323 
08324   case 325:
08325 
08326 /* Line 1464 of yacc.c  */
08327 #line 3043 "parse.y"
08328     {
08329                         token_info_push("begin");
08330                     ;}
08331     break;
08332 
08333   case 326:
08334 
08335 /* Line 1464 of yacc.c  */
08336 #line 3049 "parse.y"
08337     {
08338                         token_info_push("if");
08339                     ;}
08340     break;
08341 
08342   case 327:
08343 
08344 /* Line 1464 of yacc.c  */
08345 #line 3055 "parse.y"
08346     {
08347                         token_info_push("unless");
08348                     ;}
08349     break;
08350 
08351   case 328:
08352 
08353 /* Line 1464 of yacc.c  */
08354 #line 3061 "parse.y"
08355     {
08356                         token_info_push("while");
08357                     ;}
08358     break;
08359 
08360   case 329:
08361 
08362 /* Line 1464 of yacc.c  */
08363 #line 3067 "parse.y"
08364     {
08365                         token_info_push("until");
08366                     ;}
08367     break;
08368 
08369   case 330:
08370 
08371 /* Line 1464 of yacc.c  */
08372 #line 3073 "parse.y"
08373     {
08374                         token_info_push("case");
08375                     ;}
08376     break;
08377 
08378   case 331:
08379 
08380 /* Line 1464 of yacc.c  */
08381 #line 3079 "parse.y"
08382     {
08383                         token_info_push("for");
08384                     ;}
08385     break;
08386 
08387   case 332:
08388 
08389 /* Line 1464 of yacc.c  */
08390 #line 3085 "parse.y"
08391     {
08392                         token_info_push("class");
08393                     ;}
08394     break;
08395 
08396   case 333:
08397 
08398 /* Line 1464 of yacc.c  */
08399 #line 3091 "parse.y"
08400     {
08401                         token_info_push("module");
08402                     ;}
08403     break;
08404 
08405   case 334:
08406 
08407 /* Line 1464 of yacc.c  */
08408 #line 3097 "parse.y"
08409     {
08410                         token_info_push("def");
08411                     /*%%%*/
08412                         (yyval.num) = ruby_sourceline;
08413                     /*%
08414                     %*/
08415                     ;}
08416     break;
08417 
08418   case 335:
08419 
08420 /* Line 1464 of yacc.c  */
08421 #line 3107 "parse.y"
08422     {
08423                         token_info_pop("end");
08424                     ;}
08425     break;
08426 
08427   case 342:
08428 
08429 /* Line 1464 of yacc.c  */
08430 #line 3137 "parse.y"
08431     {
08432                     /*%%%*/
08433                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08434                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08435                     /*%
08436                         $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
08437                     %*/
08438                     ;}
08439     break;
08440 
08441   case 344:
08442 
08443 /* Line 1464 of yacc.c  */
08444 #line 3149 "parse.y"
08445     {
08446                     /*%%%*/
08447                         (yyval.node) = (yyvsp[(2) - (2)].node);
08448                     /*%
08449                         $$ = dispatch1(else, $2);
08450                     %*/
08451                     ;}
08452     break;
08453 
08454   case 347:
08455 
08456 /* Line 1464 of yacc.c  */
08457 #line 3163 "parse.y"
08458     {
08459                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08460                     /*%%%*/
08461                     /*%
08462                         $$ = dispatch1(mlhs_paren, $$);
08463                     %*/
08464                     ;}
08465     break;
08466 
08467   case 348:
08468 
08469 /* Line 1464 of yacc.c  */
08470 #line 3171 "parse.y"
08471     {
08472                     /*%%%*/
08473                         (yyval.node) = (yyvsp[(2) - (3)].node);
08474                     /*%
08475                         $$ = dispatch1(mlhs_paren, $2);
08476                     %*/
08477                     ;}
08478     break;
08479 
08480   case 349:
08481 
08482 /* Line 1464 of yacc.c  */
08483 #line 3181 "parse.y"
08484     {
08485                     /*%%%*/
08486                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08487                     /*%
08488                         $$ = mlhs_add(mlhs_new(), $1);
08489                     %*/
08490                     ;}
08491     break;
08492 
08493   case 350:
08494 
08495 /* Line 1464 of yacc.c  */
08496 #line 3189 "parse.y"
08497     {
08498                     /*%%%*/
08499                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08500                     /*%
08501                         $$ = mlhs_add($1, $3);
08502                     %*/
08503                     ;}
08504     break;
08505 
08506   case 351:
08507 
08508 /* Line 1464 of yacc.c  */
08509 #line 3199 "parse.y"
08510     {
08511                     /*%%%*/
08512                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08513                     /*%
08514                         $$ = $1;
08515                     %*/
08516                     ;}
08517     break;
08518 
08519   case 352:
08520 
08521 /* Line 1464 of yacc.c  */
08522 #line 3207 "parse.y"
08523     {
08524                         (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08525                     /*%%%*/
08526                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08527                     /*%
08528                         $$ = mlhs_add_star($1, $$);
08529                     %*/
08530                     ;}
08531     break;
08532 
08533   case 353:
08534 
08535 /* Line 1464 of yacc.c  */
08536 #line 3216 "parse.y"
08537     {
08538                         (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08539                     /*%%%*/
08540                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08541                     /*%
08542                         $$ = mlhs_add_star($1, $$);
08543                     %*/
08544                     ;}
08545     break;
08546 
08547   case 354:
08548 
08549 /* Line 1464 of yacc.c  */
08550 #line 3225 "parse.y"
08551     {
08552                     /*%%%*/
08553                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08554                     /*%
08555                         $$ = mlhs_add_star($1, Qnil);
08556                     %*/
08557                     ;}
08558     break;
08559 
08560   case 355:
08561 
08562 /* Line 1464 of yacc.c  */
08563 #line 3233 "parse.y"
08564     {
08565                     /*%%%*/
08566                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08567                     /*%
08568                         $$ = mlhs_add_star($1, $5);
08569                     %*/
08570                     ;}
08571     break;
08572 
08573   case 356:
08574 
08575 /* Line 1464 of yacc.c  */
08576 #line 3241 "parse.y"
08577     {
08578                         (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08579                     /*%%%*/
08580                         (yyval.node) = NEW_MASGN(0, (yyval.node));
08581                     /*%
08582                         $$ = mlhs_add_star(mlhs_new(), $$);
08583                     %*/
08584                     ;}
08585     break;
08586 
08587   case 357:
08588 
08589 /* Line 1464 of yacc.c  */
08590 #line 3250 "parse.y"
08591     {
08592                         (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08593                     /*%%%*/
08594                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08595                     /*%
08596                       #if 0
08597                       TODO: Check me
08598                       #endif
08599                         $$ = mlhs_add_star($$, $4);
08600                     %*/
08601                     ;}
08602     break;
08603 
08604   case 358:
08605 
08606 /* Line 1464 of yacc.c  */
08607 #line 3262 "parse.y"
08608     {
08609                     /*%%%*/
08610                         (yyval.node) = NEW_MASGN(0, -1);
08611                     /*%
08612                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08613                     %*/
08614                     ;}
08615     break;
08616 
08617   case 359:
08618 
08619 /* Line 1464 of yacc.c  */
08620 #line 3270 "parse.y"
08621     {
08622                     /*%%%*/
08623                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08624                     /*%
08625                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08626                     %*/
08627                     ;}
08628     break;
08629 
08630   case 360:
08631 
08632 /* Line 1464 of yacc.c  */
08633 #line 3280 "parse.y"
08634     {
08635                     /*%%%*/
08636                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08637                     /*%
08638                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
08639                     %*/
08640                     ;}
08641     break;
08642 
08643   case 361:
08644 
08645 /* Line 1464 of yacc.c  */
08646 #line 3288 "parse.y"
08647     {
08648                     /*%%%*/
08649                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08650                     /*%
08651                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
08652                     %*/
08653                     ;}
08654     break;
08655 
08656   case 362:
08657 
08658 /* Line 1464 of yacc.c  */
08659 #line 3296 "parse.y"
08660     {
08661                     /*%%%*/
08662                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08663                     /*%
08664                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
08665                     %*/
08666                     ;}
08667     break;
08668 
08669   case 363:
08670 
08671 /* Line 1464 of yacc.c  */
08672 #line 3304 "parse.y"
08673     {
08674                     /*%%%*/
08675                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08676                     /*%
08677                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
08678                     %*/
08679                     ;}
08680     break;
08681 
08682   case 364:
08683 
08684 /* Line 1464 of yacc.c  */
08685 #line 3312 "parse.y"
08686     {
08687                     /*%%%*/
08688                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08689                     /*%
08690                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
08691                     %*/
08692                     ;}
08693     break;
08694 
08695   case 365:
08696 
08697 /* Line 1464 of yacc.c  */
08698 #line 3320 "parse.y"
08699     {
08700                     /*%%%*/
08701                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08702                     /*%
08703                         $$ = params_new($1, Qnil, Qnil, Qnil, Qnil);
08704                         dispatch1(excessed_comma, $$);
08705                     %*/
08706                     ;}
08707     break;
08708 
08709   case 366:
08710 
08711 /* Line 1464 of yacc.c  */
08712 #line 3329 "parse.y"
08713     {
08714                     /*%%%*/
08715                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08716                     /*%
08717                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
08718                     %*/
08719                     ;}
08720     break;
08721 
08722   case 367:
08723 
08724 /* Line 1464 of yacc.c  */
08725 #line 3337 "parse.y"
08726     {
08727                     /*%%%*/
08728                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08729                     /*%
08730                         $$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2));
08731                     %*/
08732                     ;}
08733     break;
08734 
08735   case 368:
08736 
08737 /* Line 1464 of yacc.c  */
08738 #line 3345 "parse.y"
08739     {
08740                     /*%%%*/
08741                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08742                     /*%
08743                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
08744                     %*/
08745                     ;}
08746     break;
08747 
08748   case 369:
08749 
08750 /* Line 1464 of yacc.c  */
08751 #line 3353 "parse.y"
08752     {
08753                     /*%%%*/
08754                         (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08755                     /*%
08756                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
08757                     %*/
08758                     ;}
08759     break;
08760 
08761   case 370:
08762 
08763 /* Line 1464 of yacc.c  */
08764 #line 3361 "parse.y"
08765     {
08766                     /*%%%*/
08767                         (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08768                     /*%
08769                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
08770                     %*/
08771                     ;}
08772     break;
08773 
08774   case 371:
08775 
08776 /* Line 1464 of yacc.c  */
08777 #line 3369 "parse.y"
08778     {
08779                     /*%%%*/
08780                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08781                     /*%
08782                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
08783                     %*/
08784                     ;}
08785     break;
08786 
08787   case 372:
08788 
08789 /* Line 1464 of yacc.c  */
08790 #line 3377 "parse.y"
08791     {
08792                     /*%%%*/
08793                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08794                     /*%
08795                         $$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2));
08796                     %*/
08797                     ;}
08798     break;
08799 
08800   case 373:
08801 
08802 /* Line 1464 of yacc.c  */
08803 #line 3385 "parse.y"
08804     {
08805                     /*%%%*/
08806                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08807                     /*%
08808                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
08809                     %*/
08810                     ;}
08811     break;
08812 
08813   case 374:
08814 
08815 /* Line 1464 of yacc.c  */
08816 #line 3393 "parse.y"
08817     {
08818                     /*%%%*/
08819                         (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08820                     /*%
08821                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
08822                     %*/
08823                     ;}
08824     break;
08825 
08826   case 376:
08827 
08828 /* Line 1464 of yacc.c  */
08829 #line 3404 "parse.y"
08830     {
08831                         command_start = TRUE;
08832                     ;}
08833     break;
08834 
08835   case 377:
08836 
08837 /* Line 1464 of yacc.c  */
08838 #line 3410 "parse.y"
08839     {
08840                     /*%%%*/
08841                         (yyval.node) = 0;
08842                     /*%
08843                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08844                                           escape_Qundef($2));
08845                     %*/
08846                     ;}
08847     break;
08848 
08849   case 378:
08850 
08851 /* Line 1464 of yacc.c  */
08852 #line 3419 "parse.y"
08853     {
08854                     /*%%%*/
08855                         (yyval.node) = 0;
08856                     /*%
08857                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08858                                           Qnil);
08859                     %*/
08860                     ;}
08861     break;
08862 
08863   case 379:
08864 
08865 /* Line 1464 of yacc.c  */
08866 #line 3428 "parse.y"
08867     {
08868                     /*%%%*/
08869                         (yyval.node) = (yyvsp[(2) - (4)].node);
08870                     /*%
08871                         $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
08872                     %*/
08873                     ;}
08874     break;
08875 
08876   case 381:
08877 
08878 /* Line 1464 of yacc.c  */
08879 #line 3440 "parse.y"
08880     {
08881                     /*%%%*/
08882                         (yyval.node) = 0;
08883                     /*%
08884                         $$ = $2;
08885                     %*/
08886                     ;}
08887     break;
08888 
08889   case 384:
08890 
08891 /* Line 1464 of yacc.c  */
08892 #line 3466 "parse.y"
08893     {
08894                         new_bv(get_id((yyvsp[(1) - (1)].id)));
08895                     /*%%%*/
08896                     /*%
08897                         $$ = get_value($1);
08898                     %*/
08899                     ;}
08900     break;
08901 
08902   case 385:
08903 
08904 /* Line 1464 of yacc.c  */
08905 #line 3474 "parse.y"
08906     {
08907                         (yyval.node) = 0;
08908                     ;}
08909     break;
08910 
08911   case 386:
08912 
08913 /* Line 1464 of yacc.c  */
08914 #line 3479 "parse.y"
08915     {
08916                         (yyval.vars) = dyna_push();
08917                     ;}
08918     break;
08919 
08920   case 387:
08921 
08922 /* Line 1464 of yacc.c  */
08923 #line 3482 "parse.y"
08924     {
08925                         (yyval.num) = lpar_beg;
08926                         lpar_beg = ++paren_nest;
08927                     ;}
08928     break;
08929 
08930   case 388:
08931 
08932 /* Line 1464 of yacc.c  */
08933 #line 3488 "parse.y"
08934     {
08935                         lpar_beg = (yyvsp[(2) - (4)].num);
08936                     /*%%%*/
08937                         (yyval.node) = (yyvsp[(3) - (4)].node);
08938                         (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
08939                     /*%
08940                         $$ = dispatch2(lambda, $3, $4);
08941                     %*/
08942                         dyna_pop((yyvsp[(1) - (4)].vars));
08943                     ;}
08944     break;
08945 
08946   case 389:
08947 
08948 /* Line 1464 of yacc.c  */
08949 #line 3501 "parse.y"
08950     {
08951                     /*%%%*/
08952                         (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
08953                     /*%
08954                         $$ = dispatch1(paren, $2);
08955                     %*/
08956                     ;}
08957     break;
08958 
08959   case 390:
08960 
08961 /* Line 1464 of yacc.c  */
08962 #line 3509 "parse.y"
08963     {
08964                     /*%%%*/
08965                         (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
08966                     /*%
08967                         $$ = $1;
08968                     %*/
08969                     ;}
08970     break;
08971 
08972   case 391:
08973 
08974 /* Line 1464 of yacc.c  */
08975 #line 3519 "parse.y"
08976     {
08977                         (yyval.node) = (yyvsp[(2) - (3)].node);
08978                     ;}
08979     break;
08980 
08981   case 392:
08982 
08983 /* Line 1464 of yacc.c  */
08984 #line 3523 "parse.y"
08985     {
08986                         (yyval.node) = (yyvsp[(2) - (3)].node);
08987                     ;}
08988     break;
08989 
08990   case 393:
08991 
08992 /* Line 1464 of yacc.c  */
08993 #line 3529 "parse.y"
08994     {
08995                         (yyvsp[(1) - (1)].vars) = dyna_push();
08996                     /*%%%*/
08997                         (yyval.num) = ruby_sourceline;
08998                     /*% %*/
08999                     ;}
09000     break;
09001 
09002   case 394:
09003 
09004 /* Line 1464 of yacc.c  */
09005 #line 3538 "parse.y"
09006     {
09007                     /*%%%*/
09008                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09009                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09010                     /*%
09011                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09012                     %*/
09013                         dyna_pop((yyvsp[(1) - (5)].vars));
09014                     ;}
09015     break;
09016 
09017   case 395:
09018 
09019 /* Line 1464 of yacc.c  */
09020 #line 3550 "parse.y"
09021     {
09022                     /*%%%*/
09023                         if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09024                             compile_error(PARSER_ARG "block given to yield");
09025                         }
09026                         else {
09027                             block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09028                         }
09029                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09030                         (yyval.node) = (yyvsp[(2) - (2)].node);
09031                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09032                     /*%
09033                         $$ = method_add_block($1, $2);
09034                     %*/
09035                     ;}
09036     break;
09037 
09038   case 396:
09039 
09040 /* Line 1464 of yacc.c  */
09041 #line 3566 "parse.y"
09042     {
09043                     /*%%%*/
09044                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09045                     /*%
09046                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09047                         $$ = method_optarg($$, $4);
09048                     %*/
09049                     ;}
09050     break;
09051 
09052   case 397:
09053 
09054 /* Line 1464 of yacc.c  */
09055 #line 3575 "parse.y"
09056     {
09057                     /*%%%*/
09058                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09059                     /*%
09060                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09061                         $$ = method_optarg($$, $4);
09062                     %*/
09063                     ;}
09064     break;
09065 
09066   case 398:
09067 
09068 /* Line 1464 of yacc.c  */
09069 #line 3586 "parse.y"
09070     {
09071                     /*%%%*/
09072                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09073                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09074                     /*%
09075                         $$ = method_arg(dispatch1(fcall, $1), $2);
09076                     %*/
09077                     ;}
09078     break;
09079 
09080   case 399:
09081 
09082 /* Line 1464 of yacc.c  */
09083 #line 3595 "parse.y"
09084     {
09085                     /*%%%*/
09086                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09087                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09088                     /*%
09089                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09090                         $$ = method_optarg($$, $4);
09091                     %*/
09092                     ;}
09093     break;
09094 
09095   case 400:
09096 
09097 /* Line 1464 of yacc.c  */
09098 #line 3605 "parse.y"
09099     {
09100                     /*%%%*/
09101                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09102                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09103                     /*%
09104                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09105                         $$ = method_optarg($$, $4);
09106                     %*/
09107                     ;}
09108     break;
09109 
09110   case 401:
09111 
09112 /* Line 1464 of yacc.c  */
09113 #line 3615 "parse.y"
09114     {
09115                     /*%%%*/
09116                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09117                     /*%
09118                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09119                     %*/
09120                     ;}
09121     break;
09122 
09123   case 402:
09124 
09125 /* Line 1464 of yacc.c  */
09126 #line 3623 "parse.y"
09127     {
09128                     /*%%%*/
09129                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09130                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09131                     /*%
09132                         $$ = dispatch3(call, $1, ripper_id2sym('.'),
09133                                        ripper_intern("call"));
09134                         $$ = method_optarg($$, $3);
09135                     %*/
09136                     ;}
09137     break;
09138 
09139   case 403:
09140 
09141 /* Line 1464 of yacc.c  */
09142 #line 3634 "parse.y"
09143     {
09144                     /*%%%*/
09145                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09146                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09147                     /*%
09148                         $$ = dispatch3(call, $1, ripper_intern("::"),
09149                                        ripper_intern("call"));
09150                         $$ = method_optarg($$, $3);
09151                     %*/
09152                     ;}
09153     break;
09154 
09155   case 404:
09156 
09157 /* Line 1464 of yacc.c  */
09158 #line 3645 "parse.y"
09159     {
09160                     /*%%%*/
09161                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09162                     /*%
09163                         $$ = dispatch1(super, $2);
09164                     %*/
09165                     ;}
09166     break;
09167 
09168   case 405:
09169 
09170 /* Line 1464 of yacc.c  */
09171 #line 3653 "parse.y"
09172     {
09173                     /*%%%*/
09174                         (yyval.node) = NEW_ZSUPER();
09175                     /*%
09176                         $$ = dispatch0(zsuper);
09177                     %*/
09178                     ;}
09179     break;
09180 
09181   case 406:
09182 
09183 /* Line 1464 of yacc.c  */
09184 #line 3661 "parse.y"
09185     {
09186                     /*%%%*/
09187                         if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09188                             (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09189                         else
09190                             (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09191                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09192                     /*%
09193                         $$ = dispatch2(aref, $1, escape_Qundef($3));
09194                     %*/
09195                     ;}
09196     break;
09197 
09198   case 407:
09199 
09200 /* Line 1464 of yacc.c  */
09201 #line 3675 "parse.y"
09202     {
09203                         (yyvsp[(1) - (1)].vars) = dyna_push();
09204                     /*%%%*/
09205                         (yyval.num) = ruby_sourceline;
09206                     /*%
09207                     %*/
09208                     ;}
09209     break;
09210 
09211   case 408:
09212 
09213 /* Line 1464 of yacc.c  */
09214 #line 3684 "parse.y"
09215     {
09216                     /*%%%*/
09217                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09218                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09219                     /*%
09220                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
09221                     %*/
09222                         dyna_pop((yyvsp[(1) - (5)].vars));
09223                     ;}
09224     break;
09225 
09226   case 409:
09227 
09228 /* Line 1464 of yacc.c  */
09229 #line 3694 "parse.y"
09230     {
09231                         (yyvsp[(1) - (1)].vars) = dyna_push();
09232                     /*%%%*/
09233                         (yyval.num) = ruby_sourceline;
09234                     /*%
09235                     %*/
09236                     ;}
09237     break;
09238 
09239   case 410:
09240 
09241 /* Line 1464 of yacc.c  */
09242 #line 3703 "parse.y"
09243     {
09244                     /*%%%*/
09245                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09246                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09247                     /*%
09248                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09249                     %*/
09250                         dyna_pop((yyvsp[(1) - (5)].vars));
09251                     ;}
09252     break;
09253 
09254   case 411:
09255 
09256 /* Line 1464 of yacc.c  */
09257 #line 3717 "parse.y"
09258     {
09259                     /*%%%*/
09260                         (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09261                     /*%
09262                         $$ = dispatch3(when, $2, $4, escape_Qundef($5));
09263                     %*/
09264                     ;}
09265     break;
09266 
09267   case 414:
09268 
09269 /* Line 1464 of yacc.c  */
09270 #line 3733 "parse.y"
09271     {
09272                     /*%%%*/
09273                         if ((yyvsp[(3) - (6)].node)) {
09274                             (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09275                             (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09276                         }
09277                         (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09278                         fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09279                     /*%
09280                         $$ = dispatch4(rescue,
09281                                        escape_Qundef($2),
09282                                        escape_Qundef($3),
09283                                        escape_Qundef($5),
09284                                        escape_Qundef($6));
09285                     %*/
09286                     ;}
09287     break;
09288 
09289   case 416:
09290 
09291 /* Line 1464 of yacc.c  */
09292 #line 3753 "parse.y"
09293     {
09294                     /*%%%*/
09295                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09296                     /*%
09297                         $$ = rb_ary_new3(1, $1);
09298                     %*/
09299                     ;}
09300     break;
09301 
09302   case 417:
09303 
09304 /* Line 1464 of yacc.c  */
09305 #line 3761 "parse.y"
09306     {
09307                     /*%%%*/
09308                         if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09309                     /*%
09310                         $$ = $1;
09311                     %*/
09312                     ;}
09313     break;
09314 
09315   case 419:
09316 
09317 /* Line 1464 of yacc.c  */
09318 #line 3772 "parse.y"
09319     {
09320                         (yyval.node) = (yyvsp[(2) - (2)].node);
09321                     ;}
09322     break;
09323 
09324   case 421:
09325 
09326 /* Line 1464 of yacc.c  */
09327 #line 3779 "parse.y"
09328     {
09329                     /*%%%*/
09330                         (yyval.node) = (yyvsp[(2) - (2)].node);
09331                     /*%
09332                         $$ = dispatch1(ensure, $2);
09333                     %*/
09334                     ;}
09335     break;
09336 
09337   case 424:
09338 
09339 /* Line 1464 of yacc.c  */
09340 #line 3791 "parse.y"
09341     {
09342                     /*%%%*/
09343                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09344                     /*%
09345                         $$ = dispatch1(symbol_literal, $1);
09346                     %*/
09347                     ;}
09348     break;
09349 
09350   case 426:
09351 
09352 /* Line 1464 of yacc.c  */
09353 #line 3802 "parse.y"
09354     {
09355                     /*%%%*/
09356                         NODE *node = (yyvsp[(1) - (1)].node);
09357                         if (!node) {
09358                             node = NEW_STR(STR_NEW0());
09359                         }
09360                         else {
09361                             node = evstr2dstr(node);
09362                         }
09363                         (yyval.node) = node;
09364                     /*%
09365                         $$ = $1;
09366                     %*/
09367                     ;}
09368     break;
09369 
09370   case 429:
09371 
09372 /* Line 1464 of yacc.c  */
09373 #line 3821 "parse.y"
09374     {
09375                     /*%%%*/
09376                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09377                     /*%
09378                         $$ = dispatch2(string_concat, $1, $2);
09379                     %*/
09380                     ;}
09381     break;
09382 
09383   case 430:
09384 
09385 /* Line 1464 of yacc.c  */
09386 #line 3831 "parse.y"
09387     {
09388                     /*%%%*/
09389                         (yyval.node) = (yyvsp[(2) - (3)].node);
09390                     /*%
09391                         $$ = dispatch1(string_literal, $2);
09392                     %*/
09393                     ;}
09394     break;
09395 
09396   case 431:
09397 
09398 /* Line 1464 of yacc.c  */
09399 #line 3841 "parse.y"
09400     {
09401                     /*%%%*/
09402                         NODE *node = (yyvsp[(2) - (3)].node);
09403                         if (!node) {
09404                             node = NEW_XSTR(STR_NEW0());
09405                         }
09406                         else {
09407                             switch (nd_type(node)) {
09408                               case NODE_STR:
09409                                 nd_set_type(node, NODE_XSTR);
09410                                 break;
09411                               case NODE_DSTR:
09412                                 nd_set_type(node, NODE_DXSTR);
09413                                 break;
09414                               default:
09415                                 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09416                                 break;
09417                             }
09418                         }
09419                         (yyval.node) = node;
09420                     /*%
09421                         $$ = dispatch1(xstring_literal, $2);
09422                     %*/
09423                     ;}
09424     break;
09425 
09426   case 432:
09427 
09428 /* Line 1464 of yacc.c  */
09429 #line 3868 "parse.y"
09430     {
09431                     /*%%%*/
09432                         int options = (yyvsp[(3) - (3)].num);
09433                         NODE *node = (yyvsp[(2) - (3)].node);
09434                         NODE *list, *prev;
09435                         if (!node) {
09436                             node = NEW_LIT(reg_compile(STR_NEW0(), options));
09437                         }
09438                         else switch (nd_type(node)) {
09439                           case NODE_STR:
09440                             {
09441                                 VALUE src = node->nd_lit;
09442                                 nd_set_type(node, NODE_LIT);
09443                                 node->nd_lit = reg_compile(src, options);
09444                             }
09445                             break;
09446                           default:
09447                             node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09448                           case NODE_DSTR:
09449                             if (options & RE_OPTION_ONCE) {
09450                                 nd_set_type(node, NODE_DREGX_ONCE);
09451                             }
09452                             else {
09453                                 nd_set_type(node, NODE_DREGX);
09454                             }
09455                             node->nd_cflag = options & RE_OPTION_MASK;
09456                             if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09457                             for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09458                                 if (nd_type(list->nd_head) == NODE_STR) {
09459                                     VALUE tail = list->nd_head->nd_lit;
09460                                     if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09461                                         VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09462                                         if (!literal_concat0(parser, lit, tail)) {
09463                                             node = 0;
09464                                             break;
09465                                         }
09466                                         rb_str_resize(tail, 0);
09467                                         prev->nd_next = list->nd_next;
09468                                         rb_gc_force_recycle((VALUE)list->nd_head);
09469                                         rb_gc_force_recycle((VALUE)list);
09470                                         list = prev;
09471                                     }
09472                                     else {
09473                                         prev = list;
09474                                     }
09475                                 }
09476                                 else {
09477                                     prev = 0;
09478                                 }
09479                             }
09480                             if (!node->nd_next) {
09481                                 VALUE src = node->nd_lit;
09482                                 nd_set_type(node, NODE_LIT);
09483                                 node->nd_lit = reg_compile(src, options);
09484                             }
09485                             break;
09486                         }
09487                         (yyval.node) = node;
09488                     /*%
09489                         $$ = dispatch2(regexp_literal, $2, $3);
09490                     %*/
09491                     ;}
09492     break;
09493 
09494   case 433:
09495 
09496 /* Line 1464 of yacc.c  */
09497 #line 3933 "parse.y"
09498     {
09499                     /*%%%*/
09500                         (yyval.node) = NEW_ZARRAY();
09501                     /*%
09502                         $$ = dispatch0(words_new);
09503                     %*/
09504                     ;}
09505     break;
09506 
09507   case 434:
09508 
09509 /* Line 1464 of yacc.c  */
09510 #line 3941 "parse.y"
09511     {
09512                         (yyval.node) = (yyvsp[(2) - (3)].node);
09513                     ;}
09514     break;
09515 
09516   case 435:
09517 
09518 /* Line 1464 of yacc.c  */
09519 #line 3947 "parse.y"
09520     {
09521                     /*%%%*/
09522                         (yyval.node) = 0;
09523                     /*%
09524                         $$ = dispatch0(words_new);
09525                     %*/
09526                     ;}
09527     break;
09528 
09529   case 436:
09530 
09531 /* Line 1464 of yacc.c  */
09532 #line 3955 "parse.y"
09533     {
09534                     /*%%%*/
09535                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09536                     /*%
09537                         $$ = dispatch2(words_add, $1, $2);
09538                     %*/
09539                     ;}
09540     break;
09541 
09542   case 438:
09543 
09544 /* Line 1464 of yacc.c  */
09545 #line 3973 "parse.y"
09546     {
09547                     /*%%%*/
09548                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09549                     /*%
09550                         $$ = dispatch2(word_add, $1, $2);
09551                     %*/
09552                     ;}
09553     break;
09554 
09555   case 439:
09556 
09557 /* Line 1464 of yacc.c  */
09558 #line 3983 "parse.y"
09559     {
09560                     /*%%%*/
09561                         (yyval.node) = NEW_ZARRAY();
09562                     /*%
09563                         $$ = dispatch0(qwords_new);
09564                     %*/
09565                     ;}
09566     break;
09567 
09568   case 440:
09569 
09570 /* Line 1464 of yacc.c  */
09571 #line 3991 "parse.y"
09572     {
09573                         (yyval.node) = (yyvsp[(2) - (3)].node);
09574                     ;}
09575     break;
09576 
09577   case 441:
09578 
09579 /* Line 1464 of yacc.c  */
09580 #line 3997 "parse.y"
09581     {
09582                     /*%%%*/
09583                         (yyval.node) = 0;
09584                     /*%
09585                         $$ = dispatch0(qwords_new);
09586                     %*/
09587                     ;}
09588     break;
09589 
09590   case 442:
09591 
09592 /* Line 1464 of yacc.c  */
09593 #line 4005 "parse.y"
09594     {
09595                     /*%%%*/
09596                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09597                     /*%
09598                         $$ = dispatch2(qwords_add, $1, $2);
09599                     %*/
09600                     ;}
09601     break;
09602 
09603   case 443:
09604 
09605 /* Line 1464 of yacc.c  */
09606 #line 4015 "parse.y"
09607     {
09608                     /*%%%*/
09609                         (yyval.node) = 0;
09610                     /*%
09611                         $$ = dispatch0(string_content);
09612                     %*/
09613                     ;}
09614     break;
09615 
09616   case 444:
09617 
09618 /* Line 1464 of yacc.c  */
09619 #line 4023 "parse.y"
09620     {
09621                     /*%%%*/
09622                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09623                     /*%
09624                         $$ = dispatch2(string_add, $1, $2);
09625                     %*/
09626                     ;}
09627     break;
09628 
09629   case 445:
09630 
09631 /* Line 1464 of yacc.c  */
09632 #line 4033 "parse.y"
09633     {
09634                     /*%%%*/
09635                         (yyval.node) = 0;
09636                     /*%
09637                         $$ = dispatch0(xstring_new);
09638                     %*/
09639                     ;}
09640     break;
09641 
09642   case 446:
09643 
09644 /* Line 1464 of yacc.c  */
09645 #line 4041 "parse.y"
09646     {
09647                     /*%%%*/
09648                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09649                     /*%
09650                         $$ = dispatch2(xstring_add, $1, $2);
09651                     %*/
09652                     ;}
09653     break;
09654 
09655   case 447:
09656 
09657 /* Line 1464 of yacc.c  */
09658 #line 4051 "parse.y"
09659     {
09660                     /*%%%*/
09661                         (yyval.node) = 0;
09662                     /*%
09663                         $$ = dispatch0(regexp_new);
09664                     %*/
09665                     ;}
09666     break;
09667 
09668   case 448:
09669 
09670 /* Line 1464 of yacc.c  */
09671 #line 4059 "parse.y"
09672     {
09673                     /*%%%*/
09674                         NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09675                         if (!head) {
09676                             (yyval.node) = tail;
09677                         }
09678                         else if (!tail) {
09679                             (yyval.node) = head;
09680                         }
09681                         else {
09682                             switch (nd_type(head)) {
09683                               case NODE_STR:
09684                                 nd_set_type(head, NODE_DSTR);
09685                                 break;
09686                               case NODE_DSTR:
09687                                 break;
09688                               default:
09689                                 head = list_append(NEW_DSTR(Qnil), head);
09690                                 break;
09691                             }
09692                             (yyval.node) = list_append(head, tail);
09693                         }
09694                     /*%
09695                         $$ = dispatch2(regexp_add, $1, $2);
09696                     %*/
09697                     ;}
09698     break;
09699 
09700   case 450:
09701 
09702 /* Line 1464 of yacc.c  */
09703 #line 4089 "parse.y"
09704     {
09705                         (yyval.node) = lex_strterm;
09706                         lex_strterm = 0;
09707                         lex_state = EXPR_BEG;
09708                     ;}
09709     break;
09710 
09711   case 451:
09712 
09713 /* Line 1464 of yacc.c  */
09714 #line 4095 "parse.y"
09715     {
09716                     /*%%%*/
09717                         lex_strterm = (yyvsp[(2) - (3)].node);
09718                         (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09719                     /*%
09720                         lex_strterm = $<node>2;
09721                         $$ = dispatch1(string_dvar, $3);
09722                     %*/
09723                     ;}
09724     break;
09725 
09726   case 452:
09727 
09728 /* Line 1464 of yacc.c  */
09729 #line 4105 "parse.y"
09730     {
09731                         (yyvsp[(1) - (1)].val) = cond_stack;
09732                         (yyval.val) = cmdarg_stack;
09733                         cond_stack = 0;
09734                         cmdarg_stack = 0;
09735                     ;}
09736     break;
09737 
09738   case 453:
09739 
09740 /* Line 1464 of yacc.c  */
09741 #line 4111 "parse.y"
09742     {
09743                         (yyval.node) = lex_strterm;
09744                         lex_strterm = 0;
09745                         lex_state = EXPR_BEG;
09746                     ;}
09747     break;
09748 
09749   case 454:
09750 
09751 /* Line 1464 of yacc.c  */
09752 #line 4117 "parse.y"
09753     {
09754                         cond_stack = (yyvsp[(1) - (5)].val);
09755                         cmdarg_stack = (yyvsp[(2) - (5)].val);
09756                         lex_strterm = (yyvsp[(3) - (5)].node);
09757                     /*%%%*/
09758                         if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09759                         (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09760                     /*%
09761                         $$ = dispatch1(string_embexpr, $4);
09762                     %*/
09763                     ;}
09764     break;
09765 
09766   case 455:
09767 
09768 /* Line 1464 of yacc.c  */
09769 #line 4131 "parse.y"
09770     {
09771                     /*%%%*/
09772                         (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09773                     /*%
09774                         $$ = dispatch1(var_ref, $1);
09775                     %*/
09776                     ;}
09777     break;
09778 
09779   case 456:
09780 
09781 /* Line 1464 of yacc.c  */
09782 #line 4139 "parse.y"
09783     {
09784                     /*%%%*/
09785                         (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09786                     /*%
09787                         $$ = dispatch1(var_ref, $1);
09788                     %*/
09789                     ;}
09790     break;
09791 
09792   case 457:
09793 
09794 /* Line 1464 of yacc.c  */
09795 #line 4147 "parse.y"
09796     {
09797                     /*%%%*/
09798                         (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09799                     /*%
09800                         $$ = dispatch1(var_ref, $1);
09801                     %*/
09802                     ;}
09803     break;
09804 
09805   case 459:
09806 
09807 /* Line 1464 of yacc.c  */
09808 #line 4158 "parse.y"
09809     {
09810                         lex_state = EXPR_END;
09811                     /*%%%*/
09812                         (yyval.id) = (yyvsp[(2) - (2)].id);
09813                     /*%
09814                         $$ = dispatch1(symbol, $2);
09815                     %*/
09816                     ;}
09817     break;
09818 
09819   case 464:
09820 
09821 /* Line 1464 of yacc.c  */
09822 #line 4175 "parse.y"
09823     {
09824                         lex_state = EXPR_END;
09825                     /*%%%*/
09826                         if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
09827                             (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
09828                         }
09829                         else {
09830                             VALUE lit;
09831 
09832                             switch (nd_type((yyval.node))) {
09833                               case NODE_DSTR:
09834                                 nd_set_type((yyval.node), NODE_DSYM);
09835                                 break;
09836                               case NODE_STR:
09837                                 lit = (yyval.node)->nd_lit;
09838                                 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
09839                                 nd_set_type((yyval.node), NODE_LIT);
09840                                 break;
09841                               default:
09842                                 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
09843                                 break;
09844                             }
09845                         }
09846                     /*%
09847                         $$ = dispatch1(dyna_symbol, $2);
09848                     %*/
09849                     ;}
09850     break;
09851 
09852   case 467:
09853 
09854 /* Line 1464 of yacc.c  */
09855 #line 4207 "parse.y"
09856     {
09857                     /*%%%*/
09858                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09859                     /*%
09860                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
09861                     %*/
09862                     ;}
09863     break;
09864 
09865   case 468:
09866 
09867 /* Line 1464 of yacc.c  */
09868 #line 4215 "parse.y"
09869     {
09870                     /*%%%*/
09871                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09872                     /*%
09873                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
09874                     %*/
09875                     ;}
09876     break;
09877 
09878   case 474:
09879 
09880 /* Line 1464 of yacc.c  */
09881 #line 4229 "parse.y"
09882     {ifndef_ripper((yyval.id) = keyword_nil);;}
09883     break;
09884 
09885   case 475:
09886 
09887 /* Line 1464 of yacc.c  */
09888 #line 4230 "parse.y"
09889     {ifndef_ripper((yyval.id) = keyword_self);;}
09890     break;
09891 
09892   case 476:
09893 
09894 /* Line 1464 of yacc.c  */
09895 #line 4231 "parse.y"
09896     {ifndef_ripper((yyval.id) = keyword_true);;}
09897     break;
09898 
09899   case 477:
09900 
09901 /* Line 1464 of yacc.c  */
09902 #line 4232 "parse.y"
09903     {ifndef_ripper((yyval.id) = keyword_false);;}
09904     break;
09905 
09906   case 478:
09907 
09908 /* Line 1464 of yacc.c  */
09909 #line 4233 "parse.y"
09910     {ifndef_ripper((yyval.id) = keyword__FILE__);;}
09911     break;
09912 
09913   case 479:
09914 
09915 /* Line 1464 of yacc.c  */
09916 #line 4234 "parse.y"
09917     {ifndef_ripper((yyval.id) = keyword__LINE__);;}
09918     break;
09919 
09920   case 480:
09921 
09922 /* Line 1464 of yacc.c  */
09923 #line 4235 "parse.y"
09924     {ifndef_ripper((yyval.id) = keyword__ENCODING__);;}
09925     break;
09926 
09927   case 481:
09928 
09929 /* Line 1464 of yacc.c  */
09930 #line 4239 "parse.y"
09931     {
09932                     /*%%%*/
09933                         if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
09934                     /*%
09935                         $$ = dispatch1(var_ref, $1);
09936                     %*/
09937                     ;}
09938     break;
09939 
09940   case 482:
09941 
09942 /* Line 1464 of yacc.c  */
09943 #line 4249 "parse.y"
09944     {
09945                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
09946                     /*%%%*/
09947                     /*%
09948                         $$ = dispatch1(var_field, $$);
09949                     %*/
09950                     ;}
09951     break;
09952 
09953   case 485:
09954 
09955 /* Line 1464 of yacc.c  */
09956 #line 4263 "parse.y"
09957     {
09958                     /*%%%*/
09959                         (yyval.node) = 0;
09960                     /*%
09961                         $$ = Qnil;
09962                     %*/
09963                     ;}
09964     break;
09965 
09966   case 486:
09967 
09968 /* Line 1464 of yacc.c  */
09969 #line 4271 "parse.y"
09970     {
09971                         lex_state = EXPR_BEG;
09972                     ;}
09973     break;
09974 
09975   case 487:
09976 
09977 /* Line 1464 of yacc.c  */
09978 #line 4275 "parse.y"
09979     {
09980                         (yyval.node) = (yyvsp[(3) - (4)].node);
09981                     ;}
09982     break;
09983 
09984   case 488:
09985 
09986 /* Line 1464 of yacc.c  */
09987 #line 4279 "parse.y"
09988     {
09989                     /*%%%*/
09990                         yyerrok;
09991                         (yyval.node) = 0;
09992                     /*%
09993                         yyerrok;
09994                         $$ = Qnil;
09995                     %*/
09996                     ;}
09997     break;
09998 
09999   case 489:
10000 
10001 /* Line 1464 of yacc.c  */
10002 #line 4291 "parse.y"
10003     {
10004                     /*%%%*/
10005                         (yyval.node) = (yyvsp[(2) - (3)].node);
10006                     /*%
10007                         $$ = dispatch1(paren, $2);
10008                     %*/
10009                         lex_state = EXPR_BEG;
10010                         command_start = TRUE;
10011                     ;}
10012     break;
10013 
10014   case 490:
10015 
10016 /* Line 1464 of yacc.c  */
10017 #line 4301 "parse.y"
10018     {
10019                         (yyval.node) = (yyvsp[(1) - (2)].node);
10020                     ;}
10021     break;
10022 
10023   case 491:
10024 
10025 /* Line 1464 of yacc.c  */
10026 #line 4307 "parse.y"
10027     {
10028                     /*%%%*/
10029                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10030                     /*%
10031                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
10032                     %*/
10033                     ;}
10034     break;
10035 
10036   case 492:
10037 
10038 /* Line 1464 of yacc.c  */
10039 #line 4315 "parse.y"
10040     {
10041                     /*%%%*/
10042                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10043                     /*%
10044                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
10045                     %*/
10046                     ;}
10047     break;
10048 
10049   case 493:
10050 
10051 /* Line 1464 of yacc.c  */
10052 #line 4323 "parse.y"
10053     {
10054                     /*%%%*/
10055                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10056                     /*%
10057                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
10058                     %*/
10059                     ;}
10060     break;
10061 
10062   case 494:
10063 
10064 /* Line 1464 of yacc.c  */
10065 #line 4331 "parse.y"
10066     {
10067                     /*%%%*/
10068                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10069                     /*%
10070                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
10071                     %*/
10072                     ;}
10073     break;
10074 
10075   case 495:
10076 
10077 /* Line 1464 of yacc.c  */
10078 #line 4339 "parse.y"
10079     {
10080                     /*%%%*/
10081                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10082                     /*%
10083                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
10084                     %*/
10085                     ;}
10086     break;
10087 
10088   case 496:
10089 
10090 /* Line 1464 of yacc.c  */
10091 #line 4347 "parse.y"
10092     {
10093                     /*%%%*/
10094                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10095                     /*%
10096                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
10097                     %*/
10098                     ;}
10099     break;
10100 
10101   case 497:
10102 
10103 /* Line 1464 of yacc.c  */
10104 #line 4355 "parse.y"
10105     {
10106                     /*%%%*/
10107                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10108                     /*%
10109                         $$ = params_new($1, Qnil, Qnil, Qnil,escape_Qundef($2));
10110                     %*/
10111                     ;}
10112     break;
10113 
10114   case 498:
10115 
10116 /* Line 1464 of yacc.c  */
10117 #line 4363 "parse.y"
10118     {
10119                     /*%%%*/
10120                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10121                     /*%
10122                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
10123                     %*/
10124                     ;}
10125     break;
10126 
10127   case 499:
10128 
10129 /* Line 1464 of yacc.c  */
10130 #line 4371 "parse.y"
10131     {
10132                     /*%%%*/
10133                         (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10134                     /*%
10135                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
10136                     %*/
10137                     ;}
10138     break;
10139 
10140   case 500:
10141 
10142 /* Line 1464 of yacc.c  */
10143 #line 4379 "parse.y"
10144     {
10145                     /*%%%*/
10146                         (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10147                     /*%
10148                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
10149                     %*/
10150                     ;}
10151     break;
10152 
10153   case 501:
10154 
10155 /* Line 1464 of yacc.c  */
10156 #line 4387 "parse.y"
10157     {
10158                     /*%%%*/
10159                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10160                     /*%
10161                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
10162                     %*/
10163                     ;}
10164     break;
10165 
10166   case 502:
10167 
10168 /* Line 1464 of yacc.c  */
10169 #line 4395 "parse.y"
10170     {
10171                     /*%%%*/
10172                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10173                     /*%
10174                         $$ = params_new(Qnil, Qnil, $1, Qnil,escape_Qundef($2));
10175                     %*/
10176                     ;}
10177     break;
10178 
10179   case 503:
10180 
10181 /* Line 1464 of yacc.c  */
10182 #line 4403 "parse.y"
10183     {
10184                     /*%%%*/
10185                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10186                     /*%
10187                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
10188                     %*/
10189                     ;}
10190     break;
10191 
10192   case 504:
10193 
10194 /* Line 1464 of yacc.c  */
10195 #line 4411 "parse.y"
10196     {
10197                     /*%%%*/
10198                         (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10199                     /*%
10200                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
10201                     %*/
10202                     ;}
10203     break;
10204 
10205   case 505:
10206 
10207 /* Line 1464 of yacc.c  */
10208 #line 4419 "parse.y"
10209     {
10210                     /*%%%*/
10211                         (yyval.node) = new_args(0, 0, 0, 0, 0);
10212                     /*%
10213                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil);
10214                     %*/
10215                     ;}
10216     break;
10217 
10218   case 506:
10219 
10220 /* Line 1464 of yacc.c  */
10221 #line 4429 "parse.y"
10222     {
10223                     /*%%%*/
10224                         yyerror("formal argument cannot be a constant");
10225                         (yyval.id) = 0;
10226                     /*%
10227                         $$ = dispatch1(param_error, $1);
10228                     %*/
10229                     ;}
10230     break;
10231 
10232   case 507:
10233 
10234 /* Line 1464 of yacc.c  */
10235 #line 4438 "parse.y"
10236     {
10237                     /*%%%*/
10238                         yyerror("formal argument cannot be an instance variable");
10239                         (yyval.id) = 0;
10240                     /*%
10241                         $$ = dispatch1(param_error, $1);
10242                     %*/
10243                     ;}
10244     break;
10245 
10246   case 508:
10247 
10248 /* Line 1464 of yacc.c  */
10249 #line 4447 "parse.y"
10250     {
10251                     /*%%%*/
10252                         yyerror("formal argument cannot be a global variable");
10253                         (yyval.id) = 0;
10254                     /*%
10255                         $$ = dispatch1(param_error, $1);
10256                     %*/
10257                     ;}
10258     break;
10259 
10260   case 509:
10261 
10262 /* Line 1464 of yacc.c  */
10263 #line 4456 "parse.y"
10264     {
10265                     /*%%%*/
10266                         yyerror("formal argument cannot be a class variable");
10267                         (yyval.id) = 0;
10268                     /*%
10269                         $$ = dispatch1(param_error, $1);
10270                     %*/
10271                     ;}
10272     break;
10273 
10274   case 511:
10275 
10276 /* Line 1464 of yacc.c  */
10277 #line 4468 "parse.y"
10278     {
10279                         formal_argument(get_id((yyvsp[(1) - (1)].id)));
10280                         (yyval.id) = (yyvsp[(1) - (1)].id);
10281                     ;}
10282     break;
10283 
10284   case 512:
10285 
10286 /* Line 1464 of yacc.c  */
10287 #line 4475 "parse.y"
10288     {
10289                         arg_var(get_id((yyvsp[(1) - (1)].id)));
10290                     /*%%%*/
10291                         (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10292                     /*%
10293                         $$ = get_value($1);
10294                     %*/
10295                     ;}
10296     break;
10297 
10298   case 513:
10299 
10300 /* Line 1464 of yacc.c  */
10301 #line 4484 "parse.y"
10302     {
10303                         ID tid = internal_id();
10304                         arg_var(tid);
10305                     /*%%%*/
10306                         if (dyna_in_block()) {
10307                             (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10308                         }
10309                         else {
10310                             (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10311                         }
10312                         (yyval.node) = NEW_ARGS_AUX(tid, 1);
10313                         (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10314                     /*%
10315                         $$ = dispatch1(mlhs_paren, $2);
10316                     %*/
10317                     ;}
10318     break;
10319 
10320   case 515:
10321 
10322 /* Line 1464 of yacc.c  */
10323 #line 4510 "parse.y"
10324     {
10325                     /*%%%*/
10326                         (yyval.node) = (yyvsp[(1) - (3)].node);
10327                         (yyval.node)->nd_plen++;
10328                         (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10329                         rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10330                     /*%
10331                         $$ = rb_ary_push($1, $3);
10332                     %*/
10333                     ;}
10334     break;
10335 
10336   case 516:
10337 
10338 /* Line 1464 of yacc.c  */
10339 #line 4523 "parse.y"
10340     {
10341                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10342                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10343                     /*%%%*/
10344                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10345                     /*%
10346                         $$ = rb_assoc_new($$, $3);
10347                     %*/
10348                     ;}
10349     break;
10350 
10351   case 517:
10352 
10353 /* Line 1464 of yacc.c  */
10354 #line 4535 "parse.y"
10355     {
10356                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10357                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10358                     /*%%%*/
10359                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10360                     /*%
10361                         $$ = rb_assoc_new($$, $3);
10362                     %*/
10363                     ;}
10364     break;
10365 
10366   case 518:
10367 
10368 /* Line 1464 of yacc.c  */
10369 #line 4547 "parse.y"
10370     {
10371                     /*%%%*/
10372                         (yyval.node) = (yyvsp[(1) - (1)].node);
10373                     /*%
10374                         $$ = rb_ary_new3(1, $1);
10375                     %*/
10376                     ;}
10377     break;
10378 
10379   case 519:
10380 
10381 /* Line 1464 of yacc.c  */
10382 #line 4555 "parse.y"
10383     {
10384                     /*%%%*/
10385                         NODE *opts = (yyvsp[(1) - (3)].node);
10386 
10387                         while (opts->nd_next) {
10388                             opts = opts->nd_next;
10389                         }
10390                         opts->nd_next = (yyvsp[(3) - (3)].node);
10391                         (yyval.node) = (yyvsp[(1) - (3)].node);
10392                     /*%
10393                         $$ = rb_ary_push($1, $3);
10394                     %*/
10395                     ;}
10396     break;
10397 
10398   case 520:
10399 
10400 /* Line 1464 of yacc.c  */
10401 #line 4571 "parse.y"
10402     {
10403                     /*%%%*/
10404                         (yyval.node) = (yyvsp[(1) - (1)].node);
10405                     /*%
10406                         $$ = rb_ary_new3(1, $1);
10407                     %*/
10408                     ;}
10409     break;
10410 
10411   case 521:
10412 
10413 /* Line 1464 of yacc.c  */
10414 #line 4579 "parse.y"
10415     {
10416                     /*%%%*/
10417                         NODE *opts = (yyvsp[(1) - (3)].node);
10418 
10419                         while (opts->nd_next) {
10420                             opts = opts->nd_next;
10421                         }
10422                         opts->nd_next = (yyvsp[(3) - (3)].node);
10423                         (yyval.node) = (yyvsp[(1) - (3)].node);
10424                     /*%
10425                         $$ = rb_ary_push($1, $3);
10426                     %*/
10427                     ;}
10428     break;
10429 
10430   case 524:
10431 
10432 /* Line 1464 of yacc.c  */
10433 #line 4599 "parse.y"
10434     {
10435                     /*%%%*/
10436                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10437                             yyerror("rest argument must be local variable");
10438                     /*% %*/
10439                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10440                     /*%%%*/
10441                         (yyval.id) = (yyvsp[(2) - (2)].id);
10442                     /*%
10443                         $$ = dispatch1(rest_param, $2);
10444                     %*/
10445                     ;}
10446     break;
10447 
10448   case 525:
10449 
10450 /* Line 1464 of yacc.c  */
10451 #line 4612 "parse.y"
10452     {
10453                     /*%%%*/
10454                         (yyval.id) = internal_id();
10455                         arg_var((yyval.id));
10456                     /*%
10457                         $$ = dispatch1(rest_param, Qnil);
10458                     %*/
10459                     ;}
10460     break;
10461 
10462   case 528:
10463 
10464 /* Line 1464 of yacc.c  */
10465 #line 4627 "parse.y"
10466     {
10467                     /*%%%*/
10468                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10469                             yyerror("block argument must be local variable");
10470                         else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10471                             yyerror("duplicated block argument name");
10472                     /*% %*/
10473                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10474                     /*%%%*/
10475                         (yyval.id) = (yyvsp[(2) - (2)].id);
10476                     /*%
10477                         $$ = dispatch1(blockarg, $2);
10478                     %*/
10479                     ;}
10480     break;
10481 
10482   case 529:
10483 
10484 /* Line 1464 of yacc.c  */
10485 #line 4644 "parse.y"
10486     {
10487                         (yyval.id) = (yyvsp[(2) - (2)].id);
10488                     ;}
10489     break;
10490 
10491   case 530:
10492 
10493 /* Line 1464 of yacc.c  */
10494 #line 4648 "parse.y"
10495     {
10496                     /*%%%*/
10497                         (yyval.id) = 0;
10498                     /*%
10499                         $$ = Qundef;
10500                     %*/
10501                     ;}
10502     break;
10503 
10504   case 531:
10505 
10506 /* Line 1464 of yacc.c  */
10507 #line 4658 "parse.y"
10508     {
10509                     /*%%%*/
10510                         value_expr((yyvsp[(1) - (1)].node));
10511                         (yyval.node) = (yyvsp[(1) - (1)].node);
10512                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
10513                     /*%
10514                         $$ = $1;
10515                     %*/
10516                     ;}
10517     break;
10518 
10519   case 532:
10520 
10521 /* Line 1464 of yacc.c  */
10522 #line 4667 "parse.y"
10523     {lex_state = EXPR_BEG;;}
10524     break;
10525 
10526   case 533:
10527 
10528 /* Line 1464 of yacc.c  */
10529 #line 4668 "parse.y"
10530     {
10531                     /*%%%*/
10532                         if ((yyvsp[(3) - (4)].node) == 0) {
10533                             yyerror("can't define singleton method for ().");
10534                         }
10535                         else {
10536                             switch (nd_type((yyvsp[(3) - (4)].node))) {
10537                               case NODE_STR:
10538                               case NODE_DSTR:
10539                               case NODE_XSTR:
10540                               case NODE_DXSTR:
10541                               case NODE_DREGX:
10542                               case NODE_LIT:
10543                               case NODE_ARRAY:
10544                               case NODE_ZARRAY:
10545                                 yyerror("can't define singleton method for literals");
10546                               default:
10547                                 value_expr((yyvsp[(3) - (4)].node));
10548                                 break;
10549                             }
10550                         }
10551                         (yyval.node) = (yyvsp[(3) - (4)].node);
10552                     /*%
10553                         $$ = dispatch1(paren, $3);
10554                     %*/
10555                     ;}
10556     break;
10557 
10558   case 535:
10559 
10560 /* Line 1464 of yacc.c  */
10561 #line 4698 "parse.y"
10562     {
10563                     /*%%%*/
10564                         (yyval.node) = (yyvsp[(1) - (2)].node);
10565                     /*%
10566                         $$ = dispatch1(assoclist_from_args, $1);
10567                     %*/
10568                     ;}
10569     break;
10570 
10571   case 537:
10572 
10573 /* Line 1464 of yacc.c  */
10574 #line 4715 "parse.y"
10575     {
10576                     /*%%%*/
10577                         (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10578                     /*%
10579                         $$ = rb_ary_push($1, $3);
10580                     %*/
10581                     ;}
10582     break;
10583 
10584   case 538:
10585 
10586 /* Line 1464 of yacc.c  */
10587 #line 4725 "parse.y"
10588     {
10589                     /*%%%*/
10590                         (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10591                     /*%
10592                         $$ = dispatch2(assoc_new, $1, $3);
10593                     %*/
10594                     ;}
10595     break;
10596 
10597   case 539:
10598 
10599 /* Line 1464 of yacc.c  */
10600 #line 4733 "parse.y"
10601     {
10602                     /*%%%*/
10603                         (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10604                     /*%
10605                         $$ = dispatch2(assoc_new, $1, $2);
10606                     %*/
10607                     ;}
10608     break;
10609 
10610   case 561:
10611 
10612 /* Line 1464 of yacc.c  */
10613 #line 4789 "parse.y"
10614     {yyerrok;;}
10615     break;
10616 
10617   case 564:
10618 
10619 /* Line 1464 of yacc.c  */
10620 #line 4794 "parse.y"
10621     {yyerrok;;}
10622     break;
10623 
10624   case 565:
10625 
10626 /* Line 1464 of yacc.c  */
10627 #line 4798 "parse.y"
10628     {
10629                     /*%%%*/
10630                         (yyval.node) = 0;
10631                     /*%
10632                         $$ = Qundef;
10633                     %*/
10634                     ;}
10635     break;
10636 
10637 
10638 
10639 /* Line 1464 of yacc.c  */
10640 #line 10639 "parse.c"
10641       default: break;
10642     }
10643   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10644 
10645   YYPOPSTACK (yylen);
10646   yylen = 0;
10647   YY_STACK_PRINT (yyss, yyssp);
10648 
10649   *++yyvsp = yyval;
10650 
10651   /* Now `shift' the result of the reduction.  Determine what state
10652      that goes to, based on the state we popped back to and the rule
10653      number reduced by.  */
10654 
10655   yyn = yyr1[yyn];
10656 
10657   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10658   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10659     yystate = yytable[yystate];
10660   else
10661     yystate = yydefgoto[yyn - YYNTOKENS];
10662 
10663   goto yynewstate;
10664 
10665 
10666 /*------------------------------------.
10667 | yyerrlab -- here on detecting error |
10668 `------------------------------------*/
10669 yyerrlab:
10670   /* If not already recovering from an error, report this error.  */
10671   if (!yyerrstatus)
10672     {
10673       ++yynerrs;
10674 #if ! YYERROR_VERBOSE
10675       parser_yyerror (parser, YY_("syntax error"));
10676 #else
10677       {
10678         YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10679         if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10680           {
10681             YYSIZE_T yyalloc = 2 * yysize;
10682             if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10683               yyalloc = YYSTACK_ALLOC_MAXIMUM;
10684             if (yymsg != yymsgbuf)
10685               YYSTACK_FREE (yymsg);
10686             yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10687             if (yymsg)
10688               yymsg_alloc = yyalloc;
10689             else
10690               {
10691                 yymsg = yymsgbuf;
10692                 yymsg_alloc = sizeof yymsgbuf;
10693               }
10694           }
10695 
10696         if (0 < yysize && yysize <= yymsg_alloc)
10697           {
10698             (void) yysyntax_error (yymsg, yystate, yychar);
10699             parser_yyerror (parser, yymsg);
10700           }
10701         else
10702           {
10703             parser_yyerror (parser, YY_("syntax error"));
10704             if (yysize != 0)
10705               goto yyexhaustedlab;
10706           }
10707       }
10708 #endif
10709     }
10710 
10711 
10712 
10713   if (yyerrstatus == 3)
10714     {
10715       /* If just tried and failed to reuse lookahead token after an
10716          error, discard it.  */
10717 
10718       if (yychar <= YYEOF)
10719         {
10720           /* Return failure if at end of input.  */
10721           if (yychar == YYEOF)
10722             YYABORT;
10723         }
10724       else
10725         {
10726           yydestruct ("Error: discarding",
10727                       yytoken, &yylval, parser);
10728           yychar = YYEMPTY;
10729         }
10730     }
10731 
10732   /* Else will try to reuse lookahead token after shifting the error
10733      token.  */
10734   goto yyerrlab1;
10735 
10736 
10737 /*---------------------------------------------------.
10738 | yyerrorlab -- error raised explicitly by YYERROR.  |
10739 `---------------------------------------------------*/
10740 yyerrorlab:
10741 
10742   /* Pacify compilers like GCC when the user code never invokes
10743      YYERROR and the label yyerrorlab therefore never appears in user
10744      code.  */
10745   if (/*CONSTCOND*/ 0)
10746      goto yyerrorlab;
10747 
10748   /* Do not reclaim the symbols of the rule which action triggered
10749      this YYERROR.  */
10750   YYPOPSTACK (yylen);
10751   yylen = 0;
10752   YY_STACK_PRINT (yyss, yyssp);
10753   yystate = *yyssp;
10754   goto yyerrlab1;
10755 
10756 
10757 /*-------------------------------------------------------------.
10758 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
10759 `-------------------------------------------------------------*/
10760 yyerrlab1:
10761   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
10762 
10763   for (;;)
10764     {
10765       yyn = yypact[yystate];
10766       if (yyn != YYPACT_NINF)
10767         {
10768           yyn += YYTERROR;
10769           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10770             {
10771               yyn = yytable[yyn];
10772               if (0 < yyn)
10773                 break;
10774             }
10775         }
10776 
10777       /* Pop the current state because it cannot handle the error token.  */
10778       if (yyssp == yyss)
10779         YYABORT;
10780 
10781 
10782       yydestruct ("Error: popping",
10783                   yystos[yystate], yyvsp, parser);
10784       YYPOPSTACK (1);
10785       yystate = *yyssp;
10786       YY_STACK_PRINT (yyss, yyssp);
10787     }
10788 
10789   *++yyvsp = yylval;
10790 
10791 
10792   /* Shift the error token.  */
10793   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10794 
10795   yystate = yyn;
10796   goto yynewstate;
10797 
10798 
10799 /*-------------------------------------.
10800 | yyacceptlab -- YYACCEPT comes here.  |
10801 `-------------------------------------*/
10802 yyacceptlab:
10803   yyresult = 0;
10804   goto yyreturn;
10805 
10806 /*-----------------------------------.
10807 | yyabortlab -- YYABORT comes here.  |
10808 `-----------------------------------*/
10809 yyabortlab:
10810   yyresult = 1;
10811   goto yyreturn;
10812 
10813 #if !defined(yyoverflow) || YYERROR_VERBOSE
10814 /*-------------------------------------------------.
10815 | yyexhaustedlab -- memory exhaustion comes here.  |
10816 `-------------------------------------------------*/
10817 yyexhaustedlab:
10818   parser_yyerror (parser, YY_("memory exhausted"));
10819   yyresult = 2;
10820   /* Fall through.  */
10821 #endif
10822 
10823 yyreturn:
10824   if (yychar != YYEMPTY)
10825      yydestruct ("Cleanup: discarding lookahead",
10826                  yytoken, &yylval, parser);
10827   /* Do not reclaim the symbols of the rule which action triggered
10828      this YYABORT or YYACCEPT.  */
10829   YYPOPSTACK (yylen);
10830   YY_STACK_PRINT (yyss, yyssp);
10831   while (yyssp != yyss)
10832     {
10833       yydestruct ("Cleanup: popping",
10834                   yystos[*yyssp], yyvsp, parser);
10835       YYPOPSTACK (1);
10836     }
10837 #ifndef yyoverflow
10838   if (yyss != yyssa)
10839     YYSTACK_FREE (yyss);
10840 #endif
10841 #if YYERROR_VERBOSE
10842   if (yymsg != yymsgbuf)
10843     YYSTACK_FREE (yymsg);
10844 #endif
10845   /* Make sure YYID is used.  */
10846   return YYID (yyresult);
10847 }
10848 
10849 
10850 
10851 /* Line 1684 of yacc.c  */
10852 #line 4806 "parse.y"
10853 
10854 # undef parser
10855 # undef yylex
10856 # undef yylval
10857 # define yylval  (*((YYSTYPE*)(parser->parser_yylval)))
10858 
10859 static int parser_regx_options(struct parser_params*);
10860 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10861 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10862 static int parser_parse_string(struct parser_params*,NODE*);
10863 static int parser_here_document(struct parser_params*,NODE*);
10864 
10865 
10866 # define nextc()                   parser_nextc(parser)
10867 # define pushback(c)               parser_pushback(parser, c)
10868 # define newtok()                  parser_newtok(parser)
10869 # define tokspace(n)               parser_tokspace(parser, n)
10870 # define tokadd(c)                 parser_tokadd(parser, c)
10871 # define tok_hex(numlen)           parser_tok_hex(parser, numlen)
10872 # define read_escape(flags,e)      parser_read_escape(parser, flags, e)
10873 # define tokadd_escape(e)          parser_tokadd_escape(parser, e)
10874 # define regx_options()            parser_regx_options(parser)
10875 # define tokadd_string(f,t,p,n,e)  parser_tokadd_string(parser,f,t,p,n,e)
10876 # define parse_string(n)           parser_parse_string(parser,n)
10877 # define tokaddmbc(c, enc)         parser_tokaddmbc(parser, c, enc)
10878 # define here_document(n)          parser_here_document(parser,n)
10879 # define heredoc_identifier()      parser_heredoc_identifier(parser)
10880 # define heredoc_restore(n)        parser_heredoc_restore(parser,n)
10881 # define whole_match_p(e,l,i)      parser_whole_match_p(parser,e,l,i)
10882 
10883 #ifndef RIPPER
10884 # define set_yylval_str(x) yylval.node = NEW_STR(x)
10885 # define set_yylval_num(x) yylval.num = x
10886 # define set_yylval_id(x)  yylval.id = x
10887 # define set_yylval_name(x)  yylval.id = x
10888 # define set_yylval_literal(x) yylval.node = NEW_LIT(x)
10889 # define set_yylval_node(x) yylval.node = x
10890 # define yylval_id() yylval.id
10891 #else
10892 static inline VALUE
10893 ripper_yylval_id(ID x)
10894 {
10895     return (VALUE)NEW_LASGN(x, ID2SYM(x));
10896 }
10897 # define set_yylval_str(x) (void)(x)
10898 # define set_yylval_num(x) (void)(x)
10899 # define set_yylval_id(x)  (void)(x)
10900 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10901 # define set_yylval_literal(x) (void)(x)
10902 # define set_yylval_node(x) (void)(x)
10903 # define yylval_id() yylval.id
10904 #endif
10905 
10906 #ifndef RIPPER
10907 #define ripper_flush(p) (void)(p)
10908 #else
10909 #define ripper_flush(p) (p->tokp = p->parser_lex_p)
10910 
10911 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)
10912 
10913 static int
10914 ripper_has_scan_event(struct parser_params *parser)
10915 {
10916 
10917     if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10918     return lex_p > parser->tokp;
10919 }
10920 
10921 static VALUE
10922 ripper_scan_event_val(struct parser_params *parser, int t)
10923 {
10924     VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10925     VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10926     ripper_flush(parser);
10927     return rval;
10928 }
10929 
10930 static void
10931 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10932 {
10933     if (!ripper_has_scan_event(parser)) return;
10934     yylval_rval = ripper_scan_event_val(parser, t);
10935 }
10936 
10937 static void
10938 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10939 {
10940     if (!ripper_has_scan_event(parser)) return;
10941     (void)ripper_scan_event_val(parser, t);
10942 }
10943 
10944 static void
10945 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10946 {
10947     int saved_line = ruby_sourceline;
10948     const char *saved_tokp = parser->tokp;
10949 
10950     ruby_sourceline = parser->delayed_line;
10951     parser->tokp = lex_pbeg + parser->delayed_col;
10952     yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10953     parser->delayed = Qnil;
10954     ruby_sourceline = saved_line;
10955     parser->tokp = saved_tokp;
10956 }
10957 #endif /* RIPPER */
10958 
10959 #include "ruby/regex.h"
10960 #include "ruby/util.h"
10961 
10962 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
10963    since ours (we hope) works properly with all combinations of
10964    machines, compilers, `char' and `unsigned char' argument types.
10965    (Per Bothner suggested the basic approach.)  */
10966 #undef SIGN_EXTEND_CHAR
10967 #if __STDC__
10968 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10969 #else  /* not __STDC__ */
10970 /* As in Harbison and Steele.  */
10971 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10972 #endif
10973 
10974 #define parser_encoding_name()  (parser->enc->name)
10975 #define parser_mbclen()  mbclen((lex_p-1),lex_pend,parser->enc)
10976 #define parser_precise_mbclen()  rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
10977 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
10978 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
10979 
10980 #define parser_isascii() ISASCII(*(lex_p-1))
10981 
10982 #ifndef RIPPER
10983 static int
10984 token_info_get_column(struct parser_params *parser, const char *token)
10985 {
10986     int column = 1;
10987     const char *p, *pend = lex_p - strlen(token);
10988     for (p = lex_pbeg; p < pend; p++) {
10989         if (*p == '\t') {
10990             column = (((column - 1) / 8) + 1) * 8;
10991         }
10992         column++;
10993     }
10994     return column;
10995 }
10996 
10997 static int
10998 token_info_has_nonspaces(struct parser_params *parser, const char *token)
10999 {
11000     const char *p, *pend = lex_p - strlen(token);
11001     for (p = lex_pbeg; p < pend; p++) {
11002         if (*p != ' ' && *p != '\t') {
11003             return 1;
11004         }
11005     }
11006     return 0;
11007 }
11008 
11009 #undef token_info_push
11010 static void
11011 token_info_push(struct parser_params *parser, const char *token)
11012 {
11013     token_info *ptinfo;
11014 
11015     if (compile_for_eval) return;
11016     ptinfo = ALLOC(token_info);
11017     ptinfo->token = token;
11018     ptinfo->linenum = ruby_sourceline;
11019     ptinfo->column = token_info_get_column(parser, token);
11020     ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11021     ptinfo->next = parser->parser_token_info;
11022 
11023     parser->parser_token_info = ptinfo;
11024 }
11025 
11026 #undef token_info_pop
11027 static void
11028 token_info_pop(struct parser_params *parser, const char *token)
11029 {
11030     int linenum;
11031     token_info *ptinfo = parser->parser_token_info;
11032 
11033     if (!ptinfo) return;
11034     parser->parser_token_info = ptinfo->next;
11035     if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11036         goto finish;
11037     }
11038     linenum = ruby_sourceline;
11039     if (linenum == ptinfo->linenum) { /* SKIP */
11040         goto finish;
11041     }
11042     if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11043         goto finish;
11044     }
11045     rb_compile_warning(ruby_sourcefile, linenum,
11046                "mismatched indentations at '%s' with '%s' at %d",
11047                token, ptinfo->token, ptinfo->linenum);
11048 
11049   finish:
11050     xfree(ptinfo);
11051 }
11052 #endif  /* RIPPER */
11053 
11054 static int
11055 parser_yyerror(struct parser_params *parser, const char *msg)
11056 {
11057 #ifndef RIPPER
11058     const int max_line_margin = 30;
11059     const char *p, *pe;
11060     char *buf;
11061     long len;
11062     int i;
11063 
11064     compile_error(PARSER_ARG "%s", msg);
11065     p = lex_p;
11066     while (lex_pbeg <= p) {
11067         if (*p == '\n') break;
11068         p--;
11069     }
11070     p++;
11071 
11072     pe = lex_p;
11073     while (pe < lex_pend) {
11074         if (*pe == '\n') break;
11075         pe++;
11076     }
11077 
11078     len = pe - p;
11079     if (len > 4) {
11080         char *p2;
11081         const char *pre = "", *post = "";
11082 
11083         if (len > max_line_margin * 2 + 10) {
11084             if (lex_p - p > max_line_margin) {
11085                 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11086                 pre = "...";
11087             }
11088             if (pe - lex_p > max_line_margin) {
11089                 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11090                 post = "...";
11091             }
11092             len = pe - p;
11093         }
11094         buf = ALLOCA_N(char, len+2);
11095         MEMCPY(buf, p, char, len);
11096         buf[len] = '\0';
11097         rb_compile_error_append("%s%s%s", pre, buf, post);
11098 
11099         i = (int)(lex_p - p);
11100         p2 = buf; pe = buf + len;
11101 
11102         while (p2 < pe) {
11103             if (*p2 != '\t') *p2 = ' ';
11104             p2++;
11105         }
11106         buf[i] = '^';
11107         buf[i+1] = '\0';
11108         rb_compile_error_append("%s%s", pre, buf);
11109     }
11110 #else
11111     dispatch1(parse_error, STR_NEW2(msg));
11112 #endif /* !RIPPER */
11113     return 0;
11114 }
11115 
11116 static void parser_prepare(struct parser_params *parser);
11117 
11118 #ifndef RIPPER
11119 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
11120 
11121 static VALUE
11122 debug_lines(const char *f)
11123 {
11124     ID script_lines;
11125     CONST_ID(script_lines, "SCRIPT_LINES__");
11126     if (rb_const_defined_at(rb_cObject, script_lines)) {
11127         VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11128         if (TYPE(hash) == T_HASH) {
11129             VALUE fname = rb_str_new2(f);
11130             VALUE lines = rb_ary_new();
11131             rb_hash_aset(hash, fname, lines);
11132             return lines;
11133         }
11134     }
11135     return 0;
11136 }
11137 
11138 static VALUE
11139 coverage(const char *f, int n)
11140 {
11141     extern VALUE rb_get_coverages(void);
11142     VALUE coverages = rb_get_coverages();
11143     if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11144         VALUE fname = rb_str_new2(f);
11145         VALUE lines = rb_ary_new2(n);
11146         int i;
11147         RBASIC(lines)->klass = 0;
11148         for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11149         RARRAY(lines)->as.heap.len = n;
11150         rb_hash_aset(coverages, fname, lines);
11151         return lines;
11152     }
11153     return 0;
11154 }
11155 
11156 static int
11157 e_option_supplied(struct parser_params *parser)
11158 {
11159     return strcmp(ruby_sourcefile, "-e") == 0;
11160 }
11161 
11162 static VALUE
11163 yycompile0(VALUE arg, int tracing)
11164 {
11165     int n;
11166     NODE *tree;
11167     struct parser_params *parser = (struct parser_params *)arg;
11168 
11169     if (!compile_for_eval && rb_safe_level() == 0) {
11170         ruby_debug_lines = debug_lines(ruby_sourcefile);
11171         if (ruby_debug_lines && ruby_sourceline > 0) {
11172             VALUE str = STR_NEW0();
11173             n = ruby_sourceline;
11174             do {
11175                 rb_ary_push(ruby_debug_lines, str);
11176             } while (--n);
11177         }
11178 
11179         if (!e_option_supplied(parser)) {
11180             ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11181         }
11182     }
11183 
11184     parser_prepare(parser);
11185     deferred_nodes = 0;
11186     n = yyparse((void*)parser);
11187     ruby_debug_lines = 0;
11188     ruby_coverage = 0;
11189     compile_for_eval = 0;
11190 
11191     lex_strterm = 0;
11192     lex_p = lex_pbeg = lex_pend = 0;
11193     lex_lastline = lex_nextline = 0;
11194     if (parser->nerr) {
11195         return 0;
11196     }
11197     tree = ruby_eval_tree;
11198     if (!tree) {
11199         tree = NEW_NIL();
11200     }
11201     else if (ruby_eval_tree_begin) {
11202         tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11203     }
11204     return (VALUE)tree;
11205 }
11206 
11207 static NODE*
11208 yycompile(struct parser_params *parser, const char *f, int line)
11209 {
11210     ruby_sourcefile = ruby_strdup(f);
11211     ruby_sourceline = line - 1;
11212     return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11213 }
11214 #endif /* !RIPPER */
11215 
11216 static rb_encoding *
11217 must_be_ascii_compatible(VALUE s)
11218 {
11219     rb_encoding *enc = rb_enc_get(s);
11220     if (!rb_enc_asciicompat(enc)) {
11221         rb_raise(rb_eArgError, "invalid source encoding");
11222     }
11223     return enc;
11224 }
11225 
11226 static VALUE
11227 lex_get_str(struct parser_params *parser, VALUE s)
11228 {
11229     char *beg, *end, *pend;
11230     rb_encoding *enc = must_be_ascii_compatible(s);
11231 
11232     beg = RSTRING_PTR(s);
11233     if (lex_gets_ptr) {
11234         if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11235         beg += lex_gets_ptr;
11236     }
11237     pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11238     end = beg;
11239     while (end < pend) {
11240         if (*end++ == '\n') break;
11241     }
11242     lex_gets_ptr = end - RSTRING_PTR(s);
11243     return rb_enc_str_new(beg, end - beg, enc);
11244 }
11245 
11246 static VALUE
11247 lex_getline(struct parser_params *parser)
11248 {
11249     VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11250     if (NIL_P(line)) return line;
11251     must_be_ascii_compatible(line);
11252 #ifndef RIPPER
11253     if (ruby_debug_lines) {
11254         rb_ary_push(ruby_debug_lines, line);
11255     }
11256     if (ruby_coverage) {
11257         rb_ary_push(ruby_coverage, Qnil);
11258     }
11259 #endif
11260     return line;
11261 }
11262 
11263 static const rb_data_type_t parser_data_type;
11264 
11265 #ifndef RIPPER
11266 static NODE*
11267 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11268 {
11269     struct parser_params *parser;
11270     NODE *node;
11271     volatile VALUE tmp;
11272 
11273     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11274     lex_gets = lex_get_str;
11275     lex_gets_ptr = 0;
11276     lex_input = s;
11277     lex_pbeg = lex_p = lex_pend = 0;
11278     compile_for_eval = rb_parse_in_eval();
11279 
11280     node = yycompile(parser, f, line);
11281     tmp = vparser; /* prohibit tail call optimization */
11282 
11283     return node;
11284 }
11285 
11286 NODE*
11287 rb_compile_string(const char *f, VALUE s, int line)
11288 {
11289     must_be_ascii_compatible(s);
11290     return parser_compile_string(rb_parser_new(), f, s, line);
11291 }
11292 
11293 NODE*
11294 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11295 {
11296     must_be_ascii_compatible(s);
11297     return parser_compile_string(vparser, f, s, line);
11298 }
11299 
11300 NODE*
11301 rb_compile_cstr(const char *f, const char *s, int len, int line)
11302 {
11303     VALUE str = rb_str_new(s, len);
11304     return parser_compile_string(rb_parser_new(), f, str, line);
11305 }
11306 
11307 NODE*
11308 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11309 {
11310     VALUE str = rb_str_new(s, len);
11311     return parser_compile_string(vparser, f, str, line);
11312 }
11313 
11314 static VALUE
11315 lex_io_gets(struct parser_params *parser, VALUE io)
11316 {
11317     return rb_io_gets(io);
11318 }
11319 
11320 NODE*
11321 rb_compile_file(const char *f, VALUE file, int start)
11322 {
11323     VALUE volatile vparser = rb_parser_new();
11324 
11325     return rb_parser_compile_file(vparser, f, file, start);
11326 }
11327 
11328 NODE*
11329 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11330 {
11331     struct parser_params *parser;
11332     volatile VALUE tmp;
11333     NODE *node;
11334 
11335     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11336     lex_gets = lex_io_gets;
11337     lex_input = file;
11338     lex_pbeg = lex_p = lex_pend = 0;
11339     compile_for_eval = rb_parse_in_eval();
11340 
11341     node = yycompile(parser, f, start);
11342     tmp = vparser; /* prohibit tail call optimization */
11343 
11344     return node;
11345 }
11346 #endif  /* !RIPPER */
11347 
11348 #define STR_FUNC_ESCAPE 0x01
11349 #define STR_FUNC_EXPAND 0x02
11350 #define STR_FUNC_REGEXP 0x04
11351 #define STR_FUNC_QWORDS 0x08
11352 #define STR_FUNC_SYMBOL 0x10
11353 #define STR_FUNC_INDENT 0x20
11354 
11355 enum string_type {
11356     str_squote = (0),
11357     str_dquote = (STR_FUNC_EXPAND),
11358     str_xquote = (STR_FUNC_EXPAND),
11359     str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11360     str_sword  = (STR_FUNC_QWORDS),
11361     str_dword  = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11362     str_ssym   = (STR_FUNC_SYMBOL),
11363     str_dsym   = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11364 };
11365 
11366 static VALUE
11367 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11368 {
11369     VALUE str;
11370 
11371     str = rb_enc_str_new(p, n, enc);
11372     if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11373         if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11374         }
11375         else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11376             rb_enc_associate(str, rb_ascii8bit_encoding());
11377         }
11378     }
11379 
11380     return str;
11381 }
11382 
11383 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
11384 #define peek(c) (lex_p < lex_pend && (c) == *lex_p)
11385 
11386 static inline int
11387 parser_nextc(struct parser_params *parser)
11388 {
11389     int c;
11390 
11391     if (lex_p == lex_pend) {
11392         VALUE v = lex_nextline;
11393         lex_nextline = 0;
11394         if (!v) {
11395             if (parser->eofp)
11396                 return -1;
11397 
11398             if (!lex_input || NIL_P(v = lex_getline(parser))) {
11399                 parser->eofp = Qtrue;
11400                 lex_goto_eol(parser);
11401                 return -1;
11402             }
11403         }
11404         {
11405 #ifdef RIPPER
11406             if (parser->tokp < lex_pend) {
11407                 if (NIL_P(parser->delayed)) {
11408                     parser->delayed = rb_str_buf_new(1024);
11409                     rb_str_buf_cat(parser->delayed,
11410                                    parser->tokp, lex_pend - parser->tokp);
11411                     parser->delayed_line = ruby_sourceline;
11412                     parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11413                 }
11414                 else {
11415                     rb_str_buf_cat(parser->delayed,
11416                                    parser->tokp, lex_pend - parser->tokp);
11417                 }
11418             }
11419 #endif
11420             if (heredoc_end > 0) {
11421                 ruby_sourceline = heredoc_end;
11422                 heredoc_end = 0;
11423             }
11424             ruby_sourceline++;
11425             parser->line_count++;
11426             lex_pbeg = lex_p = RSTRING_PTR(v);
11427             lex_pend = lex_p + RSTRING_LEN(v);
11428             ripper_flush(parser);
11429             lex_lastline = v;
11430         }
11431     }
11432     c = (unsigned char)*lex_p++;
11433     if (c == '\r' && peek('\n')) {
11434         lex_p++;
11435         c = '\n';
11436     }
11437 
11438     return c;
11439 }
11440 
11441 static void
11442 parser_pushback(struct parser_params *parser, int c)
11443 {
11444     if (c == -1) return;
11445     lex_p--;
11446     if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11447         lex_p--;
11448     }
11449 }
11450 
11451 #define was_bol() (lex_p == lex_pbeg + 1)
11452 
11453 #define tokfix() (tokenbuf[tokidx]='\0')
11454 #define tok() tokenbuf
11455 #define toklen() tokidx
11456 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11457 
11458 static char*
11459 parser_newtok(struct parser_params *parser)
11460 {
11461     tokidx = 0;
11462     if (!tokenbuf) {
11463         toksiz = 60;
11464         tokenbuf = ALLOC_N(char, 60);
11465     }
11466     if (toksiz > 4096) {
11467         toksiz = 60;
11468         REALLOC_N(tokenbuf, char, 60);
11469     }
11470     return tokenbuf;
11471 }
11472 
11473 static char *
11474 parser_tokspace(struct parser_params *parser, int n)
11475 {
11476     tokidx += n;
11477 
11478     if (tokidx >= toksiz) {
11479         do {toksiz *= 2;} while (toksiz < tokidx);
11480         REALLOC_N(tokenbuf, char, toksiz);
11481     }
11482     return &tokenbuf[tokidx-n];
11483 }
11484 
11485 static void
11486 parser_tokadd(struct parser_params *parser, int c)
11487 {
11488     tokenbuf[tokidx++] = (char)c;
11489     if (tokidx >= toksiz) {
11490         toksiz *= 2;
11491         REALLOC_N(tokenbuf, char, toksiz);
11492     }
11493 }
11494 
11495 static int
11496 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11497 {
11498     int c;
11499 
11500     c = scan_hex(lex_p, 2, numlen);
11501     if (!*numlen) {
11502         yyerror("invalid hex escape");
11503         return 0;
11504     }
11505     lex_p += *numlen;
11506     return c;
11507 }
11508 
11509 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11510 
11511 static int
11512 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11513                    int string_literal, int symbol_literal, int regexp_literal)
11514 {
11515     /*
11516      * If string_literal is true, then we allow multiple codepoints
11517      * in \u{}, and add the codepoints to the current token.
11518      * Otherwise we're parsing a character literal and return a single
11519      * codepoint without adding it
11520      */
11521 
11522     int codepoint;
11523     size_t numlen;
11524 
11525     if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11526 
11527     if (peek('{')) {  /* handle \u{...} form */
11528         do {
11529             if (regexp_literal) { tokadd(*lex_p); }
11530             nextc();
11531             codepoint = scan_hex(lex_p, 6, &numlen);
11532             if (numlen == 0)  {
11533                 yyerror("invalid Unicode escape");
11534                 return 0;
11535             }
11536             if (codepoint > 0x10ffff) {
11537                 yyerror("invalid Unicode codepoint (too large)");
11538                 return 0;
11539             }
11540             lex_p += numlen;
11541             if (regexp_literal) {
11542                 tokcopy((int)numlen);
11543             }
11544             else if (codepoint >= 0x80) {
11545                 *encp = UTF8_ENC();
11546                 if (string_literal) tokaddmbc(codepoint, *encp);
11547             }
11548             else if (string_literal) {
11549                 tokadd(codepoint);
11550             }
11551         } while (string_literal && (peek(' ') || peek('\t')));
11552 
11553         if (!peek('}')) {
11554             yyerror("unterminated Unicode escape");
11555             return 0;
11556         }
11557 
11558         if (regexp_literal) { tokadd('}'); }
11559         nextc();
11560     }
11561     else {                      /* handle \uxxxx form */
11562         codepoint = scan_hex(lex_p, 4, &numlen);
11563         if (numlen < 4) {
11564             yyerror("invalid Unicode escape");
11565             return 0;
11566         }
11567         lex_p += 4;
11568         if (regexp_literal) {
11569             tokcopy(4);
11570         }
11571         else if (codepoint >= 0x80) {
11572             *encp = UTF8_ENC();
11573             if (string_literal) tokaddmbc(codepoint, *encp);
11574         }
11575         else if (string_literal) {
11576             tokadd(codepoint);
11577         }
11578     }
11579 
11580     return codepoint;
11581 }
11582 
11583 #define ESCAPE_CONTROL 1
11584 #define ESCAPE_META    2
11585 
11586 static int
11587 parser_read_escape(struct parser_params *parser, int flags,
11588                    rb_encoding **encp)
11589 {
11590     int c;
11591     size_t numlen;
11592 
11593     switch (c = nextc()) {
11594       case '\\':        /* Backslash */
11595         return c;
11596 
11597       case 'n': /* newline */
11598         return '\n';
11599 
11600       case 't': /* horizontal tab */
11601         return '\t';
11602 
11603       case 'r': /* carriage-return */
11604         return '\r';
11605 
11606       case 'f': /* form-feed */
11607         return '\f';
11608 
11609       case 'v': /* vertical tab */
11610         return '\13';
11611 
11612       case 'a': /* alarm(bell) */
11613         return '\007';
11614 
11615       case 'e': /* escape */
11616         return 033;
11617 
11618       case '0': case '1': case '2': case '3': /* octal constant */
11619       case '4': case '5': case '6': case '7':
11620         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11621         pushback(c);
11622         c = scan_oct(lex_p, 3, &numlen);
11623         lex_p += numlen;
11624         return c;
11625 
11626       case 'x': /* hex constant */
11627         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11628         c = tok_hex(&numlen);
11629         if (numlen == 0) return 0;
11630         return c;
11631 
11632       case 'b': /* backspace */
11633         return '\010';
11634 
11635       case 's': /* space */
11636         return ' ';
11637 
11638       case 'M':
11639         if (flags & ESCAPE_META) goto eof;
11640         if ((c = nextc()) != '-') {
11641             pushback(c);
11642             goto eof;
11643         }
11644         if ((c = nextc()) == '\\') {
11645             if (peek('u')) goto eof;
11646             return read_escape(flags|ESCAPE_META, encp) | 0x80;
11647         }
11648         else if (c == -1 || !ISASCII(c)) goto eof;
11649         else {
11650             return ((c & 0xff) | 0x80);
11651         }
11652 
11653       case 'C':
11654         if ((c = nextc()) != '-') {
11655             pushback(c);
11656             goto eof;
11657         }
11658       case 'c':
11659         if (flags & ESCAPE_CONTROL) goto eof;
11660         if ((c = nextc())== '\\') {
11661             if (peek('u')) goto eof;
11662             c = read_escape(flags|ESCAPE_CONTROL, encp);
11663         }
11664         else if (c == '?')
11665             return 0177;
11666         else if (c == -1 || !ISASCII(c)) goto eof;
11667         return c & 0x9f;
11668 
11669       eof:
11670       case -1:
11671         yyerror("Invalid escape character syntax");
11672         return '\0';
11673 
11674       default:
11675         return c;
11676     }
11677 }
11678 
11679 static void
11680 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11681 {
11682     int len = rb_enc_codelen(c, enc);
11683     rb_enc_mbcput(c, tokspace(len), enc);
11684 }
11685 
11686 static int
11687 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11688 {
11689     int c;
11690     int flags = 0;
11691     size_t numlen;
11692 
11693   first:
11694     switch (c = nextc()) {
11695       case '\n':
11696         return 0;               /* just ignore */
11697 
11698       case '0': case '1': case '2': case '3': /* octal constant */
11699       case '4': case '5': case '6': case '7':
11700         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11701         {
11702             ruby_scan_oct(--lex_p, 3, &numlen);
11703             if (numlen == 0) goto eof;
11704             lex_p += numlen;
11705             tokcopy((int)numlen + 1);
11706         }
11707         return 0;
11708 
11709       case 'x': /* hex constant */
11710         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11711         {
11712             tok_hex(&numlen);
11713             if (numlen == 0) goto eof;
11714             tokcopy((int)numlen + 2);
11715         }
11716         return 0;
11717 
11718       case 'M':
11719         if (flags & ESCAPE_META) goto eof;
11720         if ((c = nextc()) != '-') {
11721             pushback(c);
11722             goto eof;
11723         }
11724         tokcopy(3);
11725         flags |= ESCAPE_META;
11726         goto escaped;
11727 
11728       case 'C':
11729         if (flags & ESCAPE_CONTROL) goto eof;
11730         if ((c = nextc()) != '-') {
11731             pushback(c);
11732             goto eof;
11733         }
11734         tokcopy(3);
11735         goto escaped;
11736 
11737       case 'c':
11738         if (flags & ESCAPE_CONTROL) goto eof;
11739         tokcopy(2);
11740         flags |= ESCAPE_CONTROL;
11741       escaped:
11742         if ((c = nextc()) == '\\') {
11743             goto first;
11744         }
11745         else if (c == -1) goto eof;
11746         tokadd(c);
11747         return 0;
11748 
11749       eof:
11750       case -1:
11751         yyerror("Invalid escape character syntax");
11752         return -1;
11753 
11754       default:
11755         tokadd('\\');
11756         tokadd(c);
11757     }
11758     return 0;
11759 }
11760 
11761 extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
11762 
11763 static int
11764 parser_regx_options(struct parser_params *parser)
11765 {
11766     int kcode = 0;
11767     int kopt = 0;
11768     int options = 0;
11769     int c, opt, kc;
11770 
11771     newtok();
11772     while (c = nextc(), ISALPHA(c)) {
11773         if (c == 'o') {
11774             options |= RE_OPTION_ONCE;
11775         }
11776         else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11777             if (kc >= 0) {
11778                 if (kc != rb_ascii8bit_encindex()) kcode = c;
11779                 kopt = opt;
11780             }
11781             else {
11782                 options |= opt;
11783             }
11784         }
11785         else {
11786             tokadd(c);
11787         }
11788     }
11789     options |= kopt;
11790     pushback(c);
11791     if (toklen()) {
11792         tokfix();
11793         compile_error(PARSER_ARG "unknown regexp option%s - %s",
11794                       toklen() > 1 ? "s" : "", tok());
11795     }
11796     return options | RE_OPTION_ENCODING(kcode);
11797 }
11798 
11799 static void
11800 dispose_string(VALUE str)
11801 {
11802     /* TODO: should use another API? */
11803     if (RBASIC(str)->flags & RSTRING_NOEMBED)
11804         xfree(RSTRING_PTR(str));
11805     rb_gc_force_recycle(str);
11806 }
11807 
11808 static int
11809 parser_tokadd_mbchar(struct parser_params *parser, int c)
11810 {
11811     int len = parser_precise_mbclen();
11812     if (!MBCLEN_CHARFOUND_P(len)) {
11813         compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11814         return -1;
11815     }
11816     tokadd(c);
11817     lex_p += --len;
11818     if (len > 0) tokcopy(len);
11819     return c;
11820 }
11821 
11822 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
11823 
11824 static int
11825 parser_tokadd_string(struct parser_params *parser,
11826                      int func, int term, int paren, long *nest,
11827                      rb_encoding **encp)
11828 {
11829     int c;
11830     int has_nonascii = 0;
11831     rb_encoding *enc = *encp;
11832     char *errbuf = 0;
11833     static const char mixed_msg[] = "%s mixed within %s source";
11834 
11835 #define mixed_error(enc1, enc2) if (!errbuf) {  \
11836         size_t len = sizeof(mixed_msg) - 4;     \
11837         len += strlen(rb_enc_name(enc1));       \
11838         len += strlen(rb_enc_name(enc2));       \
11839         errbuf = ALLOCA_N(char, len);           \
11840         snprintf(errbuf, len, mixed_msg,        \
11841                  rb_enc_name(enc1),             \
11842                  rb_enc_name(enc2));            \
11843         yyerror(errbuf);                        \
11844     }
11845 #define mixed_escape(beg, enc1, enc2) do {      \
11846         const char *pos = lex_p;                \
11847         lex_p = beg;                            \
11848         mixed_error(enc1, enc2);                \
11849         lex_p = pos;                            \
11850     } while (0)
11851 
11852     while ((c = nextc()) != -1) {
11853         if (paren && c == paren) {
11854             ++*nest;
11855         }
11856         else if (c == term) {
11857             if (!nest || !*nest) {
11858                 pushback(c);
11859                 break;
11860             }
11861             --*nest;
11862         }
11863         else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11864             int c2 = *lex_p;
11865             if (c2 == '$' || c2 == '@' || c2 == '{') {
11866                 pushback(c);
11867                 break;
11868             }
11869         }
11870         else if (c == '\\') {
11871             const char *beg = lex_p - 1;
11872             c = nextc();
11873             switch (c) {
11874               case '\n':
11875                 if (func & STR_FUNC_QWORDS) break;
11876                 if (func & STR_FUNC_EXPAND) continue;
11877                 tokadd('\\');
11878                 break;
11879 
11880               case '\\':
11881                 if (func & STR_FUNC_ESCAPE) tokadd(c);
11882                 break;
11883 
11884               case 'u':
11885                 if ((func & STR_FUNC_EXPAND) == 0) {
11886                     tokadd('\\');
11887                     break;
11888                 }
11889                 parser_tokadd_utf8(parser, &enc, 1,
11890                                    func & STR_FUNC_SYMBOL,
11891                                    func & STR_FUNC_REGEXP);
11892                 if (has_nonascii && enc != *encp) {
11893                     mixed_escape(beg, enc, *encp);
11894                 }
11895                 continue;
11896 
11897               default:
11898                 if (func & STR_FUNC_REGEXP) {
11899                     pushback(c);
11900                     if ((c = tokadd_escape(&enc)) < 0)
11901                         return -1;
11902                     if (has_nonascii && enc != *encp) {
11903                         mixed_escape(beg, enc, *encp);
11904                     }
11905                     continue;
11906                 }
11907                 else if (func & STR_FUNC_EXPAND) {
11908                     pushback(c);
11909                     if (func & STR_FUNC_ESCAPE) tokadd('\\');
11910                     c = read_escape(0, &enc);
11911                 }
11912                 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11913                     /* ignore backslashed spaces in %w */
11914                 }
11915                 else if (c != term && !(paren && c == paren)) {
11916                     tokadd('\\');
11917                     pushback(c);
11918                     continue;
11919                 }
11920             }
11921         }
11922         else if (!parser_isascii()) {
11923             has_nonascii = 1;
11924             if (enc != *encp) {
11925                 mixed_error(enc, *encp);
11926                 continue;
11927             }
11928             if (tokadd_mbchar(c) == -1) return -1;
11929             continue;
11930         }
11931         else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11932             pushback(c);
11933             break;
11934         }
11935         if (c & 0x80) {
11936             has_nonascii = 1;
11937             if (enc != *encp) {
11938                 mixed_error(enc, *encp);
11939                 continue;
11940             }
11941         }
11942         tokadd(c);
11943     }
11944     *encp = enc;
11945     return c;
11946 }
11947 
11948 #define NEW_STRTERM(func, term, paren) \
11949         rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11950 
11951 static int
11952 parser_parse_string(struct parser_params *parser, NODE *quote)
11953 {
11954     int func = (int)quote->nd_func;
11955     int term = nd_term(quote);
11956     int paren = nd_paren(quote);
11957     int c, space = 0;
11958     rb_encoding *enc = parser->enc;
11959 
11960     if (func == -1) return tSTRING_END;
11961     c = nextc();
11962     if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11963         do {c = nextc();} while (ISSPACE(c));
11964         space = 1;
11965     }
11966     if (c == term && !quote->nd_nest) {
11967         if (func & STR_FUNC_QWORDS) {
11968             quote->nd_func = -1;
11969             return ' ';
11970         }
11971         if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11972         set_yylval_num(regx_options());
11973         return tREGEXP_END;
11974     }
11975     if (space) {
11976         pushback(c);
11977         return ' ';
11978     }
11979     newtok();
11980     if ((func & STR_FUNC_EXPAND) && c == '#') {
11981         switch (c = nextc()) {
11982           case '$':
11983           case '@':
11984             pushback(c);
11985             return tSTRING_DVAR;
11986           case '{':
11987             return tSTRING_DBEG;
11988         }
11989         tokadd('#');
11990     }
11991     pushback(c);
11992     if (tokadd_string(func, term, paren, &quote->nd_nest,
11993                       &enc) == -1) {
11994         ruby_sourceline = nd_line(quote);
11995         if (func & STR_FUNC_REGEXP) {
11996             if (parser->eofp)
11997                 compile_error(PARSER_ARG "unterminated regexp meets end of file");
11998             return tREGEXP_END;
11999         }
12000         else {
12001             if (parser->eofp)
12002                 compile_error(PARSER_ARG "unterminated string meets end of file");
12003             return tSTRING_END;
12004         }
12005     }
12006 
12007     tokfix();
12008     set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12009     return tSTRING_CONTENT;
12010 }
12011 
12012 static int
12013 parser_heredoc_identifier(struct parser_params *parser)
12014 {
12015     int c = nextc(), term, func = 0;
12016     long len;
12017 
12018     if (c == '-') {
12019         c = nextc();
12020         func = STR_FUNC_INDENT;
12021     }
12022     switch (c) {
12023       case '\'':
12024         func |= str_squote; goto quoted;
12025       case '"':
12026         func |= str_dquote; goto quoted;
12027       case '`':
12028         func |= str_xquote;
12029       quoted:
12030         newtok();
12031         tokadd(func);
12032         term = c;
12033         while ((c = nextc()) != -1 && c != term) {
12034             if (tokadd_mbchar(c) == -1) return 0;
12035         }
12036         if (c == -1) {
12037             compile_error(PARSER_ARG "unterminated here document identifier");
12038             return 0;
12039         }
12040         break;
12041 
12042       default:
12043         if (!parser_is_identchar()) {
12044             pushback(c);
12045             if (func & STR_FUNC_INDENT) {
12046                 pushback('-');
12047             }
12048             return 0;
12049         }
12050         newtok();
12051         term = '"';
12052         tokadd(func |= str_dquote);
12053         do {
12054             if (tokadd_mbchar(c) == -1) return 0;
12055         } while ((c = nextc()) != -1 && parser_is_identchar());
12056         pushback(c);
12057         break;
12058     }
12059 
12060     tokfix();
12061 #ifdef RIPPER
12062     ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12063 #endif
12064     len = lex_p - lex_pbeg;
12065     lex_goto_eol(parser);
12066     lex_strterm = rb_node_newnode(NODE_HEREDOC,
12067                                   STR_NEW(tok(), toklen()),     /* nd_lit */
12068                                   len,                          /* nd_nth */
12069                                   lex_lastline);                /* nd_orig */
12070     nd_set_line(lex_strterm, ruby_sourceline);
12071     ripper_flush(parser);
12072     return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12073 }
12074 
12075 static void
12076 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12077 {
12078     VALUE line;
12079 
12080     line = here->nd_orig;
12081     lex_lastline = line;
12082     lex_pbeg = RSTRING_PTR(line);
12083     lex_pend = lex_pbeg + RSTRING_LEN(line);
12084     lex_p = lex_pbeg + here->nd_nth;
12085     heredoc_end = ruby_sourceline;
12086     ruby_sourceline = nd_line(here);
12087     dispose_string(here->nd_lit);
12088     rb_gc_force_recycle((VALUE)here);
12089     ripper_flush(parser);
12090 }
12091 
12092 static int
12093 parser_whole_match_p(struct parser_params *parser,
12094     const char *eos, long len, int indent)
12095 {
12096     const char *p = lex_pbeg;
12097     long n;
12098 
12099     if (indent) {
12100         while (*p && ISSPACE(*p)) p++;
12101     }
12102     n = lex_pend - (p + len);
12103     if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12104     return strncmp(eos, p, len) == 0;
12105 }
12106 
12107 static int
12108 parser_here_document(struct parser_params *parser, NODE *here)
12109 {
12110     int c, func, indent = 0;
12111     const char *eos, *p, *pend;
12112     long len;
12113     VALUE str = 0;
12114     rb_encoding *enc = parser->enc;
12115 
12116     eos = RSTRING_PTR(here->nd_lit);
12117     len = RSTRING_LEN(here->nd_lit) - 1;
12118     indent = (func = *eos++) & STR_FUNC_INDENT;
12119 
12120     if ((c = nextc()) == -1) {
12121       error:
12122         compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12123 #ifdef RIPPER
12124         if (NIL_P(parser->delayed)) {
12125             ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12126         }
12127         else {
12128             if (str ||
12129                 ((len = lex_p - parser->tokp) > 0 &&
12130                  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12131                 rb_str_append(parser->delayed, str);
12132             }
12133             ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12134         }
12135         lex_goto_eol(parser);
12136 #endif
12137       restore:
12138         heredoc_restore(lex_strterm);
12139         lex_strterm = 0;
12140         return 0;
12141     }
12142     if (was_bol() && whole_match_p(eos, len, indent)) {
12143         heredoc_restore(lex_strterm);
12144         return tSTRING_END;
12145     }
12146 
12147     if (!(func & STR_FUNC_EXPAND)) {
12148         do {
12149             p = RSTRING_PTR(lex_lastline);
12150             pend = lex_pend;
12151             if (pend > p) {
12152                 switch (pend[-1]) {
12153                   case '\n':
12154                     if (--pend == p || pend[-1] != '\r') {
12155                         pend++;
12156                         break;
12157                     }
12158                   case '\r':
12159                     --pend;
12160                 }
12161             }
12162             if (str)
12163                 rb_str_cat(str, p, pend - p);
12164             else
12165                 str = STR_NEW(p, pend - p);
12166             if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12167             lex_goto_eol(parser);
12168             if (nextc() == -1) {
12169                 if (str) dispose_string(str);
12170                 goto error;
12171             }
12172         } while (!whole_match_p(eos, len, indent));
12173     }
12174     else {
12175         /*      int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12176         newtok();
12177         if (c == '#') {
12178             switch (c = nextc()) {
12179               case '$':
12180               case '@':
12181                 pushback(c);
12182                 return tSTRING_DVAR;
12183               case '{':
12184                 return tSTRING_DBEG;
12185             }
12186             tokadd('#');
12187         }
12188         do {
12189             pushback(c);
12190             if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12191                 if (parser->eofp) goto error;
12192                 goto restore;
12193             }
12194             if (c != '\n') {
12195                 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12196                 return tSTRING_CONTENT;
12197             }
12198             tokadd(nextc());
12199             /*      if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12200             if ((c = nextc()) == -1) goto error;
12201         } while (!whole_match_p(eos, len, indent));
12202         str = STR_NEW3(tok(), toklen(), enc, func);
12203     }
12204 #ifdef RIPPER
12205     if (!NIL_P(parser->delayed))
12206         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12207     lex_goto_eol(parser);
12208     ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12209 #endif
12210     heredoc_restore(lex_strterm);
12211     lex_strterm = NEW_STRTERM(-1, 0, 0);
12212     set_yylval_str(str);
12213     return tSTRING_CONTENT;
12214 }
12215 
12216 #include "lex.c"
12217 
12218 static void
12219 arg_ambiguous_gen(struct parser_params *parser)
12220 {
12221 #ifndef RIPPER
12222     rb_warning0("ambiguous first argument; put parentheses or even spaces");
12223 #else
12224     dispatch0(arg_ambiguous);
12225 #endif
12226 }
12227 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12228 
12229 static ID
12230 formal_argument_gen(struct parser_params *parser, ID lhs)
12231 {
12232 #ifndef RIPPER
12233     if (!is_local_id(lhs))
12234         yyerror("formal argument must be local variable");
12235 #endif
12236     shadowing_lvar(lhs);
12237     return lhs;
12238 }
12239 
12240 static int
12241 lvar_defined_gen(struct parser_params *parser, ID id)
12242 {
12243     return (dyna_in_block() && dvar_defined(id)) || local_id(id);
12244 }
12245 
12246 /* emacsen -*- hack */
12247 static long
12248 parser_encode_length(struct parser_params *parser, const char *name, long len)
12249 {
12250     long nlen;
12251 
12252     if (len > 5 && name[nlen = len - 5] == '-') {
12253         if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12254             return nlen;
12255     }
12256     if (len > 4 && name[nlen = len - 5] == '-') {
12257         if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12258             return nlen;
12259         if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0)
12260             return nlen;
12261     }
12262     return len;
12263 }
12264 
12265 static void
12266 parser_set_encode(struct parser_params *parser, const char *name)
12267 {
12268     int idx = rb_enc_find_index(name);
12269     rb_encoding *enc;
12270     VALUE excargs[3];
12271 
12272     if (idx < 0) {
12273         VALUE rb_make_backtrace(void);
12274         VALUE rb_make_exception(int, VALUE*);
12275 
12276         excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12277       error:
12278         excargs[0] = rb_eArgError;
12279         excargs[2] = rb_make_backtrace();
12280         rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12281         rb_exc_raise(rb_make_exception(3, excargs));
12282     }
12283     enc = rb_enc_from_index(idx);
12284     if (!rb_enc_asciicompat(enc)) {
12285         excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12286         goto error;
12287     }
12288     parser->enc = enc;
12289 }
12290 
12291 static int
12292 comment_at_top(struct parser_params *parser)
12293 {
12294     const char *p = lex_pbeg, *pend = lex_p - 1;
12295     if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12296     while (p < pend) {
12297         if (!ISSPACE(*p)) return 0;
12298         p++;
12299     }
12300     return 1;
12301 }
12302 
12303 #ifndef RIPPER
12304 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12305 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12306 
12307 static void
12308 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12309 {
12310     if (!comment_at_top(parser)) {
12311         return;
12312     }
12313     parser_set_encode(parser, val);
12314 }
12315 
12316 struct magic_comment {
12317     const char *name;
12318     rb_magic_comment_setter_t func;
12319     rb_magic_comment_length_t length;
12320 };
12321 
12322 static const struct magic_comment magic_comments[] = {
12323     {"coding", magic_comment_encoding, parser_encode_length},
12324     {"encoding", magic_comment_encoding, parser_encode_length},
12325 };
12326 #endif
12327 
12328 static const char *
12329 magic_comment_marker(const char *str, long len)
12330 {
12331     long i = 2;
12332 
12333     while (i < len) {
12334         switch (str[i]) {
12335           case '-':
12336             if (str[i-1] == '*' && str[i-2] == '-') {
12337                 return str + i + 1;
12338             }
12339             i += 2;
12340             break;
12341           case '*':
12342             if (i + 1 >= len) return 0;
12343             if (str[i+1] != '-') {
12344                 i += 4;
12345             }
12346             else if (str[i-1] != '-') {
12347                 i += 2;
12348             }
12349             else {
12350                 return str + i + 2;
12351             }
12352             break;
12353           default:
12354             i += 3;
12355             break;
12356         }
12357     }
12358     return 0;
12359 }
12360 
12361 static int
12362 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12363 {
12364     VALUE name = 0, val = 0;
12365     const char *beg, *end, *vbeg, *vend;
12366 #define str_copy(_s, _p, _n) ((_s) \
12367         ? (rb_str_resize((_s), (_n)), \
12368            MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12369         : ((_s) = STR_NEW((_p), (_n))))
12370 
12371     if (len <= 7) return FALSE;
12372     if (!(beg = magic_comment_marker(str, len))) return FALSE;
12373     if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12374     str = beg;
12375     len = end - beg - 3;
12376 
12377     /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
12378     while (len > 0) {
12379 #ifndef RIPPER
12380         const struct magic_comment *p = magic_comments;
12381 #endif
12382         char *s;
12383         int i;
12384         long n = 0;
12385 
12386         for (; len > 0 && *str; str++, --len) {
12387             switch (*str) {
12388               case '\'': case '"': case ':': case ';':
12389                 continue;
12390             }
12391             if (!ISSPACE(*str)) break;
12392         }
12393         for (beg = str; len > 0; str++, --len) {
12394             switch (*str) {
12395               case '\'': case '"': case ':': case ';':
12396                 break;
12397               default:
12398                 if (ISSPACE(*str)) break;
12399                 continue;
12400             }
12401             break;
12402         }
12403         for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12404         if (!len) break;
12405         if (*str != ':') continue;
12406 
12407         do str++; while (--len > 0 && ISSPACE(*str));
12408         if (!len) break;
12409         if (*str == '"') {
12410             for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12411                 if (*str == '\\') {
12412                     --len;
12413                     ++str;
12414                 }
12415             }
12416             vend = str;
12417             if (len) {
12418                 --len;
12419                 ++str;
12420             }
12421         }
12422         else {
12423             for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12424             vend = str;
12425         }
12426         while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12427 
12428         n = end - beg;
12429         str_copy(name, beg, n);
12430         s = RSTRING_PTR(name);
12431         for (i = 0; i < n; ++i) {
12432             if (s[i] == '-') s[i] = '_';
12433         }
12434 #ifndef RIPPER
12435         do {
12436             if (STRNCASECMP(p->name, s, n) == 0) {
12437                 n = vend - vbeg;
12438                 if (p->length) {
12439                     n = (*p->length)(parser, vbeg, n);
12440                 }
12441                 str_copy(val, vbeg, n);
12442                 (*p->func)(parser, s, RSTRING_PTR(val));
12443                 break;
12444             }
12445         } while (++p < magic_comments + numberof(magic_comments));
12446 #else
12447         dispatch2(magic_comment, name, val);
12448 #endif
12449     }
12450 
12451     return TRUE;
12452 }
12453 
12454 static void
12455 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12456 {
12457     int sep = 0;
12458     const char *beg = str;
12459     VALUE s;
12460 
12461     for (;;) {
12462         if (send - str <= 6) return;
12463         switch (str[6]) {
12464           case 'C': case 'c': str += 6; continue;
12465           case 'O': case 'o': str += 5; continue;
12466           case 'D': case 'd': str += 4; continue;
12467           case 'I': case 'i': str += 3; continue;
12468           case 'N': case 'n': str += 2; continue;
12469           case 'G': case 'g': str += 1; continue;
12470           case '=': case ':':
12471             sep = 1;
12472             str += 6;
12473             break;
12474           default:
12475             str += 6;
12476             if (ISSPACE(*str)) break;
12477             continue;
12478         }
12479         if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12480     }
12481     for (;;) {
12482         do {
12483             if (++str >= send) return;
12484         } while (ISSPACE(*str));
12485         if (sep) break;
12486         if (*str != '=' && *str != ':') return;
12487         sep = 1;
12488         str++;
12489     }
12490     beg = str;
12491     while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12492     s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12493     parser_set_encode(parser, RSTRING_PTR(s));
12494     rb_str_resize(s, 0);
12495 }
12496 
12497 static void
12498 parser_prepare(struct parser_params *parser)
12499 {
12500     int c = nextc();
12501     switch (c) {
12502       case '#':
12503         if (peek('!')) parser->has_shebang = 1;
12504         break;
12505       case 0xef:                /* UTF-8 BOM marker */
12506         if (lex_pend - lex_p >= 2 &&
12507             (unsigned char)lex_p[0] == 0xbb &&
12508             (unsigned char)lex_p[1] == 0xbf) {
12509             parser->enc = rb_utf8_encoding();
12510             lex_p += 2;
12511             lex_pbeg = lex_p;
12512             return;
12513         }
12514         break;
12515       case EOF:
12516         return;
12517     }
12518     pushback(c);
12519     parser->enc = rb_enc_get(lex_lastline);
12520 }
12521 
12522 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12523 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12524 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12525 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12526 
12527 #ifndef RIPPER
12528 #define ambiguous_operator(op, syn) ( \
12529     rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12530     rb_warning0("even though it seems like "syn""))
12531 #else
12532 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12533 #endif
12534 #define warn_balanced(op, syn) \
12535     (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12536      last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12537      last_state != EXPR_ENDARG && \
12538      space_seen && !ISSPACE(c) && \
12539      (ambiguous_operator(op, syn), 0))
12540 
12541 static int
12542 parser_yylex(struct parser_params *parser)
12543 {
12544     register int c;
12545     int space_seen = 0;
12546     int cmd_state;
12547     enum lex_state_e last_state;
12548     rb_encoding *enc;
12549     int mb;
12550 #ifdef RIPPER
12551     int fallthru = FALSE;
12552 #endif
12553 
12554     if (lex_strterm) {
12555         int token;
12556         if (nd_type(lex_strterm) == NODE_HEREDOC) {
12557             token = here_document(lex_strterm);
12558             if (token == tSTRING_END) {
12559                 lex_strterm = 0;
12560                 lex_state = EXPR_END;
12561             }
12562         }
12563         else {
12564             token = parse_string(lex_strterm);
12565             if (token == tSTRING_END || token == tREGEXP_END) {
12566                 rb_gc_force_recycle((VALUE)lex_strterm);
12567                 lex_strterm = 0;
12568                 lex_state = EXPR_END;
12569             }
12570         }
12571         return token;
12572     }
12573     cmd_state = command_start;
12574     command_start = FALSE;
12575   retry:
12576     last_state = lex_state;
12577     switch (c = nextc()) {
12578       case '\0':                /* NUL */
12579       case '\004':              /* ^D */
12580       case '\032':              /* ^Z */
12581       case -1:                  /* end of script. */
12582         return 0;
12583 
12584         /* white spaces */
12585       case ' ': case '\t': case '\f': case '\r':
12586       case '\13': /* '\v' */
12587         space_seen = 1;
12588 #ifdef RIPPER
12589         while ((c = nextc())) {
12590             switch (c) {
12591               case ' ': case '\t': case '\f': case '\r':
12592               case '\13': /* '\v' */
12593                 break;
12594               default:
12595                 goto outofloop;
12596             }
12597         }
12598       outofloop:
12599         pushback(c);
12600         ripper_dispatch_scan_event(parser, tSP);
12601 #endif
12602         goto retry;
12603 
12604       case '#':         /* it's a comment */
12605         /* no magic_comment in shebang line */
12606         if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12607             if (comment_at_top(parser)) {
12608                 set_file_encoding(parser, lex_p, lex_pend);
12609             }
12610         }
12611         lex_p = lex_pend;
12612 #ifdef RIPPER
12613         ripper_dispatch_scan_event(parser, tCOMMENT);
12614         fallthru = TRUE;
12615 #endif
12616         /* fall through */
12617       case '\n':
12618         switch (lex_state) {
12619           case EXPR_BEG:
12620           case EXPR_FNAME:
12621           case EXPR_DOT:
12622           case EXPR_CLASS:
12623           case EXPR_VALUE:
12624 #ifdef RIPPER
12625             if (!fallthru) {
12626                 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12627             }
12628             fallthru = FALSE;
12629 #endif
12630             goto retry;
12631           default:
12632             break;
12633         }
12634         while ((c = nextc())) {
12635             switch (c) {
12636               case ' ': case '\t': case '\f': case '\r':
12637               case '\13': /* '\v' */
12638                 space_seen = 1;
12639                 break;
12640               case '.': {
12641                   if ((c = nextc()) != '.') {
12642                       pushback(c);
12643                       pushback('.');
12644                       goto retry;
12645                   }
12646               }
12647               default:
12648                 --ruby_sourceline;
12649                 lex_nextline = lex_lastline;
12650               case -1:          /* EOF no decrement*/
12651                 lex_goto_eol(parser);
12652 #ifdef RIPPER
12653                 if (c != -1) {
12654                     parser->tokp = lex_p;
12655                 }
12656 #endif
12657                 goto normal_newline;
12658             }
12659         }
12660       normal_newline:
12661         command_start = TRUE;
12662         lex_state = EXPR_BEG;
12663         return '\n';
12664 
12665       case '*':
12666         if ((c = nextc()) == '*') {
12667             if ((c = nextc()) == '=') {
12668                 set_yylval_id(tPOW);
12669                 lex_state = EXPR_BEG;
12670                 return tOP_ASGN;
12671             }
12672             pushback(c);
12673             c = tPOW;
12674         }
12675         else {
12676             if (c == '=') {
12677                 set_yylval_id('*');
12678                 lex_state = EXPR_BEG;
12679                 return tOP_ASGN;
12680             }
12681             pushback(c);
12682             if (IS_SPCARG(c)) {
12683                 rb_warning0("`*' interpreted as argument prefix");
12684                 c = tSTAR;
12685             }
12686             else if (IS_BEG()) {
12687                 c = tSTAR;
12688             }
12689             else {
12690                 warn_balanced("*", "argument prefix");
12691                 c = '*';
12692             }
12693         }
12694         switch (lex_state) {
12695           case EXPR_FNAME: case EXPR_DOT:
12696             lex_state = EXPR_ARG; break;
12697           default:
12698             lex_state = EXPR_BEG; break;
12699         }
12700         return c;
12701 
12702       case '!':
12703         c = nextc();
12704         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12705             lex_state = EXPR_ARG;
12706             if (c == '@') {
12707                 return '!';
12708             }
12709         }
12710         else {
12711             lex_state = EXPR_BEG;
12712         }
12713         if (c == '=') {
12714             return tNEQ;
12715         }
12716         if (c == '~') {
12717             return tNMATCH;
12718         }
12719         pushback(c);
12720         return '!';
12721 
12722       case '=':
12723         if (was_bol()) {
12724             /* skip embedded rd document */
12725             if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12726 #ifdef RIPPER
12727                 int first_p = TRUE;
12728 
12729                 lex_goto_eol(parser);
12730                 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12731 #endif
12732                 for (;;) {
12733                     lex_goto_eol(parser);
12734 #ifdef RIPPER
12735                     if (!first_p) {
12736                         ripper_dispatch_scan_event(parser, tEMBDOC);
12737                     }
12738                     first_p = FALSE;
12739 #endif
12740                     c = nextc();
12741                     if (c == -1) {
12742                         compile_error(PARSER_ARG "embedded document meets end of file");
12743                         return 0;
12744                     }
12745                     if (c != '=') continue;
12746                     if (strncmp(lex_p, "end", 3) == 0 &&
12747                         (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12748                         break;
12749                     }
12750                 }
12751                 lex_goto_eol(parser);
12752 #ifdef RIPPER
12753                 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12754 #endif
12755                 goto retry;
12756             }
12757         }
12758 
12759         switch (lex_state) {
12760           case EXPR_FNAME: case EXPR_DOT:
12761             lex_state = EXPR_ARG; break;
12762           default:
12763             lex_state = EXPR_BEG; break;
12764         }
12765         if ((c = nextc()) == '=') {
12766             if ((c = nextc()) == '=') {
12767                 return tEQQ;
12768             }
12769             pushback(c);
12770             return tEQ;
12771         }
12772         if (c == '~') {
12773             return tMATCH;
12774         }
12775         else if (c == '>') {
12776             return tASSOC;
12777         }
12778         pushback(c);
12779         return '=';
12780 
12781       case '<':
12782         last_state = lex_state;
12783         c = nextc();
12784         if (c == '<' &&
12785             lex_state != EXPR_DOT &&
12786             lex_state != EXPR_CLASS &&
12787             !IS_END() &&
12788             (!IS_ARG() || space_seen)) {
12789             int token = heredoc_identifier();
12790             if (token) return token;
12791         }
12792         switch (lex_state) {
12793           case EXPR_FNAME: case EXPR_DOT:
12794             lex_state = EXPR_ARG; break;
12795           default:
12796             lex_state = EXPR_BEG; break;
12797         }
12798         if (c == '=') {
12799             if ((c = nextc()) == '>') {
12800                 return tCMP;
12801             }
12802             pushback(c);
12803             return tLEQ;
12804         }
12805         if (c == '<') {
12806             if ((c = nextc()) == '=') {
12807                 set_yylval_id(tLSHFT);
12808                 lex_state = EXPR_BEG;
12809                 return tOP_ASGN;
12810             }
12811             pushback(c);
12812             warn_balanced("<<", "here document");
12813             return tLSHFT;
12814         }
12815         pushback(c);
12816         return '<';
12817 
12818       case '>':
12819         switch (lex_state) {
12820           case EXPR_FNAME: case EXPR_DOT:
12821             lex_state = EXPR_ARG; break;
12822           default:
12823             lex_state = EXPR_BEG; break;
12824         }
12825         if ((c = nextc()) == '=') {
12826             return tGEQ;
12827         }
12828         if (c == '>') {
12829             if ((c = nextc()) == '=') {
12830                 set_yylval_id(tRSHFT);
12831                 lex_state = EXPR_BEG;
12832                 return tOP_ASGN;
12833             }
12834             pushback(c);
12835             return tRSHFT;
12836         }
12837         pushback(c);
12838         return '>';
12839 
12840       case '"':
12841         lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12842         return tSTRING_BEG;
12843 
12844       case '`':
12845         if (lex_state == EXPR_FNAME) {
12846             lex_state = EXPR_ENDFN;
12847             return c;
12848         }
12849         if (lex_state == EXPR_DOT) {
12850             if (cmd_state)
12851                 lex_state = EXPR_CMDARG;
12852             else
12853                 lex_state = EXPR_ARG;
12854             return c;
12855         }
12856         lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12857         return tXSTRING_BEG;
12858 
12859       case '\'':
12860         lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12861         return tSTRING_BEG;
12862 
12863       case '?':
12864         if (IS_END()) {
12865             lex_state = EXPR_VALUE;
12866             return '?';
12867         }
12868         c = nextc();
12869         if (c == -1) {
12870             compile_error(PARSER_ARG "incomplete character syntax");
12871             return 0;
12872         }
12873         if (rb_enc_isspace(c, parser->enc)) {
12874             if (!IS_ARG()) {
12875                 int c2 = 0;
12876                 switch (c) {
12877                   case ' ':
12878                     c2 = 's';
12879                     break;
12880                   case '\n':
12881                     c2 = 'n';
12882                     break;
12883                   case '\t':
12884                     c2 = 't';
12885                     break;
12886                   case '\v':
12887                     c2 = 'v';
12888                     break;
12889                   case '\r':
12890                     c2 = 'r';
12891                     break;
12892                   case '\f':
12893                     c2 = 'f';
12894                     break;
12895                 }
12896                 if (c2) {
12897                     rb_warnI("invalid character syntax; use ?\\%c", c2);
12898                 }
12899             }
12900           ternary:
12901             pushback(c);
12902             lex_state = EXPR_VALUE;
12903             return '?';
12904         }
12905         newtok();
12906         enc = parser->enc;
12907         if (!parser_isascii()) {
12908             if (tokadd_mbchar(c) == -1) return 0;
12909         }
12910         else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12911                  lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12912             goto ternary;
12913         }
12914         else if (c == '\\') {
12915             if (peek('u')) {
12916                 nextc();
12917                 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12918                 if (0x80 <= c) {
12919                     tokaddmbc(c, enc);
12920                 }
12921                 else {
12922                     tokadd(c);
12923                 }
12924             }
12925             else {
12926                 c = read_escape(0, &enc);
12927                 tokadd(c);
12928             }
12929         }
12930         else {
12931             tokadd(c);
12932         }
12933         tokfix();
12934         set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12935         lex_state = EXPR_END;
12936         return tCHAR;
12937 
12938       case '&':
12939         if ((c = nextc()) == '&') {
12940             lex_state = EXPR_BEG;
12941             if ((c = nextc()) == '=') {
12942                 set_yylval_id(tANDOP);
12943                 lex_state = EXPR_BEG;
12944                 return tOP_ASGN;
12945             }
12946             pushback(c);
12947             return tANDOP;
12948         }
12949         else if (c == '=') {
12950             set_yylval_id('&');
12951             lex_state = EXPR_BEG;
12952             return tOP_ASGN;
12953         }
12954         pushback(c);
12955         if (IS_SPCARG(c)) {
12956             rb_warning0("`&' interpreted as argument prefix");
12957             c = tAMPER;
12958         }
12959         else if (IS_BEG()) {
12960             c = tAMPER;
12961         }
12962         else {
12963             warn_balanced("&", "argument prefix");
12964             c = '&';
12965         }
12966         switch (lex_state) {
12967           case EXPR_FNAME: case EXPR_DOT:
12968             lex_state = EXPR_ARG; break;
12969           default:
12970             lex_state = EXPR_BEG;
12971         }
12972         return c;
12973 
12974       case '|':
12975         if ((c = nextc()) == '|') {
12976             lex_state = EXPR_BEG;
12977             if ((c = nextc()) == '=') {
12978                 set_yylval_id(tOROP);
12979                 lex_state = EXPR_BEG;
12980                 return tOP_ASGN;
12981             }
12982             pushback(c);
12983             return tOROP;
12984         }
12985         if (c == '=') {
12986             set_yylval_id('|');
12987             lex_state = EXPR_BEG;
12988             return tOP_ASGN;
12989         }
12990         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12991             lex_state = EXPR_ARG;
12992         }
12993         else {
12994             lex_state = EXPR_BEG;
12995         }
12996         pushback(c);
12997         return '|';
12998 
12999       case '+':
13000         c = nextc();
13001         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13002             lex_state = EXPR_ARG;
13003             if (c == '@') {
13004                 return tUPLUS;
13005             }
13006             pushback(c);
13007             return '+';
13008         }
13009         if (c == '=') {
13010             set_yylval_id('+');
13011             lex_state = EXPR_BEG;
13012             return tOP_ASGN;
13013         }
13014         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13015             lex_state = EXPR_BEG;
13016             pushback(c);
13017             if (c != -1 && ISDIGIT(c)) {
13018                 c = '+';
13019                 goto start_num;
13020             }
13021             return tUPLUS;
13022         }
13023         lex_state = EXPR_BEG;
13024         pushback(c);
13025         warn_balanced("+", "unary operator");
13026         return '+';
13027 
13028       case '-':
13029         c = nextc();
13030         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13031             lex_state = EXPR_ARG;
13032             if (c == '@') {
13033                 return tUMINUS;
13034             }
13035             pushback(c);
13036             return '-';
13037         }
13038         if (c == '=') {
13039             set_yylval_id('-');
13040             lex_state = EXPR_BEG;
13041             return tOP_ASGN;
13042         }
13043         if (c == '>') {
13044             lex_state = EXPR_ARG;
13045             return tLAMBDA;
13046         }
13047         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13048             lex_state = EXPR_BEG;
13049             pushback(c);
13050             if (c != -1 && ISDIGIT(c)) {
13051                 return tUMINUS_NUM;
13052             }
13053             return tUMINUS;
13054         }
13055         lex_state = EXPR_BEG;
13056         pushback(c);
13057         warn_balanced("-", "unary operator");
13058         return '-';
13059 
13060       case '.':
13061         lex_state = EXPR_BEG;
13062         if ((c = nextc()) == '.') {
13063             if ((c = nextc()) == '.') {
13064                 return tDOT3;
13065             }
13066             pushback(c);
13067             return tDOT2;
13068         }
13069         pushback(c);
13070         if (c != -1 && ISDIGIT(c)) {
13071             yyerror("no .<digit> floating literal anymore; put 0 before dot");
13072         }
13073         lex_state = EXPR_DOT;
13074         return '.';
13075 
13076       start_num:
13077       case '0': case '1': case '2': case '3': case '4':
13078       case '5': case '6': case '7': case '8': case '9':
13079         {
13080             int is_float, seen_point, seen_e, nondigit;
13081 
13082             is_float = seen_point = seen_e = nondigit = 0;
13083             lex_state = EXPR_END;
13084             newtok();
13085             if (c == '-' || c == '+') {
13086                 tokadd(c);
13087                 c = nextc();
13088             }
13089             if (c == '0') {
13090 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13091                 int start = toklen();
13092                 c = nextc();
13093                 if (c == 'x' || c == 'X') {
13094                     /* hexadecimal */
13095                     c = nextc();
13096                     if (c != -1 && ISXDIGIT(c)) {
13097                         do {
13098                             if (c == '_') {
13099                                 if (nondigit) break;
13100                                 nondigit = c;
13101                                 continue;
13102                             }
13103                             if (!ISXDIGIT(c)) break;
13104                             nondigit = 0;
13105                             tokadd(c);
13106                         } while ((c = nextc()) != -1);
13107                     }
13108                     pushback(c);
13109                     tokfix();
13110                     if (toklen() == start) {
13111                         no_digits();
13112                     }
13113                     else if (nondigit) goto trailing_uc;
13114                     set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13115                     return tINTEGER;
13116                 }
13117                 if (c == 'b' || c == 'B') {
13118                     /* binary */
13119                     c = nextc();
13120                     if (c == '0' || c == '1') {
13121                         do {
13122                             if (c == '_') {
13123                                 if (nondigit) break;
13124                                 nondigit = c;
13125                                 continue;
13126                             }
13127                             if (c != '0' && c != '1') break;
13128                             nondigit = 0;
13129                             tokadd(c);
13130                         } while ((c = nextc()) != -1);
13131                     }
13132                     pushback(c);
13133                     tokfix();
13134                     if (toklen() == start) {
13135                         no_digits();
13136                     }
13137                     else if (nondigit) goto trailing_uc;
13138                     set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13139                     return tINTEGER;
13140                 }
13141                 if (c == 'd' || c == 'D') {
13142                     /* decimal */
13143                     c = nextc();
13144                     if (c != -1 && ISDIGIT(c)) {
13145                         do {
13146                             if (c == '_') {
13147                                 if (nondigit) break;
13148                                 nondigit = c;
13149                                 continue;
13150                             }
13151                             if (!ISDIGIT(c)) break;
13152                             nondigit = 0;
13153                             tokadd(c);
13154                         } while ((c = nextc()) != -1);
13155                     }
13156                     pushback(c);
13157                     tokfix();
13158                     if (toklen() == start) {
13159                         no_digits();
13160                     }
13161                     else if (nondigit) goto trailing_uc;
13162                     set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13163                     return tINTEGER;
13164                 }
13165                 if (c == '_') {
13166                     /* 0_0 */
13167                     goto octal_number;
13168                 }
13169                 if (c == 'o' || c == 'O') {
13170                     /* prefixed octal */
13171                     c = nextc();
13172                     if (c == -1 || c == '_' || !ISDIGIT(c)) {
13173                         no_digits();
13174                     }
13175                 }
13176                 if (c >= '0' && c <= '7') {
13177                     /* octal */
13178                   octal_number:
13179                     do {
13180                         if (c == '_') {
13181                             if (nondigit) break;
13182                             nondigit = c;
13183                             continue;
13184                         }
13185                         if (c < '0' || c > '9') break;
13186                         if (c > '7') goto invalid_octal;
13187                         nondigit = 0;
13188                         tokadd(c);
13189                     } while ((c = nextc()) != -1);
13190                     if (toklen() > start) {
13191                         pushback(c);
13192                         tokfix();
13193                         if (nondigit) goto trailing_uc;
13194                         set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13195                         return tINTEGER;
13196                     }
13197                     if (nondigit) {
13198                         pushback(c);
13199                         goto trailing_uc;
13200                     }
13201                 }
13202                 if (c > '7' && c <= '9') {
13203                   invalid_octal:
13204                     yyerror("Invalid octal digit");
13205                 }
13206                 else if (c == '.' || c == 'e' || c == 'E') {
13207                     tokadd('0');
13208                 }
13209                 else {
13210                     pushback(c);
13211                     set_yylval_literal(INT2FIX(0));
13212                     return tINTEGER;
13213                 }
13214             }
13215 
13216             for (;;) {
13217                 switch (c) {
13218                   case '0': case '1': case '2': case '3': case '4':
13219                   case '5': case '6': case '7': case '8': case '9':
13220                     nondigit = 0;
13221                     tokadd(c);
13222                     break;
13223 
13224                   case '.':
13225                     if (nondigit) goto trailing_uc;
13226                     if (seen_point || seen_e) {
13227                         goto decode_num;
13228                     }
13229                     else {
13230                         int c0 = nextc();
13231                         if (c0 == -1 || !ISDIGIT(c0)) {
13232                             pushback(c0);
13233                             goto decode_num;
13234                         }
13235                         c = c0;
13236                     }
13237                     tokadd('.');
13238                     tokadd(c);
13239                     is_float++;
13240                     seen_point++;
13241                     nondigit = 0;
13242                     break;
13243 
13244                   case 'e':
13245                   case 'E':
13246                     if (nondigit) {
13247                         pushback(c);
13248                         c = nondigit;
13249                         goto decode_num;
13250                     }
13251                     if (seen_e) {
13252                         goto decode_num;
13253                     }
13254                     tokadd(c);
13255                     seen_e++;
13256                     is_float++;
13257                     nondigit = c;
13258                     c = nextc();
13259                     if (c != '-' && c != '+') continue;
13260                     tokadd(c);
13261                     nondigit = c;
13262                     break;
13263 
13264                   case '_':     /* `_' in number just ignored */
13265                     if (nondigit) goto decode_num;
13266                     nondigit = c;
13267                     break;
13268 
13269                   default:
13270                     goto decode_num;
13271                 }
13272                 c = nextc();
13273             }
13274 
13275           decode_num:
13276             pushback(c);
13277             if (nondigit) {
13278                 char tmp[30];
13279               trailing_uc:
13280                 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13281                 yyerror(tmp);
13282             }
13283             tokfix();
13284             if (is_float) {
13285                 double d = strtod(tok(), 0);
13286                 if (errno == ERANGE) {
13287                     rb_warningS("Float %s out of range", tok());
13288                     errno = 0;
13289                 }
13290                 set_yylval_literal(DBL2NUM(d));
13291                 return tFLOAT;
13292             }
13293             set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13294             return tINTEGER;
13295         }
13296 
13297       case ')':
13298       case ']':
13299         paren_nest--;
13300       case '}':
13301         COND_LEXPOP();
13302         CMDARG_LEXPOP();
13303         if (c == ')')
13304             lex_state = EXPR_ENDFN;
13305         else
13306             lex_state = EXPR_ENDARG;
13307         return c;
13308 
13309       case ':':
13310         c = nextc();
13311         if (c == ':') {
13312             if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13313                 lex_state = EXPR_BEG;
13314                 return tCOLON3;
13315             }
13316             lex_state = EXPR_DOT;
13317             return tCOLON2;
13318         }
13319         if (IS_END() || ISSPACE(c)) {
13320             pushback(c);
13321             warn_balanced(":", "symbol literal");
13322             lex_state = EXPR_BEG;
13323             return ':';
13324         }
13325         switch (c) {
13326           case '\'':
13327             lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13328             break;
13329           case '"':
13330             lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13331             break;
13332           default:
13333             pushback(c);
13334             break;
13335         }
13336         lex_state = EXPR_FNAME;
13337         return tSYMBEG;
13338 
13339       case '/':
13340         if (IS_BEG()) {
13341             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13342             return tREGEXP_BEG;
13343         }
13344         if ((c = nextc()) == '=') {
13345             set_yylval_id('/');
13346             lex_state = EXPR_BEG;
13347             return tOP_ASGN;
13348         }
13349         pushback(c);
13350         if (IS_SPCARG(c)) {
13351             arg_ambiguous();
13352             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13353             return tREGEXP_BEG;
13354         }
13355         switch (lex_state) {
13356           case EXPR_FNAME: case EXPR_DOT:
13357             lex_state = EXPR_ARG; break;
13358           default:
13359             lex_state = EXPR_BEG; break;
13360         }
13361         warn_balanced("/", "regexp literal");
13362         return '/';
13363 
13364       case '^':
13365         if ((c = nextc()) == '=') {
13366             set_yylval_id('^');
13367             lex_state = EXPR_BEG;
13368             return tOP_ASGN;
13369         }
13370         switch (lex_state) {
13371           case EXPR_FNAME: case EXPR_DOT:
13372             lex_state = EXPR_ARG; break;
13373           default:
13374             lex_state = EXPR_BEG; break;
13375         }
13376         pushback(c);
13377         return '^';
13378 
13379       case ';':
13380         lex_state = EXPR_BEG;
13381         command_start = TRUE;
13382         return ';';
13383 
13384       case ',':
13385         lex_state = EXPR_BEG;
13386         return ',';
13387 
13388       case '~':
13389         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13390             if ((c = nextc()) != '@') {
13391                 pushback(c);
13392             }
13393             lex_state = EXPR_ARG;
13394         }
13395         else {
13396             lex_state = EXPR_BEG;
13397         }
13398         return '~';
13399 
13400       case '(':
13401         if (IS_BEG()) {
13402             c = tLPAREN;
13403         }
13404         else if (IS_SPCARG(-1)) {
13405             c = tLPAREN_ARG;
13406         }
13407         paren_nest++;
13408         COND_PUSH(0);
13409         CMDARG_PUSH(0);
13410         lex_state = EXPR_BEG;
13411         return c;
13412 
13413       case '[':
13414         paren_nest++;
13415         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13416             lex_state = EXPR_ARG;
13417             if ((c = nextc()) == ']') {
13418                 if ((c = nextc()) == '=') {
13419                     return tASET;
13420                 }
13421                 pushback(c);
13422                 return tAREF;
13423             }
13424             pushback(c);
13425             return '[';
13426         }
13427         else if (IS_BEG()) {
13428             c = tLBRACK;
13429         }
13430         else if (IS_ARG() && space_seen) {
13431             c = tLBRACK;
13432         }
13433         lex_state = EXPR_BEG;
13434         COND_PUSH(0);
13435         CMDARG_PUSH(0);
13436         return c;
13437 
13438       case '{':
13439         if (lpar_beg && lpar_beg == paren_nest) {
13440             lex_state = EXPR_BEG;
13441             lpar_beg = 0;
13442             --paren_nest;
13443             COND_PUSH(0);
13444             CMDARG_PUSH(0);
13445             return tLAMBEG;
13446         }
13447         if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13448             c = '{';          /* block (primary) */
13449         else if (lex_state == EXPR_ENDARG)
13450             c = tLBRACE_ARG;  /* block (expr) */
13451         else
13452             c = tLBRACE;      /* hash */
13453         COND_PUSH(0);
13454         CMDARG_PUSH(0);
13455         lex_state = EXPR_BEG;
13456         if (c != tLBRACE) command_start = TRUE;
13457         return c;
13458 
13459       case '\\':
13460         c = nextc();
13461         if (c == '\n') {
13462             space_seen = 1;
13463 #ifdef RIPPER
13464             ripper_dispatch_scan_event(parser, tSP);
13465 #endif
13466             goto retry; /* skip \\n */
13467         }
13468         pushback(c);
13469         return '\\';
13470 
13471       case '%':
13472         if (IS_BEG()) {
13473             int term;
13474             int paren;
13475 
13476             c = nextc();
13477           quotation:
13478             if (c == -1 || !ISALNUM(c)) {
13479                 term = c;
13480                 c = 'Q';
13481             }
13482             else {
13483                 term = nextc();
13484                 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13485                     yyerror("unknown type of %string");
13486                     return 0;
13487                 }
13488             }
13489             if (c == -1 || term == -1) {
13490                 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13491                 return 0;
13492             }
13493             paren = term;
13494             if (term == '(') term = ')';
13495             else if (term == '[') term = ']';
13496             else if (term == '{') term = '}';
13497             else if (term == '<') term = '>';
13498             else paren = 0;
13499 
13500             switch (c) {
13501               case 'Q':
13502                 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13503                 return tSTRING_BEG;
13504 
13505               case 'q':
13506                 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13507                 return tSTRING_BEG;
13508 
13509               case 'W':
13510                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13511                 do {c = nextc();} while (ISSPACE(c));
13512                 pushback(c);
13513                 return tWORDS_BEG;
13514 
13515               case 'w':
13516                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13517                 do {c = nextc();} while (ISSPACE(c));
13518                 pushback(c);
13519                 return tQWORDS_BEG;
13520 
13521               case 'x':
13522                 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13523                 return tXSTRING_BEG;
13524 
13525               case 'r':
13526                 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13527                 return tREGEXP_BEG;
13528 
13529               case 's':
13530                 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13531                 lex_state = EXPR_FNAME;
13532                 return tSYMBEG;
13533 
13534               default:
13535                 yyerror("unknown type of %string");
13536                 return 0;
13537             }
13538         }
13539         if ((c = nextc()) == '=') {
13540             set_yylval_id('%');
13541             lex_state = EXPR_BEG;
13542             return tOP_ASGN;
13543         }
13544         if (IS_SPCARG(c)) {
13545             goto quotation;
13546         }
13547         switch (lex_state) {
13548           case EXPR_FNAME: case EXPR_DOT:
13549             lex_state = EXPR_ARG; break;
13550           default:
13551             lex_state = EXPR_BEG; break;
13552         }
13553         pushback(c);
13554         warn_balanced("%%", "string literal");
13555         return '%';
13556 
13557       case '$':
13558         lex_state = EXPR_END;
13559         newtok();
13560         c = nextc();
13561         switch (c) {
13562           case '_':             /* $_: last read line string */
13563             c = nextc();
13564             if (parser_is_identchar()) {
13565                 tokadd('$');
13566                 tokadd('_');
13567                 break;
13568             }
13569             pushback(c);
13570             c = '_';
13571             /* fall through */
13572           case '~':             /* $~: match-data */
13573           case '*':             /* $*: argv */
13574           case '$':             /* $$: pid */
13575           case '?':             /* $?: last status */
13576           case '!':             /* $!: error string */
13577           case '@':             /* $@: error position */
13578           case '/':             /* $/: input record separator */
13579           case '\\':            /* $\: output record separator */
13580           case ';':             /* $;: field separator */
13581           case ',':             /* $,: output field separator */
13582           case '.':             /* $.: last read line number */
13583           case '=':             /* $=: ignorecase */
13584           case ':':             /* $:: load path */
13585           case '<':             /* $<: reading filename */
13586           case '>':             /* $>: default output handle */
13587           case '\"':            /* $": already loaded files */
13588             tokadd('$');
13589             tokadd(c);
13590             tokfix();
13591             set_yylval_name(rb_intern(tok()));
13592             return tGVAR;
13593 
13594           case '-':
13595             tokadd('$');
13596             tokadd(c);
13597             c = nextc();
13598             if (parser_is_identchar()) {
13599                 if (tokadd_mbchar(c) == -1) return 0;
13600             }
13601             else {
13602                 pushback(c);
13603             }
13604           gvar:
13605             tokfix();
13606             set_yylval_name(rb_intern(tok()));
13607             return tGVAR;
13608 
13609           case '&':             /* $&: last match */
13610           case '`':             /* $`: string before last match */
13611           case '\'':            /* $': string after last match */
13612           case '+':             /* $+: string matches last paren. */
13613             if (last_state == EXPR_FNAME) {
13614                 tokadd('$');
13615                 tokadd(c);
13616                 goto gvar;
13617             }
13618             set_yylval_node(NEW_BACK_REF(c));
13619             return tBACK_REF;
13620 
13621           case '1': case '2': case '3':
13622           case '4': case '5': case '6':
13623           case '7': case '8': case '9':
13624             tokadd('$');
13625             do {
13626                 tokadd(c);
13627                 c = nextc();
13628             } while (c != -1 && ISDIGIT(c));
13629             pushback(c);
13630             if (last_state == EXPR_FNAME) goto gvar;
13631             tokfix();
13632             set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13633             return tNTH_REF;
13634 
13635           default:
13636             if (!parser_is_identchar()) {
13637                 pushback(c);
13638                 return '$';
13639             }
13640           case '0':
13641             tokadd('$');
13642         }
13643         break;
13644 
13645       case '@':
13646         c = nextc();
13647         newtok();
13648         tokadd('@');
13649         if (c == '@') {
13650             tokadd('@');
13651             c = nextc();
13652         }
13653         if (c != -1 && ISDIGIT(c)) {
13654             if (tokidx == 1) {
13655                 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13656             }
13657             else {
13658                 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13659             }
13660             return 0;
13661         }
13662         if (!parser_is_identchar()) {
13663             pushback(c);
13664             return '@';
13665         }
13666         break;
13667 
13668       case '_':
13669         if (was_bol() && whole_match_p("__END__", 7, 0)) {
13670             ruby__end__seen = 1;
13671             parser->eofp = Qtrue;
13672 #ifndef RIPPER
13673             return -1;
13674 #else
13675             lex_goto_eol(parser);
13676             ripper_dispatch_scan_event(parser, k__END__);
13677             return 0;
13678 #endif
13679         }
13680         newtok();
13681         break;
13682 
13683       default:
13684         if (!parser_is_identchar()) {
13685             rb_compile_error(PARSER_ARG  "Invalid char `\\x%02X' in expression", c);
13686             goto retry;
13687         }
13688 
13689         newtok();
13690         break;
13691     }
13692 
13693     mb = ENC_CODERANGE_7BIT;
13694     do {
13695         if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13696         if (tokadd_mbchar(c) == -1) return 0;
13697         c = nextc();
13698     } while (parser_is_identchar());
13699     switch (tok()[0]) {
13700       case '@': case '$':
13701         pushback(c);
13702         break;
13703       default:
13704         if ((c == '!' || c == '?') && !peek('=')) {
13705             tokadd(c);
13706         }
13707         else {
13708             pushback(c);
13709         }
13710     }
13711     tokfix();
13712 
13713     {
13714         int result = 0;
13715 
13716         last_state = lex_state;
13717         switch (tok()[0]) {
13718           case '$':
13719             lex_state = EXPR_END;
13720             result = tGVAR;
13721             break;
13722           case '@':
13723             lex_state = EXPR_END;
13724             if (tok()[1] == '@')
13725                 result = tCVAR;
13726             else
13727                 result = tIVAR;
13728             break;
13729 
13730           default:
13731             if (toklast() == '!' || toklast() == '?') {
13732                 result = tFID;
13733             }
13734             else {
13735                 if (lex_state == EXPR_FNAME) {
13736                     if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13737                         (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
13738                         result = tIDENTIFIER;
13739                         tokadd(c);
13740                         tokfix();
13741                     }
13742                     else {
13743                         pushback(c);
13744                     }
13745                 }
13746                 if (result == 0 && ISUPPER(tok()[0])) {
13747                     result = tCONSTANT;
13748                 }
13749                 else {
13750                     result = tIDENTIFIER;
13751                 }
13752             }
13753 
13754             if ((lex_state == EXPR_BEG && !cmd_state) ||
13755                 IS_ARG()) {
13756                 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
13757                     lex_state = EXPR_BEG;
13758                     nextc();
13759                     set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13760                     return tLABEL;
13761                 }
13762             }
13763             if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13764                 const struct kwtable *kw;
13765 
13766                 /* See if it is a reserved word.  */
13767                 kw = rb_reserved_word(tok(), toklen());
13768                 if (kw) {
13769                     enum lex_state_e state = lex_state;
13770                     lex_state = kw->state;
13771                     if (state == EXPR_FNAME) {
13772                         set_yylval_name(rb_intern(kw->name));
13773                         return kw->id[0];
13774                     }
13775                     if (kw->id[0] == keyword_do) {
13776                         command_start = TRUE;
13777                         if (lpar_beg && lpar_beg == paren_nest) {
13778                             lpar_beg = 0;
13779                             --paren_nest;
13780                             return keyword_do_LAMBDA;
13781                         }
13782                         if (COND_P()) return keyword_do_cond;
13783                         if (CMDARG_P() && state != EXPR_CMDARG)
13784                             return keyword_do_block;
13785                         if (state == EXPR_ENDARG || state == EXPR_BEG)
13786                             return keyword_do_block;
13787                         return keyword_do;
13788                     }
13789                     if (state == EXPR_BEG || state == EXPR_VALUE)
13790                         return kw->id[0];
13791                     else {
13792                         if (kw->id[0] != kw->id[1])
13793                             lex_state = EXPR_BEG;
13794                         return kw->id[1];
13795                     }
13796                 }
13797             }
13798 
13799             if (IS_BEG() ||
13800                 lex_state == EXPR_DOT ||
13801                 IS_ARG()) {
13802                 if (cmd_state) {
13803                     lex_state = EXPR_CMDARG;
13804                 }
13805                 else {
13806                     lex_state = EXPR_ARG;
13807                 }
13808             }
13809             else if (lex_state == EXPR_FNAME) {
13810                 lex_state = EXPR_ENDFN;
13811             }
13812             else {
13813                 lex_state = EXPR_END;
13814             }
13815         }
13816         {
13817             ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13818 
13819             set_yylval_name(ident);
13820             if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
13821                 lex_state = EXPR_END;
13822             }
13823         }
13824         return result;
13825     }
13826 }
13827 
13828 #if YYPURE
13829 static int
13830 yylex(void *lval, void *p)
13831 #else
13832 yylex(void *p)
13833 #endif
13834 {
13835     struct parser_params *parser = (struct parser_params*)p;
13836     int t;
13837 
13838 #if YYPURE
13839     parser->parser_yylval = lval;
13840     parser->parser_yylval->val = Qundef;
13841 #endif
13842     t = parser_yylex(parser);
13843 #ifdef RIPPER
13844     if (!NIL_P(parser->delayed)) {
13845         ripper_dispatch_delayed_token(parser, t);
13846     }
13847     if (t != 0)
13848         ripper_dispatch_scan_event(parser, t);
13849 #endif
13850 
13851     return t;
13852 }
13853 
13854 #ifndef RIPPER
13855 static NODE*
13856 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13857 {
13858     NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13859     nd_set_line(n, ruby_sourceline);
13860     return n;
13861 }
13862 
13863 enum node_type
13864 nodetype(NODE *node)                    /* for debug */
13865 {
13866     return (enum node_type)nd_type(node);
13867 }
13868 
13869 int
13870 nodeline(NODE *node)
13871 {
13872     return nd_line(node);
13873 }
13874 
13875 static NODE*
13876 newline_node(NODE *node)
13877 {
13878     if (node) {
13879         node = remove_begin(node);
13880         node->flags |= NODE_FL_NEWLINE;
13881     }
13882     return node;
13883 }
13884 
13885 static void
13886 fixpos(NODE *node, NODE *orig)
13887 {
13888     if (!node) return;
13889     if (!orig) return;
13890     if (orig == (NODE*)1) return;
13891     nd_set_line(node, nd_line(orig));
13892 }
13893 
13894 static void
13895 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13896 {
13897     rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13898 }
13899 #define parser_warning(node, mesg) parser_warning(parser, node, mesg)
13900 
13901 static void
13902 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13903 {
13904     rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13905 }
13906 #define parser_warn(node, mesg) parser_warn(parser, node, mesg)
13907 
13908 static NODE*
13909 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13910 {
13911     NODE *end, *h = head, *nd;
13912 
13913     if (tail == 0) return head;
13914 
13915     if (h == 0) return tail;
13916     switch (nd_type(h)) {
13917       case NODE_LIT:
13918       case NODE_STR:
13919       case NODE_SELF:
13920       case NODE_TRUE:
13921       case NODE_FALSE:
13922       case NODE_NIL:
13923         parser_warning(h, "unused literal ignored");
13924         return tail;
13925       default:
13926         h = end = NEW_BLOCK(head);
13927         end->nd_end = end;
13928         fixpos(end, head);
13929         head = end;
13930         break;
13931       case NODE_BLOCK:
13932         end = h->nd_end;
13933         break;
13934     }
13935 
13936     nd = end->nd_head;
13937     switch (nd_type(nd)) {
13938       case NODE_RETURN:
13939       case NODE_BREAK:
13940       case NODE_NEXT:
13941       case NODE_REDO:
13942       case NODE_RETRY:
13943         if (RTEST(ruby_verbose)) {
13944             parser_warning(nd, "statement not reached");
13945         }
13946         break;
13947 
13948       default:
13949         break;
13950     }
13951 
13952     if (nd_type(tail) != NODE_BLOCK) {
13953         tail = NEW_BLOCK(tail);
13954         tail->nd_end = tail;
13955     }
13956     end->nd_next = tail;
13957     h->nd_end = tail->nd_end;
13958     return head;
13959 }
13960 
13961 /* append item to the list */
13962 static NODE*
13963 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
13964 {
13965     NODE *last;
13966 
13967     if (list == 0) return NEW_LIST(item);
13968     if (list->nd_next) {
13969         last = list->nd_next->nd_end;
13970     }
13971     else {
13972         last = list;
13973     }
13974 
13975     list->nd_alen += 1;
13976     last->nd_next = NEW_LIST(item);
13977     list->nd_next->nd_end = last->nd_next;
13978     return list;
13979 }
13980 
13981 /* concat two lists */
13982 static NODE*
13983 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
13984 {
13985     NODE *last;
13986 
13987     if (head->nd_next) {
13988         last = head->nd_next->nd_end;
13989     }
13990     else {
13991         last = head;
13992     }
13993 
13994     head->nd_alen += tail->nd_alen;
13995     last->nd_next = tail;
13996     if (tail->nd_next) {
13997         head->nd_next->nd_end = tail->nd_next->nd_end;
13998     }
13999     else {
14000         head->nd_next->nd_end = tail;
14001     }
14002 
14003     return head;
14004 }
14005 
14006 static int
14007 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14008 {
14009     if (NIL_P(tail)) return 1;
14010     if (!rb_enc_compatible(head, tail)) {
14011         compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14012                       rb_enc_name(rb_enc_get(head)),
14013                       rb_enc_name(rb_enc_get(tail)));
14014         rb_str_resize(head, 0);
14015         rb_str_resize(tail, 0);
14016         return 0;
14017     }
14018     rb_str_buf_append(head, tail);
14019     return 1;
14020 }
14021 
14022 /* concat two string literals */
14023 static NODE *
14024 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14025 {
14026     enum node_type htype;
14027 
14028     if (!head) return tail;
14029     if (!tail) return head;
14030 
14031     htype = nd_type(head);
14032     if (htype == NODE_EVSTR) {
14033         NODE *node = NEW_DSTR(Qnil);
14034         head = list_append(node, head);
14035     }
14036     switch (nd_type(tail)) {
14037       case NODE_STR:
14038         if (htype == NODE_STR) {
14039             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14040               error:
14041                 rb_gc_force_recycle((VALUE)head);
14042                 rb_gc_force_recycle((VALUE)tail);
14043                 return 0;
14044             }
14045             rb_gc_force_recycle((VALUE)tail);
14046         }
14047         else {
14048             list_append(head, tail);
14049         }
14050         break;
14051 
14052       case NODE_DSTR:
14053         if (htype == NODE_STR) {
14054             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14055                 goto error;
14056             tail->nd_lit = head->nd_lit;
14057             rb_gc_force_recycle((VALUE)head);
14058             head = tail;
14059         }
14060         else if (NIL_P(tail->nd_lit)) {
14061             head->nd_alen += tail->nd_alen - 1;
14062             head->nd_next->nd_end->nd_next = tail->nd_next;
14063             head->nd_next->nd_end = tail->nd_next->nd_end;
14064             rb_gc_force_recycle((VALUE)tail);
14065         }
14066         else {
14067             nd_set_type(tail, NODE_ARRAY);
14068             tail->nd_head = NEW_STR(tail->nd_lit);
14069             list_concat(head, tail);
14070         }
14071         break;
14072 
14073       case NODE_EVSTR:
14074         if (htype == NODE_STR) {
14075             nd_set_type(head, NODE_DSTR);
14076             head->nd_alen = 1;
14077         }
14078         list_append(head, tail);
14079         break;
14080     }
14081     return head;
14082 }
14083 
14084 static NODE *
14085 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14086 {
14087     if (nd_type(node) == NODE_EVSTR) {
14088         node = list_append(NEW_DSTR(Qnil), node);
14089     }
14090     return node;
14091 }
14092 
14093 static NODE *
14094 new_evstr_gen(struct parser_params *parser, NODE *node)
14095 {
14096     NODE *head = node;
14097 
14098     if (node) {
14099         switch (nd_type(node)) {
14100           case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14101             return node;
14102         }
14103     }
14104     return NEW_EVSTR(head);
14105 }
14106 
14107 static NODE *
14108 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14109 {
14110     value_expr(recv);
14111     value_expr(arg1);
14112     return NEW_CALL(recv, id, NEW_LIST(arg1));
14113 }
14114 
14115 static NODE *
14116 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14117 {
14118     value_expr(recv);
14119     return NEW_CALL(recv, id, 0);
14120 }
14121 
14122 static NODE*
14123 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14124 {
14125     value_expr(node1);
14126     value_expr(node2);
14127     if (node1) {
14128         switch (nd_type(node1)) {
14129           case NODE_DREGX:
14130           case NODE_DREGX_ONCE:
14131             return NEW_MATCH2(node1, node2);
14132 
14133           case NODE_LIT:
14134             if (TYPE(node1->nd_lit) == T_REGEXP) {
14135                 return NEW_MATCH2(node1, node2);
14136             }
14137         }
14138     }
14139 
14140     if (node2) {
14141         switch (nd_type(node2)) {
14142           case NODE_DREGX:
14143           case NODE_DREGX_ONCE:
14144             return NEW_MATCH3(node2, node1);
14145 
14146           case NODE_LIT:
14147             if (TYPE(node2->nd_lit) == T_REGEXP) {
14148                 return NEW_MATCH3(node2, node1);
14149             }
14150         }
14151     }
14152 
14153     return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14154 }
14155 
14156 static NODE*
14157 gettable_gen(struct parser_params *parser, ID id)
14158 {
14159     if (id == keyword_self) {
14160         return NEW_SELF();
14161     }
14162     else if (id == keyword_nil) {
14163         return NEW_NIL();
14164     }
14165     else if (id == keyword_true) {
14166         return NEW_TRUE();
14167     }
14168     else if (id == keyword_false) {
14169         return NEW_FALSE();
14170     }
14171     else if (id == keyword__FILE__) {
14172         return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14173                                                     rb_filesystem_encoding()));
14174     }
14175     else if (id == keyword__LINE__) {
14176         return NEW_LIT(INT2FIX(ruby_sourceline));
14177     }
14178     else if (id == keyword__ENCODING__) {
14179         return NEW_LIT(rb_enc_from_encoding(parser->enc));
14180     }
14181     else if (is_local_id(id)) {
14182         if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14183         if (local_id(id)) return NEW_LVAR(id);
14184         /* method call without arguments */
14185         return NEW_VCALL(id);
14186     }
14187     else if (is_global_id(id)) {
14188         return NEW_GVAR(id);
14189     }
14190     else if (is_instance_id(id)) {
14191         return NEW_IVAR(id);
14192     }
14193     else if (is_const_id(id)) {
14194         return NEW_CONST(id);
14195     }
14196     else if (is_class_id(id)) {
14197         return NEW_CVAR(id);
14198     }
14199     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14200     return 0;
14201 }
14202 #endif /* !RIPPER */
14203 
14204 #ifdef RIPPER
14205 static VALUE
14206 assignable_gen(struct parser_params *parser, VALUE lhs)
14207 #else
14208 static NODE*
14209 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14210 #endif
14211 {
14212 #ifdef RIPPER
14213     ID id = get_id(lhs);
14214 # define assignable_result(x) get_value(lhs)
14215 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14216 #else
14217 # define assignable_result(x) x
14218 #endif
14219     if (!id) return assignable_result(0);
14220     if (id == keyword_self) {
14221         yyerror("Can't change the value of self");
14222     }
14223     else if (id == keyword_nil) {
14224         yyerror("Can't assign to nil");
14225     }
14226     else if (id == keyword_true) {
14227         yyerror("Can't assign to true");
14228     }
14229     else if (id == keyword_false) {
14230         yyerror("Can't assign to false");
14231     }
14232     else if (id == keyword__FILE__) {
14233         yyerror("Can't assign to __FILE__");
14234     }
14235     else if (id == keyword__LINE__) {
14236         yyerror("Can't assign to __LINE__");
14237     }
14238     else if (id == keyword__ENCODING__) {
14239         yyerror("Can't assign to __ENCODING__");
14240     }
14241     else if (is_local_id(id)) {
14242         if (dyna_in_block()) {
14243             if (dvar_curr(id)) {
14244                 return assignable_result(NEW_DASGN_CURR(id, val));
14245             }
14246             else if (dvar_defined(id)) {
14247                 return assignable_result(NEW_DASGN(id, val));
14248             }
14249             else if (local_id(id)) {
14250                 return assignable_result(NEW_LASGN(id, val));
14251             }
14252             else {
14253                 dyna_var(id);
14254                 return assignable_result(NEW_DASGN_CURR(id, val));
14255             }
14256         }
14257         else {
14258             if (!local_id(id)) {
14259                 local_var(id);
14260             }
14261             return assignable_result(NEW_LASGN(id, val));
14262         }
14263     }
14264     else if (is_global_id(id)) {
14265         return assignable_result(NEW_GASGN(id, val));
14266     }
14267     else if (is_instance_id(id)) {
14268         return assignable_result(NEW_IASGN(id, val));
14269     }
14270     else if (is_const_id(id)) {
14271         if (!in_def && !in_single)
14272             return assignable_result(NEW_CDECL(id, val, 0));
14273         yyerror("dynamic constant assignment");
14274     }
14275     else if (is_class_id(id)) {
14276         return assignable_result(NEW_CVASGN(id, val));
14277     }
14278     else {
14279         compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14280     }
14281     return assignable_result(0);
14282 #undef assignable_result
14283 #undef parser_yyerror
14284 }
14285 
14286 static ID
14287 shadowing_lvar_gen(struct parser_params *parser, ID name)
14288 {
14289     ID uscore;
14290 
14291     CONST_ID(uscore, "_");
14292     if (uscore == name) return name;
14293     if (dyna_in_block()) {
14294         if (dvar_curr(name)) {
14295             yyerror("duplicated argument name");
14296         }
14297         else if (dvar_defined(name) || local_id(name)) {
14298             rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14299             vtable_add(lvtbl->vars, name);
14300         }
14301     }
14302     else {
14303         if (local_id(name)) {
14304             yyerror("duplicated argument name");
14305         }
14306     }
14307     return name;
14308 }
14309 
14310 static void
14311 new_bv_gen(struct parser_params *parser, ID name)
14312 {
14313     if (!name) return;
14314     if (!is_local_id(name)) {
14315         compile_error(PARSER_ARG "invalid local variable - %s",
14316                       rb_id2name(name));
14317         return;
14318     }
14319     shadowing_lvar(name);
14320     dyna_var(name);
14321 }
14322 
14323 #ifndef RIPPER
14324 static NODE *
14325 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14326 {
14327     if (recv && nd_type(recv) == NODE_SELF)
14328         recv = (NODE *)1;
14329     return NEW_ATTRASGN(recv, tASET, idx);
14330 }
14331 
14332 static void
14333 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14334 {
14335     if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14336         compile_error(PARSER_ARG "both block arg and actual block given");
14337     }
14338 }
14339 
14340 ID
14341 rb_id_attrset(ID id)
14342 {
14343     id &= ~ID_SCOPE_MASK;
14344     id |= ID_ATTRSET;
14345     return id;
14346 }
14347 
14348 static NODE *
14349 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14350 {
14351     if (recv && nd_type(recv) == NODE_SELF)
14352         recv = (NODE *)1;
14353     return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14354 }
14355 
14356 static void
14357 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14358 {
14359     switch (nd_type(node)) {
14360       case NODE_NTH_REF:
14361         compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14362         break;
14363       case NODE_BACK_REF:
14364         compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14365         break;
14366     }
14367 }
14368 
14369 static NODE *
14370 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14371 {
14372     if (!node2) return node1;
14373     switch (nd_type(node1)) {
14374       case NODE_BLOCK_PASS:
14375         if (node1->nd_head)
14376             node1->nd_head = arg_concat(node1->nd_head, node2);
14377         else
14378             node1->nd_head = NEW_LIST(node2);
14379         return node1;
14380       case NODE_ARGSPUSH:
14381         if (nd_type(node2) != NODE_ARRAY) break;
14382         node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14383         nd_set_type(node1, NODE_ARGSCAT);
14384         return node1;
14385       case NODE_ARGSCAT:
14386         if (nd_type(node2) != NODE_ARRAY ||
14387             nd_type(node1->nd_body) != NODE_ARRAY) break;
14388         node1->nd_body = list_concat(node1->nd_body, node2);
14389         return node1;
14390     }
14391     return NEW_ARGSCAT(node1, node2);
14392 }
14393 
14394 static NODE *
14395 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14396 {
14397     if (!node1) return NEW_LIST(node2);
14398     switch (nd_type(node1))  {
14399       case NODE_ARRAY:
14400         return list_append(node1, node2);
14401       case NODE_BLOCK_PASS:
14402         node1->nd_head = arg_append(node1->nd_head, node2);
14403         return node1;
14404       case NODE_ARGSPUSH:
14405         node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14406         nd_set_type(node1, NODE_ARGSCAT);
14407         return node1;
14408     }
14409     return NEW_ARGSPUSH(node1, node2);
14410 }
14411 
14412 static NODE *
14413 splat_array(NODE* node)
14414 {
14415     if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14416     if (nd_type(node) == NODE_ARRAY) return node;
14417     return 0;
14418 }
14419 
14420 static NODE *
14421 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14422 {
14423     if (!lhs) return 0;
14424 
14425     switch (nd_type(lhs)) {
14426       case NODE_GASGN:
14427       case NODE_IASGN:
14428       case NODE_IASGN2:
14429       case NODE_LASGN:
14430       case NODE_DASGN:
14431       case NODE_DASGN_CURR:
14432       case NODE_MASGN:
14433       case NODE_CDECL:
14434       case NODE_CVASGN:
14435         lhs->nd_value = rhs;
14436         break;
14437 
14438       case NODE_ATTRASGN:
14439       case NODE_CALL:
14440         lhs->nd_args = arg_append(lhs->nd_args, rhs);
14441         break;
14442 
14443       default:
14444         /* should not happen */
14445         break;
14446     }
14447 
14448     return lhs;
14449 }
14450 
14451 static int
14452 value_expr_gen(struct parser_params *parser, NODE *node)
14453 {
14454     int cond = 0;
14455 
14456     if (!node) {
14457         rb_warning0("empty expression");
14458     }
14459     while (node) {
14460         switch (nd_type(node)) {
14461           case NODE_DEFN:
14462           case NODE_DEFS:
14463             parser_warning(node, "void value expression");
14464             return FALSE;
14465 
14466           case NODE_RETURN:
14467           case NODE_BREAK:
14468           case NODE_NEXT:
14469           case NODE_REDO:
14470           case NODE_RETRY:
14471             if (!cond) yyerror("void value expression");
14472             /* or "control never reach"? */
14473             return FALSE;
14474 
14475           case NODE_BLOCK:
14476             while (node->nd_next) {
14477                 node = node->nd_next;
14478             }
14479             node = node->nd_head;
14480             break;
14481 
14482           case NODE_BEGIN:
14483             node = node->nd_body;
14484             break;
14485 
14486           case NODE_IF:
14487             if (!node->nd_body) {
14488                 node = node->nd_else;
14489                 break;
14490             }
14491             else if (!node->nd_else) {
14492                 node = node->nd_body;
14493                 break;
14494             }
14495             if (!value_expr(node->nd_body)) return FALSE;
14496             node = node->nd_else;
14497             break;
14498 
14499           case NODE_AND:
14500           case NODE_OR:
14501             cond = 1;
14502             node = node->nd_2nd;
14503             break;
14504 
14505           default:
14506             return TRUE;
14507         }
14508     }
14509 
14510     return TRUE;
14511 }
14512 
14513 static void
14514 void_expr_gen(struct parser_params *parser, NODE *node)
14515 {
14516     const char *useless = 0;
14517 
14518     if (!RTEST(ruby_verbose)) return;
14519 
14520     if (!node) return;
14521     switch (nd_type(node)) {
14522       case NODE_CALL:
14523         switch (node->nd_mid) {
14524           case '+':
14525           case '-':
14526           case '*':
14527           case '/':
14528           case '%':
14529           case tPOW:
14530           case tUPLUS:
14531           case tUMINUS:
14532           case '|':
14533           case '^':
14534           case '&':
14535           case tCMP:
14536           case '>':
14537           case tGEQ:
14538           case '<':
14539           case tLEQ:
14540           case tEQ:
14541           case tNEQ:
14542             useless = rb_id2name(node->nd_mid);
14543             break;
14544         }
14545         break;
14546 
14547       case NODE_LVAR:
14548       case NODE_DVAR:
14549       case NODE_GVAR:
14550       case NODE_IVAR:
14551       case NODE_CVAR:
14552       case NODE_NTH_REF:
14553       case NODE_BACK_REF:
14554         useless = "a variable";
14555         break;
14556       case NODE_CONST:
14557         useless = "a constant";
14558         break;
14559       case NODE_LIT:
14560       case NODE_STR:
14561       case NODE_DSTR:
14562       case NODE_DREGX:
14563       case NODE_DREGX_ONCE:
14564         useless = "a literal";
14565         break;
14566       case NODE_COLON2:
14567       case NODE_COLON3:
14568         useless = "::";
14569         break;
14570       case NODE_DOT2:
14571         useless = "..";
14572         break;
14573       case NODE_DOT3:
14574         useless = "...";
14575         break;
14576       case NODE_SELF:
14577         useless = "self";
14578         break;
14579       case NODE_NIL:
14580         useless = "nil";
14581         break;
14582       case NODE_TRUE:
14583         useless = "true";
14584         break;
14585       case NODE_FALSE:
14586         useless = "false";
14587         break;
14588       case NODE_DEFINED:
14589         useless = "defined?";
14590         break;
14591     }
14592 
14593     if (useless) {
14594         int line = ruby_sourceline;
14595 
14596         ruby_sourceline = nd_line(node);
14597         rb_warnS("useless use of %s in void context", useless);
14598         ruby_sourceline = line;
14599     }
14600 }
14601 
14602 static void
14603 void_stmts_gen(struct parser_params *parser, NODE *node)
14604 {
14605     if (!RTEST(ruby_verbose)) return;
14606     if (!node) return;
14607     if (nd_type(node) != NODE_BLOCK) return;
14608 
14609     for (;;) {
14610         if (!node->nd_next) return;
14611         void_expr0(node->nd_head);
14612         node = node->nd_next;
14613     }
14614 }
14615 
14616 static NODE *
14617 remove_begin(NODE *node)
14618 {
14619     NODE **n = &node, *n1 = node;
14620     while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14621         *n = n1 = n1->nd_body;
14622     }
14623     return node;
14624 }
14625 
14626 static void
14627 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14628 {
14629     NODE *node = *body;
14630 
14631     if (!node) {
14632         *body = NEW_NIL();
14633         return;
14634     }
14635 #define subnodes(n1, n2) \
14636     ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14637      (!node->n2) ? (body = &node->n1, 1) : \
14638      (reduce_nodes(&node->n1), body = &node->n2, 1))
14639 
14640     while (node) {
14641         int newline = (int)(node->flags & NODE_FL_NEWLINE);
14642         switch (nd_type(node)) {
14643           end:
14644           case NODE_NIL:
14645             *body = 0;
14646             return;
14647           case NODE_RETURN:
14648             *body = node = node->nd_stts;
14649             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14650             continue;
14651           case NODE_BEGIN:
14652             *body = node = node->nd_body;
14653             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14654             continue;
14655           case NODE_BLOCK:
14656             body = &node->nd_end->nd_head;
14657             break;
14658           case NODE_IF:
14659             if (subnodes(nd_body, nd_else)) break;
14660             return;
14661           case NODE_CASE:
14662             body = &node->nd_body;
14663             break;
14664           case NODE_WHEN:
14665             if (!subnodes(nd_body, nd_next)) goto end;
14666             break;
14667           case NODE_ENSURE:
14668             if (!subnodes(nd_head, nd_resq)) goto end;
14669             break;
14670           case NODE_RESCUE:
14671             if (!subnodes(nd_head, nd_resq)) goto end;
14672             break;
14673           default:
14674             return;
14675         }
14676         node = *body;
14677         if (newline && node) node->flags |= NODE_FL_NEWLINE;
14678     }
14679 
14680 #undef subnodes
14681 }
14682 
14683 static int
14684 assign_in_cond(struct parser_params *parser, NODE *node)
14685 {
14686     switch (nd_type(node)) {
14687       case NODE_MASGN:
14688         yyerror("multiple assignment in conditional");
14689         return 1;
14690 
14691       case NODE_LASGN:
14692       case NODE_DASGN:
14693       case NODE_DASGN_CURR:
14694       case NODE_GASGN:
14695       case NODE_IASGN:
14696         break;
14697 
14698       default:
14699         return 0;
14700     }
14701 
14702     if (!node->nd_value) return 1;
14703     switch (nd_type(node->nd_value)) {
14704       case NODE_LIT:
14705       case NODE_STR:
14706       case NODE_NIL:
14707       case NODE_TRUE:
14708       case NODE_FALSE:
14709         /* reports always */
14710         parser_warn(node->nd_value, "found = in conditional, should be ==");
14711         return 1;
14712 
14713       case NODE_DSTR:
14714       case NODE_XSTR:
14715       case NODE_DXSTR:
14716       case NODE_EVSTR:
14717       case NODE_DREGX:
14718       default:
14719         break;
14720     }
14721     return 1;
14722 }
14723 
14724 static void
14725 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14726 {
14727     if (!e_option_supplied(parser)) parser_warn(node, str);
14728 }
14729 
14730 static void
14731 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14732 {
14733     if (!e_option_supplied(parser)) parser_warning(node, str);
14734 }
14735 
14736 static void
14737 fixup_nodes(NODE **rootnode)
14738 {
14739     NODE *node, *next, *head;
14740 
14741     for (node = *rootnode; node; node = next) {
14742         enum node_type type;
14743         VALUE val;
14744 
14745         next = node->nd_next;
14746         head = node->nd_head;
14747         rb_gc_force_recycle((VALUE)node);
14748         *rootnode = next;
14749         switch (type = nd_type(head)) {
14750           case NODE_DOT2:
14751           case NODE_DOT3:
14752             val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14753                                type == NODE_DOT3);
14754             rb_gc_force_recycle((VALUE)head->nd_beg);
14755             rb_gc_force_recycle((VALUE)head->nd_end);
14756             nd_set_type(head, NODE_LIT);
14757             head->nd_lit = val;
14758             break;
14759           default:
14760             break;
14761         }
14762     }
14763 }
14764 
14765 static NODE *cond0(struct parser_params*,NODE*);
14766 
14767 static NODE*
14768 range_op(struct parser_params *parser, NODE *node)
14769 {
14770     enum node_type type;
14771 
14772     if (node == 0) return 0;
14773 
14774     type = nd_type(node);
14775     value_expr(node);
14776     if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14777         warn_unless_e_option(parser, node, "integer literal in conditional range");
14778         return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14779     }
14780     return cond0(parser, node);
14781 }
14782 
14783 static int
14784 literal_node(NODE *node)
14785 {
14786     if (!node) return 1;        /* same as NODE_NIL */
14787     switch (nd_type(node)) {
14788       case NODE_LIT:
14789       case NODE_STR:
14790       case NODE_DSTR:
14791       case NODE_EVSTR:
14792       case NODE_DREGX:
14793       case NODE_DREGX_ONCE:
14794       case NODE_DSYM:
14795         return 2;
14796       case NODE_TRUE:
14797       case NODE_FALSE:
14798       case NODE_NIL:
14799         return 1;
14800     }
14801     return 0;
14802 }
14803 
14804 static NODE*
14805 cond0(struct parser_params *parser, NODE *node)
14806 {
14807     if (node == 0) return 0;
14808     assign_in_cond(parser, node);
14809 
14810     switch (nd_type(node)) {
14811       case NODE_DSTR:
14812       case NODE_EVSTR:
14813       case NODE_STR:
14814         rb_warn0("string literal in condition");
14815         break;
14816 
14817       case NODE_DREGX:
14818       case NODE_DREGX_ONCE:
14819         warning_unless_e_option(parser, node, "regex literal in condition");
14820         return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14821 
14822       case NODE_AND:
14823       case NODE_OR:
14824         node->nd_1st = cond0(parser, node->nd_1st);
14825         node->nd_2nd = cond0(parser, node->nd_2nd);
14826         break;
14827 
14828       case NODE_DOT2:
14829       case NODE_DOT3:
14830         node->nd_beg = range_op(parser, node->nd_beg);
14831         node->nd_end = range_op(parser, node->nd_end);
14832         if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14833         else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14834         if (!e_option_supplied(parser)) {
14835             int b = literal_node(node->nd_beg);
14836             int e = literal_node(node->nd_end);
14837             if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14838                 parser_warn(node, "range literal in condition");
14839             }
14840         }
14841         break;
14842 
14843       case NODE_DSYM:
14844         parser_warning(node, "literal in condition");
14845         break;
14846 
14847       case NODE_LIT:
14848         if (TYPE(node->nd_lit) == T_REGEXP) {
14849             warn_unless_e_option(parser, node, "regex literal in condition");
14850             nd_set_type(node, NODE_MATCH);
14851         }
14852         else {
14853             parser_warning(node, "literal in condition");
14854         }
14855       default:
14856         break;
14857     }
14858     return node;
14859 }
14860 
14861 static NODE*
14862 cond_gen(struct parser_params *parser, NODE *node)
14863 {
14864     if (node == 0) return 0;
14865     return cond0(parser, node);
14866 }
14867 
14868 static NODE*
14869 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14870 {
14871     value_expr(left);
14872     if (left && (enum node_type)nd_type(left) == type) {
14873         NODE *node = left, *second;
14874         while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14875             node = second;
14876         }
14877         node->nd_2nd = NEW_NODE(type, second, right, 0);
14878         return left;
14879     }
14880     return NEW_NODE(type, left, right, 0);
14881 }
14882 
14883 static void
14884 no_blockarg(struct parser_params *parser, NODE *node)
14885 {
14886     if (node && nd_type(node) == NODE_BLOCK_PASS) {
14887         compile_error(PARSER_ARG "block argument should not be given");
14888     }
14889 }
14890 
14891 static NODE *
14892 ret_args_gen(struct parser_params *parser, NODE *node)
14893 {
14894     if (node) {
14895         no_blockarg(parser, node);
14896         if (nd_type(node) == NODE_ARRAY) {
14897             if (node->nd_next == 0) {
14898                 node = node->nd_head;
14899             }
14900             else {
14901                 nd_set_type(node, NODE_VALUES);
14902             }
14903         }
14904     }
14905     return node;
14906 }
14907 
14908 static NODE *
14909 new_yield_gen(struct parser_params *parser, NODE *node)
14910 {
14911     long state = Qtrue;
14912 
14913     if (node) {
14914         no_blockarg(parser, node);
14915         if (node && nd_type(node) == NODE_SPLAT) {
14916             state = Qtrue;
14917         }
14918     }
14919     else {
14920         state = Qfalse;
14921     }
14922     return NEW_YIELD(node, state);
14923 }
14924 
14925 static NODE*
14926 negate_lit(NODE *node)
14927 {
14928     switch (TYPE(node->nd_lit)) {
14929       case T_FIXNUM:
14930         node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14931         break;
14932       case T_BIGNUM:
14933         node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14934         break;
14935       case T_FLOAT:
14936         RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14937         break;
14938       default:
14939         break;
14940     }
14941     return node;
14942 }
14943 
14944 static NODE *
14945 arg_blk_pass(NODE *node1, NODE *node2)
14946 {
14947     if (node2) {
14948         node2->nd_head = node1;
14949         return node2;
14950     }
14951     return node1;
14952 }
14953 
14954 static NODE*
14955 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
14956 {
14957     int saved_line = ruby_sourceline;
14958     NODE *node;
14959     NODE *i1, *i2 = 0;
14960 
14961     node = NEW_ARGS(m ? m->nd_plen : 0, o);
14962     i1 = m ? m->nd_next : 0;
14963     node->nd_next = NEW_ARGS_AUX(r, b);
14964 
14965     if (p) {
14966         i2 = p->nd_next;
14967         node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
14968     }
14969     else if (i1) {
14970         node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
14971     }
14972     if (i1 || i2) {
14973         node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
14974     }
14975     ruby_sourceline = saved_line;
14976     return node;
14977 }
14978 #endif /* !RIPPER */
14979 
14980 static void
14981 local_push_gen(struct parser_params *parser, int inherit_dvars)
14982 {
14983     struct local_vars *local;
14984 
14985     local = ALLOC(struct local_vars);
14986     local->prev = lvtbl;
14987     local->args = vtable_alloc(0);
14988     local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
14989     lvtbl = local;
14990 }
14991 
14992 static void
14993 local_pop_gen(struct parser_params *parser)
14994 {
14995     struct local_vars *local = lvtbl->prev;
14996     vtable_free(lvtbl->args);
14997     vtable_free(lvtbl->vars);
14998     xfree(lvtbl);
14999     lvtbl = local;
15000 }
15001 
15002 #ifndef RIPPER
15003 static ID*
15004 vtable_tblcpy(ID *buf, const struct vtable *src)
15005 {
15006     int i, cnt = vtable_size(src);
15007 
15008     if (cnt > 0) {
15009         buf[0] = cnt;
15010         for (i = 0; i < cnt; i++) {
15011             buf[i] = src->tbl[i];
15012         }
15013         return buf;
15014     }
15015     return 0;
15016 }
15017 
15018 static ID*
15019 local_tbl_gen(struct parser_params *parser)
15020 {
15021     int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15022     ID *buf;
15023 
15024     if (cnt <= 0) return 0;
15025     buf = ALLOC_N(ID, cnt + 1);
15026     vtable_tblcpy(buf+1, lvtbl->args);
15027     vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15028     buf[0] = cnt;
15029     return buf;
15030 }
15031 #endif
15032 
15033 static int
15034 arg_var_gen(struct parser_params *parser, ID id)
15035 {
15036     vtable_add(lvtbl->args, id);
15037     return vtable_size(lvtbl->args) - 1;
15038 }
15039 
15040 static int
15041 local_var_gen(struct parser_params *parser, ID id)
15042 {
15043     vtable_add(lvtbl->vars, id);
15044     return vtable_size(lvtbl->vars) - 1;
15045 }
15046 
15047 static int
15048 local_id_gen(struct parser_params *parser, ID id)
15049 {
15050     struct vtable *vars, *args;
15051 
15052     vars = lvtbl->vars;
15053     args = lvtbl->args;
15054 
15055     while (vars && POINTER_P(vars->prev)) {
15056         vars = vars->prev;
15057         args = args->prev;
15058     }
15059 
15060     if (vars && vars->prev == DVARS_INHERIT) {
15061         return rb_local_defined(id);
15062     }
15063     else {
15064         return (vtable_included(args, id) ||
15065                 vtable_included(vars, id));
15066     }
15067 }
15068 
15069 static const struct vtable *
15070 dyna_push_gen(struct parser_params *parser)
15071 {
15072     lvtbl->args = vtable_alloc(lvtbl->args);
15073     lvtbl->vars = vtable_alloc(lvtbl->vars);
15074     return lvtbl->args;
15075 }
15076 
15077 static void
15078 dyna_pop_1(struct parser_params *parser)
15079 {
15080     struct vtable *tmp;
15081 
15082     tmp = lvtbl->args;
15083     lvtbl->args = lvtbl->args->prev;
15084     vtable_free(tmp);
15085     tmp = lvtbl->vars;
15086     lvtbl->vars = lvtbl->vars->prev;
15087     vtable_free(tmp);
15088 }
15089 
15090 static void
15091 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15092 {
15093     while (lvtbl->args != lvargs) {
15094         dyna_pop_1(parser);
15095         if (!lvtbl->args) {
15096             struct local_vars *local = lvtbl->prev;
15097             xfree(lvtbl);
15098             lvtbl = local;
15099         }
15100     }
15101     dyna_pop_1(parser);
15102 }
15103 
15104 static int
15105 dyna_in_block_gen(struct parser_params *parser)
15106 {
15107     return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15108 }
15109 
15110 static int
15111 dvar_defined_gen(struct parser_params *parser, ID id)
15112 {
15113     struct vtable *vars, *args;
15114 
15115     args = lvtbl->args;
15116     vars = lvtbl->vars;
15117 
15118     while (POINTER_P(vars)) {
15119         if (vtable_included(args, id)) {
15120             return 1;
15121         }
15122         if (vtable_included(vars, id)) {
15123             return 1;
15124         }
15125         args = args->prev;
15126         vars = vars->prev;
15127     }
15128 
15129     if (vars == DVARS_INHERIT) {
15130         return rb_dvar_defined(id);
15131     }
15132 
15133     return 0;
15134 }
15135 
15136 static int
15137 dvar_curr_gen(struct parser_params *parser, ID id)
15138 {
15139     return (vtable_included(lvtbl->args, id) ||
15140             vtable_included(lvtbl->vars, id));
15141 }
15142 
15143 #ifndef RIPPER
15144 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
15145 VALUE rb_reg_check_preprocess(VALUE);
15146 
15147 static void
15148 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15149 {
15150     int c = RE_OPTION_ENCODING_IDX(options);
15151 
15152     if (c) {
15153         int opt, idx;
15154         rb_char_to_option_kcode(c, &opt, &idx);
15155         if (idx != ENCODING_GET(str) &&
15156             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15157             goto error;
15158         }
15159         ENCODING_SET(str, idx);
15160     }
15161     else if (RE_OPTION_ENCODING_NONE(options)) {
15162         if (!ENCODING_IS_ASCII8BIT(str) &&
15163             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15164             c = 'n';
15165             goto error;
15166         }
15167         rb_enc_associate(str, rb_ascii8bit_encoding());
15168     }
15169     else if (parser->enc == rb_usascii_encoding()) {
15170         if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15171             /* raise in re.c */
15172             rb_enc_associate(str, rb_usascii_encoding());
15173         }
15174         else {
15175             rb_enc_associate(str, rb_ascii8bit_encoding());
15176         }
15177     }
15178     return;
15179 
15180   error:
15181     compile_error(PARSER_ARG
15182         "regexp encoding option '%c' differs from source encoding '%s'",
15183         c, rb_enc_name(rb_enc_get(str)));
15184 }
15185 
15186 static int
15187 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15188 {
15189     VALUE err;
15190     reg_fragment_setenc(str, options);
15191     err = rb_reg_check_preprocess(str);
15192     if (err != Qnil) {
15193         err = rb_obj_as_string(err);
15194         compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15195         RB_GC_GUARD(err);
15196         return 0;
15197     }
15198     return 1;
15199 }
15200 
15201 typedef struct {
15202     struct parser_params* parser;
15203     rb_encoding *enc;
15204     NODE *succ_block;
15205     NODE *fail_block;
15206     int num;
15207 } reg_named_capture_assign_t;
15208 
15209 static int
15210 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15211           int back_num, int *back_refs, OnigRegex regex, void *arg0)
15212 {
15213     reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15214     struct parser_params* parser = arg->parser;
15215     rb_encoding *enc = arg->enc;
15216     long len = name_end - name;
15217     const char *s = (const char *)name;
15218     ID var;
15219 
15220     arg->num++;
15221 
15222     if (arg->succ_block == 0) {
15223         arg->succ_block = NEW_BEGIN(0);
15224         arg->fail_block = NEW_BEGIN(0);
15225     }
15226 
15227     if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15228         (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15229         !rb_enc_symname2_p(s, len, enc)) {
15230         return ST_CONTINUE;
15231     }
15232     var = rb_intern3(s, len, enc);
15233     if (dvar_defined(var) || local_id(var)) {
15234         rb_warningS("named capture conflicts a local variable - %s",
15235                     rb_id2name(var));
15236     }
15237     arg->succ_block = block_append(arg->succ_block,
15238         newline_node(node_assign(assignable(var,0),
15239             NEW_CALL(
15240               gettable(rb_intern("$~")),
15241               idAREF,
15242               NEW_LIST(NEW_LIT(ID2SYM(var))))
15243             )));
15244     arg->fail_block = block_append(arg->fail_block,
15245         newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15246     return ST_CONTINUE;
15247 }
15248 
15249 static NODE *
15250 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15251 {
15252     reg_named_capture_assign_t arg;
15253 
15254     arg.parser = parser;
15255     arg.enc = rb_enc_get(regexp);
15256     arg.succ_block = 0;
15257     arg.fail_block = 0;
15258     arg.num = 0;
15259     onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15260 
15261     if (arg.num == 0)
15262         return match;
15263 
15264     return
15265         block_append(
15266             newline_node(match),
15267             NEW_IF(gettable(rb_intern("$~")),
15268                 block_append(
15269                     newline_node(arg.succ_block),
15270                     newline_node(
15271                         NEW_CALL(
15272                           gettable(rb_intern("$~")),
15273                           rb_intern("begin"),
15274                           NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15275                 block_append(
15276                     newline_node(arg.fail_block),
15277                     newline_node(
15278                         NEW_LIT(Qnil)))));
15279 }
15280 
15281 static VALUE
15282 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15283 {
15284     VALUE re;
15285     VALUE err;
15286 
15287     reg_fragment_setenc(str, options);
15288     err = rb_errinfo();
15289     re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15290     if (NIL_P(re)) {
15291         ID mesg = rb_intern("mesg");
15292         VALUE m = rb_attr_get(rb_errinfo(), mesg);
15293         rb_set_errinfo(err);
15294         if (!NIL_P(err)) {
15295             rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15296         }
15297         else {
15298             compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15299         }
15300         return Qnil;
15301     }
15302     return re;
15303 }
15304 
15305 void
15306 rb_gc_mark_parser(void)
15307 {
15308 }
15309 
15310 NODE*
15311 rb_parser_append_print(VALUE vparser, NODE *node)
15312 {
15313     NODE *prelude = 0;
15314     NODE *scope = node;
15315     struct parser_params *parser;
15316 
15317     if (!node) return node;
15318 
15319     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15320 
15321     node = node->nd_body;
15322 
15323     if (nd_type(node) == NODE_PRELUDE) {
15324         prelude = node;
15325         node = node->nd_body;
15326     }
15327 
15328     node = block_append(node,
15329                         NEW_FCALL(rb_intern("print"),
15330                                   NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15331     if (prelude) {
15332         prelude->nd_body = node;
15333         scope->nd_body = prelude;
15334     }
15335     else {
15336         scope->nd_body = node;
15337     }
15338 
15339     return scope;
15340 }
15341 
15342 NODE *
15343 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15344 {
15345     NODE *prelude = 0;
15346     NODE *scope = node;
15347     struct parser_params *parser;
15348 
15349     if (!node) return node;
15350 
15351     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15352 
15353     node = node->nd_body;
15354 
15355     if (nd_type(node) == NODE_PRELUDE) {
15356         prelude = node;
15357         node = node->nd_body;
15358     }
15359     if (split) {
15360         node = block_append(NEW_GASGN(rb_intern("$F"),
15361                                       NEW_CALL(NEW_GVAR(rb_intern("$_")),
15362                                                rb_intern("split"), 0)),
15363                             node);
15364     }
15365     if (chop) {
15366         node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15367                                      rb_intern("chop!"), 0), node);
15368     }
15369 
15370     node = NEW_OPT_N(node);
15371 
15372     if (prelude) {
15373         prelude->nd_body = node;
15374         scope->nd_body = prelude;
15375     }
15376     else {
15377         scope->nd_body = node;
15378     }
15379 
15380     return scope;
15381 }
15382 
15383 static const struct {
15384     ID token;
15385     const char *name;
15386 } op_tbl[] = {
15387     {tDOT2,     ".."},
15388     {tDOT3,     "..."},
15389     {'+',       "+(binary)"},
15390     {'-',       "-(binary)"},
15391     {tPOW,      "**"},
15392     {tUPLUS,    "+@"},
15393     {tUMINUS,   "-@"},
15394     {tCMP,      "<=>"},
15395     {tGEQ,      ">="},
15396     {tLEQ,      "<="},
15397     {tEQ,       "=="},
15398     {tEQQ,      "==="},
15399     {tNEQ,      "!="},
15400     {tMATCH,    "=~"},
15401     {tNMATCH,   "!~"},
15402     {tAREF,     "[]"},
15403     {tASET,     "[]="},
15404     {tLSHFT,    "<<"},
15405     {tRSHFT,    ">>"},
15406     {tCOLON2,   "::"},
15407 };
15408 
15409 #define op_tbl_count numberof(op_tbl)
15410 
15411 #ifndef ENABLE_SELECTOR_NAMESPACE
15412 #define ENABLE_SELECTOR_NAMESPACE 0
15413 #endif
15414 
15415 static struct symbols {
15416     ID last_id;
15417     st_table *sym_id;
15418     st_table *id_str;
15419 #if ENABLE_SELECTOR_NAMESPACE
15420     st_table *ivar2_id;
15421     st_table *id_ivar2;
15422 #endif
15423     VALUE op_sym[tLAST_TOKEN];
15424 } global_symbols = {tLAST_ID};
15425 
15426 static const struct st_hash_type symhash = {
15427     rb_str_hash_cmp,
15428     rb_str_hash,
15429 };
15430 
15431 #if ENABLE_SELECTOR_NAMESPACE
15432 struct ivar2_key {
15433     ID id;
15434     VALUE klass;
15435 };
15436 
15437 static int
15438 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15439 {
15440     if (key1->id == key2->id && key1->klass == key2->klass) {
15441         return 0;
15442     }
15443     return 1;
15444 }
15445 
15446 static int
15447 ivar2_hash(struct ivar2_key *key)
15448 {
15449     return (key->id << 8) ^ (key->klass >> 2);
15450 }
15451 
15452 static const struct st_hash_type ivar2_hash_type = {
15453     ivar2_cmp,
15454     ivar2_hash,
15455 };
15456 #endif
15457 
15458 void
15459 Init_sym(void)
15460 {
15461     global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15462     global_symbols.id_str = st_init_numtable_with_size(1000);
15463 #if ENABLE_SELECTOR_NAMESPACE
15464     global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15465     global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15466 #endif
15467 
15468     Init_id();
15469 }
15470 
15471 void
15472 rb_gc_mark_symbols(void)
15473 {
15474     rb_mark_tbl(global_symbols.id_str);
15475     rb_gc_mark_locations(global_symbols.op_sym,
15476                          global_symbols.op_sym + tLAST_TOKEN);
15477 }
15478 #endif /* !RIPPER */
15479 
15480 static ID
15481 internal_id_gen(struct parser_params *parser)
15482 {
15483     ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15484     id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15485     return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15486 }
15487 
15488 #ifndef RIPPER
15489 static int
15490 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15491 {
15492     int mb = 0;
15493 
15494     if (m >= e) return 0;
15495     switch (*m) {
15496       case '~': case '*': case '$': case '?': case '!': case '@':
15497       case '/': case '\\': case ';': case ',': case '.': case '=':
15498       case ':': case '<': case '>': case '\"':
15499       case '&': case '`': case '\'': case '+':
15500       case '0':
15501         ++m;
15502         break;
15503       case '-':
15504         ++m;
15505         if (m < e && is_identchar(m, e, enc)) {
15506             if (!ISASCII(*m)) mb = 1;
15507             m += rb_enc_mbclen(m, e, enc);
15508         }
15509         break;
15510       default:
15511         if (!rb_enc_isdigit(*m, enc)) return 0;
15512         do {
15513             if (!ISASCII(*m)) mb = 1;
15514             ++m;
15515         } while (m < e && rb_enc_isdigit(*m, enc));
15516     }
15517     return m == e ? mb + 1 : 0;
15518 }
15519 
15520 int
15521 rb_symname_p(const char *name)
15522 {
15523     return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15524 }
15525 
15526 int
15527 rb_enc_symname_p(const char *name, rb_encoding *enc)
15528 {
15529     return rb_enc_symname2_p(name, strlen(name), enc);
15530 }
15531 
15532 int
15533 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15534 {
15535     const char *m = name;
15536     const char *e = m + len;
15537     int localid = FALSE;
15538 
15539     if (!m) return FALSE;
15540     switch (*m) {
15541       case '\0':
15542         return FALSE;
15543 
15544       case '$':
15545         if (is_special_global_name(++m, e, enc)) return TRUE;
15546         goto id;
15547 
15548       case '@':
15549         if (*++m == '@') ++m;
15550         goto id;
15551 
15552       case '<':
15553         switch (*++m) {
15554           case '<': ++m; break;
15555           case '=': if (*++m == '>') ++m; break;
15556           default: break;
15557         }
15558         break;
15559 
15560       case '>':
15561         switch (*++m) {
15562           case '>': case '=': ++m; break;
15563         }
15564         break;
15565 
15566       case '=':
15567         switch (*++m) {
15568           case '~': ++m; break;
15569           case '=': if (*++m == '=') ++m; break;
15570           default: return FALSE;
15571         }
15572         break;
15573 
15574       case '*':
15575         if (*++m == '*') ++m;
15576         break;
15577 
15578       case '+': case '-':
15579         if (*++m == '@') ++m;
15580         break;
15581 
15582       case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15583         ++m;
15584         break;
15585 
15586       case '[':
15587         if (*++m != ']') return FALSE;
15588         if (*++m == '=') ++m;
15589         break;
15590 
15591       case '!':
15592         switch (*++m) {
15593           case '\0': return TRUE;
15594           case '=': case '~': ++m; break;
15595           default: return FALSE;
15596         }
15597         break;
15598 
15599       default:
15600         localid = !rb_enc_isupper(*m, enc);
15601       id:
15602         if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15603             return FALSE;
15604         while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15605         if (localid) {
15606             switch (*m) {
15607               case '!': case '?': case '=': ++m;
15608             }
15609         }
15610         break;
15611     }
15612     return m == e;
15613 }
15614 
15615 static ID
15616 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15617 {
15618     VALUE str = rb_enc_str_new(name, len, enc);
15619     OBJ_FREEZE(str);
15620     st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15621     st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15622     return id;
15623 }
15624 
15625 ID
15626 rb_intern3(const char *name, long len, rb_encoding *enc)
15627 {
15628     const char *m = name;
15629     const char *e = m + len;
15630     unsigned char c;
15631     VALUE str;
15632     ID id;
15633     long last;
15634     int mb;
15635     st_data_t data;
15636     struct RString fake_str;
15637     fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
15638     fake_str.basic.klass = rb_cString;
15639     fake_str.as.heap.len = len;
15640     fake_str.as.heap.ptr = (char *)name;
15641     fake_str.as.heap.aux.capa = len;
15642     str = (VALUE)&fake_str;
15643     rb_enc_associate(str, enc);
15644 
15645     if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15646         rb_raise(rb_eEncodingError, "invalid encoding symbol");
15647     }
15648 
15649     if (st_lookup(global_symbols.sym_id, str, &data))
15650         return (ID)data;
15651 
15652     if (rb_cString && !rb_enc_asciicompat(enc)) {
15653         id = ID_JUNK;
15654         goto new_id;
15655     }
15656     last = len-1;
15657     id = 0;
15658     switch (*m) {
15659       case '$':
15660         id |= ID_GLOBAL;
15661         if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15662             if (!--mb) enc = rb_ascii8bit_encoding();
15663             goto new_id;
15664         }
15665         break;
15666       case '@':
15667         if (m[1] == '@') {
15668             m++;
15669             id |= ID_CLASS;
15670         }
15671         else {
15672             id |= ID_INSTANCE;
15673         }
15674         m++;
15675         break;
15676       default:
15677         c = m[0];
15678         if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15679             /* operators */
15680             int i;
15681 
15682             if (len == 1) {
15683                 id = c;
15684                 goto id_register;
15685             }
15686             for (i = 0; i < op_tbl_count; i++) {
15687                 if (*op_tbl[i].name == *m &&
15688                     strcmp(op_tbl[i].name, m) == 0) {
15689                     id = op_tbl[i].token;
15690                     goto id_register;
15691                 }
15692             }
15693         }
15694 
15695         if (m[last] == '=') {
15696             /* attribute assignment */
15697             id = rb_intern3(name, last, enc);
15698             if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15699                 enc = rb_enc_get(rb_id2str(id));
15700                 id = rb_id_attrset(id);
15701                 goto id_register;
15702             }
15703             id = ID_ATTRSET;
15704         }
15705         else if (rb_enc_isupper(m[0], enc)) {
15706             id = ID_CONST;
15707         }
15708         else {
15709             id = ID_LOCAL;
15710         }
15711         break;
15712     }
15713     mb = 0;
15714     if (!rb_enc_isdigit(*m, enc)) {
15715         while (m <= name + last && is_identchar(m, e, enc)) {
15716             if (ISASCII(*m)) {
15717                 m++;
15718             }
15719             else {
15720                 mb = 1;
15721                 m += rb_enc_mbclen(m, e, enc);
15722             }
15723         }
15724     }
15725     if (m - name < len) id = ID_JUNK;
15726     if (enc != rb_usascii_encoding()) {
15727         /*
15728          * this clause makes sense only when called from other than
15729          * rb_intern_str() taking care of code-range.
15730          */
15731         if (!mb) {
15732             for (; m <= name + len; ++m) {
15733                 if (!ISASCII(*m)) goto mbstr;
15734             }
15735             enc = rb_usascii_encoding();
15736         }
15737       mbstr:;
15738     }
15739   new_id:
15740     if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15741         if (len > 20) {
15742             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15743                      name);
15744         }
15745         else {
15746             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15747                      (int)len, name);
15748         }
15749     }
15750     id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15751   id_register:
15752     return register_symid(id, name, len, enc);
15753 }
15754 
15755 ID
15756 rb_intern2(const char *name, long len)
15757 {
15758     return rb_intern3(name, len, rb_usascii_encoding());
15759 }
15760 
15761 #undef rb_intern
15762 ID
15763 rb_intern(const char *name)
15764 {
15765     return rb_intern2(name, strlen(name));
15766 }
15767 
15768 ID
15769 rb_intern_str(VALUE str)
15770 {
15771     rb_encoding *enc;
15772     ID id;
15773 
15774     if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15775         enc = rb_usascii_encoding();
15776     }
15777     else {
15778         enc = rb_enc_get(str);
15779     }
15780     id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15781     RB_GC_GUARD(str);
15782     return id;
15783 }
15784 
15785 VALUE
15786 rb_id2str(ID id)
15787 {
15788     st_data_t data;
15789 
15790     if (id < tLAST_TOKEN) {
15791         int i = 0;
15792 
15793         if (id < INT_MAX && rb_ispunct((int)id)) {
15794             VALUE str = global_symbols.op_sym[i = (int)id];
15795             if (!str) {
15796                 char name[2];
15797                 name[0] = (char)id;
15798                 name[1] = 0;
15799                 str = rb_usascii_str_new(name, 1);
15800                 OBJ_FREEZE(str);
15801                 global_symbols.op_sym[i] = str;
15802             }
15803             return str;
15804         }
15805         for (i = 0; i < op_tbl_count; i++) {
15806             if (op_tbl[i].token == id) {
15807                 VALUE str = global_symbols.op_sym[i];
15808                 if (!str) {
15809                     str = rb_usascii_str_new2(op_tbl[i].name);
15810                     OBJ_FREEZE(str);
15811                     global_symbols.op_sym[i] = str;
15812                 }
15813                 return str;
15814             }
15815         }
15816     }
15817 
15818     if (st_lookup(global_symbols.id_str, id, &data)) {
15819         VALUE str = (VALUE)data;
15820         if (RBASIC(str)->klass == 0)
15821             RBASIC(str)->klass = rb_cString;
15822         return str;
15823     }
15824 
15825     if (is_attrset_id(id)) {
15826         ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15827         VALUE str;
15828 
15829         while (!(str = rb_id2str(id2))) {
15830             if (!is_local_id(id2)) return 0;
15831             id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15832         }
15833         str = rb_str_dup(str);
15834         rb_str_cat(str, "=", 1);
15835         rb_intern_str(str);
15836         if (st_lookup(global_symbols.id_str, id, &data)) {
15837             VALUE str = (VALUE)data;
15838             if (RBASIC(str)->klass == 0)
15839                 RBASIC(str)->klass = rb_cString;
15840             return str;
15841         }
15842     }
15843     return 0;
15844 }
15845 
15846 const char *
15847 rb_id2name(ID id)
15848 {
15849     VALUE str = rb_id2str(id);
15850 
15851     if (!str) return 0;
15852     return RSTRING_PTR(str);
15853 }
15854 
15855 static int
15856 symbols_i(VALUE sym, ID value, VALUE ary)
15857 {
15858     rb_ary_push(ary, ID2SYM(value));
15859     return ST_CONTINUE;
15860 }
15861 
15862 /*
15863  *  call-seq:
15864  *     Symbol.all_symbols    => array
15865  *
15866  *  Returns an array of all the symbols currently in Ruby's symbol
15867  *  table.
15868  *
15869  *     Symbol.all_symbols.size    #=> 903
15870  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
15871  *                                     :chown, :EOFError, :$;, :String,
15872  *                                     :LOCK_SH, :"setuid?", :$<,
15873  *                                     :default_proc, :compact, :extend,
15874  *                                     :Tms, :getwd, :$=, :ThreadGroup,
15875  *                                     :wait2, :$>]
15876  */
15877 
15878 VALUE
15879 rb_sym_all_symbols(void)
15880 {
15881     VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15882 
15883     st_foreach(global_symbols.sym_id, symbols_i, ary);
15884     return ary;
15885 }
15886 
15887 int
15888 rb_is_const_id(ID id)
15889 {
15890     return is_const_id(id);
15891 }
15892 
15893 int
15894 rb_is_class_id(ID id)
15895 {
15896     return is_class_id(id);
15897 }
15898 
15899 int
15900 rb_is_instance_id(ID id)
15901 {
15902     return is_instance_id(id);
15903 }
15904 
15905 int
15906 rb_is_local_id(ID id)
15907 {
15908     return is_local_id(id);
15909 }
15910 
15911 int
15912 rb_is_junk_id(ID id)
15913 {
15914     return is_junk_id(id);
15915 }
15916 
15917 #endif /* !RIPPER */
15918 
15919 static void
15920 parser_initialize(struct parser_params *parser)
15921 {
15922     parser->eofp = Qfalse;
15923 
15924     parser->parser_lex_strterm = 0;
15925     parser->parser_cond_stack = 0;
15926     parser->parser_cmdarg_stack = 0;
15927     parser->parser_class_nest = 0;
15928     parser->parser_paren_nest = 0;
15929     parser->parser_lpar_beg = 0;
15930     parser->parser_in_single = 0;
15931     parser->parser_in_def = 0;
15932     parser->parser_in_defined = 0;
15933     parser->parser_compile_for_eval = 0;
15934     parser->parser_cur_mid = 0;
15935     parser->parser_tokenbuf = NULL;
15936     parser->parser_tokidx = 0;
15937     parser->parser_toksiz = 0;
15938     parser->parser_heredoc_end = 0;
15939     parser->parser_command_start = TRUE;
15940     parser->parser_deferred_nodes = 0;
15941     parser->parser_lex_pbeg = 0;
15942     parser->parser_lex_p = 0;
15943     parser->parser_lex_pend = 0;
15944     parser->parser_lvtbl = 0;
15945     parser->parser_ruby__end__seen = 0;
15946     parser->parser_ruby_sourcefile = 0;
15947 #ifndef RIPPER
15948     parser->is_ripper = 0;
15949     parser->parser_eval_tree_begin = 0;
15950     parser->parser_eval_tree = 0;
15951 #else
15952     parser->is_ripper = 1;
15953     parser->parser_ruby_sourcefile_string = Qnil;
15954     parser->delayed = Qnil;
15955 
15956     parser->result = Qnil;
15957     parser->parsing_thread = Qnil;
15958     parser->toplevel_p = TRUE;
15959 #endif
15960 #ifdef YYMALLOC
15961     parser->heap = NULL;
15962 #endif
15963     parser->enc = rb_usascii_encoding();
15964 }
15965 
15966 #ifdef RIPPER
15967 #define parser_mark ripper_parser_mark
15968 #define parser_free ripper_parser_free
15969 #endif
15970 
15971 static void
15972 parser_mark(void *ptr)
15973 {
15974     struct parser_params *p = (struct parser_params*)ptr;
15975 
15976     rb_gc_mark((VALUE)p->parser_lex_strterm);
15977     rb_gc_mark((VALUE)p->parser_deferred_nodes);
15978     rb_gc_mark(p->parser_lex_input);
15979     rb_gc_mark(p->parser_lex_lastline);
15980     rb_gc_mark(p->parser_lex_nextline);
15981 #ifndef RIPPER
15982     rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
15983     rb_gc_mark((VALUE)p->parser_eval_tree) ;
15984     rb_gc_mark(p->debug_lines);
15985 #else
15986     rb_gc_mark(p->parser_ruby_sourcefile_string);
15987     rb_gc_mark(p->delayed);
15988     rb_gc_mark(p->value);
15989     rb_gc_mark(p->result);
15990     rb_gc_mark(p->parsing_thread);
15991 #endif
15992 #ifdef YYMALLOC
15993     rb_gc_mark((VALUE)p->heap);
15994 #endif
15995 }
15996 
15997 static void
15998 parser_free(void *ptr)
15999 {
16000     struct parser_params *p = (struct parser_params*)ptr;
16001     struct local_vars *local, *prev;
16002 
16003     if (p->parser_tokenbuf) {
16004         xfree(p->parser_tokenbuf);
16005     }
16006     for (local = p->parser_lvtbl; local; local = prev) {
16007         if (local->vars) xfree(local->vars);
16008         prev = local->prev;
16009         xfree(local);
16010     }
16011 #ifndef RIPPER
16012     xfree(p->parser_ruby_sourcefile);
16013 #endif
16014     xfree(p);
16015 }
16016 
16017 static size_t
16018 parser_memsize(const void *ptr)
16019 {
16020     struct parser_params *p = (struct parser_params*)ptr;
16021     struct local_vars *local;
16022     size_t size = sizeof(*p);
16023 
16024     if (!ptr) return 0;
16025     size += p->parser_toksiz;
16026     for (local = p->parser_lvtbl; local; local = local->prev) {
16027         size += sizeof(*local);
16028         if (local->vars) size += local->vars->capa * sizeof(ID);
16029     }
16030 #ifndef RIPPER
16031     if (p->parser_ruby_sourcefile) {
16032         size += strlen(p->parser_ruby_sourcefile) + 1;
16033     }
16034 #endif
16035     return size;
16036 }
16037 
16038 static const rb_data_type_t parser_data_type = {
16039     "parser",
16040     parser_mark,
16041     parser_free,
16042     parser_memsize,
16043 };
16044 
16045 VALUE rb_parser_get_yydebug(VALUE);
16046 VALUE rb_parser_set_yydebug(VALUE, VALUE);
16047 
16048 #ifndef RIPPER
16049 #undef rb_reserved_word
16050 
16051 const struct kwtable *
16052 rb_reserved_word(const char *str, unsigned int len)
16053 {
16054     return reserved_word(str, len);
16055 }
16056 
16057 static struct parser_params *
16058 parser_new(void)
16059 {
16060     struct parser_params *p;
16061 
16062     p = ALLOC_N(struct parser_params, 1);
16063     MEMZERO(p, struct parser_params, 1);
16064     parser_initialize(p);
16065     return p;
16066 }
16067 
16068 VALUE
16069 rb_parser_new(void)
16070 {
16071     struct parser_params *p = parser_new();
16072 
16073     return TypedData_Wrap_Struct(0, &parser_data_type, p);
16074 }
16075 
16076 /*
16077  *  call-seq:
16078  *    ripper#end_seen?   -> Boolean
16079  *
16080  *  Return if parsed source ended by +\_\_END\_\_+.
16081  *  This number starts from 1.
16082  */
16083 VALUE
16084 rb_parser_end_seen_p(VALUE vparser)
16085 {
16086     struct parser_params *parser;
16087 
16088     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16089     return ruby__end__seen ? Qtrue : Qfalse;
16090 }
16091 
16092 /*
16093  *  call-seq:
16094  *    ripper#encoding   -> encoding
16095  *
16096  *  Return encoding of the source.
16097  */
16098 VALUE
16099 rb_parser_encoding(VALUE vparser)
16100 {
16101     struct parser_params *parser;
16102 
16103     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16104     return rb_enc_from_encoding(parser->enc);
16105 }
16106 
16107 /*
16108  *  call-seq:
16109  *    ripper.yydebug   -> true or false
16110  *
16111  *  Get yydebug.
16112  */
16113 VALUE
16114 rb_parser_get_yydebug(VALUE self)
16115 {
16116     struct parser_params *parser;
16117 
16118     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16119     return yydebug ? Qtrue : Qfalse;
16120 }
16121 
16122 /*
16123  *  call-seq:
16124  *    ripper.yydebug = flag
16125  *
16126  *  Set yydebug.
16127  */
16128 VALUE
16129 rb_parser_set_yydebug(VALUE self, VALUE flag)
16130 {
16131     struct parser_params *parser;
16132 
16133     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16134     yydebug = RTEST(flag);
16135     return flag;
16136 }
16137 
16138 #ifdef YYMALLOC
16139 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16140 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16141 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16142                            (n)->u3.cnt = (c), (p))
16143 
16144 void *
16145 rb_parser_malloc(struct parser_params *parser, size_t size)
16146 {
16147     size_t cnt = HEAPCNT(1, size);
16148     NODE *n = NEWHEAP();
16149     void *ptr = xmalloc(size);
16150 
16151     return ADD2HEAP(n, cnt, ptr);
16152 }
16153 
16154 void *
16155 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16156 {
16157     size_t cnt = HEAPCNT(nelem, size);
16158     NODE *n = NEWHEAP();
16159     void *ptr = xcalloc(nelem, size);
16160 
16161     return ADD2HEAP(n, cnt, ptr);
16162 }
16163 
16164 void *
16165 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16166 {
16167     NODE *n;
16168     size_t cnt = HEAPCNT(1, size);
16169 
16170     if (ptr && (n = parser->heap) != NULL) {
16171         do {
16172             if (n->u1.node == ptr) {
16173                 n->u1.node = ptr = xrealloc(ptr, size);
16174                 if (n->u3.cnt) n->u3.cnt = cnt;
16175                 return ptr;
16176             }
16177         } while ((n = n->u2.node) != NULL);
16178     }
16179     n = NEWHEAP();
16180     ptr = xrealloc(ptr, size);
16181     return ADD2HEAP(n, cnt, ptr);
16182 }
16183 
16184 void
16185 rb_parser_free(struct parser_params *parser, void *ptr)
16186 {
16187     NODE **prev = &parser->heap, *n;
16188 
16189     while ((n = *prev) != NULL) {
16190         if (n->u1.node == ptr) {
16191             *prev = n->u2.node;
16192             rb_gc_force_recycle((VALUE)n);
16193             break;
16194         }
16195         prev = &n->u2.node;
16196     }
16197     xfree(ptr);
16198 }
16199 #endif
16200 #endif
16201 
16202 #ifdef RIPPER
16203 #ifdef RIPPER_DEBUG
16204 extern int rb_is_pointer_to_heap(VALUE);
16205 
16206 /* :nodoc: */
16207 static VALUE
16208 ripper_validate_object(VALUE self, VALUE x)
16209 {
16210     if (x == Qfalse) return x;
16211     if (x == Qtrue) return x;
16212     if (x == Qnil) return x;
16213     if (x == Qundef)
16214         rb_raise(rb_eArgError, "Qundef given");
16215     if (FIXNUM_P(x)) return x;
16216     if (SYMBOL_P(x)) return x;
16217     if (!rb_is_pointer_to_heap(x))
16218         rb_raise(rb_eArgError, "invalid pointer: %p", x);
16219     switch (TYPE(x)) {
16220       case T_STRING:
16221       case T_OBJECT:
16222       case T_ARRAY:
16223       case T_BIGNUM:
16224       case T_FLOAT:
16225         return x;
16226       case T_NODE:
16227         if (nd_type(x) != NODE_LASGN) {
16228             rb_raise(rb_eArgError, "NODE given: %p", x);
16229         }
16230         return ((NODE *)x)->nd_rval;
16231       default:
16232         rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16233                  x, rb_obj_classname(x));
16234     }
16235     return x;
16236 }
16237 #endif
16238 
16239 #define validate(x) (x = get_value(x))
16240 
16241 static VALUE
16242 ripper_dispatch0(struct parser_params *parser, ID mid)
16243 {
16244     return rb_funcall(parser->value, mid, 0);
16245 }
16246 
16247 static VALUE
16248 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16249 {
16250     validate(a);
16251     return rb_funcall(parser->value, mid, 1, a);
16252 }
16253 
16254 static VALUE
16255 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16256 {
16257     validate(a);
16258     validate(b);
16259     return rb_funcall(parser->value, mid, 2, a, b);
16260 }
16261 
16262 static VALUE
16263 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16264 {
16265     validate(a);
16266     validate(b);
16267     validate(c);
16268     return rb_funcall(parser->value, mid, 3, a, b, c);
16269 }
16270 
16271 static VALUE
16272 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16273 {
16274     validate(a);
16275     validate(b);
16276     validate(c);
16277     validate(d);
16278     return rb_funcall(parser->value, mid, 4, a, b, c, d);
16279 }
16280 
16281 static VALUE
16282 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16283 {
16284     validate(a);
16285     validate(b);
16286     validate(c);
16287     validate(d);
16288     validate(e);
16289     return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16290 }
16291 
16292 static const struct kw_assoc {
16293     ID id;
16294     const char *name;
16295 } keyword_to_name[] = {
16296     {keyword_class,     "class"},
16297     {keyword_module,    "module"},
16298     {keyword_def,       "def"},
16299     {keyword_undef,     "undef"},
16300     {keyword_begin,     "begin"},
16301     {keyword_rescue,    "rescue"},
16302     {keyword_ensure,    "ensure"},
16303     {keyword_end,       "end"},
16304     {keyword_if,        "if"},
16305     {keyword_unless,    "unless"},
16306     {keyword_then,      "then"},
16307     {keyword_elsif,     "elsif"},
16308     {keyword_else,      "else"},
16309     {keyword_case,      "case"},
16310     {keyword_when,      "when"},
16311     {keyword_while,     "while"},
16312     {keyword_until,     "until"},
16313     {keyword_for,       "for"},
16314     {keyword_break,     "break"},
16315     {keyword_next,      "next"},
16316     {keyword_redo,      "redo"},
16317     {keyword_retry,     "retry"},
16318     {keyword_in,        "in"},
16319     {keyword_do,        "do"},
16320     {keyword_do_cond,   "do"},
16321     {keyword_do_block,  "do"},
16322     {keyword_return,    "return"},
16323     {keyword_yield,     "yield"},
16324     {keyword_super,     "super"},
16325     {keyword_self,      "self"},
16326     {keyword_nil,       "nil"},
16327     {keyword_true,      "true"},
16328     {keyword_false,     "false"},
16329     {keyword_and,       "and"},
16330     {keyword_or,        "or"},
16331     {keyword_not,       "not"},
16332     {modifier_if,       "if"},
16333     {modifier_unless,   "unless"},
16334     {modifier_while,    "while"},
16335     {modifier_until,    "until"},
16336     {modifier_rescue,   "rescue"},
16337     {keyword_alias,     "alias"},
16338     {keyword_defined,   "defined?"},
16339     {keyword_BEGIN,     "BEGIN"},
16340     {keyword_END,       "END"},
16341     {keyword__LINE__,   "__LINE__"},
16342     {keyword__FILE__,   "__FILE__"},
16343     {keyword__ENCODING__, "__ENCODING__"},
16344     {0, NULL}
16345 };
16346 
16347 static const char*
16348 keyword_id_to_str(ID id)
16349 {
16350     const struct kw_assoc *a;
16351 
16352     for (a = keyword_to_name; a->id; a++) {
16353         if (a->id == id)
16354             return a->name;
16355     }
16356     return NULL;
16357 }
16358 
16359 #undef ripper_id2sym
16360 static VALUE
16361 ripper_id2sym(ID id)
16362 {
16363     const char *name;
16364     char buf[8];
16365 
16366     if (id <= 256) {
16367         buf[0] = (char)id;
16368         buf[1] = '\0';
16369         return ID2SYM(rb_intern2(buf, 1));
16370     }
16371     if ((name = keyword_id_to_str(id))) {
16372         return ID2SYM(rb_intern(name));
16373     }
16374     switch (id) {
16375       case tOROP:
16376         name = "||";
16377         break;
16378       case tANDOP:
16379         name = "&&";
16380         break;
16381       default:
16382         name = rb_id2name(id);
16383         if (!name) {
16384             rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16385         }
16386         return ID2SYM(id);
16387     }
16388     return ID2SYM(rb_intern(name));
16389 }
16390 
16391 static ID
16392 ripper_get_id(VALUE v)
16393 {
16394     NODE *nd;
16395     if (!RB_TYPE_P(v, T_NODE)) return 0;
16396     nd = (NODE *)v;
16397     if (nd_type(nd) != NODE_LASGN) return 0;
16398     return nd->nd_vid;
16399 }
16400 
16401 static VALUE
16402 ripper_get_value(VALUE v)
16403 {
16404     NODE *nd;
16405     if (v == Qundef) return Qnil;
16406     if (!RB_TYPE_P(v, T_NODE)) return v;
16407     nd = (NODE *)v;
16408     if (nd_type(nd) != NODE_LASGN) return Qnil;
16409     return nd->nd_rval;
16410 }
16411 
16412 static void
16413 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16414 {
16415     VALUE str;
16416     va_list args;
16417 
16418     va_start(args, fmt);
16419     str = rb_vsprintf(fmt, args);
16420     va_end(args);
16421     rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16422 }
16423 
16424 static void
16425 ripper_warn0(struct parser_params *parser, const char *fmt)
16426 {
16427     rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16428 }
16429 
16430 static void
16431 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16432 {
16433     rb_funcall(parser->value, rb_intern("warn"), 2,
16434                STR_NEW2(fmt), INT2NUM(a));
16435 }
16436 
16437 #if 0
16438 static void
16439 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16440 {
16441     rb_funcall(parser->value, rb_intern("warn"), 2,
16442                STR_NEW2(fmt), STR_NEW2(str));
16443 }
16444 #endif
16445 
16446 static void
16447 ripper_warning0(struct parser_params *parser, const char *fmt)
16448 {
16449     rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16450 }
16451 
16452 static void
16453 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16454 {
16455     rb_funcall(parser->value, rb_intern("warning"), 2,
16456                STR_NEW2(fmt), STR_NEW2(str));
16457 }
16458 
16459 static VALUE
16460 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16461 {
16462     return rb_funcall(src, ripper_id_gets, 0);
16463 }
16464 
16465 static VALUE
16466 ripper_s_allocate(VALUE klass)
16467 {
16468     struct parser_params *p;
16469     VALUE self;
16470 
16471     p = ALLOC_N(struct parser_params, 1);
16472     MEMZERO(p, struct parser_params, 1);
16473     self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16474     p->value = self;
16475     return self;
16476 }
16477 
16478 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16479 
16480 /*
16481  *  call-seq:
16482  *    Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
16483  *
16484  *  Create a new Ripper object.
16485  *  _src_ must be a String, an IO, or an Object which has #gets method.
16486  *
16487  *  This method does not starts parsing.
16488  *  See also Ripper#parse and Ripper.parse.
16489  */
16490 static VALUE
16491 ripper_initialize(int argc, VALUE *argv, VALUE self)
16492 {
16493     struct parser_params *parser;
16494     VALUE src, fname, lineno;
16495 
16496     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16497     rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16498     if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16499         parser->parser_lex_gets = ripper_lex_get_generic;
16500     }
16501     else {
16502         StringValue(src);
16503         parser->parser_lex_gets = lex_get_str;
16504     }
16505     parser->parser_lex_input = src;
16506     parser->eofp = Qfalse;
16507     if (NIL_P(fname)) {
16508         fname = STR_NEW2("(ripper)");
16509     }
16510     else {
16511         StringValue(fname);
16512     }
16513     parser_initialize(parser);
16514 
16515     parser->parser_ruby_sourcefile_string = fname;
16516     parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16517     parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16518 
16519     return Qnil;
16520 }
16521 
16522 extern VALUE rb_thread_pass(void);
16523 
16524 struct ripper_args {
16525     struct parser_params *parser;
16526     int argc;
16527     VALUE *argv;
16528 };
16529 
16530 static VALUE
16531 ripper_parse0(VALUE parser_v)
16532 {
16533     struct parser_params *parser;
16534 
16535     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16536     parser_prepare(parser);
16537     ripper_yyparse((void*)parser);
16538     return parser->result;
16539 }
16540 
16541 static VALUE
16542 ripper_ensure(VALUE parser_v)
16543 {
16544     struct parser_params *parser;
16545 
16546     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16547     parser->parsing_thread = Qnil;
16548     return Qnil;
16549 }
16550 
16551 /*
16552  *  call-seq:
16553  *    ripper#parse
16554  *
16555  *  Start parsing and returns the value of the root action.
16556  */
16557 static VALUE
16558 ripper_parse(VALUE self)
16559 {
16560     struct parser_params *parser;
16561 
16562     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16563     if (!ripper_initialized_p(parser)) {
16564         rb_raise(rb_eArgError, "method called for uninitialized object");
16565     }
16566     if (!NIL_P(parser->parsing_thread)) {
16567         if (parser->parsing_thread == rb_thread_current())
16568             rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16569         else
16570             rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16571     }
16572     parser->parsing_thread = rb_thread_current();
16573     rb_ensure(ripper_parse0, self, ripper_ensure, self);
16574 
16575     return parser->result;
16576 }
16577 
16578 /*
16579  *  call-seq:
16580  *    ripper#column   -> Integer
16581  *
16582  *  Return column number of current parsing line.
16583  *  This number starts from 0.
16584  */
16585 static VALUE
16586 ripper_column(VALUE self)
16587 {
16588     struct parser_params *parser;
16589     long col;
16590 
16591     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16592     if (!ripper_initialized_p(parser)) {
16593         rb_raise(rb_eArgError, "method called for uninitialized object");
16594     }
16595     if (NIL_P(parser->parsing_thread)) return Qnil;
16596     col = parser->tokp - parser->parser_lex_pbeg;
16597     return LONG2NUM(col);
16598 }
16599 
16600 /*
16601  *  call-seq:
16602  *    ripper#filename   -> String
16603  *
16604  *  Return current parsing filename.
16605  */
16606 static VALUE
16607 ripper_filename(VALUE self)
16608 {
16609     struct parser_params *parser;
16610 
16611     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16612     if (!ripper_initialized_p(parser)) {
16613         rb_raise(rb_eArgError, "method called for uninitialized object");
16614     }
16615     return parser->parser_ruby_sourcefile_string;
16616 }
16617 
16618 /*
16619  *  call-seq:
16620  *    ripper#lineno   -> Integer
16621  *
16622  *  Return line number of current parsing line.
16623  *  This number starts from 1.
16624  */
16625 static VALUE
16626 ripper_lineno(VALUE self)
16627 {
16628     struct parser_params *parser;
16629 
16630     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16631     if (!ripper_initialized_p(parser)) {
16632         rb_raise(rb_eArgError, "method called for uninitialized object");
16633     }
16634     if (NIL_P(parser->parsing_thread)) return Qnil;
16635     return INT2NUM(parser->parser_ruby_sourceline);
16636 }
16637 
16638 #ifdef RIPPER_DEBUG
16639 /* :nodoc: */
16640 static VALUE
16641 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16642 {
16643     StringValue(msg);
16644     if (obj == Qundef) {
16645         rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16646     }
16647     return Qnil;
16648 }
16649 
16650 /* :nodoc: */
16651 static VALUE
16652 ripper_value(VALUE self, VALUE obj)
16653 {
16654     return ULONG2NUM(obj);
16655 }
16656 #endif
16657 
16658 void
16659 Init_ripper(void)
16660 {
16661     VALUE Ripper;
16662 
16663     Ripper = rb_define_class("Ripper", rb_cObject);
16664     rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16665     rb_define_alloc_func(Ripper, ripper_s_allocate);
16666     rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16667     rb_define_method(Ripper, "parse", ripper_parse, 0);
16668     rb_define_method(Ripper, "column", ripper_column, 0);
16669     rb_define_method(Ripper, "filename", ripper_filename, 0);
16670     rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16671     rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16672     rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16673     rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16674     rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16675 #ifdef RIPPER_DEBUG
16676     rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16677     rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16678     rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16679 #endif
16680 
16681     ripper_id_gets = rb_intern("gets");
16682     ripper_init_eventids1(Ripper);
16683     ripper_init_eventids2(Ripper);
16684     /* ensure existing in symbol table */
16685     rb_intern("||");
16686     rb_intern("&&");
16687 }
16688 #endif /* RIPPER */
16689 
16690