• Main Page
  • Modules
  • Data Structures
  • Files
  • File List
  • Globals

parse.c

Go to the documentation of this file.
00001 /* A Bison parser, made by GNU Bison 2.4.3.  */
00002 
00003 /* Skeleton implementation for Bison's Yacc-like parsers in C
00004    
00005       Copyright (C) 1984, 1989, 1990, 2000, 2001, 2002, 2003, 2004, 2005, 2006,
00006    2009, 2010 Free Software Foundation, Inc.
00007    
00008    This program is free software: you can redistribute it and/or modify
00009    it under the terms of the GNU General Public License as published by
00010    the Free Software Foundation, either version 3 of the License, or
00011    (at your option) any later version.
00012    
00013    This program is distributed in the hope that it will be useful,
00014    but WITHOUT ANY WARRANTY; without even the implied warranty of
00015    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00016    GNU General Public License for more details.
00017    
00018    You should have received a copy of the GNU General Public License
00019    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00020 
00021 /* As a special exception, you may create a larger work that contains
00022    part or all of the Bison parser skeleton and distribute that work
00023    under terms of your choice, so long as that work isn't itself a
00024    parser generator using the skeleton or a modified version thereof
00025    as a parser skeleton.  Alternatively, if you modify or redistribute
00026    the parser skeleton itself, you may (at your option) remove this
00027    special exception, which will cause the skeleton and the resulting
00028    Bison output files to be licensed under the GNU General Public
00029    License without this special exception.
00030    
00031    This special exception was added by the Free Software Foundation in
00032    version 2.2 of Bison.  */
00033 
00034 /* C LALR(1) parser skeleton written by Richard Stallman, by
00035    simplifying the original so-called "semantic" parser.  */
00036 
00037 /* All symbols defined below should begin with yy or YY, to avoid
00038    infringing on user name space.  This should be done even for local
00039    variables, as they might otherwise be expanded by user macros.
00040    There are some unavoidable exceptions within include files to
00041    define necessary library symbols; they are noted "INFRINGES ON
00042    USER NAME SPACE" below.  */
00043 
00044 /* Identify Bison output.  */
00045 #define YYBISON 1
00046 
00047 /* Bison version.  */
00048 #define YYBISON_VERSION "2.4.3"
00049 
00050 /* Skeleton name.  */
00051 #define YYSKELETON_NAME "yacc.c"
00052 
00053 /* Pure parsers.  */
00054 #define YYPURE 1
00055 
00056 /* Push parsers.  */
00057 #define YYPUSH 0
00058 
00059 /* Pull parsers.  */
00060 #define YYPULL 1
00061 
00062 /* Using locations.  */
00063 #define YYLSP_NEEDED 0
00064 
00065 
00066 
00067 /* Copy the first part of user declarations.  */
00068 
00069 /* Line 189 of yacc.c  */
00070 #line 12 "parse.y"
00071 
00072 
00073 #define YYDEBUG 1
00074 #define YYERROR_VERBOSE 1
00075 #define YYSTACK_USE_ALLOCA 0
00076 
00077 #include "ruby/ruby.h"
00078 #include "ruby/st.h"
00079 #include "ruby/encoding.h"
00080 #include "node.h"
00081 #include "parse.h"
00082 #include "id.h"
00083 #include "regenc.h"
00084 #include <stdio.h>
00085 #include <errno.h>
00086 #include <ctype.h>
00087 
00088 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00089 
00090 #define YYMALLOC(size)          rb_parser_malloc(parser, size)
00091 #define YYREALLOC(ptr, size)    rb_parser_realloc(parser, ptr, size)
00092 #define YYCALLOC(nelem, size)   rb_parser_calloc(parser, nelem, size)
00093 #define YYFREE(ptr)             rb_parser_free(parser, ptr)
00094 #define malloc  YYMALLOC
00095 #define realloc YYREALLOC
00096 #define calloc  YYCALLOC
00097 #define free    YYFREE
00098 
00099 #ifndef RIPPER
00100 static ID register_symid(ID, const char *, long, rb_encoding *);
00101 #define REGISTER_SYMID(id, name) register_symid(id, name, strlen(name), enc)
00102 #include "id.c"
00103 #endif
00104 
00105 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00106 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00107 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00108 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00109 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00110 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00111 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00112 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00113 
00114 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00115         (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00116          ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00117          ((id)&ID_SCOPE_MASK) == ID_CLASS))
00118 
00119 enum lex_state_e {
00120     EXPR_BEG,                   /* ignore newline, +/- is a sign. */
00121     EXPR_END,                   /* newline significant, +/- is an operator. */
00122     EXPR_ENDARG,                /* ditto, and unbound braces. */
00123     EXPR_ENDFN,                 /* ditto, and unbound braces. */
00124     EXPR_ARG,                   /* newline significant, +/- is an operator. */
00125     EXPR_CMDARG,                /* newline significant, +/- is an operator. */
00126     EXPR_MID,                   /* newline significant, +/- is an operator. */
00127     EXPR_FNAME,                 /* ignore newline, no reserved words. */
00128     EXPR_DOT,                   /* right after `.' or `::', no reserved words. */
00129     EXPR_CLASS,                 /* immediate after `class', no here document. */
00130     EXPR_VALUE,                 /* alike EXPR_BEG but label is disallowed. */
00131     EXPR_MAX_STATE
00132 };
00133 
00134 typedef VALUE stack_type;
00135 
00136 # define BITSTACK_PUSH(stack, n)        (stack = (stack<<1)|((n)&1))
00137 # define BITSTACK_POP(stack)    (stack = stack >> 1)
00138 # define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1))
00139 # define BITSTACK_SET_P(stack)  (stack&1)
00140 
00141 #define COND_PUSH(n)    BITSTACK_PUSH(cond_stack, n)
00142 #define COND_POP()      BITSTACK_POP(cond_stack)
00143 #define COND_LEXPOP()   BITSTACK_LEXPOP(cond_stack)
00144 #define COND_P()        BITSTACK_SET_P(cond_stack)
00145 
00146 #define CMDARG_PUSH(n)  BITSTACK_PUSH(cmdarg_stack, n)
00147 #define CMDARG_POP()    BITSTACK_POP(cmdarg_stack)
00148 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00149 #define CMDARG_P()      BITSTACK_SET_P(cmdarg_stack)
00150 
00151 struct vtable {
00152     ID *tbl;
00153     int pos;
00154     int capa;
00155     struct vtable *prev;
00156 };
00157 
00158 struct local_vars {
00159     struct vtable *args;
00160     struct vtable *vars;
00161     struct local_vars *prev;
00162 };
00163 
00164 #define DVARS_INHERIT ((void*)1)
00165 #define DVARS_TOPSCOPE NULL
00166 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00167 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00168 
00169 static int
00170 vtable_size(const struct vtable *tbl)
00171 {
00172     if (POINTER_P(tbl)) {
00173         return tbl->pos;
00174     }
00175     else {
00176         return 0;
00177     }
00178 }
00179 
00180 #define VTBL_DEBUG 0
00181 
00182 static struct vtable *
00183 vtable_alloc(struct vtable *prev)
00184 {
00185     struct vtable *tbl = ALLOC(struct vtable);
00186     tbl->pos = 0;
00187     tbl->capa = 8;
00188     tbl->tbl = ALLOC_N(ID, tbl->capa);
00189     tbl->prev = prev;
00190     if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00191     return tbl;
00192 }
00193 
00194 static void
00195 vtable_free(struct vtable *tbl)
00196 {
00197     if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00198     if (POINTER_P(tbl)) {
00199         if (tbl->tbl) {
00200             xfree(tbl->tbl);
00201         }
00202         xfree(tbl);
00203     }
00204 }
00205 
00206 static void
00207 vtable_add(struct vtable *tbl, ID id)
00208 {
00209     if (!POINTER_P(tbl)) {
00210         rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00211     }
00212     if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00213 
00214     if (tbl->pos == tbl->capa) {
00215         tbl->capa = tbl->capa * 2;
00216         REALLOC_N(tbl->tbl, ID, tbl->capa);
00217     }
00218     tbl->tbl[tbl->pos++] = id;
00219 }
00220 
00221 static int
00222 vtable_included(const struct vtable * tbl, ID id)
00223 {
00224     int i;
00225 
00226     if (POINTER_P(tbl)) {
00227         for (i = 0; i < tbl->pos; i++) {
00228             if (tbl->tbl[i] == id) {
00229                 return 1;
00230             }
00231         }
00232     }
00233     return 0;
00234 }
00235 
00236 
00237 #ifndef RIPPER
00238 typedef struct token_info {
00239     const char *token;
00240     int linenum;
00241     int column;
00242     int nonspc;
00243     struct token_info *next;
00244 } token_info;
00245 #endif
00246 
00247 /*
00248     Structure of Lexer Buffer:
00249 
00250  lex_pbeg      tokp         lex_p        lex_pend
00251     |           |              |            |
00252     |-----------+--------------+------------|
00253                 |<------------>|
00254                      token
00255 */
00256 struct parser_params {
00257     int is_ripper;
00258     NODE *heap;
00259 
00260     YYSTYPE *parser_yylval;
00261     VALUE eofp;
00262 
00263     NODE *parser_lex_strterm;
00264     enum lex_state_e parser_lex_state;
00265     stack_type parser_cond_stack;
00266     stack_type parser_cmdarg_stack;
00267     int parser_class_nest;
00268     int parser_paren_nest;
00269     int parser_lpar_beg;
00270     int parser_in_single;
00271     int parser_in_def;
00272     int parser_compile_for_eval;
00273     VALUE parser_cur_mid;
00274     int parser_in_defined;
00275     char *parser_tokenbuf;
00276     int parser_tokidx;
00277     int parser_toksiz;
00278     VALUE parser_lex_input;
00279     VALUE parser_lex_lastline;
00280     VALUE parser_lex_nextline;
00281     const char *parser_lex_pbeg;
00282     const char *parser_lex_p;
00283     const char *parser_lex_pend;
00284     int parser_heredoc_end;
00285     int parser_command_start;
00286     NODE *parser_deferred_nodes;
00287     long parser_lex_gets_ptr;
00288     VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00289     struct local_vars *parser_lvtbl;
00290     int parser_ruby__end__seen;
00291     int line_count;
00292     int has_shebang;
00293     char *parser_ruby_sourcefile; /* current source file */
00294     int parser_ruby_sourceline; /* current line no. */
00295     rb_encoding *enc;
00296     rb_encoding *utf8;
00297 
00298     int parser_yydebug;
00299 
00300 #ifndef RIPPER
00301     /* Ruby core only */
00302     NODE *parser_eval_tree_begin;
00303     NODE *parser_eval_tree;
00304     VALUE debug_lines;
00305     VALUE coverage;
00306     int nerr;
00307 
00308     token_info *parser_token_info;
00309 #else
00310     /* Ripper only */
00311     VALUE parser_ruby_sourcefile_string;
00312     const char *tokp;
00313     VALUE delayed;
00314     int delayed_line;
00315     int delayed_col;
00316 
00317     VALUE value;
00318     VALUE result;
00319     VALUE parsing_thread;
00320     int toplevel_p;
00321 #endif
00322 };
00323 
00324 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00325                     (parser->utf8 = rb_utf8_encoding()))
00326 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00327 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00328 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00329 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00330 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00331 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00332 
00333 #ifdef YYMALLOC
00334 void *rb_parser_malloc(struct parser_params *, size_t);
00335 void *rb_parser_realloc(struct parser_params *, void *, size_t);
00336 void *rb_parser_calloc(struct parser_params *, size_t, size_t);
00337 void rb_parser_free(struct parser_params *, void *);
00338 #endif
00339 
00340 static int parser_yyerror(struct parser_params*, const char*);
00341 #define yyerror(msg) parser_yyerror(parser, msg)
00342 
00343 #define YYLEX_PARAM parser
00344 
00345 #define lex_strterm             (parser->parser_lex_strterm)
00346 #define lex_state               (parser->parser_lex_state)
00347 #define cond_stack              (parser->parser_cond_stack)
00348 #define cmdarg_stack            (parser->parser_cmdarg_stack)
00349 #define class_nest              (parser->parser_class_nest)
00350 #define paren_nest              (parser->parser_paren_nest)
00351 #define lpar_beg                (parser->parser_lpar_beg)
00352 #define in_single               (parser->parser_in_single)
00353 #define in_def                  (parser->parser_in_def)
00354 #define compile_for_eval        (parser->parser_compile_for_eval)
00355 #define cur_mid                 (parser->parser_cur_mid)
00356 #define in_defined              (parser->parser_in_defined)
00357 #define tokenbuf                (parser->parser_tokenbuf)
00358 #define tokidx                  (parser->parser_tokidx)
00359 #define toksiz                  (parser->parser_toksiz)
00360 #define lex_input               (parser->parser_lex_input)
00361 #define lex_lastline            (parser->parser_lex_lastline)
00362 #define lex_nextline            (parser->parser_lex_nextline)
00363 #define lex_pbeg                (parser->parser_lex_pbeg)
00364 #define lex_p                   (parser->parser_lex_p)
00365 #define lex_pend                (parser->parser_lex_pend)
00366 #define heredoc_end             (parser->parser_heredoc_end)
00367 #define command_start           (parser->parser_command_start)
00368 #define deferred_nodes          (parser->parser_deferred_nodes)
00369 #define lex_gets_ptr            (parser->parser_lex_gets_ptr)
00370 #define lex_gets                (parser->parser_lex_gets)
00371 #define lvtbl                   (parser->parser_lvtbl)
00372 #define ruby__end__seen         (parser->parser_ruby__end__seen)
00373 #define ruby_sourceline         (parser->parser_ruby_sourceline)
00374 #define ruby_sourcefile         (parser->parser_ruby_sourcefile)
00375 #define yydebug                 (parser->parser_yydebug)
00376 #ifdef RIPPER
00377 #else
00378 #define ruby_eval_tree          (parser->parser_eval_tree)
00379 #define ruby_eval_tree_begin    (parser->parser_eval_tree_begin)
00380 #define ruby_debug_lines        (parser->debug_lines)
00381 #define ruby_coverage           (parser->coverage)
00382 #endif
00383 
00384 static int yylex(void*, void*);
00385 
00386 #ifndef RIPPER
00387 #define yyparse ruby_yyparse
00388 
00389 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00390 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, type, a1, a2, a3)
00391 
00392 static NODE *cond_gen(struct parser_params*,NODE*);
00393 #define cond(node) cond_gen(parser, node)
00394 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00395 #define logop(type,node1,node2) logop_gen(parser, type, node1, node2)
00396 
00397 static NODE *newline_node(NODE*);
00398 static void fixpos(NODE*,NODE*);
00399 
00400 static int value_expr_gen(struct parser_params*,NODE*);
00401 static void void_expr_gen(struct parser_params*,NODE*);
00402 static NODE *remove_begin(NODE*);
00403 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00404 #define void_expr0(node) void_expr_gen(parser, (node))
00405 #define void_expr(node) void_expr0((node) = remove_begin(node))
00406 static void void_stmts_gen(struct parser_params*,NODE*);
00407 #define void_stmts(node) void_stmts_gen(parser, node)
00408 static void reduce_nodes_gen(struct parser_params*,NODE**);
00409 #define reduce_nodes(n) reduce_nodes_gen(parser,n)
00410 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00411 #define block_dup_check(n1,n2) block_dup_check_gen(parser,n1,n2)
00412 
00413 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00414 #define block_append(h,t) block_append_gen(parser,h,t)
00415 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00416 #define list_append(l,i) list_append_gen(parser,l,i)
00417 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00418 #define list_concat(h,t) list_concat_gen(parser,h,t)
00419 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00420 #define arg_append(h,t) arg_append_gen(parser,h,t)
00421 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00422 #define arg_concat(h,t) arg_concat_gen(parser,h,t)
00423 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00424 #define literal_concat(h,t) literal_concat_gen(parser,h,t)
00425 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00426 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00427 #define new_evstr(n) new_evstr_gen(parser,n)
00428 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00429 #define evstr2dstr(n) evstr2dstr_gen(parser,n)
00430 static NODE *splat_array(NODE*);
00431 
00432 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00433 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1)
00434 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00435 #define call_uni_op(recv,id) call_uni_op_gen(parser, recv,id)
00436 
00437 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00438 #define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b)
00439 
00440 static NODE *negate_lit(NODE*);
00441 static NODE *ret_args_gen(struct parser_params*,NODE*);
00442 #define ret_args(node) ret_args_gen(parser, node)
00443 static NODE *arg_blk_pass(NODE*,NODE*);
00444 static NODE *new_yield_gen(struct parser_params*,NODE*);
00445 #define new_yield(node) new_yield_gen(parser, node)
00446 
00447 static NODE *gettable_gen(struct parser_params*,ID);
00448 #define gettable(id) gettable_gen(parser,id)
00449 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00450 #define assignable(id,node) assignable_gen(parser, id, node)
00451 
00452 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00453 #define aryset(node1,node2) aryset_gen(parser, node1, node2)
00454 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00455 #define attrset(node,id) attrset_gen(parser, node, id)
00456 
00457 static void rb_backref_error_gen(struct parser_params*,NODE*);
00458 #define rb_backref_error(n) rb_backref_error_gen(parser,n)
00459 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00460 #define node_assign(node1, node2) node_assign_gen(parser, node1, node2)
00461 
00462 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00463 #define match_op(node1,node2) match_op_gen(parser, node1, node2)
00464 
00465 static ID  *local_tbl_gen(struct parser_params*);
00466 #define local_tbl() local_tbl_gen(parser)
00467 
00468 static void fixup_nodes(NODE **);
00469 
00470 extern int rb_dvar_defined(ID);
00471 extern int rb_local_defined(ID);
00472 extern int rb_parse_in_eval(void);
00473 extern int rb_parse_in_main(void);
00474 
00475 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00476 #define reg_compile(str,options) reg_compile_gen(parser, str, options)
00477 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00478 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, str, options)
00479 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00480 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, str, options)
00481 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00482 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,regexp,match)
00483 
00484 #define get_id(id) (id)
00485 #define get_value(val) (val)
00486 #else
00487 #define remove_begin(node) (node)
00488 #define rb_dvar_defined(id) 0
00489 #define rb_local_defined(id) 0
00490 static ID ripper_get_id(VALUE);
00491 #define get_id(id) ripper_get_id(id)
00492 static VALUE ripper_get_value(VALUE);
00493 #define get_value(val) ripper_get_value(val)
00494 static VALUE assignable_gen(struct parser_params*,VALUE);
00495 #define assignable(lhs,node) assignable_gen(parser, lhs)
00496 #endif /* !RIPPER */
00497 
00498 static ID formal_argument_gen(struct parser_params*, ID);
00499 #define formal_argument(id) formal_argument_gen(parser, id)
00500 static ID shadowing_lvar_gen(struct parser_params*,ID);
00501 #define shadowing_lvar(name) shadowing_lvar_gen(parser, name)
00502 static void new_bv_gen(struct parser_params*,ID);
00503 #define new_bv(id) new_bv_gen(parser, id)
00504 
00505 static void local_push_gen(struct parser_params*,int);
00506 #define local_push(top) local_push_gen(parser,top)
00507 static void local_pop_gen(struct parser_params*);
00508 #define local_pop() local_pop_gen(parser)
00509 static int local_var_gen(struct parser_params*, ID);
00510 #define local_var(id) local_var_gen(parser, id);
00511 static int arg_var_gen(struct parser_params*, ID);
00512 #define arg_var(id) arg_var_gen(parser, id)
00513 static int  local_id_gen(struct parser_params*, ID);
00514 #define local_id(id) local_id_gen(parser, id)
00515 static ID   internal_id_gen(struct parser_params*);
00516 #define internal_id() internal_id_gen(parser)
00517 
00518 static const struct vtable *dyna_push_gen(struct parser_params *);
00519 #define dyna_push() dyna_push_gen(parser)
00520 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00521 #define dyna_pop(node) dyna_pop_gen(parser, node)
00522 static int dyna_in_block_gen(struct parser_params*);
00523 #define dyna_in_block() dyna_in_block_gen(parser)
00524 #define dyna_var(id) local_var(id)
00525 static int dvar_defined_gen(struct parser_params*,ID);
00526 #define dvar_defined(id) dvar_defined_gen(parser, id)
00527 static int dvar_curr_gen(struct parser_params*,ID);
00528 #define dvar_curr(id) dvar_curr_gen(parser, id)
00529 
00530 static int lvar_defined_gen(struct parser_params*, ID);
00531 #define lvar_defined(id) lvar_defined_gen(parser, id)
00532 
00533 #define RE_OPTION_ONCE (1<<16)
00534 #define RE_OPTION_ENCODING_SHIFT 8
00535 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00536 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00537 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00538 #define RE_OPTION_MASK  0xff
00539 #define RE_OPTION_ARG_ENCODING_NONE 32
00540 
00541 #define NODE_STRTERM NODE_ZARRAY        /* nothing to gc */
00542 #define NODE_HEREDOC NODE_ARRAY         /* 1, 3 to gc */
00543 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00544 #define nd_func u1.id
00545 #if SIZEOF_SHORT == 2
00546 #define nd_term(node) ((signed short)(node)->u2.id)
00547 #else
00548 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00549 #endif
00550 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00551 #define nd_nest u3.cnt
00552 
00553 /****** Ripper *******/
00554 
00555 #ifdef RIPPER
00556 #define RIPPER_VERSION "0.1.0"
00557 
00558 #include "eventids1.c"
00559 #include "eventids2.c"
00560 static ID ripper_id_gets;
00561 
00562 static VALUE ripper_dispatch0(struct parser_params*,ID);
00563 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00564 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00565 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00566 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00567 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00568 
00569 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00570 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), a)
00571 #define dispatch2(n,a,b)        ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), a, b)
00572 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), a, b, c)
00573 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d)
00574 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d, e)
00575 
00576 #define yyparse ripper_yyparse
00577 
00578 #define ripper_intern(s) ID2SYM(rb_intern(s))
00579 static VALUE ripper_id2sym(ID);
00580 #ifdef __GNUC__
00581 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00582                            ID2SYM(id) : ripper_id2sym(id))
00583 #endif
00584 
00585 #define arg_new() dispatch0(args_new)
00586 #define arg_add(l,a) dispatch2(args_add, l, a)
00587 #define arg_add_star(l,a) dispatch2(args_add_star, l, a)
00588 #define arg_add_block(l,b) dispatch2(args_add_block, l, b)
00589 #define arg_add_optblock(l,b) ((b)==Qundef? l : dispatch2(args_add_block, l, b))
00590 #define bare_assoc(v) dispatch1(bare_assoc_hash, v)
00591 #define arg_add_assocs(l,b) arg_add(l, bare_assoc(b))
00592 
00593 #define args2mrhs(a) dispatch1(mrhs_new_from_args, a)
00594 #define mrhs_new() dispatch0(mrhs_new)
00595 #define mrhs_add(l,a) dispatch2(mrhs_add, l, a)
00596 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, l, a)
00597 
00598 #define mlhs_new() dispatch0(mlhs_new)
00599 #define mlhs_add(l,a) dispatch2(mlhs_add, l, a)
00600 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, l, a)
00601 
00602 #define params_new(pars, opts, rest, pars2, blk) \
00603         dispatch5(params, pars, opts, rest, pars2, blk)
00604 
00605 #define blockvar_new(p,v) dispatch2(block_var, p, v)
00606 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, l, a)
00607 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, l, a)
00608 
00609 #define method_optarg(m,a) ((a)==Qundef ? m : dispatch2(method_add_arg,m,a))
00610 #define method_arg(m,a) dispatch2(method_add_arg,m,a)
00611 #define method_add_block(m,b) dispatch2(method_add_block, m, b)
00612 
00613 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00614 
00615 #define FIXME 0
00616 
00617 #endif /* RIPPER */
00618 
00619 #ifndef RIPPER
00620 # define ifndef_ripper(x) x
00621 #else
00622 # define ifndef_ripper(x)
00623 #endif
00624 
00625 #ifndef RIPPER
00626 # define rb_warn0(fmt)    rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt)
00627 # define rb_warnI(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00628 # define rb_warnS(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00629 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt)
00630 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt, a)
00631 #else
00632 # define rb_warn0(fmt)    ripper_warn0(parser, fmt)
00633 # define rb_warnI(fmt,a)  ripper_warnI(parser, fmt, a)
00634 # define rb_warnS(fmt,a)  ripper_warnS(parser, fmt, a)
00635 # define rb_warning0(fmt) ripper_warning0(parser, fmt)
00636 # define rb_warningS(fmt,a) ripper_warningS(parser, fmt, a)
00637 static void ripper_warn0(struct parser_params*, const char*);
00638 static void ripper_warnI(struct parser_params*, const char*, int);
00639 #if 0
00640 static void ripper_warnS(struct parser_params*, const char*, const char*);
00641 #endif
00642 static void ripper_warning0(struct parser_params*, const char*);
00643 static void ripper_warningS(struct parser_params*, const char*, const char*);
00644 #endif
00645 
00646 #ifdef RIPPER
00647 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00648 # define rb_compile_error ripper_compile_error
00649 # define compile_error ripper_compile_error
00650 # define PARSER_ARG parser,
00651 #else
00652 # define compile_error parser->nerr++,rb_compile_error
00653 # define PARSER_ARG ruby_sourcefile, ruby_sourceline,
00654 #endif
00655 
00656 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
00657    for instance).  This is too low for Ruby to parse some files, such as
00658    date/format.rb, therefore bump the value up to at least Bison's default. */
00659 #ifdef OLD_YACC
00660 #ifndef YYMAXDEPTH
00661 #define YYMAXDEPTH 10000
00662 #endif
00663 #endif
00664 
00665 #ifndef RIPPER
00666 static void token_info_push(struct parser_params*, const char *token);
00667 static void token_info_pop(struct parser_params*, const char *token);
00668 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, token) : (void)0)
00669 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, token) : (void)0)
00670 #else
00671 #define token_info_push(token) /* nothing */
00672 #define token_info_pop(token) /* nothing */
00673 #endif
00674 
00675 
00676 /* Line 189 of yacc.c  */
00677 #line 678 "parse.c"
00678 
00679 /* Enabling traces.  */
00680 #ifndef YYDEBUG
00681 # define YYDEBUG 0
00682 #endif
00683 
00684 /* Enabling verbose error messages.  */
00685 #ifdef YYERROR_VERBOSE
00686 # undef YYERROR_VERBOSE
00687 # define YYERROR_VERBOSE 1
00688 #else
00689 # define YYERROR_VERBOSE 0
00690 #endif
00691 
00692 /* Enabling the token table.  */
00693 #ifndef YYTOKEN_TABLE
00694 # define YYTOKEN_TABLE 0
00695 #endif
00696 
00697 
00698 /* Tokens.  */
00699 #ifndef YYTOKENTYPE
00700 # define YYTOKENTYPE
00701    /* Put the tokens into the symbol table, so that GDB and other debuggers
00702       know about them.  */
00703    enum yytokentype {
00704      keyword_class = 258,
00705      keyword_module = 259,
00706      keyword_def = 260,
00707      keyword_undef = 261,
00708      keyword_begin = 262,
00709      keyword_rescue = 263,
00710      keyword_ensure = 264,
00711      keyword_end = 265,
00712      keyword_if = 266,
00713      keyword_unless = 267,
00714      keyword_then = 268,
00715      keyword_elsif = 269,
00716      keyword_else = 270,
00717      keyword_case = 271,
00718      keyword_when = 272,
00719      keyword_while = 273,
00720      keyword_until = 274,
00721      keyword_for = 275,
00722      keyword_break = 276,
00723      keyword_next = 277,
00724      keyword_redo = 278,
00725      keyword_retry = 279,
00726      keyword_in = 280,
00727      keyword_do = 281,
00728      keyword_do_cond = 282,
00729      keyword_do_block = 283,
00730      keyword_do_LAMBDA = 284,
00731      keyword_return = 285,
00732      keyword_yield = 286,
00733      keyword_super = 287,
00734      keyword_self = 288,
00735      keyword_nil = 289,
00736      keyword_true = 290,
00737      keyword_false = 291,
00738      keyword_and = 292,
00739      keyword_or = 293,
00740      keyword_not = 294,
00741      modifier_if = 295,
00742      modifier_unless = 296,
00743      modifier_while = 297,
00744      modifier_until = 298,
00745      modifier_rescue = 299,
00746      keyword_alias = 300,
00747      keyword_defined = 301,
00748      keyword_BEGIN = 302,
00749      keyword_END = 303,
00750      keyword__LINE__ = 304,
00751      keyword__FILE__ = 305,
00752      keyword__ENCODING__ = 306,
00753      tIDENTIFIER = 307,
00754      tFID = 308,
00755      tGVAR = 309,
00756      tIVAR = 310,
00757      tCONSTANT = 311,
00758      tCVAR = 312,
00759      tLABEL = 313,
00760      tINTEGER = 314,
00761      tFLOAT = 315,
00762      tSTRING_CONTENT = 316,
00763      tCHAR = 317,
00764      tNTH_REF = 318,
00765      tBACK_REF = 319,
00766      tREGEXP_END = 320,
00767      tUPLUS = 321,
00768      tUMINUS = 322,
00769      tPOW = 323,
00770      tCMP = 324,
00771      tEQ = 325,
00772      tEQQ = 326,
00773      tNEQ = 327,
00774      tGEQ = 328,
00775      tLEQ = 329,
00776      tANDOP = 330,
00777      tOROP = 331,
00778      tMATCH = 332,
00779      tNMATCH = 333,
00780      tDOT2 = 334,
00781      tDOT3 = 335,
00782      tAREF = 336,
00783      tASET = 337,
00784      tLSHFT = 338,
00785      tRSHFT = 339,
00786      tCOLON2 = 340,
00787      tCOLON3 = 341,
00788      tOP_ASGN = 342,
00789      tASSOC = 343,
00790      tLPAREN = 344,
00791      tLPAREN_ARG = 345,
00792      tRPAREN = 346,
00793      tLBRACK = 347,
00794      tLBRACE = 348,
00795      tLBRACE_ARG = 349,
00796      tSTAR = 350,
00797      tAMPER = 351,
00798      tLAMBDA = 352,
00799      tSYMBEG = 353,
00800      tSTRING_BEG = 354,
00801      tXSTRING_BEG = 355,
00802      tREGEXP_BEG = 356,
00803      tWORDS_BEG = 357,
00804      tQWORDS_BEG = 358,
00805      tSTRING_DBEG = 359,
00806      tSTRING_DVAR = 360,
00807      tSTRING_END = 361,
00808      tLAMBEG = 362,
00809      tLOWEST = 363,
00810      tUMINUS_NUM = 364,
00811      idNULL = 365,
00812      idRespond_to = 366,
00813      idIFUNC = 367,
00814      idCFUNC = 368,
00815      id_core_set_method_alias = 369,
00816      id_core_set_variable_alias = 370,
00817      id_core_undef_method = 371,
00818      id_core_define_method = 372,
00819      id_core_define_singleton_method = 373,
00820      id_core_set_postexe = 374,
00821      tLAST_TOKEN = 375
00822    };
00823 #endif
00824 
00825 
00826 
00827 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00828 typedef union YYSTYPE
00829 {
00830 
00831 /* Line 214 of yacc.c  */
00832 #line 620 "parse.y"
00833 
00834     VALUE val;
00835     NODE *node;
00836     ID id;
00837     int num;
00838     const struct vtable *vars;
00839 
00840 
00841 
00842 /* Line 214 of yacc.c  */
00843 #line 844 "parse.c"
00844 } YYSTYPE;
00845 # define YYSTYPE_IS_TRIVIAL 1
00846 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00847 # define YYSTYPE_IS_DECLARED 1
00848 #endif
00849 
00850 
00851 /* Copy the second part of user declarations.  */
00852 
00853 
00854 /* Line 264 of yacc.c  */
00855 #line 856 "parse.c"
00856 
00857 #ifdef short
00858 # undef short
00859 #endif
00860 
00861 #ifdef YYTYPE_UINT8
00862 typedef YYTYPE_UINT8 yytype_uint8;
00863 #else
00864 typedef unsigned char yytype_uint8;
00865 #endif
00866 
00867 #ifdef YYTYPE_INT8
00868 typedef YYTYPE_INT8 yytype_int8;
00869 #elif (defined __STDC__ || defined __C99__FUNC__ \
00870      || defined __cplusplus || defined _MSC_VER)
00871 typedef signed char yytype_int8;
00872 #else
00873 typedef short int yytype_int8;
00874 #endif
00875 
00876 #ifdef YYTYPE_UINT16
00877 typedef YYTYPE_UINT16 yytype_uint16;
00878 #else
00879 typedef unsigned short int yytype_uint16;
00880 #endif
00881 
00882 #ifdef YYTYPE_INT16
00883 typedef YYTYPE_INT16 yytype_int16;
00884 #else
00885 typedef short int yytype_int16;
00886 #endif
00887 
00888 #ifndef YYSIZE_T
00889 # ifdef __SIZE_TYPE__
00890 #  define YYSIZE_T __SIZE_TYPE__
00891 # elif defined size_t
00892 #  define YYSIZE_T size_t
00893 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00894      || defined __cplusplus || defined _MSC_VER)
00895 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00896 #  define YYSIZE_T size_t
00897 # else
00898 #  define YYSIZE_T unsigned int
00899 # endif
00900 #endif
00901 
00902 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00903 
00904 #ifndef YY_
00905 # if defined YYENABLE_NLS && YYENABLE_NLS
00906 #  if ENABLE_NLS
00907 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
00908 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
00909 #  endif
00910 # endif
00911 # ifndef YY_
00912 #  define YY_(msgid) msgid
00913 # endif
00914 #endif
00915 
00916 /* Suppress unused-variable warnings by "using" E.  */
00917 #if ! defined lint || defined __GNUC__
00918 # define YYUSE(e) ((void) (e))
00919 #else
00920 # define YYUSE(e) /* empty */
00921 #endif
00922 
00923 /* Identity function, used to suppress warnings about constant conditions.  */
00924 #ifndef lint
00925 # define YYID(n) (n)
00926 #else
00927 #if (defined __STDC__ || defined __C99__FUNC__ \
00928      || defined __cplusplus || defined _MSC_VER)
00929 static int
00930 YYID (int yyi)
00931 #else
00932 static int
00933 YYID (yyi)
00934     int yyi;
00935 #endif
00936 {
00937   return yyi;
00938 }
00939 #endif
00940 
00941 #if ! defined yyoverflow || YYERROR_VERBOSE
00942 
00943 /* The parser invokes alloca or malloc; define the necessary symbols.  */
00944 
00945 # ifdef YYSTACK_USE_ALLOCA
00946 #  if YYSTACK_USE_ALLOCA
00947 #   ifdef __GNUC__
00948 #    define YYSTACK_ALLOC __builtin_alloca
00949 #   elif defined __BUILTIN_VA_ARG_INCR
00950 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
00951 #   elif defined _AIX
00952 #    define YYSTACK_ALLOC __alloca
00953 #   elif defined _MSC_VER
00954 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
00955 #    define alloca _alloca
00956 #   else
00957 #    define YYSTACK_ALLOC alloca
00958 #    if ! defined _ALLOCA_H && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00959      || defined __cplusplus || defined _MSC_VER)
00960 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00961 #     ifndef _STDLIB_H
00962 #      define _STDLIB_H 1
00963 #     endif
00964 #    endif
00965 #   endif
00966 #  endif
00967 # endif
00968 
00969 # ifdef YYSTACK_ALLOC
00970    /* Pacify GCC's `empty if-body' warning.  */
00971 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
00972 #  ifndef YYSTACK_ALLOC_MAXIMUM
00973     /* The OS might guarantee only one guard page at the bottom of the stack,
00974        and a page size can be as small as 4096 bytes.  So we cannot safely
00975        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
00976        to allow for a few compiler-allocated temporary stack slots.  */
00977 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
00978 #  endif
00979 # else
00980 #  define YYSTACK_ALLOC YYMALLOC
00981 #  define YYSTACK_FREE YYFREE
00982 #  ifndef YYSTACK_ALLOC_MAXIMUM
00983 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00984 #  endif
00985 #  if (defined __cplusplus && ! defined _STDLIB_H \
00986        && ! ((defined YYMALLOC || defined malloc) \
00987              && (defined YYFREE || defined free)))
00988 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00989 #   ifndef _STDLIB_H
00990 #    define _STDLIB_H 1
00991 #   endif
00992 #  endif
00993 #  ifndef YYMALLOC
00994 #   define YYMALLOC malloc
00995 #   if ! defined malloc && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
00996      || defined __cplusplus || defined _MSC_VER)
00997 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
00998 #   endif
00999 #  endif
01000 #  ifndef YYFREE
01001 #   define YYFREE free
01002 #   if ! defined free && ! defined _STDLIB_H && (defined __STDC__ || defined __C99__FUNC__ \
01003      || defined __cplusplus || defined _MSC_VER)
01004 void free (void *); /* INFRINGES ON USER NAME SPACE */
01005 #   endif
01006 #  endif
01007 # endif
01008 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
01009 
01010 
01011 #if (! defined yyoverflow \
01012      && (! defined __cplusplus \
01013          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01014 
01015 /* A type that is properly aligned for any stack member.  */
01016 union yyalloc
01017 {
01018   yytype_int16 yyss_alloc;
01019   YYSTYPE yyvs_alloc;
01020 };
01021 
01022 /* The size of the maximum gap between one aligned stack and the next.  */
01023 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01024 
01025 /* The size of an array large to enough to hold all stacks, each with
01026    N elements.  */
01027 # define YYSTACK_BYTES(N) \
01028      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01029       + YYSTACK_GAP_MAXIMUM)
01030 
01031 /* Copy COUNT objects from FROM to TO.  The source and destination do
01032    not overlap.  */
01033 # ifndef YYCOPY
01034 #  if defined __GNUC__ && 1 < __GNUC__
01035 #   define YYCOPY(To, From, Count) \
01036       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01037 #  else
01038 #   define YYCOPY(To, From, Count)              \
01039       do                                        \
01040         {                                       \
01041           YYSIZE_T yyi;                         \
01042           for (yyi = 0; yyi < (Count); yyi++)   \
01043             (To)[yyi] = (From)[yyi];            \
01044         }                                       \
01045       while (YYID (0))
01046 #  endif
01047 # endif
01048 
01049 /* Relocate STACK from its old location to the new one.  The
01050    local variables YYSIZE and YYSTACKSIZE give the old and new number of
01051    elements in the stack, and YYPTR gives the new location of the
01052    stack.  Advance YYPTR to a properly aligned location for the next
01053    stack.  */
01054 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
01055     do                                                                  \
01056       {                                                                 \
01057         YYSIZE_T yynewbytes;                                            \
01058         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
01059         Stack = &yyptr->Stack_alloc;                                    \
01060         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01061         yyptr += yynewbytes / sizeof (*yyptr);                          \
01062       }                                                                 \
01063     while (YYID (0))
01064 
01065 #endif
01066 
01067 /* YYFINAL -- State number of the termination state.  */
01068 #define YYFINAL  3
01069 /* YYLAST -- Last index in YYTABLE.  */
01070 #define YYLAST   10410
01071 
01072 /* YYNTOKENS -- Number of terminals.  */
01073 #define YYNTOKENS  148
01074 /* YYNNTS -- Number of nonterminals.  */
01075 #define YYNNTS  172
01076 /* YYNRULES -- Number of rules.  */
01077 #define YYNRULES  565
01078 /* YYNRULES -- Number of states.  */
01079 #define YYNSTATES  975
01080 
01081 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
01082 #define YYUNDEFTOK  2
01083 #define YYMAXUTOK   375
01084 
01085 #define YYTRANSLATE(YYX)                                                \
01086   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01087 
01088 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
01089 static const yytype_uint8 yytranslate[] =
01090 {
01091        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01092      147,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01093        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01094        2,     2,   146,   123,     2,     2,     2,   121,   116,     2,
01095      142,   143,   119,   117,   140,   118,   139,   120,     2,     2,
01096        2,     2,     2,     2,     2,     2,     2,     2,   111,   145,
01097      113,   109,   112,   110,     2,     2,     2,     2,     2,     2,
01098        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01099        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01100        2,   138,     2,   144,   115,     2,   141,     2,     2,     2,
01101        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01102        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01103        2,     2,     2,   136,   114,   137,   124,     2,     2,     2,
01104        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01105        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01106        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01107        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01108        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01109        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01110        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01111        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01112        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01113        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01114        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01115        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01116        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
01117        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
01118       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
01119       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
01120       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
01121       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
01122       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
01123       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
01124       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
01125       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
01126       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
01127      105,   106,   107,   108,   122,   125,   126,   127,   128,   129,
01128      130,   131,   132,   133,   134,   135
01129 };
01130 
01131 #if YYDEBUG
01132 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
01133    YYRHS.  */
01134 static const yytype_uint16 yyprhs[] =
01135 {
01136        0,     0,     3,     4,     7,    10,    12,    14,    18,    21,
01137       23,    24,    30,    35,    38,    40,    42,    46,    49,    50,
01138       55,    59,    63,    67,    70,    74,    78,    82,    86,    90,
01139       95,    99,   103,   107,   114,   120,   126,   132,   138,   142,
01140      146,   150,   154,   156,   158,   162,   166,   170,   173,   175,
01141      177,   179,   181,   183,   188,   193,   194,   200,   203,   207,
01142      212,   218,   223,   229,   232,   235,   238,   241,   244,   246,
01143      250,   252,   256,   258,   261,   265,   271,   274,   279,   282,
01144      287,   289,   293,   295,   299,   302,   306,   308,   312,   314,
01145      319,   323,   327,   331,   335,   338,   340,   342,   347,   351,
01146      355,   359,   363,   366,   368,   370,   372,   375,   377,   381,
01147      383,   385,   387,   389,   391,   393,   395,   397,   399,   401,
01148      402,   407,   409,   411,   413,   415,   417,   419,   421,   423,
01149      425,   427,   429,   431,   433,   435,   437,   439,   441,   443,
01150      445,   447,   449,   451,   453,   455,   457,   459,   461,   463,
01151      465,   467,   469,   471,   473,   475,   477,   479,   481,   483,
01152      485,   487,   489,   491,   493,   495,   497,   499,   501,   503,
01153      505,   507,   509,   511,   513,   515,   517,   519,   521,   523,
01154      525,   527,   529,   531,   533,   535,   537,   539,   541,   543,
01155      545,   547,   551,   557,   561,   567,   574,   580,   586,   592,
01156      598,   603,   607,   611,   615,   619,   623,   627,   631,   635,
01157      639,   644,   649,   652,   655,   659,   663,   667,   671,   675,
01158      679,   683,   687,   691,   695,   699,   703,   707,   710,   713,
01159      717,   721,   725,   729,   730,   735,   742,   744,   746,   748,
01160      751,   756,   759,   763,   765,   767,   769,   771,   773,   776,
01161      779,   784,   786,   787,   790,   793,   796,   798,   800,   802,
01162      805,   809,   814,   818,   823,   826,   828,   830,   832,   834,
01163      836,   838,   840,   842,   844,   845,   850,   851,   856,   860,
01164      864,   867,   871,   875,   877,   882,   886,   888,   889,   896,
01165      901,   905,   908,   910,   913,   916,   923,   930,   931,   932,
01166      940,   941,   942,   950,   956,   961,   962,   963,   973,   974,
01167      981,   982,   983,   992,   993,   999,  1000,  1007,  1008,  1009,
01168     1019,  1021,  1023,  1025,  1027,  1029,  1031,  1033,  1035,  1037,
01169     1039,  1041,  1043,  1045,  1047,  1049,  1051,  1053,  1055,  1058,
01170     1060,  1062,  1064,  1070,  1072,  1075,  1077,  1079,  1081,  1085,
01171     1087,  1091,  1093,  1098,  1105,  1109,  1115,  1118,  1123,  1125,
01172     1129,  1136,  1145,  1150,  1157,  1162,  1165,  1172,  1175,  1180,
01173     1187,  1190,  1195,  1198,  1203,  1205,  1207,  1209,  1213,  1215,
01174     1220,  1222,  1225,  1227,  1231,  1233,  1235,  1236,  1237,  1242,
01175     1247,  1249,  1253,  1257,  1258,  1264,  1267,  1272,  1277,  1280,
01176     1285,  1290,  1294,  1298,  1302,  1305,  1307,  1312,  1313,  1319,
01177     1320,  1326,  1332,  1334,  1336,  1343,  1345,  1347,  1349,  1351,
01178     1354,  1356,  1359,  1361,  1363,  1365,  1367,  1369,  1371,  1373,
01179     1376,  1380,  1384,  1388,  1392,  1396,  1397,  1401,  1403,  1406,
01180     1410,  1414,  1415,  1419,  1420,  1423,  1424,  1427,  1428,  1431,
01181     1433,  1434,  1438,  1439,  1440,  1446,  1448,  1450,  1452,  1454,
01182     1457,  1459,  1461,  1463,  1465,  1469,  1471,  1473,  1476,  1479,
01183     1481,  1483,  1485,  1487,  1489,  1491,  1493,  1495,  1497,  1499,
01184     1501,  1503,  1505,  1507,  1509,  1511,  1513,  1514,  1519,  1522,
01185     1526,  1529,  1536,  1545,  1550,  1557,  1562,  1569,  1572,  1577,
01186     1584,  1587,  1592,  1595,  1600,  1602,  1603,  1605,  1607,  1609,
01187     1611,  1613,  1615,  1617,  1621,  1623,  1627,  1631,  1635,  1637,
01188     1641,  1643,  1647,  1649,  1651,  1654,  1656,  1658,  1660,  1663,
01189     1666,  1668,  1670,  1671,  1676,  1678,  1681,  1683,  1687,  1691,
01190     1694,  1696,  1698,  1700,  1702,  1704,  1706,  1708,  1710,  1712,
01191     1714,  1716,  1718,  1719,  1721,  1722,  1724,  1727,  1730,  1731,
01192     1733,  1735,  1737,  1739,  1741,  1744
01193 };
01194 
01195 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
01196 static const yytype_int16 yyrhs[] =
01197 {
01198      149,     0,    -1,    -1,   150,   151,    -1,   152,   312,    -1,
01199      319,    -1,   153,    -1,   152,   318,   153,    -1,     1,   153,
01200       -1,   158,    -1,    -1,    47,   154,   136,   151,   137,    -1,
01201      156,   255,   230,   258,    -1,   157,   312,    -1,   319,    -1,
01202      158,    -1,   157,   318,   158,    -1,     1,   158,    -1,    -1,
01203       45,   179,   159,   179,    -1,    45,    54,    54,    -1,    45,
01204       54,    64,    -1,    45,    54,    63,    -1,     6,   180,    -1,
01205      158,    40,   161,    -1,   158,    41,   161,    -1,   158,    42,
01206      161,    -1,   158,    43,   161,    -1,   158,    44,   158,    -1,
01207       48,   136,   156,   137,    -1,   174,   109,   162,    -1,   167,
01208      109,   162,    -1,   284,    87,   162,    -1,   215,   138,   190,
01209      315,    87,   162,    -1,   215,   139,    52,    87,   162,    -1,
01210      215,   139,    56,    87,   162,    -1,   215,    85,    56,    87,
01211      162,    -1,   215,    85,    52,    87,   162,    -1,   285,    87,
01212      162,    -1,   174,   109,   197,    -1,   167,   109,   186,    -1,
01213      167,   109,   197,    -1,   160,    -1,   162,    -1,   160,    37,
01214      160,    -1,   160,    38,   160,    -1,    39,   313,   160,    -1,
01215      123,   162,    -1,   184,    -1,   160,    -1,   166,    -1,   163,
01216       -1,   248,    -1,   248,   139,   309,   192,    -1,   248,    85,
01217      309,   192,    -1,    -1,    94,   165,   236,   156,   137,    -1,
01218      308,   192,    -1,   308,   192,   164,    -1,   215,   139,   309,
01219      192,    -1,   215,   139,   309,   192,   164,    -1,   215,    85,
01220      309,   192,    -1,   215,    85,   309,   192,   164,    -1,    32,
01221      192,    -1,    31,   192,    -1,    30,   191,    -1,    21,   191,
01222       -1,    22,   191,    -1,   169,    -1,    89,   168,   314,    -1,
01223      169,    -1,    89,   168,   314,    -1,   171,    -1,   171,   170,
01224       -1,   171,    95,   173,    -1,   171,    95,   173,   140,   172,
01225       -1,   171,    95,    -1,   171,    95,   140,   172,    -1,    95,
01226      173,    -1,    95,   173,   140,   172,    -1,    95,    -1,    95,
01227      140,   172,    -1,   173,    -1,    89,   168,   314,    -1,   170,
01228      140,    -1,   171,   170,   140,    -1,   170,    -1,   172,   140,
01229      170,    -1,   282,    -1,   215,   138,   190,   315,    -1,   215,
01230      139,    52,    -1,   215,    85,    52,    -1,   215,   139,    56,
01231       -1,   215,    85,    56,    -1,    86,    56,    -1,   285,    -1,
01232      282,    -1,   215,   138,   190,   315,    -1,   215,   139,    52,
01233       -1,   215,    85,    52,    -1,   215,   139,    56,    -1,   215,
01234       85,    56,    -1,    86,    56,    -1,   285,    -1,    52,    -1,
01235       56,    -1,    86,   175,    -1,   175,    -1,   215,    85,   175,
01236       -1,    52,    -1,    56,    -1,    53,    -1,   182,    -1,   183,
01237       -1,   177,    -1,   278,    -1,   178,    -1,   280,    -1,   179,
01238       -1,    -1,   180,   140,   181,   179,    -1,   114,    -1,   115,
01239       -1,   116,    -1,    69,    -1,    70,    -1,    71,    -1,    77,
01240       -1,    78,    -1,   112,    -1,    73,    -1,   113,    -1,    74,
01241       -1,    72,    -1,    83,    -1,    84,    -1,   117,    -1,   118,
01242       -1,   119,    -1,    95,    -1,   120,    -1,   121,    -1,    68,
01243       -1,   123,    -1,   124,    -1,    66,    -1,    67,    -1,    81,
01244       -1,    82,    -1,   141,    -1,    49,    -1,    50,    -1,    51,
01245       -1,    47,    -1,    48,    -1,    45,    -1,    37,    -1,     7,
01246       -1,    21,    -1,    16,    -1,     3,    -1,     5,    -1,    46,
01247       -1,    26,    -1,    15,    -1,    14,    -1,    10,    -1,     9,
01248       -1,    36,    -1,    20,    -1,    25,    -1,     4,    -1,    22,
01249       -1,    34,    -1,    39,    -1,    38,    -1,    23,    -1,     8,
01250       -1,    24,    -1,    30,    -1,    33,    -1,    32,    -1,    13,
01251       -1,    35,    -1,     6,    -1,    17,    -1,    31,    -1,    11,
01252       -1,    12,    -1,    18,    -1,    19,    -1,   174,   109,   184,
01253       -1,   174,   109,   184,    44,   184,    -1,   284,    87,   184,
01254       -1,   284,    87,   184,    44,   184,    -1,   215,   138,   190,
01255      315,    87,   184,    -1,   215,   139,    52,    87,   184,    -1,
01256      215,   139,    56,    87,   184,    -1,   215,    85,    52,    87,
01257      184,    -1,   215,    85,    56,    87,   184,    -1,    86,    56,
01258       87,   184,    -1,   285,    87,   184,    -1,   184,    79,   184,
01259       -1,   184,    80,   184,    -1,   184,   117,   184,    -1,   184,
01260      118,   184,    -1,   184,   119,   184,    -1,   184,   120,   184,
01261       -1,   184,   121,   184,    -1,   184,    68,   184,    -1,   122,
01262       59,    68,   184,    -1,   122,    60,    68,   184,    -1,    66,
01263      184,    -1,    67,   184,    -1,   184,   114,   184,    -1,   184,
01264      115,   184,    -1,   184,   116,   184,    -1,   184,    69,   184,
01265       -1,   184,   112,   184,    -1,   184,    73,   184,    -1,   184,
01266      113,   184,    -1,   184,    74,   184,    -1,   184,    70,   184,
01267       -1,   184,    71,   184,    -1,   184,    72,   184,    -1,   184,
01268       77,   184,    -1,   184,    78,   184,    -1,   123,   184,    -1,
01269      124,   184,    -1,   184,    83,   184,    -1,   184,    84,   184,
01270       -1,   184,    75,   184,    -1,   184,    76,   184,    -1,    -1,
01271       46,   313,   185,   184,    -1,   184,   110,   184,   313,   111,
01272      184,    -1,   198,    -1,   184,    -1,   319,    -1,   196,   316,
01273       -1,   196,   140,   306,   316,    -1,   306,   316,    -1,   142,
01274      190,   314,    -1,   319,    -1,   188,    -1,   319,    -1,   191,
01275       -1,   166,    -1,   196,   195,    -1,   306,   195,    -1,   196,
01276      140,   306,   195,    -1,   194,    -1,    -1,   193,   191,    -1,
01277       96,   186,    -1,   140,   194,    -1,   140,    -1,   319,    -1,
01278      186,    -1,    95,   186,    -1,   196,   140,   186,    -1,   196,
01279      140,    95,   186,    -1,   196,   140,   186,    -1,   196,   140,
01280       95,   186,    -1,    95,   186,    -1,   259,    -1,   260,    -1,
01281      263,    -1,   264,    -1,   265,    -1,   268,    -1,   283,    -1,
01282      285,    -1,    53,    -1,    -1,   216,   199,   155,   226,    -1,
01283       -1,    90,   160,   200,   314,    -1,    89,   156,   143,    -1,
01284      215,    85,    56,    -1,    86,    56,    -1,    92,   187,   144,
01285       -1,    93,   305,   137,    -1,    30,    -1,    31,   142,   191,
01286      314,    -1,    31,   142,   314,    -1,    31,    -1,    -1,    46,
01287      313,   142,   201,   160,   314,    -1,    39,   142,   160,   314,
01288       -1,    39,   142,   314,    -1,   308,   250,    -1,   249,    -1,
01289      249,   250,    -1,    97,   241,    -1,   217,   161,   227,   156,
01290      229,   226,    -1,   218,   161,   227,   156,   230,   226,    -1,
01291       -1,    -1,   219,   202,   161,   228,   203,   156,   226,    -1,
01292       -1,    -1,   220,   204,   161,   228,   205,   156,   226,    -1,
01293      221,   161,   312,   253,   226,    -1,   221,   312,   253,   226,
01294       -1,    -1,    -1,   222,   231,    25,   206,   161,   228,   207,
01295      156,   226,    -1,    -1,   223,   176,   286,   208,   155,   226,
01296       -1,    -1,    -1,   223,    83,   160,   209,   317,   210,   155,
01297      226,    -1,    -1,   224,   176,   211,   155,   226,    -1,    -1,
01298      225,   177,   212,   288,   155,   226,    -1,    -1,    -1,   225,
01299      303,   311,   213,   177,   214,   288,   155,   226,    -1,    21,
01300       -1,    22,    -1,    23,    -1,    24,    -1,   198,    -1,     7,
01301       -1,    11,    -1,    12,    -1,    18,    -1,    19,    -1,    16,
01302       -1,    20,    -1,     3,    -1,     4,    -1,     5,    -1,    10,
01303       -1,   317,    -1,    13,    -1,   317,    13,    -1,   317,    -1,
01304       27,    -1,   230,    -1,    14,   161,   227,   156,   229,    -1,
01305      319,    -1,    15,   156,    -1,   174,    -1,   167,    -1,   291,
01306       -1,    89,   234,   314,    -1,   232,    -1,   233,   140,   232,
01307       -1,   233,    -1,   233,   140,    95,   291,    -1,   233,   140,
01308       95,   291,   140,   233,    -1,   233,   140,    95,    -1,   233,
01309      140,    95,   140,   233,    -1,    95,   291,    -1,    95,   291,
01310      140,   233,    -1,    95,    -1,    95,   140,   233,    -1,   293,
01311      140,   296,   140,   299,   302,    -1,   293,   140,   296,   140,
01312      299,   140,   293,   302,    -1,   293,   140,   296,   302,    -1,
01313      293,   140,   296,   140,   293,   302,    -1,   293,   140,   299,
01314      302,    -1,   293,   140,    -1,   293,   140,   299,   140,   293,
01315      302,    -1,   293,   302,    -1,   296,   140,   299,   302,    -1,
01316      296,   140,   299,   140,   293,   302,    -1,   296,   302,    -1,
01317      296,   140,   293,   302,    -1,   299,   302,    -1,   299,   140,
01318      293,   302,    -1,   301,    -1,   319,    -1,   237,    -1,   114,
01319      238,   114,    -1,    76,    -1,   114,   235,   238,   114,    -1,
01320      319,    -1,   145,   239,    -1,   240,    -1,   239,   140,   240,
01321       -1,    52,    -1,   290,    -1,    -1,    -1,   242,   243,   244,
01322      245,    -1,   142,   289,   238,   314,    -1,   289,    -1,   107,
01323      156,   137,    -1,    29,   156,    10,    -1,    -1,    28,   247,
01324      236,   156,    10,    -1,   166,   246,    -1,   248,   139,   309,
01325      189,    -1,   248,    85,   309,   189,    -1,   308,   188,    -1,
01326      215,   139,   309,   189,    -1,   215,    85,   309,   188,    -1,
01327      215,    85,   310,    -1,   215,   139,   188,    -1,   215,    85,
01328      188,    -1,    32,   188,    -1,    32,    -1,   215,   138,   190,
01329      315,    -1,    -1,   136,   251,   236,   156,   137,    -1,    -1,
01330       26,   252,   236,   156,    10,    -1,    17,   196,   227,   156,
01331      254,    -1,   230,    -1,   253,    -1,     8,   256,   257,   227,
01332      156,   255,    -1,   319,    -1,   186,    -1,   197,    -1,   319,
01333       -1,    88,   174,    -1,   319,    -1,     9,   156,    -1,   319,
01334       -1,   281,    -1,   278,    -1,   280,    -1,   261,    -1,    62,
01335       -1,   262,    -1,   261,   262,    -1,    99,   270,   106,    -1,
01336      100,   271,   106,    -1,   101,   272,    65,    -1,   102,   146,
01337      106,    -1,   102,   266,   106,    -1,    -1,   266,   267,   146,
01338       -1,   273,    -1,   267,   273,    -1,   103,   146,   106,    -1,
01339      103,   269,   106,    -1,    -1,   269,    61,   146,    -1,    -1,
01340      270,   273,    -1,    -1,   271,   273,    -1,    -1,   272,   273,
01341       -1,    61,    -1,    -1,   105,   274,   277,    -1,    -1,    -1,
01342      104,   275,   276,   156,   137,    -1,    54,    -1,    55,    -1,
01343       57,    -1,   285,    -1,    98,   279,    -1,   177,    -1,    55,
01344       -1,    54,    -1,    57,    -1,    98,   271,   106,    -1,    59,
01345       -1,    60,    -1,   122,    59,    -1,   122,    60,    -1,    52,
01346       -1,    55,    -1,    54,    -1,    56,    -1,    57,    -1,    34,
01347       -1,    33,    -1,    35,    -1,    36,    -1,    50,    -1,    49,
01348       -1,    51,    -1,   282,    -1,   282,    -1,    63,    -1,    64,
01349       -1,   317,    -1,    -1,   113,   287,   161,   317,    -1,     1,
01350      317,    -1,   142,   289,   314,    -1,   289,   317,    -1,   293,
01351      140,   297,   140,   299,   302,    -1,   293,   140,   297,   140,
01352      299,   140,   293,   302,    -1,   293,   140,   297,   302,    -1,
01353      293,   140,   297,   140,   293,   302,    -1,   293,   140,   299,
01354      302,    -1,   293,   140,   299,   140,   293,   302,    -1,   293,
01355      302,    -1,   297,   140,   299,   302,    -1,   297,   140,   299,
01356      140,   293,   302,    -1,   297,   302,    -1,   297,   140,   293,
01357      302,    -1,   299,   302,    -1,   299,   140,   293,   302,    -1,
01358      301,    -1,    -1,    56,    -1,    55,    -1,    54,    -1,    57,
01359       -1,   290,    -1,    52,    -1,   291,    -1,    89,   234,   314,
01360       -1,   292,    -1,   293,   140,   292,    -1,    52,   109,   186,
01361       -1,    52,   109,   215,    -1,   295,    -1,   296,   140,   295,
01362       -1,   294,    -1,   297,   140,   294,    -1,   119,    -1,    95,
01363       -1,   298,    52,    -1,   298,    -1,   116,    -1,    96,    -1,
01364      300,    52,    -1,   140,   301,    -1,   319,    -1,   283,    -1,
01365       -1,   142,   304,   160,   314,    -1,   319,    -1,   306,   316,
01366       -1,   307,    -1,   306,   140,   307,    -1,   186,    88,   186,
01367       -1,    58,   186,    -1,    52,    -1,    56,    -1,    53,    -1,
01368       52,    -1,    56,    -1,    53,    -1,   182,    -1,    52,    -1,
01369       53,    -1,   182,    -1,   139,    -1,    85,    -1,    -1,   318,
01370       -1,    -1,   147,    -1,   313,   143,    -1,   313,   144,    -1,
01371       -1,   147,    -1,   140,    -1,   145,    -1,   147,    -1,   317,
01372       -1,   318,   145,    -1,    -1
01373 };
01374 
01375 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
01376 static const yytype_uint16 yyrline[] =
01377 {
01378        0,   786,   786,   786,   817,   828,   837,   845,   853,   859,
01379      861,   860,   884,   917,   928,   937,   945,   953,   959,   959,
01380      967,   975,   986,   996,  1004,  1013,  1022,  1035,  1048,  1057,
01381     1069,  1078,  1088,  1117,  1138,  1155,  1172,  1183,  1200,  1210,
01382     1219,  1228,  1237,  1240,  1241,  1249,  1257,  1265,  1273,  1276,
01383     1288,  1289,  1292,  1293,  1302,  1314,  1313,  1335,  1344,  1356,
01384     1365,  1377,  1386,  1398,  1407,  1416,  1424,  1432,  1442,  1443,
01385     1453,  1454,  1464,  1472,  1480,  1488,  1497,  1505,  1514,  1522,
01386     1531,  1539,  1550,  1551,  1561,  1569,  1579,  1587,  1597,  1601,
01387     1609,  1617,  1625,  1633,  1645,  1655,  1667,  1676,  1684,  1692,
01388     1700,  1708,  1721,  1734,  1745,  1753,  1756,  1764,  1772,  1782,
01389     1783,  1784,  1785,  1790,  1801,  1802,  1805,  1813,  1816,  1824,
01390     1824,  1834,  1835,  1836,  1837,  1838,  1839,  1840,  1841,  1842,
01391     1843,  1844,  1845,  1846,  1847,  1848,  1849,  1850,  1851,  1852,
01392     1853,  1854,  1855,  1856,  1857,  1858,  1859,  1860,  1861,  1862,
01393     1865,  1865,  1865,  1866,  1866,  1867,  1867,  1867,  1868,  1868,
01394     1868,  1868,  1869,  1869,  1869,  1869,  1870,  1870,  1870,  1871,
01395     1871,  1871,  1871,  1872,  1872,  1872,  1872,  1873,  1873,  1873,
01396     1873,  1874,  1874,  1874,  1874,  1875,  1875,  1875,  1875,  1876,
01397     1876,  1879,  1888,  1898,  1927,  1958,  1984,  2001,  2018,  2035,
01398     2046,  2057,  2068,  2082,  2096,  2104,  2112,  2120,  2128,  2136,
01399     2144,  2153,  2162,  2170,  2178,  2186,  2194,  2202,  2210,  2218,
01400     2226,  2234,  2242,  2250,  2258,  2266,  2277,  2285,  2293,  2301,
01401     2309,  2317,  2325,  2333,  2333,  2343,  2353,  2359,  2371,  2372,
01402     2376,  2384,  2394,  2404,  2405,  2408,  2409,  2412,  2421,  2429,
01403     2439,  2448,  2457,  2457,  2469,  2479,  2483,  2487,  2493,  2501,
01404     2509,  2523,  2539,  2553,  2568,  2578,  2579,  2580,  2581,  2582,
01405     2583,  2584,  2585,  2586,  2595,  2594,  2619,  2619,  2628,  2636,
01406     2644,  2652,  2665,  2673,  2681,  2689,  2697,  2705,  2705,  2715,
01407     2723,  2731,  2742,  2743,  2754,  2758,  2770,  2782,  2782,  2782,
01408     2793,  2793,  2793,  2804,  2815,  2824,  2826,  2823,  2890,  2889,
01409     2911,  2916,  2910,  2935,  2934,  2956,  2955,  2978,  2979,  2978,
01410     2999,  3007,  3015,  3023,  3033,  3045,  3051,  3057,  3063,  3069,
01411     3075,  3081,  3087,  3093,  3099,  3109,  3115,  3120,  3121,  3128,
01412     3133,  3136,  3137,  3150,  3151,  3161,  3162,  3165,  3173,  3183,
01413     3191,  3201,  3209,  3218,  3227,  3235,  3243,  3252,  3264,  3272,
01414     3282,  3290,  3298,  3306,  3314,  3322,  3331,  3339,  3347,  3355,
01415     3363,  3371,  3379,  3387,  3395,  3405,  3406,  3412,  3421,  3430,
01416     3441,  3442,  3452,  3459,  3468,  3476,  3482,  3485,  3482,  3503,
01417     3511,  3521,  3525,  3532,  3531,  3552,  3568,  3577,  3588,  3597,
01418     3607,  3617,  3625,  3636,  3647,  3655,  3663,  3678,  3677,  3697,
01419     3696,  3717,  3729,  3730,  3733,  3752,  3755,  3763,  3771,  3774,
01420     3778,  3781,  3789,  3792,  3793,  3801,  3804,  3821,  3822,  3823,
01421     3833,  3843,  3870,  3935,  3944,  3955,  3962,  3972,  3980,  3990,
01422     3999,  4010,  4017,  4028,  4035,  4046,  4053,  4064,  4071,  4100,
01423     4102,  4101,  4118,  4124,  4117,  4143,  4151,  4159,  4167,  4170,
01424     4181,  4182,  4183,  4184,  4187,  4217,  4218,  4219,  4227,  4237,
01425     4238,  4239,  4240,  4241,  4242,  4243,  4244,  4245,  4246,  4247,
01426     4248,  4251,  4261,  4271,  4272,  4275,  4284,  4283,  4291,  4303,
01427     4313,  4319,  4327,  4335,  4343,  4351,  4359,  4367,  4375,  4383,
01428     4391,  4399,  4407,  4415,  4423,  4432,  4441,  4450,  4459,  4468,
01429     4479,  4480,  4487,  4496,  4515,  4522,  4535,  4547,  4559,  4567,
01430     4583,  4591,  4607,  4608,  4611,  4624,  4635,  4636,  4639,  4656,
01431     4660,  4670,  4680,  4680,  4709,  4710,  4720,  4727,  4737,  4745,
01432     4755,  4756,  4757,  4760,  4761,  4762,  4763,  4766,  4767,  4768,
01433     4771,  4776,  4783,  4784,  4787,  4788,  4791,  4794,  4797,  4798,
01434     4799,  4802,  4803,  4806,  4807,  4811
01435 };
01436 #endif
01437 
01438 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01439 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01440    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
01441 static const char *const yytname[] =
01442 {
01443   "$end", "error", "$undefined", "keyword_class", "keyword_module",
01444   "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01445   "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01446   "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01447   "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01448   "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01449   "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01450   "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01451   "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01452   "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01453   "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01454   "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01455   "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01456   "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01457   "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01458   "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01459   "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01460   "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01461   "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01462   "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01463   "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01464   "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01465   "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01466   "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01467   "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01468   "id_core_set_variable_alias", "id_core_undef_method",
01469   "id_core_define_method", "id_core_define_singleton_method",
01470   "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01471   "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01472   "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01473   "compstmt", "stmts", "stmt", "$@3", "expr", "expr_value", "command_call",
01474   "block_command", "cmd_brace_block", "@4", "command", "mlhs",
01475   "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
01476   "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
01477   "undef_list", "$@5", "op", "reswords", "arg", "$@6", "arg_value",
01478   "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01479   "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01480   "mrhs", "primary", "@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
01481   "$@15", "$@16", "@17", "@18", "@19", "@20", "@21", "$@22", "$@23",
01482   "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until",
01483   "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do",
01484   "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01485   "block_param", "opt_block_param", "block_param_def", "opt_bv_decl",
01486   "bv_decls", "bvar", "lambda", "@24", "@25", "f_larglist", "lambda_body",
01487   "do_block", "@26", "block_call", "method_call", "brace_block", "@27",
01488   "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
01489   "opt_ensure", "literal", "strings", "string", "string1", "xstring",
01490   "regexp", "words", "word_list", "word", "qwords", "qword_list",
01491   "string_contents", "xstring_contents", "regexp_contents",
01492   "string_content", "@29", "@30", "@31", "string_dvar", "symbol", "sym",
01493   "dsym", "numeric", "variable", "var_ref", "var_lhs", "backref",
01494   "superclass", "$@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01495   "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01496   "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01497   "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", "assoc",
01498   "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01499   "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01500 };
01501 #endif
01502 
01503 # ifdef YYPRINT
01504 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
01505    token YYLEX-NUM.  */
01506 static const yytype_uint16 yytoknum[] =
01507 {
01508        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
01509      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
01510      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
01511      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
01512      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
01513      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
01514      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
01515      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
01516      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
01517      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
01518      355,   356,   357,   358,   359,   360,   361,   362,   363,    61,
01519       63,    58,    62,    60,   124,    94,    38,    43,    45,    42,
01520       47,    37,   364,    33,   126,   365,   366,   367,   368,   369,
01521      370,   371,   372,   373,   374,   375,   123,   125,    91,    46,
01522       44,    96,    40,    41,    93,    59,    32,    10
01523 };
01524 # endif
01525 
01526 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
01527 static const yytype_uint16 yyr1[] =
01528 {
01529        0,   148,   150,   149,   151,   152,   152,   152,   152,   153,
01530      154,   153,   155,   156,   157,   157,   157,   157,   159,   158,
01531      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01532      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01533      158,   158,   158,   160,   160,   160,   160,   160,   160,   161,
01534      162,   162,   163,   163,   163,   165,   164,   166,   166,   166,
01535      166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
01536      168,   168,   169,   169,   169,   169,   169,   169,   169,   169,
01537      169,   169,   170,   170,   171,   171,   172,   172,   173,   173,
01538      173,   173,   173,   173,   173,   173,   174,   174,   174,   174,
01539      174,   174,   174,   174,   175,   175,   176,   176,   176,   177,
01540      177,   177,   177,   177,   178,   178,   179,   179,   180,   181,
01541      180,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01542      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01543      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01544      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01545      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01546      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01547      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01548      183,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01549      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01550      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01551      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01552      184,   184,   184,   185,   184,   184,   184,   186,   187,   187,
01553      187,   187,   188,   189,   189,   190,   190,   191,   191,   191,
01554      191,   191,   193,   192,   194,   195,   195,   195,   196,   196,
01555      196,   196,   197,   197,   197,   198,   198,   198,   198,   198,
01556      198,   198,   198,   198,   199,   198,   200,   198,   198,   198,
01557      198,   198,   198,   198,   198,   198,   198,   201,   198,   198,
01558      198,   198,   198,   198,   198,   198,   198,   202,   203,   198,
01559      204,   205,   198,   198,   198,   206,   207,   198,   208,   198,
01560      209,   210,   198,   211,   198,   212,   198,   213,   214,   198,
01561      198,   198,   198,   198,   215,   216,   217,   218,   219,   220,
01562      221,   222,   223,   224,   225,   226,   227,   227,   227,   228,
01563      228,   229,   229,   230,   230,   231,   231,   232,   232,   233,
01564      233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
01565      235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
01566      235,   235,   235,   235,   235,   236,   236,   237,   237,   237,
01567      238,   238,   239,   239,   240,   240,   242,   243,   241,   244,
01568      244,   245,   245,   247,   246,   248,   248,   248,   249,   249,
01569      249,   249,   249,   249,   249,   249,   249,   251,   250,   252,
01570      250,   253,   254,   254,   255,   255,   256,   256,   256,   257,
01571      257,   258,   258,   259,   259,   259,   260,   261,   261,   261,
01572      262,   263,   264,   265,   265,   266,   266,   267,   267,   268,
01573      268,   269,   269,   270,   270,   271,   271,   272,   272,   273,
01574      274,   273,   275,   276,   273,   277,   277,   277,   277,   278,
01575      279,   279,   279,   279,   280,   281,   281,   281,   281,   282,
01576      282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
01577      282,   283,   284,   285,   285,   286,   287,   286,   286,   288,
01578      288,   289,   289,   289,   289,   289,   289,   289,   289,   289,
01579      289,   289,   289,   289,   289,   289,   290,   290,   290,   290,
01580      291,   291,   292,   292,   293,   293,   294,   295,   296,   296,
01581      297,   297,   298,   298,   299,   299,   300,   300,   301,   302,
01582      302,   303,   304,   303,   305,   305,   306,   306,   307,   307,
01583      308,   308,   308,   309,   309,   309,   309,   310,   310,   310,
01584      311,   311,   312,   312,   313,   313,   314,   315,   316,   316,
01585      316,   317,   317,   318,   318,   319
01586 };
01587 
01588 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
01589 static const yytype_uint8 yyr2[] =
01590 {
01591        0,     2,     0,     2,     2,     1,     1,     3,     2,     1,
01592        0,     5,     4,     2,     1,     1,     3,     2,     0,     4,
01593        3,     3,     3,     2,     3,     3,     3,     3,     3,     4,
01594        3,     3,     3,     6,     5,     5,     5,     5,     3,     3,
01595        3,     3,     1,     1,     3,     3,     3,     2,     1,     1,
01596        1,     1,     1,     4,     4,     0,     5,     2,     3,     4,
01597        5,     4,     5,     2,     2,     2,     2,     2,     1,     3,
01598        1,     3,     1,     2,     3,     5,     2,     4,     2,     4,
01599        1,     3,     1,     3,     2,     3,     1,     3,     1,     4,
01600        3,     3,     3,     3,     2,     1,     1,     4,     3,     3,
01601        3,     3,     2,     1,     1,     1,     2,     1,     3,     1,
01602        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
01603        4,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01604        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01605        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01606        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01607        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01608        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01609        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01610        1,     3,     5,     3,     5,     6,     5,     5,     5,     5,
01611        4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
01612        4,     4,     2,     2,     3,     3,     3,     3,     3,     3,
01613        3,     3,     3,     3,     3,     3,     3,     2,     2,     3,
01614        3,     3,     3,     0,     4,     6,     1,     1,     1,     2,
01615        4,     2,     3,     1,     1,     1,     1,     1,     2,     2,
01616        4,     1,     0,     2,     2,     2,     1,     1,     1,     2,
01617        3,     4,     3,     4,     2,     1,     1,     1,     1,     1,
01618        1,     1,     1,     1,     0,     4,     0,     4,     3,     3,
01619        2,     3,     3,     1,     4,     3,     1,     0,     6,     4,
01620        3,     2,     1,     2,     2,     6,     6,     0,     0,     7,
01621        0,     0,     7,     5,     4,     0,     0,     9,     0,     6,
01622        0,     0,     8,     0,     5,     0,     6,     0,     0,     9,
01623        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01624        1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
01625        1,     1,     5,     1,     2,     1,     1,     1,     3,     1,
01626        3,     1,     4,     6,     3,     5,     2,     4,     1,     3,
01627        6,     8,     4,     6,     4,     2,     6,     2,     4,     6,
01628        2,     4,     2,     4,     1,     1,     1,     3,     1,     4,
01629        1,     2,     1,     3,     1,     1,     0,     0,     4,     4,
01630        1,     3,     3,     0,     5,     2,     4,     4,     2,     4,
01631        4,     3,     3,     3,     2,     1,     4,     0,     5,     0,
01632        5,     5,     1,     1,     6,     1,     1,     1,     1,     2,
01633        1,     2,     1,     1,     1,     1,     1,     1,     1,     2,
01634        3,     3,     3,     3,     3,     0,     3,     1,     2,     3,
01635        3,     0,     3,     0,     2,     0,     2,     0,     2,     1,
01636        0,     3,     0,     0,     5,     1,     1,     1,     1,     2,
01637        1,     1,     1,     1,     3,     1,     1,     2,     2,     1,
01638        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01639        1,     1,     1,     1,     1,     1,     0,     4,     2,     3,
01640        2,     6,     8,     4,     6,     4,     6,     2,     4,     6,
01641        2,     4,     2,     4,     1,     0,     1,     1,     1,     1,
01642        1,     1,     1,     3,     1,     3,     3,     3,     1,     3,
01643        1,     3,     1,     1,     2,     1,     1,     1,     2,     2,
01644        1,     1,     0,     4,     1,     2,     1,     3,     3,     2,
01645        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01646        1,     1,     0,     1,     0,     1,     2,     2,     0,     1,
01647        1,     1,     1,     1,     2,     0
01648 };
01649 
01650 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
01651    STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
01652    means the default is an error.  */
01653 static const yytype_uint16 yydefact[] =
01654 {
01655        2,     0,     0,     1,     0,   332,   333,   334,     0,   325,
01656      326,   327,   330,   328,   329,   331,   320,   321,   322,   323,
01657      283,   252,   252,   475,   474,   476,   477,   554,     0,   554,
01658       10,     0,   479,   478,   480,   469,   542,   471,   470,   472,
01659      473,   465,   466,   427,   483,   484,     0,     0,     0,     0,
01660        0,   565,   565,    80,   386,   445,   443,   445,   447,   435,
01661      441,     0,     0,     0,     3,   552,     6,     9,    42,    43,
01662       51,    50,     0,    68,     0,    72,    82,     0,    48,   236,
01663        0,   274,     0,     0,   297,   300,   552,     0,     0,     0,
01664        0,    52,   292,   265,   266,   426,   428,   267,   268,   269,
01665      270,   424,   425,   423,   481,   271,     0,   272,   252,     5,
01666        8,   160,   171,   161,   184,   157,   177,   167,   166,   187,
01667      188,   182,   165,   164,   159,   185,   189,   190,   169,   158,
01668      172,   176,   178,   170,   163,   179,   186,   181,   180,   173,
01669      183,   168,   156,   175,   174,   155,   162,   153,   154,   150,
01670      151,   152,   109,   111,   110,   145,   146,   142,   124,   125,
01671      126,   133,   130,   132,   127,   128,   147,   148,   134,   135,
01672      139,   129,   131,   121,   122,   123,   136,   137,   138,   140,
01673      141,   143,   144,   149,   114,   116,   118,    23,   112,   113,
01674      115,   117,     0,     0,     0,     0,     0,     0,     0,   247,
01675        0,   237,   258,    66,   251,   565,     0,   481,     0,   272,
01676      565,   536,    67,    65,   554,    64,     0,   565,   404,    63,
01677      554,   555,     0,     0,    18,   233,     0,     0,   320,   321,
01678      283,   286,   405,   212,     0,     0,   213,   280,     0,     0,
01679        0,   552,    15,   554,    70,    14,   276,     0,   558,   558,
01680      238,     0,     0,   558,   534,   554,     0,     0,     0,    78,
01681      324,     0,    88,    95,   294,   387,   462,   461,   463,   460,
01682        0,   459,     0,     0,     0,     0,     0,     0,     0,   467,
01683      468,    47,   227,   228,   561,   562,     4,   563,   553,     0,
01684        0,     0,     0,     0,     0,     0,   393,   395,     0,    84,
01685        0,    76,    73,     0,     0,     0,     0,     0,     0,     0,
01686        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01687        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01688        0,   565,     0,     0,    49,     0,     0,     0,     0,   552,
01689        0,   553,     0,   346,   345,     0,     0,   481,   272,   104,
01690      105,     0,     0,   107,     0,     0,   481,   272,   313,   180,
01691      173,   183,   168,   150,   151,   152,   109,   110,   532,   315,
01692      531,     0,     0,     0,   409,   407,   293,   429,     0,     0,
01693      398,    57,   291,   119,   539,   280,   259,   254,     0,     0,
01694      256,   248,   257,     0,   565,     0,     0,     0,   256,   249,
01695      554,     0,   285,   253,   554,   246,   245,   554,   290,    46,
01696       20,    22,    21,     0,   287,     0,     0,     0,     0,     0,
01697        0,    17,   554,   278,    13,   553,    69,   554,   281,   560,
01698      559,   239,   560,   241,   282,   535,     0,    94,   467,   468,
01699       86,    81,     0,     0,   565,     0,   505,   449,   452,   450,
01700      464,   446,   430,   444,   431,   432,   448,   433,   434,     0,
01701      437,   439,     0,   440,     0,     0,   564,     7,    24,    25,
01702       26,    27,    28,    44,    45,   565,     0,    31,    40,     0,
01703       41,   554,     0,    74,    85,    30,   191,   258,    39,   209,
01704      217,   222,   223,   224,   219,   221,   231,   232,   225,   226,
01705      202,   203,   229,   230,   554,   218,   220,   214,   215,   216,
01706      204,   205,   206,   207,   208,   543,   548,   544,   549,   403,
01707      252,   401,   554,   543,   545,   544,   546,   402,   252,     0,
01708      565,   337,     0,   336,     0,     0,     0,     0,     0,     0,
01709      280,     0,   565,     0,   305,   310,   104,   105,   106,     0,
01710      486,   308,   485,     0,   565,     0,     0,     0,   505,   551,
01711      550,   317,   543,   544,   252,   252,   565,   565,    32,   193,
01712       38,   201,    55,    58,     0,   191,   538,     0,   260,   255,
01713      565,   547,   544,   554,   543,   544,   537,   284,   556,   242,
01714      289,    19,     0,   234,     0,    29,     0,   565,   200,    71,
01715       16,   277,   558,     0,    79,    91,    93,   554,   543,   544,
01716      511,   508,   507,   506,   509,     0,   523,   527,   526,   522,
01717      505,     0,   390,   510,   512,   514,   565,   520,   565,   525,
01718      565,     0,   504,   453,     0,   436,   438,   442,   210,   211,
01719      378,   565,     0,   376,   375,   264,     0,    83,    77,     0,
01720        0,     0,     0,     0,   400,    61,     0,   406,     0,     0,
01721      244,   399,    59,   243,   335,   275,   565,   565,   415,   565,
01722      338,   565,   340,   298,   339,   301,     0,     0,   304,   547,
01723      279,   554,   543,   544,     0,     0,   488,     0,     0,   104,
01724      105,   108,   554,     0,   554,   505,     0,     0,     0,   397,
01725       54,   396,    53,     0,     0,     0,   565,   120,   261,   250,
01726        0,     0,   406,     0,     0,   554,    11,   240,    87,    89,
01727        0,   511,     0,   358,   349,   351,   554,   347,   565,     0,
01728        0,   388,     0,   497,   530,     0,   500,   524,     0,   502,
01729      528,     0,   455,   456,   457,   451,   458,   511,     0,   565,
01730        0,   565,   518,   565,   565,   374,   380,     0,     0,   262,
01731       75,   192,     0,    37,   198,    36,   199,    62,   557,     0,
01732       34,   196,    35,   197,    60,   416,   417,   565,   418,     0,
01733      565,   343,     0,     0,   341,     0,     0,     0,   303,     0,
01734        0,   406,     0,   311,     0,     0,   406,   314,   533,   554,
01735        0,   490,   318,     0,     0,   194,     0,     0,   288,   516,
01736      554,     0,   356,     0,   513,   554,     0,     0,   515,   565,
01737      565,   529,   565,   521,   565,   565,     0,     0,   384,   381,
01738      382,   385,     0,   377,   365,   367,     0,   370,     0,   372,
01739      394,   263,   235,    33,   195,     0,     0,   420,   344,     0,
01740       12,   422,     0,   295,   296,     0,     0,   260,   565,   306,
01741        0,   487,   309,   489,   316,   505,   410,   408,     0,   348,
01742      359,     0,   354,   350,   389,   392,   391,     0,   493,     0,
01743      495,     0,   501,     0,   498,   503,   454,     0,   517,     0,
01744      379,   565,   565,   565,   519,   565,   565,     0,   419,     0,
01745       96,   103,     0,   421,     0,   299,   302,   412,   413,   411,
01746        0,     0,     0,    56,     0,   357,     0,   352,   565,   565,
01747      565,   565,   280,     0,   383,     0,   362,     0,   364,   371,
01748        0,   368,   373,   102,     0,   565,     0,   565,   565,     0,
01749      312,     0,   355,     0,   494,     0,   491,   496,   499,   547,
01750      279,   565,   565,   565,   565,   547,   101,   554,   543,   544,
01751      414,   342,   307,   319,   353,   565,   363,     0,   360,   366,
01752      369,   406,   492,   565,   361
01753 };
01754 
01755 /* YYDEFGOTO[NTERM-NUM].  */
01756 static const yytype_int16 yydefgoto[] =
01757 {
01758       -1,     1,     2,    64,    65,    66,   226,   529,   530,   241,
01759      242,   413,    68,   335,    69,    70,   573,   706,    71,    72,
01760      243,    73,    74,    75,   441,    76,   200,   353,   354,   184,
01761      185,   186,   187,   574,   526,   189,    78,   415,   202,   247,
01762      519,   661,   404,   405,   215,   216,   204,   391,   205,   480,
01763       79,   333,   427,   592,   337,   786,   338,   787,   684,   910,
01764      688,   685,   860,   556,   558,   698,   865,   234,    81,    82,
01765       83,    84,    85,    86,    87,    88,    89,    90,   665,   532,
01766      673,   783,   784,   346,   724,   725,   726,   749,   642,   643,
01767      750,   829,   830,   264,   265,   446,   621,   731,   297,   475,
01768       91,    92,   382,   567,   566,   539,   909,   667,   777,   846,
01769      850,    93,    94,    95,    96,    97,    98,    99,   276,   459,
01770      100,   278,   272,   270,   274,   451,   634,   633,   741,   745,
01771      101,   271,   102,   103,   207,   105,   208,   209,   551,   687,
01772      696,   697,   623,   624,   625,   626,   627,   752,   753,   628,
01773      629,   630,   631,   821,   733,   371,   557,   252,   210,   211,
01774      108,   596,   521,   561,   286,   401,   402,   657,   431,   533,
01775      341,   245
01776 };
01777 
01778 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
01779    STATE-NUM.  */
01780 #define YYPACT_NINF -778
01781 static const yytype_int16 yypact[] =
01782 {
01783     -778,   133,  2394,  -778,  7010,  -778,  -778,  -778,  6523,  -778,
01784     -778,  -778,  -778,  -778,  -778,  -778,  7228,  7228,  -778,  -778,
01785     7228,  3145,  2722,  -778,  -778,  -778,  -778,   164,  6384,   -11,
01786     -778,    69,  -778,  -778,  -778,  5623,  2863,  -778,  -778,  5750,
01787     -778,  -778,  -778,  -778,  -778,  -778,  8427,  8427,    96,  4342,
01788     8536,  7446,  7773,  6786,  -778,  6245,  -778,  -778,  -778,    74,
01789       93,   122,  8645,  8427,  -778,   187,  -778,   698,   288,  -778,
01790     -778,   230,   167,  -778,   180,  8754,  -778,   234,  2846,   273,
01791      310,  -778,  8536,  8536,  -778,  -778,  4986,  8859,  8964,  9069,
01792     5496,    16,    60,  -778,  -778,   174,  -778,  -778,  -778,  -778,
01793     -778,  -778,  -778,  -778,   201,  -778,   258,   282,   206,  -778,
01794     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01795     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01796     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01797     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01798     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01799     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01800     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01801     -778,  -778,  -778,  -778,  -778,  -778,  -778,   212,  -778,  -778,
01802     -778,  -778,   215,  8427,   303,  4472,  8427,  8427,  8427,  -778,
01803      257,  2846,   285,  -778,  -778,   281,   343,    38,   337,   263,
01804      290,  -778,  -778,  -778,  4877,  -778,  7228,  7228,  -778,  -778,
01805     5116,  -778,  8536,   599,  -778,   296,   315,  4602,  -778,  -778,
01806     -778,   311,   328,  -778,   347,   206,   396,   446,  7119,  4342,
01807      329,   187,   698,   -11,   370,  -778,   288,   339,   -30,    30,
01808     -778,   285,   356,    30,  -778,   -11,   442,   375,  9174,   390,
01809     -778,   351,   373,   383,  -778,  -778,  -778,  -778,  -778,  -778,
01810      515,  -778,   552,   587,   620,   397,   607,   407,    34,   473,
01811      474,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  5225,  8536,
01812     8536,  8536,  8536,  7119,  8536,  8536,  -778,  -778,  7882,  -778,
01813     4342,  6898,   413,  7882,  8427,  8427,  8427,  8427,  8427,  8427,
01814     8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,
01815     8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,
01816     1712,  7228,  2060,  3517,   288,    80,    80,  8536,  8536,   187,
01817      534,   416,   516,  -778,  -778,   386,   568,    50,    72,   301,
01818      321,  8536,   363,  -778,    66,   393,  -778,  -778,  -778,    36,
01819       41,   103,   224,   259,   266,   322,   348,   369,  -778,  -778,
01820     -778,   377, 10211, 10211,  -778,  -778,  -778,  -778,  8645,  8645,
01821     -778,   483,  -778,  -778,  -778,   268,  -778,  -778,  8427,  8427,
01822     7337,  -778,  -778,  2216,  7228,  9441,  8427,  8427,  7555,  -778,
01823      -11,   454,  -778,  -778,   -11,  -778,  -778,    70,  -778,  -778,
01824     -778,  -778,  -778,  6523,  -778,  8427,  3937,   463,  2216,  9441,
01825     8427,   698,   -11,  -778,  -778,  5353,   462,   -11,  -778,  7664,
01826     -778,  -778,  7773,  -778,  -778,  -778,   296,   411,  -778,  -778,
01827     -778,   467,  9174,  9518,  7228,  9595,  1033,  -778,  -778,  -778,
01828     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,    39,
01829     -778,  -778,   472,  -778,  8427,  8427,  -778,  -778,  -778,  -778,
01830     -778,  -778,  -778,  -778,  -778,    28,  8427,  -778,   468,   487,
01831     -778,   -11,  9174,   496,  -778,  -778,  1576,  -778,  -778,   396,
01832     1512,  1512,  1512,  1512,  1223,  1223,  1879,  2079,  1512,  1512,
01833     2146,  2146,   582,   582,  2705,  1223,  1223,  1098,  1098,   790,
01834      514,   514,   396,   396,   396,  3286,  5991,  3372,  6105,  -778,
01835      328,  -778,   -11,   448,  -778,   451,  -778,  -778,  3004,   639,
01836      644,  -778,  3662,   646,  4082,    42,    42,   534,  7991,   639,
01837      109,  9672,  7228,  9749,  -778,   288,  -778,   411,  -778,   187,
01838     -778,  -778,  -778,  9826,  7228,  9903,  3517,  8536,  1115,  -778,
01839     -778,  -778,  -778,  -778,  1235,  1235,    28,    28,  -778, 10270,
01840     -778,  2846,  -778,  -778,  6523, 10289,  -778,  8427,   285,  -778,
01841      290,  5877,  2581,   -11,   410,   529,  -778,  -778,  -778,  -778,
01842     -778,  -778,  8536,  2846,   535,  -778,   328,   328,  2846,    20,
01843      698,  -778,    30,  9174,   467,   338,   271,   -11,   228,   261,
01844      557,  -778,  -778,  -778,  -778,   666,  -778,  -778,  -778,  -778,
01845      923,    43,  -778,  -778,  -778,  -778,   543,  -778,   544,   623,
01846      547,   642,  -778,  -778,   722,  -778,  -778,  -778,   396,   396,
01847     -778,   904,  4747,  -778,  -778,   555,  8100,  -778,   467,  9174,
01848     8427,   598,  8645,  8645,  -778,   483,   570,   538,  8645,  8645,
01849     -778,  -778,   483,  -778,  -778,  -778,  8209,   701,  -778,   441,
01850     -778,   701,  -778,  -778,  -778,  -778,   639,    31,  -778,   110,
01851      132,   -11,   126,   144,  8536,   187,  -778,  8536,  3517,   338,
01852      271,  -778,   -11,   639,    70,   923,  3517,   187,  6662,  -778,
01853     -778,  -778,  -778,  4747,  4602,  8427,    28,  -778,  -778,  -778,
01854     8427,  8427,   536,  8427,  8427,    70,  -778,  -778,  -778,   251,
01855     8427,  -778,   666,   450,  -778,   579,   -11,  -778,   583,  4747,
01856     4602,  -778,   923,  -778,  -778,   923,  -778,  -778,   779,  -778,
01857     -778,  4602,  -778,  -778,  -778,  -778,  -778,   625,   809,   583,
01858      615,   595,  -778,   604,   605,  -778,  -778,   740,  8427,   619,
01859      467,  2846,  8427,  -778,  2846,  -778,  2846,  -778,  -778,  8645,
01860     -778,  2846,  -778,  2846,  -778,   468,  -778,   675,  -778,  4212,
01861      757,  -778,  8536,   639,  -778,   639,  4747,  4747,  -778,  8318,
01862     3807,   147,    42,  -778,   187,   639,  -778,  -778,  -778,   -11,
01863      639,  -778,  -778,   759,   630,  2846,  4602,  8427,  -778,  -778,
01864      -11,   845,   632,   826,  -778,   -11,   760,   637,  -778,   640,
01865      643,  -778,   647,  -778,   651,   647,   656,  9279,  -778,   657,
01866     -778,  -778,   682,  -778,  1199,  -778,  1199,  -778,   779,  -778,
01867     -778,   658,  2846,  -778,  2846,  9384,    80,  -778,  -778,  4747,
01868     -778,  -778,    80,  -778,  -778,   639,   639,  -778,   115,  -778,
01869     3517,  -778,  -778,  -778,  -778,  1115,  -778,  -778,   664,  -778,
01870      662,   845,   491,  -778,  -778,  -778,  -778,   923,  -778,   779,
01871     -778,   779,  -778,   779,  -778,  -778,  -778,   751,   429,   809,
01872     -778,   672,   673,   647,  -778,   679,   647,   765,  -778,   432,
01873      373,   383,  3517,  -778,  3662,  -778,  -778,  -778,  -778,  -778,
01874     4747,   639,  3517,  -778,   845,   662,   845,   685,   647,   686,
01875      647,   647,  -778,  9980,  -778,  1199,  -778,   779,  -778,  -778,
01876      779,  -778,  -778,   411, 10057,  7228, 10134,   644,   441,   639,
01877     -778,   639,   662,   845,  -778,   779,  -778,  -778,  -778,   688,
01878      690,   647,   687,   647,   647,    81,   271,   -11,    86,   118,
01879     -778,  -778,  -778,  -778,   662,   647,  -778,   779,  -778,  -778,
01880     -778,   124,  -778,   647,  -778
01881 };
01882 
01883 /* YYPGOTO[NTERM-NUM].  */
01884 static const yytype_int16 yypgoto[] =
01885 {
01886     -778,  -778,  -778,   399,  -778,    33,  -778,  -530,   -33,  -778,
01887      159,  -778,    23,   -55,    21,  -778,  -462,  -778,   -15,   741,
01888     -136,    -1,   -66,  -778,  -403,   -26,  1181,  -306,   750,   -52,
01889     -778,   -20,  -778,  -778,    32,  -778,   748,  -778,   540,  -778,
01890       46,   -98,  -298,    54,    76,  -778,  -278,  -196,   -44,  -283,
01891       27,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01892     -778,  -778,  -778,  -778,  -778,  -778,  -778,     2,  -778,  -778,
01893     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,   298,  -323,
01894     -512,   -97,  -610,  -778,  -755,  -748,   120,  -778,  -485,  -778,
01895     -636,  -778,   -49,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01896     -778,  -778,   752,  -778,  -778,  -520,  -778,   -92,  -778,  -778,
01897     -778,  -778,  -778,  -778,   753,  -778,  -778,  -778,  -778,  -778,
01898     -778,  -778,  -778,   792,  -778,  -229,  -778,  -778,  -778,  -778,
01899        7,  -778,    13,  -778,  1031,   762,  1198,  1109,  -778,  -778,
01900      -12,  -416,  -706,  -549,  -667,  -121,  -679,  -777,    25,   128,
01901     -778,  -579,  -778,  -434,   531,  -778,  -778,  -778,   -41,  -287,
01902     1927,  -254,  -778,  -778,   -32,    -4,    88,  -554,  -217,    63,
01903      -31,    -2
01904 };
01905 
01906 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
01907    positive, shift that token.  If negative, reduce the rule which
01908    number is the opposite.  If zero, do what YYDEFACT says.
01909    If YYTABLE_NINF, syntax error.  */
01910 #define YYTABLE_NINF -566
01911 static const yytype_int16 yytable[] =
01912 {
01913      109,   199,   199,   269,    80,   199,    80,   248,   224,   302,
01914      249,   253,   632,   534,   399,   190,   240,   676,   206,   206,
01915      488,   191,   206,   222,   675,   225,   693,   259,   336,   712,
01916      622,   339,   433,   522,   288,   190,   435,   110,   369,   604,
01917      188,   191,   831,   453,   531,   456,   548,   460,   244,   250,
01918      254,    80,   206,   719,   340,   261,   823,   780,   873,   894,
01919      188,   785,   754,   870,   206,   818,   727,   549,   218,   672,
01920      203,   212,   729,   246,   213,   -96,   520,   261,   528,   648,
01921      260,   703,   704,   281,   206,   206,   374,   188,   206,   345,
01922      355,   355,   815,   531,   -99,   462,   583,  -103,   219,   -98,
01923      447,   372,   260,   422,   640,   334,   334,   294,   295,   334,
01924      429,   586,   579,   832,   260,   260,   260,   430,   564,   565,
01925      579,  -475,   188,   915,   632,  -482,  -474,   791,   287,   -69,
01926      779,  -100,   538,     3,  -102,   -99,   221,   -97,   796,   520,
01927      463,   528,   641,   448,   449,   586,   607,   -96,   894,   287,
01928      730,   -98,   237,   820,   380,   373,   824,  -101,   795,   873,
01929      -83,    67,   240,    67,   481,   597,   800,   818,   942,  -100,
01930      432,   789,   -97,   727,   812,  -475,   284,   430,   285,   550,
01931     -474,   279,   280,   831,   381,   635,   632,   284,  -476,   285,
01932      -88,   597,   440,   767,   417,   964,   375,    80,   823,   199,
01933      774,   199,   199,   392,   728,   227,   240,   755,   392,   424,
01934      425,   284,   -95,   285,   818,   406,   206,   221,   206,   206,
01935      275,   806,   206,  -543,   206,   284,   -99,   285,   -99,    80,
01936      636,   -98,   374,   -98,   468,   469,   470,   471,   244,   277,
01937       80,    80,  -476,   407,   681,   409,   760,   691,   907,   -94,
01938      -91,   436,  -543,   -90,   479,   892,   692,   895,   296,   479,
01939      261,   632,   727,  -100,   727,  -100,   -90,   240,   400,   -97,
01940      403,   -97,   -93,    56,  -544,   483,   298,  -406,   218,   799,
01941      859,   380,   535,   536,   -92,   260,   -92,   -89,  -482,   597,
01942       80,   206,   206,   206,   206,    80,   206,   206,   919,   244,
01943      206,   597,    80,   261,   287,   206,   220,   537,   408,  -477,
01944      -96,   221,   334,   334,   334,   334,   199,   473,   474,   477,
01945      299,   467,   727,   917,   485,   294,   295,  -540,   260,   406,
01946      911,   426,   284,   206,   285,    80,  -406,   -90,   908,   206,
01947      206,   -88,   375,   303,  -479,   378,   952,  -541,   217,   580,
01948      397,  -478,   383,   206,   790,   420,  -279,   220,  -324,   385,
01949      334,   334,   518,  -477,  -547,   727,   388,   727,   -90,   379,
01950      -92,   -90,  -103,   389,   545,   -90,   440,  -102,   527,   199,
01951      206,   206,   941,   776,   709,   717,  -469,  -406,   602,  -406,
01952     -406,  -103,   406,   591,   727,   330,   206,   421,  -479,   568,
01953      570,   -92,   287,   971,   -92,  -478,  -472,  -480,   -92,  -279,
01954     -279,  -324,  -324,  -544,   109,   546,   440,   552,    80,   547,
01955      190,   390,   -95,  -547,   396,   518,   191,    80,   393,   199,
01956      398,   632,   418,  -469,   438,   439,   443,  -540,   414,  -469,
01957     -469,   527,   406,  -540,   261,   188,   206,    67,   331,   332,
01958      518,   416,   472,   214,  -472,   782,   779,  -541,  -481,  -472,
01959     -472,  -480,   559,  -541,   304,   527,   699,   701,  -272,   260,
01960      217,   541,   423,   644,  -547,   518,  -547,  -547,   553,   -68,
01961     -543,   394,   395,   428,   261,   394,   419,  -469,   587,   444,
01962      445,   527,   589,   434,   677,   590,  -280,   713,   437,   669,
01963      651,   671,   721,   457,   611,   612,   613,   614,  -472,   260,
01964      599,  -481,  -481,   461,   923,   601,   560,   934,   656,   -98,
01965      751,  -272,  -272,   902,   542,   543,   663,   199,   668,   904,
01966      442,   554,   555,   420,    80,   658,    80,   718,   659,   199,
01967      406,   464,   465,   721,   206,   611,   612,   613,   614,  -280,
01968     -280,   538,   406,   484,   707,  -102,   206,   -98,    80,   206,
01969     -100,   466,   663,   663,   644,   644,   654,   554,   555,   647,
01970      935,   936,   540,   518,   660,    67,   447,   572,   392,   656,
01971      694,   190,   304,   440,   600,   518,   -94,   191,   -90,   527,
01972      811,   -92,   251,   544,   206,   663,   655,   588,   674,   674,
01973      595,   527,   -83,   656,   662,   261,   188,   603,  -258,   757,
01974      660,   660,   686,   447,   822,   715,   714,   825,   637,   448,
01975      449,   450,   479,   807,   734,   769,   734,   646,   734,   792,
01976      260,   916,   794,   327,   328,   329,   649,   957,  -100,   756,
01977      700,   702,   654,   660,    80,   -97,   802,   -97,   447,   664,
01978      304,   261,   666,   410,   206,   206,   448,   449,   452,   670,
01979      206,   206,   411,   412,   778,   781,   720,   781,   447,   781,
01980      803,   804,   716,   763,   765,   737,   260,   656,   -89,   770,
01981      772,   447,   597,   732,   735,   455,   206,   738,   656,   206,
01982       80,   448,   449,   454,   740,  -259,   816,   817,    80,   325,
01983      326,   327,   328,   329,   644,    80,    80,   334,   826,   762,
01984      334,   448,   449,   458,   768,   893,   779,   896,   721,   813,
01985      611,   612,   613,   614,   448,   449,   756,   852,   748,   833,
01986      188,    80,    80,   384,   827,   834,   386,   387,   289,   290,
01987      291,   292,   293,    80,   836,   838,   848,   756,   793,   734,
01988      840,   734,   734,   855,   856,   722,   918,   858,   920,  -260,
01989      801,   723,   921,   845,   201,   201,   849,   867,   201,   866,
01990      875,   206,   871,   868,   876,   847,   742,   743,   851,   744,
01991      877,    80,   798,   879,   206,    44,    45,   881,    80,    80,
01992      843,   883,    80,   886,   233,   236,   890,   889,  -261,   201,
01993      201,   913,   914,   808,   951,   334,   953,   922,    80,   954,
01994      282,   283,   925,   927,   814,   594,   903,   734,   734,   930,
01995      734,   933,   734,   734,   965,   943,   945,   967,   343,   888,
01996     -543,   721,  -544,   611,   612,   613,   614,   678,   478,   358,
01997      924,   961,   810,   487,   376,   960,   973,   899,   377,   273,
01998        0,    80,   370,   912,   260,   674,   781,   861,   304,   891,
01999      819,   828,    80,   611,   612,   613,   614,     0,   615,   937,
02000        0,   938,   260,   317,   318,   617,     0,   939,   721,     0,
02001      611,   612,   613,   614,     0,     0,     0,   863,     0,   734,
02002      734,   734,     0,   734,   734,   618,     0,   721,   869,   611,
02003      612,   613,   614,   874,    80,     0,    80,   325,   326,   327,
02004      328,   329,    80,     0,    80,   722,   734,   734,   734,   734,
02005      199,   872,     0,     0,     0,     0,     0,     0,     0,   576,
02006      578,     0,     0,   406,   722,   668,   781,   206,   251,     0,
02007        0,   201,     0,     0,   201,   201,   282,     0,     0,   734,
02008      734,   734,   734,   656,     0,   518,   747,     0,   611,   612,
02009      613,   614,   201,   734,   201,   201,   518,     0,     0,   578,
02010        0,   734,   251,     0,   788,   610,     0,   611,   612,   613,
02011      614,     0,   527,     0,     0,     0,     0,     0,     0,     0,
02012        0,   797,     0,   615,     0,     0,     0,     0,     0,   616,
02013      617,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02014        0,     0,   615,     0,     0,     0,   645,     0,   616,   617,
02015      618,     0,     0,   619,     0,     0,     0,     0,     0,     0,
02016        0,     0,     0,   104,     0,   104,     0,     0,     0,   618,
02017        0,     0,   619,     0,     0,     0,   201,     0,     0,   748,
02018        0,   486,   489,   490,   491,   492,   493,   494,   495,   496,
02019      497,   498,   499,   500,   501,   502,   503,   504,   505,   506,
02020      507,   508,   509,   510,   511,   512,   513,   514,   487,   201,
02021      104,   853,     0,   854,   262,   610,     0,   611,   612,   613,
02022      614,     0,     0,   862,     0,     0,     0,     0,   864,     0,
02023        0,     0,     0,     0,     0,     0,   262,     0,     0,     0,
02024        0,   107,     0,   107,     0,     0,     0,   708,   347,   356,
02025      356,   356,   615,     0,     0,     0,   569,   571,   616,   617,
02026        0,     0,     0,     0,     0,     0,   575,   201,   201,     0,
02027        0,     0,   201,     0,   569,   571,   201,     0,     0,   618,
02028        0,     0,   619,   905,   906,     0,     0,     0,   107,   736,
02029        0,   739,   263,   593,     0,     0,   304,   610,   598,   611,
02030      612,   613,   614,     0,     0,   620,     0,   201,     0,     0,
02031      201,   317,   318,    77,   263,    77,   759,     0,     0,     0,
02032        0,     0,   201,     0,     0,     0,   348,   357,   357,     0,
02033      106,     0,   106,     0,   615,     0,   775,     0,     0,   940,
02034      616,   617,   638,   639,   324,   325,   326,   327,   328,   329,
02035        0,     0,     0,     0,   201,     0,   104,     0,     0,     0,
02036       77,   618,     0,     0,   619,  -565,     0,   962,     0,   963,
02037        0,     0,     0,  -565,  -565,  -565,     0,   106,  -565,  -565,
02038     -565,   747,  -565,   611,   612,   613,   614,   695,   104,     0,
02039      809,     0,  -565,     0,     0,     0,     0,     0,   344,   104,
02040      104,     0,  -565,  -565,     0,  -565,  -565,  -565,  -565,  -565,
02041        0,     0,   835,     0,   837,   839,   201,     0,   615,   262,
02042      201,   304,     0,     0,   616,   617,     0,     0,   841,     0,
02043        0,     0,   201,     0,   107,     0,   317,   318,     0,     0,
02044        0,     0,     0,     0,     0,   618,     0,     0,   619,   104,
02045     -565,     0,     0,     0,   104,   201,     0,     0,     0,   857,
02046        0,   104,   262,     0,     0,     0,   107,   322,   323,   324,
02047      325,   326,   327,   328,   329,     0,     0,   107,   107,     0,
02048      878,   880,     0,   882,     0,   884,   885,     0,     0,     0,
02049        0,     0,     0,     0,   104,     0,     0,   263,     0,     0,
02050        0,     0,  -565,     0,  -565,     0,    77,   217,  -565,     0,
02051     -565,     0,  -565,     0,     0,     0,     0,     0,     0,     0,
02052        0,     0,     0,   106,   201,     0,     0,   107,   761,     0,
02053      764,   766,   107,     0,     0,     0,   771,   773,    77,   107,
02054      263,     0,     0,     0,   201,     0,     0,     0,     0,    77,
02055       77,     0,   926,   928,   929,   106,   931,   932,     0,     0,
02056        0,     0,     0,     0,     0,     0,   106,   106,     0,     0,
02057        0,     0,   107,     0,     0,     0,     0,   104,     0,   944,
02058      946,   947,   948,   805,     0,     0,   104,     0,   764,   766,
02059        0,   771,   773,     0,     0,     0,     0,     0,   201,    77,
02060        0,     0,     0,   262,    77,     0,     0,     0,     0,     0,
02061        0,    77,   966,   968,   969,   970,   106,     0,     0,     0,
02062        0,   106,     0,     0,     0,     0,   972,     0,   106,     0,
02063        0,     0,     0,     0,   974,     0,   201,     0,     0,     0,
02064      842,     0,     0,   262,    77,     0,     0,   844,     0,     0,
02065        0,     0,     0,     0,     0,   107,     0,     0,     0,     0,
02066        0,   106,     0,     0,   107,     0,     0,   201,     0,     0,
02067        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02068        0,   263,     0,     0,     0,   844,     0,     0,     0,     0,
02069        0,     0,     0,   104,     0,   104,     0,     0,     0,     0,
02070        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02071      304,  -566,  -566,  -566,  -566,   309,   310,   104,     0,  -566,
02072     -566,   263,     0,     0,     0,   317,   318,    77,     0,     0,
02073        0,     0,     0,     0,     0,     0,    77,     0,     0,     0,
02074        0,     0,     0,     0,   106,     0,     0,     0,     0,     0,
02075      650,     0,     0,   106,   320,   321,   322,   323,   324,   325,
02076      326,   327,   328,   329,   262,     0,     0,     0,     0,     0,
02077        0,   107,     0,   107,   304,   305,   306,   307,   308,   309,
02078      310,   311,   312,   313,   314,   315,   316,     0,     0,   317,
02079      318,     0,     0,     0,     0,   107,     0,     0,     0,     0,
02080        0,     0,     0,   104,     0,     0,     0,     0,     0,     0,
02081      262,     0,     0,   201,     0,     0,   319,     0,   320,   321,
02082      322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
02083        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02084        0,     0,   263,    77,     0,    77,  -237,     0,     0,   104,
02085        0,     0,     0,     0,     0,     0,     0,   104,     0,     0,
02086      106,     0,   106,     0,   104,   104,     0,    77,     0,     0,
02087        0,     0,     0,   746,     0,     0,     0,     0,     0,     0,
02088        0,   107,     0,     0,   106,     0,     0,     0,   263,     0,
02089      104,   104,     0,     0,   515,   516,     0,     0,   517,     0,
02090        0,     0,   104,     0,     0,     0,     0,     0,   155,   156,
02091      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02092      165,     0,     0,   166,   167,   168,   169,   107,     0,     0,
02093        0,     0,     0,     0,     0,   107,     0,   170,     0,     0,
02094      104,     0,   107,   107,     0,     0,     0,   104,   104,     0,
02095        0,   104,     0,    77,   171,   172,   173,   174,   175,   176,
02096      177,   178,   179,   180,     0,   181,   182,   104,   107,   107,
02097      106,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02098      107,     0,     0,   183,   217,     0,     0,     0,   356,     0,
02099        0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
02100        0,     0,     0,     0,     0,     0,   900,    77,     0,     0,
02101      104,     0,     0,     0,    77,    77,   106,     0,   107,     0,
02102        0,   104,     0,     0,   106,   107,   107,     0,     0,   107,
02103        0,   106,   106,     0,     0,     0,     0,     0,     0,     0,
02104       77,    77,     0,     0,     0,   107,     0,     0,     0,     0,
02105        0,     0,    77,     0,     0,     0,     0,   106,   106,     0,
02106        0,     0,     0,   104,     0,   104,   357,     0,     0,   106,
02107        0,   104,     0,   104,     0,     0,     0,   304,   305,   306,
02108      307,   308,   309,   310,   901,     0,   313,   314,   107,     0,
02109       77,     0,   317,   318,     0,     0,     0,    77,    77,   107,
02110        0,    77,     0,   235,   235,     0,     0,   106,   235,   235,
02111      235,     0,     0,     0,   106,   106,     0,    77,   106,     0,
02112      235,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02113      329,     0,   235,     0,   106,     0,     0,     0,     0,     0,
02114        0,   107,     0,   107,   235,   235,   235,     0,     0,   107,
02115        0,   107,     0,     0,     0,     0,   898,     0,     0,     0,
02116       77,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02117        0,    77,     0,     0,     0,     0,     0,   106,     0,     0,
02118        0,     0,     0,     0,     0,     0,     0,     0,   106,     0,
02119        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02120        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02121        0,     0,     0,    77,     0,    77,     0,     0,     0,     0,
02122        0,    77,     0,    77,     0,     0,     0,     0,     0,     0,
02123      106,     0,   106,     0,     0,     0,     0,     0,   106,     0,
02124      106,     0,   523,   524,     0,     0,   525,     0,     0,     0,
02125      235,     0,     0,   235,   235,   235,   155,   156,   157,   158,
02126      159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
02127        0,   166,   167,   168,   169,     0,     0,   304,   305,   306,
02128      307,   308,   309,   310,   311,   170,   313,   314,     0,     0,
02129        0,     0,   317,   318,     0,     0,     0,     0,     0,     0,
02130        0,     0,   171,   172,   173,   174,   175,   176,   177,   178,
02131      179,   180,     0,   181,   182,   235,     0,     0,     0,     0,
02132        0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02133      329,   183,   217,     0,     0,     0,     0,     0,     0,     0,
02134        0,     0,     0,     0,   304,   305,   306,   307,   308,   309,
02135      310,   311,   312,   313,   314,  -566,  -566,     0,   235,   317,
02136      318,   235,   235,   235,   235,   235,   235,   235,   235,   235,
02137      235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
02138      235,   235,   235,   235,   235,   235,   235,     0,   320,   321,
02139      322,   323,   324,   325,   326,   327,   328,   329,   581,   516,
02140        0,     0,   582,     0,     0,     0,     0,     0,     0,     0,
02141        0,     0,   155,   156,   157,   158,   159,   160,   161,   162,
02142      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02143      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02144        0,   170,     0,     0,     0,   235,   235,   235,     0,     0,
02145        0,     0,     0,   235,   235,   235,     0,     0,   171,   172,
02146      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02147      182,     0,   235,     0,     0,     0,     0,   235,     0,     0,
02148        0,     0,     0,     0,     0,     0,   235,   183,   217,   235,
02149        0,     0,     0,     0,     0,     0,     0,     0,     0,   235,
02150        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02151        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02152        0,   235,   235,     0,  -565,     4,     0,     5,     6,     7,
02153        8,     9,     0,   235,     0,    10,    11,     0,     0,   235,
02154       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02155        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02156       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02157       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
02158       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02159       46,    47,     0,     0,     0,   235,     0,     0,     0,     0,
02160        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02161       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02162        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02163        0,     0,     0,     0,   235,     0,     0,     0,     0,     0,
02164        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02165        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02166      235,     0,     0,     0,     0,     0,     0,     0,     0,  -565,
02167        0,  -565,     0,     0,     0,     0,     0,     0,     0,     0,
02168        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02169        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02170        0,     0,     0,   235,     0,     0,   235,   235,     0,     0,
02171        0,  -279,     0,     0,     0,     0,     0,     0,     0,  -279,
02172     -279,  -279,     0,   235,  -279,  -279,  -279,     0,  -279,     0,
02173        0,     0,     0,     0,     0,     0,     0,     0,  -279,  -279,
02174     -279,     0,     0,     0,     0,     0,     0,     0,  -279,  -279,
02175        0,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,     0,
02176        0,     0,   235,     0,     0,     0,     0,   235,   235,     0,
02177      235,   235,     0,     0,     0,     0,     0,   235,     0,  -279,
02178     -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02179     -279,  -279,     0,     0,  -279,  -279,  -279,     0,   711,  -279,
02180        0,     0,     0,     0,     0,  -279,     0,     0,     0,     0,
02181        0,     0,     0,     0,     0,   235,     0,     0,  -279,   235,
02182     -101,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02183     -279,  -279,  -279,     0,     0,     0,     0,     0,     0,     0,
02184        0,     0,     0,     0,     0,     0,   235,     0,  -279,  -279,
02185     -279,  -279,  -405,     0,  -279,  -279,  -279,     0,  -279,     0,
02186     -405,  -405,  -405,     0,   235,  -405,  -405,  -405,     0,  -405,
02187        0,     0,     0,     0,     0,     0,     0,     0,  -405,  -405,
02188     -405,     0,     0,     0,   235,     0,     0,     0,     0,  -405,
02189     -405,     0,  -405,  -405,  -405,  -405,  -405,     0,     0,     0,
02190        0,     0,   235,   304,   305,   306,   307,   308,   309,   310,
02191      311,   312,   313,   314,   315,   316,     0,     0,   317,   318,
02192     -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,
02193     -405,  -405,  -405,     0,     0,  -405,  -405,  -405,     0,     0,
02194     -405,     0,     0,     0,     0,   319,  -405,   320,   321,   322,
02195      323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
02196        0,     0,  -405,     0,  -405,  -405,  -405,  -405,  -405,  -405,
02197     -405,  -405,  -405,  -405,     0,     0,     0,     0,     0,     0,
02198        0,     0,   221,     0,     0,     0,     0,     0,  -405,  -405,
02199     -405,  -405,  -405,  -273,   217,  -405,  -405,  -405,     0,  -405,
02200        0,  -273,  -273,  -273,     0,     0,  -273,  -273,  -273,     0,
02201     -273,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02202     -273,  -273,  -273,     0,     0,     0,     0,     0,     0,     0,
02203     -273,  -273,     0,  -273,  -273,  -273,  -273,  -273,     0,     0,
02204        0,     0,     0,     0,   304,   305,   306,   307,   308,   309,
02205      310,   311,   312,   313,   314,   315,   316,     0,     0,   317,
02206      318,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
02207     -273,  -273,  -273,  -273,     0,     0,  -273,  -273,  -273,     0,
02208        0,  -273,     0,     0,     0,     0,   319,  -273,   320,   321,
02209      322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
02210     -273,     0,     0,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
02211     -273,  -273,  -273,  -273,  -273,     0,     0,     0,     0,     0,
02212        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02213     -273,  -273,  -273,  -273,  -565,     0,  -273,  -273,  -273,     0,
02214     -273,     0,  -565,  -565,  -565,     0,     0,  -565,  -565,  -565,
02215        0,  -565,     0,     0,     0,     0,     0,     0,     0,     0,
02216     -565,  -565,  -565,     0,     0,     0,     0,     0,     0,     0,
02217        0,  -565,  -565,     0,  -565,  -565,  -565,  -565,  -565,     0,
02218        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02219        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02220        0,     0,  -565,  -565,  -565,  -565,  -565,  -565,  -565,  -565,
02221     -565,  -565,  -565,  -565,  -565,     0,     0,  -565,  -565,  -565,
02222        0,     0,  -565,     0,     0,     0,     0,     0,  -565,     0,
02223        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02224        0,     0,     0,     0,  -565,     0,  -565,  -565,  -565,  -565,
02225     -565,  -565,  -565,  -565,  -565,  -565,     0,     0,     0,     0,
02226        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02227     -565,  -565,  -565,  -565,  -565,  -286,   217,  -565,  -565,  -565,
02228        0,  -565,     0,  -286,  -286,  -286,     0,     0,  -286,  -286,
02229     -286,     0,  -286,     0,     0,     0,     0,     0,     0,     0,
02230        0,     0,  -286,  -286,     0,     0,     0,     0,     0,     0,
02231        0,     0,  -286,  -286,     0,  -286,  -286,  -286,  -286,  -286,
02232        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02233        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02234        0,     0,     0,  -286,  -286,  -286,  -286,  -286,  -286,  -286,
02235     -286,  -286,  -286,  -286,  -286,  -286,     0,     0,  -286,  -286,
02236     -286,     0,     0,  -286,     0,     0,     0,     0,     0,  -286,
02237        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02238        0,     0,     0,     0,     0,  -286,     0,  -286,  -286,  -286,
02239     -286,  -286,  -286,  -286,  -286,  -286,  -286,     0,     0,     0,
02240        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02241        0,     0,  -286,  -286,  -286,  -286,  -547,   214,  -286,  -286,
02242     -286,     0,  -286,     0,  -547,  -547,  -547,     0,     0,     0,
02243     -547,  -547,     0,  -547,     0,     0,     0,     0,     0,     0,
02244        0,     0,  -547,     0,     0,     0,     0,     0,     0,     0,
02245        0,     0,     0,  -547,  -547,     0,  -547,  -547,  -547,  -547,
02246     -547,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02247        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02248        0,     0,     0,     0,  -547,  -547,  -547,  -547,  -547,  -547,
02249     -547,  -547,  -547,  -547,  -547,  -547,  -547,     0,     0,  -547,
02250     -547,  -547,  -279,   652,     0,     0,     0,     0,     0,     0,
02251     -279,  -279,  -279,     0,     0,     0,  -279,  -279,     0,  -279,
02252        0,     0,     0,     0,     0,   -99,  -547,     0,  -547,  -547,
02253     -547,  -547,  -547,  -547,  -547,  -547,  -547,  -547,     0,  -279,
02254     -279,     0,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,
02255        0,     0,  -547,  -547,  -547,  -547,   -91,     0,     0,  -547,
02256        0,  -547,     0,  -547,     0,     0,     0,     0,     0,     0,
02257     -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02258     -279,  -279,  -279,     0,     0,  -279,  -279,  -279,     0,   653,
02259        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02260        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02261        0,  -101,  -279,     0,  -279,  -279,  -279,  -279,  -279,  -279,
02262     -279,  -279,  -279,  -279,     0,     0,     0,     0,     0,     0,
02263        0,     0,     0,     0,     0,     0,     0,     0,     0,  -279,
02264     -279,  -279,   -93,     0,     0,  -279,     0,  -279,   238,  -279,
02265        5,     6,     7,     8,     9,  -565,  -565,  -565,    10,    11,
02266        0,     0,  -565,    12,     0,    13,    14,    15,    16,    17,
02267       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02268       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02269        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02270       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02271       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02272        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02273        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02274       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02275       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02276        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02277       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02278        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02279        0,     0,  -565,   238,  -565,     5,     6,     7,     8,     9,
02280        0,     0,  -565,    10,    11,     0,  -565,  -565,    12,     0,
02281       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02282        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02283        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02284       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02285        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02286        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02287        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02288        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02289       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02290        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02291        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02292        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02293        0,     0,     0,     0,     0,     0,     0,  -565,   238,  -565,
02294        5,     6,     7,     8,     9,     0,     0,  -565,    10,    11,
02295        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02296       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02297       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02298        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02299       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02300       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02301        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02302        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02303       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02304       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02305        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02306       62,    63,     0,     0,     0,     0,     0,     0,     4,     0,
02307        5,     6,     7,     8,     9,     0,     0,     0,    10,    11,
02308        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02309       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02310       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02311        0,     0,    28,    29,    30,    31,    32,    33,    34,    35,
02312       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02313       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02314        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02315        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02316       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02317       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02318        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02319       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02320        0,     0,     0,     0,  -565,     0,     0,     0,     0,     0,
02321        0,     0,  -565,   238,  -565,     5,     6,     7,     8,     9,
02322        0,     0,  -565,    10,    11,     0,     0,  -565,    12,     0,
02323       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02324        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02325        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02326       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02327        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02328        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02329        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02330        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02331       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02332        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02333        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02334        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02335        0,  -565,  -565,    10,    11,     0,     0,  -565,    12,  -565,
02336       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02337        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02338        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02339       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02340        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02341        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02342        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02343        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02344       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02345        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02346        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02347        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02348        0,     0,     0,    10,    11,     0,     0,  -565,    12,  -565,
02349       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02350        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02351        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02352       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02353        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02354        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02355        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02356        0,   239,    50,     0,    51,    52,     0,    53,     0,    54,
02357       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02358        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02359        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02360        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02361        0,     0,     0,    10,    11,  -565,     0,  -565,    12,  -565,
02362       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02363        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02364        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02365       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02366        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02367        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02368        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02369        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02370       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02371        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02372        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02373        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02374        0,     0,     0,    10,    11,  -565,     0,  -565,    12,  -565,
02375       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02376        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02377        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02378       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02379        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02380        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02381        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02382        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02383       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02384        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02385        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02386        0,     0,     0,     0,     0,     0,     0,     0,     0,  -565,
02387        0,     0,     0,     0,     0,     0,     0,  -565,   238,  -565,
02388        5,     6,     7,     8,     9,     0,     0,  -565,    10,    11,
02389        0,     0,     0,    12,     0,    13,    14,    15,    16,    17,
02390       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02391       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02392        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02393       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02394       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02395        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02396        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02397       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02398       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02399        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02400       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02401        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02402        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02403       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02404       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02405        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02406       36,    37,    38,    39,    40,   193,    41,    42,     0,    43,
02407       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02408        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02409        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02410       52,     0,   196,   197,    54,    55,    56,    57,    58,    59,
02411       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02412        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02413      198,    63,    12,     0,    13,    14,    15,    16,    17,    18,
02414       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02415       24,    25,    26,     0,   221,    27,     0,     0,     0,     0,
02416        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02417       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02418       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02419        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02420        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02421        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02422        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02423        0,     0,     0,     0,     0,     0,     0,     0,    61,    62,
02424       63,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02425        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02426        0,   284,    12,   285,    13,    14,    15,    16,    17,    18,
02427       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02428       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02429        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02430       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02431       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02432        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02433        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02434        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02435        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02436        7,     8,     9,     0,     0,     0,    10,    11,    61,    62,
02437       63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02438        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02439       25,    26,     0,   221,    27,     0,     0,     0,     0,     0,
02440       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
02441       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02442        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02443        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02444        0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
02445       53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02446        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02447        0,     0,     0,     0,     0,     0,     0,    61,    62,    63,
02448        0,     0,     0,     0,     0,     0,     5,     6,     7,     8,
02449        9,     0,     0,     0,    10,    11,     0,     0,     0,    12,
02450      466,    13,    14,    15,    16,    17,    18,    19,     0,     0,
02451        0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
02452        0,     0,    27,     0,     0,     0,     0,     0,    28,    29,
02453        0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
02454       40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
02455       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02456        0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
02457        0,     0,    49,    50,     0,    51,    52,     0,    53,     0,
02458       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02459        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02460        0,     0,     0,     0,     0,    61,    62,    63,     0,     0,
02461        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02462        0,     0,     0,     0,     0,     0,     0,     0,   466,   111,
02463      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
02464      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
02465      132,   133,   134,     0,     0,     0,   135,   136,   137,   359,
02466      360,   361,   362,   142,   143,   144,     0,     0,     0,     0,
02467        0,   145,   146,   147,   148,   363,   364,   365,   366,   153,
02468       37,    38,   367,    40,     0,     0,     0,     0,     0,     0,
02469        0,     0,   155,   156,   157,   158,   159,   160,   161,   162,
02470      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02471      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02472        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
02473        0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
02474      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02475      182,     0,     0,     0,     0,     0,  -540,  -540,  -540,     0,
02476     -540,     0,     0,     0,  -540,  -540,     0,   183,   368,  -540,
02477        0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,     0,  -540,
02478        0,     0,     0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,
02479        0,     0,  -540,     0,     0,     0,     0,     0,     0,  -540,
02480        0,     0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,  -540,
02481     -540,  -540,  -540,  -540,     0,  -540,  -540,  -540,     0,  -540,
02482     -540,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02483        0,     0,     0,     0,     0,     0,     0,     0,     0,  -540,
02484        0,     0,  -540,  -540,     0,  -540,  -540,     0,  -540,  -540,
02485     -540,  -540,  -540,  -540,  -540,  -540,  -540,     0,     0,     0,
02486        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02487        0,     0,     0,     0,     0,  -540,  -540,  -540,     0,     0,
02488        0,     0,     0,  -541,  -541,  -541,     0,  -541,     0,  -540,
02489        0,  -541,  -541,     0,     0,  -540,  -541,     0,  -541,  -541,
02490     -541,  -541,  -541,  -541,  -541,     0,  -541,     0,     0,     0,
02491     -541,  -541,  -541,  -541,  -541,  -541,  -541,     0,     0,  -541,
02492        0,     0,     0,     0,     0,     0,  -541,     0,     0,  -541,
02493     -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
02494     -541,     0,  -541,  -541,  -541,     0,  -541,  -541,     0,     0,
02495        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02496        0,     0,     0,     0,     0,     0,  -541,     0,     0,  -541,
02497     -541,     0,  -541,  -541,     0,  -541,  -541,  -541,  -541,  -541,
02498     -541,  -541,  -541,  -541,     0,     0,     0,     0,     0,     0,
02499        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02500        0,     0,  -541,  -541,  -541,     0,     0,     0,     0,     0,
02501     -543,  -543,  -543,     0,  -543,     0,  -541,     0,  -543,  -543,
02502        0,     0,  -541,  -543,     0,  -543,  -543,  -543,  -543,  -543,
02503     -543,  -543,     0,     0,     0,     0,     0,  -543,  -543,  -543,
02504     -543,  -543,  -543,  -543,     0,     0,  -543,     0,     0,     0,
02505        0,     0,     0,  -543,     0,     0,  -543,  -543,  -543,  -543,
02506     -543,  -543,  -543,  -543,  -543,  -543,  -543,  -543,     0,  -543,
02507     -543,  -543,     0,  -543,  -543,     0,     0,     0,     0,     0,
02508        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02509        0,     0,     0,  -543,   710,     0,  -543,  -543,     0,  -543,
02510     -543,     0,  -543,  -543,  -543,  -543,  -543,  -543,  -543,  -543,
02511     -543,     0,     0,     0,     0,     0,   -99,     0,     0,     0,
02512        0,     0,     0,     0,  -545,  -545,  -545,     0,  -545,  -543,
02513     -543,  -543,  -545,  -545,     0,     0,     0,  -545,     0,  -545,
02514     -545,  -545,  -545,  -545,  -545,  -545,     0,     0,     0,  -543,
02515        0,  -545,  -545,  -545,  -545,  -545,  -545,  -545,     0,     0,
02516     -545,     0,     0,     0,     0,     0,     0,  -545,     0,     0,
02517     -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,
02518     -545,  -545,     0,  -545,  -545,  -545,     0,  -545,  -545,     0,
02519        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02520        0,     0,     0,     0,     0,     0,     0,  -545,     0,     0,
02521     -545,  -545,     0,  -545,  -545,     0,  -545,  -545,  -545,  -545,
02522     -545,  -545,  -545,  -545,  -545,     0,     0,     0,     0,     0,
02523        0,     0,     0,     0,     0,     0,     0,     0,  -546,  -546,
02524     -546,     0,  -546,  -545,  -545,  -545,  -546,  -546,     0,     0,
02525        0,  -546,     0,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
02526        0,     0,     0,  -545,     0,  -546,  -546,  -546,  -546,  -546,
02527     -546,  -546,     0,     0,  -546,     0,     0,     0,     0,     0,
02528        0,  -546,     0,     0,  -546,  -546,  -546,  -546,  -546,  -546,
02529     -546,  -546,  -546,  -546,  -546,  -546,     0,  -546,  -546,  -546,
02530        0,  -546,  -546,     0,     0,     0,     0,     0,     0,     0,
02531        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02532        0,  -546,     0,     0,  -546,  -546,     0,  -546,  -546,     0,
02533     -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,     0,
02534        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02535        0,     0,     0,     0,     0,     0,     0,  -546,  -546,  -546,
02536        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02537        0,     0,     0,     0,     0,     0,     0,  -546,   111,   112,
02538      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
02539      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
02540      133,   134,     0,     0,     0,   135,   136,   137,   138,   139,
02541      140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
02542      145,   146,   147,   148,   149,   150,   151,   152,   153,   266,
02543      267,   154,   268,     0,     0,     0,     0,     0,     0,     0,
02544        0,   155,   156,   157,   158,   159,   160,   161,   162,   163,
02545        0,     0,   164,   165,     0,     0,   166,   167,   168,   169,
02546        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02547      170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02548        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
02549      174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
02550        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02551        0,     0,     0,     0,     0,     0,   183,   111,   112,   113,
02552      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
02553      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02554      134,     0,     0,     0,   135,   136,   137,   138,   139,   140,
02555      141,   142,   143,   144,     0,     0,     0,     0,     0,   145,
02556      146,   147,   148,   149,   150,   151,   152,   153,   223,     0,
02557      154,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02558      155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
02559        0,   164,   165,     0,     0,   166,   167,   168,   169,     0,
02560        0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
02561        0,     0,    55,     0,     0,     0,     0,     0,     0,     0,
02562        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
02563      175,   176,   177,   178,   179,   180,     0,   181,   182,     0,
02564        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02565        0,     0,     0,     0,     0,   183,   111,   112,   113,   114,
02566      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
02567      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
02568        0,     0,     0,   135,   136,   137,   138,   139,   140,   141,
02569      142,   143,   144,     0,     0,     0,     0,     0,   145,   146,
02570      147,   148,   149,   150,   151,   152,   153,     0,     0,   154,
02571        0,     0,     0,     0,     0,     0,     0,     0,     0,   155,
02572      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02573      164,   165,     0,     0,   166,   167,   168,   169,     0,     0,
02574        0,     0,     0,     0,     0,     0,     0,     0,   170,     0,
02575        0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
02576        0,     0,     0,     0,     0,   171,   172,   173,   174,   175,
02577      176,   177,   178,   179,   180,     0,   181,   182,     0,     0,
02578        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02579        0,     0,     0,     0,   183,   111,   112,   113,   114,   115,
02580      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
02581      126,   127,   128,   129,   130,   131,   132,   133,   134,     0,
02582        0,     0,   135,   136,   137,   138,   139,   140,   141,   142,
02583      143,   144,     0,     0,     0,     0,     0,   145,   146,   147,
02584      148,   149,   150,   151,   152,   153,     0,     0,   154,     0,
02585        0,     0,     0,     0,     0,     0,     0,     0,   155,   156,
02586      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02587      165,     0,     0,   166,   167,   168,   169,     0,     0,     0,
02588        0,     0,     0,     0,     0,     0,     0,   170,     0,     0,
02589        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02590        0,     0,     0,     0,   171,   172,   173,   174,   175,   176,
02591      177,   178,   179,   180,     0,   181,   182,     0,     0,     5,
02592        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02593        0,     0,    12,   183,    13,    14,    15,   228,   229,    18,
02594       19,     0,     0,     0,     0,     0,   230,   231,   232,    23,
02595       24,    25,    26,     0,     0,   192,     0,     0,     0,     0,
02596        0,     0,   255,     0,     0,    32,    33,    34,    35,    36,
02597       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02598       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02599        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02600        0,     0,   256,     0,     0,   195,    50,     0,    51,    52,
02601        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02602        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02603        0,     5,     6,     7,     0,     9,     0,     0,   257,    10,
02604       11,     0,     0,     0,    12,     0,    13,    14,    15,   228,
02605      229,    18,    19,     0,     0,     0,   258,     0,   230,   231,
02606      232,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02607        0,     0,     0,     0,   255,     0,     0,    32,    33,    34,
02608       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02609       43,    44,    45,     0,     0,     0,     0,     0,     0,     0,
02610        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02611        0,     0,     0,     0,   256,     0,     0,   195,    50,     0,
02612       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02613       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02614        0,     0,     0,     5,     6,     7,     8,     9,     0,     0,
02615      257,    10,    11,     0,     0,     0,    12,     0,    13,    14,
02616       15,    16,    17,    18,    19,     0,     0,     0,   482,     0,
02617       20,    21,    22,    23,    24,    25,    26,     0,     0,    27,
02618        0,     0,     0,     0,     0,    28,    29,    30,    31,    32,
02619       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02620       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02621        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02622        0,     0,     0,     0,     0,     0,    48,     0,     0,    49,
02623       50,     0,    51,    52,     0,    53,     0,    54,    55,    56,
02624       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02625        0,     0,     5,     6,     7,     8,     9,     0,     0,     0,
02626       10,    11,    61,    62,    63,    12,     0,    13,    14,    15,
02627       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02628       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02629        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02630       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02631        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02632        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02633        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02634        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02635       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02636        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02637       11,    61,    62,    63,    12,     0,    13,    14,    15,    16,
02638       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02639       22,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02640        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02641       35,    36,    37,    38,    39,    40,   193,    41,    42,     0,
02642       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02643        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02644        0,     0,     0,     0,   194,     0,     0,   195,    50,     0,
02645       51,    52,     0,   196,   197,    54,    55,    56,    57,    58,
02646       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02647        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02648       61,   198,    63,    12,     0,    13,    14,    15,   228,   229,
02649       18,    19,     0,     0,     0,     0,     0,   230,   231,   232,
02650       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02651        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02652       36,    37,    38,    39,    40,   193,    41,    42,     0,    43,
02653       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02654        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02655        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02656       52,     0,   577,   197,    54,    55,    56,    57,    58,    59,
02657       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02658        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02659      198,    63,    12,     0,    13,    14,    15,   228,   229,    18,
02660       19,     0,     0,     0,     0,     0,   230,   231,   232,    23,
02661       24,    25,    26,     0,     0,   192,     0,     0,     0,     0,
02662        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02663       37,    38,    39,    40,   193,    41,    42,     0,    43,    44,
02664       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02665        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02666        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02667        0,   196,     0,    54,    55,    56,    57,    58,    59,    60,
02668        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02669        7,     0,     9,     0,     0,     0,    10,    11,    61,   198,
02670       63,    12,     0,    13,    14,    15,   228,   229,    18,    19,
02671        0,     0,     0,     0,     0,   230,   231,   232,    23,    24,
02672       25,    26,     0,     0,   192,     0,     0,     0,     0,     0,
02673        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02674       38,    39,    40,   193,    41,    42,     0,    43,    44,    45,
02675        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02676        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02677        0,   194,     0,     0,   195,    50,     0,    51,    52,     0,
02678        0,   197,    54,    55,    56,    57,    58,    59,    60,     0,
02679        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02680        0,     9,     0,     0,     0,    10,    11,    61,   198,    63,
02681       12,     0,    13,    14,    15,   228,   229,    18,    19,     0,
02682        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02683       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02684       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02685       39,    40,   193,    41,    42,     0,    43,    44,    45,     0,
02686       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02687        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02688      194,     0,     0,   195,    50,     0,    51,    52,     0,   577,
02689        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02690        0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02691        9,     0,     0,     0,    10,    11,    61,   198,    63,    12,
02692        0,    13,    14,    15,   228,   229,    18,    19,     0,     0,
02693        0,     0,     0,   230,   231,   232,    23,    24,    25,    26,
02694        0,     0,   192,     0,     0,     0,     0,     0,     0,    29,
02695        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02696       40,   193,    41,    42,     0,    43,    44,    45,     0,    46,
02697       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02698        0,     0,     0,     0,     0,     0,     0,     0,     0,   194,
02699        0,     0,   195,    50,     0,    51,    52,     0,     0,     0,
02700       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02701        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02702        0,     0,     0,    10,    11,    61,   198,    63,    12,     0,
02703       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02704        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02705        0,   192,     0,     0,     0,     0,     0,     0,    29,     0,
02706        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02707        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02708        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02709        0,     0,     0,     0,     0,     0,     0,     0,   194,     0,
02710        0,   195,    50,     0,    51,    52,     0,   476,     0,    54,
02711       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02712        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02713        0,     0,    10,    11,    61,   198,    63,    12,     0,    13,
02714       14,    15,   228,   229,    18,    19,     0,     0,     0,     0,
02715        0,   230,   231,   232,    23,    24,    25,    26,     0,     0,
02716      192,     0,     0,     0,     0,     0,     0,    29,     0,     0,
02717       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02718       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02719        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02720        0,     0,     0,     0,     0,     0,     0,   194,     0,     0,
02721      195,    50,     0,    51,    52,     0,   196,     0,    54,    55,
02722       56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
02723        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02724        0,    10,    11,    61,   198,    63,    12,     0,    13,    14,
02725       15,   228,   229,    18,    19,     0,     0,     0,     0,     0,
02726      230,   231,   232,    23,    24,    25,    26,     0,     0,   192,
02727        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02728       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02729       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02730        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02731        0,     0,     0,     0,     0,     0,   194,     0,     0,   195,
02732       50,     0,    51,    52,     0,   758,     0,    54,    55,    56,
02733       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02734        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02735       10,    11,    61,   198,    63,    12,     0,    13,    14,    15,
02736      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02737      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02738        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02739       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02740        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02741        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02742        0,     0,     0,     0,     0,   194,     0,     0,   195,    50,
02743        0,    51,    52,     0,   476,     0,    54,    55,    56,    57,
02744       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02745        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02746       11,    61,   198,    63,    12,     0,    13,    14,    15,   228,
02747      229,    18,    19,     0,     0,     0,     0,     0,   230,   231,
02748      232,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02749        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02750       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02751       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02752        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02753        0,     0,     0,     0,   194,     0,     0,   195,    50,     0,
02754       51,    52,     0,   577,     0,    54,    55,    56,    57,    58,
02755       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02756        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02757       61,   198,    63,    12,     0,    13,    14,    15,   228,   229,
02758       18,    19,     0,     0,     0,     0,     0,   230,   231,   232,
02759       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02760        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02761       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02762       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02763        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02764        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02765       52,     0,     0,     0,    54,    55,    56,    57,    58,    59,
02766       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02767        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02768      198,    63,    12,     0,    13,    14,    15,    16,    17,    18,
02769       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02770       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02771        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02772       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02773       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02774        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02775        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02776        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02777        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02778        7,     0,     9,     0,     0,     0,    10,    11,    61,    62,
02779       63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02780        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02781       25,    26,     0,     0,   192,     0,     0,     0,     0,     0,
02782        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02783       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02784        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02785        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02786        0,   194,     0,     0,   195,    50,     0,    51,    52,     0,
02787        0,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02788        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02789        0,     9,     0,     0,     0,    10,    11,    61,   198,    63,
02790       12,     0,    13,    14,    15,   228,   229,    18,    19,     0,
02791        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02792       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02793      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02794       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02795        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02796        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02797      256,     0,     0,   300,    50,     0,    51,    52,     0,   301,
02798        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02799        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02800       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02801      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02802      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02803        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02804       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02805        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02806        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02807        0,     0,     0,     0,     0,   342,     0,     0,    49,    50,
02808        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02809       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02810        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02811       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02812        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02813       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02814      255,     0,     0,    32,    33,    34,   349,    36,    37,    38,
02815      350,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02816        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02817        0,     0,     0,     0,     0,     0,     0,   351,     0,     0,
02818      352,     0,     0,   195,    50,     0,    51,    52,     0,     0,
02819        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02820        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02821       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02822      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02823      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02824        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02825       34,   349,    36,    37,    38,   350,    40,     0,    41,    42,
02826        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02827        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02828        0,     0,     0,     0,     0,   352,     0,     0,   195,    50,
02829        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02830       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02831        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02832       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02833        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02834       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02835      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02836       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02837        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02838        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02839      256,     0,     0,   300,    50,     0,    51,    52,     0,     0,
02840        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02841        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02842       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02843      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02844      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02845        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02846       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02847        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02848        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02849        0,     0,     0,     0,     0,   887,     0,     0,   195,    50,
02850        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02851       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02852        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02853       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02854        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02855       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02856      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02857       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02858        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02859        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02860      897,     0,     0,   195,    50,     0,    51,    52,     0,     0,
02861        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02862        0,     0,     0,   584,   524,     0,     0,   585,     0,     0,
02863        0,     0,     0,     0,     0,     0,   257,   155,   156,   157,
02864      158,   159,   160,   161,   162,   163,     0,     0,   164,   165,
02865        0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
02866        0,     0,     0,     0,     0,     0,   170,     0,     0,     0,
02867        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02868        0,     0,     0,   171,   172,   173,   174,   175,   176,   177,
02869      178,   179,   180,     0,   181,   182,     0,     0,     0,     0,
02870      605,   516,     0,     0,   606,     0,     0,     0,     0,     0,
02871        0,     0,   183,   217,   155,   156,   157,   158,   159,   160,
02872      161,   162,   163,     0,     0,   164,   165,     0,     0,   166,
02873      167,   168,   169,     0,     0,     0,     0,     0,     0,     0,
02874        0,     0,     0,   170,     0,     0,     0,     0,     0,     0,
02875        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02876      171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
02877        0,   181,   182,     0,     0,     0,     0,   608,   524,     0,
02878        0,   609,     0,     0,     0,     0,     0,     0,     0,   183,
02879      217,   155,   156,   157,   158,   159,   160,   161,   162,   163,
02880        0,     0,   164,   165,     0,     0,   166,   167,   168,   169,
02881        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02882      170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02883        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
02884      174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
02885        0,     0,     0,     0,   679,   516,     0,     0,   680,     0,
02886        0,     0,     0,     0,     0,     0,   183,   217,   155,   156,
02887      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02888      165,     0,     0,   166,   167,   168,   169,     0,     0,     0,
02889        0,     0,     0,     0,     0,     0,     0,   170,     0,     0,
02890        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02891        0,     0,     0,     0,   171,   172,   173,   174,   175,   176,
02892      177,   178,   179,   180,     0,   181,   182,     0,     0,     0,
02893        0,   682,   524,     0,     0,   683,     0,     0,     0,     0,
02894        0,     0,     0,   183,   217,   155,   156,   157,   158,   159,
02895      160,   161,   162,   163,     0,     0,   164,   165,     0,     0,
02896      166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
02897        0,     0,     0,     0,   170,     0,     0,     0,     0,     0,
02898        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02899        0,   171,   172,   173,   174,   175,   176,   177,   178,   179,
02900      180,     0,   181,   182,     0,     0,     0,     0,   689,   516,
02901        0,     0,   690,     0,     0,     0,     0,     0,     0,     0,
02902      183,   217,   155,   156,   157,   158,   159,   160,   161,   162,
02903      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02904      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02905        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
02906        0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
02907      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02908      182,     0,     0,     0,     0,   562,   524,     0,     0,   563,
02909        0,     0,     0,     0,     0,     0,     0,   183,   217,   155,
02910      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02911      164,   165,     0,     0,   166,   167,   168,   169,     0,     0,
02912        0,     0,     0,     0,     0,     0,     0,     0,   170,     0,
02913        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02914        0,     0,     0,     0,     0,   171,   172,   173,   174,   175,
02915      176,   177,   178,   179,   180,     0,   181,   182,     0,     0,
02916        0,     0,   949,   516,     0,     0,   950,     0,     0,     0,
02917        0,     0,     0,     0,   183,   217,   155,   156,   157,   158,
02918      159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
02919        0,   166,   167,   168,   169,     0,     0,     0,     0,     0,
02920        0,     0,     0,     0,     0,   170,     0,     0,     0,     0,
02921        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02922        0,     0,   171,   172,   173,   174,   175,   176,   177,   178,
02923      179,   180,     0,   181,   182,     0,     0,     0,     0,   955,
02924      516,     0,     0,   956,     0,     0,     0,     0,     0,     0,
02925        0,   183,   217,   155,   156,   157,   158,   159,   160,   161,
02926      162,   163,     0,     0,   164,   165,     0,     0,   166,   167,
02927      168,   169,     0,     0,     0,     0,     0,     0,     0,     0,
02928        0,     0,   170,     0,     0,     0,     0,     0,     0,     0,
02929        0,     0,     0,     0,     0,     0,     0,     0,     0,   171,
02930      172,   173,   174,   175,   176,   177,   178,   179,   180,     0,
02931      181,   182,     0,     0,     0,     0,   958,   524,     0,     0,
02932      959,     0,     0,     0,     0,     0,     0,     0,   183,   217,
02933      155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
02934        0,   164,   165,     0,     0,   166,   167,   168,   169,     0,
02935        0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
02936        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02937        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
02938      175,   176,   177,   178,   179,   180,     0,   181,   182,     0,
02939        0,     0,     0,   562,   524,     0,     0,   563,     0,     0,
02940        0,     0,     0,     0,     0,   183,   217,   155,   156,   157,
02941      158,   159,   160,   161,   162,   163,     0,     0,   164,   165,
02942        0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
02943        0,     0,     0,     0,     0,     0,   170,     0,     0,     0,
02944        0,     0,     0,     0,   705,     0,     0,     0,     0,     0,
02945        0,     0,     0,   171,   172,   173,   174,   175,   176,   177,
02946      178,   179,   180,   650,   181,   182,     0,     0,   304,   305,
02947      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
02948      316,     0,   183,   317,   318,     0,     0,   304,   305,   306,
02949      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
02950        0,     0,   317,   318,     0,     0,     0,     0,     0,     0,
02951      319,     0,   320,   321,   322,   323,   324,   325,   326,   327,
02952      328,   329,     0,     0,     0,     0,     0,     0,     0,   319,
02953        0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02954      329
02955 };
02956 
02957 static const yytype_int16 yycheck[] =
02958 {
02959        2,    16,    17,    55,     2,    20,     4,    51,    28,    75,
02960       51,    52,   446,   336,   210,     8,    49,   537,    16,    17,
02961      303,     8,    20,    27,   536,    29,   556,    53,    83,   583,
02962      446,    86,   249,   331,    65,    28,   253,     4,    90,   442,
02963        8,    28,   748,   272,    13,   274,   352,   276,    49,    51,
02964       52,    49,    50,   607,    86,    53,   735,   667,   813,   836,
02965       28,   671,   641,   811,    62,   732,   615,     1,    22,    27,
02966       16,    17,    29,    50,    20,    25,   330,    75,   332,   482,
02967       53,   566,   567,    62,    82,    83,    26,    55,    86,    87,
02968       88,    89,   728,    13,    13,    61,   394,    25,    22,    13,
02969       61,    85,    75,   239,    76,    82,    83,    37,    38,    86,
02970      140,   398,   390,   749,    87,    88,    89,   147,   372,   373,
02971      398,    85,    90,   871,   558,    87,    85,   681,    65,   109,
02972       15,    13,    17,     0,    25,    25,   147,    13,   692,   393,
02973      106,   395,   114,   104,   105,   432,   444,   109,   925,    86,
02974      107,    25,    56,   732,   108,   139,   735,    25,   688,   914,
02975      140,     2,   195,     4,   300,   419,   696,   834,   916,    25,
02976      140,   140,    25,   722,   723,   139,   145,   147,   147,   113,
02977      139,    59,    60,   889,   108,   146,   620,   145,    85,   147,
02978      140,   445,   258,   655,   227,   943,   136,   195,   877,   214,
02979      662,   216,   217,   205,   620,   136,   239,   641,   210,   241,
02980      241,   145,   140,   147,   881,   217,   214,   147,   216,   217,
02981      146,   706,   220,   142,   222,   145,   145,   147,   147,   227,
02982      459,   145,    26,   147,   289,   290,   291,   292,   239,   146,
02983      238,   239,   139,   220,   542,   222,   649,   553,   858,   140,
02984      140,   255,   142,    25,   298,   834,   554,   836,    28,   303,
02985      258,   695,   811,   145,   813,   147,   140,   300,   214,   145,
02986      216,   147,   140,    99,   142,   301,   109,    26,   232,   695,
02987      792,   235,   337,   338,   140,   258,    25,   140,    87,   543,
02988      288,   289,   290,   291,   292,   293,   294,   295,   877,   300,
02989      298,   555,   300,   301,   241,   303,   142,   339,   220,    85,
02990      109,   147,   289,   290,   291,   292,   331,   294,   295,   298,
02991      140,   288,   871,   872,   303,    37,    38,    26,   301,   331,
02992      860,   243,   145,   331,   147,   333,    85,   109,   858,   337,
02993      338,   140,   136,   109,    85,    87,   925,    26,   142,   390,
02994       87,    85,   140,   351,   677,    87,    85,   142,    85,    56,
02995      337,   338,   330,   139,    26,   914,   109,   916,   140,    87,
02996      109,   143,   109,    88,   351,   147,   442,   109,   332,   394,
02997      378,   379,   912,   666,   580,   602,    85,   136,   429,   138,
02998      139,   109,   394,   413,   943,    85,   394,   238,   139,   378,
02999      379,   140,   339,   957,   143,   139,    85,    85,   147,   138,
03000      139,   138,   139,   142,   416,    52,   482,   354,   416,    56,
03001      413,   140,   140,    85,    87,   393,   413,   425,    85,   444,
03002      140,   865,    85,    85,    59,    60,    85,   136,   142,   138,
03003      139,   395,   444,   142,   442,   413,   444,   288,   138,   139,
03004      418,   136,   293,   142,    85,    14,    15,   136,    85,   138,
03005      139,   139,    85,   142,    68,   419,   564,   565,    85,   442,
03006      142,    85,   143,   475,   136,   443,   138,   139,    85,   109,
03007      142,   138,   139,   144,   482,   138,   139,   139,   400,   138,
03008      139,   445,   404,   137,   538,   407,    85,    87,    56,   532,
03009      504,   534,    52,   106,    54,    55,    56,    57,   139,   482,
03010      422,   138,   139,   106,    85,   427,   139,    85,   522,   109,
03011      641,   138,   139,   846,   138,   139,   528,   542,   530,   852,
03012      140,   138,   139,    87,   532,    87,   534,   603,    87,   554,
03013      542,    68,    68,    52,   542,    54,    55,    56,    57,   138,
03014      139,    17,   554,   140,   574,   109,   554,   109,   556,   557,
03015      109,   145,   564,   565,   566,   567,   520,   138,   139,   481,
03016      138,   139,    56,   541,   528,   416,    61,    94,   580,   583,
03017      557,   574,    68,   649,   425,   553,   140,   574,   140,   543,
03018      140,   140,    52,    25,   592,   597,   520,   143,   535,   536,
03019      137,   555,   140,   607,   528,   603,   574,   140,   140,   642,
03020      564,   565,   549,    61,   735,   592,    87,   738,   146,   104,
03021      105,   106,   666,    87,   626,    87,   628,   140,   630,   684,
03022      603,   140,   687,   119,   120,   121,   140,   935,   109,   641,
03023      564,   565,   596,   597,   642,   109,   698,   109,    61,    10,
03024       68,   649,     8,    54,   652,   653,   104,   105,   106,    13,
03025      658,   659,    63,    64,   666,   667,   109,   669,    61,   671,
03026      703,   704,   137,   652,   653,    52,   649,   681,   140,   658,
03027      659,    61,   936,   140,   140,    65,   684,   140,   692,   687,
03028      688,   104,   105,   106,    52,   140,   729,   730,   696,   117,
03029      118,   119,   120,   121,   706,   703,   704,   684,   741,   111,
03030      687,   104,   105,   106,   144,   836,    15,   838,    52,   140,
03031       54,    55,    56,    57,   104,   105,   728,   782,   145,   114,
03032      698,   729,   730,   193,   109,   140,   196,   197,    40,    41,
03033       42,    43,    44,   741,   140,   140,   779,   749,   685,   751,
03034       10,   753,   754,   786,   787,    89,   877,   790,   879,   140,
03035      697,    95,   883,    88,    16,    17,     9,   137,    20,    10,
03036       10,   769,   140,   806,   137,   777,    54,    55,   780,    57,
03037      140,   779,   694,   140,   782,    63,    64,   140,   786,   787,
03038      769,   140,   790,   137,    46,    47,   114,   140,   140,    51,
03039       52,   137,   140,   715,   925,   782,   927,    56,   806,   930,
03040       62,    63,   140,   140,   726,   416,   849,   819,   820,   140,
03041      822,    56,   824,   825,   945,   140,   140,   140,    87,   827,
03042      142,    52,   142,    54,    55,    56,    57,   539,   298,    89,
03043      889,   938,   722,   303,    92,   937,   967,   845,    95,    57,
03044       -1,   849,    90,   865,   827,   792,   858,   794,    68,   834,
03045      732,    52,   860,    54,    55,    56,    57,    -1,    89,   902,
03046       -1,   904,   845,    83,    84,    96,    -1,   910,    52,    -1,
03047       54,    55,    56,    57,    -1,    -1,    -1,   799,    -1,   891,
03048      892,   893,    -1,   895,   896,   116,    -1,    52,   810,    54,
03049       55,    56,    57,   815,   902,    -1,   904,   117,   118,   119,
03050      120,   121,   910,    -1,   912,    89,   918,   919,   920,   921,
03051      935,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   389,
03052      390,    -1,    -1,   935,    89,   937,   938,   935,   398,    -1,
03053       -1,   193,    -1,    -1,   196,   197,   198,    -1,    -1,   951,
03054      952,   953,   954,   957,    -1,   923,    52,    -1,    54,    55,
03055       56,    57,   214,   965,   216,   217,   934,    -1,    -1,   429,
03056       -1,   973,   432,    -1,   676,    52,    -1,    54,    55,    56,
03057       57,    -1,   936,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03058       -1,   693,    -1,    89,    -1,    -1,    -1,    -1,    -1,    95,
03059       96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03060       -1,    -1,    89,    -1,    -1,    -1,   476,    -1,    95,    96,
03061      116,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,
03062       -1,    -1,    -1,     2,    -1,     4,    -1,    -1,    -1,   116,
03063       -1,    -1,   119,    -1,    -1,    -1,   298,    -1,    -1,   145,
03064       -1,   303,   304,   305,   306,   307,   308,   309,   310,   311,
03065      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
03066      322,   323,   324,   325,   326,   327,   328,   329,   538,   331,
03067       49,   783,    -1,   785,    53,    52,    -1,    54,    55,    56,
03068       57,    -1,    -1,   795,    -1,    -1,    -1,    -1,   800,    -1,
03069       -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,
03070       -1,     2,    -1,     4,    -1,    -1,    -1,   577,    87,    88,
03071       89,    90,    89,    -1,    -1,    -1,   378,   379,    95,    96,
03072       -1,    -1,    -1,    -1,    -1,    -1,   388,   389,   390,    -1,
03073       -1,    -1,   394,    -1,   396,   397,   398,    -1,    -1,   116,
03074       -1,    -1,   119,   855,   856,    -1,    -1,    -1,    49,   628,
03075       -1,   630,    53,   415,    -1,    -1,    68,    52,   420,    54,
03076       55,    56,    57,    -1,    -1,   142,    -1,   429,    -1,    -1,
03077      432,    83,    84,     2,    75,     4,   646,    -1,    -1,    -1,
03078       -1,    -1,   444,    -1,    -1,    -1,    87,    88,    89,    -1,
03079        2,    -1,     4,    -1,    89,    -1,   666,    -1,    -1,   911,
03080       95,    96,   464,   465,   116,   117,   118,   119,   120,   121,
03081       -1,    -1,    -1,    -1,   476,    -1,   195,    -1,    -1,    -1,
03082       49,   116,    -1,    -1,   119,     0,    -1,   939,    -1,   941,
03083       -1,    -1,    -1,     8,     9,    10,    -1,    49,    13,    14,
03084       15,    52,    17,    54,    55,    56,    57,   142,   227,    -1,
03085      720,    -1,    27,    -1,    -1,    -1,    -1,    -1,    87,   238,
03086      239,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03087       -1,    -1,   751,    -1,   753,   754,   538,    -1,    89,   258,
03088      542,    68,    -1,    -1,    95,    96,    -1,    -1,   758,    -1,
03089       -1,    -1,   554,    -1,   195,    -1,    83,    84,    -1,    -1,
03090       -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,   119,   288,
03091       85,    -1,    -1,    -1,   293,   577,    -1,    -1,    -1,   789,
03092       -1,   300,   301,    -1,    -1,    -1,   227,   114,   115,   116,
03093      117,   118,   119,   120,   121,    -1,    -1,   238,   239,    -1,
03094      819,   820,    -1,   822,    -1,   824,   825,    -1,    -1,    -1,
03095       -1,    -1,    -1,    -1,   333,    -1,    -1,   258,    -1,    -1,
03096       -1,    -1,   137,    -1,   139,    -1,   195,   142,   143,    -1,
03097      145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03098       -1,    -1,    -1,   195,   646,    -1,    -1,   288,   650,    -1,
03099      652,   653,   293,    -1,    -1,    -1,   658,   659,   227,   300,
03100      301,    -1,    -1,    -1,   666,    -1,    -1,    -1,    -1,   238,
03101      239,    -1,   891,   892,   893,   227,   895,   896,    -1,    -1,
03102       -1,    -1,    -1,    -1,    -1,    -1,   238,   239,    -1,    -1,
03103       -1,    -1,   333,    -1,    -1,    -1,    -1,   416,    -1,   918,
03104      919,   920,   921,   705,    -1,    -1,   425,    -1,   710,   711,
03105       -1,   713,   714,    -1,    -1,    -1,    -1,    -1,   720,   288,
03106       -1,    -1,    -1,   442,   293,    -1,    -1,    -1,    -1,    -1,
03107       -1,   300,   951,   952,   953,   954,   288,    -1,    -1,    -1,
03108       -1,   293,    -1,    -1,    -1,    -1,   965,    -1,   300,    -1,
03109       -1,    -1,    -1,    -1,   973,    -1,   758,    -1,    -1,    -1,
03110      762,    -1,    -1,   482,   333,    -1,    -1,   769,    -1,    -1,
03111       -1,    -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,
03112       -1,   333,    -1,    -1,   425,    -1,    -1,   789,    -1,    -1,
03113       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03114       -1,   442,    -1,    -1,    -1,   807,    -1,    -1,    -1,    -1,
03115       -1,    -1,    -1,   532,    -1,   534,    -1,    -1,    -1,    -1,
03116       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03117       68,    69,    70,    71,    72,    73,    74,   556,    -1,    77,
03118       78,   482,    -1,    -1,    -1,    83,    84,   416,    -1,    -1,
03119       -1,    -1,    -1,    -1,    -1,    -1,   425,    -1,    -1,    -1,
03120       -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
03121       44,    -1,    -1,   425,   112,   113,   114,   115,   116,   117,
03122      118,   119,   120,   121,   603,    -1,    -1,    -1,    -1,    -1,
03123       -1,   532,    -1,   534,    68,    69,    70,    71,    72,    73,
03124       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03125       84,    -1,    -1,    -1,    -1,   556,    -1,    -1,    -1,    -1,
03126       -1,    -1,    -1,   642,    -1,    -1,    -1,    -1,    -1,    -1,
03127      649,    -1,    -1,   935,    -1,    -1,   110,    -1,   112,   113,
03128      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03129       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03130       -1,    -1,   603,   532,    -1,   534,   140,    -1,    -1,   688,
03131       -1,    -1,    -1,    -1,    -1,    -1,    -1,   696,    -1,    -1,
03132      532,    -1,   534,    -1,   703,   704,    -1,   556,    -1,    -1,
03133       -1,    -1,    -1,   634,    -1,    -1,    -1,    -1,    -1,    -1,
03134       -1,   642,    -1,    -1,   556,    -1,    -1,    -1,   649,    -1,
03135      729,   730,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
03136       -1,    -1,   741,    -1,    -1,    -1,    -1,    -1,    66,    67,
03137       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03138       78,    -1,    -1,    81,    82,    83,    84,   688,    -1,    -1,
03139       -1,    -1,    -1,    -1,    -1,   696,    -1,    95,    -1,    -1,
03140      779,    -1,   703,   704,    -1,    -1,    -1,   786,   787,    -1,
03141       -1,   790,    -1,   642,   112,   113,   114,   115,   116,   117,
03142      118,   119,   120,   121,    -1,   123,   124,   806,   729,   730,
03143      642,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03144      741,    -1,    -1,   141,   142,    -1,    -1,    -1,   827,    -1,
03145       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   688,
03146       -1,    -1,    -1,    -1,    -1,    -1,   845,   696,    -1,    -1,
03147      849,    -1,    -1,    -1,   703,   704,   688,    -1,   779,    -1,
03148       -1,   860,    -1,    -1,   696,   786,   787,    -1,    -1,   790,
03149       -1,   703,   704,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03150      729,   730,    -1,    -1,    -1,   806,    -1,    -1,    -1,    -1,
03151       -1,    -1,   741,    -1,    -1,    -1,    -1,   729,   730,    -1,
03152       -1,    -1,    -1,   902,    -1,   904,   827,    -1,    -1,   741,
03153       -1,   910,    -1,   912,    -1,    -1,    -1,    68,    69,    70,
03154       71,    72,    73,    74,   845,    -1,    77,    78,   849,    -1,
03155      779,    -1,    83,    84,    -1,    -1,    -1,   786,   787,   860,
03156       -1,   790,    -1,    46,    47,    -1,    -1,   779,    51,    52,
03157       53,    -1,    -1,    -1,   786,   787,    -1,   806,   790,    -1,
03158       63,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03159      121,    -1,    75,    -1,   806,    -1,    -1,    -1,    -1,    -1,
03160       -1,   902,    -1,   904,    87,    88,    89,    -1,    -1,   910,
03161       -1,   912,    -1,    -1,    -1,    -1,   845,    -1,    -1,    -1,
03162      849,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03163       -1,   860,    -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,
03164       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   860,    -1,
03165       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03166       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03167       -1,    -1,    -1,   902,    -1,   904,    -1,    -1,    -1,    -1,
03168       -1,   910,    -1,   912,    -1,    -1,    -1,    -1,    -1,    -1,
03169      902,    -1,   904,    -1,    -1,    -1,    -1,    -1,   910,    -1,
03170      912,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
03171      193,    -1,    -1,   196,   197,   198,    66,    67,    68,    69,
03172       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
03173       -1,    81,    82,    83,    84,    -1,    -1,    68,    69,    70,
03174       71,    72,    73,    74,    75,    95,    77,    78,    -1,    -1,
03175       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03176       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03177      120,   121,    -1,   123,   124,   258,    -1,    -1,    -1,    -1,
03178       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03179      121,   141,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03180       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03181       74,    75,    76,    77,    78,    79,    80,    -1,   301,    83,
03182       84,   304,   305,   306,   307,   308,   309,   310,   311,   312,
03183      313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
03184      323,   324,   325,   326,   327,   328,   329,    -1,   112,   113,
03185      114,   115,   116,   117,   118,   119,   120,   121,    52,    53,
03186       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03187       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03188       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03189       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03190       -1,    95,    -1,    -1,    -1,   388,   389,   390,    -1,    -1,
03191       -1,    -1,    -1,   396,   397,   398,    -1,    -1,   112,   113,
03192      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03193      124,    -1,   415,    -1,    -1,    -1,    -1,   420,    -1,    -1,
03194       -1,    -1,    -1,    -1,    -1,    -1,   429,   141,   142,   432,
03195       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,
03196       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03197       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03198       -1,   464,   465,    -1,     0,     1,    -1,     3,     4,     5,
03199        6,     7,    -1,   476,    -1,    11,    12,    -1,    -1,   482,
03200       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03201       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03202       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03203       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03204       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03205       66,    67,    -1,    -1,    -1,   538,    -1,    -1,    -1,    -1,
03206       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03207       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03208       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03209       -1,    -1,    -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,
03210       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03211       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03212      603,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,
03213       -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03214       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03215       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03216       -1,    -1,    -1,   646,    -1,    -1,   649,   650,    -1,    -1,
03217       -1,     0,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
03218        9,    10,    -1,   666,    13,    14,    15,    -1,    17,    -1,
03219       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,
03220       29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,
03221       -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,    -1,
03222       -1,    -1,   705,    -1,    -1,    -1,    -1,   710,   711,    -1,
03223      713,   714,    -1,    -1,    -1,    -1,    -1,   720,    -1,    68,
03224       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
03225       79,    80,    -1,    -1,    83,    84,    85,    -1,    87,    88,
03226       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
03227       -1,    -1,    -1,    -1,    -1,   758,    -1,    -1,   107,   762,
03228      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
03229      119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03230       -1,    -1,    -1,    -1,    -1,    -1,   789,    -1,   137,   138,
03231      139,   140,     0,    -1,   143,   144,   145,    -1,   147,    -1,
03232        8,     9,    10,    -1,   807,    13,    14,    15,    -1,    17,
03233       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,    27,
03234       28,    -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    37,
03235       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03236       -1,    -1,   845,    68,    69,    70,    71,    72,    73,    74,
03237       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03238       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
03239       78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    -1,
03240       88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,   114,
03241      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03242       -1,    -1,   110,    -1,   112,   113,   114,   115,   116,   117,
03243      118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
03244       -1,    -1,   147,    -1,    -1,    -1,    -1,    -1,   136,   137,
03245      138,   139,   140,     0,   142,   143,   144,   145,    -1,   147,
03246       -1,     8,     9,    10,    -1,    -1,    13,    14,    15,    -1,
03247       17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03248       27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03249       37,    38,    -1,    40,    41,    42,    43,    44,    -1,    -1,
03250       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03251       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03252       84,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03253       77,    78,    79,    80,    -1,    -1,    83,    84,    85,    -1,
03254       -1,    88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,
03255      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03256      107,    -1,    -1,   110,   111,   112,   113,   114,   115,   116,
03257      117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
03258       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03259      137,   138,   139,   140,     0,    -1,   143,   144,   145,    -1,
03260      147,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03261       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03262       26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03263       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03264       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03265       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03266       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03267       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03268       -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,    -1,
03269       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03270       -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,
03271      116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
03272       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03273      136,   137,   138,   139,   140,     0,   142,   143,   144,   145,
03274       -1,   147,    -1,     8,     9,    10,    -1,    -1,    13,    14,
03275       15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03276       -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
03277       -1,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03278       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03279       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03280       -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
03281       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03282       85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,
03283       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03284       -1,    -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,
03285      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03286       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03287       -1,    -1,   137,   138,   139,   140,     0,   142,   143,   144,
03288      145,    -1,   147,    -1,     8,     9,    10,    -1,    -1,    -1,
03289       14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,
03290       -1,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03291       -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,    43,
03292       44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03293       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03294       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03295       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03296       84,    85,     0,    87,    -1,    -1,    -1,    -1,    -1,    -1,
03297        8,     9,    10,    -1,    -1,    -1,    14,    15,    -1,    17,
03298       -1,    -1,    -1,    -1,    -1,   109,   110,    -1,   112,   113,
03299      114,   115,   116,   117,   118,   119,   120,   121,    -1,    37,
03300       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03301       -1,    -1,   136,   137,   138,   139,   140,    -1,    -1,   143,
03302       -1,   145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,
03303       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
03304       78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    87,
03305       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03306       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03307       -1,   109,   110,    -1,   112,   113,   114,   115,   116,   117,
03308      118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
03309       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,
03310      138,   139,   140,    -1,    -1,   143,    -1,   145,     1,   147,
03311        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
03312       -1,    -1,    15,    16,    -1,    18,    19,    20,    21,    22,
03313       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03314       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03315       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03316       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03317       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03318       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03319       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03320       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03321      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03322       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03323      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03324       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03325       -1,    -1,   145,     1,   147,     3,     4,     5,     6,     7,
03326       -1,    -1,    10,    11,    12,    -1,    14,    15,    16,    -1,
03327       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03328       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03329       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03330       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03331       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03332       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03333       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03334       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03335       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03336       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03337       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03338       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03339       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     1,   147,
03340        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03341       -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
03342       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03343       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03344       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03345       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03346       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03347       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03348       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03349       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03350      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03351       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03352      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
03353        3,     4,     5,     6,     7,    -1,    -1,    -1,    11,    12,
03354       -1,    -1,   145,    16,   147,    18,    19,    20,    21,    22,
03355       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03356       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03357       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03358       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03359       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03360       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03361       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03362       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03363      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03364       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03365      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03366       -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,    -1,    -1,
03367       -1,    -1,   145,     1,   147,     3,     4,     5,     6,     7,
03368       -1,    -1,    10,    11,    12,    -1,    -1,    15,    16,    -1,
03369       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03370       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03371       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03372       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03373       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03374       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03375       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03376       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03377       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03378       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03379       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03380       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03381       -1,     9,    10,    11,    12,    -1,    -1,   145,    16,   147,
03382       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03383       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03384       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03385       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03386       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03387       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03388       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03389       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03390       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03391       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03392       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03393       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03394       -1,    -1,    -1,    11,    12,    -1,    -1,   145,    16,   147,
03395       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03396       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03397       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03398       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03399       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03400       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03401       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03402       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03403       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03404       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03405       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03406       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03407       -1,    -1,    -1,    11,    12,   143,    -1,   145,    16,   147,
03408       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03409       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03410       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03411       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03412       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03413       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03414       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03415       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03416       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03417       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03418       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03419       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03420       -1,    -1,    -1,    11,    12,   143,    -1,   145,    16,   147,
03421       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03422       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03423       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03424       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03425       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03426       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03427       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03428       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03429       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03430       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03431       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03432       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,
03433       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     1,   147,
03434        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03435       -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,    22,
03436       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03437       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03438       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03439       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03440       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03441       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03442       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03443       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03444      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03445       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03446      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03447        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03448       -1,    -1,   145,    16,   147,    18,    19,    20,    21,    22,
03449       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03450       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03451       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03452       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03453       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03454       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03455       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03456       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03457      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03458        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03459      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03460       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03461       34,    35,    36,    -1,   147,    39,    -1,    -1,    -1,    -1,
03462       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03463       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03464       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03465       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03466       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03467       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03468       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03469       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
03470      124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03471        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03472       -1,   145,    16,   147,    18,    19,    20,    21,    22,    23,
03473       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03474       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03475       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03476       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03477       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03478       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03479       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03480       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03481       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03482        5,     6,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03483      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03484       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03485       35,    36,    -1,   147,    39,    -1,    -1,    -1,    -1,    -1,
03486       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03487       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03488       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03489       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03490       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03491       95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03492       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03493       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03494       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
03495        7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,
03496      145,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03497       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03498       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03499       -1,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03500       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
03501       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03502       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03503       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
03504       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03505       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03506       -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
03507       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03508       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     3,
03509        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
03510       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
03511       24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
03512       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
03513       -1,    45,    46,    47,    48,    49,    50,    51,    52,    53,
03514       54,    55,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
03515       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03516       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03517       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03518       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03519       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03520      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03521      124,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03522        7,    -1,    -1,    -1,    11,    12,    -1,   141,   142,    16,
03523       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
03524       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03525       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03526       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03527       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03528       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03529       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03530       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    96,
03531       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03532       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03533       -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
03534       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,   136,
03535       -1,    11,    12,    -1,    -1,   142,    16,    -1,    18,    19,
03536       20,    21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,
03537       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03538       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03539       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
03540       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03541       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03542       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03543       90,    -1,    92,    93,    -1,    95,    96,    97,    98,    99,
03544      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03545       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03546       -1,    -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,
03547        3,     4,     5,    -1,     7,    -1,   136,    -1,    11,    12,
03548       -1,    -1,   142,    16,    -1,    18,    19,    20,    21,    22,
03549       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03550       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03551       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03552       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03553       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03554       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03555       -1,    -1,    -1,    86,    87,    -1,    89,    90,    -1,    92,
03556       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03557      103,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
03558       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,   122,
03559      123,   124,    11,    12,    -1,    -1,    -1,    16,    -1,    18,
03560       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,   142,
03561       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03562       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03563       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
03564       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03565       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03566       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03567       89,    90,    -1,    92,    93,    -1,    95,    96,    97,    98,
03568       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03569       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03570        5,    -1,     7,   122,   123,   124,    11,    12,    -1,    -1,
03571       -1,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03572       -1,    -1,    -1,   142,    -1,    30,    31,    32,    33,    34,
03573       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03574       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03575       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03576       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03577       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03578       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03579       95,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03580       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03581       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03582       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03583       -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,     3,     4,
03584        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
03585       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
03586       25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03587       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
03588       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03589       55,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03590       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03591       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03592       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03593       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03594       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03595      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03596       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03597       -1,    -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,
03598        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
03599       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
03600       26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03601       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
03602       46,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
03603       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03604       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03605       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03606       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03607       -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03608       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03609      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03610       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03611       -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,
03612        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
03613       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
03614       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03615       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03616       47,    48,    49,    50,    51,    52,    53,    -1,    -1,    56,
03617       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
03618       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03619       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
03620       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
03621       -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03622       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03623      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
03624       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03625       -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,     7,
03626        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
03627       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
03628       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    37,
03629       38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03630       48,    49,    50,    51,    52,    53,    -1,    -1,    56,    -1,
03631       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
03632       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03633       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03634       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
03635       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03636       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
03637      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,     3,
03638        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03639       -1,    -1,    16,   141,    18,    19,    20,    21,    22,    23,
03640       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03641       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03642       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03643       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03644       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03645       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03646       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03647       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03648       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03649       -1,     3,     4,     5,    -1,     7,    -1,    -1,   122,    11,
03650       12,    -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,
03651       22,    23,    24,    -1,    -1,    -1,   140,    -1,    30,    31,
03652       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03653       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03654       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03655       62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03657       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03658       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03659      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03660       -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,
03661      122,    11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,
03662       20,    21,    22,    23,    24,    -1,    -1,    -1,   140,    -1,
03663       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03664       -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
03665       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03666       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03667       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03668       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03669       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03670      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03671       -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03672       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03673       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03674       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03675       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03676       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03677       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03678       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03679       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03680       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03681      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03682       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03683       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03684       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03685       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03686       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03687       52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
03688       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03689       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03690       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03691       92,    93,    -1,    95,    96,    97,    98,    99,   100,   101,
03692      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03693        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03694      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03695       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03696       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03697       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03698       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03699       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03700       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03701       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03702       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03703      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03704        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03705      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03706       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03707       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03708       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03709       54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
03710       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03711       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03712       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03713       -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
03714       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03715        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03716      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03717       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03718       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03719       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03720       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03721       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03722       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03723       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03724       -1,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03725       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03726       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03727       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03728       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03729       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03730       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03731       56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
03732       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03733       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03734       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03735       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03736       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03737        7,    -1,    -1,    -1,    11,    12,   122,   123,   124,    16,
03738       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03739       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03740       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03741       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03742       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03743       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03744       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03745       -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,    -1,
03746       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03747       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03748       -1,    -1,    -1,    11,    12,   122,   123,   124,    16,    -1,
03749       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03750       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03751       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03752       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03753       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03754       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03755       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03756       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03757       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03758       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
03759       -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
03760       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03761       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03762       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03763       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03764       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03765       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03766       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03767       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
03768       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03769       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03770       -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
03771       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03772       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03773       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03774       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03775       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03776       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03777       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03778       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03779      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03780       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03781       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03782       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03783       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03784       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03785       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03786       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03787       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03788       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03789       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03790      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03791       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03792       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03793       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03794       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03795       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03796       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03797       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03798       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03799       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03800       92,    93,    -1,    95,    -1,    97,    98,    99,   100,   101,
03801      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03802        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03803      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03804       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03805       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03806       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03807       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03808       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03809       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03810       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03811       93,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
03812      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03813        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03814      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03815       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03816       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03817       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03818       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03819       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03820       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03821       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03822       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03823       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03824        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03825      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03826       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03827       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03828       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03829       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03830       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03831       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03832       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03833       -1,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03834       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03835       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03836       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03837       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03838       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03839       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03840       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03841       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03842       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03843       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03844       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03845       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03846       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03847       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03848       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03849       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03850       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03851       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03852       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03853       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03854       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03855      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03856       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03857       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03858       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03859       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03860       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03861       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03862       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03863       -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,
03864       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03865       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03866       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03867       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03868       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03869       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03870       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03871       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03872       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03873       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03874       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03875       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03876      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03877       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03878       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03879       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03880       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03881       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03882       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03883       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03884       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03885       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03886       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03887       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03888       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03889       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03890       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03891       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03892       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03893       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03894       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03895       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03896       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03897      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03898       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03899       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03900       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03901       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03902       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03903       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03904       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03905       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03906       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03907       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03908       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
03909       -1,    -1,    -1,    -1,    -1,    -1,   122,    66,    67,    68,
03910       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03911       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03912       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
03913       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03914       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
03915      119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,
03916       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
03917       -1,    -1,   141,   142,    66,    67,    68,    69,    70,    71,
03918       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
03919       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03920       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
03921       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03922      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03923       -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,
03924       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
03925      142,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03926       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03927       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03928       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03929       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03930      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03931       -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
03932       -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,
03933       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03934       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03935       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
03936       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03937       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
03938      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,
03939       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
03940       -1,    -1,    -1,   141,   142,    66,    67,    68,    69,    70,
03941       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
03942       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03943       -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
03944       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03945       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03946      121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,
03947       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03948      141,   142,    66,    67,    68,    69,    70,    71,    72,    73,
03949       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03950       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03951       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03952       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03953      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03954      124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,
03955       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,
03956       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03957       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
03958       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
03959       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03960       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03961      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
03962       -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
03963       -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,    69,
03964       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
03965       -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
03966       -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
03967       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03968       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03969      120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,
03970       53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
03971       -1,   141,   142,    66,    67,    68,    69,    70,    71,    72,
03972       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
03973       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03974       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03975       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
03976      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03977      123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,
03978       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,
03979       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03980       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03981       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03982       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03983       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03984      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03985       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
03986       -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,
03987       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03988       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03989       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
03990       -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,
03991       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
03992      119,   120,   121,    44,   123,   124,    -1,    -1,    68,    69,
03993       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
03994       80,    -1,   141,    83,    84,    -1,    -1,    68,    69,    70,
03995       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03996       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03997      110,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03998      120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
03999       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04000      121
04001 };
04002 
04003 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
04004    symbol of state STATE-NUM.  */
04005 static const yytype_uint16 yystos[] =
04006 {
04007        0,   149,   150,     0,     1,     3,     4,     5,     6,     7,
04008       11,    12,    16,    18,    19,    20,    21,    22,    23,    24,
04009       30,    31,    32,    33,    34,    35,    36,    39,    45,    46,
04010       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
04011       57,    59,    60,    62,    63,    64,    66,    67,    86,    89,
04012       90,    92,    93,    95,    97,    98,    99,   100,   101,   102,
04013      103,   122,   123,   124,   151,   152,   153,   158,   160,   162,
04014      163,   166,   167,   169,   170,   171,   173,   174,   184,   198,
04015      215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
04016      225,   248,   249,   259,   260,   261,   262,   263,   264,   265,
04017      268,   278,   280,   281,   282,   283,   284,   285,   308,   319,
04018      153,     3,     4,     5,     6,     7,     8,     9,    10,    11,
04019       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
04020       22,    23,    24,    25,    26,    30,    31,    32,    33,    34,
04021       35,    36,    37,    38,    39,    45,    46,    47,    48,    49,
04022       50,    51,    52,    53,    56,    66,    67,    68,    69,    70,
04023       71,    72,    73,    74,    77,    78,    81,    82,    83,    84,
04024       95,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04025      121,   123,   124,   141,   177,   178,   179,   180,   182,   183,
04026      278,   280,    39,    58,    86,    89,    95,    96,   123,   166,
04027      174,   184,   186,   191,   194,   196,   215,   282,   284,   285,
04028      306,   307,   191,   191,   142,   192,   193,   142,   188,   192,
04029      142,   147,   313,    54,   179,   313,   154,   136,    21,    22,
04030       30,    31,    32,   184,   215,   308,   184,    56,     1,    89,
04031      156,   157,   158,   168,   169,   319,   160,   187,   196,   306,
04032      319,   186,   305,   306,   319,    46,    86,   122,   140,   173,
04033      198,   215,   282,   285,   241,   242,    54,    55,    57,   177,
04034      271,   279,   270,   271,   272,   146,   266,   146,   269,    59,
04035       60,   162,   184,   184,   145,   147,   312,   317,   318,    40,
04036       41,    42,    43,    44,    37,    38,    28,   246,   109,   140,
04037       89,    95,   170,   109,    68,    69,    70,    71,    72,    73,
04038       74,    75,    76,    77,    78,    79,    80,    83,    84,   110,
04039      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04040       85,   138,   139,   199,   160,   161,   161,   202,   204,   161,
04041      312,   318,    86,   167,   174,   215,   231,   282,   285,    52,
04042       56,    83,    86,   175,   176,   215,   282,   285,   176,    33,
04043       34,    35,    36,    49,    50,    51,    52,    56,   142,   177,
04044      283,   303,    85,   139,    26,   136,   250,   262,    87,    87,
04045      188,   192,   250,   140,   186,    56,   186,   186,   109,    88,
04046      140,   195,   319,    85,   138,   139,    87,    87,   140,   195,
04047      191,   313,   314,   191,   190,   191,   319,   160,   314,   160,
04048       54,    63,    64,   159,   142,   185,   136,   156,    85,   139,
04049       87,   158,   168,   143,   312,   318,   314,   200,   144,   140,
04050      147,   316,   140,   316,   137,   316,   313,    56,    59,    60,
04051      170,   172,   140,    85,   138,   139,   243,    61,   104,   105,
04052      106,   273,   106,   273,   106,    65,   273,   106,   106,   267,
04053      273,   106,    61,   106,    68,    68,   145,   153,   161,   161,
04054      161,   161,   158,   160,   160,   247,    95,   162,   186,   196,
04055      197,   168,   140,   173,   140,   162,   184,   186,   197,   184,
04056      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04057      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04058      184,   184,   184,   184,   184,    52,    53,    56,   182,   188,
04059      309,   310,   190,    52,    53,    56,   182,   188,   309,   155,
04060      156,    13,   227,   317,   227,   161,   161,   312,    17,   253,
04061       56,    85,   138,   139,    25,   160,    52,    56,   175,     1,
04062      113,   286,   317,    85,   138,   139,   211,   304,   212,    85,
04063      139,   311,    52,    56,   309,   309,   252,   251,   162,   184,
04064      162,   184,    94,   164,   181,   184,   186,    95,   186,   194,
04065      306,    52,    56,   190,    52,    56,   307,   314,   143,   314,
04066      314,   179,   201,   184,   151,   137,   309,   309,   184,   314,
04067      158,   314,   306,   140,   172,    52,    56,   190,    52,    56,
04068       52,    54,    55,    56,    57,    89,    95,    96,   116,   119,
04069      142,   244,   289,   290,   291,   292,   293,   294,   297,   298,
04070      299,   300,   301,   275,   274,   146,   273,   146,   184,   184,
04071       76,   114,   236,   237,   319,   186,   140,   314,   172,   140,
04072       44,   313,    87,    87,   188,   192,   313,   315,    87,    87,
04073      188,   189,   192,   319,    10,   226,     8,   255,   319,   156,
04074       13,   156,    27,   228,   317,   228,   253,   196,   226,    52,
04075       56,   190,    52,    56,   206,   209,   317,   287,   208,    52,
04076       56,   175,   190,   155,   160,   142,   288,   289,   213,   189,
04077      192,   189,   192,   236,   236,    44,   165,   179,   186,   195,
04078       87,    87,   315,    87,    87,   160,   137,   316,   170,   315,
04079      109,    52,    89,    95,   232,   233,   234,   291,   289,    29,
04080      107,   245,   140,   302,   319,   140,   302,    52,   140,   302,
04081       52,   276,    54,    55,    57,   277,   285,    52,   145,   235,
04082      238,   293,   295,   296,   299,   301,   319,   156,    95,   186,
04083      172,   184,   111,   162,   184,   162,   184,   164,   144,    87,
04084      162,   184,   162,   184,   164,   186,   197,   256,   319,    15,
04085      230,   319,    14,   229,   230,   230,   203,   205,   226,   140,
04086      227,   315,   161,   317,   161,   155,   315,   226,   314,   289,
04087      155,   317,   177,   156,   156,   184,   236,    87,   314,   186,
04088      234,   140,   291,   140,   314,   238,   156,   156,   292,   297,
04089      299,   301,   293,   294,   299,   293,   156,   109,    52,   239,
04090      240,   290,   238,   114,   140,   302,   140,   302,   140,   302,
04091       10,   186,   184,   162,   184,    88,   257,   319,   156,     9,
04092      258,   319,   161,   226,   226,   156,   156,   186,   156,   228,
04093      210,   317,   226,   314,   226,   214,    10,   137,   156,   314,
04094      233,   140,    95,   232,   314,    10,   137,   140,   302,   140,
04095      302,   140,   302,   140,   302,   302,   137,    86,   215,   140,
04096      114,   296,   299,   293,   295,   299,   293,    86,   174,   215,
04097      282,   285,   227,   156,   227,   226,   226,   230,   253,   254,
04098      207,   155,   288,   137,   140,   233,   140,   291,   293,   299,
04099      293,   293,    56,    85,   240,   140,   302,   140,   302,   302,
04100      140,   302,   302,    56,    85,   138,   139,   156,   156,   156,
04101      226,   155,   233,   140,   302,   140,   302,   302,   302,    52,
04102       56,   293,   299,   293,   293,    52,    56,   190,    52,    56,
04103      255,   229,   226,   226,   233,   293,   302,   140,   302,   302,
04104      302,   315,   302,   293,   302
04105 };
04106 
04107 #define yyerrok         (yyerrstatus = 0)
04108 #define yyclearin       (yychar = YYEMPTY)
04109 #define YYEMPTY         (-2)
04110 #define YYEOF           0
04111 
04112 #define YYACCEPT        goto yyacceptlab
04113 #define YYABORT         goto yyabortlab
04114 #define YYERROR         goto yyerrorlab
04115 
04116 
04117 /* Like YYERROR except do call yyerror.  This remains here temporarily
04118    to ease the transition to the new meaning of YYERROR, for GCC.
04119    Once GCC version 2 has supplanted version 1, this can go.  However,
04120    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
04121    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
04122    discussed.  */
04123 
04124 #define YYFAIL          goto yyerrlab
04125 #if defined YYFAIL
04126   /* This is here to suppress warnings from the GCC cpp's
04127      -Wunused-macros.  Normally we don't worry about that warning, but
04128      some users do, and we want to make it easy for users to remove
04129      YYFAIL uses, which will produce warnings from Bison 2.5.  */
04130 #endif
04131 
04132 #define YYRECOVERING()  (!!yyerrstatus)
04133 
04134 #define YYBACKUP(Token, Value)                                  \
04135 do                                                              \
04136   if (yychar == YYEMPTY && yylen == 1)                          \
04137     {                                                           \
04138       yychar = (Token);                                         \
04139       yylval = (Value);                                         \
04140       yytoken = YYTRANSLATE (yychar);                           \
04141       YYPOPSTACK (1);                                           \
04142       goto yybackup;                                            \
04143     }                                                           \
04144   else                                                          \
04145     {                                                           \
04146       parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04147       YYERROR;                                                  \
04148     }                                                           \
04149 while (YYID (0))
04150 
04151 
04152 #define YYTERROR        1
04153 #define YYERRCODE       256
04154 
04155 
04156 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
04157    If N is 0, then set CURRENT to the empty location which ends
04158    the previous symbol: RHS[0] (always defined).  */
04159 
04160 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04161 #ifndef YYLLOC_DEFAULT
04162 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
04163     do                                                                  \
04164       if (YYID (N))                                                    \
04165         {                                                               \
04166           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
04167           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
04168           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
04169           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
04170         }                                                               \
04171       else                                                              \
04172         {                                                               \
04173           (Current).first_line   = (Current).last_line   =              \
04174             YYRHSLOC (Rhs, 0).last_line;                                \
04175           (Current).first_column = (Current).last_column =              \
04176             YYRHSLOC (Rhs, 0).last_column;                              \
04177         }                                                               \
04178     while (YYID (0))
04179 #endif
04180 
04181 
04182 /* YY_LOCATION_PRINT -- Print the location on the stream.
04183    This macro was not mandated originally: define only if we know
04184    we won't break user code: when these are the locations we know.  */
04185 
04186 #ifndef YY_LOCATION_PRINT
04187 # if defined YYLTYPE_IS_TRIVIAL && YYLTYPE_IS_TRIVIAL
04188 #  define YY_LOCATION_PRINT(File, Loc)                  \
04189      fprintf (File, "%d.%d-%d.%d",                      \
04190               (Loc).first_line, (Loc).first_column,     \
04191               (Loc).last_line,  (Loc).last_column)
04192 # else
04193 #  define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04194 # endif
04195 #endif
04196 
04197 
04198 /* YYLEX -- calling `yylex' with the right arguments.  */
04199 
04200 #ifdef YYLEX_PARAM
04201 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04202 #else
04203 # define YYLEX yylex (&yylval)
04204 #endif
04205 
04206 /* Enable debugging if requested.  */
04207 #if YYDEBUG
04208 
04209 # ifndef YYFPRINTF
04210 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
04211 #  define YYFPRINTF fprintf
04212 # endif
04213 
04214 # define YYDPRINTF(Args)                        \
04215 do {                                            \
04216   if (yydebug)                                  \
04217     YYFPRINTF Args;                             \
04218 } while (YYID (0))
04219 
04220 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
04221 do {                                                                      \
04222   if (yydebug)                                                            \
04223     {                                                                     \
04224       YYFPRINTF (stderr, "%s ", Title);                                   \
04225       yy_symbol_print (stderr,                                            \
04226                   Type, Value, parser); \
04227       YYFPRINTF (stderr, "\n");                                           \
04228     }                                                                     \
04229 } while (YYID (0))
04230 
04231 
04232 /*--------------------------------.
04233 | Print this symbol on YYOUTPUT.  |
04234 `--------------------------------*/
04235 
04236 /*ARGSUSED*/
04237 #if (defined __STDC__ || defined __C99__FUNC__ \
04238      || defined __cplusplus || defined _MSC_VER)
04239 static void
04240 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04241 #else
04242 static void
04243 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04244     FILE *yyoutput;
04245     int yytype;
04246     YYSTYPE const * const yyvaluep;
04247     struct parser_params *parser;
04248 #endif
04249 {
04250   if (!yyvaluep)
04251     return;
04252   YYUSE (parser);
04253 # ifdef YYPRINT
04254   if (yytype < YYNTOKENS)
04255     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04256 # else
04257   YYUSE (yyoutput);
04258 # endif
04259   switch (yytype)
04260     {
04261       default:
04262         break;
04263     }
04264 }
04265 
04266 
04267 /*--------------------------------.
04268 | Print this symbol on YYOUTPUT.  |
04269 `--------------------------------*/
04270 
04271 #if (defined __STDC__ || defined __C99__FUNC__ \
04272      || defined __cplusplus || defined _MSC_VER)
04273 static void
04274 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04275 #else
04276 static void
04277 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04278     FILE *yyoutput;
04279     int yytype;
04280     YYSTYPE const * const yyvaluep;
04281     struct parser_params *parser;
04282 #endif
04283 {
04284   if (yytype < YYNTOKENS)
04285     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04286   else
04287     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04288 
04289   yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04290   YYFPRINTF (yyoutput, ")");
04291 }
04292 
04293 /*------------------------------------------------------------------.
04294 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
04295 | TOP (included).                                                   |
04296 `------------------------------------------------------------------*/
04297 
04298 #if (defined __STDC__ || defined __C99__FUNC__ \
04299      || defined __cplusplus || defined _MSC_VER)
04300 static void
04301 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04302 #else
04303 static void
04304 yy_stack_print (yybottom, yytop)
04305     yytype_int16 *yybottom;
04306     yytype_int16 *yytop;
04307 #endif
04308 {
04309   YYFPRINTF (stderr, "Stack now");
04310   for (; yybottom <= yytop; yybottom++)
04311     {
04312       int yybot = *yybottom;
04313       YYFPRINTF (stderr, " %d", yybot);
04314     }
04315   YYFPRINTF (stderr, "\n");
04316 }
04317 
04318 # define YY_STACK_PRINT(Bottom, Top)                            \
04319 do {                                                            \
04320   if (yydebug)                                                  \
04321     yy_stack_print ((Bottom), (Top));                           \
04322 } while (YYID (0))
04323 
04324 
04325 /*------------------------------------------------.
04326 | Report that the YYRULE is going to be reduced.  |
04327 `------------------------------------------------*/
04328 
04329 #if (defined __STDC__ || defined __C99__FUNC__ \
04330      || defined __cplusplus || defined _MSC_VER)
04331 static void
04332 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04333 #else
04334 static void
04335 yy_reduce_print (yyvsp, yyrule, parser)
04336     YYSTYPE *yyvsp;
04337     int yyrule;
04338     struct parser_params *parser;
04339 #endif
04340 {
04341   int yynrhs = yyr2[yyrule];
04342   int yyi;
04343   unsigned long int yylno = yyrline[yyrule];
04344   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04345              yyrule - 1, yylno);
04346   /* The symbols being reduced.  */
04347   for (yyi = 0; yyi < yynrhs; yyi++)
04348     {
04349       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
04350       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04351                        &(yyvsp[(yyi + 1) - (yynrhs)])
04352                                        , parser);
04353       YYFPRINTF (stderr, "\n");
04354     }
04355 }
04356 
04357 # define YY_REDUCE_PRINT(Rule)          \
04358 do {                                    \
04359   if (yydebug)                          \
04360     yy_reduce_print (yyvsp, Rule, parser); \
04361 } while (YYID (0))
04362 
04363 /* Nonzero means print parse trace.  It is left uninitialized so that
04364    multiple parsers can coexist.  */
04365 #ifndef yydebug
04366 int yydebug;
04367 #endif
04368 #else /* !YYDEBUG */
04369 # define YYDPRINTF(Args)
04370 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04371 # define YY_STACK_PRINT(Bottom, Top)
04372 # define YY_REDUCE_PRINT(Rule)
04373 #endif /* !YYDEBUG */
04374 
04375 
04376 /* YYINITDEPTH -- initial size of the parser's stacks.  */
04377 #ifndef YYINITDEPTH
04378 # define YYINITDEPTH 200
04379 #endif
04380 
04381 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
04382    if the built-in stack extension method is used).
04383 
04384    Do not make this value too large; the results are undefined if
04385    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
04386    evaluated with infinite-precision integer arithmetic.  */
04387 
04388 #ifndef YYMAXDEPTH
04389 # define YYMAXDEPTH 10000
04390 #endif
04391 
04392 
04393 
04394 #if YYERROR_VERBOSE
04395 
04396 # ifndef yystrlen
04397 #  if defined __GLIBC__ && defined _STRING_H
04398 #   define yystrlen strlen
04399 #  else
04400 /* Return the length of YYSTR.  */
04401 #if (defined __STDC__ || defined __C99__FUNC__ \
04402      || defined __cplusplus || defined _MSC_VER)
04403 static YYSIZE_T
04404 yystrlen (const char *yystr)
04405 #else
04406 static YYSIZE_T
04407 yystrlen (yystr)
04408     const char *yystr;
04409 #endif
04410 {
04411   YYSIZE_T yylen;
04412   for (yylen = 0; yystr[yylen]; yylen++)
04413     continue;
04414   return yylen;
04415 }
04416 #  endif
04417 # endif
04418 
04419 # ifndef yystpcpy
04420 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04421 #   define yystpcpy stpcpy
04422 #  else
04423 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
04424    YYDEST.  */
04425 #if (defined __STDC__ || defined __C99__FUNC__ \
04426      || defined __cplusplus || defined _MSC_VER)
04427 static char *
04428 yystpcpy (char *yydest, const char *yysrc)
04429 #else
04430 static char *
04431 yystpcpy (yydest, yysrc)
04432     char *yydest;
04433     const char *yysrc;
04434 #endif
04435 {
04436   char *yyd = yydest;
04437   const char *yys = yysrc;
04438 
04439   while ((*yyd++ = *yys++) != '\0')
04440     continue;
04441 
04442   return yyd - 1;
04443 }
04444 #  endif
04445 # endif
04446 
04447 # ifndef yytnamerr
04448 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
04449    quotes and backslashes, so that it's suitable for yyerror.  The
04450    heuristic is that double-quoting is unnecessary unless the string
04451    contains an apostrophe, a comma, or backslash (other than
04452    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
04453    null, do not copy; instead, return the length of what the result
04454    would have been.  */
04455 static YYSIZE_T
04456 yytnamerr (char *yyres, const char *yystr)
04457 {
04458   if (*yystr == '"')
04459     {
04460       YYSIZE_T yyn = 0;
04461       char const *yyp = yystr;
04462 
04463       for (;;)
04464         switch (*++yyp)
04465           {
04466           case '\'':
04467           case ',':
04468             goto do_not_strip_quotes;
04469 
04470           case '\\':
04471             if (*++yyp != '\\')
04472               goto do_not_strip_quotes;
04473             /* Fall through.  */
04474           default:
04475             if (yyres)
04476               yyres[yyn] = *yyp;
04477             yyn++;
04478             break;
04479 
04480           case '"':
04481             if (yyres)
04482               yyres[yyn] = '\0';
04483             return yyn;
04484           }
04485     do_not_strip_quotes: ;
04486     }
04487 
04488   if (! yyres)
04489     return yystrlen (yystr);
04490 
04491   return yystpcpy (yyres, yystr) - yyres;
04492 }
04493 # endif
04494 
04495 /* Copy into YYRESULT an error message about the unexpected token
04496    YYCHAR while in state YYSTATE.  Return the number of bytes copied,
04497    including the terminating null byte.  If YYRESULT is null, do not
04498    copy anything; just return the number of bytes that would be
04499    copied.  As a special case, return 0 if an ordinary "syntax error"
04500    message will do.  Return YYSIZE_MAXIMUM if overflow occurs during
04501    size calculation.  */
04502 static YYSIZE_T
04503 yysyntax_error (char *yyresult, int yystate, int yychar)
04504 {
04505   int yyn = yypact[yystate];
04506 
04507   if (! (YYPACT_NINF < yyn && yyn <= YYLAST))
04508     return 0;
04509   else
04510     {
04511       int yytype = YYTRANSLATE (yychar);
04512       YYSIZE_T yysize0 = yytnamerr (0, yytname[yytype]);
04513       YYSIZE_T yysize = yysize0;
04514       YYSIZE_T yysize1;
04515       int yysize_overflow = 0;
04516       enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04517       char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04518       int yyx;
04519 
04520 # if 0
04521       /* This is so xgettext sees the translatable formats that are
04522          constructed on the fly.  */
04523       YY_("syntax error, unexpected %s");
04524       YY_("syntax error, unexpected %s, expecting %s");
04525       YY_("syntax error, unexpected %s, expecting %s or %s");
04526       YY_("syntax error, unexpected %s, expecting %s or %s or %s");
04527       YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s");
04528 # endif
04529       char *yyfmt;
04530       char const *yyf;
04531       static char const yyunexpected[] = "syntax error, unexpected %s";
04532       static char const yyexpecting[] = ", expecting %s";
04533       static char const yyor[] = " or %s";
04534       char yyformat[sizeof yyunexpected
04535                     + sizeof yyexpecting - 1
04536                     + ((YYERROR_VERBOSE_ARGS_MAXIMUM - 2)
04537                        * (sizeof yyor - 1))];
04538       char const *yyprefix = yyexpecting;
04539 
04540       /* Start YYX at -YYN if negative to avoid negative indexes in
04541          YYCHECK.  */
04542       int yyxbegin = yyn < 0 ? -yyn : 0;
04543 
04544       /* Stay within bounds of both yycheck and yytname.  */
04545       int yychecklim = YYLAST - yyn + 1;
04546       int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04547       int yycount = 1;
04548 
04549       yyarg[0] = yytname[yytype];
04550       yyfmt = yystpcpy (yyformat, yyunexpected);
04551 
04552       for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04553         if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR)
04554           {
04555             if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04556               {
04557                 yycount = 1;
04558                 yysize = yysize0;
04559                 yyformat[sizeof yyunexpected - 1] = '\0';
04560                 break;
04561               }
04562             yyarg[yycount++] = yytname[yyx];
04563             yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04564             yysize_overflow |= (yysize1 < yysize);
04565             yysize = yysize1;
04566             yyfmt = yystpcpy (yyfmt, yyprefix);
04567             yyprefix = yyor;
04568           }
04569 
04570       yyf = YY_(yyformat);
04571       yysize1 = yysize + yystrlen (yyf);
04572       yysize_overflow |= (yysize1 < yysize);
04573       yysize = yysize1;
04574 
04575       if (yysize_overflow)
04576         return YYSIZE_MAXIMUM;
04577 
04578       if (yyresult)
04579         {
04580           /* Avoid sprintf, as that infringes on the user's name space.
04581              Don't have undefined behavior even if the translation
04582              produced a string with the wrong number of "%s"s.  */
04583           char *yyp = yyresult;
04584           int yyi = 0;
04585           while ((*yyp = *yyf) != '\0')
04586             {
04587               if (*yyp == '%' && yyf[1] == 's' && yyi < yycount)
04588                 {
04589                   yyp += yytnamerr (yyp, yyarg[yyi++]);
04590                   yyf += 2;
04591                 }
04592               else
04593                 {
04594                   yyp++;
04595                   yyf++;
04596                 }
04597             }
04598         }
04599       return yysize;
04600     }
04601 }
04602 #endif /* YYERROR_VERBOSE */
04603 
04604 
04605 /*-----------------------------------------------.
04606 | Release the memory associated to this symbol.  |
04607 `-----------------------------------------------*/
04608 
04609 /*ARGSUSED*/
04610 #if (defined __STDC__ || defined __C99__FUNC__ \
04611      || defined __cplusplus || defined _MSC_VER)
04612 static void
04613 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04614 #else
04615 static void
04616 yydestruct (yymsg, yytype, yyvaluep, parser)
04617     const char *yymsg;
04618     int yytype;
04619     YYSTYPE *yyvaluep;
04620     struct parser_params *parser;
04621 #endif
04622 {
04623   YYUSE (yyvaluep);
04624   YYUSE (parser);
04625 
04626   if (!yymsg)
04627     yymsg = "Deleting";
04628   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04629 
04630   switch (yytype)
04631     {
04632 
04633       default:
04634         break;
04635     }
04636 }
04637 
04638 /* Prevent warnings from -Wmissing-prototypes.  */
04639 #ifdef YYPARSE_PARAM
04640 #if defined __STDC__ || defined __cplusplus
04641 int yyparse (void *YYPARSE_PARAM);
04642 #else
04643 int yyparse ();
04644 #endif
04645 #else /* ! YYPARSE_PARAM */
04646 #if defined __STDC__ || defined __cplusplus
04647 int yyparse (struct parser_params *parser);
04648 #else
04649 int yyparse ();
04650 #endif
04651 #endif /* ! YYPARSE_PARAM */
04652 
04653 
04654 
04655 
04656 
04657 /*-------------------------.
04658 | yyparse or yypush_parse.  |
04659 `-------------------------*/
04660 
04661 #ifdef YYPARSE_PARAM
04662 #if (defined __STDC__ || defined __C99__FUNC__ \
04663      || defined __cplusplus || defined _MSC_VER)
04664 int
04665 yyparse (void *YYPARSE_PARAM)
04666 #else
04667 int
04668 yyparse (YYPARSE_PARAM)
04669     void *YYPARSE_PARAM;
04670 #endif
04671 #else /* ! YYPARSE_PARAM */
04672 #if (defined __STDC__ || defined __C99__FUNC__ \
04673      || defined __cplusplus || defined _MSC_VER)
04674 int
04675 yyparse (struct parser_params *parser)
04676 #else
04677 int
04678 yyparse (parser)
04679     struct parser_params *parser;
04680 #endif
04681 #endif
04682 {
04683 /* The lookahead symbol.  */
04684 int yychar;
04685 
04686 /* The semantic value of the lookahead symbol.  */
04687 YYSTYPE yylval;
04688 
04689     /* Number of syntax errors so far.  */
04690     int yynerrs;
04691 
04692     int yystate;
04693     /* Number of tokens to shift before error messages enabled.  */
04694     int yyerrstatus;
04695 
04696     /* The stacks and their tools:
04697        `yyss': related to states.
04698        `yyvs': related to semantic values.
04699 
04700        Refer to the stacks thru separate pointers, to allow yyoverflow
04701        to reallocate them elsewhere.  */
04702 
04703     /* The state stack.  */
04704     yytype_int16 yyssa[YYINITDEPTH];
04705     yytype_int16 *yyss;
04706     yytype_int16 *yyssp;
04707 
04708     /* The semantic value stack.  */
04709     YYSTYPE yyvsa[YYINITDEPTH];
04710     YYSTYPE *yyvs;
04711     YYSTYPE *yyvsp;
04712 
04713     YYSIZE_T yystacksize;
04714 
04715   int yyn;
04716   int yyresult;
04717   /* Lookahead token as an internal (translated) token number.  */
04718   int yytoken;
04719   /* The variables used to return semantic value and location from the
04720      action routines.  */
04721   YYSTYPE yyval;
04722 
04723 #if YYERROR_VERBOSE
04724   /* Buffer for error messages, and its allocated size.  */
04725   char yymsgbuf[128];
04726   char *yymsg = yymsgbuf;
04727   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04728 #endif
04729 
04730 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
04731 
04732   /* The number of symbols on the RHS of the reduced rule.
04733      Keep to zero when no symbol should be popped.  */
04734   int yylen = 0;
04735 
04736   yytoken = 0;
04737   yyss = yyssa;
04738   yyvs = yyvsa;
04739   yystacksize = YYINITDEPTH;
04740 
04741   YYDPRINTF ((stderr, "Starting parse\n"));
04742 
04743   yystate = 0;
04744   yyerrstatus = 0;
04745   yynerrs = 0;
04746   yychar = YYEMPTY; /* Cause a token to be read.  */
04747 
04748   /* Initialize stack pointers.
04749      Waste one element of value and location stack
04750      so that they stay on the same level as the state stack.
04751      The wasted elements are never initialized.  */
04752   yyssp = yyss;
04753   yyvsp = yyvs;
04754 
04755   goto yysetstate;
04756 
04757 /*------------------------------------------------------------.
04758 | yynewstate -- Push a new state, which is found in yystate.  |
04759 `------------------------------------------------------------*/
04760  yynewstate:
04761   /* In all cases, when you get here, the value and location stacks
04762      have just been pushed.  So pushing a state here evens the stacks.  */
04763   yyssp++;
04764 
04765  yysetstate:
04766   *yyssp = yystate;
04767 
04768   if (yyss + yystacksize - 1 <= yyssp)
04769     {
04770       /* Get the current used size of the three stacks, in elements.  */
04771       YYSIZE_T yysize = yyssp - yyss + 1;
04772 
04773 #ifdef yyoverflow
04774       {
04775         /* Give user a chance to reallocate the stack.  Use copies of
04776            these so that the &'s don't force the real ones into
04777            memory.  */
04778         YYSTYPE *yyvs1 = yyvs;
04779         yytype_int16 *yyss1 = yyss;
04780 
04781         /* Each stack pointer address is followed by the size of the
04782            data in use in that stack, in bytes.  This used to be a
04783            conditional around just the two extra args, but that might
04784            be undefined if yyoverflow is a macro.  */
04785         yyoverflow (YY_("memory exhausted"),
04786                     &yyss1, yysize * sizeof (*yyssp),
04787                     &yyvs1, yysize * sizeof (*yyvsp),
04788                     &yystacksize);
04789 
04790         yyss = yyss1;
04791         yyvs = yyvs1;
04792       }
04793 #else /* no yyoverflow */
04794 # ifndef YYSTACK_RELOCATE
04795       goto yyexhaustedlab;
04796 # else
04797       /* Extend the stack our own way.  */
04798       if (YYMAXDEPTH <= yystacksize)
04799         goto yyexhaustedlab;
04800       yystacksize *= 2;
04801       if (YYMAXDEPTH < yystacksize)
04802         yystacksize = YYMAXDEPTH;
04803 
04804       {
04805         yytype_int16 *yyss1 = yyss;
04806         union yyalloc *yyptr =
04807           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04808         if (! yyptr)
04809           goto yyexhaustedlab;
04810         YYSTACK_RELOCATE (yyss_alloc, yyss);
04811         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04812 #  undef YYSTACK_RELOCATE
04813         if (yyss1 != yyssa)
04814           YYSTACK_FREE (yyss1);
04815       }
04816 # endif
04817 #endif /* no yyoverflow */
04818 
04819       yyssp = yyss + yysize - 1;
04820       yyvsp = yyvs + yysize - 1;
04821 
04822       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04823                   (unsigned long int) yystacksize));
04824 
04825       if (yyss + yystacksize - 1 <= yyssp)
04826         YYABORT;
04827     }
04828 
04829   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04830 
04831   if (yystate == YYFINAL)
04832     YYACCEPT;
04833 
04834   goto yybackup;
04835 
04836 /*-----------.
04837 | yybackup.  |
04838 `-----------*/
04839 yybackup:
04840 
04841   /* Do appropriate processing given the current state.  Read a
04842      lookahead token if we need one and don't already have one.  */
04843 
04844   /* First try to decide what to do without reference to lookahead token.  */
04845   yyn = yypact[yystate];
04846   if (yyn == YYPACT_NINF)
04847     goto yydefault;
04848 
04849   /* Not known => get a lookahead token if don't already have one.  */
04850 
04851   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
04852   if (yychar == YYEMPTY)
04853     {
04854       YYDPRINTF ((stderr, "Reading a token: "));
04855       yychar = YYLEX;
04856     }
04857 
04858   if (yychar <= YYEOF)
04859     {
04860       yychar = yytoken = YYEOF;
04861       YYDPRINTF ((stderr, "Now at end of input.\n"));
04862     }
04863   else
04864     {
04865       yytoken = YYTRANSLATE (yychar);
04866       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04867     }
04868 
04869   /* If the proper action on seeing token YYTOKEN is to reduce or to
04870      detect an error, take that action.  */
04871   yyn += yytoken;
04872   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04873     goto yydefault;
04874   yyn = yytable[yyn];
04875   if (yyn <= 0)
04876     {
04877       if (yyn == 0 || yyn == YYTABLE_NINF)
04878         goto yyerrlab;
04879       yyn = -yyn;
04880       goto yyreduce;
04881     }
04882 
04883   /* Count tokens shifted since error; after three, turn off error
04884      status.  */
04885   if (yyerrstatus)
04886     yyerrstatus--;
04887 
04888   /* Shift the lookahead token.  */
04889   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04890 
04891   /* Discard the shifted token.  */
04892   yychar = YYEMPTY;
04893 
04894   yystate = yyn;
04895   *++yyvsp = yylval;
04896 
04897   goto yynewstate;
04898 
04899 
04900 /*-----------------------------------------------------------.
04901 | yydefault -- do the default action for the current state.  |
04902 `-----------------------------------------------------------*/
04903 yydefault:
04904   yyn = yydefact[yystate];
04905   if (yyn == 0)
04906     goto yyerrlab;
04907   goto yyreduce;
04908 
04909 
04910 /*-----------------------------.
04911 | yyreduce -- Do a reduction.  |
04912 `-----------------------------*/
04913 yyreduce:
04914   /* yyn is the number of a rule to reduce with.  */
04915   yylen = yyr2[yyn];
04916 
04917   /* If YYLEN is nonzero, implement the default value of the action:
04918      `$$ = $1'.
04919 
04920      Otherwise, the following line sets YYVAL to garbage.
04921      This behavior is undocumented and Bison
04922      users should not rely upon it.  Assigning to YYVAL
04923      unconditionally makes the parser a bit smaller, and it avoids a
04924      GCC warning that YYVAL may be used uninitialized.  */
04925   yyval = yyvsp[1-yylen];
04926 
04927 
04928   YY_REDUCE_PRINT (yyn);
04929   switch (yyn)
04930     {
04931         case 2:
04932 
04933 /* Line 1464 of yacc.c  */
04934 #line 786 "parse.y"
04935     {
04936                         lex_state = EXPR_BEG;
04937                     /*%%%*/
04938                         local_push(compile_for_eval || rb_parse_in_main());
04939                     /*%
04940                         local_push(0);
04941                     %*/
04942                     ;}
04943     break;
04944 
04945   case 3:
04946 
04947 /* Line 1464 of yacc.c  */
04948 #line 795 "parse.y"
04949     {
04950                     /*%%%*/
04951                         if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
04952                             /* last expression should not be void */
04953                             if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
04954                             else {
04955                                 NODE *node = (yyvsp[(2) - (2)].node);
04956                                 while (node->nd_next) {
04957                                     node = node->nd_next;
04958                                 }
04959                                 void_expr(node->nd_head);
04960                             }
04961                         }
04962                         ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
04963                     /*%
04964                         $$ = $2;
04965                         parser->result = dispatch1(program, $$);
04966                     %*/
04967                         local_pop();
04968                     ;}
04969     break;
04970 
04971   case 4:
04972 
04973 /* Line 1464 of yacc.c  */
04974 #line 818 "parse.y"
04975     {
04976                     /*%%%*/
04977                         void_stmts((yyvsp[(1) - (2)].node));
04978                         fixup_nodes(&deferred_nodes);
04979                     /*%
04980                     %*/
04981                         (yyval.node) = (yyvsp[(1) - (2)].node);
04982                     ;}
04983     break;
04984 
04985   case 5:
04986 
04987 /* Line 1464 of yacc.c  */
04988 #line 829 "parse.y"
04989     {
04990                     /*%%%*/
04991                         (yyval.node) = NEW_BEGIN(0);
04992                     /*%
04993                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
04994                                                   dispatch0(void_stmt));
04995                     %*/
04996                     ;}
04997     break;
04998 
04999   case 6:
05000 
05001 /* Line 1464 of yacc.c  */
05002 #line 838 "parse.y"
05003     {
05004                     /*%%%*/
05005                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05006                     /*%
05007                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05008                     %*/
05009                     ;}
05010     break;
05011 
05012   case 7:
05013 
05014 /* Line 1464 of yacc.c  */
05015 #line 846 "parse.y"
05016     {
05017                     /*%%%*/
05018                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05019                     /*%
05020                         $$ = dispatch2(stmts_add, $1, $3);
05021                     %*/
05022                     ;}
05023     break;
05024 
05025   case 8:
05026 
05027 /* Line 1464 of yacc.c  */
05028 #line 854 "parse.y"
05029     {
05030                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05031                     ;}
05032     break;
05033 
05034   case 10:
05035 
05036 /* Line 1464 of yacc.c  */
05037 #line 861 "parse.y"
05038     {
05039                         if (in_def || in_single) {
05040                             yyerror("BEGIN in method");
05041                         }
05042                     /*%%%*/
05043                         /* local_push(0); */
05044                     /*%
05045                     %*/
05046                     ;}
05047     break;
05048 
05049   case 11:
05050 
05051 /* Line 1464 of yacc.c  */
05052 #line 871 "parse.y"
05053     {
05054                     /*%%%*/
05055                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05056                                                             (yyvsp[(4) - (5)].node));
05057                         /* NEW_PREEXE($4)); */
05058                         /* local_pop(); */
05059                         (yyval.node) = NEW_BEGIN(0);
05060                     /*%
05061                         $$ = dispatch1(BEGIN, $4);
05062                     %*/
05063                     ;}
05064     break;
05065 
05066   case 12:
05067 
05068 /* Line 1464 of yacc.c  */
05069 #line 888 "parse.y"
05070     {
05071                     /*%%%*/
05072                         (yyval.node) = (yyvsp[(1) - (4)].node);
05073                         if ((yyvsp[(2) - (4)].node)) {
05074                             (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05075                         }
05076                         else if ((yyvsp[(3) - (4)].node)) {
05077                             rb_warn0("else without rescue is useless");
05078                             (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05079                         }
05080                         if ((yyvsp[(4) - (4)].node)) {
05081                             if ((yyval.node)) {
05082                                 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05083                             }
05084                             else {
05085                                 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05086                             }
05087                         }
05088                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05089                     /*%
05090                         $$ = dispatch4(bodystmt,
05091                                        escape_Qundef($1),
05092                                        escape_Qundef($2),
05093                                        escape_Qundef($3),
05094                                        escape_Qundef($4));
05095                     %*/
05096                     ;}
05097     break;
05098 
05099   case 13:
05100 
05101 /* Line 1464 of yacc.c  */
05102 #line 918 "parse.y"
05103     {
05104                     /*%%%*/
05105                         void_stmts((yyvsp[(1) - (2)].node));
05106                         fixup_nodes(&deferred_nodes);
05107                     /*%
05108                     %*/
05109                         (yyval.node) = (yyvsp[(1) - (2)].node);
05110                     ;}
05111     break;
05112 
05113   case 14:
05114 
05115 /* Line 1464 of yacc.c  */
05116 #line 929 "parse.y"
05117     {
05118                     /*%%%*/
05119                         (yyval.node) = NEW_BEGIN(0);
05120                     /*%
05121                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05122                                                   dispatch0(void_stmt));
05123                     %*/
05124                     ;}
05125     break;
05126 
05127   case 15:
05128 
05129 /* Line 1464 of yacc.c  */
05130 #line 938 "parse.y"
05131     {
05132                     /*%%%*/
05133                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05134                     /*%
05135                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05136                     %*/
05137                     ;}
05138     break;
05139 
05140   case 16:
05141 
05142 /* Line 1464 of yacc.c  */
05143 #line 946 "parse.y"
05144     {
05145                     /*%%%*/
05146                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05147                     /*%
05148                         $$ = dispatch2(stmts_add, $1, $3);
05149                     %*/
05150                     ;}
05151     break;
05152 
05153   case 17:
05154 
05155 /* Line 1464 of yacc.c  */
05156 #line 954 "parse.y"
05157     {
05158                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05159                     ;}
05160     break;
05161 
05162   case 18:
05163 
05164 /* Line 1464 of yacc.c  */
05165 #line 959 "parse.y"
05166     {lex_state = EXPR_FNAME;;}
05167     break;
05168 
05169   case 19:
05170 
05171 /* Line 1464 of yacc.c  */
05172 #line 960 "parse.y"
05173     {
05174                     /*%%%*/
05175                         (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05176                     /*%
05177                         $$ = dispatch2(alias, $2, $4);
05178                     %*/
05179                     ;}
05180     break;
05181 
05182   case 20:
05183 
05184 /* Line 1464 of yacc.c  */
05185 #line 968 "parse.y"
05186     {
05187                     /*%%%*/
05188                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05189                     /*%
05190                         $$ = dispatch2(var_alias, $2, $3);
05191                     %*/
05192                     ;}
05193     break;
05194 
05195   case 21:
05196 
05197 /* Line 1464 of yacc.c  */
05198 #line 976 "parse.y"
05199     {
05200                     /*%%%*/
05201                         char buf[2];
05202                         buf[0] = '$';
05203                         buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05204                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05205                     /*%
05206                         $$ = dispatch2(var_alias, $2, $3);
05207                     %*/
05208                     ;}
05209     break;
05210 
05211   case 22:
05212 
05213 /* Line 1464 of yacc.c  */
05214 #line 987 "parse.y"
05215     {
05216                     /*%%%*/
05217                         yyerror("can't make alias for the number variables");
05218                         (yyval.node) = NEW_BEGIN(0);
05219                     /*%
05220                         $$ = dispatch2(var_alias, $2, $3);
05221                         $$ = dispatch1(alias_error, $$);
05222                     %*/
05223                     ;}
05224     break;
05225 
05226   case 23:
05227 
05228 /* Line 1464 of yacc.c  */
05229 #line 997 "parse.y"
05230     {
05231                     /*%%%*/
05232                         (yyval.node) = (yyvsp[(2) - (2)].node);
05233                     /*%
05234                         $$ = dispatch1(undef, $2);
05235                     %*/
05236                     ;}
05237     break;
05238 
05239   case 24:
05240 
05241 /* Line 1464 of yacc.c  */
05242 #line 1005 "parse.y"
05243     {
05244                     /*%%%*/
05245                         (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05246                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05247                     /*%
05248                         $$ = dispatch2(if_mod, $3, $1);
05249                     %*/
05250                     ;}
05251     break;
05252 
05253   case 25:
05254 
05255 /* Line 1464 of yacc.c  */
05256 #line 1014 "parse.y"
05257     {
05258                     /*%%%*/
05259                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05260                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05261                     /*%
05262                         $$ = dispatch2(unless_mod, $3, $1);
05263                     %*/
05264                     ;}
05265     break;
05266 
05267   case 26:
05268 
05269 /* Line 1464 of yacc.c  */
05270 #line 1023 "parse.y"
05271     {
05272                     /*%%%*/
05273                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05274                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05275                         }
05276                         else {
05277                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05278                         }
05279                     /*%
05280                         $$ = dispatch2(while_mod, $3, $1);
05281                     %*/
05282                     ;}
05283     break;
05284 
05285   case 27:
05286 
05287 /* Line 1464 of yacc.c  */
05288 #line 1036 "parse.y"
05289     {
05290                     /*%%%*/
05291                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05292                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05293                         }
05294                         else {
05295                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05296                         }
05297                     /*%
05298                         $$ = dispatch2(until_mod, $3, $1);
05299                     %*/
05300                     ;}
05301     break;
05302 
05303   case 28:
05304 
05305 /* Line 1464 of yacc.c  */
05306 #line 1049 "parse.y"
05307     {
05308                     /*%%%*/
05309                         NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05310                         (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05311                     /*%
05312                         $$ = dispatch2(rescue_mod, $3, $1);
05313                     %*/
05314                     ;}
05315     break;
05316 
05317   case 29:
05318 
05319 /* Line 1464 of yacc.c  */
05320 #line 1058 "parse.y"
05321     {
05322                         if (in_def || in_single) {
05323                             rb_warn0("END in method; use at_exit");
05324                         }
05325                     /*%%%*/
05326                         (yyval.node) = NEW_POSTEXE(NEW_NODE(
05327                             NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
05328                     /*%
05329                         $$ = dispatch1(END, $3);
05330                     %*/
05331                     ;}
05332     break;
05333 
05334   case 30:
05335 
05336 /* Line 1464 of yacc.c  */
05337 #line 1070 "parse.y"
05338     {
05339                     /*%%%*/
05340                         value_expr((yyvsp[(3) - (3)].node));
05341                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05342                     /*%
05343                         $$ = dispatch2(assign, $1, $3);
05344                     %*/
05345                     ;}
05346     break;
05347 
05348   case 31:
05349 
05350 /* Line 1464 of yacc.c  */
05351 #line 1079 "parse.y"
05352     {
05353                     /*%%%*/
05354                         value_expr((yyvsp[(3) - (3)].node));
05355                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05356                         (yyval.node) = (yyvsp[(1) - (3)].node);
05357                     /*%
05358                         $$ = dispatch2(massign, $1, $3);
05359                     %*/
05360                     ;}
05361     break;
05362 
05363   case 32:
05364 
05365 /* Line 1464 of yacc.c  */
05366 #line 1089 "parse.y"
05367     {
05368                     /*%%%*/
05369                         value_expr((yyvsp[(3) - (3)].node));
05370                         if ((yyvsp[(1) - (3)].node)) {
05371                             ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05372                             if ((yyvsp[(2) - (3)].id) == tOROP) {
05373                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05374                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05375                                 if (is_asgn_or_id(vid)) {
05376                                     (yyval.node)->nd_aid = vid;
05377                                 }
05378                             }
05379                             else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05380                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05381                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05382                             }
05383                             else {
05384                                 (yyval.node) = (yyvsp[(1) - (3)].node);
05385                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05386                             }
05387                         }
05388                         else {
05389                             (yyval.node) = NEW_BEGIN(0);
05390                         }
05391                     /*%
05392                         $$ = dispatch3(opassign, $1, $2, $3);
05393                     %*/
05394                     ;}
05395     break;
05396 
05397   case 33:
05398 
05399 /* Line 1464 of yacc.c  */
05400 #line 1118 "parse.y"
05401     {
05402                     /*%%%*/
05403                         NODE *args;
05404 
05405                         value_expr((yyvsp[(6) - (6)].node));
05406                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05407                         args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05408                         if ((yyvsp[(5) - (6)].id) == tOROP) {
05409                             (yyvsp[(5) - (6)].id) = 0;
05410                         }
05411                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05412                             (yyvsp[(5) - (6)].id) = 1;
05413                         }
05414                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05415                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05416                     /*%
05417                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
05418                         $$ = dispatch3(opassign, $$, $5, $6);
05419                     %*/
05420                     ;}
05421     break;
05422 
05423   case 34:
05424 
05425 /* Line 1464 of yacc.c  */
05426 #line 1139 "parse.y"
05427     {
05428                     /*%%%*/
05429                         value_expr((yyvsp[(5) - (5)].node));
05430                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05431                             (yyvsp[(4) - (5)].id) = 0;
05432                         }
05433                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05434                             (yyvsp[(4) - (5)].id) = 1;
05435                         }
05436                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05437                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05438                     /*%
05439                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05440                         $$ = dispatch3(opassign, $$, $4, $5);
05441                     %*/
05442                     ;}
05443     break;
05444 
05445   case 35:
05446 
05447 /* Line 1464 of yacc.c  */
05448 #line 1156 "parse.y"
05449     {
05450                     /*%%%*/
05451                         value_expr((yyvsp[(5) - (5)].node));
05452                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05453                             (yyvsp[(4) - (5)].id) = 0;
05454                         }
05455                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05456                             (yyvsp[(4) - (5)].id) = 1;
05457                         }
05458                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05459                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05460                     /*%
05461                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05462                         $$ = dispatch3(opassign, $$, $4, $5);
05463                     %*/
05464                     ;}
05465     break;
05466 
05467   case 36:
05468 
05469 /* Line 1464 of yacc.c  */
05470 #line 1173 "parse.y"
05471     {
05472                     /*%%%*/
05473                         yyerror("constant re-assignment");
05474                         (yyval.node) = 0;
05475                     /*%
05476                         $$ = dispatch2(const_path_field, $1, $3);
05477                         $$ = dispatch3(opassign, $$, $4, $5);
05478                         $$ = dispatch1(assign_error, $$);
05479                     %*/
05480                     ;}
05481     break;
05482 
05483   case 37:
05484 
05485 /* Line 1464 of yacc.c  */
05486 #line 1184 "parse.y"
05487     {
05488                     /*%%%*/
05489                         value_expr((yyvsp[(5) - (5)].node));
05490                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05491                             (yyvsp[(4) - (5)].id) = 0;
05492                         }
05493                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05494                             (yyvsp[(4) - (5)].id) = 1;
05495                         }
05496                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05497                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05498                     /*%
05499                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
05500                         $$ = dispatch3(opassign, $$, $4, $5);
05501                     %*/
05502                     ;}
05503     break;
05504 
05505   case 38:
05506 
05507 /* Line 1464 of yacc.c  */
05508 #line 1201 "parse.y"
05509     {
05510                     /*%%%*/
05511                         rb_backref_error((yyvsp[(1) - (3)].node));
05512                         (yyval.node) = NEW_BEGIN(0);
05513                     /*%
05514                         $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
05515                         $$ = dispatch1(assign_error, $$);
05516                     %*/
05517                     ;}
05518     break;
05519 
05520   case 39:
05521 
05522 /* Line 1464 of yacc.c  */
05523 #line 1211 "parse.y"
05524     {
05525                     /*%%%*/
05526                         value_expr((yyvsp[(3) - (3)].node));
05527                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05528                     /*%
05529                         $$ = dispatch2(assign, $1, $3);
05530                     %*/
05531                     ;}
05532     break;
05533 
05534   case 40:
05535 
05536 /* Line 1464 of yacc.c  */
05537 #line 1220 "parse.y"
05538     {
05539                     /*%%%*/
05540                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05541                         (yyval.node) = (yyvsp[(1) - (3)].node);
05542                     /*%
05543                         $$ = dispatch2(massign, $1, $3);
05544                     %*/
05545                     ;}
05546     break;
05547 
05548   case 41:
05549 
05550 /* Line 1464 of yacc.c  */
05551 #line 1229 "parse.y"
05552     {
05553                     /*%%%*/
05554                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05555                         (yyval.node) = (yyvsp[(1) - (3)].node);
05556                     /*%
05557                         $$ = dispatch2(massign, $1, $3);
05558                     %*/
05559                     ;}
05560     break;
05561 
05562   case 44:
05563 
05564 /* Line 1464 of yacc.c  */
05565 #line 1242 "parse.y"
05566     {
05567                     /*%%%*/
05568                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05569                     /*%
05570                         $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
05571                     %*/
05572                     ;}
05573     break;
05574 
05575   case 45:
05576 
05577 /* Line 1464 of yacc.c  */
05578 #line 1250 "parse.y"
05579     {
05580                     /*%%%*/
05581                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05582                     /*%
05583                         $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
05584                     %*/
05585                     ;}
05586     break;
05587 
05588   case 46:
05589 
05590 /* Line 1464 of yacc.c  */
05591 #line 1258 "parse.y"
05592     {
05593                     /*%%%*/
05594                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05595                     /*%
05596                         $$ = dispatch2(unary, ripper_intern("not"), $3);
05597                     %*/
05598                     ;}
05599     break;
05600 
05601   case 47:
05602 
05603 /* Line 1464 of yacc.c  */
05604 #line 1266 "parse.y"
05605     {
05606                     /*%%%*/
05607                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05608                     /*%
05609                         $$ = dispatch2(unary, ripper_id2sym('!'), $2);
05610                     %*/
05611                     ;}
05612     break;
05613 
05614   case 49:
05615 
05616 /* Line 1464 of yacc.c  */
05617 #line 1277 "parse.y"
05618     {
05619                     /*%%%*/
05620                         value_expr((yyvsp[(1) - (1)].node));
05621                         (yyval.node) = (yyvsp[(1) - (1)].node);
05622                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
05623                     /*%
05624                         $$ = $1;
05625                     %*/
05626                     ;}
05627     break;
05628 
05629   case 53:
05630 
05631 /* Line 1464 of yacc.c  */
05632 #line 1294 "parse.y"
05633     {
05634                     /*%%%*/
05635                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05636                     /*%
05637                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
05638                         $$ = method_arg($$, $4);
05639                     %*/
05640                     ;}
05641     break;
05642 
05643   case 54:
05644 
05645 /* Line 1464 of yacc.c  */
05646 #line 1303 "parse.y"
05647     {
05648                     /*%%%*/
05649                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05650                     /*%
05651                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
05652                         $$ = method_arg($$, $4);
05653                     %*/
05654                     ;}
05655     break;
05656 
05657   case 55:
05658 
05659 /* Line 1464 of yacc.c  */
05660 #line 1314 "parse.y"
05661     {
05662                         (yyvsp[(1) - (1)].vars) = dyna_push();
05663                     /*%%%*/
05664                         (yyval.num) = ruby_sourceline;
05665                     /*%
05666                     %*/
05667                     ;}
05668     break;
05669 
05670   case 56:
05671 
05672 /* Line 1464 of yacc.c  */
05673 #line 1324 "parse.y"
05674     {
05675                     /*%%%*/
05676                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05677                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05678                     /*%
05679                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
05680                     %*/
05681                         dyna_pop((yyvsp[(1) - (5)].vars));
05682                     ;}
05683     break;
05684 
05685   case 57:
05686 
05687 /* Line 1464 of yacc.c  */
05688 #line 1336 "parse.y"
05689     {
05690                     /*%%%*/
05691                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05692                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05693                     /*%
05694                         $$ = dispatch2(command, $1, $2);
05695                     %*/
05696                     ;}
05697     break;
05698 
05699   case 58:
05700 
05701 /* Line 1464 of yacc.c  */
05702 #line 1345 "parse.y"
05703     {
05704                     /*%%%*/
05705                         block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05706                         (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05707                         (yyval.node) = (yyvsp[(3) - (3)].node);
05708                         fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05709                     /*%
05710                         $$ = dispatch2(command, $1, $2);
05711                         $$ = method_add_block($$, $3);
05712                     %*/
05713                     ;}
05714     break;
05715 
05716   case 59:
05717 
05718 /* Line 1464 of yacc.c  */
05719 #line 1357 "parse.y"
05720     {
05721                     /*%%%*/
05722                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05723                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05724                     /*%
05725                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05726                     %*/
05727                     ;}
05728     break;
05729 
05730   case 60:
05731 
05732 /* Line 1464 of yacc.c  */
05733 #line 1366 "parse.y"
05734     {
05735                     /*%%%*/
05736                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05737                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05738                         (yyval.node) = (yyvsp[(5) - (5)].node);
05739                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05740                     /*%
05741                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05742                         $$ = method_add_block($$, $5);
05743                     %*/
05744                    ;}
05745     break;
05746 
05747   case 61:
05748 
05749 /* Line 1464 of yacc.c  */
05750 #line 1378 "parse.y"
05751     {
05752                     /*%%%*/
05753                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05754                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05755                     /*%
05756                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05757                     %*/
05758                     ;}
05759     break;
05760 
05761   case 62:
05762 
05763 /* Line 1464 of yacc.c  */
05764 #line 1387 "parse.y"
05765     {
05766                     /*%%%*/
05767                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05768                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05769                         (yyval.node) = (yyvsp[(5) - (5)].node);
05770                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05771                     /*%
05772                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05773                         $$ = method_add_block($$, $5);
05774                     %*/
05775                    ;}
05776     break;
05777 
05778   case 63:
05779 
05780 /* Line 1464 of yacc.c  */
05781 #line 1399 "parse.y"
05782     {
05783                     /*%%%*/
05784                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05785                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05786                     /*%
05787                         $$ = dispatch1(super, $2);
05788                     %*/
05789                     ;}
05790     break;
05791 
05792   case 64:
05793 
05794 /* Line 1464 of yacc.c  */
05795 #line 1408 "parse.y"
05796     {
05797                     /*%%%*/
05798                         (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05799                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05800                     /*%
05801                         $$ = dispatch1(yield, $2);
05802                     %*/
05803                     ;}
05804     break;
05805 
05806   case 65:
05807 
05808 /* Line 1464 of yacc.c  */
05809 #line 1417 "parse.y"
05810     {
05811                     /*%%%*/
05812                         (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05813                     /*%
05814                         $$ = dispatch1(return, $2);
05815                     %*/
05816                     ;}
05817     break;
05818 
05819   case 66:
05820 
05821 /* Line 1464 of yacc.c  */
05822 #line 1425 "parse.y"
05823     {
05824                     /*%%%*/
05825                         (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05826                     /*%
05827                         $$ = dispatch1(break, $2);
05828                     %*/
05829                     ;}
05830     break;
05831 
05832   case 67:
05833 
05834 /* Line 1464 of yacc.c  */
05835 #line 1433 "parse.y"
05836     {
05837                     /*%%%*/
05838                         (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05839                     /*%
05840                         $$ = dispatch1(next, $2);
05841                     %*/
05842                     ;}
05843     break;
05844 
05845   case 69:
05846 
05847 /* Line 1464 of yacc.c  */
05848 #line 1444 "parse.y"
05849     {
05850                     /*%%%*/
05851                         (yyval.node) = (yyvsp[(2) - (3)].node);
05852                     /*%
05853                         $$ = dispatch1(mlhs_paren, $2);
05854                     %*/
05855                     ;}
05856     break;
05857 
05858   case 71:
05859 
05860 /* Line 1464 of yacc.c  */
05861 #line 1455 "parse.y"
05862     {
05863                     /*%%%*/
05864                         (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05865                     /*%
05866                         $$ = dispatch1(mlhs_paren, $2);
05867                     %*/
05868                     ;}
05869     break;
05870 
05871   case 72:
05872 
05873 /* Line 1464 of yacc.c  */
05874 #line 1465 "parse.y"
05875     {
05876                     /*%%%*/
05877                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05878                     /*%
05879                         $$ = $1;
05880                     %*/
05881                     ;}
05882     break;
05883 
05884   case 73:
05885 
05886 /* Line 1464 of yacc.c  */
05887 #line 1473 "parse.y"
05888     {
05889                     /*%%%*/
05890                         (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
05891                     /*%
05892                         $$ = mlhs_add($1, $2);
05893                     %*/
05894                     ;}
05895     break;
05896 
05897   case 74:
05898 
05899 /* Line 1464 of yacc.c  */
05900 #line 1481 "parse.y"
05901     {
05902                     /*%%%*/
05903                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05904                     /*%
05905                         $$ = mlhs_add_star($1, $3);
05906                     %*/
05907                     ;}
05908     break;
05909 
05910   case 75:
05911 
05912 /* Line 1464 of yacc.c  */
05913 #line 1489 "parse.y"
05914     {
05915                     /*%%%*/
05916                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
05917                     /*%
05918                         $1 = mlhs_add_star($1, $3);
05919                         $$ = mlhs_add($1, $5);
05920                     %*/
05921                     ;}
05922     break;
05923 
05924   case 76:
05925 
05926 /* Line 1464 of yacc.c  */
05927 #line 1498 "parse.y"
05928     {
05929                     /*%%%*/
05930                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
05931                     /*%
05932                         $$ = mlhs_add_star($1, Qnil);
05933                     %*/
05934                     ;}
05935     break;
05936 
05937   case 77:
05938 
05939 /* Line 1464 of yacc.c  */
05940 #line 1506 "parse.y"
05941     {
05942                     /*%%%*/
05943                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
05944                     /*%
05945                         $1 = mlhs_add_star($1, Qnil);
05946                         $$ = mlhs_add($1, $4);
05947                     %*/
05948                     ;}
05949     break;
05950 
05951   case 78:
05952 
05953 /* Line 1464 of yacc.c  */
05954 #line 1515 "parse.y"
05955     {
05956                     /*%%%*/
05957                         (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
05958                     /*%
05959                         $$ = mlhs_add_star(mlhs_new(), $2);
05960                     %*/
05961                     ;}
05962     break;
05963 
05964   case 79:
05965 
05966 /* Line 1464 of yacc.c  */
05967 #line 1523 "parse.y"
05968     {
05969                     /*%%%*/
05970                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
05971                     /*%
05972                         $2 = mlhs_add_star(mlhs_new(), $2);
05973                         $$ = mlhs_add($2, $4);
05974                     %*/
05975                     ;}
05976     break;
05977 
05978   case 80:
05979 
05980 /* Line 1464 of yacc.c  */
05981 #line 1532 "parse.y"
05982     {
05983                     /*%%%*/
05984                         (yyval.node) = NEW_MASGN(0, -1);
05985                     /*%
05986                         $$ = mlhs_add_star(mlhs_new(), Qnil);
05987                     %*/
05988                     ;}
05989     break;
05990 
05991   case 81:
05992 
05993 /* Line 1464 of yacc.c  */
05994 #line 1540 "parse.y"
05995     {
05996                     /*%%%*/
05997                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
05998                     /*%
05999                         $$ = mlhs_add_star(mlhs_new(), Qnil);
06000                         $$ = mlhs_add($$, $3);
06001                     %*/
06002                     ;}
06003     break;
06004 
06005   case 83:
06006 
06007 /* Line 1464 of yacc.c  */
06008 #line 1552 "parse.y"
06009     {
06010                     /*%%%*/
06011                         (yyval.node) = (yyvsp[(2) - (3)].node);
06012                     /*%
06013                         $$ = dispatch1(mlhs_paren, $2);
06014                     %*/
06015                     ;}
06016     break;
06017 
06018   case 84:
06019 
06020 /* Line 1464 of yacc.c  */
06021 #line 1562 "parse.y"
06022     {
06023                     /*%%%*/
06024                         (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06025                     /*%
06026                         $$ = mlhs_add(mlhs_new(), $1);
06027                     %*/
06028                     ;}
06029     break;
06030 
06031   case 85:
06032 
06033 /* Line 1464 of yacc.c  */
06034 #line 1570 "parse.y"
06035     {
06036                     /*%%%*/
06037                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06038                     /*%
06039                         $$ = mlhs_add($1, $2);
06040                     %*/
06041                     ;}
06042     break;
06043 
06044   case 86:
06045 
06046 /* Line 1464 of yacc.c  */
06047 #line 1580 "parse.y"
06048     {
06049                     /*%%%*/
06050                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06051                     /*%
06052                         $$ = mlhs_add(mlhs_new(), $1);
06053                     %*/
06054                     ;}
06055     break;
06056 
06057   case 87:
06058 
06059 /* Line 1464 of yacc.c  */
06060 #line 1588 "parse.y"
06061     {
06062                     /*%%%*/
06063                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06064                     /*%
06065                         $$ = mlhs_add($1, $3);
06066                     %*/
06067                     ;}
06068     break;
06069 
06070   case 88:
06071 
06072 /* Line 1464 of yacc.c  */
06073 #line 1598 "parse.y"
06074     {
06075                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06076                     ;}
06077     break;
06078 
06079   case 89:
06080 
06081 /* Line 1464 of yacc.c  */
06082 #line 1602 "parse.y"
06083     {
06084                     /*%%%*/
06085                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06086                     /*%
06087                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06088                     %*/
06089                     ;}
06090     break;
06091 
06092   case 90:
06093 
06094 /* Line 1464 of yacc.c  */
06095 #line 1610 "parse.y"
06096     {
06097                     /*%%%*/
06098                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06099                     /*%
06100                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06101                     %*/
06102                     ;}
06103     break;
06104 
06105   case 91:
06106 
06107 /* Line 1464 of yacc.c  */
06108 #line 1618 "parse.y"
06109     {
06110                     /*%%%*/
06111                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06112                     /*%
06113                         $$ = dispatch2(const_path_field, $1, $3);
06114                     %*/
06115                     ;}
06116     break;
06117 
06118   case 92:
06119 
06120 /* Line 1464 of yacc.c  */
06121 #line 1626 "parse.y"
06122     {
06123                     /*%%%*/
06124                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06125                     /*%
06126                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06127                     %*/
06128                     ;}
06129     break;
06130 
06131   case 93:
06132 
06133 /* Line 1464 of yacc.c  */
06134 #line 1634 "parse.y"
06135     {
06136                     /*%%%*/
06137                         if (in_def || in_single)
06138                             yyerror("dynamic constant assignment");
06139                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06140                     /*%
06141                         if (in_def || in_single)
06142                             yyerror("dynamic constant assignment");
06143                         $$ = dispatch2(const_path_field, $1, $3);
06144                     %*/
06145                     ;}
06146     break;
06147 
06148   case 94:
06149 
06150 /* Line 1464 of yacc.c  */
06151 #line 1646 "parse.y"
06152     {
06153                     /*%%%*/
06154                         if (in_def || in_single)
06155                             yyerror("dynamic constant assignment");
06156                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06157                     /*%
06158                         $$ = dispatch1(top_const_field, $2);
06159                     %*/
06160                     ;}
06161     break;
06162 
06163   case 95:
06164 
06165 /* Line 1464 of yacc.c  */
06166 #line 1656 "parse.y"
06167     {
06168                     /*%%%*/
06169                         rb_backref_error((yyvsp[(1) - (1)].node));
06170                         (yyval.node) = NEW_BEGIN(0);
06171                     /*%
06172                         $$ = dispatch1(var_field, $1);
06173                         $$ = dispatch1(assign_error, $$);
06174                     %*/
06175                     ;}
06176     break;
06177 
06178   case 96:
06179 
06180 /* Line 1464 of yacc.c  */
06181 #line 1668 "parse.y"
06182     {
06183                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06184                     /*%%%*/
06185                         if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06186                     /*%
06187                         $$ = dispatch1(var_field, $$);
06188                     %*/
06189                     ;}
06190     break;
06191 
06192   case 97:
06193 
06194 /* Line 1464 of yacc.c  */
06195 #line 1677 "parse.y"
06196     {
06197                     /*%%%*/
06198                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06199                     /*%
06200                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06201                     %*/
06202                     ;}
06203     break;
06204 
06205   case 98:
06206 
06207 /* Line 1464 of yacc.c  */
06208 #line 1685 "parse.y"
06209     {
06210                     /*%%%*/
06211                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06212                     /*%
06213                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06214                     %*/
06215                     ;}
06216     break;
06217 
06218   case 99:
06219 
06220 /* Line 1464 of yacc.c  */
06221 #line 1693 "parse.y"
06222     {
06223                     /*%%%*/
06224                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06225                     /*%
06226                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
06227                     %*/
06228                     ;}
06229     break;
06230 
06231   case 100:
06232 
06233 /* Line 1464 of yacc.c  */
06234 #line 1701 "parse.y"
06235     {
06236                     /*%%%*/
06237                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06238                     /*%
06239                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06240                     %*/
06241                     ;}
06242     break;
06243 
06244   case 101:
06245 
06246 /* Line 1464 of yacc.c  */
06247 #line 1709 "parse.y"
06248     {
06249                     /*%%%*/
06250                         if (in_def || in_single)
06251                             yyerror("dynamic constant assignment");
06252                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06253                     /*%
06254                         $$ = dispatch2(const_path_field, $1, $3);
06255                         if (in_def || in_single) {
06256                             $$ = dispatch1(assign_error, $$);
06257                         }
06258                     %*/
06259                     ;}
06260     break;
06261 
06262   case 102:
06263 
06264 /* Line 1464 of yacc.c  */
06265 #line 1722 "parse.y"
06266     {
06267                     /*%%%*/
06268                         if (in_def || in_single)
06269                             yyerror("dynamic constant assignment");
06270                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06271                     /*%
06272                         $$ = dispatch1(top_const_field, $2);
06273                         if (in_def || in_single) {
06274                             $$ = dispatch1(assign_error, $$);
06275                         }
06276                     %*/
06277                     ;}
06278     break;
06279 
06280   case 103:
06281 
06282 /* Line 1464 of yacc.c  */
06283 #line 1735 "parse.y"
06284     {
06285                     /*%%%*/
06286                         rb_backref_error((yyvsp[(1) - (1)].node));
06287                         (yyval.node) = NEW_BEGIN(0);
06288                     /*%
06289                         $$ = dispatch1(assign_error, $1);
06290                     %*/
06291                     ;}
06292     break;
06293 
06294   case 104:
06295 
06296 /* Line 1464 of yacc.c  */
06297 #line 1746 "parse.y"
06298     {
06299                     /*%%%*/
06300                         yyerror("class/module name must be CONSTANT");
06301                     /*%
06302                         $$ = dispatch1(class_name_error, $1);
06303                     %*/
06304                     ;}
06305     break;
06306 
06307   case 106:
06308 
06309 /* Line 1464 of yacc.c  */
06310 #line 1757 "parse.y"
06311     {
06312                     /*%%%*/
06313                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06314                     /*%
06315                         $$ = dispatch1(top_const_ref, $2);
06316                     %*/
06317                     ;}
06318     break;
06319 
06320   case 107:
06321 
06322 /* Line 1464 of yacc.c  */
06323 #line 1765 "parse.y"
06324     {
06325                     /*%%%*/
06326                         (yyval.node) = NEW_COLON2(0, (yyval.node));
06327                     /*%
06328                         $$ = dispatch1(const_ref, $1);
06329                     %*/
06330                     ;}
06331     break;
06332 
06333   case 108:
06334 
06335 /* Line 1464 of yacc.c  */
06336 #line 1773 "parse.y"
06337     {
06338                     /*%%%*/
06339                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06340                     /*%
06341                         $$ = dispatch2(const_path_ref, $1, $3);
06342                     %*/
06343                     ;}
06344     break;
06345 
06346   case 112:
06347 
06348 /* Line 1464 of yacc.c  */
06349 #line 1786 "parse.y"
06350     {
06351                         lex_state = EXPR_ENDFN;
06352                         (yyval.id) = (yyvsp[(1) - (1)].id);
06353                     ;}
06354     break;
06355 
06356   case 113:
06357 
06358 /* Line 1464 of yacc.c  */
06359 #line 1791 "parse.y"
06360     {
06361                         lex_state = EXPR_ENDFN;
06362                     /*%%%*/
06363                         (yyval.id) = (yyvsp[(1) - (1)].id);
06364                     /*%
06365                         $$ = $1;
06366                     %*/
06367                     ;}
06368     break;
06369 
06370   case 116:
06371 
06372 /* Line 1464 of yacc.c  */
06373 #line 1806 "parse.y"
06374     {
06375                     /*%%%*/
06376                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06377                     /*%
06378                         $$ = dispatch1(symbol_literal, $1);
06379                     %*/
06380                     ;}
06381     break;
06382 
06383   case 118:
06384 
06385 /* Line 1464 of yacc.c  */
06386 #line 1817 "parse.y"
06387     {
06388                     /*%%%*/
06389                         (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06390                     /*%
06391                         $$ = rb_ary_new3(1, $1);
06392                     %*/
06393                     ;}
06394     break;
06395 
06396   case 119:
06397 
06398 /* Line 1464 of yacc.c  */
06399 #line 1824 "parse.y"
06400     {lex_state = EXPR_FNAME;;}
06401     break;
06402 
06403   case 120:
06404 
06405 /* Line 1464 of yacc.c  */
06406 #line 1825 "parse.y"
06407     {
06408                     /*%%%*/
06409                         (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06410                     /*%
06411                         rb_ary_push($1, $4);
06412                     %*/
06413                     ;}
06414     break;
06415 
06416   case 121:
06417 
06418 /* Line 1464 of yacc.c  */
06419 #line 1834 "parse.y"
06420     { ifndef_ripper((yyval.id) = '|'); ;}
06421     break;
06422 
06423   case 122:
06424 
06425 /* Line 1464 of yacc.c  */
06426 #line 1835 "parse.y"
06427     { ifndef_ripper((yyval.id) = '^'); ;}
06428     break;
06429 
06430   case 123:
06431 
06432 /* Line 1464 of yacc.c  */
06433 #line 1836 "parse.y"
06434     { ifndef_ripper((yyval.id) = '&'); ;}
06435     break;
06436 
06437   case 124:
06438 
06439 /* Line 1464 of yacc.c  */
06440 #line 1837 "parse.y"
06441     { ifndef_ripper((yyval.id) = tCMP); ;}
06442     break;
06443 
06444   case 125:
06445 
06446 /* Line 1464 of yacc.c  */
06447 #line 1838 "parse.y"
06448     { ifndef_ripper((yyval.id) = tEQ); ;}
06449     break;
06450 
06451   case 126:
06452 
06453 /* Line 1464 of yacc.c  */
06454 #line 1839 "parse.y"
06455     { ifndef_ripper((yyval.id) = tEQQ); ;}
06456     break;
06457 
06458   case 127:
06459 
06460 /* Line 1464 of yacc.c  */
06461 #line 1840 "parse.y"
06462     { ifndef_ripper((yyval.id) = tMATCH); ;}
06463     break;
06464 
06465   case 128:
06466 
06467 /* Line 1464 of yacc.c  */
06468 #line 1841 "parse.y"
06469     { ifndef_ripper((yyval.id) = tNMATCH); ;}
06470     break;
06471 
06472   case 129:
06473 
06474 /* Line 1464 of yacc.c  */
06475 #line 1842 "parse.y"
06476     { ifndef_ripper((yyval.id) = '>'); ;}
06477     break;
06478 
06479   case 130:
06480 
06481 /* Line 1464 of yacc.c  */
06482 #line 1843 "parse.y"
06483     { ifndef_ripper((yyval.id) = tGEQ); ;}
06484     break;
06485 
06486   case 131:
06487 
06488 /* Line 1464 of yacc.c  */
06489 #line 1844 "parse.y"
06490     { ifndef_ripper((yyval.id) = '<'); ;}
06491     break;
06492 
06493   case 132:
06494 
06495 /* Line 1464 of yacc.c  */
06496 #line 1845 "parse.y"
06497     { ifndef_ripper((yyval.id) = tLEQ); ;}
06498     break;
06499 
06500   case 133:
06501 
06502 /* Line 1464 of yacc.c  */
06503 #line 1846 "parse.y"
06504     { ifndef_ripper((yyval.id) = tNEQ); ;}
06505     break;
06506 
06507   case 134:
06508 
06509 /* Line 1464 of yacc.c  */
06510 #line 1847 "parse.y"
06511     { ifndef_ripper((yyval.id) = tLSHFT); ;}
06512     break;
06513 
06514   case 135:
06515 
06516 /* Line 1464 of yacc.c  */
06517 #line 1848 "parse.y"
06518     { ifndef_ripper((yyval.id) = tRSHFT); ;}
06519     break;
06520 
06521   case 136:
06522 
06523 /* Line 1464 of yacc.c  */
06524 #line 1849 "parse.y"
06525     { ifndef_ripper((yyval.id) = '+'); ;}
06526     break;
06527 
06528   case 137:
06529 
06530 /* Line 1464 of yacc.c  */
06531 #line 1850 "parse.y"
06532     { ifndef_ripper((yyval.id) = '-'); ;}
06533     break;
06534 
06535   case 138:
06536 
06537 /* Line 1464 of yacc.c  */
06538 #line 1851 "parse.y"
06539     { ifndef_ripper((yyval.id) = '*'); ;}
06540     break;
06541 
06542   case 139:
06543 
06544 /* Line 1464 of yacc.c  */
06545 #line 1852 "parse.y"
06546     { ifndef_ripper((yyval.id) = '*'); ;}
06547     break;
06548 
06549   case 140:
06550 
06551 /* Line 1464 of yacc.c  */
06552 #line 1853 "parse.y"
06553     { ifndef_ripper((yyval.id) = '/'); ;}
06554     break;
06555 
06556   case 141:
06557 
06558 /* Line 1464 of yacc.c  */
06559 #line 1854 "parse.y"
06560     { ifndef_ripper((yyval.id) = '%'); ;}
06561     break;
06562 
06563   case 142:
06564 
06565 /* Line 1464 of yacc.c  */
06566 #line 1855 "parse.y"
06567     { ifndef_ripper((yyval.id) = tPOW); ;}
06568     break;
06569 
06570   case 143:
06571 
06572 /* Line 1464 of yacc.c  */
06573 #line 1856 "parse.y"
06574     { ifndef_ripper((yyval.id) = '!'); ;}
06575     break;
06576 
06577   case 144:
06578 
06579 /* Line 1464 of yacc.c  */
06580 #line 1857 "parse.y"
06581     { ifndef_ripper((yyval.id) = '~'); ;}
06582     break;
06583 
06584   case 145:
06585 
06586 /* Line 1464 of yacc.c  */
06587 #line 1858 "parse.y"
06588     { ifndef_ripper((yyval.id) = tUPLUS); ;}
06589     break;
06590 
06591   case 146:
06592 
06593 /* Line 1464 of yacc.c  */
06594 #line 1859 "parse.y"
06595     { ifndef_ripper((yyval.id) = tUMINUS); ;}
06596     break;
06597 
06598   case 147:
06599 
06600 /* Line 1464 of yacc.c  */
06601 #line 1860 "parse.y"
06602     { ifndef_ripper((yyval.id) = tAREF); ;}
06603     break;
06604 
06605   case 148:
06606 
06607 /* Line 1464 of yacc.c  */
06608 #line 1861 "parse.y"
06609     { ifndef_ripper((yyval.id) = tASET); ;}
06610     break;
06611 
06612   case 149:
06613 
06614 /* Line 1464 of yacc.c  */
06615 #line 1862 "parse.y"
06616     { ifndef_ripper((yyval.id) = '`'); ;}
06617     break;
06618 
06619   case 191:
06620 
06621 /* Line 1464 of yacc.c  */
06622 #line 1880 "parse.y"
06623     {
06624                     /*%%%*/
06625                         value_expr((yyvsp[(3) - (3)].node));
06626                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06627                     /*%
06628                         $$ = dispatch2(assign, $1, $3);
06629                     %*/
06630                     ;}
06631     break;
06632 
06633   case 192:
06634 
06635 /* Line 1464 of yacc.c  */
06636 #line 1889 "parse.y"
06637     {
06638                     /*%%%*/
06639                         value_expr((yyvsp[(3) - (5)].node));
06640                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06641                         (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06642                     /*%
06643                         $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
06644                     %*/
06645                     ;}
06646     break;
06647 
06648   case 193:
06649 
06650 /* Line 1464 of yacc.c  */
06651 #line 1899 "parse.y"
06652     {
06653                     /*%%%*/
06654                         value_expr((yyvsp[(3) - (3)].node));
06655                         if ((yyvsp[(1) - (3)].node)) {
06656                             ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06657                             if ((yyvsp[(2) - (3)].id) == tOROP) {
06658                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06659                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06660                                 if (is_asgn_or_id(vid)) {
06661                                     (yyval.node)->nd_aid = vid;
06662                                 }
06663                             }
06664                             else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06665                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06666                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06667                             }
06668                             else {
06669                                 (yyval.node) = (yyvsp[(1) - (3)].node);
06670                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06671                             }
06672                         }
06673                         else {
06674                             (yyval.node) = NEW_BEGIN(0);
06675                         }
06676                     /*%
06677                         $$ = dispatch3(opassign, $1, $2, $3);
06678                     %*/
06679                     ;}
06680     break;
06681 
06682   case 194:
06683 
06684 /* Line 1464 of yacc.c  */
06685 #line 1928 "parse.y"
06686     {
06687                     /*%%%*/
06688                         value_expr((yyvsp[(3) - (5)].node));
06689                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06690                         if ((yyvsp[(1) - (5)].node)) {
06691                             ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06692                             if ((yyvsp[(2) - (5)].id) == tOROP) {
06693                                 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06694                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06695                                 if (is_asgn_or_id(vid)) {
06696                                     (yyval.node)->nd_aid = vid;
06697                                 }
06698                             }
06699                             else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06700                                 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06701                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06702                             }
06703                             else {
06704                                 (yyval.node) = (yyvsp[(1) - (5)].node);
06705                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06706                             }
06707                         }
06708                         else {
06709                             (yyval.node) = NEW_BEGIN(0);
06710                         }
06711                     /*%
06712                         $3 = dispatch2(rescue_mod, $3, $5);
06713                         $$ = dispatch3(opassign, $1, $2, $3);
06714                     %*/
06715                     ;}
06716     break;
06717 
06718   case 195:
06719 
06720 /* Line 1464 of yacc.c  */
06721 #line 1959 "parse.y"
06722     {
06723                     /*%%%*/
06724                         NODE *args;
06725 
06726                         value_expr((yyvsp[(6) - (6)].node));
06727                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06728                         if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06729                             args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06730                         }
06731                         else {
06732                             args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06733                         }
06734                         if ((yyvsp[(5) - (6)].id) == tOROP) {
06735                             (yyvsp[(5) - (6)].id) = 0;
06736                         }
06737                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06738                             (yyvsp[(5) - (6)].id) = 1;
06739                         }
06740                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06741                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06742                     /*%
06743                         $1 = dispatch2(aref_field, $1, escape_Qundef($3));
06744                         $$ = dispatch3(opassign, $1, $5, $6);
06745                     %*/
06746                     ;}
06747     break;
06748 
06749   case 196:
06750 
06751 /* Line 1464 of yacc.c  */
06752 #line 1985 "parse.y"
06753     {
06754                     /*%%%*/
06755                         value_expr((yyvsp[(5) - (5)].node));
06756                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06757                             (yyvsp[(4) - (5)].id) = 0;
06758                         }
06759                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06760                             (yyvsp[(4) - (5)].id) = 1;
06761                         }
06762                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06763                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06764                     /*%
06765                         $1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
06766                         $$ = dispatch3(opassign, $1, $4, $5);
06767                     %*/
06768                     ;}
06769     break;
06770 
06771   case 197:
06772 
06773 /* Line 1464 of yacc.c  */
06774 #line 2002 "parse.y"
06775     {
06776                     /*%%%*/
06777                         value_expr((yyvsp[(5) - (5)].node));
06778                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06779                             (yyvsp[(4) - (5)].id) = 0;
06780                         }
06781                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06782                             (yyvsp[(4) - (5)].id) = 1;
06783                         }
06784                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06785                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06786                     /*%
06787                         $1 = dispatch3(field, $1, ripper_id2sym('.'), $3);
06788                         $$ = dispatch3(opassign, $1, $4, $5);
06789                     %*/
06790                     ;}
06791     break;
06792 
06793   case 198:
06794 
06795 /* Line 1464 of yacc.c  */
06796 #line 2019 "parse.y"
06797     {
06798                     /*%%%*/
06799                         value_expr((yyvsp[(5) - (5)].node));
06800                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06801                             (yyvsp[(4) - (5)].id) = 0;
06802                         }
06803                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06804                             (yyvsp[(4) - (5)].id) = 1;
06805                         }
06806                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06807                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06808                     /*%
06809                         $1 = dispatch3(field, $1, ripper_intern("::"), $3);
06810                         $$ = dispatch3(opassign, $1, $4, $5);
06811                     %*/
06812                     ;}
06813     break;
06814 
06815   case 199:
06816 
06817 /* Line 1464 of yacc.c  */
06818 #line 2036 "parse.y"
06819     {
06820                     /*%%%*/
06821                         yyerror("constant re-assignment");
06822                         (yyval.node) = NEW_BEGIN(0);
06823                     /*%
06824                         $$ = dispatch2(const_path_field, $1, $3);
06825                         $$ = dispatch3(opassign, $$, $4, $5);
06826                         $$ = dispatch1(assign_error, $$);
06827                     %*/
06828                     ;}
06829     break;
06830 
06831   case 200:
06832 
06833 /* Line 1464 of yacc.c  */
06834 #line 2047 "parse.y"
06835     {
06836                     /*%%%*/
06837                         yyerror("constant re-assignment");
06838                         (yyval.node) = NEW_BEGIN(0);
06839                     /*%
06840                         $$ = dispatch1(top_const_field, $2);
06841                         $$ = dispatch3(opassign, $$, $3, $4);
06842                         $$ = dispatch1(assign_error, $$);
06843                     %*/
06844                     ;}
06845     break;
06846 
06847   case 201:
06848 
06849 /* Line 1464 of yacc.c  */
06850 #line 2058 "parse.y"
06851     {
06852                     /*%%%*/
06853                         rb_backref_error((yyvsp[(1) - (3)].node));
06854                         (yyval.node) = NEW_BEGIN(0);
06855                     /*%
06856                         $$ = dispatch1(var_field, $1);
06857                         $$ = dispatch3(opassign, $$, $2, $3);
06858                         $$ = dispatch1(assign_error, $$);
06859                     %*/
06860                     ;}
06861     break;
06862 
06863   case 202:
06864 
06865 /* Line 1464 of yacc.c  */
06866 #line 2069 "parse.y"
06867     {
06868                     /*%%%*/
06869                         value_expr((yyvsp[(1) - (3)].node));
06870                         value_expr((yyvsp[(3) - (3)].node));
06871                         (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06872                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06873                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06874                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
06875                         }
06876                     /*%
06877                         $$ = dispatch2(dot2, $1, $3);
06878                     %*/
06879                     ;}
06880     break;
06881 
06882   case 203:
06883 
06884 /* Line 1464 of yacc.c  */
06885 #line 2083 "parse.y"
06886     {
06887                     /*%%%*/
06888                         value_expr((yyvsp[(1) - (3)].node));
06889                         value_expr((yyvsp[(3) - (3)].node));
06890                         (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06891                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06892                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06893                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
06894                         }
06895                     /*%
06896                         $$ = dispatch2(dot3, $1, $3);
06897                     %*/
06898                     ;}
06899     break;
06900 
06901   case 204:
06902 
06903 /* Line 1464 of yacc.c  */
06904 #line 2097 "parse.y"
06905     {
06906                     /*%%%*/
06907                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
06908                     /*%
06909                         $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
06910                     %*/
06911                     ;}
06912     break;
06913 
06914   case 205:
06915 
06916 /* Line 1464 of yacc.c  */
06917 #line 2105 "parse.y"
06918     {
06919                     /*%%%*/
06920                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
06921                     /*%
06922                         $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
06923                     %*/
06924                     ;}
06925     break;
06926 
06927   case 206:
06928 
06929 /* Line 1464 of yacc.c  */
06930 #line 2113 "parse.y"
06931     {
06932                     /*%%%*/
06933                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
06934                     /*%
06935                         $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
06936                     %*/
06937                     ;}
06938     break;
06939 
06940   case 207:
06941 
06942 /* Line 1464 of yacc.c  */
06943 #line 2121 "parse.y"
06944     {
06945                     /*%%%*/
06946                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
06947                     /*%
06948                         $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
06949                     %*/
06950                     ;}
06951     break;
06952 
06953   case 208:
06954 
06955 /* Line 1464 of yacc.c  */
06956 #line 2129 "parse.y"
06957     {
06958                     /*%%%*/
06959                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
06960                     /*%
06961                         $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
06962                     %*/
06963                     ;}
06964     break;
06965 
06966   case 209:
06967 
06968 /* Line 1464 of yacc.c  */
06969 #line 2137 "parse.y"
06970     {
06971                     /*%%%*/
06972                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
06973                     /*%
06974                         $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
06975                     %*/
06976                     ;}
06977     break;
06978 
06979   case 210:
06980 
06981 /* Line 1464 of yacc.c  */
06982 #line 2145 "parse.y"
06983     {
06984                     /*%%%*/
06985                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
06986                     /*%
06987                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
06988                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
06989                     %*/
06990                     ;}
06991     break;
06992 
06993   case 211:
06994 
06995 /* Line 1464 of yacc.c  */
06996 #line 2154 "parse.y"
06997     {
06998                     /*%%%*/
06999                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07000                     /*%
07001                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
07002                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
07003                     %*/
07004                     ;}
07005     break;
07006 
07007   case 212:
07008 
07009 /* Line 1464 of yacc.c  */
07010 #line 2163 "parse.y"
07011     {
07012                     /*%%%*/
07013                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07014                     /*%
07015                         $$ = dispatch2(unary, ripper_intern("+@"), $2);
07016                     %*/
07017                     ;}
07018     break;
07019 
07020   case 213:
07021 
07022 /* Line 1464 of yacc.c  */
07023 #line 2171 "parse.y"
07024     {
07025                     /*%%%*/
07026                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07027                     /*%
07028                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
07029                     %*/
07030                     ;}
07031     break;
07032 
07033   case 214:
07034 
07035 /* Line 1464 of yacc.c  */
07036 #line 2179 "parse.y"
07037     {
07038                     /*%%%*/
07039                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07040                     /*%
07041                         $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
07042                     %*/
07043                     ;}
07044     break;
07045 
07046   case 215:
07047 
07048 /* Line 1464 of yacc.c  */
07049 #line 2187 "parse.y"
07050     {
07051                     /*%%%*/
07052                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07053                     /*%
07054                         $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
07055                     %*/
07056                     ;}
07057     break;
07058 
07059   case 216:
07060 
07061 /* Line 1464 of yacc.c  */
07062 #line 2195 "parse.y"
07063     {
07064                     /*%%%*/
07065                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07066                     /*%
07067                         $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
07068                     %*/
07069                     ;}
07070     break;
07071 
07072   case 217:
07073 
07074 /* Line 1464 of yacc.c  */
07075 #line 2203 "parse.y"
07076     {
07077                     /*%%%*/
07078                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07079                     /*%
07080                         $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
07081                     %*/
07082                     ;}
07083     break;
07084 
07085   case 218:
07086 
07087 /* Line 1464 of yacc.c  */
07088 #line 2211 "parse.y"
07089     {
07090                     /*%%%*/
07091                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07092                     /*%
07093                         $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
07094                     %*/
07095                     ;}
07096     break;
07097 
07098   case 219:
07099 
07100 /* Line 1464 of yacc.c  */
07101 #line 2219 "parse.y"
07102     {
07103                     /*%%%*/
07104                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07105                     /*%
07106                         $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
07107                     %*/
07108                     ;}
07109     break;
07110 
07111   case 220:
07112 
07113 /* Line 1464 of yacc.c  */
07114 #line 2227 "parse.y"
07115     {
07116                     /*%%%*/
07117                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07118                     /*%
07119                         $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
07120                     %*/
07121                     ;}
07122     break;
07123 
07124   case 221:
07125 
07126 /* Line 1464 of yacc.c  */
07127 #line 2235 "parse.y"
07128     {
07129                     /*%%%*/
07130                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07131                     /*%
07132                         $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
07133                     %*/
07134                     ;}
07135     break;
07136 
07137   case 222:
07138 
07139 /* Line 1464 of yacc.c  */
07140 #line 2243 "parse.y"
07141     {
07142                     /*%%%*/
07143                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07144                     /*%
07145                         $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
07146                     %*/
07147                     ;}
07148     break;
07149 
07150   case 223:
07151 
07152 /* Line 1464 of yacc.c  */
07153 #line 2251 "parse.y"
07154     {
07155                     /*%%%*/
07156                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07157                     /*%
07158                         $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
07159                     %*/
07160                     ;}
07161     break;
07162 
07163   case 224:
07164 
07165 /* Line 1464 of yacc.c  */
07166 #line 2259 "parse.y"
07167     {
07168                     /*%%%*/
07169                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07170                     /*%
07171                         $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
07172                     %*/
07173                     ;}
07174     break;
07175 
07176   case 225:
07177 
07178 /* Line 1464 of yacc.c  */
07179 #line 2267 "parse.y"
07180     {
07181                     /*%%%*/
07182                         (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07183                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07184                             (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07185                         }
07186                     /*%
07187                         $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
07188                     %*/
07189                     ;}
07190     break;
07191 
07192   case 226:
07193 
07194 /* Line 1464 of yacc.c  */
07195 #line 2278 "parse.y"
07196     {
07197                     /*%%%*/
07198                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07199                     /*%
07200                         $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
07201                     %*/
07202                     ;}
07203     break;
07204 
07205   case 227:
07206 
07207 /* Line 1464 of yacc.c  */
07208 #line 2286 "parse.y"
07209     {
07210                     /*%%%*/
07211                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07212                     /*%
07213                         $$ = dispatch2(unary, ID2SYM('!'), $2);
07214                     %*/
07215                     ;}
07216     break;
07217 
07218   case 228:
07219 
07220 /* Line 1464 of yacc.c  */
07221 #line 2294 "parse.y"
07222     {
07223                     /*%%%*/
07224                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07225                     /*%
07226                         $$ = dispatch2(unary, ID2SYM('~'), $2);
07227                     %*/
07228                     ;}
07229     break;
07230 
07231   case 229:
07232 
07233 /* Line 1464 of yacc.c  */
07234 #line 2302 "parse.y"
07235     {
07236                     /*%%%*/
07237                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07238                     /*%
07239                         $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
07240                     %*/
07241                     ;}
07242     break;
07243 
07244   case 230:
07245 
07246 /* Line 1464 of yacc.c  */
07247 #line 2310 "parse.y"
07248     {
07249                     /*%%%*/
07250                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07251                     /*%
07252                         $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
07253                     %*/
07254                     ;}
07255     break;
07256 
07257   case 231:
07258 
07259 /* Line 1464 of yacc.c  */
07260 #line 2318 "parse.y"
07261     {
07262                     /*%%%*/
07263                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07264                     /*%
07265                         $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
07266                     %*/
07267                     ;}
07268     break;
07269 
07270   case 232:
07271 
07272 /* Line 1464 of yacc.c  */
07273 #line 2326 "parse.y"
07274     {
07275                     /*%%%*/
07276                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07277                     /*%
07278                         $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
07279                     %*/
07280                     ;}
07281     break;
07282 
07283   case 233:
07284 
07285 /* Line 1464 of yacc.c  */
07286 #line 2333 "parse.y"
07287     {in_defined = 1;;}
07288     break;
07289 
07290   case 234:
07291 
07292 /* Line 1464 of yacc.c  */
07293 #line 2334 "parse.y"
07294     {
07295                     /*%%%*/
07296                         in_defined = 0;
07297                         (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07298                     /*%
07299                         in_defined = 0;
07300                         $$ = dispatch1(defined, $4);
07301                     %*/
07302                     ;}
07303     break;
07304 
07305   case 235:
07306 
07307 /* Line 1464 of yacc.c  */
07308 #line 2344 "parse.y"
07309     {
07310                     /*%%%*/
07311                         value_expr((yyvsp[(1) - (6)].node));
07312                         (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07313                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07314                     /*%
07315                         $$ = dispatch3(ifop, $1, $3, $6);
07316                     %*/
07317                     ;}
07318     break;
07319 
07320   case 236:
07321 
07322 /* Line 1464 of yacc.c  */
07323 #line 2354 "parse.y"
07324     {
07325                         (yyval.node) = (yyvsp[(1) - (1)].node);
07326                     ;}
07327     break;
07328 
07329   case 237:
07330 
07331 /* Line 1464 of yacc.c  */
07332 #line 2360 "parse.y"
07333     {
07334                     /*%%%*/
07335                         value_expr((yyvsp[(1) - (1)].node));
07336                         (yyval.node) = (yyvsp[(1) - (1)].node);
07337                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
07338                     /*%
07339                         $$ = $1;
07340                     %*/
07341                     ;}
07342     break;
07343 
07344   case 239:
07345 
07346 /* Line 1464 of yacc.c  */
07347 #line 2373 "parse.y"
07348     {
07349                         (yyval.node) = (yyvsp[(1) - (2)].node);
07350                     ;}
07351     break;
07352 
07353   case 240:
07354 
07355 /* Line 1464 of yacc.c  */
07356 #line 2377 "parse.y"
07357     {
07358                     /*%%%*/
07359                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07360                     /*%
07361                         $$ = arg_add_assocs($1, $3);
07362                     %*/
07363                     ;}
07364     break;
07365 
07366   case 241:
07367 
07368 /* Line 1464 of yacc.c  */
07369 #line 2385 "parse.y"
07370     {
07371                     /*%%%*/
07372                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07373                     /*%
07374                         $$ = arg_add_assocs(arg_new(), $1);
07375                     %*/
07376                     ;}
07377     break;
07378 
07379   case 242:
07380 
07381 /* Line 1464 of yacc.c  */
07382 #line 2395 "parse.y"
07383     {
07384                     /*%%%*/
07385                         (yyval.node) = (yyvsp[(2) - (3)].node);
07386                     /*%
07387                         $$ = dispatch1(arg_paren, escape_Qundef($2));
07388                     %*/
07389                     ;}
07390     break;
07391 
07392   case 247:
07393 
07394 /* Line 1464 of yacc.c  */
07395 #line 2413 "parse.y"
07396     {
07397                     /*%%%*/
07398                         value_expr((yyvsp[(1) - (1)].node));
07399                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07400                     /*%
07401                         $$ = arg_add(arg_new(), $1);
07402                     %*/
07403                     ;}
07404     break;
07405 
07406   case 248:
07407 
07408 /* Line 1464 of yacc.c  */
07409 #line 2422 "parse.y"
07410     {
07411                     /*%%%*/
07412                         (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07413                     /*%
07414                         $$ = arg_add_optblock($1, $2);
07415                     %*/
07416                     ;}
07417     break;
07418 
07419   case 249:
07420 
07421 /* Line 1464 of yacc.c  */
07422 #line 2430 "parse.y"
07423     {
07424                     /*%%%*/
07425                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07426                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07427                     /*%
07428                         $$ = arg_add_assocs(arg_new(), $1);
07429                         $$ = arg_add_optblock($$, $2);
07430                     %*/
07431                     ;}
07432     break;
07433 
07434   case 250:
07435 
07436 /* Line 1464 of yacc.c  */
07437 #line 2440 "parse.y"
07438     {
07439                     /*%%%*/
07440                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07441                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07442                     /*%
07443                         $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
07444                     %*/
07445                     ;}
07446     break;
07447 
07448   case 252:
07449 
07450 /* Line 1464 of yacc.c  */
07451 #line 2457 "parse.y"
07452     {
07453                         (yyval.val) = cmdarg_stack;
07454                         CMDARG_PUSH(1);
07455                     ;}
07456     break;
07457 
07458   case 253:
07459 
07460 /* Line 1464 of yacc.c  */
07461 #line 2462 "parse.y"
07462     {
07463                         /* CMDARG_POP() */
07464                         cmdarg_stack = (yyvsp[(1) - (2)].val);
07465                         (yyval.node) = (yyvsp[(2) - (2)].node);
07466                     ;}
07467     break;
07468 
07469   case 254:
07470 
07471 /* Line 1464 of yacc.c  */
07472 #line 2470 "parse.y"
07473     {
07474                     /*%%%*/
07475                         (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07476                     /*%
07477                         $$ = $2;
07478                     %*/
07479                     ;}
07480     break;
07481 
07482   case 255:
07483 
07484 /* Line 1464 of yacc.c  */
07485 #line 2480 "parse.y"
07486     {
07487                         (yyval.node) = (yyvsp[(2) - (2)].node);
07488                     ;}
07489     break;
07490 
07491   case 256:
07492 
07493 /* Line 1464 of yacc.c  */
07494 #line 2484 "parse.y"
07495     {
07496                         (yyval.node) = 0;
07497                     ;}
07498     break;
07499 
07500   case 257:
07501 
07502 /* Line 1464 of yacc.c  */
07503 #line 2488 "parse.y"
07504     {
07505                         (yyval.node) = 0;
07506                     ;}
07507     break;
07508 
07509   case 258:
07510 
07511 /* Line 1464 of yacc.c  */
07512 #line 2494 "parse.y"
07513     {
07514                     /*%%%*/
07515                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07516                     /*%
07517                         $$ = arg_add(arg_new(), $1);
07518                     %*/
07519                     ;}
07520     break;
07521 
07522   case 259:
07523 
07524 /* Line 1464 of yacc.c  */
07525 #line 2502 "parse.y"
07526     {
07527                     /*%%%*/
07528                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07529                     /*%
07530                         $$ = arg_add_star(arg_new(), $2);
07531                     %*/
07532                     ;}
07533     break;
07534 
07535   case 260:
07536 
07537 /* Line 1464 of yacc.c  */
07538 #line 2510 "parse.y"
07539     {
07540                     /*%%%*/
07541                         NODE *n1;
07542                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07543                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07544                         }
07545                         else {
07546                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07547                         }
07548                     /*%
07549                         $$ = arg_add($1, $3);
07550                     %*/
07551                     ;}
07552     break;
07553 
07554   case 261:
07555 
07556 /* Line 1464 of yacc.c  */
07557 #line 2524 "parse.y"
07558     {
07559                     /*%%%*/
07560                         NODE *n1;
07561                         if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07562                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07563                         }
07564                         else {
07565                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07566                         }
07567                     /*%
07568                         $$ = arg_add_star($1, $4);
07569                     %*/
07570                     ;}
07571     break;
07572 
07573   case 262:
07574 
07575 /* Line 1464 of yacc.c  */
07576 #line 2540 "parse.y"
07577     {
07578                     /*%%%*/
07579                         NODE *n1;
07580                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07581                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07582                         }
07583                         else {
07584                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07585                         }
07586                     /*%
07587                         $$ = mrhs_add(args2mrhs($1), $3);
07588                     %*/
07589                     ;}
07590     break;
07591 
07592   case 263:
07593 
07594 /* Line 1464 of yacc.c  */
07595 #line 2554 "parse.y"
07596     {
07597                     /*%%%*/
07598                         NODE *n1;
07599                         if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07600                             (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07601                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07602                         }
07603                         else {
07604                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07605                         }
07606                     /*%
07607                         $$ = mrhs_add_star(args2mrhs($1), $4);
07608                     %*/
07609                     ;}
07610     break;
07611 
07612   case 264:
07613 
07614 /* Line 1464 of yacc.c  */
07615 #line 2569 "parse.y"
07616     {
07617                     /*%%%*/
07618                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07619                     /*%
07620                         $$ = mrhs_add_star(mrhs_new(), $2);
07621                     %*/
07622                     ;}
07623     break;
07624 
07625   case 273:
07626 
07627 /* Line 1464 of yacc.c  */
07628 #line 2587 "parse.y"
07629     {
07630                     /*%%%*/
07631                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07632                     /*%
07633                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07634                     %*/
07635                     ;}
07636     break;
07637 
07638   case 274:
07639 
07640 /* Line 1464 of yacc.c  */
07641 #line 2595 "parse.y"
07642     {
07643                     /*%%%*/
07644                         (yyval.num) = ruby_sourceline;
07645                     /*%
07646                     %*/
07647                     ;}
07648     break;
07649 
07650   case 275:
07651 
07652 /* Line 1464 of yacc.c  */
07653 #line 2603 "parse.y"
07654     {
07655                     /*%%%*/
07656                         if ((yyvsp[(3) - (4)].node) == NULL) {
07657                             (yyval.node) = NEW_NIL();
07658                         }
07659                         else {
07660                             if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07661                                 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07662                                 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07663                             (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07664                         }
07665                         nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07666                     /*%
07667                         $$ = dispatch1(begin, $3);
07668                     %*/
07669                     ;}
07670     break;
07671 
07672   case 276:
07673 
07674 /* Line 1464 of yacc.c  */
07675 #line 2619 "parse.y"
07676     {lex_state = EXPR_ENDARG;;}
07677     break;
07678 
07679   case 277:
07680 
07681 /* Line 1464 of yacc.c  */
07682 #line 2620 "parse.y"
07683     {
07684                         rb_warning0("(...) interpreted as grouped expression");
07685                     /*%%%*/
07686                         (yyval.node) = (yyvsp[(2) - (4)].node);
07687                     /*%
07688                         $$ = dispatch1(paren, $2);
07689                     %*/
07690                     ;}
07691     break;
07692 
07693   case 278:
07694 
07695 /* Line 1464 of yacc.c  */
07696 #line 2629 "parse.y"
07697     {
07698                     /*%%%*/
07699                         (yyval.node) = (yyvsp[(2) - (3)].node);
07700                     /*%
07701                         $$ = dispatch1(paren, $2);
07702                     %*/
07703                     ;}
07704     break;
07705 
07706   case 279:
07707 
07708 /* Line 1464 of yacc.c  */
07709 #line 2637 "parse.y"
07710     {
07711                     /*%%%*/
07712                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07713                     /*%
07714                         $$ = dispatch2(const_path_ref, $1, $3);
07715                     %*/
07716                     ;}
07717     break;
07718 
07719   case 280:
07720 
07721 /* Line 1464 of yacc.c  */
07722 #line 2645 "parse.y"
07723     {
07724                     /*%%%*/
07725                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07726                     /*%
07727                         $$ = dispatch1(top_const_ref, $2);
07728                     %*/
07729                     ;}
07730     break;
07731 
07732   case 281:
07733 
07734 /* Line 1464 of yacc.c  */
07735 #line 2653 "parse.y"
07736     {
07737                     /*%%%*/
07738                         if ((yyvsp[(2) - (3)].node) == 0) {
07739                             (yyval.node) = NEW_ZARRAY(); /* zero length array*/
07740                         }
07741                         else {
07742                             (yyval.node) = (yyvsp[(2) - (3)].node);
07743                         }
07744                     /*%
07745                         $$ = dispatch1(array, escape_Qundef($2));
07746                     %*/
07747                     ;}
07748     break;
07749 
07750   case 282:
07751 
07752 /* Line 1464 of yacc.c  */
07753 #line 2666 "parse.y"
07754     {
07755                     /*%%%*/
07756                         (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07757                     /*%
07758                         $$ = dispatch1(hash, escape_Qundef($2));
07759                     %*/
07760                     ;}
07761     break;
07762 
07763   case 283:
07764 
07765 /* Line 1464 of yacc.c  */
07766 #line 2674 "parse.y"
07767     {
07768                     /*%%%*/
07769                         (yyval.node) = NEW_RETURN(0);
07770                     /*%
07771                         $$ = dispatch0(return0);
07772                     %*/
07773                     ;}
07774     break;
07775 
07776   case 284:
07777 
07778 /* Line 1464 of yacc.c  */
07779 #line 2682 "parse.y"
07780     {
07781                     /*%%%*/
07782                         (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07783                     /*%
07784                         $$ = dispatch1(yield, dispatch1(paren, $3));
07785                     %*/
07786                     ;}
07787     break;
07788 
07789   case 285:
07790 
07791 /* Line 1464 of yacc.c  */
07792 #line 2690 "parse.y"
07793     {
07794                     /*%%%*/
07795                         (yyval.node) = NEW_YIELD(0, Qfalse);
07796                     /*%
07797                         $$ = dispatch1(yield, dispatch1(paren, arg_new()));
07798                     %*/
07799                     ;}
07800     break;
07801 
07802   case 286:
07803 
07804 /* Line 1464 of yacc.c  */
07805 #line 2698 "parse.y"
07806     {
07807                     /*%%%*/
07808                         (yyval.node) = NEW_YIELD(0, Qfalse);
07809                     /*%
07810                         $$ = dispatch0(yield0);
07811                     %*/
07812                     ;}
07813     break;
07814 
07815   case 287:
07816 
07817 /* Line 1464 of yacc.c  */
07818 #line 2705 "parse.y"
07819     {in_defined = 1;;}
07820     break;
07821 
07822   case 288:
07823 
07824 /* Line 1464 of yacc.c  */
07825 #line 2706 "parse.y"
07826     {
07827                     /*%%%*/
07828                         in_defined = 0;
07829                         (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07830                     /*%
07831                         in_defined = 0;
07832                         $$ = dispatch1(defined, $5);
07833                     %*/
07834                     ;}
07835     break;
07836 
07837   case 289:
07838 
07839 /* Line 1464 of yacc.c  */
07840 #line 2716 "parse.y"
07841     {
07842                     /*%%%*/
07843                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
07844                     /*%
07845                         $$ = dispatch2(unary, ripper_intern("not"), $3);
07846                     %*/
07847                     ;}
07848     break;
07849 
07850   case 290:
07851 
07852 /* Line 1464 of yacc.c  */
07853 #line 2724 "parse.y"
07854     {
07855                     /*%%%*/
07856                         (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
07857                     /*%
07858                         $$ = dispatch2(unary, ripper_intern("not"), Qnil);
07859                     %*/
07860                     ;}
07861     break;
07862 
07863   case 291:
07864 
07865 /* Line 1464 of yacc.c  */
07866 #line 2732 "parse.y"
07867     {
07868                     /*%%%*/
07869                         (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
07870                         (yyval.node) = (yyvsp[(2) - (2)].node);
07871                         fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
07872                     /*%
07873                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07874                         $$ = method_add_block($$, $2);
07875                     %*/
07876                     ;}
07877     break;
07878 
07879   case 293:
07880 
07881 /* Line 1464 of yacc.c  */
07882 #line 2744 "parse.y"
07883     {
07884                     /*%%%*/
07885                         block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
07886                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
07887                         (yyval.node) = (yyvsp[(2) - (2)].node);
07888                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
07889                     /*%
07890                         $$ = method_add_block($1, $2);
07891                     %*/
07892                     ;}
07893     break;
07894 
07895   case 294:
07896 
07897 /* Line 1464 of yacc.c  */
07898 #line 2755 "parse.y"
07899     {
07900                         (yyval.node) = (yyvsp[(2) - (2)].node);
07901                     ;}
07902     break;
07903 
07904   case 295:
07905 
07906 /* Line 1464 of yacc.c  */
07907 #line 2762 "parse.y"
07908     {
07909                     /*%%%*/
07910                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07911                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07912                     /*%
07913                         $$ = dispatch3(if, $2, $4, escape_Qundef($5));
07914                     %*/
07915                     ;}
07916     break;
07917 
07918   case 296:
07919 
07920 /* Line 1464 of yacc.c  */
07921 #line 2774 "parse.y"
07922     {
07923                     /*%%%*/
07924                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07925                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07926                     /*%
07927                         $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
07928                     %*/
07929                     ;}
07930     break;
07931 
07932   case 297:
07933 
07934 /* Line 1464 of yacc.c  */
07935 #line 2782 "parse.y"
07936     {COND_PUSH(1);;}
07937     break;
07938 
07939   case 298:
07940 
07941 /* Line 1464 of yacc.c  */
07942 #line 2782 "parse.y"
07943     {COND_POP();;}
07944     break;
07945 
07946   case 299:
07947 
07948 /* Line 1464 of yacc.c  */
07949 #line 2785 "parse.y"
07950     {
07951                     /*%%%*/
07952                         (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07953                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07954                     /*%
07955                         $$ = dispatch2(while, $3, $6);
07956                     %*/
07957                     ;}
07958     break;
07959 
07960   case 300:
07961 
07962 /* Line 1464 of yacc.c  */
07963 #line 2793 "parse.y"
07964     {COND_PUSH(1);;}
07965     break;
07966 
07967   case 301:
07968 
07969 /* Line 1464 of yacc.c  */
07970 #line 2793 "parse.y"
07971     {COND_POP();;}
07972     break;
07973 
07974   case 302:
07975 
07976 /* Line 1464 of yacc.c  */
07977 #line 2796 "parse.y"
07978     {
07979                     /*%%%*/
07980                         (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07981                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07982                     /*%
07983                         $$ = dispatch2(until, $3, $6);
07984                     %*/
07985                     ;}
07986     break;
07987 
07988   case 303:
07989 
07990 /* Line 1464 of yacc.c  */
07991 #line 2807 "parse.y"
07992     {
07993                     /*%%%*/
07994                         (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
07995                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
07996                     /*%
07997                         $$ = dispatch2(case, $2, $4);
07998                     %*/
07999                     ;}
08000     break;
08001 
08002   case 304:
08003 
08004 /* Line 1464 of yacc.c  */
08005 #line 2816 "parse.y"
08006     {
08007                     /*%%%*/
08008                         (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08009                     /*%
08010                         $$ = dispatch2(case, Qnil, $3);
08011                     %*/
08012                     ;}
08013     break;
08014 
08015   case 305:
08016 
08017 /* Line 1464 of yacc.c  */
08018 #line 2824 "parse.y"
08019     {COND_PUSH(1);;}
08020     break;
08021 
08022   case 306:
08023 
08024 /* Line 1464 of yacc.c  */
08025 #line 2826 "parse.y"
08026     {COND_POP();;}
08027     break;
08028 
08029   case 307:
08030 
08031 /* Line 1464 of yacc.c  */
08032 #line 2829 "parse.y"
08033     {
08034                     /*%%%*/
08035                         /*
08036                          *  for a, b, c in e
08037                          *  #=>
08038                          *  e.each{|*x| a, b, c = x
08039                          *
08040                          *  for a in e
08041                          *  #=>
08042                          *  e.each{|x| a, = x}
08043                          */
08044                         ID id = internal_id();
08045                         ID *tbl = ALLOC_N(ID, 2);
08046                         NODE *m = NEW_ARGS_AUX(0, 0);
08047                         NODE *args, *scope;
08048 
08049                         if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08050                             /* if args.length == 1 && args[0].kind_of?(Array)
08051                              *   args = args[0]
08052                              * end
08053                              */
08054                             NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08055                             NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08056                             m->nd_next = block_append(
08057                                 NEW_IF(
08058                                     NEW_NODE(NODE_AND,
08059                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08060                                                       rb_intern("=="), one),
08061                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08062                                                       rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08063                                              0),
08064                                     NEW_DASGN_CURR(id,
08065                                                    NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08066                                     0),
08067                                 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08068 
08069                             args = new_args(m, 0, id, 0, 0);
08070                         }
08071                         else {
08072                             if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08073                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08074                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08075                                 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08076                                 m->nd_plen = 1;
08077                                 m->nd_next = (yyvsp[(2) - (9)].node);
08078                                 args = new_args(m, 0, 0, 0, 0);
08079                             }
08080                             else {
08081                                 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08082                                 args = new_args(m, 0, id, 0, 0);
08083                             }
08084                         }
08085                         scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08086                         tbl[0] = 1; tbl[1] = id;
08087                         (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08088                         fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08089                     /*%
08090                         $$ = dispatch3(for, $2, $5, $8);
08091                     %*/
08092                     ;}
08093     break;
08094 
08095   case 308:
08096 
08097 /* Line 1464 of yacc.c  */
08098 #line 2890 "parse.y"
08099     {
08100                         if (in_def || in_single)
08101                             yyerror("class definition in method body");
08102                         local_push(0);
08103                     /*%%%*/
08104                         (yyval.num) = ruby_sourceline;
08105                     /*%
08106                     %*/
08107                     ;}
08108     break;
08109 
08110   case 309:
08111 
08112 /* Line 1464 of yacc.c  */
08113 #line 2901 "parse.y"
08114     {
08115                     /*%%%*/
08116                         (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08117                         nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08118                     /*%
08119                         $$ = dispatch3(class, $2, $3, $5);
08120                     %*/
08121                         local_pop();
08122                     ;}
08123     break;
08124 
08125   case 310:
08126 
08127 /* Line 1464 of yacc.c  */
08128 #line 2911 "parse.y"
08129     {
08130                         (yyval.num) = in_def;
08131                         in_def = 0;
08132                     ;}
08133     break;
08134 
08135   case 311:
08136 
08137 /* Line 1464 of yacc.c  */
08138 #line 2916 "parse.y"
08139     {
08140                         (yyval.num) = in_single;
08141                         in_single = 0;
08142                         local_push(0);
08143                     ;}
08144     break;
08145 
08146   case 312:
08147 
08148 /* Line 1464 of yacc.c  */
08149 #line 2923 "parse.y"
08150     {
08151                     /*%%%*/
08152                         (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08153                         fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08154                     /*%
08155                         $$ = dispatch2(sclass, $3, $7);
08156                     %*/
08157                         local_pop();
08158                         in_def = (yyvsp[(4) - (8)].num);
08159                         in_single = (yyvsp[(6) - (8)].num);
08160                     ;}
08161     break;
08162 
08163   case 313:
08164 
08165 /* Line 1464 of yacc.c  */
08166 #line 2935 "parse.y"
08167     {
08168                         if (in_def || in_single)
08169                             yyerror("module definition in method body");
08170                         local_push(0);
08171                     /*%%%*/
08172                         (yyval.num) = ruby_sourceline;
08173                     /*%
08174                     %*/
08175                     ;}
08176     break;
08177 
08178   case 314:
08179 
08180 /* Line 1464 of yacc.c  */
08181 #line 2946 "parse.y"
08182     {
08183                     /*%%%*/
08184                         (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08185                         nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08186                     /*%
08187                         $$ = dispatch2(module, $2, $4);
08188                     %*/
08189                         local_pop();
08190                     ;}
08191     break;
08192 
08193   case 315:
08194 
08195 /* Line 1464 of yacc.c  */
08196 #line 2956 "parse.y"
08197     {
08198                         (yyval.id) = cur_mid;
08199                         cur_mid = (yyvsp[(2) - (2)].id);
08200                         in_def++;
08201                         local_push(0);
08202                     ;}
08203     break;
08204 
08205   case 316:
08206 
08207 /* Line 1464 of yacc.c  */
08208 #line 2965 "parse.y"
08209     {
08210                     /*%%%*/
08211                         NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08212                         reduce_nodes(&body);
08213                         (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08214                         nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08215                     /*%
08216                         $$ = dispatch3(def, $2, $4, $5);
08217                     %*/
08218                         local_pop();
08219                         in_def--;
08220                         cur_mid = (yyvsp[(3) - (6)].id);
08221                     ;}
08222     break;
08223 
08224   case 317:
08225 
08226 /* Line 1464 of yacc.c  */
08227 #line 2978 "parse.y"
08228     {lex_state = EXPR_FNAME;;}
08229     break;
08230 
08231   case 318:
08232 
08233 /* Line 1464 of yacc.c  */
08234 #line 2979 "parse.y"
08235     {
08236                         in_single++;
08237                         lex_state = EXPR_ENDFN; /* force for args */
08238                         local_push(0);
08239                     ;}
08240     break;
08241 
08242   case 319:
08243 
08244 /* Line 1464 of yacc.c  */
08245 #line 2987 "parse.y"
08246     {
08247                     /*%%%*/
08248                         NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08249                         reduce_nodes(&body);
08250                         (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08251                         nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08252                     /*%
08253                         $$ = dispatch5(defs, $2, $3, $5, $7, $8);
08254                     %*/
08255                         local_pop();
08256                         in_single--;
08257                     ;}
08258     break;
08259 
08260   case 320:
08261 
08262 /* Line 1464 of yacc.c  */
08263 #line 3000 "parse.y"
08264     {
08265                     /*%%%*/
08266                         (yyval.node) = NEW_BREAK(0);
08267                     /*%
08268                         $$ = dispatch1(break, arg_new());
08269                     %*/
08270                     ;}
08271     break;
08272 
08273   case 321:
08274 
08275 /* Line 1464 of yacc.c  */
08276 #line 3008 "parse.y"
08277     {
08278                     /*%%%*/
08279                         (yyval.node) = NEW_NEXT(0);
08280                     /*%
08281                         $$ = dispatch1(next, arg_new());
08282                     %*/
08283                     ;}
08284     break;
08285 
08286   case 322:
08287 
08288 /* Line 1464 of yacc.c  */
08289 #line 3016 "parse.y"
08290     {
08291                     /*%%%*/
08292                         (yyval.node) = NEW_REDO();
08293                     /*%
08294                         $$ = dispatch0(redo);
08295                     %*/
08296                     ;}
08297     break;
08298 
08299   case 323:
08300 
08301 /* Line 1464 of yacc.c  */
08302 #line 3024 "parse.y"
08303     {
08304                     /*%%%*/
08305                         (yyval.node) = NEW_RETRY();
08306                     /*%
08307                         $$ = dispatch0(retry);
08308                     %*/
08309                     ;}
08310     break;
08311 
08312   case 324:
08313 
08314 /* Line 1464 of yacc.c  */
08315 #line 3034 "parse.y"
08316     {
08317                     /*%%%*/
08318                         value_expr((yyvsp[(1) - (1)].node));
08319                         (yyval.node) = (yyvsp[(1) - (1)].node);
08320                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
08321                     /*%
08322                         $$ = $1;
08323                     %*/
08324                     ;}
08325     break;
08326 
08327   case 325:
08328 
08329 /* Line 1464 of yacc.c  */
08330 #line 3046 "parse.y"
08331     {
08332                         token_info_push("begin");
08333                     ;}
08334     break;
08335 
08336   case 326:
08337 
08338 /* Line 1464 of yacc.c  */
08339 #line 3052 "parse.y"
08340     {
08341                         token_info_push("if");
08342                     ;}
08343     break;
08344 
08345   case 327:
08346 
08347 /* Line 1464 of yacc.c  */
08348 #line 3058 "parse.y"
08349     {
08350                         token_info_push("unless");
08351                     ;}
08352     break;
08353 
08354   case 328:
08355 
08356 /* Line 1464 of yacc.c  */
08357 #line 3064 "parse.y"
08358     {
08359                         token_info_push("while");
08360                     ;}
08361     break;
08362 
08363   case 329:
08364 
08365 /* Line 1464 of yacc.c  */
08366 #line 3070 "parse.y"
08367     {
08368                         token_info_push("until");
08369                     ;}
08370     break;
08371 
08372   case 330:
08373 
08374 /* Line 1464 of yacc.c  */
08375 #line 3076 "parse.y"
08376     {
08377                         token_info_push("case");
08378                     ;}
08379     break;
08380 
08381   case 331:
08382 
08383 /* Line 1464 of yacc.c  */
08384 #line 3082 "parse.y"
08385     {
08386                         token_info_push("for");
08387                     ;}
08388     break;
08389 
08390   case 332:
08391 
08392 /* Line 1464 of yacc.c  */
08393 #line 3088 "parse.y"
08394     {
08395                         token_info_push("class");
08396                     ;}
08397     break;
08398 
08399   case 333:
08400 
08401 /* Line 1464 of yacc.c  */
08402 #line 3094 "parse.y"
08403     {
08404                         token_info_push("module");
08405                     ;}
08406     break;
08407 
08408   case 334:
08409 
08410 /* Line 1464 of yacc.c  */
08411 #line 3100 "parse.y"
08412     {
08413                         token_info_push("def");
08414                     /*%%%*/
08415                         (yyval.num) = ruby_sourceline;
08416                     /*%
08417                     %*/
08418                     ;}
08419     break;
08420 
08421   case 335:
08422 
08423 /* Line 1464 of yacc.c  */
08424 #line 3110 "parse.y"
08425     {
08426                         token_info_pop("end");
08427                     ;}
08428     break;
08429 
08430   case 342:
08431 
08432 /* Line 1464 of yacc.c  */
08433 #line 3140 "parse.y"
08434     {
08435                     /*%%%*/
08436                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08437                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08438                     /*%
08439                         $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
08440                     %*/
08441                     ;}
08442     break;
08443 
08444   case 344:
08445 
08446 /* Line 1464 of yacc.c  */
08447 #line 3152 "parse.y"
08448     {
08449                     /*%%%*/
08450                         (yyval.node) = (yyvsp[(2) - (2)].node);
08451                     /*%
08452                         $$ = dispatch1(else, $2);
08453                     %*/
08454                     ;}
08455     break;
08456 
08457   case 347:
08458 
08459 /* Line 1464 of yacc.c  */
08460 #line 3166 "parse.y"
08461     {
08462                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08463                     /*%%%*/
08464                     /*%
08465                         $$ = dispatch1(mlhs_paren, $$);
08466                     %*/
08467                     ;}
08468     break;
08469 
08470   case 348:
08471 
08472 /* Line 1464 of yacc.c  */
08473 #line 3174 "parse.y"
08474     {
08475                     /*%%%*/
08476                         (yyval.node) = (yyvsp[(2) - (3)].node);
08477                     /*%
08478                         $$ = dispatch1(mlhs_paren, $2);
08479                     %*/
08480                     ;}
08481     break;
08482 
08483   case 349:
08484 
08485 /* Line 1464 of yacc.c  */
08486 #line 3184 "parse.y"
08487     {
08488                     /*%%%*/
08489                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08490                     /*%
08491                         $$ = mlhs_add(mlhs_new(), $1);
08492                     %*/
08493                     ;}
08494     break;
08495 
08496   case 350:
08497 
08498 /* Line 1464 of yacc.c  */
08499 #line 3192 "parse.y"
08500     {
08501                     /*%%%*/
08502                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08503                     /*%
08504                         $$ = mlhs_add($1, $3);
08505                     %*/
08506                     ;}
08507     break;
08508 
08509   case 351:
08510 
08511 /* Line 1464 of yacc.c  */
08512 #line 3202 "parse.y"
08513     {
08514                     /*%%%*/
08515                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08516                     /*%
08517                         $$ = $1;
08518                     %*/
08519                     ;}
08520     break;
08521 
08522   case 352:
08523 
08524 /* Line 1464 of yacc.c  */
08525 #line 3210 "parse.y"
08526     {
08527                         (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08528                     /*%%%*/
08529                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08530                     /*%
08531                         $$ = mlhs_add_star($1, $$);
08532                     %*/
08533                     ;}
08534     break;
08535 
08536   case 353:
08537 
08538 /* Line 1464 of yacc.c  */
08539 #line 3219 "parse.y"
08540     {
08541                         (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08542                     /*%%%*/
08543                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08544                     /*%
08545                         $$ = mlhs_add_star($1, $$);
08546                     %*/
08547                     ;}
08548     break;
08549 
08550   case 354:
08551 
08552 /* Line 1464 of yacc.c  */
08553 #line 3228 "parse.y"
08554     {
08555                     /*%%%*/
08556                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08557                     /*%
08558                         $$ = mlhs_add_star($1, Qnil);
08559                     %*/
08560                     ;}
08561     break;
08562 
08563   case 355:
08564 
08565 /* Line 1464 of yacc.c  */
08566 #line 3236 "parse.y"
08567     {
08568                     /*%%%*/
08569                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08570                     /*%
08571                         $$ = mlhs_add_star($1, $5);
08572                     %*/
08573                     ;}
08574     break;
08575 
08576   case 356:
08577 
08578 /* Line 1464 of yacc.c  */
08579 #line 3244 "parse.y"
08580     {
08581                         (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08582                     /*%%%*/
08583                         (yyval.node) = NEW_MASGN(0, (yyval.node));
08584                     /*%
08585                         $$ = mlhs_add_star(mlhs_new(), $$);
08586                     %*/
08587                     ;}
08588     break;
08589 
08590   case 357:
08591 
08592 /* Line 1464 of yacc.c  */
08593 #line 3253 "parse.y"
08594     {
08595                         (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08596                     /*%%%*/
08597                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08598                     /*%
08599                       #if 0
08600                       TODO: Check me
08601                       #endif
08602                         $$ = mlhs_add_star($$, $4);
08603                     %*/
08604                     ;}
08605     break;
08606 
08607   case 358:
08608 
08609 /* Line 1464 of yacc.c  */
08610 #line 3265 "parse.y"
08611     {
08612                     /*%%%*/
08613                         (yyval.node) = NEW_MASGN(0, -1);
08614                     /*%
08615                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08616                     %*/
08617                     ;}
08618     break;
08619 
08620   case 359:
08621 
08622 /* Line 1464 of yacc.c  */
08623 #line 3273 "parse.y"
08624     {
08625                     /*%%%*/
08626                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08627                     /*%
08628                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08629                     %*/
08630                     ;}
08631     break;
08632 
08633   case 360:
08634 
08635 /* Line 1464 of yacc.c  */
08636 #line 3283 "parse.y"
08637     {
08638                     /*%%%*/
08639                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08640                     /*%
08641                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
08642                     %*/
08643                     ;}
08644     break;
08645 
08646   case 361:
08647 
08648 /* Line 1464 of yacc.c  */
08649 #line 3291 "parse.y"
08650     {
08651                     /*%%%*/
08652                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08653                     /*%
08654                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
08655                     %*/
08656                     ;}
08657     break;
08658 
08659   case 362:
08660 
08661 /* Line 1464 of yacc.c  */
08662 #line 3299 "parse.y"
08663     {
08664                     /*%%%*/
08665                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08666                     /*%
08667                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
08668                     %*/
08669                     ;}
08670     break;
08671 
08672   case 363:
08673 
08674 /* Line 1464 of yacc.c  */
08675 #line 3307 "parse.y"
08676     {
08677                     /*%%%*/
08678                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08679                     /*%
08680                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
08681                     %*/
08682                     ;}
08683     break;
08684 
08685   case 364:
08686 
08687 /* Line 1464 of yacc.c  */
08688 #line 3315 "parse.y"
08689     {
08690                     /*%%%*/
08691                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08692                     /*%
08693                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
08694                     %*/
08695                     ;}
08696     break;
08697 
08698   case 365:
08699 
08700 /* Line 1464 of yacc.c  */
08701 #line 3323 "parse.y"
08702     {
08703                     /*%%%*/
08704                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08705                     /*%
08706                         $$ = params_new($1, Qnil, Qnil, Qnil, Qnil);
08707                         dispatch1(excessed_comma, $$);
08708                     %*/
08709                     ;}
08710     break;
08711 
08712   case 366:
08713 
08714 /* Line 1464 of yacc.c  */
08715 #line 3332 "parse.y"
08716     {
08717                     /*%%%*/
08718                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08719                     /*%
08720                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
08721                     %*/
08722                     ;}
08723     break;
08724 
08725   case 367:
08726 
08727 /* Line 1464 of yacc.c  */
08728 #line 3340 "parse.y"
08729     {
08730                     /*%%%*/
08731                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08732                     /*%
08733                         $$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2));
08734                     %*/
08735                     ;}
08736     break;
08737 
08738   case 368:
08739 
08740 /* Line 1464 of yacc.c  */
08741 #line 3348 "parse.y"
08742     {
08743                     /*%%%*/
08744                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08745                     /*%
08746                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
08747                     %*/
08748                     ;}
08749     break;
08750 
08751   case 369:
08752 
08753 /* Line 1464 of yacc.c  */
08754 #line 3356 "parse.y"
08755     {
08756                     /*%%%*/
08757                         (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08758                     /*%
08759                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
08760                     %*/
08761                     ;}
08762     break;
08763 
08764   case 370:
08765 
08766 /* Line 1464 of yacc.c  */
08767 #line 3364 "parse.y"
08768     {
08769                     /*%%%*/
08770                         (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08771                     /*%
08772                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
08773                     %*/
08774                     ;}
08775     break;
08776 
08777   case 371:
08778 
08779 /* Line 1464 of yacc.c  */
08780 #line 3372 "parse.y"
08781     {
08782                     /*%%%*/
08783                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08784                     /*%
08785                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
08786                     %*/
08787                     ;}
08788     break;
08789 
08790   case 372:
08791 
08792 /* Line 1464 of yacc.c  */
08793 #line 3380 "parse.y"
08794     {
08795                     /*%%%*/
08796                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08797                     /*%
08798                         $$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2));
08799                     %*/
08800                     ;}
08801     break;
08802 
08803   case 373:
08804 
08805 /* Line 1464 of yacc.c  */
08806 #line 3388 "parse.y"
08807     {
08808                     /*%%%*/
08809                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08810                     /*%
08811                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
08812                     %*/
08813                     ;}
08814     break;
08815 
08816   case 374:
08817 
08818 /* Line 1464 of yacc.c  */
08819 #line 3396 "parse.y"
08820     {
08821                     /*%%%*/
08822                         (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08823                     /*%
08824                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
08825                     %*/
08826                     ;}
08827     break;
08828 
08829   case 376:
08830 
08831 /* Line 1464 of yacc.c  */
08832 #line 3407 "parse.y"
08833     {
08834                         command_start = TRUE;
08835                     ;}
08836     break;
08837 
08838   case 377:
08839 
08840 /* Line 1464 of yacc.c  */
08841 #line 3413 "parse.y"
08842     {
08843                     /*%%%*/
08844                         (yyval.node) = 0;
08845                     /*%
08846                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08847                                           escape_Qundef($2));
08848                     %*/
08849                     ;}
08850     break;
08851 
08852   case 378:
08853 
08854 /* Line 1464 of yacc.c  */
08855 #line 3422 "parse.y"
08856     {
08857                     /*%%%*/
08858                         (yyval.node) = 0;
08859                     /*%
08860                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08861                                           Qnil);
08862                     %*/
08863                     ;}
08864     break;
08865 
08866   case 379:
08867 
08868 /* Line 1464 of yacc.c  */
08869 #line 3431 "parse.y"
08870     {
08871                     /*%%%*/
08872                         (yyval.node) = (yyvsp[(2) - (4)].node);
08873                     /*%
08874                         $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
08875                     %*/
08876                     ;}
08877     break;
08878 
08879   case 381:
08880 
08881 /* Line 1464 of yacc.c  */
08882 #line 3443 "parse.y"
08883     {
08884                     /*%%%*/
08885                         (yyval.node) = 0;
08886                     /*%
08887                         $$ = $2;
08888                     %*/
08889                     ;}
08890     break;
08891 
08892   case 384:
08893 
08894 /* Line 1464 of yacc.c  */
08895 #line 3469 "parse.y"
08896     {
08897                         new_bv(get_id((yyvsp[(1) - (1)].id)));
08898                     /*%%%*/
08899                     /*%
08900                         $$ = get_value($1);
08901                     %*/
08902                     ;}
08903     break;
08904 
08905   case 385:
08906 
08907 /* Line 1464 of yacc.c  */
08908 #line 3477 "parse.y"
08909     {
08910                         (yyval.node) = 0;
08911                     ;}
08912     break;
08913 
08914   case 386:
08915 
08916 /* Line 1464 of yacc.c  */
08917 #line 3482 "parse.y"
08918     {
08919                         (yyval.vars) = dyna_push();
08920                     ;}
08921     break;
08922 
08923   case 387:
08924 
08925 /* Line 1464 of yacc.c  */
08926 #line 3485 "parse.y"
08927     {
08928                         (yyval.num) = lpar_beg;
08929                         lpar_beg = ++paren_nest;
08930                     ;}
08931     break;
08932 
08933   case 388:
08934 
08935 /* Line 1464 of yacc.c  */
08936 #line 3491 "parse.y"
08937     {
08938                         lpar_beg = (yyvsp[(2) - (4)].num);
08939                     /*%%%*/
08940                         (yyval.node) = (yyvsp[(3) - (4)].node);
08941                         (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
08942                     /*%
08943                         $$ = dispatch2(lambda, $3, $4);
08944                     %*/
08945                         dyna_pop((yyvsp[(1) - (4)].vars));
08946                     ;}
08947     break;
08948 
08949   case 389:
08950 
08951 /* Line 1464 of yacc.c  */
08952 #line 3504 "parse.y"
08953     {
08954                     /*%%%*/
08955                         (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
08956                     /*%
08957                         $$ = dispatch1(paren, $2);
08958                     %*/
08959                     ;}
08960     break;
08961 
08962   case 390:
08963 
08964 /* Line 1464 of yacc.c  */
08965 #line 3512 "parse.y"
08966     {
08967                     /*%%%*/
08968                         (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
08969                     /*%
08970                         $$ = $1;
08971                     %*/
08972                     ;}
08973     break;
08974 
08975   case 391:
08976 
08977 /* Line 1464 of yacc.c  */
08978 #line 3522 "parse.y"
08979     {
08980                         (yyval.node) = (yyvsp[(2) - (3)].node);
08981                     ;}
08982     break;
08983 
08984   case 392:
08985 
08986 /* Line 1464 of yacc.c  */
08987 #line 3526 "parse.y"
08988     {
08989                         (yyval.node) = (yyvsp[(2) - (3)].node);
08990                     ;}
08991     break;
08992 
08993   case 393:
08994 
08995 /* Line 1464 of yacc.c  */
08996 #line 3532 "parse.y"
08997     {
08998                         (yyvsp[(1) - (1)].vars) = dyna_push();
08999                     /*%%%*/
09000                         (yyval.num) = ruby_sourceline;
09001                     /*% %*/
09002                     ;}
09003     break;
09004 
09005   case 394:
09006 
09007 /* Line 1464 of yacc.c  */
09008 #line 3541 "parse.y"
09009     {
09010                     /*%%%*/
09011                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09012                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09013                     /*%
09014                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09015                     %*/
09016                         dyna_pop((yyvsp[(1) - (5)].vars));
09017                     ;}
09018     break;
09019 
09020   case 395:
09021 
09022 /* Line 1464 of yacc.c  */
09023 #line 3553 "parse.y"
09024     {
09025                     /*%%%*/
09026                         if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09027                             compile_error(PARSER_ARG "block given to yield");
09028                         }
09029                         else {
09030                             block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09031                         }
09032                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09033                         (yyval.node) = (yyvsp[(2) - (2)].node);
09034                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09035                     /*%
09036                         $$ = method_add_block($1, $2);
09037                     %*/
09038                     ;}
09039     break;
09040 
09041   case 396:
09042 
09043 /* Line 1464 of yacc.c  */
09044 #line 3569 "parse.y"
09045     {
09046                     /*%%%*/
09047                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09048                     /*%
09049                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09050                         $$ = method_optarg($$, $4);
09051                     %*/
09052                     ;}
09053     break;
09054 
09055   case 397:
09056 
09057 /* Line 1464 of yacc.c  */
09058 #line 3578 "parse.y"
09059     {
09060                     /*%%%*/
09061                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09062                     /*%
09063                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09064                         $$ = method_optarg($$, $4);
09065                     %*/
09066                     ;}
09067     break;
09068 
09069   case 398:
09070 
09071 /* Line 1464 of yacc.c  */
09072 #line 3589 "parse.y"
09073     {
09074                     /*%%%*/
09075                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09076                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09077                     /*%
09078                         $$ = method_arg(dispatch1(fcall, $1), $2);
09079                     %*/
09080                     ;}
09081     break;
09082 
09083   case 399:
09084 
09085 /* Line 1464 of yacc.c  */
09086 #line 3598 "parse.y"
09087     {
09088                     /*%%%*/
09089                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09090                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09091                     /*%
09092                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09093                         $$ = method_optarg($$, $4);
09094                     %*/
09095                     ;}
09096     break;
09097 
09098   case 400:
09099 
09100 /* Line 1464 of yacc.c  */
09101 #line 3608 "parse.y"
09102     {
09103                     /*%%%*/
09104                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09105                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09106                     /*%
09107                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09108                         $$ = method_optarg($$, $4);
09109                     %*/
09110                     ;}
09111     break;
09112 
09113   case 401:
09114 
09115 /* Line 1464 of yacc.c  */
09116 #line 3618 "parse.y"
09117     {
09118                     /*%%%*/
09119                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09120                     /*%
09121                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09122                     %*/
09123                     ;}
09124     break;
09125 
09126   case 402:
09127 
09128 /* Line 1464 of yacc.c  */
09129 #line 3626 "parse.y"
09130     {
09131                     /*%%%*/
09132                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09133                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09134                     /*%
09135                         $$ = dispatch3(call, $1, ripper_id2sym('.'),
09136                                        ripper_intern("call"));
09137                         $$ = method_optarg($$, $3);
09138                     %*/
09139                     ;}
09140     break;
09141 
09142   case 403:
09143 
09144 /* Line 1464 of yacc.c  */
09145 #line 3637 "parse.y"
09146     {
09147                     /*%%%*/
09148                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09149                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09150                     /*%
09151                         $$ = dispatch3(call, $1, ripper_intern("::"),
09152                                        ripper_intern("call"));
09153                         $$ = method_optarg($$, $3);
09154                     %*/
09155                     ;}
09156     break;
09157 
09158   case 404:
09159 
09160 /* Line 1464 of yacc.c  */
09161 #line 3648 "parse.y"
09162     {
09163                     /*%%%*/
09164                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09165                     /*%
09166                         $$ = dispatch1(super, $2);
09167                     %*/
09168                     ;}
09169     break;
09170 
09171   case 405:
09172 
09173 /* Line 1464 of yacc.c  */
09174 #line 3656 "parse.y"
09175     {
09176                     /*%%%*/
09177                         (yyval.node) = NEW_ZSUPER();
09178                     /*%
09179                         $$ = dispatch0(zsuper);
09180                     %*/
09181                     ;}
09182     break;
09183 
09184   case 406:
09185 
09186 /* Line 1464 of yacc.c  */
09187 #line 3664 "parse.y"
09188     {
09189                     /*%%%*/
09190                         if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09191                             (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09192                         else
09193                             (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09194                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09195                     /*%
09196                         $$ = dispatch2(aref, $1, escape_Qundef($3));
09197                     %*/
09198                     ;}
09199     break;
09200 
09201   case 407:
09202 
09203 /* Line 1464 of yacc.c  */
09204 #line 3678 "parse.y"
09205     {
09206                         (yyvsp[(1) - (1)].vars) = dyna_push();
09207                     /*%%%*/
09208                         (yyval.num) = ruby_sourceline;
09209                     /*%
09210                     %*/
09211                     ;}
09212     break;
09213 
09214   case 408:
09215 
09216 /* Line 1464 of yacc.c  */
09217 #line 3687 "parse.y"
09218     {
09219                     /*%%%*/
09220                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09221                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09222                     /*%
09223                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
09224                     %*/
09225                         dyna_pop((yyvsp[(1) - (5)].vars));
09226                     ;}
09227     break;
09228 
09229   case 409:
09230 
09231 /* Line 1464 of yacc.c  */
09232 #line 3697 "parse.y"
09233     {
09234                         (yyvsp[(1) - (1)].vars) = dyna_push();
09235                     /*%%%*/
09236                         (yyval.num) = ruby_sourceline;
09237                     /*%
09238                     %*/
09239                     ;}
09240     break;
09241 
09242   case 410:
09243 
09244 /* Line 1464 of yacc.c  */
09245 #line 3706 "parse.y"
09246     {
09247                     /*%%%*/
09248                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09249                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09250                     /*%
09251                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09252                     %*/
09253                         dyna_pop((yyvsp[(1) - (5)].vars));
09254                     ;}
09255     break;
09256 
09257   case 411:
09258 
09259 /* Line 1464 of yacc.c  */
09260 #line 3720 "parse.y"
09261     {
09262                     /*%%%*/
09263                         (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09264                     /*%
09265                         $$ = dispatch3(when, $2, $4, escape_Qundef($5));
09266                     %*/
09267                     ;}
09268     break;
09269 
09270   case 414:
09271 
09272 /* Line 1464 of yacc.c  */
09273 #line 3736 "parse.y"
09274     {
09275                     /*%%%*/
09276                         if ((yyvsp[(3) - (6)].node)) {
09277                             (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09278                             (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09279                         }
09280                         (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09281                         fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09282                     /*%
09283                         $$ = dispatch4(rescue,
09284                                        escape_Qundef($2),
09285                                        escape_Qundef($3),
09286                                        escape_Qundef($5),
09287                                        escape_Qundef($6));
09288                     %*/
09289                     ;}
09290     break;
09291 
09292   case 416:
09293 
09294 /* Line 1464 of yacc.c  */
09295 #line 3756 "parse.y"
09296     {
09297                     /*%%%*/
09298                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09299                     /*%
09300                         $$ = rb_ary_new3(1, $1);
09301                     %*/
09302                     ;}
09303     break;
09304 
09305   case 417:
09306 
09307 /* Line 1464 of yacc.c  */
09308 #line 3764 "parse.y"
09309     {
09310                     /*%%%*/
09311                         if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09312                     /*%
09313                         $$ = $1;
09314                     %*/
09315                     ;}
09316     break;
09317 
09318   case 419:
09319 
09320 /* Line 1464 of yacc.c  */
09321 #line 3775 "parse.y"
09322     {
09323                         (yyval.node) = (yyvsp[(2) - (2)].node);
09324                     ;}
09325     break;
09326 
09327   case 421:
09328 
09329 /* Line 1464 of yacc.c  */
09330 #line 3782 "parse.y"
09331     {
09332                     /*%%%*/
09333                         (yyval.node) = (yyvsp[(2) - (2)].node);
09334                     /*%
09335                         $$ = dispatch1(ensure, $2);
09336                     %*/
09337                     ;}
09338     break;
09339 
09340   case 424:
09341 
09342 /* Line 1464 of yacc.c  */
09343 #line 3794 "parse.y"
09344     {
09345                     /*%%%*/
09346                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09347                     /*%
09348                         $$ = dispatch1(symbol_literal, $1);
09349                     %*/
09350                     ;}
09351     break;
09352 
09353   case 426:
09354 
09355 /* Line 1464 of yacc.c  */
09356 #line 3805 "parse.y"
09357     {
09358                     /*%%%*/
09359                         NODE *node = (yyvsp[(1) - (1)].node);
09360                         if (!node) {
09361                             node = NEW_STR(STR_NEW0());
09362                         }
09363                         else {
09364                             node = evstr2dstr(node);
09365                         }
09366                         (yyval.node) = node;
09367                     /*%
09368                         $$ = $1;
09369                     %*/
09370                     ;}
09371     break;
09372 
09373   case 429:
09374 
09375 /* Line 1464 of yacc.c  */
09376 #line 3824 "parse.y"
09377     {
09378                     /*%%%*/
09379                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09380                     /*%
09381                         $$ = dispatch2(string_concat, $1, $2);
09382                     %*/
09383                     ;}
09384     break;
09385 
09386   case 430:
09387 
09388 /* Line 1464 of yacc.c  */
09389 #line 3834 "parse.y"
09390     {
09391                     /*%%%*/
09392                         (yyval.node) = (yyvsp[(2) - (3)].node);
09393                     /*%
09394                         $$ = dispatch1(string_literal, $2);
09395                     %*/
09396                     ;}
09397     break;
09398 
09399   case 431:
09400 
09401 /* Line 1464 of yacc.c  */
09402 #line 3844 "parse.y"
09403     {
09404                     /*%%%*/
09405                         NODE *node = (yyvsp[(2) - (3)].node);
09406                         if (!node) {
09407                             node = NEW_XSTR(STR_NEW0());
09408                         }
09409                         else {
09410                             switch (nd_type(node)) {
09411                               case NODE_STR:
09412                                 nd_set_type(node, NODE_XSTR);
09413                                 break;
09414                               case NODE_DSTR:
09415                                 nd_set_type(node, NODE_DXSTR);
09416                                 break;
09417                               default:
09418                                 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09419                                 break;
09420                             }
09421                         }
09422                         (yyval.node) = node;
09423                     /*%
09424                         $$ = dispatch1(xstring_literal, $2);
09425                     %*/
09426                     ;}
09427     break;
09428 
09429   case 432:
09430 
09431 /* Line 1464 of yacc.c  */
09432 #line 3871 "parse.y"
09433     {
09434                     /*%%%*/
09435                         int options = (yyvsp[(3) - (3)].num);
09436                         NODE *node = (yyvsp[(2) - (3)].node);
09437                         NODE *list, *prev;
09438                         if (!node) {
09439                             node = NEW_LIT(reg_compile(STR_NEW0(), options));
09440                         }
09441                         else switch (nd_type(node)) {
09442                           case NODE_STR:
09443                             {
09444                                 VALUE src = node->nd_lit;
09445                                 nd_set_type(node, NODE_LIT);
09446                                 node->nd_lit = reg_compile(src, options);
09447                             }
09448                             break;
09449                           default:
09450                             node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09451                           case NODE_DSTR:
09452                             if (options & RE_OPTION_ONCE) {
09453                                 nd_set_type(node, NODE_DREGX_ONCE);
09454                             }
09455                             else {
09456                                 nd_set_type(node, NODE_DREGX);
09457                             }
09458                             node->nd_cflag = options & RE_OPTION_MASK;
09459                             if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09460                             for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09461                                 if (nd_type(list->nd_head) == NODE_STR) {
09462                                     VALUE tail = list->nd_head->nd_lit;
09463                                     if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09464                                         VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09465                                         if (!literal_concat0(parser, lit, tail)) {
09466                                             node = 0;
09467                                             break;
09468                                         }
09469                                         rb_str_resize(tail, 0);
09470                                         prev->nd_next = list->nd_next;
09471                                         rb_gc_force_recycle((VALUE)list->nd_head);
09472                                         rb_gc_force_recycle((VALUE)list);
09473                                         list = prev;
09474                                     }
09475                                     else {
09476                                         prev = list;
09477                                     }
09478                                 }
09479                                 else {
09480                                     prev = 0;
09481                                 }
09482                             }
09483                             if (!node->nd_next) {
09484                                 VALUE src = node->nd_lit;
09485                                 nd_set_type(node, NODE_LIT);
09486                                 node->nd_lit = reg_compile(src, options);
09487                             }
09488                             break;
09489                         }
09490                         (yyval.node) = node;
09491                     /*%
09492                         $$ = dispatch2(regexp_literal, $2, $3);
09493                     %*/
09494                     ;}
09495     break;
09496 
09497   case 433:
09498 
09499 /* Line 1464 of yacc.c  */
09500 #line 3936 "parse.y"
09501     {
09502                     /*%%%*/
09503                         (yyval.node) = NEW_ZARRAY();
09504                     /*%
09505                         $$ = dispatch0(words_new);
09506                         $$ = dispatch1(array, $$);
09507                     %*/
09508                     ;}
09509     break;
09510 
09511   case 434:
09512 
09513 /* Line 1464 of yacc.c  */
09514 #line 3945 "parse.y"
09515     {
09516                     /*%%%*/
09517                         (yyval.node) = (yyvsp[(2) - (3)].node);
09518                     /*%
09519                         $$ = dispatch1(array, $2);
09520                     %*/
09521                     ;}
09522     break;
09523 
09524   case 435:
09525 
09526 /* Line 1464 of yacc.c  */
09527 #line 3955 "parse.y"
09528     {
09529                     /*%%%*/
09530                         (yyval.node) = 0;
09531                     /*%
09532                         $$ = dispatch0(words_new);
09533                     %*/
09534                     ;}
09535     break;
09536 
09537   case 436:
09538 
09539 /* Line 1464 of yacc.c  */
09540 #line 3963 "parse.y"
09541     {
09542                     /*%%%*/
09543                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09544                     /*%
09545                         $$ = dispatch2(words_add, $1, $2);
09546                     %*/
09547                     ;}
09548     break;
09549 
09550   case 438:
09551 
09552 /* Line 1464 of yacc.c  */
09553 #line 3981 "parse.y"
09554     {
09555                     /*%%%*/
09556                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09557                     /*%
09558                         $$ = dispatch2(word_add, $1, $2);
09559                     %*/
09560                     ;}
09561     break;
09562 
09563   case 439:
09564 
09565 /* Line 1464 of yacc.c  */
09566 #line 3991 "parse.y"
09567     {
09568                     /*%%%*/
09569                         (yyval.node) = NEW_ZARRAY();
09570                     /*%
09571                         $$ = dispatch0(qwords_new);
09572                         $$ = dispatch1(array, $$);
09573                     %*/
09574                     ;}
09575     break;
09576 
09577   case 440:
09578 
09579 /* Line 1464 of yacc.c  */
09580 #line 4000 "parse.y"
09581     {
09582                     /*%%%*/
09583                         (yyval.node) = (yyvsp[(2) - (3)].node);
09584                     /*%
09585                         $$ = dispatch1(array, $2);
09586                     %*/
09587                     ;}
09588     break;
09589 
09590   case 441:
09591 
09592 /* Line 1464 of yacc.c  */
09593 #line 4010 "parse.y"
09594     {
09595                     /*%%%*/
09596                         (yyval.node) = 0;
09597                     /*%
09598                         $$ = dispatch0(qwords_new);
09599                     %*/
09600                     ;}
09601     break;
09602 
09603   case 442:
09604 
09605 /* Line 1464 of yacc.c  */
09606 #line 4018 "parse.y"
09607     {
09608                     /*%%%*/
09609                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09610                     /*%
09611                         $$ = dispatch2(qwords_add, $1, $2);
09612                     %*/
09613                     ;}
09614     break;
09615 
09616   case 443:
09617 
09618 /* Line 1464 of yacc.c  */
09619 #line 4028 "parse.y"
09620     {
09621                     /*%%%*/
09622                         (yyval.node) = 0;
09623                     /*%
09624                         $$ = dispatch0(string_content);
09625                     %*/
09626                     ;}
09627     break;
09628 
09629   case 444:
09630 
09631 /* Line 1464 of yacc.c  */
09632 #line 4036 "parse.y"
09633     {
09634                     /*%%%*/
09635                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09636                     /*%
09637                         $$ = dispatch2(string_add, $1, $2);
09638                     %*/
09639                     ;}
09640     break;
09641 
09642   case 445:
09643 
09644 /* Line 1464 of yacc.c  */
09645 #line 4046 "parse.y"
09646     {
09647                     /*%%%*/
09648                         (yyval.node) = 0;
09649                     /*%
09650                         $$ = dispatch0(xstring_new);
09651                     %*/
09652                     ;}
09653     break;
09654 
09655   case 446:
09656 
09657 /* Line 1464 of yacc.c  */
09658 #line 4054 "parse.y"
09659     {
09660                     /*%%%*/
09661                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09662                     /*%
09663                         $$ = dispatch2(xstring_add, $1, $2);
09664                     %*/
09665                     ;}
09666     break;
09667 
09668   case 447:
09669 
09670 /* Line 1464 of yacc.c  */
09671 #line 4064 "parse.y"
09672     {
09673                     /*%%%*/
09674                         (yyval.node) = 0;
09675                     /*%
09676                         $$ = dispatch0(regexp_new);
09677                     %*/
09678                     ;}
09679     break;
09680 
09681   case 448:
09682 
09683 /* Line 1464 of yacc.c  */
09684 #line 4072 "parse.y"
09685     {
09686                     /*%%%*/
09687                         NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09688                         if (!head) {
09689                             (yyval.node) = tail;
09690                         }
09691                         else if (!tail) {
09692                             (yyval.node) = head;
09693                         }
09694                         else {
09695                             switch (nd_type(head)) {
09696                               case NODE_STR:
09697                                 nd_set_type(head, NODE_DSTR);
09698                                 break;
09699                               case NODE_DSTR:
09700                                 break;
09701                               default:
09702                                 head = list_append(NEW_DSTR(Qnil), head);
09703                                 break;
09704                             }
09705                             (yyval.node) = list_append(head, tail);
09706                         }
09707                     /*%
09708                         $$ = dispatch2(regexp_add, $1, $2);
09709                     %*/
09710                     ;}
09711     break;
09712 
09713   case 450:
09714 
09715 /* Line 1464 of yacc.c  */
09716 #line 4102 "parse.y"
09717     {
09718                         (yyval.node) = lex_strterm;
09719                         lex_strterm = 0;
09720                         lex_state = EXPR_BEG;
09721                     ;}
09722     break;
09723 
09724   case 451:
09725 
09726 /* Line 1464 of yacc.c  */
09727 #line 4108 "parse.y"
09728     {
09729                     /*%%%*/
09730                         lex_strterm = (yyvsp[(2) - (3)].node);
09731                         (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09732                     /*%
09733                         lex_strterm = $<node>2;
09734                         $$ = dispatch1(string_dvar, $3);
09735                     %*/
09736                     ;}
09737     break;
09738 
09739   case 452:
09740 
09741 /* Line 1464 of yacc.c  */
09742 #line 4118 "parse.y"
09743     {
09744                         (yyvsp[(1) - (1)].val) = cond_stack;
09745                         (yyval.val) = cmdarg_stack;
09746                         cond_stack = 0;
09747                         cmdarg_stack = 0;
09748                     ;}
09749     break;
09750 
09751   case 453:
09752 
09753 /* Line 1464 of yacc.c  */
09754 #line 4124 "parse.y"
09755     {
09756                         (yyval.node) = lex_strterm;
09757                         lex_strterm = 0;
09758                         lex_state = EXPR_BEG;
09759                     ;}
09760     break;
09761 
09762   case 454:
09763 
09764 /* Line 1464 of yacc.c  */
09765 #line 4130 "parse.y"
09766     {
09767                         cond_stack = (yyvsp[(1) - (5)].val);
09768                         cmdarg_stack = (yyvsp[(2) - (5)].val);
09769                         lex_strterm = (yyvsp[(3) - (5)].node);
09770                     /*%%%*/
09771                         if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09772                         (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09773                     /*%
09774                         $$ = dispatch1(string_embexpr, $4);
09775                     %*/
09776                     ;}
09777     break;
09778 
09779   case 455:
09780 
09781 /* Line 1464 of yacc.c  */
09782 #line 4144 "parse.y"
09783     {
09784                     /*%%%*/
09785                         (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09786                     /*%
09787                         $$ = dispatch1(var_ref, $1);
09788                     %*/
09789                     ;}
09790     break;
09791 
09792   case 456:
09793 
09794 /* Line 1464 of yacc.c  */
09795 #line 4152 "parse.y"
09796     {
09797                     /*%%%*/
09798                         (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09799                     /*%
09800                         $$ = dispatch1(var_ref, $1);
09801                     %*/
09802                     ;}
09803     break;
09804 
09805   case 457:
09806 
09807 /* Line 1464 of yacc.c  */
09808 #line 4160 "parse.y"
09809     {
09810                     /*%%%*/
09811                         (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09812                     /*%
09813                         $$ = dispatch1(var_ref, $1);
09814                     %*/
09815                     ;}
09816     break;
09817 
09818   case 459:
09819 
09820 /* Line 1464 of yacc.c  */
09821 #line 4171 "parse.y"
09822     {
09823                         lex_state = EXPR_END;
09824                     /*%%%*/
09825                         (yyval.id) = (yyvsp[(2) - (2)].id);
09826                     /*%
09827                         $$ = dispatch1(symbol, $2);
09828                     %*/
09829                     ;}
09830     break;
09831 
09832   case 464:
09833 
09834 /* Line 1464 of yacc.c  */
09835 #line 4188 "parse.y"
09836     {
09837                         lex_state = EXPR_END;
09838                     /*%%%*/
09839                         if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
09840                             (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
09841                         }
09842                         else {
09843                             VALUE lit;
09844 
09845                             switch (nd_type((yyval.node))) {
09846                               case NODE_DSTR:
09847                                 nd_set_type((yyval.node), NODE_DSYM);
09848                                 break;
09849                               case NODE_STR:
09850                                 lit = (yyval.node)->nd_lit;
09851                                 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
09852                                 nd_set_type((yyval.node), NODE_LIT);
09853                                 break;
09854                               default:
09855                                 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
09856                                 break;
09857                             }
09858                         }
09859                     /*%
09860                         $$ = dispatch1(dyna_symbol, $2);
09861                     %*/
09862                     ;}
09863     break;
09864 
09865   case 467:
09866 
09867 /* Line 1464 of yacc.c  */
09868 #line 4220 "parse.y"
09869     {
09870                     /*%%%*/
09871                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09872                     /*%
09873                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
09874                     %*/
09875                     ;}
09876     break;
09877 
09878   case 468:
09879 
09880 /* Line 1464 of yacc.c  */
09881 #line 4228 "parse.y"
09882     {
09883                     /*%%%*/
09884                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09885                     /*%
09886                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
09887                     %*/
09888                     ;}
09889     break;
09890 
09891   case 474:
09892 
09893 /* Line 1464 of yacc.c  */
09894 #line 4242 "parse.y"
09895     {ifndef_ripper((yyval.id) = keyword_nil);;}
09896     break;
09897 
09898   case 475:
09899 
09900 /* Line 1464 of yacc.c  */
09901 #line 4243 "parse.y"
09902     {ifndef_ripper((yyval.id) = keyword_self);;}
09903     break;
09904 
09905   case 476:
09906 
09907 /* Line 1464 of yacc.c  */
09908 #line 4244 "parse.y"
09909     {ifndef_ripper((yyval.id) = keyword_true);;}
09910     break;
09911 
09912   case 477:
09913 
09914 /* Line 1464 of yacc.c  */
09915 #line 4245 "parse.y"
09916     {ifndef_ripper((yyval.id) = keyword_false);;}
09917     break;
09918 
09919   case 478:
09920 
09921 /* Line 1464 of yacc.c  */
09922 #line 4246 "parse.y"
09923     {ifndef_ripper((yyval.id) = keyword__FILE__);;}
09924     break;
09925 
09926   case 479:
09927 
09928 /* Line 1464 of yacc.c  */
09929 #line 4247 "parse.y"
09930     {ifndef_ripper((yyval.id) = keyword__LINE__);;}
09931     break;
09932 
09933   case 480:
09934 
09935 /* Line 1464 of yacc.c  */
09936 #line 4248 "parse.y"
09937     {ifndef_ripper((yyval.id) = keyword__ENCODING__);;}
09938     break;
09939 
09940   case 481:
09941 
09942 /* Line 1464 of yacc.c  */
09943 #line 4252 "parse.y"
09944     {
09945                     /*%%%*/
09946                         if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
09947                     /*%
09948                         $$ = dispatch1(var_ref, $1);
09949                     %*/
09950                     ;}
09951     break;
09952 
09953   case 482:
09954 
09955 /* Line 1464 of yacc.c  */
09956 #line 4262 "parse.y"
09957     {
09958                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
09959                     /*%%%*/
09960                     /*%
09961                         $$ = dispatch1(var_field, $$);
09962                     %*/
09963                     ;}
09964     break;
09965 
09966   case 485:
09967 
09968 /* Line 1464 of yacc.c  */
09969 #line 4276 "parse.y"
09970     {
09971                     /*%%%*/
09972                         (yyval.node) = 0;
09973                     /*%
09974                         $$ = Qnil;
09975                     %*/
09976                     ;}
09977     break;
09978 
09979   case 486:
09980 
09981 /* Line 1464 of yacc.c  */
09982 #line 4284 "parse.y"
09983     {
09984                         lex_state = EXPR_BEG;
09985                     ;}
09986     break;
09987 
09988   case 487:
09989 
09990 /* Line 1464 of yacc.c  */
09991 #line 4288 "parse.y"
09992     {
09993                         (yyval.node) = (yyvsp[(3) - (4)].node);
09994                     ;}
09995     break;
09996 
09997   case 488:
09998 
09999 /* Line 1464 of yacc.c  */
10000 #line 4292 "parse.y"
10001     {
10002                     /*%%%*/
10003                         yyerrok;
10004                         (yyval.node) = 0;
10005                     /*%
10006                         yyerrok;
10007                         $$ = Qnil;
10008                     %*/
10009                     ;}
10010     break;
10011 
10012   case 489:
10013 
10014 /* Line 1464 of yacc.c  */
10015 #line 4304 "parse.y"
10016     {
10017                     /*%%%*/
10018                         (yyval.node) = (yyvsp[(2) - (3)].node);
10019                     /*%
10020                         $$ = dispatch1(paren, $2);
10021                     %*/
10022                         lex_state = EXPR_BEG;
10023                         command_start = TRUE;
10024                     ;}
10025     break;
10026 
10027   case 490:
10028 
10029 /* Line 1464 of yacc.c  */
10030 #line 4314 "parse.y"
10031     {
10032                         (yyval.node) = (yyvsp[(1) - (2)].node);
10033                     ;}
10034     break;
10035 
10036   case 491:
10037 
10038 /* Line 1464 of yacc.c  */
10039 #line 4320 "parse.y"
10040     {
10041                     /*%%%*/
10042                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10043                     /*%
10044                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
10045                     %*/
10046                     ;}
10047     break;
10048 
10049   case 492:
10050 
10051 /* Line 1464 of yacc.c  */
10052 #line 4328 "parse.y"
10053     {
10054                     /*%%%*/
10055                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10056                     /*%
10057                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
10058                     %*/
10059                     ;}
10060     break;
10061 
10062   case 493:
10063 
10064 /* Line 1464 of yacc.c  */
10065 #line 4336 "parse.y"
10066     {
10067                     /*%%%*/
10068                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10069                     /*%
10070                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
10071                     %*/
10072                     ;}
10073     break;
10074 
10075   case 494:
10076 
10077 /* Line 1464 of yacc.c  */
10078 #line 4344 "parse.y"
10079     {
10080                     /*%%%*/
10081                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10082                     /*%
10083                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
10084                     %*/
10085                     ;}
10086     break;
10087 
10088   case 495:
10089 
10090 /* Line 1464 of yacc.c  */
10091 #line 4352 "parse.y"
10092     {
10093                     /*%%%*/
10094                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10095                     /*%
10096                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
10097                     %*/
10098                     ;}
10099     break;
10100 
10101   case 496:
10102 
10103 /* Line 1464 of yacc.c  */
10104 #line 4360 "parse.y"
10105     {
10106                     /*%%%*/
10107                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10108                     /*%
10109                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
10110                     %*/
10111                     ;}
10112     break;
10113 
10114   case 497:
10115 
10116 /* Line 1464 of yacc.c  */
10117 #line 4368 "parse.y"
10118     {
10119                     /*%%%*/
10120                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10121                     /*%
10122                         $$ = params_new($1, Qnil, Qnil, Qnil,escape_Qundef($2));
10123                     %*/
10124                     ;}
10125     break;
10126 
10127   case 498:
10128 
10129 /* Line 1464 of yacc.c  */
10130 #line 4376 "parse.y"
10131     {
10132                     /*%%%*/
10133                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10134                     /*%
10135                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
10136                     %*/
10137                     ;}
10138     break;
10139 
10140   case 499:
10141 
10142 /* Line 1464 of yacc.c  */
10143 #line 4384 "parse.y"
10144     {
10145                     /*%%%*/
10146                         (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10147                     /*%
10148                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
10149                     %*/
10150                     ;}
10151     break;
10152 
10153   case 500:
10154 
10155 /* Line 1464 of yacc.c  */
10156 #line 4392 "parse.y"
10157     {
10158                     /*%%%*/
10159                         (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10160                     /*%
10161                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
10162                     %*/
10163                     ;}
10164     break;
10165 
10166   case 501:
10167 
10168 /* Line 1464 of yacc.c  */
10169 #line 4400 "parse.y"
10170     {
10171                     /*%%%*/
10172                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10173                     /*%
10174                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
10175                     %*/
10176                     ;}
10177     break;
10178 
10179   case 502:
10180 
10181 /* Line 1464 of yacc.c  */
10182 #line 4408 "parse.y"
10183     {
10184                     /*%%%*/
10185                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10186                     /*%
10187                         $$ = params_new(Qnil, Qnil, $1, Qnil,escape_Qundef($2));
10188                     %*/
10189                     ;}
10190     break;
10191 
10192   case 503:
10193 
10194 /* Line 1464 of yacc.c  */
10195 #line 4416 "parse.y"
10196     {
10197                     /*%%%*/
10198                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10199                     /*%
10200                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
10201                     %*/
10202                     ;}
10203     break;
10204 
10205   case 504:
10206 
10207 /* Line 1464 of yacc.c  */
10208 #line 4424 "parse.y"
10209     {
10210                     /*%%%*/
10211                         (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10212                     /*%
10213                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
10214                     %*/
10215                     ;}
10216     break;
10217 
10218   case 505:
10219 
10220 /* Line 1464 of yacc.c  */
10221 #line 4432 "parse.y"
10222     {
10223                     /*%%%*/
10224                         (yyval.node) = new_args(0, 0, 0, 0, 0);
10225                     /*%
10226                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil);
10227                     %*/
10228                     ;}
10229     break;
10230 
10231   case 506:
10232 
10233 /* Line 1464 of yacc.c  */
10234 #line 4442 "parse.y"
10235     {
10236                     /*%%%*/
10237                         yyerror("formal argument cannot be a constant");
10238                         (yyval.id) = 0;
10239                     /*%
10240                         $$ = dispatch1(param_error, $1);
10241                     %*/
10242                     ;}
10243     break;
10244 
10245   case 507:
10246 
10247 /* Line 1464 of yacc.c  */
10248 #line 4451 "parse.y"
10249     {
10250                     /*%%%*/
10251                         yyerror("formal argument cannot be an instance variable");
10252                         (yyval.id) = 0;
10253                     /*%
10254                         $$ = dispatch1(param_error, $1);
10255                     %*/
10256                     ;}
10257     break;
10258 
10259   case 508:
10260 
10261 /* Line 1464 of yacc.c  */
10262 #line 4460 "parse.y"
10263     {
10264                     /*%%%*/
10265                         yyerror("formal argument cannot be a global variable");
10266                         (yyval.id) = 0;
10267                     /*%
10268                         $$ = dispatch1(param_error, $1);
10269                     %*/
10270                     ;}
10271     break;
10272 
10273   case 509:
10274 
10275 /* Line 1464 of yacc.c  */
10276 #line 4469 "parse.y"
10277     {
10278                     /*%%%*/
10279                         yyerror("formal argument cannot be a class variable");
10280                         (yyval.id) = 0;
10281                     /*%
10282                         $$ = dispatch1(param_error, $1);
10283                     %*/
10284                     ;}
10285     break;
10286 
10287   case 511:
10288 
10289 /* Line 1464 of yacc.c  */
10290 #line 4481 "parse.y"
10291     {
10292                         formal_argument(get_id((yyvsp[(1) - (1)].id)));
10293                         (yyval.id) = (yyvsp[(1) - (1)].id);
10294                     ;}
10295     break;
10296 
10297   case 512:
10298 
10299 /* Line 1464 of yacc.c  */
10300 #line 4488 "parse.y"
10301     {
10302                         arg_var(get_id((yyvsp[(1) - (1)].id)));
10303                     /*%%%*/
10304                         (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10305                     /*%
10306                         $$ = get_value($1);
10307                     %*/
10308                     ;}
10309     break;
10310 
10311   case 513:
10312 
10313 /* Line 1464 of yacc.c  */
10314 #line 4497 "parse.y"
10315     {
10316                         ID tid = internal_id();
10317                         arg_var(tid);
10318                     /*%%%*/
10319                         if (dyna_in_block()) {
10320                             (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10321                         }
10322                         else {
10323                             (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10324                         }
10325                         (yyval.node) = NEW_ARGS_AUX(tid, 1);
10326                         (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10327                     /*%
10328                         $$ = dispatch1(mlhs_paren, $2);
10329                     %*/
10330                     ;}
10331     break;
10332 
10333   case 515:
10334 
10335 /* Line 1464 of yacc.c  */
10336 #line 4523 "parse.y"
10337     {
10338                     /*%%%*/
10339                         (yyval.node) = (yyvsp[(1) - (3)].node);
10340                         (yyval.node)->nd_plen++;
10341                         (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10342                         rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10343                     /*%
10344                         $$ = rb_ary_push($1, $3);
10345                     %*/
10346                     ;}
10347     break;
10348 
10349   case 516:
10350 
10351 /* Line 1464 of yacc.c  */
10352 #line 4536 "parse.y"
10353     {
10354                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10355                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10356                     /*%%%*/
10357                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10358                     /*%
10359                         $$ = rb_assoc_new($$, $3);
10360                     %*/
10361                     ;}
10362     break;
10363 
10364   case 517:
10365 
10366 /* Line 1464 of yacc.c  */
10367 #line 4548 "parse.y"
10368     {
10369                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10370                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10371                     /*%%%*/
10372                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10373                     /*%
10374                         $$ = rb_assoc_new($$, $3);
10375                     %*/
10376                     ;}
10377     break;
10378 
10379   case 518:
10380 
10381 /* Line 1464 of yacc.c  */
10382 #line 4560 "parse.y"
10383     {
10384                     /*%%%*/
10385                         (yyval.node) = (yyvsp[(1) - (1)].node);
10386                     /*%
10387                         $$ = rb_ary_new3(1, $1);
10388                     %*/
10389                     ;}
10390     break;
10391 
10392   case 519:
10393 
10394 /* Line 1464 of yacc.c  */
10395 #line 4568 "parse.y"
10396     {
10397                     /*%%%*/
10398                         NODE *opts = (yyvsp[(1) - (3)].node);
10399 
10400                         while (opts->nd_next) {
10401                             opts = opts->nd_next;
10402                         }
10403                         opts->nd_next = (yyvsp[(3) - (3)].node);
10404                         (yyval.node) = (yyvsp[(1) - (3)].node);
10405                     /*%
10406                         $$ = rb_ary_push($1, $3);
10407                     %*/
10408                     ;}
10409     break;
10410 
10411   case 520:
10412 
10413 /* Line 1464 of yacc.c  */
10414 #line 4584 "parse.y"
10415     {
10416                     /*%%%*/
10417                         (yyval.node) = (yyvsp[(1) - (1)].node);
10418                     /*%
10419                         $$ = rb_ary_new3(1, $1);
10420                     %*/
10421                     ;}
10422     break;
10423 
10424   case 521:
10425 
10426 /* Line 1464 of yacc.c  */
10427 #line 4592 "parse.y"
10428     {
10429                     /*%%%*/
10430                         NODE *opts = (yyvsp[(1) - (3)].node);
10431 
10432                         while (opts->nd_next) {
10433                             opts = opts->nd_next;
10434                         }
10435                         opts->nd_next = (yyvsp[(3) - (3)].node);
10436                         (yyval.node) = (yyvsp[(1) - (3)].node);
10437                     /*%
10438                         $$ = rb_ary_push($1, $3);
10439                     %*/
10440                     ;}
10441     break;
10442 
10443   case 524:
10444 
10445 /* Line 1464 of yacc.c  */
10446 #line 4612 "parse.y"
10447     {
10448                     /*%%%*/
10449                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10450                             yyerror("rest argument must be local variable");
10451                     /*% %*/
10452                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10453                     /*%%%*/
10454                         (yyval.id) = (yyvsp[(2) - (2)].id);
10455                     /*%
10456                         $$ = dispatch1(rest_param, $2);
10457                     %*/
10458                     ;}
10459     break;
10460 
10461   case 525:
10462 
10463 /* Line 1464 of yacc.c  */
10464 #line 4625 "parse.y"
10465     {
10466                     /*%%%*/
10467                         (yyval.id) = internal_id();
10468                         arg_var((yyval.id));
10469                     /*%
10470                         $$ = dispatch1(rest_param, Qnil);
10471                     %*/
10472                     ;}
10473     break;
10474 
10475   case 528:
10476 
10477 /* Line 1464 of yacc.c  */
10478 #line 4640 "parse.y"
10479     {
10480                     /*%%%*/
10481                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10482                             yyerror("block argument must be local variable");
10483                         else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10484                             yyerror("duplicated block argument name");
10485                     /*% %*/
10486                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10487                     /*%%%*/
10488                         (yyval.id) = (yyvsp[(2) - (2)].id);
10489                     /*%
10490                         $$ = dispatch1(blockarg, $2);
10491                     %*/
10492                     ;}
10493     break;
10494 
10495   case 529:
10496 
10497 /* Line 1464 of yacc.c  */
10498 #line 4657 "parse.y"
10499     {
10500                         (yyval.id) = (yyvsp[(2) - (2)].id);
10501                     ;}
10502     break;
10503 
10504   case 530:
10505 
10506 /* Line 1464 of yacc.c  */
10507 #line 4661 "parse.y"
10508     {
10509                     /*%%%*/
10510                         (yyval.id) = 0;
10511                     /*%
10512                         $$ = Qundef;
10513                     %*/
10514                     ;}
10515     break;
10516 
10517   case 531:
10518 
10519 /* Line 1464 of yacc.c  */
10520 #line 4671 "parse.y"
10521     {
10522                     /*%%%*/
10523                         value_expr((yyvsp[(1) - (1)].node));
10524                         (yyval.node) = (yyvsp[(1) - (1)].node);
10525                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
10526                     /*%
10527                         $$ = $1;
10528                     %*/
10529                     ;}
10530     break;
10531 
10532   case 532:
10533 
10534 /* Line 1464 of yacc.c  */
10535 #line 4680 "parse.y"
10536     {lex_state = EXPR_BEG;;}
10537     break;
10538 
10539   case 533:
10540 
10541 /* Line 1464 of yacc.c  */
10542 #line 4681 "parse.y"
10543     {
10544                     /*%%%*/
10545                         if ((yyvsp[(3) - (4)].node) == 0) {
10546                             yyerror("can't define singleton method for ().");
10547                         }
10548                         else {
10549                             switch (nd_type((yyvsp[(3) - (4)].node))) {
10550                               case NODE_STR:
10551                               case NODE_DSTR:
10552                               case NODE_XSTR:
10553                               case NODE_DXSTR:
10554                               case NODE_DREGX:
10555                               case NODE_LIT:
10556                               case NODE_ARRAY:
10557                               case NODE_ZARRAY:
10558                                 yyerror("can't define singleton method for literals");
10559                               default:
10560                                 value_expr((yyvsp[(3) - (4)].node));
10561                                 break;
10562                             }
10563                         }
10564                         (yyval.node) = (yyvsp[(3) - (4)].node);
10565                     /*%
10566                         $$ = dispatch1(paren, $3);
10567                     %*/
10568                     ;}
10569     break;
10570 
10571   case 535:
10572 
10573 /* Line 1464 of yacc.c  */
10574 #line 4711 "parse.y"
10575     {
10576                     /*%%%*/
10577                         (yyval.node) = (yyvsp[(1) - (2)].node);
10578                     /*%
10579                         $$ = dispatch1(assoclist_from_args, $1);
10580                     %*/
10581                     ;}
10582     break;
10583 
10584   case 537:
10585 
10586 /* Line 1464 of yacc.c  */
10587 #line 4728 "parse.y"
10588     {
10589                     /*%%%*/
10590                         (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10591                     /*%
10592                         $$ = rb_ary_push($1, $3);
10593                     %*/
10594                     ;}
10595     break;
10596 
10597   case 538:
10598 
10599 /* Line 1464 of yacc.c  */
10600 #line 4738 "parse.y"
10601     {
10602                     /*%%%*/
10603                         (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10604                     /*%
10605                         $$ = dispatch2(assoc_new, $1, $3);
10606                     %*/
10607                     ;}
10608     break;
10609 
10610   case 539:
10611 
10612 /* Line 1464 of yacc.c  */
10613 #line 4746 "parse.y"
10614     {
10615                     /*%%%*/
10616                         (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10617                     /*%
10618                         $$ = dispatch2(assoc_new, $1, $2);
10619                     %*/
10620                     ;}
10621     break;
10622 
10623   case 561:
10624 
10625 /* Line 1464 of yacc.c  */
10626 #line 4802 "parse.y"
10627     {yyerrok;;}
10628     break;
10629 
10630   case 564:
10631 
10632 /* Line 1464 of yacc.c  */
10633 #line 4807 "parse.y"
10634     {yyerrok;;}
10635     break;
10636 
10637   case 565:
10638 
10639 /* Line 1464 of yacc.c  */
10640 #line 4811 "parse.y"
10641     {
10642                     /*%%%*/
10643                         (yyval.node) = 0;
10644                     /*%
10645                         $$ = Qundef;
10646                     %*/
10647                     ;}
10648     break;
10649 
10650 
10651 
10652 /* Line 1464 of yacc.c  */
10653 #line 10652 "parse.c"
10654       default: break;
10655     }
10656   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10657 
10658   YYPOPSTACK (yylen);
10659   yylen = 0;
10660   YY_STACK_PRINT (yyss, yyssp);
10661 
10662   *++yyvsp = yyval;
10663 
10664   /* Now `shift' the result of the reduction.  Determine what state
10665      that goes to, based on the state we popped back to and the rule
10666      number reduced by.  */
10667 
10668   yyn = yyr1[yyn];
10669 
10670   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10671   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10672     yystate = yytable[yystate];
10673   else
10674     yystate = yydefgoto[yyn - YYNTOKENS];
10675 
10676   goto yynewstate;
10677 
10678 
10679 /*------------------------------------.
10680 | yyerrlab -- here on detecting error |
10681 `------------------------------------*/
10682 yyerrlab:
10683   /* If not already recovering from an error, report this error.  */
10684   if (!yyerrstatus)
10685     {
10686       ++yynerrs;
10687 #if ! YYERROR_VERBOSE
10688       parser_yyerror (parser, YY_("syntax error"));
10689 #else
10690       {
10691         YYSIZE_T yysize = yysyntax_error (0, yystate, yychar);
10692         if (yymsg_alloc < yysize && yymsg_alloc < YYSTACK_ALLOC_MAXIMUM)
10693           {
10694             YYSIZE_T yyalloc = 2 * yysize;
10695             if (! (yysize <= yyalloc && yyalloc <= YYSTACK_ALLOC_MAXIMUM))
10696               yyalloc = YYSTACK_ALLOC_MAXIMUM;
10697             if (yymsg != yymsgbuf)
10698               YYSTACK_FREE (yymsg);
10699             yymsg = (char *) YYSTACK_ALLOC (yyalloc);
10700             if (yymsg)
10701               yymsg_alloc = yyalloc;
10702             else
10703               {
10704                 yymsg = yymsgbuf;
10705                 yymsg_alloc = sizeof yymsgbuf;
10706               }
10707           }
10708 
10709         if (0 < yysize && yysize <= yymsg_alloc)
10710           {
10711             (void) yysyntax_error (yymsg, yystate, yychar);
10712             parser_yyerror (parser, yymsg);
10713           }
10714         else
10715           {
10716             parser_yyerror (parser, YY_("syntax error"));
10717             if (yysize != 0)
10718               goto yyexhaustedlab;
10719           }
10720       }
10721 #endif
10722     }
10723 
10724 
10725 
10726   if (yyerrstatus == 3)
10727     {
10728       /* If just tried and failed to reuse lookahead token after an
10729          error, discard it.  */
10730 
10731       if (yychar <= YYEOF)
10732         {
10733           /* Return failure if at end of input.  */
10734           if (yychar == YYEOF)
10735             YYABORT;
10736         }
10737       else
10738         {
10739           yydestruct ("Error: discarding",
10740                       yytoken, &yylval, parser);
10741           yychar = YYEMPTY;
10742         }
10743     }
10744 
10745   /* Else will try to reuse lookahead token after shifting the error
10746      token.  */
10747   goto yyerrlab1;
10748 
10749 
10750 /*---------------------------------------------------.
10751 | yyerrorlab -- error raised explicitly by YYERROR.  |
10752 `---------------------------------------------------*/
10753 yyerrorlab:
10754 
10755   /* Pacify compilers like GCC when the user code never invokes
10756      YYERROR and the label yyerrorlab therefore never appears in user
10757      code.  */
10758   if (/*CONSTCOND*/ 0)
10759      goto yyerrorlab;
10760 
10761   /* Do not reclaim the symbols of the rule which action triggered
10762      this YYERROR.  */
10763   YYPOPSTACK (yylen);
10764   yylen = 0;
10765   YY_STACK_PRINT (yyss, yyssp);
10766   yystate = *yyssp;
10767   goto yyerrlab1;
10768 
10769 
10770 /*-------------------------------------------------------------.
10771 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
10772 `-------------------------------------------------------------*/
10773 yyerrlab1:
10774   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
10775 
10776   for (;;)
10777     {
10778       yyn = yypact[yystate];
10779       if (yyn != YYPACT_NINF)
10780         {
10781           yyn += YYTERROR;
10782           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10783             {
10784               yyn = yytable[yyn];
10785               if (0 < yyn)
10786                 break;
10787             }
10788         }
10789 
10790       /* Pop the current state because it cannot handle the error token.  */
10791       if (yyssp == yyss)
10792         YYABORT;
10793 
10794 
10795       yydestruct ("Error: popping",
10796                   yystos[yystate], yyvsp, parser);
10797       YYPOPSTACK (1);
10798       yystate = *yyssp;
10799       YY_STACK_PRINT (yyss, yyssp);
10800     }
10801 
10802   *++yyvsp = yylval;
10803 
10804 
10805   /* Shift the error token.  */
10806   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10807 
10808   yystate = yyn;
10809   goto yynewstate;
10810 
10811 
10812 /*-------------------------------------.
10813 | yyacceptlab -- YYACCEPT comes here.  |
10814 `-------------------------------------*/
10815 yyacceptlab:
10816   yyresult = 0;
10817   goto yyreturn;
10818 
10819 /*-----------------------------------.
10820 | yyabortlab -- YYABORT comes here.  |
10821 `-----------------------------------*/
10822 yyabortlab:
10823   yyresult = 1;
10824   goto yyreturn;
10825 
10826 #if !defined(yyoverflow) || YYERROR_VERBOSE
10827 /*-------------------------------------------------.
10828 | yyexhaustedlab -- memory exhaustion comes here.  |
10829 `-------------------------------------------------*/
10830 yyexhaustedlab:
10831   parser_yyerror (parser, YY_("memory exhausted"));
10832   yyresult = 2;
10833   /* Fall through.  */
10834 #endif
10835 
10836 yyreturn:
10837   if (yychar != YYEMPTY)
10838      yydestruct ("Cleanup: discarding lookahead",
10839                  yytoken, &yylval, parser);
10840   /* Do not reclaim the symbols of the rule which action triggered
10841      this YYABORT or YYACCEPT.  */
10842   YYPOPSTACK (yylen);
10843   YY_STACK_PRINT (yyss, yyssp);
10844   while (yyssp != yyss)
10845     {
10846       yydestruct ("Cleanup: popping",
10847                   yystos[*yyssp], yyvsp, parser);
10848       YYPOPSTACK (1);
10849     }
10850 #ifndef yyoverflow
10851   if (yyss != yyssa)
10852     YYSTACK_FREE (yyss);
10853 #endif
10854 #if YYERROR_VERBOSE
10855   if (yymsg != yymsgbuf)
10856     YYSTACK_FREE (yymsg);
10857 #endif
10858   /* Make sure YYID is used.  */
10859   return YYID (yyresult);
10860 }
10861 
10862 
10863 
10864 /* Line 1684 of yacc.c  */
10865 #line 4819 "parse.y"
10866 
10867 # undef parser
10868 # undef yylex
10869 # undef yylval
10870 # define yylval  (*((YYSTYPE*)(parser->parser_yylval)))
10871 
10872 static int parser_regx_options(struct parser_params*);
10873 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10874 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10875 static int parser_parse_string(struct parser_params*,NODE*);
10876 static int parser_here_document(struct parser_params*,NODE*);
10877 
10878 
10879 # define nextc()                   parser_nextc(parser)
10880 # define pushback(c)               parser_pushback(parser, c)
10881 # define newtok()                  parser_newtok(parser)
10882 # define tokspace(n)               parser_tokspace(parser, n)
10883 # define tokadd(c)                 parser_tokadd(parser, c)
10884 # define tok_hex(numlen)           parser_tok_hex(parser, numlen)
10885 # define read_escape(flags,e)      parser_read_escape(parser, flags, e)
10886 # define tokadd_escape(e)          parser_tokadd_escape(parser, e)
10887 # define regx_options()            parser_regx_options(parser)
10888 # define tokadd_string(f,t,p,n,e)  parser_tokadd_string(parser,f,t,p,n,e)
10889 # define parse_string(n)           parser_parse_string(parser,n)
10890 # define tokaddmbc(c, enc)         parser_tokaddmbc(parser, c, enc)
10891 # define here_document(n)          parser_here_document(parser,n)
10892 # define heredoc_identifier()      parser_heredoc_identifier(parser)
10893 # define heredoc_restore(n)        parser_heredoc_restore(parser,n)
10894 # define whole_match_p(e,l,i)      parser_whole_match_p(parser,e,l,i)
10895 
10896 #ifndef RIPPER
10897 # define set_yylval_str(x) yylval.node = NEW_STR(x)
10898 # define set_yylval_num(x) yylval.num = x
10899 # define set_yylval_id(x)  yylval.id = x
10900 # define set_yylval_name(x)  yylval.id = x
10901 # define set_yylval_literal(x) yylval.node = NEW_LIT(x)
10902 # define set_yylval_node(x) yylval.node = x
10903 # define yylval_id() yylval.id
10904 #else
10905 static inline VALUE
10906 ripper_yylval_id(ID x)
10907 {
10908     return (VALUE)NEW_LASGN(x, ID2SYM(x));
10909 }
10910 # define set_yylval_str(x) (void)(x)
10911 # define set_yylval_num(x) (void)(x)
10912 # define set_yylval_id(x)  (void)(x)
10913 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10914 # define set_yylval_literal(x) (void)(x)
10915 # define set_yylval_node(x) (void)(x)
10916 # define yylval_id() yylval.id
10917 #endif
10918 
10919 #ifndef RIPPER
10920 #define ripper_flush(p) (void)(p)
10921 #else
10922 #define ripper_flush(p) (p->tokp = p->parser_lex_p)
10923 
10924 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)
10925 
10926 static int
10927 ripper_has_scan_event(struct parser_params *parser)
10928 {
10929 
10930     if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10931     return lex_p > parser->tokp;
10932 }
10933 
10934 static VALUE
10935 ripper_scan_event_val(struct parser_params *parser, int t)
10936 {
10937     VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10938     VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10939     ripper_flush(parser);
10940     return rval;
10941 }
10942 
10943 static void
10944 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10945 {
10946     if (!ripper_has_scan_event(parser)) return;
10947     yylval_rval = ripper_scan_event_val(parser, t);
10948 }
10949 
10950 static void
10951 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10952 {
10953     if (!ripper_has_scan_event(parser)) return;
10954     (void)ripper_scan_event_val(parser, t);
10955 }
10956 
10957 static void
10958 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
10959 {
10960     int saved_line = ruby_sourceline;
10961     const char *saved_tokp = parser->tokp;
10962 
10963     ruby_sourceline = parser->delayed_line;
10964     parser->tokp = lex_pbeg + parser->delayed_col;
10965     yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
10966     parser->delayed = Qnil;
10967     ruby_sourceline = saved_line;
10968     parser->tokp = saved_tokp;
10969 }
10970 #endif /* RIPPER */
10971 
10972 #include "ruby/regex.h"
10973 #include "ruby/util.h"
10974 
10975 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
10976    since ours (we hope) works properly with all combinations of
10977    machines, compilers, `char' and `unsigned char' argument types.
10978    (Per Bothner suggested the basic approach.)  */
10979 #undef SIGN_EXTEND_CHAR
10980 #if __STDC__
10981 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
10982 #else  /* not __STDC__ */
10983 /* As in Harbison and Steele.  */
10984 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
10985 #endif
10986 
10987 #define parser_encoding_name()  (parser->enc->name)
10988 #define parser_mbclen()  mbclen((lex_p-1),lex_pend,parser->enc)
10989 #define parser_precise_mbclen()  rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
10990 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
10991 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
10992 
10993 #define parser_isascii() ISASCII(*(lex_p-1))
10994 
10995 #ifndef RIPPER
10996 static int
10997 token_info_get_column(struct parser_params *parser, const char *token)
10998 {
10999     int column = 1;
11000     const char *p, *pend = lex_p - strlen(token);
11001     for (p = lex_pbeg; p < pend; p++) {
11002         if (*p == '\t') {
11003             column = (((column - 1) / 8) + 1) * 8;
11004         }
11005         column++;
11006     }
11007     return column;
11008 }
11009 
11010 static int
11011 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11012 {
11013     const char *p, *pend = lex_p - strlen(token);
11014     for (p = lex_pbeg; p < pend; p++) {
11015         if (*p != ' ' && *p != '\t') {
11016             return 1;
11017         }
11018     }
11019     return 0;
11020 }
11021 
11022 #undef token_info_push
11023 static void
11024 token_info_push(struct parser_params *parser, const char *token)
11025 {
11026     token_info *ptinfo;
11027 
11028     if (compile_for_eval) return;
11029     ptinfo = ALLOC(token_info);
11030     ptinfo->token = token;
11031     ptinfo->linenum = ruby_sourceline;
11032     ptinfo->column = token_info_get_column(parser, token);
11033     ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11034     ptinfo->next = parser->parser_token_info;
11035 
11036     parser->parser_token_info = ptinfo;
11037 }
11038 
11039 #undef token_info_pop
11040 static void
11041 token_info_pop(struct parser_params *parser, const char *token)
11042 {
11043     int linenum;
11044     token_info *ptinfo = parser->parser_token_info;
11045 
11046     if (!ptinfo) return;
11047     parser->parser_token_info = ptinfo->next;
11048     if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11049         goto finish;
11050     }
11051     linenum = ruby_sourceline;
11052     if (linenum == ptinfo->linenum) { /* SKIP */
11053         goto finish;
11054     }
11055     if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11056         goto finish;
11057     }
11058     rb_compile_warning(ruby_sourcefile, linenum,
11059                "mismatched indentations at '%s' with '%s' at %d",
11060                token, ptinfo->token, ptinfo->linenum);
11061 
11062   finish:
11063     xfree(ptinfo);
11064 }
11065 #endif  /* RIPPER */
11066 
11067 static int
11068 parser_yyerror(struct parser_params *parser, const char *msg)
11069 {
11070 #ifndef RIPPER
11071     const int max_line_margin = 30;
11072     const char *p, *pe;
11073     char *buf;
11074     long len;
11075     int i;
11076 
11077     compile_error(PARSER_ARG "%s", msg);
11078     p = lex_p;
11079     while (lex_pbeg <= p) {
11080         if (*p == '\n') break;
11081         p--;
11082     }
11083     p++;
11084 
11085     pe = lex_p;
11086     while (pe < lex_pend) {
11087         if (*pe == '\n') break;
11088         pe++;
11089     }
11090 
11091     len = pe - p;
11092     if (len > 4) {
11093         char *p2;
11094         const char *pre = "", *post = "";
11095 
11096         if (len > max_line_margin * 2 + 10) {
11097             if (lex_p - p > max_line_margin) {
11098                 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11099                 pre = "...";
11100             }
11101             if (pe - lex_p > max_line_margin) {
11102                 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11103                 post = "...";
11104             }
11105             len = pe - p;
11106         }
11107         buf = ALLOCA_N(char, len+2);
11108         MEMCPY(buf, p, char, len);
11109         buf[len] = '\0';
11110         rb_compile_error_append("%s%s%s", pre, buf, post);
11111 
11112         i = (int)(lex_p - p);
11113         p2 = buf; pe = buf + len;
11114 
11115         while (p2 < pe) {
11116             if (*p2 != '\t') *p2 = ' ';
11117             p2++;
11118         }
11119         buf[i] = '^';
11120         buf[i+1] = '\0';
11121         rb_compile_error_append("%s%s", pre, buf);
11122     }
11123 #else
11124     dispatch1(parse_error, STR_NEW2(msg));
11125 #endif /* !RIPPER */
11126     return 0;
11127 }
11128 
11129 static void parser_prepare(struct parser_params *parser);
11130 
11131 #ifndef RIPPER
11132 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
11133 
11134 static VALUE
11135 debug_lines(const char *f)
11136 {
11137     ID script_lines;
11138     CONST_ID(script_lines, "SCRIPT_LINES__");
11139     if (rb_const_defined_at(rb_cObject, script_lines)) {
11140         VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11141         if (TYPE(hash) == T_HASH) {
11142             VALUE fname = rb_str_new2(f);
11143             VALUE lines = rb_ary_new();
11144             rb_hash_aset(hash, fname, lines);
11145             return lines;
11146         }
11147     }
11148     return 0;
11149 }
11150 
11151 static VALUE
11152 coverage(const char *f, int n)
11153 {
11154     extern VALUE rb_get_coverages(void);
11155     VALUE coverages = rb_get_coverages();
11156     if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11157         VALUE fname = rb_str_new2(f);
11158         VALUE lines = rb_ary_new2(n);
11159         int i;
11160         RBASIC(lines)->klass = 0;
11161         for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11162         RARRAY(lines)->as.heap.len = n;
11163         rb_hash_aset(coverages, fname, lines);
11164         return lines;
11165     }
11166     return 0;
11167 }
11168 
11169 static int
11170 e_option_supplied(struct parser_params *parser)
11171 {
11172     return strcmp(ruby_sourcefile, "-e") == 0;
11173 }
11174 
11175 static VALUE
11176 yycompile0(VALUE arg, int tracing)
11177 {
11178     int n;
11179     NODE *tree;
11180     struct parser_params *parser = (struct parser_params *)arg;
11181 
11182     if (!compile_for_eval && rb_safe_level() == 0) {
11183         ruby_debug_lines = debug_lines(ruby_sourcefile);
11184         if (ruby_debug_lines && ruby_sourceline > 0) {
11185             VALUE str = STR_NEW0();
11186             n = ruby_sourceline;
11187             do {
11188                 rb_ary_push(ruby_debug_lines, str);
11189             } while (--n);
11190         }
11191 
11192         if (!e_option_supplied(parser)) {
11193             ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11194         }
11195     }
11196 
11197     parser_prepare(parser);
11198     deferred_nodes = 0;
11199     n = yyparse((void*)parser);
11200     ruby_debug_lines = 0;
11201     ruby_coverage = 0;
11202     compile_for_eval = 0;
11203 
11204     lex_strterm = 0;
11205     lex_p = lex_pbeg = lex_pend = 0;
11206     lex_lastline = lex_nextline = 0;
11207     if (parser->nerr) {
11208         return 0;
11209     }
11210     tree = ruby_eval_tree;
11211     if (!tree) {
11212         tree = NEW_NIL();
11213     }
11214     else if (ruby_eval_tree_begin) {
11215         tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11216     }
11217     return (VALUE)tree;
11218 }
11219 
11220 static NODE*
11221 yycompile(struct parser_params *parser, const char *f, int line)
11222 {
11223     ruby_sourcefile = ruby_strdup(f);
11224     ruby_sourceline = line - 1;
11225     return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11226 }
11227 #endif /* !RIPPER */
11228 
11229 static rb_encoding *
11230 must_be_ascii_compatible(VALUE s)
11231 {
11232     rb_encoding *enc = rb_enc_get(s);
11233     if (!rb_enc_asciicompat(enc)) {
11234         rb_raise(rb_eArgError, "invalid source encoding");
11235     }
11236     return enc;
11237 }
11238 
11239 static VALUE
11240 lex_get_str(struct parser_params *parser, VALUE s)
11241 {
11242     char *beg, *end, *pend;
11243     rb_encoding *enc = must_be_ascii_compatible(s);
11244 
11245     beg = RSTRING_PTR(s);
11246     if (lex_gets_ptr) {
11247         if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11248         beg += lex_gets_ptr;
11249     }
11250     pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11251     end = beg;
11252     while (end < pend) {
11253         if (*end++ == '\n') break;
11254     }
11255     lex_gets_ptr = end - RSTRING_PTR(s);
11256     return rb_enc_str_new(beg, end - beg, enc);
11257 }
11258 
11259 static VALUE
11260 lex_getline(struct parser_params *parser)
11261 {
11262     VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11263     if (NIL_P(line)) return line;
11264     must_be_ascii_compatible(line);
11265 #ifndef RIPPER
11266     if (ruby_debug_lines) {
11267         rb_enc_associate(line, parser->enc);
11268         rb_ary_push(ruby_debug_lines, line);
11269     }
11270     if (ruby_coverage) {
11271         rb_ary_push(ruby_coverage, Qnil);
11272     }
11273 #endif
11274     return line;
11275 }
11276 
11277 static const rb_data_type_t parser_data_type;
11278 
11279 #ifndef RIPPER
11280 static NODE*
11281 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11282 {
11283     struct parser_params *parser;
11284     NODE *node;
11285     volatile VALUE tmp;
11286 
11287     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11288     lex_gets = lex_get_str;
11289     lex_gets_ptr = 0;
11290     lex_input = s;
11291     lex_pbeg = lex_p = lex_pend = 0;
11292     compile_for_eval = rb_parse_in_eval();
11293 
11294     node = yycompile(parser, f, line);
11295     tmp = vparser; /* prohibit tail call optimization */
11296 
11297     return node;
11298 }
11299 
11300 NODE*
11301 rb_compile_string(const char *f, VALUE s, int line)
11302 {
11303     must_be_ascii_compatible(s);
11304     return parser_compile_string(rb_parser_new(), f, s, line);
11305 }
11306 
11307 NODE*
11308 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11309 {
11310     must_be_ascii_compatible(s);
11311     return parser_compile_string(vparser, f, s, line);
11312 }
11313 
11314 NODE*
11315 rb_compile_cstr(const char *f, const char *s, int len, int line)
11316 {
11317     VALUE str = rb_str_new(s, len);
11318     return parser_compile_string(rb_parser_new(), f, str, line);
11319 }
11320 
11321 NODE*
11322 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11323 {
11324     VALUE str = rb_str_new(s, len);
11325     return parser_compile_string(vparser, f, str, line);
11326 }
11327 
11328 static VALUE
11329 lex_io_gets(struct parser_params *parser, VALUE io)
11330 {
11331     return rb_io_gets(io);
11332 }
11333 
11334 NODE*
11335 rb_compile_file(const char *f, VALUE file, int start)
11336 {
11337     VALUE volatile vparser = rb_parser_new();
11338 
11339     return rb_parser_compile_file(vparser, f, file, start);
11340 }
11341 
11342 NODE*
11343 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11344 {
11345     struct parser_params *parser;
11346     volatile VALUE tmp;
11347     NODE *node;
11348 
11349     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11350     lex_gets = lex_io_gets;
11351     lex_input = file;
11352     lex_pbeg = lex_p = lex_pend = 0;
11353     compile_for_eval = rb_parse_in_eval();
11354 
11355     node = yycompile(parser, f, start);
11356     tmp = vparser; /* prohibit tail call optimization */
11357 
11358     return node;
11359 }
11360 #endif  /* !RIPPER */
11361 
11362 #define STR_FUNC_ESCAPE 0x01
11363 #define STR_FUNC_EXPAND 0x02
11364 #define STR_FUNC_REGEXP 0x04
11365 #define STR_FUNC_QWORDS 0x08
11366 #define STR_FUNC_SYMBOL 0x10
11367 #define STR_FUNC_INDENT 0x20
11368 
11369 enum string_type {
11370     str_squote = (0),
11371     str_dquote = (STR_FUNC_EXPAND),
11372     str_xquote = (STR_FUNC_EXPAND),
11373     str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11374     str_sword  = (STR_FUNC_QWORDS),
11375     str_dword  = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11376     str_ssym   = (STR_FUNC_SYMBOL),
11377     str_dsym   = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11378 };
11379 
11380 static VALUE
11381 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11382 {
11383     VALUE str;
11384 
11385     str = rb_enc_str_new(p, n, enc);
11386     if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11387         if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11388         }
11389         else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11390             rb_enc_associate(str, rb_ascii8bit_encoding());
11391         }
11392     }
11393 
11394     return str;
11395 }
11396 
11397 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
11398 #define peek(c) (lex_p < lex_pend && (c) == *lex_p)
11399 
11400 static inline int
11401 parser_nextc(struct parser_params *parser)
11402 {
11403     int c;
11404 
11405     if (lex_p == lex_pend) {
11406         VALUE v = lex_nextline;
11407         lex_nextline = 0;
11408         if (!v) {
11409             if (parser->eofp)
11410                 return -1;
11411 
11412             if (!lex_input || NIL_P(v = lex_getline(parser))) {
11413                 parser->eofp = Qtrue;
11414                 lex_goto_eol(parser);
11415                 return -1;
11416             }
11417         }
11418         {
11419 #ifdef RIPPER
11420             if (parser->tokp < lex_pend) {
11421                 if (NIL_P(parser->delayed)) {
11422                     parser->delayed = rb_str_buf_new(1024);
11423                     rb_str_buf_cat(parser->delayed,
11424                                    parser->tokp, lex_pend - parser->tokp);
11425                     parser->delayed_line = ruby_sourceline;
11426                     parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11427                 }
11428                 else {
11429                     rb_str_buf_cat(parser->delayed,
11430                                    parser->tokp, lex_pend - parser->tokp);
11431                 }
11432             }
11433 #endif
11434             if (heredoc_end > 0) {
11435                 ruby_sourceline = heredoc_end;
11436                 heredoc_end = 0;
11437             }
11438             ruby_sourceline++;
11439             parser->line_count++;
11440             lex_pbeg = lex_p = RSTRING_PTR(v);
11441             lex_pend = lex_p + RSTRING_LEN(v);
11442             ripper_flush(parser);
11443             lex_lastline = v;
11444         }
11445     }
11446     c = (unsigned char)*lex_p++;
11447     if (c == '\r' && peek('\n')) {
11448         lex_p++;
11449         c = '\n';
11450     }
11451 
11452     return c;
11453 }
11454 
11455 static void
11456 parser_pushback(struct parser_params *parser, int c)
11457 {
11458     if (c == -1) return;
11459     lex_p--;
11460     if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11461         lex_p--;
11462     }
11463 }
11464 
11465 #define was_bol() (lex_p == lex_pbeg + 1)
11466 
11467 #define tokfix() (tokenbuf[tokidx]='\0')
11468 #define tok() tokenbuf
11469 #define toklen() tokidx
11470 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11471 
11472 static char*
11473 parser_newtok(struct parser_params *parser)
11474 {
11475     tokidx = 0;
11476     if (!tokenbuf) {
11477         toksiz = 60;
11478         tokenbuf = ALLOC_N(char, 60);
11479     }
11480     if (toksiz > 4096) {
11481         toksiz = 60;
11482         REALLOC_N(tokenbuf, char, 60);
11483     }
11484     return tokenbuf;
11485 }
11486 
11487 static char *
11488 parser_tokspace(struct parser_params *parser, int n)
11489 {
11490     tokidx += n;
11491 
11492     if (tokidx >= toksiz) {
11493         do {toksiz *= 2;} while (toksiz < tokidx);
11494         REALLOC_N(tokenbuf, char, toksiz);
11495     }
11496     return &tokenbuf[tokidx-n];
11497 }
11498 
11499 static void
11500 parser_tokadd(struct parser_params *parser, int c)
11501 {
11502     tokenbuf[tokidx++] = (char)c;
11503     if (tokidx >= toksiz) {
11504         toksiz *= 2;
11505         REALLOC_N(tokenbuf, char, toksiz);
11506     }
11507 }
11508 
11509 static int
11510 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11511 {
11512     int c;
11513 
11514     c = scan_hex(lex_p, 2, numlen);
11515     if (!*numlen) {
11516         yyerror("invalid hex escape");
11517         return 0;
11518     }
11519     lex_p += *numlen;
11520     return c;
11521 }
11522 
11523 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11524 
11525 static int
11526 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11527                    int string_literal, int symbol_literal, int regexp_literal)
11528 {
11529     /*
11530      * If string_literal is true, then we allow multiple codepoints
11531      * in \u{}, and add the codepoints to the current token.
11532      * Otherwise we're parsing a character literal and return a single
11533      * codepoint without adding it
11534      */
11535 
11536     int codepoint;
11537     size_t numlen;
11538 
11539     if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11540 
11541     if (peek('{')) {  /* handle \u{...} form */
11542         do {
11543             if (regexp_literal) { tokadd(*lex_p); }
11544             nextc();
11545             codepoint = scan_hex(lex_p, 6, &numlen);
11546             if (numlen == 0)  {
11547                 yyerror("invalid Unicode escape");
11548                 return 0;
11549             }
11550             if (codepoint > 0x10ffff) {
11551                 yyerror("invalid Unicode codepoint (too large)");
11552                 return 0;
11553             }
11554             lex_p += numlen;
11555             if (regexp_literal) {
11556                 tokcopy((int)numlen);
11557             }
11558             else if (codepoint >= 0x80) {
11559                 *encp = UTF8_ENC();
11560                 if (string_literal) tokaddmbc(codepoint, *encp);
11561             }
11562             else if (string_literal) {
11563                 tokadd(codepoint);
11564             }
11565         } while (string_literal && (peek(' ') || peek('\t')));
11566 
11567         if (!peek('}')) {
11568             yyerror("unterminated Unicode escape");
11569             return 0;
11570         }
11571 
11572         if (regexp_literal) { tokadd('}'); }
11573         nextc();
11574     }
11575     else {                      /* handle \uxxxx form */
11576         codepoint = scan_hex(lex_p, 4, &numlen);
11577         if (numlen < 4) {
11578             yyerror("invalid Unicode escape");
11579             return 0;
11580         }
11581         lex_p += 4;
11582         if (regexp_literal) {
11583             tokcopy(4);
11584         }
11585         else if (codepoint >= 0x80) {
11586             *encp = UTF8_ENC();
11587             if (string_literal) tokaddmbc(codepoint, *encp);
11588         }
11589         else if (string_literal) {
11590             tokadd(codepoint);
11591         }
11592     }
11593 
11594     return codepoint;
11595 }
11596 
11597 #define ESCAPE_CONTROL 1
11598 #define ESCAPE_META    2
11599 
11600 static int
11601 parser_read_escape(struct parser_params *parser, int flags,
11602                    rb_encoding **encp)
11603 {
11604     int c;
11605     size_t numlen;
11606 
11607     switch (c = nextc()) {
11608       case '\\':        /* Backslash */
11609         return c;
11610 
11611       case 'n': /* newline */
11612         return '\n';
11613 
11614       case 't': /* horizontal tab */
11615         return '\t';
11616 
11617       case 'r': /* carriage-return */
11618         return '\r';
11619 
11620       case 'f': /* form-feed */
11621         return '\f';
11622 
11623       case 'v': /* vertical tab */
11624         return '\13';
11625 
11626       case 'a': /* alarm(bell) */
11627         return '\007';
11628 
11629       case 'e': /* escape */
11630         return 033;
11631 
11632       case '0': case '1': case '2': case '3': /* octal constant */
11633       case '4': case '5': case '6': case '7':
11634         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11635         pushback(c);
11636         c = scan_oct(lex_p, 3, &numlen);
11637         lex_p += numlen;
11638         return c;
11639 
11640       case 'x': /* hex constant */
11641         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11642         c = tok_hex(&numlen);
11643         if (numlen == 0) return 0;
11644         return c;
11645 
11646       case 'b': /* backspace */
11647         return '\010';
11648 
11649       case 's': /* space */
11650         return ' ';
11651 
11652       case 'M':
11653         if (flags & ESCAPE_META) goto eof;
11654         if ((c = nextc()) != '-') {
11655             pushback(c);
11656             goto eof;
11657         }
11658         if ((c = nextc()) == '\\') {
11659             if (peek('u')) goto eof;
11660             return read_escape(flags|ESCAPE_META, encp) | 0x80;
11661         }
11662         else if (c == -1 || !ISASCII(c)) goto eof;
11663         else {
11664             return ((c & 0xff) | 0x80);
11665         }
11666 
11667       case 'C':
11668         if ((c = nextc()) != '-') {
11669             pushback(c);
11670             goto eof;
11671         }
11672       case 'c':
11673         if (flags & ESCAPE_CONTROL) goto eof;
11674         if ((c = nextc())== '\\') {
11675             if (peek('u')) goto eof;
11676             c = read_escape(flags|ESCAPE_CONTROL, encp);
11677         }
11678         else if (c == '?')
11679             return 0177;
11680         else if (c == -1 || !ISASCII(c)) goto eof;
11681         return c & 0x9f;
11682 
11683       eof:
11684       case -1:
11685         yyerror("Invalid escape character syntax");
11686         return '\0';
11687 
11688       default:
11689         return c;
11690     }
11691 }
11692 
11693 static void
11694 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11695 {
11696     int len = rb_enc_codelen(c, enc);
11697     rb_enc_mbcput(c, tokspace(len), enc);
11698 }
11699 
11700 static int
11701 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11702 {
11703     int c;
11704     int flags = 0;
11705     size_t numlen;
11706 
11707   first:
11708     switch (c = nextc()) {
11709       case '\n':
11710         return 0;               /* just ignore */
11711 
11712       case '0': case '1': case '2': case '3': /* octal constant */
11713       case '4': case '5': case '6': case '7':
11714         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11715         {
11716             ruby_scan_oct(--lex_p, 3, &numlen);
11717             if (numlen == 0) goto eof;
11718             lex_p += numlen;
11719             tokcopy((int)numlen + 1);
11720         }
11721         return 0;
11722 
11723       case 'x': /* hex constant */
11724         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11725         {
11726             tok_hex(&numlen);
11727             if (numlen == 0) goto eof;
11728             tokcopy((int)numlen + 2);
11729         }
11730         return 0;
11731 
11732       case 'M':
11733         if (flags & ESCAPE_META) goto eof;
11734         if ((c = nextc()) != '-') {
11735             pushback(c);
11736             goto eof;
11737         }
11738         tokcopy(3);
11739         flags |= ESCAPE_META;
11740         goto escaped;
11741 
11742       case 'C':
11743         if (flags & ESCAPE_CONTROL) goto eof;
11744         if ((c = nextc()) != '-') {
11745             pushback(c);
11746             goto eof;
11747         }
11748         tokcopy(3);
11749         goto escaped;
11750 
11751       case 'c':
11752         if (flags & ESCAPE_CONTROL) goto eof;
11753         tokcopy(2);
11754         flags |= ESCAPE_CONTROL;
11755       escaped:
11756         if ((c = nextc()) == '\\') {
11757             goto first;
11758         }
11759         else if (c == -1) goto eof;
11760         tokadd(c);
11761         return 0;
11762 
11763       eof:
11764       case -1:
11765         yyerror("Invalid escape character syntax");
11766         return -1;
11767 
11768       default:
11769         tokadd('\\');
11770         tokadd(c);
11771     }
11772     return 0;
11773 }
11774 
11775 extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
11776 
11777 static int
11778 parser_regx_options(struct parser_params *parser)
11779 {
11780     int kcode = 0;
11781     int kopt = 0;
11782     int options = 0;
11783     int c, opt, kc;
11784 
11785     newtok();
11786     while (c = nextc(), ISALPHA(c)) {
11787         if (c == 'o') {
11788             options |= RE_OPTION_ONCE;
11789         }
11790         else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11791             if (kc >= 0) {
11792                 if (kc != rb_ascii8bit_encindex()) kcode = c;
11793                 kopt = opt;
11794             }
11795             else {
11796                 options |= opt;
11797             }
11798         }
11799         else {
11800             tokadd(c);
11801         }
11802     }
11803     options |= kopt;
11804     pushback(c);
11805     if (toklen()) {
11806         tokfix();
11807         compile_error(PARSER_ARG "unknown regexp option%s - %s",
11808                       toklen() > 1 ? "s" : "", tok());
11809     }
11810     return options | RE_OPTION_ENCODING(kcode);
11811 }
11812 
11813 static void
11814 dispose_string(VALUE str)
11815 {
11816     /* TODO: should use another API? */
11817     if (RBASIC(str)->flags & RSTRING_NOEMBED)
11818         xfree(RSTRING_PTR(str));
11819     rb_gc_force_recycle(str);
11820 }
11821 
11822 static int
11823 parser_tokadd_mbchar(struct parser_params *parser, int c)
11824 {
11825     int len = parser_precise_mbclen();
11826     if (!MBCLEN_CHARFOUND_P(len)) {
11827         compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11828         return -1;
11829     }
11830     tokadd(c);
11831     lex_p += --len;
11832     if (len > 0) tokcopy(len);
11833     return c;
11834 }
11835 
11836 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
11837 
11838 static int
11839 parser_tokadd_string(struct parser_params *parser,
11840                      int func, int term, int paren, long *nest,
11841                      rb_encoding **encp)
11842 {
11843     int c;
11844     int has_nonascii = 0;
11845     rb_encoding *enc = *encp;
11846     char *errbuf = 0;
11847     static const char mixed_msg[] = "%s mixed within %s source";
11848 
11849 #define mixed_error(enc1, enc2) if (!errbuf) {  \
11850         size_t len = sizeof(mixed_msg) - 4;     \
11851         len += strlen(rb_enc_name(enc1));       \
11852         len += strlen(rb_enc_name(enc2));       \
11853         errbuf = ALLOCA_N(char, len);           \
11854         snprintf(errbuf, len, mixed_msg,        \
11855                  rb_enc_name(enc1),             \
11856                  rb_enc_name(enc2));            \
11857         yyerror(errbuf);                        \
11858     }
11859 #define mixed_escape(beg, enc1, enc2) do {      \
11860         const char *pos = lex_p;                \
11861         lex_p = beg;                            \
11862         mixed_error(enc1, enc2);                \
11863         lex_p = pos;                            \
11864     } while (0)
11865 
11866     while ((c = nextc()) != -1) {
11867         if (paren && c == paren) {
11868             ++*nest;
11869         }
11870         else if (c == term) {
11871             if (!nest || !*nest) {
11872                 pushback(c);
11873                 break;
11874             }
11875             --*nest;
11876         }
11877         else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11878             int c2 = *lex_p;
11879             if (c2 == '$' || c2 == '@' || c2 == '{') {
11880                 pushback(c);
11881                 break;
11882             }
11883         }
11884         else if (c == '\\') {
11885             const char *beg = lex_p - 1;
11886             c = nextc();
11887             switch (c) {
11888               case '\n':
11889                 if (func & STR_FUNC_QWORDS) break;
11890                 if (func & STR_FUNC_EXPAND) continue;
11891                 tokadd('\\');
11892                 break;
11893 
11894               case '\\':
11895                 if (func & STR_FUNC_ESCAPE) tokadd(c);
11896                 break;
11897 
11898               case 'u':
11899                 if ((func & STR_FUNC_EXPAND) == 0) {
11900                     tokadd('\\');
11901                     break;
11902                 }
11903                 parser_tokadd_utf8(parser, &enc, 1,
11904                                    func & STR_FUNC_SYMBOL,
11905                                    func & STR_FUNC_REGEXP);
11906                 if (has_nonascii && enc != *encp) {
11907                     mixed_escape(beg, enc, *encp);
11908                 }
11909                 continue;
11910 
11911               default:
11912                 if (func & STR_FUNC_REGEXP) {
11913                     pushback(c);
11914                     if ((c = tokadd_escape(&enc)) < 0)
11915                         return -1;
11916                     if (has_nonascii && enc != *encp) {
11917                         mixed_escape(beg, enc, *encp);
11918                     }
11919                     continue;
11920                 }
11921                 else if (func & STR_FUNC_EXPAND) {
11922                     pushback(c);
11923                     if (func & STR_FUNC_ESCAPE) tokadd('\\');
11924                     c = read_escape(0, &enc);
11925                 }
11926                 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11927                     /* ignore backslashed spaces in %w */
11928                 }
11929                 else if (c != term && !(paren && c == paren)) {
11930                     tokadd('\\');
11931                     pushback(c);
11932                     continue;
11933                 }
11934             }
11935         }
11936         else if (!parser_isascii()) {
11937             has_nonascii = 1;
11938             if (enc != *encp) {
11939                 mixed_error(enc, *encp);
11940                 continue;
11941             }
11942             if (tokadd_mbchar(c) == -1) return -1;
11943             continue;
11944         }
11945         else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11946             pushback(c);
11947             break;
11948         }
11949         if (c & 0x80) {
11950             has_nonascii = 1;
11951             if (enc != *encp) {
11952                 mixed_error(enc, *encp);
11953                 continue;
11954             }
11955         }
11956         tokadd(c);
11957     }
11958     *encp = enc;
11959     return c;
11960 }
11961 
11962 #define NEW_STRTERM(func, term, paren) \
11963         rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
11964 
11965 static int
11966 parser_parse_string(struct parser_params *parser, NODE *quote)
11967 {
11968     int func = (int)quote->nd_func;
11969     int term = nd_term(quote);
11970     int paren = nd_paren(quote);
11971     int c, space = 0;
11972     rb_encoding *enc = parser->enc;
11973 
11974     if (func == -1) return tSTRING_END;
11975     c = nextc();
11976     if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11977         do {c = nextc();} while (ISSPACE(c));
11978         space = 1;
11979     }
11980     if (c == term && !quote->nd_nest) {
11981         if (func & STR_FUNC_QWORDS) {
11982             quote->nd_func = -1;
11983             return ' ';
11984         }
11985         if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
11986         set_yylval_num(regx_options());
11987         return tREGEXP_END;
11988     }
11989     if (space) {
11990         pushback(c);
11991         return ' ';
11992     }
11993     newtok();
11994     if ((func & STR_FUNC_EXPAND) && c == '#') {
11995         switch (c = nextc()) {
11996           case '$':
11997           case '@':
11998             pushback(c);
11999             return tSTRING_DVAR;
12000           case '{':
12001             return tSTRING_DBEG;
12002         }
12003         tokadd('#');
12004     }
12005     pushback(c);
12006     if (tokadd_string(func, term, paren, &quote->nd_nest,
12007                       &enc) == -1) {
12008         ruby_sourceline = nd_line(quote);
12009         if (func & STR_FUNC_REGEXP) {
12010             if (parser->eofp)
12011                 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12012             return tREGEXP_END;
12013         }
12014         else {
12015             if (parser->eofp)
12016                 compile_error(PARSER_ARG "unterminated string meets end of file");
12017             return tSTRING_END;
12018         }
12019     }
12020 
12021     tokfix();
12022     set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12023 
12024 #ifdef RIPPER
12025     if (!NIL_P(parser->delayed)){
12026         ptrdiff_t len = lex_p - parser->tokp;
12027         if (len > 0) {
12028             rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12029         }
12030         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12031         parser->tokp = lex_p;
12032     }
12033 #endif
12034 
12035     return tSTRING_CONTENT;
12036 }
12037 
12038 static int
12039 parser_heredoc_identifier(struct parser_params *parser)
12040 {
12041     int c = nextc(), term, func = 0;
12042     long len;
12043 
12044     if (c == '-') {
12045         c = nextc();
12046         func = STR_FUNC_INDENT;
12047     }
12048     switch (c) {
12049       case '\'':
12050         func |= str_squote; goto quoted;
12051       case '"':
12052         func |= str_dquote; goto quoted;
12053       case '`':
12054         func |= str_xquote;
12055       quoted:
12056         newtok();
12057         tokadd(func);
12058         term = c;
12059         while ((c = nextc()) != -1 && c != term) {
12060             if (tokadd_mbchar(c) == -1) return 0;
12061         }
12062         if (c == -1) {
12063             compile_error(PARSER_ARG "unterminated here document identifier");
12064             return 0;
12065         }
12066         break;
12067 
12068       default:
12069         if (!parser_is_identchar()) {
12070             pushback(c);
12071             if (func & STR_FUNC_INDENT) {
12072                 pushback('-');
12073             }
12074             return 0;
12075         }
12076         newtok();
12077         term = '"';
12078         tokadd(func |= str_dquote);
12079         do {
12080             if (tokadd_mbchar(c) == -1) return 0;
12081         } while ((c = nextc()) != -1 && parser_is_identchar());
12082         pushback(c);
12083         break;
12084     }
12085 
12086     tokfix();
12087 #ifdef RIPPER
12088     ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12089 #endif
12090     len = lex_p - lex_pbeg;
12091     lex_goto_eol(parser);
12092     lex_strterm = rb_node_newnode(NODE_HEREDOC,
12093                                   STR_NEW(tok(), toklen()),     /* nd_lit */
12094                                   len,                          /* nd_nth */
12095                                   lex_lastline);                /* nd_orig */
12096     nd_set_line(lex_strterm, ruby_sourceline);
12097     ripper_flush(parser);
12098     return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12099 }
12100 
12101 static void
12102 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12103 {
12104     VALUE line;
12105 
12106     line = here->nd_orig;
12107     lex_lastline = line;
12108     lex_pbeg = RSTRING_PTR(line);
12109     lex_pend = lex_pbeg + RSTRING_LEN(line);
12110     lex_p = lex_pbeg + here->nd_nth;
12111     heredoc_end = ruby_sourceline;
12112     ruby_sourceline = nd_line(here);
12113     dispose_string(here->nd_lit);
12114     rb_gc_force_recycle((VALUE)here);
12115     ripper_flush(parser);
12116 }
12117 
12118 static int
12119 parser_whole_match_p(struct parser_params *parser,
12120     const char *eos, long len, int indent)
12121 {
12122     const char *p = lex_pbeg;
12123     long n;
12124 
12125     if (indent) {
12126         while (*p && ISSPACE(*p)) p++;
12127     }
12128     n = lex_pend - (p + len);
12129     if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12130     return strncmp(eos, p, len) == 0;
12131 }
12132 
12133 static int
12134 parser_here_document(struct parser_params *parser, NODE *here)
12135 {
12136     int c, func, indent = 0;
12137     const char *eos, *p, *pend;
12138     long len;
12139     VALUE str = 0;
12140     rb_encoding *enc = parser->enc;
12141 
12142     eos = RSTRING_PTR(here->nd_lit);
12143     len = RSTRING_LEN(here->nd_lit) - 1;
12144     indent = (func = *eos++) & STR_FUNC_INDENT;
12145 
12146     if ((c = nextc()) == -1) {
12147       error:
12148         compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12149 #ifdef RIPPER
12150         if (NIL_P(parser->delayed)) {
12151             ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12152         }
12153         else {
12154             if (str ||
12155                 ((len = lex_p - parser->tokp) > 0 &&
12156                  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12157                 rb_str_append(parser->delayed, str);
12158             }
12159             ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12160         }
12161         lex_goto_eol(parser);
12162 #endif
12163       restore:
12164         heredoc_restore(lex_strterm);
12165         lex_strterm = 0;
12166         return 0;
12167     }
12168     if (was_bol() && whole_match_p(eos, len, indent)) {
12169         heredoc_restore(lex_strterm);
12170         return tSTRING_END;
12171     }
12172 
12173     if (!(func & STR_FUNC_EXPAND)) {
12174         do {
12175             p = RSTRING_PTR(lex_lastline);
12176             pend = lex_pend;
12177             if (pend > p) {
12178                 switch (pend[-1]) {
12179                   case '\n':
12180                     if (--pend == p || pend[-1] != '\r') {
12181                         pend++;
12182                         break;
12183                     }
12184                   case '\r':
12185                     --pend;
12186                 }
12187             }
12188             if (str)
12189                 rb_str_cat(str, p, pend - p);
12190             else
12191                 str = STR_NEW(p, pend - p);
12192             if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12193             lex_goto_eol(parser);
12194             if (nextc() == -1) {
12195                 if (str) dispose_string(str);
12196                 goto error;
12197             }
12198         } while (!whole_match_p(eos, len, indent));
12199     }
12200     else {
12201         /*      int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12202         newtok();
12203         if (c == '#') {
12204             switch (c = nextc()) {
12205               case '$':
12206               case '@':
12207                 pushback(c);
12208                 return tSTRING_DVAR;
12209               case '{':
12210                 return tSTRING_DBEG;
12211             }
12212             tokadd('#');
12213         }
12214         do {
12215             pushback(c);
12216             if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12217                 if (parser->eofp) goto error;
12218                 goto restore;
12219             }
12220             if (c != '\n') {
12221                 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12222                 return tSTRING_CONTENT;
12223             }
12224             tokadd(nextc());
12225             /*      if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12226             if ((c = nextc()) == -1) goto error;
12227         } while (!whole_match_p(eos, len, indent));
12228         str = STR_NEW3(tok(), toklen(), enc, func);
12229     }
12230 #ifdef RIPPER
12231     if (!NIL_P(parser->delayed))
12232         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12233     lex_goto_eol(parser);
12234     ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12235 #endif
12236     heredoc_restore(lex_strterm);
12237     lex_strterm = NEW_STRTERM(-1, 0, 0);
12238     set_yylval_str(str);
12239     return tSTRING_CONTENT;
12240 }
12241 
12242 #include "lex.c"
12243 
12244 static void
12245 arg_ambiguous_gen(struct parser_params *parser)
12246 {
12247 #ifndef RIPPER
12248     rb_warning0("ambiguous first argument; put parentheses or even spaces");
12249 #else
12250     dispatch0(arg_ambiguous);
12251 #endif
12252 }
12253 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12254 
12255 static ID
12256 formal_argument_gen(struct parser_params *parser, ID lhs)
12257 {
12258 #ifndef RIPPER
12259     if (!is_local_id(lhs))
12260         yyerror("formal argument must be local variable");
12261 #endif
12262     shadowing_lvar(lhs);
12263     return lhs;
12264 }
12265 
12266 static int
12267 lvar_defined_gen(struct parser_params *parser, ID id)
12268 {
12269     return (dyna_in_block() && dvar_defined(id)) || local_id(id);
12270 }
12271 
12272 /* emacsen -*- hack */
12273 static long
12274 parser_encode_length(struct parser_params *parser, const char *name, long len)
12275 {
12276     long nlen;
12277 
12278     if (len > 5 && name[nlen = len - 5] == '-') {
12279         if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12280             return nlen;
12281     }
12282     if (len > 4 && name[nlen = len - 4] == '-') {
12283         if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12284             return nlen;
12285         if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12286             !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12287             /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
12288             return nlen;
12289     }
12290     return len;
12291 }
12292 
12293 static void
12294 parser_set_encode(struct parser_params *parser, const char *name)
12295 {
12296     int idx = rb_enc_find_index(name);
12297     rb_encoding *enc;
12298     VALUE excargs[3];
12299 
12300     if (idx < 0) {
12301         VALUE rb_make_backtrace(void);
12302         VALUE rb_make_exception(int, VALUE*);
12303 
12304         excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12305       error:
12306         excargs[0] = rb_eArgError;
12307         excargs[2] = rb_make_backtrace();
12308         rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12309         rb_exc_raise(rb_make_exception(3, excargs));
12310     }
12311     enc = rb_enc_from_index(idx);
12312     if (!rb_enc_asciicompat(enc)) {
12313         excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12314         goto error;
12315     }
12316     parser->enc = enc;
12317 #ifndef RIPPER
12318     if (ruby_debug_lines) {
12319         long i, n = RARRAY_LEN(ruby_debug_lines);
12320         const VALUE *p = RARRAY_PTR(ruby_debug_lines);
12321         for (i = 0; i < n; ++i) {
12322             rb_enc_associate_index(*p, idx);
12323         }
12324     }
12325 #endif
12326 }
12327 
12328 static int
12329 comment_at_top(struct parser_params *parser)
12330 {
12331     const char *p = lex_pbeg, *pend = lex_p - 1;
12332     if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12333     while (p < pend) {
12334         if (!ISSPACE(*p)) return 0;
12335         p++;
12336     }
12337     return 1;
12338 }
12339 
12340 #ifndef RIPPER
12341 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12342 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12343 
12344 static void
12345 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12346 {
12347     if (!comment_at_top(parser)) {
12348         return;
12349     }
12350     parser_set_encode(parser, val);
12351 }
12352 
12353 struct magic_comment {
12354     const char *name;
12355     rb_magic_comment_setter_t func;
12356     rb_magic_comment_length_t length;
12357 };
12358 
12359 static const struct magic_comment magic_comments[] = {
12360     {"coding", magic_comment_encoding, parser_encode_length},
12361     {"encoding", magic_comment_encoding, parser_encode_length},
12362 };
12363 #endif
12364 
12365 static const char *
12366 magic_comment_marker(const char *str, long len)
12367 {
12368     long i = 2;
12369 
12370     while (i < len) {
12371         switch (str[i]) {
12372           case '-':
12373             if (str[i-1] == '*' && str[i-2] == '-') {
12374                 return str + i + 1;
12375             }
12376             i += 2;
12377             break;
12378           case '*':
12379             if (i + 1 >= len) return 0;
12380             if (str[i+1] != '-') {
12381                 i += 4;
12382             }
12383             else if (str[i-1] != '-') {
12384                 i += 2;
12385             }
12386             else {
12387                 return str + i + 2;
12388             }
12389             break;
12390           default:
12391             i += 3;
12392             break;
12393         }
12394     }
12395     return 0;
12396 }
12397 
12398 static int
12399 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12400 {
12401     VALUE name = 0, val = 0;
12402     const char *beg, *end, *vbeg, *vend;
12403 #define str_copy(_s, _p, _n) ((_s) \
12404         ? (rb_str_resize((_s), (_n)), \
12405            MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12406         : ((_s) = STR_NEW((_p), (_n))))
12407 
12408     if (len <= 7) return FALSE;
12409     if (!(beg = magic_comment_marker(str, len))) return FALSE;
12410     if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12411     str = beg;
12412     len = end - beg - 3;
12413 
12414     /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
12415     while (len > 0) {
12416 #ifndef RIPPER
12417         const struct magic_comment *p = magic_comments;
12418 #endif
12419         char *s;
12420         int i;
12421         long n = 0;
12422 
12423         for (; len > 0 && *str; str++, --len) {
12424             switch (*str) {
12425               case '\'': case '"': case ':': case ';':
12426                 continue;
12427             }
12428             if (!ISSPACE(*str)) break;
12429         }
12430         for (beg = str; len > 0; str++, --len) {
12431             switch (*str) {
12432               case '\'': case '"': case ':': case ';':
12433                 break;
12434               default:
12435                 if (ISSPACE(*str)) break;
12436                 continue;
12437             }
12438             break;
12439         }
12440         for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12441         if (!len) break;
12442         if (*str != ':') continue;
12443 
12444         do str++; while (--len > 0 && ISSPACE(*str));
12445         if (!len) break;
12446         if (*str == '"') {
12447             for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12448                 if (*str == '\\') {
12449                     --len;
12450                     ++str;
12451                 }
12452             }
12453             vend = str;
12454             if (len) {
12455                 --len;
12456                 ++str;
12457             }
12458         }
12459         else {
12460             for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12461             vend = str;
12462         }
12463         while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12464 
12465         n = end - beg;
12466         str_copy(name, beg, n);
12467         s = RSTRING_PTR(name);
12468         for (i = 0; i < n; ++i) {
12469             if (s[i] == '-') s[i] = '_';
12470         }
12471 #ifndef RIPPER
12472         do {
12473             if (STRNCASECMP(p->name, s, n) == 0) {
12474                 n = vend - vbeg;
12475                 if (p->length) {
12476                     n = (*p->length)(parser, vbeg, n);
12477                 }
12478                 str_copy(val, vbeg, n);
12479                 (*p->func)(parser, s, RSTRING_PTR(val));
12480                 break;
12481             }
12482         } while (++p < magic_comments + numberof(magic_comments));
12483 #else
12484         dispatch2(magic_comment, name, val);
12485 #endif
12486     }
12487 
12488     return TRUE;
12489 }
12490 
12491 static void
12492 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12493 {
12494     int sep = 0;
12495     const char *beg = str;
12496     VALUE s;
12497 
12498     for (;;) {
12499         if (send - str <= 6) return;
12500         switch (str[6]) {
12501           case 'C': case 'c': str += 6; continue;
12502           case 'O': case 'o': str += 5; continue;
12503           case 'D': case 'd': str += 4; continue;
12504           case 'I': case 'i': str += 3; continue;
12505           case 'N': case 'n': str += 2; continue;
12506           case 'G': case 'g': str += 1; continue;
12507           case '=': case ':':
12508             sep = 1;
12509             str += 6;
12510             break;
12511           default:
12512             str += 6;
12513             if (ISSPACE(*str)) break;
12514             continue;
12515         }
12516         if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12517     }
12518     for (;;) {
12519         do {
12520             if (++str >= send) return;
12521         } while (ISSPACE(*str));
12522         if (sep) break;
12523         if (*str != '=' && *str != ':') return;
12524         sep = 1;
12525         str++;
12526     }
12527     beg = str;
12528     while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12529     s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12530     parser_set_encode(parser, RSTRING_PTR(s));
12531     rb_str_resize(s, 0);
12532 }
12533 
12534 static void
12535 parser_prepare(struct parser_params *parser)
12536 {
12537     int c = nextc();
12538     switch (c) {
12539       case '#':
12540         if (peek('!')) parser->has_shebang = 1;
12541         break;
12542       case 0xef:                /* UTF-8 BOM marker */
12543         if (lex_pend - lex_p >= 2 &&
12544             (unsigned char)lex_p[0] == 0xbb &&
12545             (unsigned char)lex_p[1] == 0xbf) {
12546             parser->enc = rb_utf8_encoding();
12547             lex_p += 2;
12548             lex_pbeg = lex_p;
12549             return;
12550         }
12551         break;
12552       case EOF:
12553         return;
12554     }
12555     pushback(c);
12556     parser->enc = rb_enc_get(lex_lastline);
12557 }
12558 
12559 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12560 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12561 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12562 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12563 
12564 #ifndef RIPPER
12565 #define ambiguous_operator(op, syn) ( \
12566     rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12567     rb_warning0("even though it seems like "syn""))
12568 #else
12569 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12570 #endif
12571 #define warn_balanced(op, syn) \
12572     (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12573      last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12574      last_state != EXPR_ENDARG && \
12575      space_seen && !ISSPACE(c) && \
12576      (ambiguous_operator(op, syn), 0))
12577 
12578 static int
12579 parser_yylex(struct parser_params *parser)
12580 {
12581     register int c;
12582     int space_seen = 0;
12583     int cmd_state;
12584     enum lex_state_e last_state;
12585     rb_encoding *enc;
12586     int mb;
12587 #ifdef RIPPER
12588     int fallthru = FALSE;
12589 #endif
12590 
12591     if (lex_strterm) {
12592         int token;
12593         if (nd_type(lex_strterm) == NODE_HEREDOC) {
12594             token = here_document(lex_strterm);
12595             if (token == tSTRING_END) {
12596                 lex_strterm = 0;
12597                 lex_state = EXPR_END;
12598             }
12599         }
12600         else {
12601             token = parse_string(lex_strterm);
12602             if (token == tSTRING_END || token == tREGEXP_END) {
12603                 rb_gc_force_recycle((VALUE)lex_strterm);
12604                 lex_strterm = 0;
12605                 lex_state = EXPR_END;
12606             }
12607         }
12608         return token;
12609     }
12610     cmd_state = command_start;
12611     command_start = FALSE;
12612   retry:
12613     last_state = lex_state;
12614     switch (c = nextc()) {
12615       case '\0':                /* NUL */
12616       case '\004':              /* ^D */
12617       case '\032':              /* ^Z */
12618       case -1:                  /* end of script. */
12619         return 0;
12620 
12621         /* white spaces */
12622       case ' ': case '\t': case '\f': case '\r':
12623       case '\13': /* '\v' */
12624         space_seen = 1;
12625 #ifdef RIPPER
12626         while ((c = nextc())) {
12627             switch (c) {
12628               case ' ': case '\t': case '\f': case '\r':
12629               case '\13': /* '\v' */
12630                 break;
12631               default:
12632                 goto outofloop;
12633             }
12634         }
12635       outofloop:
12636         pushback(c);
12637         ripper_dispatch_scan_event(parser, tSP);
12638 #endif
12639         goto retry;
12640 
12641       case '#':         /* it's a comment */
12642         /* no magic_comment in shebang line */
12643         if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12644             if (comment_at_top(parser)) {
12645                 set_file_encoding(parser, lex_p, lex_pend);
12646             }
12647         }
12648         lex_p = lex_pend;
12649 #ifdef RIPPER
12650         ripper_dispatch_scan_event(parser, tCOMMENT);
12651         fallthru = TRUE;
12652 #endif
12653         /* fall through */
12654       case '\n':
12655         switch (lex_state) {
12656           case EXPR_BEG:
12657           case EXPR_FNAME:
12658           case EXPR_DOT:
12659           case EXPR_CLASS:
12660           case EXPR_VALUE:
12661 #ifdef RIPPER
12662             if (!fallthru) {
12663                 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12664             }
12665             fallthru = FALSE;
12666 #endif
12667             goto retry;
12668           default:
12669             break;
12670         }
12671         while ((c = nextc())) {
12672             switch (c) {
12673               case ' ': case '\t': case '\f': case '\r':
12674               case '\13': /* '\v' */
12675                 space_seen = 1;
12676                 break;
12677               case '.': {
12678                   if ((c = nextc()) != '.') {
12679                       pushback(c);
12680                       pushback('.');
12681                       goto retry;
12682                   }
12683               }
12684               default:
12685                 --ruby_sourceline;
12686                 lex_nextline = lex_lastline;
12687               case -1:          /* EOF no decrement*/
12688                 lex_goto_eol(parser);
12689 #ifdef RIPPER
12690                 if (c != -1) {
12691                     parser->tokp = lex_p;
12692                 }
12693 #endif
12694                 goto normal_newline;
12695             }
12696         }
12697       normal_newline:
12698         command_start = TRUE;
12699         lex_state = EXPR_BEG;
12700         return '\n';
12701 
12702       case '*':
12703         if ((c = nextc()) == '*') {
12704             if ((c = nextc()) == '=') {
12705                 set_yylval_id(tPOW);
12706                 lex_state = EXPR_BEG;
12707                 return tOP_ASGN;
12708             }
12709             pushback(c);
12710             c = tPOW;
12711         }
12712         else {
12713             if (c == '=') {
12714                 set_yylval_id('*');
12715                 lex_state = EXPR_BEG;
12716                 return tOP_ASGN;
12717             }
12718             pushback(c);
12719             if (IS_SPCARG(c)) {
12720                 rb_warning0("`*' interpreted as argument prefix");
12721                 c = tSTAR;
12722             }
12723             else if (IS_BEG()) {
12724                 c = tSTAR;
12725             }
12726             else {
12727                 warn_balanced("*", "argument prefix");
12728                 c = '*';
12729             }
12730         }
12731         switch (lex_state) {
12732           case EXPR_FNAME: case EXPR_DOT:
12733             lex_state = EXPR_ARG; break;
12734           default:
12735             lex_state = EXPR_BEG; break;
12736         }
12737         return c;
12738 
12739       case '!':
12740         c = nextc();
12741         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12742             lex_state = EXPR_ARG;
12743             if (c == '@') {
12744                 return '!';
12745             }
12746         }
12747         else {
12748             lex_state = EXPR_BEG;
12749         }
12750         if (c == '=') {
12751             return tNEQ;
12752         }
12753         if (c == '~') {
12754             return tNMATCH;
12755         }
12756         pushback(c);
12757         return '!';
12758 
12759       case '=':
12760         if (was_bol()) {
12761             /* skip embedded rd document */
12762             if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12763 #ifdef RIPPER
12764                 int first_p = TRUE;
12765 
12766                 lex_goto_eol(parser);
12767                 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12768 #endif
12769                 for (;;) {
12770                     lex_goto_eol(parser);
12771 #ifdef RIPPER
12772                     if (!first_p) {
12773                         ripper_dispatch_scan_event(parser, tEMBDOC);
12774                     }
12775                     first_p = FALSE;
12776 #endif
12777                     c = nextc();
12778                     if (c == -1) {
12779                         compile_error(PARSER_ARG "embedded document meets end of file");
12780                         return 0;
12781                     }
12782                     if (c != '=') continue;
12783                     if (strncmp(lex_p, "end", 3) == 0 &&
12784                         (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12785                         break;
12786                     }
12787                 }
12788                 lex_goto_eol(parser);
12789 #ifdef RIPPER
12790                 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12791 #endif
12792                 goto retry;
12793             }
12794         }
12795 
12796         switch (lex_state) {
12797           case EXPR_FNAME: case EXPR_DOT:
12798             lex_state = EXPR_ARG; break;
12799           default:
12800             lex_state = EXPR_BEG; break;
12801         }
12802         if ((c = nextc()) == '=') {
12803             if ((c = nextc()) == '=') {
12804                 return tEQQ;
12805             }
12806             pushback(c);
12807             return tEQ;
12808         }
12809         if (c == '~') {
12810             return tMATCH;
12811         }
12812         else if (c == '>') {
12813             return tASSOC;
12814         }
12815         pushback(c);
12816         return '=';
12817 
12818       case '<':
12819         last_state = lex_state;
12820         c = nextc();
12821         if (c == '<' &&
12822             lex_state != EXPR_DOT &&
12823             lex_state != EXPR_CLASS &&
12824             !IS_END() &&
12825             (!IS_ARG() || space_seen)) {
12826             int token = heredoc_identifier();
12827             if (token) return token;
12828         }
12829         switch (lex_state) {
12830           case EXPR_FNAME: case EXPR_DOT:
12831             lex_state = EXPR_ARG; break;
12832           default:
12833             lex_state = EXPR_BEG; break;
12834         }
12835         if (c == '=') {
12836             if ((c = nextc()) == '>') {
12837                 return tCMP;
12838             }
12839             pushback(c);
12840             return tLEQ;
12841         }
12842         if (c == '<') {
12843             if ((c = nextc()) == '=') {
12844                 set_yylval_id(tLSHFT);
12845                 lex_state = EXPR_BEG;
12846                 return tOP_ASGN;
12847             }
12848             pushback(c);
12849             warn_balanced("<<", "here document");
12850             return tLSHFT;
12851         }
12852         pushback(c);
12853         return '<';
12854 
12855       case '>':
12856         switch (lex_state) {
12857           case EXPR_FNAME: case EXPR_DOT:
12858             lex_state = EXPR_ARG; break;
12859           default:
12860             lex_state = EXPR_BEG; break;
12861         }
12862         if ((c = nextc()) == '=') {
12863             return tGEQ;
12864         }
12865         if (c == '>') {
12866             if ((c = nextc()) == '=') {
12867                 set_yylval_id(tRSHFT);
12868                 lex_state = EXPR_BEG;
12869                 return tOP_ASGN;
12870             }
12871             pushback(c);
12872             return tRSHFT;
12873         }
12874         pushback(c);
12875         return '>';
12876 
12877       case '"':
12878         lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12879         return tSTRING_BEG;
12880 
12881       case '`':
12882         if (lex_state == EXPR_FNAME) {
12883             lex_state = EXPR_ENDFN;
12884             return c;
12885         }
12886         if (lex_state == EXPR_DOT) {
12887             if (cmd_state)
12888                 lex_state = EXPR_CMDARG;
12889             else
12890                 lex_state = EXPR_ARG;
12891             return c;
12892         }
12893         lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12894         return tXSTRING_BEG;
12895 
12896       case '\'':
12897         lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12898         return tSTRING_BEG;
12899 
12900       case '?':
12901         if (IS_END()) {
12902             lex_state = EXPR_VALUE;
12903             return '?';
12904         }
12905         c = nextc();
12906         if (c == -1) {
12907             compile_error(PARSER_ARG "incomplete character syntax");
12908             return 0;
12909         }
12910         if (rb_enc_isspace(c, parser->enc)) {
12911             if (!IS_ARG()) {
12912                 int c2 = 0;
12913                 switch (c) {
12914                   case ' ':
12915                     c2 = 's';
12916                     break;
12917                   case '\n':
12918                     c2 = 'n';
12919                     break;
12920                   case '\t':
12921                     c2 = 't';
12922                     break;
12923                   case '\v':
12924                     c2 = 'v';
12925                     break;
12926                   case '\r':
12927                     c2 = 'r';
12928                     break;
12929                   case '\f':
12930                     c2 = 'f';
12931                     break;
12932                 }
12933                 if (c2) {
12934                     rb_warnI("invalid character syntax; use ?\\%c", c2);
12935                 }
12936             }
12937           ternary:
12938             pushback(c);
12939             lex_state = EXPR_VALUE;
12940             return '?';
12941         }
12942         newtok();
12943         enc = parser->enc;
12944         if (!parser_isascii()) {
12945             if (tokadd_mbchar(c) == -1) return 0;
12946         }
12947         else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12948                  lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12949             goto ternary;
12950         }
12951         else if (c == '\\') {
12952             if (peek('u')) {
12953                 nextc();
12954                 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12955                 if (0x80 <= c) {
12956                     tokaddmbc(c, enc);
12957                 }
12958                 else {
12959                     tokadd(c);
12960                 }
12961             }
12962             else {
12963                 c = read_escape(0, &enc);
12964                 tokadd(c);
12965             }
12966         }
12967         else {
12968             tokadd(c);
12969         }
12970         tokfix();
12971         set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
12972         lex_state = EXPR_END;
12973         return tCHAR;
12974 
12975       case '&':
12976         if ((c = nextc()) == '&') {
12977             lex_state = EXPR_BEG;
12978             if ((c = nextc()) == '=') {
12979                 set_yylval_id(tANDOP);
12980                 lex_state = EXPR_BEG;
12981                 return tOP_ASGN;
12982             }
12983             pushback(c);
12984             return tANDOP;
12985         }
12986         else if (c == '=') {
12987             set_yylval_id('&');
12988             lex_state = EXPR_BEG;
12989             return tOP_ASGN;
12990         }
12991         pushback(c);
12992         if (IS_SPCARG(c)) {
12993             rb_warning0("`&' interpreted as argument prefix");
12994             c = tAMPER;
12995         }
12996         else if (IS_BEG()) {
12997             c = tAMPER;
12998         }
12999         else {
13000             warn_balanced("&", "argument prefix");
13001             c = '&';
13002         }
13003         switch (lex_state) {
13004           case EXPR_FNAME: case EXPR_DOT:
13005             lex_state = EXPR_ARG; break;
13006           default:
13007             lex_state = EXPR_BEG;
13008         }
13009         return c;
13010 
13011       case '|':
13012         if ((c = nextc()) == '|') {
13013             lex_state = EXPR_BEG;
13014             if ((c = nextc()) == '=') {
13015                 set_yylval_id(tOROP);
13016                 lex_state = EXPR_BEG;
13017                 return tOP_ASGN;
13018             }
13019             pushback(c);
13020             return tOROP;
13021         }
13022         if (c == '=') {
13023             set_yylval_id('|');
13024             lex_state = EXPR_BEG;
13025             return tOP_ASGN;
13026         }
13027         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13028             lex_state = EXPR_ARG;
13029         }
13030         else {
13031             lex_state = EXPR_BEG;
13032         }
13033         pushback(c);
13034         return '|';
13035 
13036       case '+':
13037         c = nextc();
13038         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13039             lex_state = EXPR_ARG;
13040             if (c == '@') {
13041                 return tUPLUS;
13042             }
13043             pushback(c);
13044             return '+';
13045         }
13046         if (c == '=') {
13047             set_yylval_id('+');
13048             lex_state = EXPR_BEG;
13049             return tOP_ASGN;
13050         }
13051         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13052             lex_state = EXPR_BEG;
13053             pushback(c);
13054             if (c != -1 && ISDIGIT(c)) {
13055                 c = '+';
13056                 goto start_num;
13057             }
13058             return tUPLUS;
13059         }
13060         lex_state = EXPR_BEG;
13061         pushback(c);
13062         warn_balanced("+", "unary operator");
13063         return '+';
13064 
13065       case '-':
13066         c = nextc();
13067         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13068             lex_state = EXPR_ARG;
13069             if (c == '@') {
13070                 return tUMINUS;
13071             }
13072             pushback(c);
13073             return '-';
13074         }
13075         if (c == '=') {
13076             set_yylval_id('-');
13077             lex_state = EXPR_BEG;
13078             return tOP_ASGN;
13079         }
13080         if (c == '>') {
13081             lex_state = EXPR_ARG;
13082             return tLAMBDA;
13083         }
13084         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13085             lex_state = EXPR_BEG;
13086             pushback(c);
13087             if (c != -1 && ISDIGIT(c)) {
13088                 return tUMINUS_NUM;
13089             }
13090             return tUMINUS;
13091         }
13092         lex_state = EXPR_BEG;
13093         pushback(c);
13094         warn_balanced("-", "unary operator");
13095         return '-';
13096 
13097       case '.':
13098         lex_state = EXPR_BEG;
13099         if ((c = nextc()) == '.') {
13100             if ((c = nextc()) == '.') {
13101                 return tDOT3;
13102             }
13103             pushback(c);
13104             return tDOT2;
13105         }
13106         pushback(c);
13107         if (c != -1 && ISDIGIT(c)) {
13108             yyerror("no .<digit> floating literal anymore; put 0 before dot");
13109         }
13110         lex_state = EXPR_DOT;
13111         return '.';
13112 
13113       start_num:
13114       case '0': case '1': case '2': case '3': case '4':
13115       case '5': case '6': case '7': case '8': case '9':
13116         {
13117             int is_float, seen_point, seen_e, nondigit;
13118 
13119             is_float = seen_point = seen_e = nondigit = 0;
13120             lex_state = EXPR_END;
13121             newtok();
13122             if (c == '-' || c == '+') {
13123                 tokadd(c);
13124                 c = nextc();
13125             }
13126             if (c == '0') {
13127 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13128                 int start = toklen();
13129                 c = nextc();
13130                 if (c == 'x' || c == 'X') {
13131                     /* hexadecimal */
13132                     c = nextc();
13133                     if (c != -1 && ISXDIGIT(c)) {
13134                         do {
13135                             if (c == '_') {
13136                                 if (nondigit) break;
13137                                 nondigit = c;
13138                                 continue;
13139                             }
13140                             if (!ISXDIGIT(c)) break;
13141                             nondigit = 0;
13142                             tokadd(c);
13143                         } while ((c = nextc()) != -1);
13144                     }
13145                     pushback(c);
13146                     tokfix();
13147                     if (toklen() == start) {
13148                         no_digits();
13149                     }
13150                     else if (nondigit) goto trailing_uc;
13151                     set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13152                     return tINTEGER;
13153                 }
13154                 if (c == 'b' || c == 'B') {
13155                     /* binary */
13156                     c = nextc();
13157                     if (c == '0' || c == '1') {
13158                         do {
13159                             if (c == '_') {
13160                                 if (nondigit) break;
13161                                 nondigit = c;
13162                                 continue;
13163                             }
13164                             if (c != '0' && c != '1') break;
13165                             nondigit = 0;
13166                             tokadd(c);
13167                         } while ((c = nextc()) != -1);
13168                     }
13169                     pushback(c);
13170                     tokfix();
13171                     if (toklen() == start) {
13172                         no_digits();
13173                     }
13174                     else if (nondigit) goto trailing_uc;
13175                     set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13176                     return tINTEGER;
13177                 }
13178                 if (c == 'd' || c == 'D') {
13179                     /* decimal */
13180                     c = nextc();
13181                     if (c != -1 && ISDIGIT(c)) {
13182                         do {
13183                             if (c == '_') {
13184                                 if (nondigit) break;
13185                                 nondigit = c;
13186                                 continue;
13187                             }
13188                             if (!ISDIGIT(c)) break;
13189                             nondigit = 0;
13190                             tokadd(c);
13191                         } while ((c = nextc()) != -1);
13192                     }
13193                     pushback(c);
13194                     tokfix();
13195                     if (toklen() == start) {
13196                         no_digits();
13197                     }
13198                     else if (nondigit) goto trailing_uc;
13199                     set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13200                     return tINTEGER;
13201                 }
13202                 if (c == '_') {
13203                     /* 0_0 */
13204                     goto octal_number;
13205                 }
13206                 if (c == 'o' || c == 'O') {
13207                     /* prefixed octal */
13208                     c = nextc();
13209                     if (c == -1 || c == '_' || !ISDIGIT(c)) {
13210                         no_digits();
13211                     }
13212                 }
13213                 if (c >= '0' && c <= '7') {
13214                     /* octal */
13215                   octal_number:
13216                     do {
13217                         if (c == '_') {
13218                             if (nondigit) break;
13219                             nondigit = c;
13220                             continue;
13221                         }
13222                         if (c < '0' || c > '9') break;
13223                         if (c > '7') goto invalid_octal;
13224                         nondigit = 0;
13225                         tokadd(c);
13226                     } while ((c = nextc()) != -1);
13227                     if (toklen() > start) {
13228                         pushback(c);
13229                         tokfix();
13230                         if (nondigit) goto trailing_uc;
13231                         set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13232                         return tINTEGER;
13233                     }
13234                     if (nondigit) {
13235                         pushback(c);
13236                         goto trailing_uc;
13237                     }
13238                 }
13239                 if (c > '7' && c <= '9') {
13240                   invalid_octal:
13241                     yyerror("Invalid octal digit");
13242                 }
13243                 else if (c == '.' || c == 'e' || c == 'E') {
13244                     tokadd('0');
13245                 }
13246                 else {
13247                     pushback(c);
13248                     set_yylval_literal(INT2FIX(0));
13249                     return tINTEGER;
13250                 }
13251             }
13252 
13253             for (;;) {
13254                 switch (c) {
13255                   case '0': case '1': case '2': case '3': case '4':
13256                   case '5': case '6': case '7': case '8': case '9':
13257                     nondigit = 0;
13258                     tokadd(c);
13259                     break;
13260 
13261                   case '.':
13262                     if (nondigit) goto trailing_uc;
13263                     if (seen_point || seen_e) {
13264                         goto decode_num;
13265                     }
13266                     else {
13267                         int c0 = nextc();
13268                         if (c0 == -1 || !ISDIGIT(c0)) {
13269                             pushback(c0);
13270                             goto decode_num;
13271                         }
13272                         c = c0;
13273                     }
13274                     tokadd('.');
13275                     tokadd(c);
13276                     is_float++;
13277                     seen_point++;
13278                     nondigit = 0;
13279                     break;
13280 
13281                   case 'e':
13282                   case 'E':
13283                     if (nondigit) {
13284                         pushback(c);
13285                         c = nondigit;
13286                         goto decode_num;
13287                     }
13288                     if (seen_e) {
13289                         goto decode_num;
13290                     }
13291                     tokadd(c);
13292                     seen_e++;
13293                     is_float++;
13294                     nondigit = c;
13295                     c = nextc();
13296                     if (c != '-' && c != '+') continue;
13297                     tokadd(c);
13298                     nondigit = c;
13299                     break;
13300 
13301                   case '_':     /* `_' in number just ignored */
13302                     if (nondigit) goto decode_num;
13303                     nondigit = c;
13304                     break;
13305 
13306                   default:
13307                     goto decode_num;
13308                 }
13309                 c = nextc();
13310             }
13311 
13312           decode_num:
13313             pushback(c);
13314             if (nondigit) {
13315                 char tmp[30];
13316               trailing_uc:
13317                 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13318                 yyerror(tmp);
13319             }
13320             tokfix();
13321             if (is_float) {
13322                 double d = strtod(tok(), 0);
13323                 if (errno == ERANGE) {
13324                     rb_warningS("Float %s out of range", tok());
13325                     errno = 0;
13326                 }
13327                 set_yylval_literal(DBL2NUM(d));
13328                 return tFLOAT;
13329             }
13330             set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13331             return tINTEGER;
13332         }
13333 
13334       case ')':
13335       case ']':
13336         paren_nest--;
13337       case '}':
13338         COND_LEXPOP();
13339         CMDARG_LEXPOP();
13340         if (c == ')')
13341             lex_state = EXPR_ENDFN;
13342         else
13343             lex_state = EXPR_ENDARG;
13344         return c;
13345 
13346       case ':':
13347         c = nextc();
13348         if (c == ':') {
13349             if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13350                 lex_state = EXPR_BEG;
13351                 return tCOLON3;
13352             }
13353             lex_state = EXPR_DOT;
13354             return tCOLON2;
13355         }
13356         if (IS_END() || ISSPACE(c)) {
13357             pushback(c);
13358             warn_balanced(":", "symbol literal");
13359             lex_state = EXPR_BEG;
13360             return ':';
13361         }
13362         switch (c) {
13363           case '\'':
13364             lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13365             break;
13366           case '"':
13367             lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13368             break;
13369           default:
13370             pushback(c);
13371             break;
13372         }
13373         lex_state = EXPR_FNAME;
13374         return tSYMBEG;
13375 
13376       case '/':
13377         if (IS_BEG()) {
13378             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13379             return tREGEXP_BEG;
13380         }
13381         if ((c = nextc()) == '=') {
13382             set_yylval_id('/');
13383             lex_state = EXPR_BEG;
13384             return tOP_ASGN;
13385         }
13386         pushback(c);
13387         if (IS_SPCARG(c)) {
13388             arg_ambiguous();
13389             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13390             return tREGEXP_BEG;
13391         }
13392         switch (lex_state) {
13393           case EXPR_FNAME: case EXPR_DOT:
13394             lex_state = EXPR_ARG; break;
13395           default:
13396             lex_state = EXPR_BEG; break;
13397         }
13398         warn_balanced("/", "regexp literal");
13399         return '/';
13400 
13401       case '^':
13402         if ((c = nextc()) == '=') {
13403             set_yylval_id('^');
13404             lex_state = EXPR_BEG;
13405             return tOP_ASGN;
13406         }
13407         switch (lex_state) {
13408           case EXPR_FNAME: case EXPR_DOT:
13409             lex_state = EXPR_ARG; break;
13410           default:
13411             lex_state = EXPR_BEG; break;
13412         }
13413         pushback(c);
13414         return '^';
13415 
13416       case ';':
13417         lex_state = EXPR_BEG;
13418         command_start = TRUE;
13419         return ';';
13420 
13421       case ',':
13422         lex_state = EXPR_BEG;
13423         return ',';
13424 
13425       case '~':
13426         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13427             if ((c = nextc()) != '@') {
13428                 pushback(c);
13429             }
13430             lex_state = EXPR_ARG;
13431         }
13432         else {
13433             lex_state = EXPR_BEG;
13434         }
13435         return '~';
13436 
13437       case '(':
13438         if (IS_BEG()) {
13439             c = tLPAREN;
13440         }
13441         else if (IS_SPCARG(-1)) {
13442             c = tLPAREN_ARG;
13443         }
13444         paren_nest++;
13445         COND_PUSH(0);
13446         CMDARG_PUSH(0);
13447         lex_state = EXPR_BEG;
13448         return c;
13449 
13450       case '[':
13451         paren_nest++;
13452         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13453             lex_state = EXPR_ARG;
13454             if ((c = nextc()) == ']') {
13455                 if ((c = nextc()) == '=') {
13456                     return tASET;
13457                 }
13458                 pushback(c);
13459                 return tAREF;
13460             }
13461             pushback(c);
13462             return '[';
13463         }
13464         else if (IS_BEG()) {
13465             c = tLBRACK;
13466         }
13467         else if (IS_ARG() && space_seen) {
13468             c = tLBRACK;
13469         }
13470         lex_state = EXPR_BEG;
13471         COND_PUSH(0);
13472         CMDARG_PUSH(0);
13473         return c;
13474 
13475       case '{':
13476         if (lpar_beg && lpar_beg == paren_nest) {
13477             lex_state = EXPR_BEG;
13478             lpar_beg = 0;
13479             --paren_nest;
13480             COND_PUSH(0);
13481             CMDARG_PUSH(0);
13482             return tLAMBEG;
13483         }
13484         if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13485             c = '{';          /* block (primary) */
13486         else if (lex_state == EXPR_ENDARG)
13487             c = tLBRACE_ARG;  /* block (expr) */
13488         else
13489             c = tLBRACE;      /* hash */
13490         COND_PUSH(0);
13491         CMDARG_PUSH(0);
13492         lex_state = EXPR_BEG;
13493         if (c != tLBRACE) command_start = TRUE;
13494         return c;
13495 
13496       case '\\':
13497         c = nextc();
13498         if (c == '\n') {
13499             space_seen = 1;
13500 #ifdef RIPPER
13501             ripper_dispatch_scan_event(parser, tSP);
13502 #endif
13503             goto retry; /* skip \\n */
13504         }
13505         pushback(c);
13506         return '\\';
13507 
13508       case '%':
13509         if (IS_BEG()) {
13510             int term;
13511             int paren;
13512 
13513             c = nextc();
13514           quotation:
13515             if (c == -1 || !ISALNUM(c)) {
13516                 term = c;
13517                 c = 'Q';
13518             }
13519             else {
13520                 term = nextc();
13521                 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13522                     yyerror("unknown type of %string");
13523                     return 0;
13524                 }
13525             }
13526             if (c == -1 || term == -1) {
13527                 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13528                 return 0;
13529             }
13530             paren = term;
13531             if (term == '(') term = ')';
13532             else if (term == '[') term = ']';
13533             else if (term == '{') term = '}';
13534             else if (term == '<') term = '>';
13535             else paren = 0;
13536 
13537             switch (c) {
13538               case 'Q':
13539                 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13540                 return tSTRING_BEG;
13541 
13542               case 'q':
13543                 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13544                 return tSTRING_BEG;
13545 
13546               case 'W':
13547                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13548                 do {c = nextc();} while (ISSPACE(c));
13549                 pushback(c);
13550                 return tWORDS_BEG;
13551 
13552               case 'w':
13553                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13554                 do {c = nextc();} while (ISSPACE(c));
13555                 pushback(c);
13556                 return tQWORDS_BEG;
13557 
13558               case 'x':
13559                 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13560                 return tXSTRING_BEG;
13561 
13562               case 'r':
13563                 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13564                 return tREGEXP_BEG;
13565 
13566               case 's':
13567                 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13568                 lex_state = EXPR_FNAME;
13569                 return tSYMBEG;
13570 
13571               default:
13572                 yyerror("unknown type of %string");
13573                 return 0;
13574             }
13575         }
13576         if ((c = nextc()) == '=') {
13577             set_yylval_id('%');
13578             lex_state = EXPR_BEG;
13579             return tOP_ASGN;
13580         }
13581         if (IS_SPCARG(c)) {
13582             goto quotation;
13583         }
13584         switch (lex_state) {
13585           case EXPR_FNAME: case EXPR_DOT:
13586             lex_state = EXPR_ARG; break;
13587           default:
13588             lex_state = EXPR_BEG; break;
13589         }
13590         pushback(c);
13591         warn_balanced("%%", "string literal");
13592         return '%';
13593 
13594       case '$':
13595         lex_state = EXPR_END;
13596         newtok();
13597         c = nextc();
13598         switch (c) {
13599           case '_':             /* $_: last read line string */
13600             c = nextc();
13601             if (parser_is_identchar()) {
13602                 tokadd('$');
13603                 tokadd('_');
13604                 break;
13605             }
13606             pushback(c);
13607             c = '_';
13608             /* fall through */
13609           case '~':             /* $~: match-data */
13610           case '*':             /* $*: argv */
13611           case '$':             /* $$: pid */
13612           case '?':             /* $?: last status */
13613           case '!':             /* $!: error string */
13614           case '@':             /* $@: error position */
13615           case '/':             /* $/: input record separator */
13616           case '\\':            /* $\: output record separator */
13617           case ';':             /* $;: field separator */
13618           case ',':             /* $,: output field separator */
13619           case '.':             /* $.: last read line number */
13620           case '=':             /* $=: ignorecase */
13621           case ':':             /* $:: load path */
13622           case '<':             /* $<: reading filename */
13623           case '>':             /* $>: default output handle */
13624           case '\"':            /* $": already loaded files */
13625             tokadd('$');
13626             tokadd(c);
13627             tokfix();
13628             set_yylval_name(rb_intern(tok()));
13629             return tGVAR;
13630 
13631           case '-':
13632             tokadd('$');
13633             tokadd(c);
13634             c = nextc();
13635             if (parser_is_identchar()) {
13636                 if (tokadd_mbchar(c) == -1) return 0;
13637             }
13638             else {
13639                 pushback(c);
13640             }
13641           gvar:
13642             tokfix();
13643             set_yylval_name(rb_intern(tok()));
13644             return tGVAR;
13645 
13646           case '&':             /* $&: last match */
13647           case '`':             /* $`: string before last match */
13648           case '\'':            /* $': string after last match */
13649           case '+':             /* $+: string matches last paren. */
13650             if (last_state == EXPR_FNAME) {
13651                 tokadd('$');
13652                 tokadd(c);
13653                 goto gvar;
13654             }
13655             set_yylval_node(NEW_BACK_REF(c));
13656             return tBACK_REF;
13657 
13658           case '1': case '2': case '3':
13659           case '4': case '5': case '6':
13660           case '7': case '8': case '9':
13661             tokadd('$');
13662             do {
13663                 tokadd(c);
13664                 c = nextc();
13665             } while (c != -1 && ISDIGIT(c));
13666             pushback(c);
13667             if (last_state == EXPR_FNAME) goto gvar;
13668             tokfix();
13669             set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13670             return tNTH_REF;
13671 
13672           default:
13673             if (!parser_is_identchar()) {
13674                 pushback(c);
13675                 return '$';
13676             }
13677           case '0':
13678             tokadd('$');
13679         }
13680         break;
13681 
13682       case '@':
13683         c = nextc();
13684         newtok();
13685         tokadd('@');
13686         if (c == '@') {
13687             tokadd('@');
13688             c = nextc();
13689         }
13690         if (c != -1 && ISDIGIT(c)) {
13691             if (tokidx == 1) {
13692                 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13693             }
13694             else {
13695                 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13696             }
13697             return 0;
13698         }
13699         if (!parser_is_identchar()) {
13700             pushback(c);
13701             return '@';
13702         }
13703         break;
13704 
13705       case '_':
13706         if (was_bol() && whole_match_p("__END__", 7, 0)) {
13707             ruby__end__seen = 1;
13708             parser->eofp = Qtrue;
13709 #ifndef RIPPER
13710             return -1;
13711 #else
13712             lex_goto_eol(parser);
13713             ripper_dispatch_scan_event(parser, k__END__);
13714             return 0;
13715 #endif
13716         }
13717         newtok();
13718         break;
13719 
13720       default:
13721         if (!parser_is_identchar()) {
13722             rb_compile_error(PARSER_ARG  "Invalid char `\\x%02X' in expression", c);
13723             goto retry;
13724         }
13725 
13726         newtok();
13727         break;
13728     }
13729 
13730     mb = ENC_CODERANGE_7BIT;
13731     do {
13732         if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13733         if (tokadd_mbchar(c) == -1) return 0;
13734         c = nextc();
13735     } while (parser_is_identchar());
13736     switch (tok()[0]) {
13737       case '@': case '$':
13738         pushback(c);
13739         break;
13740       default:
13741         if ((c == '!' || c == '?') && !peek('=')) {
13742             tokadd(c);
13743         }
13744         else {
13745             pushback(c);
13746         }
13747     }
13748     tokfix();
13749 
13750     {
13751         int result = 0;
13752 
13753         last_state = lex_state;
13754         switch (tok()[0]) {
13755           case '$':
13756             lex_state = EXPR_END;
13757             result = tGVAR;
13758             break;
13759           case '@':
13760             lex_state = EXPR_END;
13761             if (tok()[1] == '@')
13762                 result = tCVAR;
13763             else
13764                 result = tIVAR;
13765             break;
13766 
13767           default:
13768             if (toklast() == '!' || toklast() == '?') {
13769                 result = tFID;
13770             }
13771             else {
13772                 if (lex_state == EXPR_FNAME) {
13773                     if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13774                         (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
13775                         result = tIDENTIFIER;
13776                         tokadd(c);
13777                         tokfix();
13778                     }
13779                     else {
13780                         pushback(c);
13781                     }
13782                 }
13783                 if (result == 0 && ISUPPER(tok()[0])) {
13784                     result = tCONSTANT;
13785                 }
13786                 else {
13787                     result = tIDENTIFIER;
13788                 }
13789             }
13790 
13791             if ((lex_state == EXPR_BEG && !cmd_state) ||
13792                 IS_ARG()) {
13793                 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
13794                     lex_state = EXPR_BEG;
13795                     nextc();
13796                     set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13797                     return tLABEL;
13798                 }
13799             }
13800             if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13801                 const struct kwtable *kw;
13802 
13803                 /* See if it is a reserved word.  */
13804                 kw = rb_reserved_word(tok(), toklen());
13805                 if (kw) {
13806                     enum lex_state_e state = lex_state;
13807                     lex_state = kw->state;
13808                     if (state == EXPR_FNAME) {
13809                         set_yylval_name(rb_intern(kw->name));
13810                         return kw->id[0];
13811                     }
13812                     if (kw->id[0] == keyword_do) {
13813                         command_start = TRUE;
13814                         if (lpar_beg && lpar_beg == paren_nest) {
13815                             lpar_beg = 0;
13816                             --paren_nest;
13817                             return keyword_do_LAMBDA;
13818                         }
13819                         if (COND_P()) return keyword_do_cond;
13820                         if (CMDARG_P() && state != EXPR_CMDARG)
13821                             return keyword_do_block;
13822                         if (state == EXPR_ENDARG || state == EXPR_BEG)
13823                             return keyword_do_block;
13824                         return keyword_do;
13825                     }
13826                     if (state == EXPR_BEG || state == EXPR_VALUE)
13827                         return kw->id[0];
13828                     else {
13829                         if (kw->id[0] != kw->id[1])
13830                             lex_state = EXPR_BEG;
13831                         return kw->id[1];
13832                     }
13833                 }
13834             }
13835 
13836             if (IS_BEG() ||
13837                 lex_state == EXPR_DOT ||
13838                 IS_ARG()) {
13839                 if (cmd_state) {
13840                     lex_state = EXPR_CMDARG;
13841                 }
13842                 else {
13843                     lex_state = EXPR_ARG;
13844                 }
13845             }
13846             else if (lex_state == EXPR_FNAME) {
13847                 lex_state = EXPR_ENDFN;
13848             }
13849             else {
13850                 lex_state = EXPR_END;
13851             }
13852         }
13853         {
13854             ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13855 
13856             set_yylval_name(ident);
13857             if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
13858                 lex_state = EXPR_END;
13859             }
13860         }
13861         return result;
13862     }
13863 }
13864 
13865 #if YYPURE
13866 static int
13867 yylex(void *lval, void *p)
13868 #else
13869 yylex(void *p)
13870 #endif
13871 {
13872     struct parser_params *parser = (struct parser_params*)p;
13873     int t;
13874 
13875 #if YYPURE
13876     parser->parser_yylval = lval;
13877     parser->parser_yylval->val = Qundef;
13878 #endif
13879     t = parser_yylex(parser);
13880 #ifdef RIPPER
13881     if (!NIL_P(parser->delayed)) {
13882         ripper_dispatch_delayed_token(parser, t);
13883         return t;
13884     }
13885     if (t != 0)
13886         ripper_dispatch_scan_event(parser, t);
13887 #endif
13888 
13889     return t;
13890 }
13891 
13892 #ifndef RIPPER
13893 static NODE*
13894 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13895 {
13896     NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13897     nd_set_line(n, ruby_sourceline);
13898     return n;
13899 }
13900 
13901 enum node_type
13902 nodetype(NODE *node)                    /* for debug */
13903 {
13904     return (enum node_type)nd_type(node);
13905 }
13906 
13907 int
13908 nodeline(NODE *node)
13909 {
13910     return nd_line(node);
13911 }
13912 
13913 static NODE*
13914 newline_node(NODE *node)
13915 {
13916     if (node) {
13917         node = remove_begin(node);
13918         node->flags |= NODE_FL_NEWLINE;
13919     }
13920     return node;
13921 }
13922 
13923 static void
13924 fixpos(NODE *node, NODE *orig)
13925 {
13926     if (!node) return;
13927     if (!orig) return;
13928     if (orig == (NODE*)1) return;
13929     nd_set_line(node, nd_line(orig));
13930 }
13931 
13932 static void
13933 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13934 {
13935     rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13936 }
13937 #define parser_warning(node, mesg) parser_warning(parser, node, mesg)
13938 
13939 static void
13940 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13941 {
13942     rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13943 }
13944 #define parser_warn(node, mesg) parser_warn(parser, node, mesg)
13945 
13946 static NODE*
13947 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13948 {
13949     NODE *end, *h = head, *nd;
13950 
13951     if (tail == 0) return head;
13952 
13953     if (h == 0) return tail;
13954     switch (nd_type(h)) {
13955       case NODE_LIT:
13956       case NODE_STR:
13957       case NODE_SELF:
13958       case NODE_TRUE:
13959       case NODE_FALSE:
13960       case NODE_NIL:
13961         parser_warning(h, "unused literal ignored");
13962         return tail;
13963       default:
13964         h = end = NEW_BLOCK(head);
13965         end->nd_end = end;
13966         fixpos(end, head);
13967         head = end;
13968         break;
13969       case NODE_BLOCK:
13970         end = h->nd_end;
13971         break;
13972     }
13973 
13974     nd = end->nd_head;
13975     switch (nd_type(nd)) {
13976       case NODE_RETURN:
13977       case NODE_BREAK:
13978       case NODE_NEXT:
13979       case NODE_REDO:
13980       case NODE_RETRY:
13981         if (RTEST(ruby_verbose)) {
13982             parser_warning(nd, "statement not reached");
13983         }
13984         break;
13985 
13986       default:
13987         break;
13988     }
13989 
13990     if (nd_type(tail) != NODE_BLOCK) {
13991         tail = NEW_BLOCK(tail);
13992         tail->nd_end = tail;
13993     }
13994     end->nd_next = tail;
13995     h->nd_end = tail->nd_end;
13996     return head;
13997 }
13998 
13999 /* append item to the list */
14000 static NODE*
14001 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14002 {
14003     NODE *last;
14004 
14005     if (list == 0) return NEW_LIST(item);
14006     if (list->nd_next) {
14007         last = list->nd_next->nd_end;
14008     }
14009     else {
14010         last = list;
14011     }
14012 
14013     list->nd_alen += 1;
14014     last->nd_next = NEW_LIST(item);
14015     list->nd_next->nd_end = last->nd_next;
14016     return list;
14017 }
14018 
14019 /* concat two lists */
14020 static NODE*
14021 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14022 {
14023     NODE *last;
14024 
14025     if (head->nd_next) {
14026         last = head->nd_next->nd_end;
14027     }
14028     else {
14029         last = head;
14030     }
14031 
14032     head->nd_alen += tail->nd_alen;
14033     last->nd_next = tail;
14034     if (tail->nd_next) {
14035         head->nd_next->nd_end = tail->nd_next->nd_end;
14036     }
14037     else {
14038         head->nd_next->nd_end = tail;
14039     }
14040 
14041     return head;
14042 }
14043 
14044 static int
14045 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14046 {
14047     if (NIL_P(tail)) return 1;
14048     if (!rb_enc_compatible(head, tail)) {
14049         compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14050                       rb_enc_name(rb_enc_get(head)),
14051                       rb_enc_name(rb_enc_get(tail)));
14052         rb_str_resize(head, 0);
14053         rb_str_resize(tail, 0);
14054         return 0;
14055     }
14056     rb_str_buf_append(head, tail);
14057     return 1;
14058 }
14059 
14060 /* concat two string literals */
14061 static NODE *
14062 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14063 {
14064     enum node_type htype;
14065 
14066     if (!head) return tail;
14067     if (!tail) return head;
14068 
14069     htype = nd_type(head);
14070     if (htype == NODE_EVSTR) {
14071         NODE *node = NEW_DSTR(Qnil);
14072         head = list_append(node, head);
14073     }
14074     switch (nd_type(tail)) {
14075       case NODE_STR:
14076         if (htype == NODE_STR) {
14077             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14078               error:
14079                 rb_gc_force_recycle((VALUE)head);
14080                 rb_gc_force_recycle((VALUE)tail);
14081                 return 0;
14082             }
14083             rb_gc_force_recycle((VALUE)tail);
14084         }
14085         else {
14086             list_append(head, tail);
14087         }
14088         break;
14089 
14090       case NODE_DSTR:
14091         if (htype == NODE_STR) {
14092             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14093                 goto error;
14094             tail->nd_lit = head->nd_lit;
14095             rb_gc_force_recycle((VALUE)head);
14096             head = tail;
14097         }
14098         else if (NIL_P(tail->nd_lit)) {
14099             head->nd_alen += tail->nd_alen - 1;
14100             head->nd_next->nd_end->nd_next = tail->nd_next;
14101             head->nd_next->nd_end = tail->nd_next->nd_end;
14102             rb_gc_force_recycle((VALUE)tail);
14103         }
14104         else {
14105             nd_set_type(tail, NODE_ARRAY);
14106             tail->nd_head = NEW_STR(tail->nd_lit);
14107             list_concat(head, tail);
14108         }
14109         break;
14110 
14111       case NODE_EVSTR:
14112         if (htype == NODE_STR) {
14113             nd_set_type(head, NODE_DSTR);
14114             head->nd_alen = 1;
14115         }
14116         list_append(head, tail);
14117         break;
14118     }
14119     return head;
14120 }
14121 
14122 static NODE *
14123 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14124 {
14125     if (nd_type(node) == NODE_EVSTR) {
14126         node = list_append(NEW_DSTR(Qnil), node);
14127     }
14128     return node;
14129 }
14130 
14131 static NODE *
14132 new_evstr_gen(struct parser_params *parser, NODE *node)
14133 {
14134     NODE *head = node;
14135 
14136     if (node) {
14137         switch (nd_type(node)) {
14138           case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14139             return node;
14140         }
14141     }
14142     return NEW_EVSTR(head);
14143 }
14144 
14145 static NODE *
14146 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14147 {
14148     value_expr(recv);
14149     value_expr(arg1);
14150     return NEW_CALL(recv, id, NEW_LIST(arg1));
14151 }
14152 
14153 static NODE *
14154 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14155 {
14156     value_expr(recv);
14157     return NEW_CALL(recv, id, 0);
14158 }
14159 
14160 static NODE*
14161 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14162 {
14163     value_expr(node1);
14164     value_expr(node2);
14165     if (node1) {
14166         switch (nd_type(node1)) {
14167           case NODE_DREGX:
14168           case NODE_DREGX_ONCE:
14169             return NEW_MATCH2(node1, node2);
14170 
14171           case NODE_LIT:
14172             if (TYPE(node1->nd_lit) == T_REGEXP) {
14173                 return NEW_MATCH2(node1, node2);
14174             }
14175         }
14176     }
14177 
14178     if (node2) {
14179         switch (nd_type(node2)) {
14180           case NODE_DREGX:
14181           case NODE_DREGX_ONCE:
14182             return NEW_MATCH3(node2, node1);
14183 
14184           case NODE_LIT:
14185             if (TYPE(node2->nd_lit) == T_REGEXP) {
14186                 return NEW_MATCH3(node2, node1);
14187             }
14188         }
14189     }
14190 
14191     return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14192 }
14193 
14194 static NODE*
14195 gettable_gen(struct parser_params *parser, ID id)
14196 {
14197     if (id == keyword_self) {
14198         return NEW_SELF();
14199     }
14200     else if (id == keyword_nil) {
14201         return NEW_NIL();
14202     }
14203     else if (id == keyword_true) {
14204         return NEW_TRUE();
14205     }
14206     else if (id == keyword_false) {
14207         return NEW_FALSE();
14208     }
14209     else if (id == keyword__FILE__) {
14210         return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14211                                                     rb_filesystem_encoding()));
14212     }
14213     else if (id == keyword__LINE__) {
14214         return NEW_LIT(INT2FIX(ruby_sourceline));
14215     }
14216     else if (id == keyword__ENCODING__) {
14217         return NEW_LIT(rb_enc_from_encoding(parser->enc));
14218     }
14219     else if (is_local_id(id)) {
14220         if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14221         if (local_id(id)) return NEW_LVAR(id);
14222         /* method call without arguments */
14223         return NEW_VCALL(id);
14224     }
14225     else if (is_global_id(id)) {
14226         return NEW_GVAR(id);
14227     }
14228     else if (is_instance_id(id)) {
14229         return NEW_IVAR(id);
14230     }
14231     else if (is_const_id(id)) {
14232         return NEW_CONST(id);
14233     }
14234     else if (is_class_id(id)) {
14235         return NEW_CVAR(id);
14236     }
14237     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14238     return 0;
14239 }
14240 #endif /* !RIPPER */
14241 
14242 #ifdef RIPPER
14243 static VALUE
14244 assignable_gen(struct parser_params *parser, VALUE lhs)
14245 #else
14246 static NODE*
14247 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14248 #endif
14249 {
14250 #ifdef RIPPER
14251     ID id = get_id(lhs);
14252 # define assignable_result(x) get_value(lhs)
14253 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14254 #else
14255 # define assignable_result(x) x
14256 #endif
14257     if (!id) return assignable_result(0);
14258     if (id == keyword_self) {
14259         yyerror("Can't change the value of self");
14260     }
14261     else if (id == keyword_nil) {
14262         yyerror("Can't assign to nil");
14263     }
14264     else if (id == keyword_true) {
14265         yyerror("Can't assign to true");
14266     }
14267     else if (id == keyword_false) {
14268         yyerror("Can't assign to false");
14269     }
14270     else if (id == keyword__FILE__) {
14271         yyerror("Can't assign to __FILE__");
14272     }
14273     else if (id == keyword__LINE__) {
14274         yyerror("Can't assign to __LINE__");
14275     }
14276     else if (id == keyword__ENCODING__) {
14277         yyerror("Can't assign to __ENCODING__");
14278     }
14279     else if (is_local_id(id)) {
14280         if (dyna_in_block()) {
14281             if (dvar_curr(id)) {
14282                 return assignable_result(NEW_DASGN_CURR(id, val));
14283             }
14284             else if (dvar_defined(id)) {
14285                 return assignable_result(NEW_DASGN(id, val));
14286             }
14287             else if (local_id(id)) {
14288                 return assignable_result(NEW_LASGN(id, val));
14289             }
14290             else {
14291                 dyna_var(id);
14292                 return assignable_result(NEW_DASGN_CURR(id, val));
14293             }
14294         }
14295         else {
14296             if (!local_id(id)) {
14297                 local_var(id);
14298             }
14299             return assignable_result(NEW_LASGN(id, val));
14300         }
14301     }
14302     else if (is_global_id(id)) {
14303         return assignable_result(NEW_GASGN(id, val));
14304     }
14305     else if (is_instance_id(id)) {
14306         return assignable_result(NEW_IASGN(id, val));
14307     }
14308     else if (is_const_id(id)) {
14309         if (!in_def && !in_single)
14310             return assignable_result(NEW_CDECL(id, val, 0));
14311         yyerror("dynamic constant assignment");
14312     }
14313     else if (is_class_id(id)) {
14314         return assignable_result(NEW_CVASGN(id, val));
14315     }
14316     else {
14317         compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14318     }
14319     return assignable_result(0);
14320 #undef assignable_result
14321 #undef parser_yyerror
14322 }
14323 
14324 static ID
14325 shadowing_lvar_gen(struct parser_params *parser, ID name)
14326 {
14327     ID uscore;
14328 
14329     CONST_ID(uscore, "_");
14330     if (uscore == name) return name;
14331     if (dyna_in_block()) {
14332         if (dvar_curr(name)) {
14333             yyerror("duplicated argument name");
14334         }
14335         else if (dvar_defined(name) || local_id(name)) {
14336             rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14337             vtable_add(lvtbl->vars, name);
14338         }
14339     }
14340     else {
14341         if (local_id(name)) {
14342             yyerror("duplicated argument name");
14343         }
14344     }
14345     return name;
14346 }
14347 
14348 static void
14349 new_bv_gen(struct parser_params *parser, ID name)
14350 {
14351     if (!name) return;
14352     if (!is_local_id(name)) {
14353         compile_error(PARSER_ARG "invalid local variable - %s",
14354                       rb_id2name(name));
14355         return;
14356     }
14357     shadowing_lvar(name);
14358     dyna_var(name);
14359 }
14360 
14361 #ifndef RIPPER
14362 static NODE *
14363 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14364 {
14365     if (recv && nd_type(recv) == NODE_SELF)
14366         recv = (NODE *)1;
14367     return NEW_ATTRASGN(recv, tASET, idx);
14368 }
14369 
14370 static void
14371 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14372 {
14373     if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14374         compile_error(PARSER_ARG "both block arg and actual block given");
14375     }
14376 }
14377 
14378 ID
14379 rb_id_attrset(ID id)
14380 {
14381     id &= ~ID_SCOPE_MASK;
14382     id |= ID_ATTRSET;
14383     return id;
14384 }
14385 
14386 static NODE *
14387 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14388 {
14389     if (recv && nd_type(recv) == NODE_SELF)
14390         recv = (NODE *)1;
14391     return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14392 }
14393 
14394 static void
14395 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14396 {
14397     switch (nd_type(node)) {
14398       case NODE_NTH_REF:
14399         compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14400         break;
14401       case NODE_BACK_REF:
14402         compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14403         break;
14404     }
14405 }
14406 
14407 static NODE *
14408 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14409 {
14410     if (!node2) return node1;
14411     switch (nd_type(node1)) {
14412       case NODE_BLOCK_PASS:
14413         if (node1->nd_head)
14414             node1->nd_head = arg_concat(node1->nd_head, node2);
14415         else
14416             node1->nd_head = NEW_LIST(node2);
14417         return node1;
14418       case NODE_ARGSPUSH:
14419         if (nd_type(node2) != NODE_ARRAY) break;
14420         node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14421         nd_set_type(node1, NODE_ARGSCAT);
14422         return node1;
14423       case NODE_ARGSCAT:
14424         if (nd_type(node2) != NODE_ARRAY ||
14425             nd_type(node1->nd_body) != NODE_ARRAY) break;
14426         node1->nd_body = list_concat(node1->nd_body, node2);
14427         return node1;
14428     }
14429     return NEW_ARGSCAT(node1, node2);
14430 }
14431 
14432 static NODE *
14433 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14434 {
14435     if (!node1) return NEW_LIST(node2);
14436     switch (nd_type(node1))  {
14437       case NODE_ARRAY:
14438         return list_append(node1, node2);
14439       case NODE_BLOCK_PASS:
14440         node1->nd_head = arg_append(node1->nd_head, node2);
14441         return node1;
14442       case NODE_ARGSPUSH:
14443         node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14444         nd_set_type(node1, NODE_ARGSCAT);
14445         return node1;
14446     }
14447     return NEW_ARGSPUSH(node1, node2);
14448 }
14449 
14450 static NODE *
14451 splat_array(NODE* node)
14452 {
14453     if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14454     if (nd_type(node) == NODE_ARRAY) return node;
14455     return 0;
14456 }
14457 
14458 static NODE *
14459 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14460 {
14461     if (!lhs) return 0;
14462 
14463     switch (nd_type(lhs)) {
14464       case NODE_GASGN:
14465       case NODE_IASGN:
14466       case NODE_IASGN2:
14467       case NODE_LASGN:
14468       case NODE_DASGN:
14469       case NODE_DASGN_CURR:
14470       case NODE_MASGN:
14471       case NODE_CDECL:
14472       case NODE_CVASGN:
14473         lhs->nd_value = rhs;
14474         break;
14475 
14476       case NODE_ATTRASGN:
14477       case NODE_CALL:
14478         lhs->nd_args = arg_append(lhs->nd_args, rhs);
14479         break;
14480 
14481       default:
14482         /* should not happen */
14483         break;
14484     }
14485 
14486     return lhs;
14487 }
14488 
14489 static int
14490 value_expr_gen(struct parser_params *parser, NODE *node)
14491 {
14492     int cond = 0;
14493 
14494     if (!node) {
14495         rb_warning0("empty expression");
14496     }
14497     while (node) {
14498         switch (nd_type(node)) {
14499           case NODE_DEFN:
14500           case NODE_DEFS:
14501             parser_warning(node, "void value expression");
14502             return FALSE;
14503 
14504           case NODE_RETURN:
14505           case NODE_BREAK:
14506           case NODE_NEXT:
14507           case NODE_REDO:
14508           case NODE_RETRY:
14509             if (!cond) yyerror("void value expression");
14510             /* or "control never reach"? */
14511             return FALSE;
14512 
14513           case NODE_BLOCK:
14514             while (node->nd_next) {
14515                 node = node->nd_next;
14516             }
14517             node = node->nd_head;
14518             break;
14519 
14520           case NODE_BEGIN:
14521             node = node->nd_body;
14522             break;
14523 
14524           case NODE_IF:
14525             if (!node->nd_body) {
14526                 node = node->nd_else;
14527                 break;
14528             }
14529             else if (!node->nd_else) {
14530                 node = node->nd_body;
14531                 break;
14532             }
14533             if (!value_expr(node->nd_body)) return FALSE;
14534             node = node->nd_else;
14535             break;
14536 
14537           case NODE_AND:
14538           case NODE_OR:
14539             cond = 1;
14540             node = node->nd_2nd;
14541             break;
14542 
14543           default:
14544             return TRUE;
14545         }
14546     }
14547 
14548     return TRUE;
14549 }
14550 
14551 static void
14552 void_expr_gen(struct parser_params *parser, NODE *node)
14553 {
14554     const char *useless = 0;
14555 
14556     if (!RTEST(ruby_verbose)) return;
14557 
14558     if (!node) return;
14559     switch (nd_type(node)) {
14560       case NODE_CALL:
14561         switch (node->nd_mid) {
14562           case '+':
14563           case '-':
14564           case '*':
14565           case '/':
14566           case '%':
14567           case tPOW:
14568           case tUPLUS:
14569           case tUMINUS:
14570           case '|':
14571           case '^':
14572           case '&':
14573           case tCMP:
14574           case '>':
14575           case tGEQ:
14576           case '<':
14577           case tLEQ:
14578           case tEQ:
14579           case tNEQ:
14580             useless = rb_id2name(node->nd_mid);
14581             break;
14582         }
14583         break;
14584 
14585       case NODE_LVAR:
14586       case NODE_DVAR:
14587       case NODE_GVAR:
14588       case NODE_IVAR:
14589       case NODE_CVAR:
14590       case NODE_NTH_REF:
14591       case NODE_BACK_REF:
14592         useless = "a variable";
14593         break;
14594       case NODE_CONST:
14595         useless = "a constant";
14596         break;
14597       case NODE_LIT:
14598       case NODE_STR:
14599       case NODE_DSTR:
14600       case NODE_DREGX:
14601       case NODE_DREGX_ONCE:
14602         useless = "a literal";
14603         break;
14604       case NODE_COLON2:
14605       case NODE_COLON3:
14606         useless = "::";
14607         break;
14608       case NODE_DOT2:
14609         useless = "..";
14610         break;
14611       case NODE_DOT3:
14612         useless = "...";
14613         break;
14614       case NODE_SELF:
14615         useless = "self";
14616         break;
14617       case NODE_NIL:
14618         useless = "nil";
14619         break;
14620       case NODE_TRUE:
14621         useless = "true";
14622         break;
14623       case NODE_FALSE:
14624         useless = "false";
14625         break;
14626       case NODE_DEFINED:
14627         useless = "defined?";
14628         break;
14629     }
14630 
14631     if (useless) {
14632         int line = ruby_sourceline;
14633 
14634         ruby_sourceline = nd_line(node);
14635         rb_warnS("useless use of %s in void context", useless);
14636         ruby_sourceline = line;
14637     }
14638 }
14639 
14640 static void
14641 void_stmts_gen(struct parser_params *parser, NODE *node)
14642 {
14643     if (!RTEST(ruby_verbose)) return;
14644     if (!node) return;
14645     if (nd_type(node) != NODE_BLOCK) return;
14646 
14647     for (;;) {
14648         if (!node->nd_next) return;
14649         void_expr0(node->nd_head);
14650         node = node->nd_next;
14651     }
14652 }
14653 
14654 static NODE *
14655 remove_begin(NODE *node)
14656 {
14657     NODE **n = &node, *n1 = node;
14658     while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14659         *n = n1 = n1->nd_body;
14660     }
14661     return node;
14662 }
14663 
14664 static void
14665 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14666 {
14667     NODE *node = *body;
14668 
14669     if (!node) {
14670         *body = NEW_NIL();
14671         return;
14672     }
14673 #define subnodes(n1, n2) \
14674     ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14675      (!node->n2) ? (body = &node->n1, 1) : \
14676      (reduce_nodes(&node->n1), body = &node->n2, 1))
14677 
14678     while (node) {
14679         int newline = (int)(node->flags & NODE_FL_NEWLINE);
14680         switch (nd_type(node)) {
14681           end:
14682           case NODE_NIL:
14683             *body = 0;
14684             return;
14685           case NODE_RETURN:
14686             *body = node = node->nd_stts;
14687             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14688             continue;
14689           case NODE_BEGIN:
14690             *body = node = node->nd_body;
14691             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14692             continue;
14693           case NODE_BLOCK:
14694             body = &node->nd_end->nd_head;
14695             break;
14696           case NODE_IF:
14697             if (subnodes(nd_body, nd_else)) break;
14698             return;
14699           case NODE_CASE:
14700             body = &node->nd_body;
14701             break;
14702           case NODE_WHEN:
14703             if (!subnodes(nd_body, nd_next)) goto end;
14704             break;
14705           case NODE_ENSURE:
14706             if (!subnodes(nd_head, nd_resq)) goto end;
14707             break;
14708           case NODE_RESCUE:
14709             if (!subnodes(nd_head, nd_resq)) goto end;
14710             break;
14711           default:
14712             return;
14713         }
14714         node = *body;
14715         if (newline && node) node->flags |= NODE_FL_NEWLINE;
14716     }
14717 
14718 #undef subnodes
14719 }
14720 
14721 static int
14722 assign_in_cond(struct parser_params *parser, NODE *node)
14723 {
14724     switch (nd_type(node)) {
14725       case NODE_MASGN:
14726         yyerror("multiple assignment in conditional");
14727         return 1;
14728 
14729       case NODE_LASGN:
14730       case NODE_DASGN:
14731       case NODE_DASGN_CURR:
14732       case NODE_GASGN:
14733       case NODE_IASGN:
14734         break;
14735 
14736       default:
14737         return 0;
14738     }
14739 
14740     if (!node->nd_value) return 1;
14741     switch (nd_type(node->nd_value)) {
14742       case NODE_LIT:
14743       case NODE_STR:
14744       case NODE_NIL:
14745       case NODE_TRUE:
14746       case NODE_FALSE:
14747         /* reports always */
14748         parser_warn(node->nd_value, "found = in conditional, should be ==");
14749         return 1;
14750 
14751       case NODE_DSTR:
14752       case NODE_XSTR:
14753       case NODE_DXSTR:
14754       case NODE_EVSTR:
14755       case NODE_DREGX:
14756       default:
14757         break;
14758     }
14759     return 1;
14760 }
14761 
14762 static void
14763 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14764 {
14765     if (!e_option_supplied(parser)) parser_warn(node, str);
14766 }
14767 
14768 static void
14769 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14770 {
14771     if (!e_option_supplied(parser)) parser_warning(node, str);
14772 }
14773 
14774 static void
14775 fixup_nodes(NODE **rootnode)
14776 {
14777     NODE *node, *next, *head;
14778 
14779     for (node = *rootnode; node; node = next) {
14780         enum node_type type;
14781         VALUE val;
14782 
14783         next = node->nd_next;
14784         head = node->nd_head;
14785         rb_gc_force_recycle((VALUE)node);
14786         *rootnode = next;
14787         switch (type = nd_type(head)) {
14788           case NODE_DOT2:
14789           case NODE_DOT3:
14790             val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14791                                type == NODE_DOT3);
14792             rb_gc_force_recycle((VALUE)head->nd_beg);
14793             rb_gc_force_recycle((VALUE)head->nd_end);
14794             nd_set_type(head, NODE_LIT);
14795             head->nd_lit = val;
14796             break;
14797           default:
14798             break;
14799         }
14800     }
14801 }
14802 
14803 static NODE *cond0(struct parser_params*,NODE*);
14804 
14805 static NODE*
14806 range_op(struct parser_params *parser, NODE *node)
14807 {
14808     enum node_type type;
14809 
14810     if (node == 0) return 0;
14811 
14812     type = nd_type(node);
14813     value_expr(node);
14814     if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14815         warn_unless_e_option(parser, node, "integer literal in conditional range");
14816         return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14817     }
14818     return cond0(parser, node);
14819 }
14820 
14821 static int
14822 literal_node(NODE *node)
14823 {
14824     if (!node) return 1;        /* same as NODE_NIL */
14825     switch (nd_type(node)) {
14826       case NODE_LIT:
14827       case NODE_STR:
14828       case NODE_DSTR:
14829       case NODE_EVSTR:
14830       case NODE_DREGX:
14831       case NODE_DREGX_ONCE:
14832       case NODE_DSYM:
14833         return 2;
14834       case NODE_TRUE:
14835       case NODE_FALSE:
14836       case NODE_NIL:
14837         return 1;
14838     }
14839     return 0;
14840 }
14841 
14842 static NODE*
14843 cond0(struct parser_params *parser, NODE *node)
14844 {
14845     if (node == 0) return 0;
14846     assign_in_cond(parser, node);
14847 
14848     switch (nd_type(node)) {
14849       case NODE_DSTR:
14850       case NODE_EVSTR:
14851       case NODE_STR:
14852         rb_warn0("string literal in condition");
14853         break;
14854 
14855       case NODE_DREGX:
14856       case NODE_DREGX_ONCE:
14857         warning_unless_e_option(parser, node, "regex literal in condition");
14858         return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14859 
14860       case NODE_AND:
14861       case NODE_OR:
14862         node->nd_1st = cond0(parser, node->nd_1st);
14863         node->nd_2nd = cond0(parser, node->nd_2nd);
14864         break;
14865 
14866       case NODE_DOT2:
14867       case NODE_DOT3:
14868         node->nd_beg = range_op(parser, node->nd_beg);
14869         node->nd_end = range_op(parser, node->nd_end);
14870         if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14871         else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14872         if (!e_option_supplied(parser)) {
14873             int b = literal_node(node->nd_beg);
14874             int e = literal_node(node->nd_end);
14875             if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14876                 parser_warn(node, "range literal in condition");
14877             }
14878         }
14879         break;
14880 
14881       case NODE_DSYM:
14882         parser_warning(node, "literal in condition");
14883         break;
14884 
14885       case NODE_LIT:
14886         if (TYPE(node->nd_lit) == T_REGEXP) {
14887             warn_unless_e_option(parser, node, "regex literal in condition");
14888             nd_set_type(node, NODE_MATCH);
14889         }
14890         else {
14891             parser_warning(node, "literal in condition");
14892         }
14893       default:
14894         break;
14895     }
14896     return node;
14897 }
14898 
14899 static NODE*
14900 cond_gen(struct parser_params *parser, NODE *node)
14901 {
14902     if (node == 0) return 0;
14903     return cond0(parser, node);
14904 }
14905 
14906 static NODE*
14907 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14908 {
14909     value_expr(left);
14910     if (left && (enum node_type)nd_type(left) == type) {
14911         NODE *node = left, *second;
14912         while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14913             node = second;
14914         }
14915         node->nd_2nd = NEW_NODE(type, second, right, 0);
14916         return left;
14917     }
14918     return NEW_NODE(type, left, right, 0);
14919 }
14920 
14921 static void
14922 no_blockarg(struct parser_params *parser, NODE *node)
14923 {
14924     if (node && nd_type(node) == NODE_BLOCK_PASS) {
14925         compile_error(PARSER_ARG "block argument should not be given");
14926     }
14927 }
14928 
14929 static NODE *
14930 ret_args_gen(struct parser_params *parser, NODE *node)
14931 {
14932     if (node) {
14933         no_blockarg(parser, node);
14934         if (nd_type(node) == NODE_ARRAY) {
14935             if (node->nd_next == 0) {
14936                 node = node->nd_head;
14937             }
14938             else {
14939                 nd_set_type(node, NODE_VALUES);
14940             }
14941         }
14942     }
14943     return node;
14944 }
14945 
14946 static NODE *
14947 new_yield_gen(struct parser_params *parser, NODE *node)
14948 {
14949     long state = Qtrue;
14950 
14951     if (node) {
14952         no_blockarg(parser, node);
14953         if (node && nd_type(node) == NODE_SPLAT) {
14954             state = Qtrue;
14955         }
14956     }
14957     else {
14958         state = Qfalse;
14959     }
14960     return NEW_YIELD(node, state);
14961 }
14962 
14963 static NODE*
14964 negate_lit(NODE *node)
14965 {
14966     switch (TYPE(node->nd_lit)) {
14967       case T_FIXNUM:
14968         node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
14969         break;
14970       case T_BIGNUM:
14971         node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
14972         break;
14973       case T_FLOAT:
14974         RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
14975         break;
14976       default:
14977         break;
14978     }
14979     return node;
14980 }
14981 
14982 static NODE *
14983 arg_blk_pass(NODE *node1, NODE *node2)
14984 {
14985     if (node2) {
14986         node2->nd_head = node1;
14987         return node2;
14988     }
14989     return node1;
14990 }
14991 
14992 static NODE*
14993 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
14994 {
14995     int saved_line = ruby_sourceline;
14996     NODE *node;
14997     NODE *i1, *i2 = 0;
14998 
14999     node = NEW_ARGS(m ? m->nd_plen : 0, o);
15000     i1 = m ? m->nd_next : 0;
15001     node->nd_next = NEW_ARGS_AUX(r, b);
15002 
15003     if (p) {
15004         i2 = p->nd_next;
15005         node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
15006     }
15007     else if (i1) {
15008         node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
15009     }
15010     if (i1 || i2) {
15011         node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
15012     }
15013     ruby_sourceline = saved_line;
15014     return node;
15015 }
15016 #endif /* !RIPPER */
15017 
15018 static void
15019 local_push_gen(struct parser_params *parser, int inherit_dvars)
15020 {
15021     struct local_vars *local;
15022 
15023     local = ALLOC(struct local_vars);
15024     local->prev = lvtbl;
15025     local->args = vtable_alloc(0);
15026     local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15027     lvtbl = local;
15028 }
15029 
15030 static void
15031 local_pop_gen(struct parser_params *parser)
15032 {
15033     struct local_vars *local = lvtbl->prev;
15034     vtable_free(lvtbl->args);
15035     vtable_free(lvtbl->vars);
15036     xfree(lvtbl);
15037     lvtbl = local;
15038 }
15039 
15040 #ifndef RIPPER
15041 static ID*
15042 vtable_tblcpy(ID *buf, const struct vtable *src)
15043 {
15044     int i, cnt = vtable_size(src);
15045 
15046     if (cnt > 0) {
15047         buf[0] = cnt;
15048         for (i = 0; i < cnt; i++) {
15049             buf[i] = src->tbl[i];
15050         }
15051         return buf;
15052     }
15053     return 0;
15054 }
15055 
15056 static ID*
15057 local_tbl_gen(struct parser_params *parser)
15058 {
15059     int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15060     ID *buf;
15061 
15062     if (cnt <= 0) return 0;
15063     buf = ALLOC_N(ID, cnt + 1);
15064     vtable_tblcpy(buf+1, lvtbl->args);
15065     vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15066     buf[0] = cnt;
15067     return buf;
15068 }
15069 #endif
15070 
15071 static int
15072 arg_var_gen(struct parser_params *parser, ID id)
15073 {
15074     vtable_add(lvtbl->args, id);
15075     return vtable_size(lvtbl->args) - 1;
15076 }
15077 
15078 static int
15079 local_var_gen(struct parser_params *parser, ID id)
15080 {
15081     vtable_add(lvtbl->vars, id);
15082     return vtable_size(lvtbl->vars) - 1;
15083 }
15084 
15085 static int
15086 local_id_gen(struct parser_params *parser, ID id)
15087 {
15088     struct vtable *vars, *args;
15089 
15090     vars = lvtbl->vars;
15091     args = lvtbl->args;
15092 
15093     while (vars && POINTER_P(vars->prev)) {
15094         vars = vars->prev;
15095         args = args->prev;
15096     }
15097 
15098     if (vars && vars->prev == DVARS_INHERIT) {
15099         return rb_local_defined(id);
15100     }
15101     else {
15102         return (vtable_included(args, id) ||
15103                 vtable_included(vars, id));
15104     }
15105 }
15106 
15107 static const struct vtable *
15108 dyna_push_gen(struct parser_params *parser)
15109 {
15110     lvtbl->args = vtable_alloc(lvtbl->args);
15111     lvtbl->vars = vtable_alloc(lvtbl->vars);
15112     return lvtbl->args;
15113 }
15114 
15115 static void
15116 dyna_pop_1(struct parser_params *parser)
15117 {
15118     struct vtable *tmp;
15119 
15120     tmp = lvtbl->args;
15121     lvtbl->args = lvtbl->args->prev;
15122     vtable_free(tmp);
15123     tmp = lvtbl->vars;
15124     lvtbl->vars = lvtbl->vars->prev;
15125     vtable_free(tmp);
15126 }
15127 
15128 static void
15129 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15130 {
15131     while (lvtbl->args != lvargs) {
15132         dyna_pop_1(parser);
15133         if (!lvtbl->args) {
15134             struct local_vars *local = lvtbl->prev;
15135             xfree(lvtbl);
15136             lvtbl = local;
15137         }
15138     }
15139     dyna_pop_1(parser);
15140 }
15141 
15142 static int
15143 dyna_in_block_gen(struct parser_params *parser)
15144 {
15145     return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15146 }
15147 
15148 static int
15149 dvar_defined_gen(struct parser_params *parser, ID id)
15150 {
15151     struct vtable *vars, *args;
15152 
15153     args = lvtbl->args;
15154     vars = lvtbl->vars;
15155 
15156     while (POINTER_P(vars)) {
15157         if (vtable_included(args, id)) {
15158             return 1;
15159         }
15160         if (vtable_included(vars, id)) {
15161             return 1;
15162         }
15163         args = args->prev;
15164         vars = vars->prev;
15165     }
15166 
15167     if (vars == DVARS_INHERIT) {
15168         return rb_dvar_defined(id);
15169     }
15170 
15171     return 0;
15172 }
15173 
15174 static int
15175 dvar_curr_gen(struct parser_params *parser, ID id)
15176 {
15177     return (vtable_included(lvtbl->args, id) ||
15178             vtable_included(lvtbl->vars, id));
15179 }
15180 
15181 #ifndef RIPPER
15182 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
15183 VALUE rb_reg_check_preprocess(VALUE);
15184 
15185 static void
15186 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15187 {
15188     int c = RE_OPTION_ENCODING_IDX(options);
15189 
15190     if (c) {
15191         int opt, idx;
15192         rb_char_to_option_kcode(c, &opt, &idx);
15193         if (idx != ENCODING_GET(str) &&
15194             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15195             goto error;
15196         }
15197         ENCODING_SET(str, idx);
15198     }
15199     else if (RE_OPTION_ENCODING_NONE(options)) {
15200         if (!ENCODING_IS_ASCII8BIT(str) &&
15201             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15202             c = 'n';
15203             goto error;
15204         }
15205         rb_enc_associate(str, rb_ascii8bit_encoding());
15206     }
15207     else if (parser->enc == rb_usascii_encoding()) {
15208         if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15209             /* raise in re.c */
15210             rb_enc_associate(str, rb_usascii_encoding());
15211         }
15212         else {
15213             rb_enc_associate(str, rb_ascii8bit_encoding());
15214         }
15215     }
15216     return;
15217 
15218   error:
15219     compile_error(PARSER_ARG
15220         "regexp encoding option '%c' differs from source encoding '%s'",
15221         c, rb_enc_name(rb_enc_get(str)));
15222 }
15223 
15224 static int
15225 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15226 {
15227     VALUE err;
15228     reg_fragment_setenc(str, options);
15229     err = rb_reg_check_preprocess(str);
15230     if (err != Qnil) {
15231         err = rb_obj_as_string(err);
15232         compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15233         RB_GC_GUARD(err);
15234         return 0;
15235     }
15236     return 1;
15237 }
15238 
15239 typedef struct {
15240     struct parser_params* parser;
15241     rb_encoding *enc;
15242     NODE *succ_block;
15243     NODE *fail_block;
15244     int num;
15245 } reg_named_capture_assign_t;
15246 
15247 static int
15248 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15249           int back_num, int *back_refs, OnigRegex regex, void *arg0)
15250 {
15251     reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15252     struct parser_params* parser = arg->parser;
15253     rb_encoding *enc = arg->enc;
15254     long len = name_end - name;
15255     const char *s = (const char *)name;
15256     ID var;
15257 
15258     arg->num++;
15259 
15260     if (arg->succ_block == 0) {
15261         arg->succ_block = NEW_BEGIN(0);
15262         arg->fail_block = NEW_BEGIN(0);
15263     }
15264 
15265     if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15266         (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15267         !rb_enc_symname2_p(s, len, enc)) {
15268         return ST_CONTINUE;
15269     }
15270     var = rb_intern3(s, len, enc);
15271     if (dvar_defined(var) || local_id(var)) {
15272         rb_warningS("named capture conflicts a local variable - %s",
15273                     rb_id2name(var));
15274     }
15275     arg->succ_block = block_append(arg->succ_block,
15276         newline_node(node_assign(assignable(var,0),
15277             NEW_CALL(
15278               gettable(rb_intern("$~")),
15279               idAREF,
15280               NEW_LIST(NEW_LIT(ID2SYM(var))))
15281             )));
15282     arg->fail_block = block_append(arg->fail_block,
15283         newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15284     return ST_CONTINUE;
15285 }
15286 
15287 static NODE *
15288 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15289 {
15290     reg_named_capture_assign_t arg;
15291 
15292     arg.parser = parser;
15293     arg.enc = rb_enc_get(regexp);
15294     arg.succ_block = 0;
15295     arg.fail_block = 0;
15296     arg.num = 0;
15297     onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15298 
15299     if (arg.num == 0)
15300         return match;
15301 
15302     return
15303         block_append(
15304             newline_node(match),
15305             NEW_IF(gettable(rb_intern("$~")),
15306                 block_append(
15307                     newline_node(arg.succ_block),
15308                     newline_node(
15309                         NEW_CALL(
15310                           gettable(rb_intern("$~")),
15311                           rb_intern("begin"),
15312                           NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15313                 block_append(
15314                     newline_node(arg.fail_block),
15315                     newline_node(
15316                         NEW_LIT(Qnil)))));
15317 }
15318 
15319 static VALUE
15320 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15321 {
15322     VALUE re;
15323     VALUE err;
15324 
15325     reg_fragment_setenc(str, options);
15326     err = rb_errinfo();
15327     re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15328     if (NIL_P(re)) {
15329         ID mesg = rb_intern("mesg");
15330         VALUE m = rb_attr_get(rb_errinfo(), mesg);
15331         rb_set_errinfo(err);
15332         if (!NIL_P(err)) {
15333             rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15334         }
15335         else {
15336             compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15337         }
15338         return Qnil;
15339     }
15340     return re;
15341 }
15342 
15343 void
15344 rb_gc_mark_parser(void)
15345 {
15346 }
15347 
15348 NODE*
15349 rb_parser_append_print(VALUE vparser, NODE *node)
15350 {
15351     NODE *prelude = 0;
15352     NODE *scope = node;
15353     struct parser_params *parser;
15354 
15355     if (!node) return node;
15356 
15357     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15358 
15359     node = node->nd_body;
15360 
15361     if (nd_type(node) == NODE_PRELUDE) {
15362         prelude = node;
15363         node = node->nd_body;
15364     }
15365 
15366     node = block_append(node,
15367                         NEW_FCALL(rb_intern("print"),
15368                                   NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
15369     if (prelude) {
15370         prelude->nd_body = node;
15371         scope->nd_body = prelude;
15372     }
15373     else {
15374         scope->nd_body = node;
15375     }
15376 
15377     return scope;
15378 }
15379 
15380 NODE *
15381 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15382 {
15383     NODE *prelude = 0;
15384     NODE *scope = node;
15385     struct parser_params *parser;
15386 
15387     if (!node) return node;
15388 
15389     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15390 
15391     node = node->nd_body;
15392 
15393     if (nd_type(node) == NODE_PRELUDE) {
15394         prelude = node;
15395         node = node->nd_body;
15396     }
15397     if (split) {
15398         node = block_append(NEW_GASGN(rb_intern("$F"),
15399                                       NEW_CALL(NEW_GVAR(rb_intern("$_")),
15400                                                rb_intern("split"), 0)),
15401                             node);
15402     }
15403     if (chop) {
15404         node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15405                                      rb_intern("chop!"), 0), node);
15406     }
15407 
15408     node = NEW_OPT_N(node);
15409 
15410     if (prelude) {
15411         prelude->nd_body = node;
15412         scope->nd_body = prelude;
15413     }
15414     else {
15415         scope->nd_body = node;
15416     }
15417 
15418     return scope;
15419 }
15420 
15421 static const struct {
15422     ID token;
15423     const char *name;
15424 } op_tbl[] = {
15425     {tDOT2,     ".."},
15426     {tDOT3,     "..."},
15427     {'+',       "+(binary)"},
15428     {'-',       "-(binary)"},
15429     {tPOW,      "**"},
15430     {tUPLUS,    "+@"},
15431     {tUMINUS,   "-@"},
15432     {tCMP,      "<=>"},
15433     {tGEQ,      ">="},
15434     {tLEQ,      "<="},
15435     {tEQ,       "=="},
15436     {tEQQ,      "==="},
15437     {tNEQ,      "!="},
15438     {tMATCH,    "=~"},
15439     {tNMATCH,   "!~"},
15440     {tAREF,     "[]"},
15441     {tASET,     "[]="},
15442     {tLSHFT,    "<<"},
15443     {tRSHFT,    ">>"},
15444     {tCOLON2,   "::"},
15445 };
15446 
15447 #define op_tbl_count numberof(op_tbl)
15448 
15449 #ifndef ENABLE_SELECTOR_NAMESPACE
15450 #define ENABLE_SELECTOR_NAMESPACE 0
15451 #endif
15452 
15453 static struct symbols {
15454     ID last_id;
15455     st_table *sym_id;
15456     st_table *id_str;
15457 #if ENABLE_SELECTOR_NAMESPACE
15458     st_table *ivar2_id;
15459     st_table *id_ivar2;
15460 #endif
15461     VALUE op_sym[tLAST_TOKEN];
15462 } global_symbols = {tLAST_ID};
15463 
15464 static const struct st_hash_type symhash = {
15465     rb_str_hash_cmp,
15466     rb_str_hash,
15467 };
15468 
15469 #if ENABLE_SELECTOR_NAMESPACE
15470 struct ivar2_key {
15471     ID id;
15472     VALUE klass;
15473 };
15474 
15475 static int
15476 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15477 {
15478     if (key1->id == key2->id && key1->klass == key2->klass) {
15479         return 0;
15480     }
15481     return 1;
15482 }
15483 
15484 static int
15485 ivar2_hash(struct ivar2_key *key)
15486 {
15487     return (key->id << 8) ^ (key->klass >> 2);
15488 }
15489 
15490 static const struct st_hash_type ivar2_hash_type = {
15491     ivar2_cmp,
15492     ivar2_hash,
15493 };
15494 #endif
15495 
15496 void
15497 Init_sym(void)
15498 {
15499     global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15500     global_symbols.id_str = st_init_numtable_with_size(1000);
15501 #if ENABLE_SELECTOR_NAMESPACE
15502     global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15503     global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15504 #endif
15505 
15506     Init_id();
15507 }
15508 
15509 void
15510 rb_gc_mark_symbols(void)
15511 {
15512     rb_mark_tbl(global_symbols.id_str);
15513     rb_gc_mark_locations(global_symbols.op_sym,
15514                          global_symbols.op_sym + tLAST_TOKEN);
15515 }
15516 #endif /* !RIPPER */
15517 
15518 static ID
15519 internal_id_gen(struct parser_params *parser)
15520 {
15521     ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15522     id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15523     return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15524 }
15525 
15526 #ifndef RIPPER
15527 static int
15528 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15529 {
15530     int mb = 0;
15531 
15532     if (m >= e) return 0;
15533     switch (*m) {
15534       case '~': case '*': case '$': case '?': case '!': case '@':
15535       case '/': case '\\': case ';': case ',': case '.': case '=':
15536       case ':': case '<': case '>': case '\"':
15537       case '&': case '`': case '\'': case '+':
15538       case '0':
15539         ++m;
15540         break;
15541       case '-':
15542         ++m;
15543         if (m < e && is_identchar(m, e, enc)) {
15544             if (!ISASCII(*m)) mb = 1;
15545             m += rb_enc_mbclen(m, e, enc);
15546         }
15547         break;
15548       default:
15549         if (!rb_enc_isdigit(*m, enc)) return 0;
15550         do {
15551             if (!ISASCII(*m)) mb = 1;
15552             ++m;
15553         } while (m < e && rb_enc_isdigit(*m, enc));
15554     }
15555     return m == e ? mb + 1 : 0;
15556 }
15557 
15558 int
15559 rb_symname_p(const char *name)
15560 {
15561     return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15562 }
15563 
15564 int
15565 rb_enc_symname_p(const char *name, rb_encoding *enc)
15566 {
15567     return rb_enc_symname2_p(name, strlen(name), enc);
15568 }
15569 
15570 int
15571 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15572 {
15573     const char *m = name;
15574     const char *e = m + len;
15575     int localid = FALSE;
15576 
15577     if (!m) return FALSE;
15578     switch (*m) {
15579       case '\0':
15580         return FALSE;
15581 
15582       case '$':
15583         if (is_special_global_name(++m, e, enc)) return TRUE;
15584         goto id;
15585 
15586       case '@':
15587         if (*++m == '@') ++m;
15588         goto id;
15589 
15590       case '<':
15591         switch (*++m) {
15592           case '<': ++m; break;
15593           case '=': if (*++m == '>') ++m; break;
15594           default: break;
15595         }
15596         break;
15597 
15598       case '>':
15599         switch (*++m) {
15600           case '>': case '=': ++m; break;
15601         }
15602         break;
15603 
15604       case '=':
15605         switch (*++m) {
15606           case '~': ++m; break;
15607           case '=': if (*++m == '=') ++m; break;
15608           default: return FALSE;
15609         }
15610         break;
15611 
15612       case '*':
15613         if (*++m == '*') ++m;
15614         break;
15615 
15616       case '+': case '-':
15617         if (*++m == '@') ++m;
15618         break;
15619 
15620       case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15621         ++m;
15622         break;
15623 
15624       case '[':
15625         if (*++m != ']') return FALSE;
15626         if (*++m == '=') ++m;
15627         break;
15628 
15629       case '!':
15630         switch (*++m) {
15631           case '\0': return TRUE;
15632           case '=': case '~': ++m; break;
15633           default: return FALSE;
15634         }
15635         break;
15636 
15637       default:
15638         localid = !rb_enc_isupper(*m, enc);
15639       id:
15640         if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15641             return FALSE;
15642         while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15643         if (localid) {
15644             switch (*m) {
15645               case '!': case '?': case '=': ++m;
15646             }
15647         }
15648         break;
15649     }
15650     return m == e;
15651 }
15652 
15653 static ID
15654 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15655 {
15656     VALUE str = rb_enc_str_new(name, len, enc);
15657     OBJ_FREEZE(str);
15658     st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15659     st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15660     return id;
15661 }
15662 
15663 ID
15664 rb_intern3(const char *name, long len, rb_encoding *enc)
15665 {
15666     const char *m = name;
15667     const char *e = m + len;
15668     unsigned char c;
15669     VALUE str;
15670     ID id;
15671     long last;
15672     int mb;
15673     st_data_t data;
15674     struct RString fake_str;
15675     fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
15676     fake_str.basic.klass = rb_cString;
15677     fake_str.as.heap.len = len;
15678     fake_str.as.heap.ptr = (char *)name;
15679     fake_str.as.heap.aux.capa = len;
15680     str = (VALUE)&fake_str;
15681     rb_enc_associate(str, enc);
15682 
15683     if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15684         rb_raise(rb_eEncodingError, "invalid encoding symbol");
15685     }
15686 
15687     if (st_lookup(global_symbols.sym_id, str, &data))
15688         return (ID)data;
15689 
15690     if (rb_cString && !rb_enc_asciicompat(enc)) {
15691         id = ID_JUNK;
15692         goto new_id;
15693     }
15694     last = len-1;
15695     id = 0;
15696     switch (*m) {
15697       case '$':
15698         id |= ID_GLOBAL;
15699         if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15700             if (!--mb) enc = rb_ascii8bit_encoding();
15701             goto new_id;
15702         }
15703         break;
15704       case '@':
15705         if (m[1] == '@') {
15706             m++;
15707             id |= ID_CLASS;
15708         }
15709         else {
15710             id |= ID_INSTANCE;
15711         }
15712         m++;
15713         break;
15714       default:
15715         c = m[0];
15716         if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15717             /* operators */
15718             int i;
15719 
15720             if (len == 1) {
15721                 id = c;
15722                 goto id_register;
15723             }
15724             for (i = 0; i < op_tbl_count; i++) {
15725                 if (*op_tbl[i].name == *m &&
15726                     strcmp(op_tbl[i].name, m) == 0) {
15727                     id = op_tbl[i].token;
15728                     goto id_register;
15729                 }
15730             }
15731         }
15732 
15733         if (m[last] == '=') {
15734             /* attribute assignment */
15735             id = rb_intern3(name, last, enc);
15736             if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15737                 enc = rb_enc_get(rb_id2str(id));
15738                 id = rb_id_attrset(id);
15739                 goto id_register;
15740             }
15741             id = ID_ATTRSET;
15742         }
15743         else if (rb_enc_isupper(m[0], enc)) {
15744             id = ID_CONST;
15745         }
15746         else {
15747             id = ID_LOCAL;
15748         }
15749         break;
15750     }
15751     mb = 0;
15752     if (!rb_enc_isdigit(*m, enc)) {
15753         while (m <= name + last && is_identchar(m, e, enc)) {
15754             if (ISASCII(*m)) {
15755                 m++;
15756             }
15757             else {
15758                 mb = 1;
15759                 m += rb_enc_mbclen(m, e, enc);
15760             }
15761         }
15762     }
15763     if (m - name < len) id = ID_JUNK;
15764     if (enc != rb_usascii_encoding()) {
15765         /*
15766          * this clause makes sense only when called from other than
15767          * rb_intern_str() taking care of code-range.
15768          */
15769         if (!mb) {
15770             for (; m <= name + len; ++m) {
15771                 if (!ISASCII(*m)) goto mbstr;
15772             }
15773             enc = rb_usascii_encoding();
15774         }
15775       mbstr:;
15776     }
15777   new_id:
15778     if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15779         if (len > 20) {
15780             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15781                      name);
15782         }
15783         else {
15784             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15785                      (int)len, name);
15786         }
15787     }
15788     id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15789   id_register:
15790     return register_symid(id, name, len, enc);
15791 }
15792 
15793 ID
15794 rb_intern2(const char *name, long len)
15795 {
15796     return rb_intern3(name, len, rb_usascii_encoding());
15797 }
15798 
15799 #undef rb_intern
15800 ID
15801 rb_intern(const char *name)
15802 {
15803     return rb_intern2(name, strlen(name));
15804 }
15805 
15806 ID
15807 rb_intern_str(VALUE str)
15808 {
15809     rb_encoding *enc;
15810     ID id;
15811 
15812     if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15813         enc = rb_usascii_encoding();
15814     }
15815     else {
15816         enc = rb_enc_get(str);
15817     }
15818     id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15819     RB_GC_GUARD(str);
15820     return id;
15821 }
15822 
15823 VALUE
15824 rb_id2str(ID id)
15825 {
15826     st_data_t data;
15827 
15828     if (id < tLAST_TOKEN) {
15829         int i = 0;
15830 
15831         if (id < INT_MAX && rb_ispunct((int)id)) {
15832             VALUE str = global_symbols.op_sym[i = (int)id];
15833             if (!str) {
15834                 char name[2];
15835                 name[0] = (char)id;
15836                 name[1] = 0;
15837                 str = rb_usascii_str_new(name, 1);
15838                 OBJ_FREEZE(str);
15839                 global_symbols.op_sym[i] = str;
15840             }
15841             return str;
15842         }
15843         for (i = 0; i < op_tbl_count; i++) {
15844             if (op_tbl[i].token == id) {
15845                 VALUE str = global_symbols.op_sym[i];
15846                 if (!str) {
15847                     str = rb_usascii_str_new2(op_tbl[i].name);
15848                     OBJ_FREEZE(str);
15849                     global_symbols.op_sym[i] = str;
15850                 }
15851                 return str;
15852             }
15853         }
15854     }
15855 
15856     if (st_lookup(global_symbols.id_str, id, &data)) {
15857         VALUE str = (VALUE)data;
15858         if (RBASIC(str)->klass == 0)
15859             RBASIC(str)->klass = rb_cString;
15860         return str;
15861     }
15862 
15863     if (is_attrset_id(id)) {
15864         ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15865         VALUE str;
15866 
15867         while (!(str = rb_id2str(id2))) {
15868             if (!is_local_id(id2)) return 0;
15869             id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15870         }
15871         str = rb_str_dup(str);
15872         rb_str_cat(str, "=", 1);
15873         rb_intern_str(str);
15874         if (st_lookup(global_symbols.id_str, id, &data)) {
15875             VALUE str = (VALUE)data;
15876             if (RBASIC(str)->klass == 0)
15877                 RBASIC(str)->klass = rb_cString;
15878             return str;
15879         }
15880     }
15881     return 0;
15882 }
15883 
15884 const char *
15885 rb_id2name(ID id)
15886 {
15887     VALUE str = rb_id2str(id);
15888 
15889     if (!str) return 0;
15890     return RSTRING_PTR(str);
15891 }
15892 
15893 static int
15894 symbols_i(VALUE sym, ID value, VALUE ary)
15895 {
15896     rb_ary_push(ary, ID2SYM(value));
15897     return ST_CONTINUE;
15898 }
15899 
15900 /*
15901  *  call-seq:
15902  *     Symbol.all_symbols    => array
15903  *
15904  *  Returns an array of all the symbols currently in Ruby's symbol
15905  *  table.
15906  *
15907  *     Symbol.all_symbols.size    #=> 903
15908  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
15909  *                                     :chown, :EOFError, :$;, :String,
15910  *                                     :LOCK_SH, :"setuid?", :$<,
15911  *                                     :default_proc, :compact, :extend,
15912  *                                     :Tms, :getwd, :$=, :ThreadGroup,
15913  *                                     :wait2, :$>]
15914  */
15915 
15916 VALUE
15917 rb_sym_all_symbols(void)
15918 {
15919     VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15920 
15921     st_foreach(global_symbols.sym_id, symbols_i, ary);
15922     return ary;
15923 }
15924 
15925 int
15926 rb_is_const_id(ID id)
15927 {
15928     return is_const_id(id);
15929 }
15930 
15931 int
15932 rb_is_class_id(ID id)
15933 {
15934     return is_class_id(id);
15935 }
15936 
15937 int
15938 rb_is_instance_id(ID id)
15939 {
15940     return is_instance_id(id);
15941 }
15942 
15943 int
15944 rb_is_local_id(ID id)
15945 {
15946     return is_local_id(id);
15947 }
15948 
15949 int
15950 rb_is_junk_id(ID id)
15951 {
15952     return is_junk_id(id);
15953 }
15954 
15955 #endif /* !RIPPER */
15956 
15957 static void
15958 parser_initialize(struct parser_params *parser)
15959 {
15960     parser->eofp = Qfalse;
15961 
15962     parser->parser_lex_strterm = 0;
15963     parser->parser_cond_stack = 0;
15964     parser->parser_cmdarg_stack = 0;
15965     parser->parser_class_nest = 0;
15966     parser->parser_paren_nest = 0;
15967     parser->parser_lpar_beg = 0;
15968     parser->parser_in_single = 0;
15969     parser->parser_in_def = 0;
15970     parser->parser_in_defined = 0;
15971     parser->parser_compile_for_eval = 0;
15972     parser->parser_cur_mid = 0;
15973     parser->parser_tokenbuf = NULL;
15974     parser->parser_tokidx = 0;
15975     parser->parser_toksiz = 0;
15976     parser->parser_heredoc_end = 0;
15977     parser->parser_command_start = TRUE;
15978     parser->parser_deferred_nodes = 0;
15979     parser->parser_lex_pbeg = 0;
15980     parser->parser_lex_p = 0;
15981     parser->parser_lex_pend = 0;
15982     parser->parser_lvtbl = 0;
15983     parser->parser_ruby__end__seen = 0;
15984     parser->parser_ruby_sourcefile = 0;
15985 #ifndef RIPPER
15986     parser->is_ripper = 0;
15987     parser->parser_eval_tree_begin = 0;
15988     parser->parser_eval_tree = 0;
15989 #else
15990     parser->is_ripper = 1;
15991     parser->parser_ruby_sourcefile_string = Qnil;
15992     parser->delayed = Qnil;
15993 
15994     parser->result = Qnil;
15995     parser->parsing_thread = Qnil;
15996     parser->toplevel_p = TRUE;
15997 #endif
15998 #ifdef YYMALLOC
15999     parser->heap = NULL;
16000 #endif
16001     parser->enc = rb_usascii_encoding();
16002 }
16003 
16004 #ifdef RIPPER
16005 #define parser_mark ripper_parser_mark
16006 #define parser_free ripper_parser_free
16007 #endif
16008 
16009 static void
16010 parser_mark(void *ptr)
16011 {
16012     struct parser_params *p = (struct parser_params*)ptr;
16013 
16014     rb_gc_mark((VALUE)p->parser_lex_strterm);
16015     rb_gc_mark((VALUE)p->parser_deferred_nodes);
16016     rb_gc_mark(p->parser_lex_input);
16017     rb_gc_mark(p->parser_lex_lastline);
16018     rb_gc_mark(p->parser_lex_nextline);
16019 #ifndef RIPPER
16020     rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
16021     rb_gc_mark((VALUE)p->parser_eval_tree) ;
16022     rb_gc_mark(p->debug_lines);
16023 #else
16024     rb_gc_mark(p->parser_ruby_sourcefile_string);
16025     rb_gc_mark(p->delayed);
16026     rb_gc_mark(p->value);
16027     rb_gc_mark(p->result);
16028     rb_gc_mark(p->parsing_thread);
16029 #endif
16030 #ifdef YYMALLOC
16031     rb_gc_mark((VALUE)p->heap);
16032 #endif
16033 }
16034 
16035 static void
16036 parser_free(void *ptr)
16037 {
16038     struct parser_params *p = (struct parser_params*)ptr;
16039     struct local_vars *local, *prev;
16040 
16041     if (p->parser_tokenbuf) {
16042         xfree(p->parser_tokenbuf);
16043     }
16044     for (local = p->parser_lvtbl; local; local = prev) {
16045         if (local->vars) xfree(local->vars);
16046         prev = local->prev;
16047         xfree(local);
16048     }
16049 #ifndef RIPPER
16050     xfree(p->parser_ruby_sourcefile);
16051 #endif
16052     xfree(p);
16053 }
16054 
16055 static size_t
16056 parser_memsize(const void *ptr)
16057 {
16058     struct parser_params *p = (struct parser_params*)ptr;
16059     struct local_vars *local;
16060     size_t size = sizeof(*p);
16061 
16062     if (!ptr) return 0;
16063     size += p->parser_toksiz;
16064     for (local = p->parser_lvtbl; local; local = local->prev) {
16065         size += sizeof(*local);
16066         if (local->vars) size += local->vars->capa * sizeof(ID);
16067     }
16068 #ifndef RIPPER
16069     if (p->parser_ruby_sourcefile) {
16070         size += strlen(p->parser_ruby_sourcefile) + 1;
16071     }
16072 #endif
16073     return size;
16074 }
16075 
16076 static const rb_data_type_t parser_data_type = {
16077     "parser",
16078     parser_mark,
16079     parser_free,
16080     parser_memsize,
16081 };
16082 
16083 VALUE rb_parser_get_yydebug(VALUE);
16084 VALUE rb_parser_set_yydebug(VALUE, VALUE);
16085 
16086 #ifndef RIPPER
16087 #undef rb_reserved_word
16088 
16089 const struct kwtable *
16090 rb_reserved_word(const char *str, unsigned int len)
16091 {
16092     return reserved_word(str, len);
16093 }
16094 
16095 static struct parser_params *
16096 parser_new(void)
16097 {
16098     struct parser_params *p;
16099 
16100     p = ALLOC_N(struct parser_params, 1);
16101     MEMZERO(p, struct parser_params, 1);
16102     parser_initialize(p);
16103     return p;
16104 }
16105 
16106 VALUE
16107 rb_parser_new(void)
16108 {
16109     struct parser_params *p = parser_new();
16110 
16111     return TypedData_Wrap_Struct(0, &parser_data_type, p);
16112 }
16113 
16114 /*
16115  *  call-seq:
16116  *    ripper#end_seen?   -> Boolean
16117  *
16118  *  Return if parsed source ended by +\_\_END\_\_+.
16119  *  This number starts from 1.
16120  */
16121 VALUE
16122 rb_parser_end_seen_p(VALUE vparser)
16123 {
16124     struct parser_params *parser;
16125 
16126     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16127     return ruby__end__seen ? Qtrue : Qfalse;
16128 }
16129 
16130 /*
16131  *  call-seq:
16132  *    ripper#encoding   -> encoding
16133  *
16134  *  Return encoding of the source.
16135  */
16136 VALUE
16137 rb_parser_encoding(VALUE vparser)
16138 {
16139     struct parser_params *parser;
16140 
16141     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16142     return rb_enc_from_encoding(parser->enc);
16143 }
16144 
16145 /*
16146  *  call-seq:
16147  *    ripper.yydebug   -> true or false
16148  *
16149  *  Get yydebug.
16150  */
16151 VALUE
16152 rb_parser_get_yydebug(VALUE self)
16153 {
16154     struct parser_params *parser;
16155 
16156     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16157     return yydebug ? Qtrue : Qfalse;
16158 }
16159 
16160 /*
16161  *  call-seq:
16162  *    ripper.yydebug = flag
16163  *
16164  *  Set yydebug.
16165  */
16166 VALUE
16167 rb_parser_set_yydebug(VALUE self, VALUE flag)
16168 {
16169     struct parser_params *parser;
16170 
16171     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16172     yydebug = RTEST(flag);
16173     return flag;
16174 }
16175 
16176 #ifdef YYMALLOC
16177 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16178 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16179 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16180                            (n)->u3.cnt = (c), (p))
16181 
16182 void *
16183 rb_parser_malloc(struct parser_params *parser, size_t size)
16184 {
16185     size_t cnt = HEAPCNT(1, size);
16186     NODE *n = NEWHEAP();
16187     void *ptr = xmalloc(size);
16188 
16189     return ADD2HEAP(n, cnt, ptr);
16190 }
16191 
16192 void *
16193 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16194 {
16195     size_t cnt = HEAPCNT(nelem, size);
16196     NODE *n = NEWHEAP();
16197     void *ptr = xcalloc(nelem, size);
16198 
16199     return ADD2HEAP(n, cnt, ptr);
16200 }
16201 
16202 void *
16203 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16204 {
16205     NODE *n;
16206     size_t cnt = HEAPCNT(1, size);
16207 
16208     if (ptr && (n = parser->heap) != NULL) {
16209         do {
16210             if (n->u1.node == ptr) {
16211                 n->u1.node = ptr = xrealloc(ptr, size);
16212                 if (n->u3.cnt) n->u3.cnt = cnt;
16213                 return ptr;
16214             }
16215         } while ((n = n->u2.node) != NULL);
16216     }
16217     n = NEWHEAP();
16218     ptr = xrealloc(ptr, size);
16219     return ADD2HEAP(n, cnt, ptr);
16220 }
16221 
16222 void
16223 rb_parser_free(struct parser_params *parser, void *ptr)
16224 {
16225     NODE **prev = &parser->heap, *n;
16226 
16227     while ((n = *prev) != NULL) {
16228         if (n->u1.node == ptr) {
16229             *prev = n->u2.node;
16230             rb_gc_force_recycle((VALUE)n);
16231             break;
16232         }
16233         prev = &n->u2.node;
16234     }
16235     xfree(ptr);
16236 }
16237 #endif
16238 #endif
16239 
16240 #ifdef RIPPER
16241 #ifdef RIPPER_DEBUG
16242 extern int rb_is_pointer_to_heap(VALUE);
16243 
16244 /* :nodoc: */
16245 static VALUE
16246 ripper_validate_object(VALUE self, VALUE x)
16247 {
16248     if (x == Qfalse) return x;
16249     if (x == Qtrue) return x;
16250     if (x == Qnil) return x;
16251     if (x == Qundef)
16252         rb_raise(rb_eArgError, "Qundef given");
16253     if (FIXNUM_P(x)) return x;
16254     if (SYMBOL_P(x)) return x;
16255     if (!rb_is_pointer_to_heap(x))
16256         rb_raise(rb_eArgError, "invalid pointer: %p", x);
16257     switch (TYPE(x)) {
16258       case T_STRING:
16259       case T_OBJECT:
16260       case T_ARRAY:
16261       case T_BIGNUM:
16262       case T_FLOAT:
16263         return x;
16264       case T_NODE:
16265         if (nd_type(x) != NODE_LASGN) {
16266             rb_raise(rb_eArgError, "NODE given: %p", x);
16267         }
16268         return ((NODE *)x)->nd_rval;
16269       default:
16270         rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16271                  x, rb_obj_classname(x));
16272     }
16273     return x;
16274 }
16275 #endif
16276 
16277 #define validate(x) (x = get_value(x))
16278 
16279 static VALUE
16280 ripper_dispatch0(struct parser_params *parser, ID mid)
16281 {
16282     return rb_funcall(parser->value, mid, 0);
16283 }
16284 
16285 static VALUE
16286 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16287 {
16288     validate(a);
16289     return rb_funcall(parser->value, mid, 1, a);
16290 }
16291 
16292 static VALUE
16293 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16294 {
16295     validate(a);
16296     validate(b);
16297     return rb_funcall(parser->value, mid, 2, a, b);
16298 }
16299 
16300 static VALUE
16301 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16302 {
16303     validate(a);
16304     validate(b);
16305     validate(c);
16306     return rb_funcall(parser->value, mid, 3, a, b, c);
16307 }
16308 
16309 static VALUE
16310 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16311 {
16312     validate(a);
16313     validate(b);
16314     validate(c);
16315     validate(d);
16316     return rb_funcall(parser->value, mid, 4, a, b, c, d);
16317 }
16318 
16319 static VALUE
16320 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16321 {
16322     validate(a);
16323     validate(b);
16324     validate(c);
16325     validate(d);
16326     validate(e);
16327     return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16328 }
16329 
16330 static const struct kw_assoc {
16331     ID id;
16332     const char *name;
16333 } keyword_to_name[] = {
16334     {keyword_class,     "class"},
16335     {keyword_module,    "module"},
16336     {keyword_def,       "def"},
16337     {keyword_undef,     "undef"},
16338     {keyword_begin,     "begin"},
16339     {keyword_rescue,    "rescue"},
16340     {keyword_ensure,    "ensure"},
16341     {keyword_end,       "end"},
16342     {keyword_if,        "if"},
16343     {keyword_unless,    "unless"},
16344     {keyword_then,      "then"},
16345     {keyword_elsif,     "elsif"},
16346     {keyword_else,      "else"},
16347     {keyword_case,      "case"},
16348     {keyword_when,      "when"},
16349     {keyword_while,     "while"},
16350     {keyword_until,     "until"},
16351     {keyword_for,       "for"},
16352     {keyword_break,     "break"},
16353     {keyword_next,      "next"},
16354     {keyword_redo,      "redo"},
16355     {keyword_retry,     "retry"},
16356     {keyword_in,        "in"},
16357     {keyword_do,        "do"},
16358     {keyword_do_cond,   "do"},
16359     {keyword_do_block,  "do"},
16360     {keyword_return,    "return"},
16361     {keyword_yield,     "yield"},
16362     {keyword_super,     "super"},
16363     {keyword_self,      "self"},
16364     {keyword_nil,       "nil"},
16365     {keyword_true,      "true"},
16366     {keyword_false,     "false"},
16367     {keyword_and,       "and"},
16368     {keyword_or,        "or"},
16369     {keyword_not,       "not"},
16370     {modifier_if,       "if"},
16371     {modifier_unless,   "unless"},
16372     {modifier_while,    "while"},
16373     {modifier_until,    "until"},
16374     {modifier_rescue,   "rescue"},
16375     {keyword_alias,     "alias"},
16376     {keyword_defined,   "defined?"},
16377     {keyword_BEGIN,     "BEGIN"},
16378     {keyword_END,       "END"},
16379     {keyword__LINE__,   "__LINE__"},
16380     {keyword__FILE__,   "__FILE__"},
16381     {keyword__ENCODING__, "__ENCODING__"},
16382     {0, NULL}
16383 };
16384 
16385 static const char*
16386 keyword_id_to_str(ID id)
16387 {
16388     const struct kw_assoc *a;
16389 
16390     for (a = keyword_to_name; a->id; a++) {
16391         if (a->id == id)
16392             return a->name;
16393     }
16394     return NULL;
16395 }
16396 
16397 #undef ripper_id2sym
16398 static VALUE
16399 ripper_id2sym(ID id)
16400 {
16401     const char *name;
16402     char buf[8];
16403 
16404     if (id <= 256) {
16405         buf[0] = (char)id;
16406         buf[1] = '\0';
16407         return ID2SYM(rb_intern2(buf, 1));
16408     }
16409     if ((name = keyword_id_to_str(id))) {
16410         return ID2SYM(rb_intern(name));
16411     }
16412     switch (id) {
16413       case tOROP:
16414         name = "||";
16415         break;
16416       case tANDOP:
16417         name = "&&";
16418         break;
16419       default:
16420         name = rb_id2name(id);
16421         if (!name) {
16422             rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16423         }
16424         return ID2SYM(id);
16425     }
16426     return ID2SYM(rb_intern(name));
16427 }
16428 
16429 static ID
16430 ripper_get_id(VALUE v)
16431 {
16432     NODE *nd;
16433     if (!RB_TYPE_P(v, T_NODE)) return 0;
16434     nd = (NODE *)v;
16435     if (nd_type(nd) != NODE_LASGN) return 0;
16436     return nd->nd_vid;
16437 }
16438 
16439 static VALUE
16440 ripper_get_value(VALUE v)
16441 {
16442     NODE *nd;
16443     if (v == Qundef) return Qnil;
16444     if (!RB_TYPE_P(v, T_NODE)) return v;
16445     nd = (NODE *)v;
16446     if (nd_type(nd) != NODE_LASGN) return Qnil;
16447     return nd->nd_rval;
16448 }
16449 
16450 static void
16451 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16452 {
16453     VALUE str;
16454     va_list args;
16455 
16456     va_start(args, fmt);
16457     str = rb_vsprintf(fmt, args);
16458     va_end(args);
16459     rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16460 }
16461 
16462 static void
16463 ripper_warn0(struct parser_params *parser, const char *fmt)
16464 {
16465     rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16466 }
16467 
16468 static void
16469 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16470 {
16471     rb_funcall(parser->value, rb_intern("warn"), 2,
16472                STR_NEW2(fmt), INT2NUM(a));
16473 }
16474 
16475 #if 0
16476 static void
16477 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16478 {
16479     rb_funcall(parser->value, rb_intern("warn"), 2,
16480                STR_NEW2(fmt), STR_NEW2(str));
16481 }
16482 #endif
16483 
16484 static void
16485 ripper_warning0(struct parser_params *parser, const char *fmt)
16486 {
16487     rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16488 }
16489 
16490 static void
16491 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16492 {
16493     rb_funcall(parser->value, rb_intern("warning"), 2,
16494                STR_NEW2(fmt), STR_NEW2(str));
16495 }
16496 
16497 static VALUE
16498 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16499 {
16500     return rb_funcall(src, ripper_id_gets, 0);
16501 }
16502 
16503 static VALUE
16504 ripper_s_allocate(VALUE klass)
16505 {
16506     struct parser_params *p;
16507     VALUE self;
16508 
16509     p = ALLOC_N(struct parser_params, 1);
16510     MEMZERO(p, struct parser_params, 1);
16511     self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16512     p->value = self;
16513     return self;
16514 }
16515 
16516 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16517 
16518 /*
16519  *  call-seq:
16520  *    Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
16521  *
16522  *  Create a new Ripper object.
16523  *  _src_ must be a String, an IO, or an Object which has #gets method.
16524  *
16525  *  This method does not starts parsing.
16526  *  See also Ripper#parse and Ripper.parse.
16527  */
16528 static VALUE
16529 ripper_initialize(int argc, VALUE *argv, VALUE self)
16530 {
16531     struct parser_params *parser;
16532     VALUE src, fname, lineno;
16533 
16534     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16535     rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16536     if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16537         parser->parser_lex_gets = ripper_lex_get_generic;
16538     }
16539     else {
16540         StringValue(src);
16541         parser->parser_lex_gets = lex_get_str;
16542     }
16543     parser->parser_lex_input = src;
16544     parser->eofp = Qfalse;
16545     if (NIL_P(fname)) {
16546         fname = STR_NEW2("(ripper)");
16547     }
16548     else {
16549         StringValue(fname);
16550     }
16551     parser_initialize(parser);
16552 
16553     parser->parser_ruby_sourcefile_string = fname;
16554     parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16555     parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16556 
16557     return Qnil;
16558 }
16559 
16560 extern VALUE rb_thread_pass(void);
16561 
16562 struct ripper_args {
16563     struct parser_params *parser;
16564     int argc;
16565     VALUE *argv;
16566 };
16567 
16568 static VALUE
16569 ripper_parse0(VALUE parser_v)
16570 {
16571     struct parser_params *parser;
16572 
16573     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16574     parser_prepare(parser);
16575     ripper_yyparse((void*)parser);
16576     return parser->result;
16577 }
16578 
16579 static VALUE
16580 ripper_ensure(VALUE parser_v)
16581 {
16582     struct parser_params *parser;
16583 
16584     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16585     parser->parsing_thread = Qnil;
16586     return Qnil;
16587 }
16588 
16589 /*
16590  *  call-seq:
16591  *    ripper#parse
16592  *
16593  *  Start parsing and returns the value of the root action.
16594  */
16595 static VALUE
16596 ripper_parse(VALUE self)
16597 {
16598     struct parser_params *parser;
16599 
16600     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16601     if (!ripper_initialized_p(parser)) {
16602         rb_raise(rb_eArgError, "method called for uninitialized object");
16603     }
16604     if (!NIL_P(parser->parsing_thread)) {
16605         if (parser->parsing_thread == rb_thread_current())
16606             rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16607         else
16608             rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16609     }
16610     parser->parsing_thread = rb_thread_current();
16611     rb_ensure(ripper_parse0, self, ripper_ensure, self);
16612 
16613     return parser->result;
16614 }
16615 
16616 /*
16617  *  call-seq:
16618  *    ripper#column   -> Integer
16619  *
16620  *  Return column number of current parsing line.
16621  *  This number starts from 0.
16622  */
16623 static VALUE
16624 ripper_column(VALUE self)
16625 {
16626     struct parser_params *parser;
16627     long col;
16628 
16629     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16630     if (!ripper_initialized_p(parser)) {
16631         rb_raise(rb_eArgError, "method called for uninitialized object");
16632     }
16633     if (NIL_P(parser->parsing_thread)) return Qnil;
16634     col = parser->tokp - parser->parser_lex_pbeg;
16635     return LONG2NUM(col);
16636 }
16637 
16638 /*
16639  *  call-seq:
16640  *    ripper#filename   -> String
16641  *
16642  *  Return current parsing filename.
16643  */
16644 static VALUE
16645 ripper_filename(VALUE self)
16646 {
16647     struct parser_params *parser;
16648 
16649     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16650     if (!ripper_initialized_p(parser)) {
16651         rb_raise(rb_eArgError, "method called for uninitialized object");
16652     }
16653     return parser->parser_ruby_sourcefile_string;
16654 }
16655 
16656 /*
16657  *  call-seq:
16658  *    ripper#lineno   -> Integer
16659  *
16660  *  Return line number of current parsing line.
16661  *  This number starts from 1.
16662  */
16663 static VALUE
16664 ripper_lineno(VALUE self)
16665 {
16666     struct parser_params *parser;
16667 
16668     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16669     if (!ripper_initialized_p(parser)) {
16670         rb_raise(rb_eArgError, "method called for uninitialized object");
16671     }
16672     if (NIL_P(parser->parsing_thread)) return Qnil;
16673     return INT2NUM(parser->parser_ruby_sourceline);
16674 }
16675 
16676 #ifdef RIPPER_DEBUG
16677 /* :nodoc: */
16678 static VALUE
16679 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16680 {
16681     StringValue(msg);
16682     if (obj == Qundef) {
16683         rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16684     }
16685     return Qnil;
16686 }
16687 
16688 /* :nodoc: */
16689 static VALUE
16690 ripper_value(VALUE self, VALUE obj)
16691 {
16692     return ULONG2NUM(obj);
16693 }
16694 #endif
16695 
16696 void
16697 Init_ripper(void)
16698 {
16699     VALUE Ripper;
16700 
16701     Ripper = rb_define_class("Ripper", rb_cObject);
16702     rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16703     rb_define_alloc_func(Ripper, ripper_s_allocate);
16704     rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16705     rb_define_method(Ripper, "parse", ripper_parse, 0);
16706     rb_define_method(Ripper, "column", ripper_column, 0);
16707     rb_define_method(Ripper, "filename", ripper_filename, 0);
16708     rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16709     rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16710     rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16711     rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16712     rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16713 #ifdef RIPPER_DEBUG
16714     rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16715     rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16716     rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16717 #endif
16718 
16719     ripper_id_gets = rb_intern("gets");
16720     ripper_init_eventids1(Ripper);
16721     ripper_init_eventids2(Ripper);
16722     /* ensure existing in symbol table */
16723     rb_intern("||");
16724     rb_intern("&&");
16725 }
16726 #endif /* RIPPER */
16727 
16728 

Generated on Thu Sep 8 2011 03:50:44 for Ruby by  doxygen 1.7.1