Ruby 1.9.2p136(2010-12-25revision30365)

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