• 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.5.  */
00002 
00003 /* Bison implementation for Yacc-like parsers in C
00004    
00005       Copyright (C) 1984, 1989-1990, 2000-2011 Free Software Foundation, Inc.
00006    
00007    This program is free software: you can redistribute it and/or modify
00008    it under the terms of the GNU General Public License as published by
00009    the Free Software Foundation, either version 3 of the License, or
00010    (at your option) any later version.
00011    
00012    This program is distributed in the hope that it will be useful,
00013    but WITHOUT ANY WARRANTY; without even the implied warranty of
00014    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
00015    GNU General Public License for more details.
00016    
00017    You should have received a copy of the GNU General Public License
00018    along with this program.  If not, see <http://www.gnu.org/licenses/>.  */
00019 
00020 /* As a special exception, you may create a larger work that contains
00021    part or all of the Bison parser skeleton and distribute that work
00022    under terms of your choice, so long as that work isn't itself a
00023    parser generator using the skeleton or a modified version thereof
00024    as a parser skeleton.  Alternatively, if you modify or redistribute
00025    the parser skeleton itself, you may (at your option) remove this
00026    special exception, which will cause the skeleton and the resulting
00027    Bison output files to be licensed under the GNU General Public
00028    License without this special exception.
00029    
00030    This special exception was added by the Free Software Foundation in
00031    version 2.2 of Bison.  */
00032 
00033 /* C LALR(1) parser skeleton written by Richard Stallman, by
00034    simplifying the original so-called "semantic" parser.  */
00035 
00036 /* All symbols defined below should begin with yy or YY, to avoid
00037    infringing on user name space.  This should be done even for local
00038    variables, as they might otherwise be expanded by user macros.
00039    There are some unavoidable exceptions within include files to
00040    define necessary library symbols; they are noted "INFRINGES ON
00041    USER NAME SPACE" below.  */
00042 
00043 /* Identify Bison output.  */
00044 #define YYBISON 1
00045 
00046 /* Bison version.  */
00047 #define YYBISON_VERSION "2.5"
00048 
00049 /* Skeleton name.  */
00050 #define YYSKELETON_NAME "yacc.c"
00051 
00052 /* Pure parsers.  */
00053 #define YYPURE 1
00054 
00055 /* Push parsers.  */
00056 #define YYPUSH 0
00057 
00058 /* Pull parsers.  */
00059 #define YYPULL 1
00060 
00061 /* Using locations.  */
00062 #define YYLSP_NEEDED 0
00063 
00064 
00065 
00066 /* Copy the first part of user declarations.  */
00067 
00068 /* Line 268 of yacc.c  */
00069 #line 12 "parse.y"
00070 
00071 
00072 #define YYDEBUG 1
00073 #define YYERROR_VERBOSE 1
00074 #define YYSTACK_USE_ALLOCA 0
00075 
00076 #include "ruby/ruby.h"
00077 #include "ruby/st.h"
00078 #include "ruby/encoding.h"
00079 #include "node.h"
00080 #include "parse.h"
00081 #include "id.h"
00082 #include "regenc.h"
00083 #include <stdio.h>
00084 #include <errno.h>
00085 #include <ctype.h>
00086 
00087 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00088 
00089 #define YYMALLOC(size)          rb_parser_malloc(parser, size)
00090 #define YYREALLOC(ptr, size)    rb_parser_realloc(parser, ptr, size)
00091 #define YYCALLOC(nelem, size)   rb_parser_calloc(parser, nelem, size)
00092 #define YYFREE(ptr)             rb_parser_free(parser, ptr)
00093 #define malloc  YYMALLOC
00094 #define realloc YYREALLOC
00095 #define calloc  YYCALLOC
00096 #define free    YYFREE
00097 
00098 #ifndef RIPPER
00099 static ID register_symid(ID, const char *, long, rb_encoding *);
00100 #define REGISTER_SYMID(id, name) register_symid(id, name, strlen(name), enc)
00101 #include "id.c"
00102 #endif
00103 
00104 #define is_notop_id(id) ((id)>tLAST_TOKEN)
00105 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00106 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00107 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00108 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00109 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00110 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00111 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00112 
00113 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00114         (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00115          ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00116          ((id)&ID_SCOPE_MASK) == ID_CLASS))
00117 
00118 enum lex_state_e {
00119     EXPR_BEG,                   /* ignore newline, +/- is a sign. */
00120     EXPR_END,                   /* newline significant, +/- is an operator. */
00121     EXPR_ENDARG,                /* ditto, and unbound braces. */
00122     EXPR_ENDFN,                 /* ditto, and unbound braces. */
00123     EXPR_ARG,                   /* newline significant, +/- is an operator. */
00124     EXPR_CMDARG,                /* newline significant, +/- is an operator. */
00125     EXPR_MID,                   /* newline significant, +/- is an operator. */
00126     EXPR_FNAME,                 /* ignore newline, no reserved words. */
00127     EXPR_DOT,                   /* right after `.' or `::', no reserved words. */
00128     EXPR_CLASS,                 /* immediate after `class', no here document. */
00129     EXPR_VALUE,                 /* alike EXPR_BEG but label is disallowed. */
00130     EXPR_MAX_STATE
00131 };
00132 
00133 typedef VALUE stack_type;
00134 
00135 # define BITSTACK_PUSH(stack, n)        (stack = (stack<<1)|((n)&1))
00136 # define BITSTACK_POP(stack)    (stack = stack >> 1)
00137 # define BITSTACK_LEXPOP(stack) (stack = (stack >> 1) | (stack & 1))
00138 # define BITSTACK_SET_P(stack)  (stack&1)
00139 
00140 #define COND_PUSH(n)    BITSTACK_PUSH(cond_stack, n)
00141 #define COND_POP()      BITSTACK_POP(cond_stack)
00142 #define COND_LEXPOP()   BITSTACK_LEXPOP(cond_stack)
00143 #define COND_P()        BITSTACK_SET_P(cond_stack)
00144 
00145 #define CMDARG_PUSH(n)  BITSTACK_PUSH(cmdarg_stack, n)
00146 #define CMDARG_POP()    BITSTACK_POP(cmdarg_stack)
00147 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00148 #define CMDARG_P()      BITSTACK_SET_P(cmdarg_stack)
00149 
00150 struct vtable {
00151     ID *tbl;
00152     int pos;
00153     int capa;
00154     struct vtable *prev;
00155 };
00156 
00157 struct local_vars {
00158     struct vtable *args;
00159     struct vtable *vars;
00160     struct local_vars *prev;
00161 };
00162 
00163 #define DVARS_INHERIT ((void*)1)
00164 #define DVARS_TOPSCOPE NULL
00165 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00166 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00167 
00168 static int
00169 vtable_size(const struct vtable *tbl)
00170 {
00171     if (POINTER_P(tbl)) {
00172         return tbl->pos;
00173     }
00174     else {
00175         return 0;
00176     }
00177 }
00178 
00179 #define VTBL_DEBUG 0
00180 
00181 static struct vtable *
00182 vtable_alloc(struct vtable *prev)
00183 {
00184     struct vtable *tbl = ALLOC(struct vtable);
00185     tbl->pos = 0;
00186     tbl->capa = 8;
00187     tbl->tbl = ALLOC_N(ID, tbl->capa);
00188     tbl->prev = prev;
00189     if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00190     return tbl;
00191 }
00192 
00193 static void
00194 vtable_free(struct vtable *tbl)
00195 {
00196     if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00197     if (POINTER_P(tbl)) {
00198         if (tbl->tbl) {
00199             xfree(tbl->tbl);
00200         }
00201         xfree(tbl);
00202     }
00203 }
00204 
00205 static void
00206 vtable_add(struct vtable *tbl, ID id)
00207 {
00208     if (!POINTER_P(tbl)) {
00209         rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00210     }
00211     if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00212 
00213     if (tbl->pos == tbl->capa) {
00214         tbl->capa = tbl->capa * 2;
00215         REALLOC_N(tbl->tbl, ID, tbl->capa);
00216     }
00217     tbl->tbl[tbl->pos++] = id;
00218 }
00219 
00220 static int
00221 vtable_included(const struct vtable * tbl, ID id)
00222 {
00223     int i;
00224 
00225     if (POINTER_P(tbl)) {
00226         for (i = 0; i < tbl->pos; i++) {
00227             if (tbl->tbl[i] == id) {
00228                 return 1;
00229             }
00230         }
00231     }
00232     return 0;
00233 }
00234 
00235 
00236 #ifndef RIPPER
00237 typedef struct token_info {
00238     const char *token;
00239     int linenum;
00240     int column;
00241     int nonspc;
00242     struct token_info *next;
00243 } token_info;
00244 #endif
00245 
00246 /*
00247     Structure of Lexer Buffer:
00248 
00249  lex_pbeg      tokp         lex_p        lex_pend
00250     |           |              |            |
00251     |-----------+--------------+------------|
00252                 |<------------>|
00253                      token
00254 */
00255 struct parser_params {
00256     int is_ripper;
00257     NODE *heap;
00258 
00259     YYSTYPE *parser_yylval;
00260     VALUE eofp;
00261 
00262     NODE *parser_lex_strterm;
00263     enum lex_state_e parser_lex_state;
00264     stack_type parser_cond_stack;
00265     stack_type parser_cmdarg_stack;
00266     int parser_class_nest;
00267     int parser_paren_nest;
00268     int parser_lpar_beg;
00269     int parser_in_single;
00270     int parser_in_def;
00271     int parser_compile_for_eval;
00272     VALUE parser_cur_mid;
00273     int parser_in_defined;
00274     char *parser_tokenbuf;
00275     int parser_tokidx;
00276     int parser_toksiz;
00277     VALUE parser_lex_input;
00278     VALUE parser_lex_lastline;
00279     VALUE parser_lex_nextline;
00280     const char *parser_lex_pbeg;
00281     const char *parser_lex_p;
00282     const char *parser_lex_pend;
00283     int parser_heredoc_end;
00284     int parser_command_start;
00285     NODE *parser_deferred_nodes;
00286     long parser_lex_gets_ptr;
00287     VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00288     struct local_vars *parser_lvtbl;
00289     int parser_ruby__end__seen;
00290     int line_count;
00291     int has_shebang;
00292     char *parser_ruby_sourcefile; /* current source file */
00293     int parser_ruby_sourceline; /* current line no. */
00294     rb_encoding *enc;
00295     rb_encoding *utf8;
00296 
00297     int parser_yydebug;
00298 
00299 #ifndef RIPPER
00300     /* Ruby core only */
00301     NODE *parser_eval_tree_begin;
00302     NODE *parser_eval_tree;
00303     VALUE debug_lines;
00304     VALUE coverage;
00305     int nerr;
00306 
00307     token_info *parser_token_info;
00308 #else
00309     /* Ripper only */
00310     VALUE parser_ruby_sourcefile_string;
00311     const char *tokp;
00312     VALUE delayed;
00313     int delayed_line;
00314     int delayed_col;
00315 
00316     VALUE value;
00317     VALUE result;
00318     VALUE parsing_thread;
00319     int toplevel_p;
00320 #endif
00321 };
00322 
00323 #define UTF8_ENC() (parser->utf8 ? parser->utf8 : \
00324                     (parser->utf8 = rb_utf8_encoding()))
00325 #define STR_NEW(p,n) rb_enc_str_new((p),(n),parser->enc)
00326 #define STR_NEW0() rb_enc_str_new(0,0,parser->enc)
00327 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),parser->enc)
00328 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),parser->enc)
00329 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00330 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), parser->enc)
00331 
00332 #ifdef YYMALLOC
00333 void *rb_parser_malloc(struct parser_params *, size_t);
00334 void *rb_parser_realloc(struct parser_params *, void *, size_t);
00335 void *rb_parser_calloc(struct parser_params *, size_t, size_t);
00336 void rb_parser_free(struct parser_params *, void *);
00337 #endif
00338 
00339 static int parser_yyerror(struct parser_params*, const char*);
00340 #define yyerror(msg) parser_yyerror(parser, msg)
00341 
00342 #define YYLEX_PARAM parser
00343 
00344 #define lex_strterm             (parser->parser_lex_strterm)
00345 #define lex_state               (parser->parser_lex_state)
00346 #define cond_stack              (parser->parser_cond_stack)
00347 #define cmdarg_stack            (parser->parser_cmdarg_stack)
00348 #define class_nest              (parser->parser_class_nest)
00349 #define paren_nest              (parser->parser_paren_nest)
00350 #define lpar_beg                (parser->parser_lpar_beg)
00351 #define in_single               (parser->parser_in_single)
00352 #define in_def                  (parser->parser_in_def)
00353 #define compile_for_eval        (parser->parser_compile_for_eval)
00354 #define cur_mid                 (parser->parser_cur_mid)
00355 #define in_defined              (parser->parser_in_defined)
00356 #define tokenbuf                (parser->parser_tokenbuf)
00357 #define tokidx                  (parser->parser_tokidx)
00358 #define toksiz                  (parser->parser_toksiz)
00359 #define lex_input               (parser->parser_lex_input)
00360 #define lex_lastline            (parser->parser_lex_lastline)
00361 #define lex_nextline            (parser->parser_lex_nextline)
00362 #define lex_pbeg                (parser->parser_lex_pbeg)
00363 #define lex_p                   (parser->parser_lex_p)
00364 #define lex_pend                (parser->parser_lex_pend)
00365 #define heredoc_end             (parser->parser_heredoc_end)
00366 #define command_start           (parser->parser_command_start)
00367 #define deferred_nodes          (parser->parser_deferred_nodes)
00368 #define lex_gets_ptr            (parser->parser_lex_gets_ptr)
00369 #define lex_gets                (parser->parser_lex_gets)
00370 #define lvtbl                   (parser->parser_lvtbl)
00371 #define ruby__end__seen         (parser->parser_ruby__end__seen)
00372 #define ruby_sourceline         (parser->parser_ruby_sourceline)
00373 #define ruby_sourcefile         (parser->parser_ruby_sourcefile)
00374 #define yydebug                 (parser->parser_yydebug)
00375 #ifdef RIPPER
00376 #else
00377 #define ruby_eval_tree          (parser->parser_eval_tree)
00378 #define ruby_eval_tree_begin    (parser->parser_eval_tree_begin)
00379 #define ruby_debug_lines        (parser->debug_lines)
00380 #define ruby_coverage           (parser->coverage)
00381 #endif
00382 
00383 static int yylex(void*, void*);
00384 
00385 #ifndef RIPPER
00386 #define yyparse ruby_yyparse
00387 
00388 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00389 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, type, a1, a2, a3)
00390 
00391 static NODE *cond_gen(struct parser_params*,NODE*);
00392 #define cond(node) cond_gen(parser, node)
00393 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00394 #define logop(type,node1,node2) logop_gen(parser, type, node1, node2)
00395 
00396 static NODE *newline_node(NODE*);
00397 static void fixpos(NODE*,NODE*);
00398 
00399 static int value_expr_gen(struct parser_params*,NODE*);
00400 static void void_expr_gen(struct parser_params*,NODE*);
00401 static NODE *remove_begin(NODE*);
00402 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00403 #define void_expr0(node) void_expr_gen(parser, (node))
00404 #define void_expr(node) void_expr0((node) = remove_begin(node))
00405 static void void_stmts_gen(struct parser_params*,NODE*);
00406 #define void_stmts(node) void_stmts_gen(parser, node)
00407 static void reduce_nodes_gen(struct parser_params*,NODE**);
00408 #define reduce_nodes(n) reduce_nodes_gen(parser,n)
00409 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00410 #define block_dup_check(n1,n2) block_dup_check_gen(parser,n1,n2)
00411 
00412 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00413 #define block_append(h,t) block_append_gen(parser,h,t)
00414 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00415 #define list_append(l,i) list_append_gen(parser,l,i)
00416 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00417 #define list_concat(h,t) list_concat_gen(parser,h,t)
00418 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00419 #define arg_append(h,t) arg_append_gen(parser,h,t)
00420 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00421 #define arg_concat(h,t) arg_concat_gen(parser,h,t)
00422 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00423 #define literal_concat(h,t) literal_concat_gen(parser,h,t)
00424 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00425 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00426 #define new_evstr(n) new_evstr_gen(parser,n)
00427 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00428 #define evstr2dstr(n) evstr2dstr_gen(parser,n)
00429 static NODE *splat_array(NODE*);
00430 
00431 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00432 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, recv,id,arg1)
00433 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00434 #define call_uni_op(recv,id) call_uni_op_gen(parser, recv,id)
00435 
00436 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,ID);
00437 #define new_args(f,o,r,p,b) new_args_gen(parser, f,o,r,p,b)
00438 
00439 static NODE *negate_lit(NODE*);
00440 static NODE *ret_args_gen(struct parser_params*,NODE*);
00441 #define ret_args(node) ret_args_gen(parser, node)
00442 static NODE *arg_blk_pass(NODE*,NODE*);
00443 static NODE *new_yield_gen(struct parser_params*,NODE*);
00444 #define new_yield(node) new_yield_gen(parser, node)
00445 
00446 static NODE *gettable_gen(struct parser_params*,ID);
00447 #define gettable(id) gettable_gen(parser,id)
00448 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00449 #define assignable(id,node) assignable_gen(parser, id, node)
00450 
00451 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00452 #define aryset(node1,node2) aryset_gen(parser, node1, node2)
00453 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00454 #define attrset(node,id) attrset_gen(parser, node, id)
00455 
00456 static void rb_backref_error_gen(struct parser_params*,NODE*);
00457 #define rb_backref_error(n) rb_backref_error_gen(parser,n)
00458 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00459 #define node_assign(node1, node2) node_assign_gen(parser, node1, node2)
00460 
00461 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00462 #define match_op(node1,node2) match_op_gen(parser, node1, node2)
00463 
00464 static ID  *local_tbl_gen(struct parser_params*);
00465 #define local_tbl() local_tbl_gen(parser)
00466 
00467 static void fixup_nodes(NODE **);
00468 
00469 extern int rb_dvar_defined(ID);
00470 extern int rb_local_defined(ID);
00471 extern int rb_parse_in_eval(void);
00472 extern int rb_parse_in_main(void);
00473 
00474 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00475 #define reg_compile(str,options) reg_compile_gen(parser, str, options)
00476 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00477 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, str, options)
00478 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00479 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, str, options)
00480 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00481 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,regexp,match)
00482 
00483 #define get_id(id) (id)
00484 #define get_value(val) (val)
00485 #else
00486 #define remove_begin(node) (node)
00487 #define rb_dvar_defined(id) 0
00488 #define rb_local_defined(id) 0
00489 static ID ripper_get_id(VALUE);
00490 #define get_id(id) ripper_get_id(id)
00491 static VALUE ripper_get_value(VALUE);
00492 #define get_value(val) ripper_get_value(val)
00493 static VALUE assignable_gen(struct parser_params*,VALUE);
00494 #define assignable(lhs,node) assignable_gen(parser, lhs)
00495 #endif /* !RIPPER */
00496 
00497 static ID formal_argument_gen(struct parser_params*, ID);
00498 #define formal_argument(id) formal_argument_gen(parser, id)
00499 static ID shadowing_lvar_gen(struct parser_params*,ID);
00500 #define shadowing_lvar(name) shadowing_lvar_gen(parser, name)
00501 static void new_bv_gen(struct parser_params*,ID);
00502 #define new_bv(id) new_bv_gen(parser, id)
00503 
00504 static void local_push_gen(struct parser_params*,int);
00505 #define local_push(top) local_push_gen(parser,top)
00506 static void local_pop_gen(struct parser_params*);
00507 #define local_pop() local_pop_gen(parser)
00508 static int local_var_gen(struct parser_params*, ID);
00509 #define local_var(id) local_var_gen(parser, id);
00510 static int arg_var_gen(struct parser_params*, ID);
00511 #define arg_var(id) arg_var_gen(parser, id)
00512 static int  local_id_gen(struct parser_params*, ID);
00513 #define local_id(id) local_id_gen(parser, id)
00514 static ID   internal_id_gen(struct parser_params*);
00515 #define internal_id() internal_id_gen(parser)
00516 
00517 static const struct vtable *dyna_push_gen(struct parser_params *);
00518 #define dyna_push() dyna_push_gen(parser)
00519 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00520 #define dyna_pop(node) dyna_pop_gen(parser, node)
00521 static int dyna_in_block_gen(struct parser_params*);
00522 #define dyna_in_block() dyna_in_block_gen(parser)
00523 #define dyna_var(id) local_var(id)
00524 static int dvar_defined_gen(struct parser_params*,ID);
00525 #define dvar_defined(id) dvar_defined_gen(parser, id)
00526 static int dvar_curr_gen(struct parser_params*,ID);
00527 #define dvar_curr(id) dvar_curr_gen(parser, id)
00528 
00529 static int lvar_defined_gen(struct parser_params*, ID);
00530 #define lvar_defined(id) lvar_defined_gen(parser, id)
00531 
00532 #define RE_OPTION_ONCE (1<<16)
00533 #define RE_OPTION_ENCODING_SHIFT 8
00534 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00535 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00536 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00537 #define RE_OPTION_MASK  0xff
00538 #define RE_OPTION_ARG_ENCODING_NONE 32
00539 
00540 #define NODE_STRTERM NODE_ZARRAY        /* nothing to gc */
00541 #define NODE_HEREDOC NODE_ARRAY         /* 1, 3 to gc */
00542 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00543 #define nd_func u1.id
00544 #if SIZEOF_SHORT == 2
00545 #define nd_term(node) ((signed short)(node)->u2.id)
00546 #else
00547 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00548 #endif
00549 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00550 #define nd_nest u3.cnt
00551 
00552 /****** Ripper *******/
00553 
00554 #ifdef RIPPER
00555 #define RIPPER_VERSION "0.1.0"
00556 
00557 #include "eventids1.c"
00558 #include "eventids2.c"
00559 static ID ripper_id_gets;
00560 
00561 static VALUE ripper_dispatch0(struct parser_params*,ID);
00562 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00563 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00564 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00565 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00566 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00567 
00568 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00569 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), a)
00570 #define dispatch2(n,a,b)        ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), a, b)
00571 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), a, b, c)
00572 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d)
00573 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), a, b, c, d, e)
00574 
00575 #define yyparse ripper_yyparse
00576 
00577 #define ripper_intern(s) ID2SYM(rb_intern(s))
00578 static VALUE ripper_id2sym(ID);
00579 #ifdef __GNUC__
00580 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00581                            ID2SYM(id) : ripper_id2sym(id))
00582 #endif
00583 
00584 #define arg_new() dispatch0(args_new)
00585 #define arg_add(l,a) dispatch2(args_add, l, a)
00586 #define arg_add_star(l,a) dispatch2(args_add_star, l, a)
00587 #define arg_add_block(l,b) dispatch2(args_add_block, l, b)
00588 #define arg_add_optblock(l,b) ((b)==Qundef? l : dispatch2(args_add_block, l, b))
00589 #define bare_assoc(v) dispatch1(bare_assoc_hash, v)
00590 #define arg_add_assocs(l,b) arg_add(l, bare_assoc(b))
00591 
00592 #define args2mrhs(a) dispatch1(mrhs_new_from_args, a)
00593 #define mrhs_new() dispatch0(mrhs_new)
00594 #define mrhs_add(l,a) dispatch2(mrhs_add, l, a)
00595 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, l, a)
00596 
00597 #define mlhs_new() dispatch0(mlhs_new)
00598 #define mlhs_add(l,a) dispatch2(mlhs_add, l, a)
00599 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, l, a)
00600 
00601 #define params_new(pars, opts, rest, pars2, blk) \
00602         dispatch5(params, pars, opts, rest, pars2, blk)
00603 
00604 #define blockvar_new(p,v) dispatch2(block_var, p, v)
00605 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, l, a)
00606 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, l, a)
00607 
00608 #define method_optarg(m,a) ((a)==Qundef ? m : dispatch2(method_add_arg,m,a))
00609 #define method_arg(m,a) dispatch2(method_add_arg,m,a)
00610 #define method_add_block(m,b) dispatch2(method_add_block, m, b)
00611 
00612 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00613 
00614 #define FIXME 0
00615 
00616 #endif /* RIPPER */
00617 
00618 #ifndef RIPPER
00619 # define ifndef_ripper(x) x
00620 #else
00621 # define ifndef_ripper(x)
00622 #endif
00623 
00624 #ifndef RIPPER
00625 # define rb_warn0(fmt)    rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt)
00626 # define rb_warnI(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00627 # define rb_warnS(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, fmt, a)
00628 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt)
00629 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, fmt, a)
00630 #else
00631 # define rb_warn0(fmt)    ripper_warn0(parser, fmt)
00632 # define rb_warnI(fmt,a)  ripper_warnI(parser, fmt, a)
00633 # define rb_warnS(fmt,a)  ripper_warnS(parser, fmt, a)
00634 # define rb_warning0(fmt) ripper_warning0(parser, fmt)
00635 # define rb_warningS(fmt,a) ripper_warningS(parser, fmt, a)
00636 static void ripper_warn0(struct parser_params*, const char*);
00637 static void ripper_warnI(struct parser_params*, const char*, int);
00638 #if 0
00639 static void ripper_warnS(struct parser_params*, const char*, const char*);
00640 #endif
00641 static void ripper_warning0(struct parser_params*, const char*);
00642 static void ripper_warningS(struct parser_params*, const char*, const char*);
00643 #endif
00644 
00645 #ifdef RIPPER
00646 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00647 # define rb_compile_error ripper_compile_error
00648 # define compile_error ripper_compile_error
00649 # define PARSER_ARG parser,
00650 #else
00651 # define compile_error parser->nerr++,rb_compile_error
00652 # define PARSER_ARG ruby_sourcefile, ruby_sourceline,
00653 #endif
00654 
00655 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
00656    for instance).  This is too low for Ruby to parse some files, such as
00657    date/format.rb, therefore bump the value up to at least Bison's default. */
00658 #ifdef OLD_YACC
00659 #ifndef YYMAXDEPTH
00660 #define YYMAXDEPTH 10000
00661 #endif
00662 #endif
00663 
00664 #ifndef RIPPER
00665 static void token_info_push(struct parser_params*, const char *token);
00666 static void token_info_pop(struct parser_params*, const char *token);
00667 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, token) : (void)0)
00668 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, token) : (void)0)
00669 #else
00670 #define token_info_push(token) /* nothing */
00671 #define token_info_pop(token) /* nothing */
00672 #endif
00673 
00674 
00675 /* Line 268 of yacc.c  */
00676 #line 677 "parse.c"
00677 
00678 /* Enabling traces.  */
00679 #ifndef YYDEBUG
00680 # define YYDEBUG 0
00681 #endif
00682 
00683 /* Enabling verbose error messages.  */
00684 #ifdef YYERROR_VERBOSE
00685 # undef YYERROR_VERBOSE
00686 # define YYERROR_VERBOSE 1
00687 #else
00688 # define YYERROR_VERBOSE 0
00689 #endif
00690 
00691 /* Enabling the token table.  */
00692 #ifndef YYTOKEN_TABLE
00693 # define YYTOKEN_TABLE 0
00694 #endif
00695 
00696 
00697 /* Tokens.  */
00698 #ifndef YYTOKENTYPE
00699 # define YYTOKENTYPE
00700    /* Put the tokens into the symbol table, so that GDB and other debuggers
00701       know about them.  */
00702    enum yytokentype {
00703      keyword_class = 258,
00704      keyword_module = 259,
00705      keyword_def = 260,
00706      keyword_undef = 261,
00707      keyword_begin = 262,
00708      keyword_rescue = 263,
00709      keyword_ensure = 264,
00710      keyword_end = 265,
00711      keyword_if = 266,
00712      keyword_unless = 267,
00713      keyword_then = 268,
00714      keyword_elsif = 269,
00715      keyword_else = 270,
00716      keyword_case = 271,
00717      keyword_when = 272,
00718      keyword_while = 273,
00719      keyword_until = 274,
00720      keyword_for = 275,
00721      keyword_break = 276,
00722      keyword_next = 277,
00723      keyword_redo = 278,
00724      keyword_retry = 279,
00725      keyword_in = 280,
00726      keyword_do = 281,
00727      keyword_do_cond = 282,
00728      keyword_do_block = 283,
00729      keyword_do_LAMBDA = 284,
00730      keyword_return = 285,
00731      keyword_yield = 286,
00732      keyword_super = 287,
00733      keyword_self = 288,
00734      keyword_nil = 289,
00735      keyword_true = 290,
00736      keyword_false = 291,
00737      keyword_and = 292,
00738      keyword_or = 293,
00739      keyword_not = 294,
00740      modifier_if = 295,
00741      modifier_unless = 296,
00742      modifier_while = 297,
00743      modifier_until = 298,
00744      modifier_rescue = 299,
00745      keyword_alias = 300,
00746      keyword_defined = 301,
00747      keyword_BEGIN = 302,
00748      keyword_END = 303,
00749      keyword__LINE__ = 304,
00750      keyword__FILE__ = 305,
00751      keyword__ENCODING__ = 306,
00752      tIDENTIFIER = 307,
00753      tFID = 308,
00754      tGVAR = 309,
00755      tIVAR = 310,
00756      tCONSTANT = 311,
00757      tCVAR = 312,
00758      tLABEL = 313,
00759      tINTEGER = 314,
00760      tFLOAT = 315,
00761      tSTRING_CONTENT = 316,
00762      tCHAR = 317,
00763      tNTH_REF = 318,
00764      tBACK_REF = 319,
00765      tREGEXP_END = 320,
00766      tUPLUS = 321,
00767      tUMINUS = 322,
00768      tPOW = 323,
00769      tCMP = 324,
00770      tEQ = 325,
00771      tEQQ = 326,
00772      tNEQ = 327,
00773      tGEQ = 328,
00774      tLEQ = 329,
00775      tANDOP = 330,
00776      tOROP = 331,
00777      tMATCH = 332,
00778      tNMATCH = 333,
00779      tDOT2 = 334,
00780      tDOT3 = 335,
00781      tAREF = 336,
00782      tASET = 337,
00783      tLSHFT = 338,
00784      tRSHFT = 339,
00785      tCOLON2 = 340,
00786      tCOLON3 = 341,
00787      tOP_ASGN = 342,
00788      tASSOC = 343,
00789      tLPAREN = 344,
00790      tLPAREN_ARG = 345,
00791      tRPAREN = 346,
00792      tLBRACK = 347,
00793      tLBRACE = 348,
00794      tLBRACE_ARG = 349,
00795      tSTAR = 350,
00796      tAMPER = 351,
00797      tLAMBDA = 352,
00798      tSYMBEG = 353,
00799      tSTRING_BEG = 354,
00800      tXSTRING_BEG = 355,
00801      tREGEXP_BEG = 356,
00802      tWORDS_BEG = 357,
00803      tQWORDS_BEG = 358,
00804      tSTRING_DBEG = 359,
00805      tSTRING_DVAR = 360,
00806      tSTRING_END = 361,
00807      tLAMBEG = 362,
00808      tLOWEST = 363,
00809      tUMINUS_NUM = 364,
00810      idNULL = 365,
00811      idRespond_to = 366,
00812      idIFUNC = 367,
00813      idCFUNC = 368,
00814      id_core_set_method_alias = 369,
00815      id_core_set_variable_alias = 370,
00816      id_core_undef_method = 371,
00817      id_core_define_method = 372,
00818      id_core_define_singleton_method = 373,
00819      id_core_set_postexe = 374,
00820      tLAST_TOKEN = 375
00821    };
00822 #endif
00823 
00824 
00825 
00826 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00827 typedef union YYSTYPE
00828 {
00829 
00830 /* Line 293 of yacc.c  */
00831 #line 620 "parse.y"
00832 
00833     VALUE val;
00834     NODE *node;
00835     ID id;
00836     int num;
00837     const struct vtable *vars;
00838 
00839 
00840 
00841 /* Line 293 of yacc.c  */
00842 #line 843 "parse.c"
00843 } YYSTYPE;
00844 # define YYSTYPE_IS_TRIVIAL 1
00845 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00846 # define YYSTYPE_IS_DECLARED 1
00847 #endif
00848 
00849 
00850 /* Copy the second part of user declarations.  */
00851 
00852 
00853 /* Line 343 of yacc.c  */
00854 #line 855 "parse.c"
00855 
00856 #ifdef short
00857 # undef short
00858 #endif
00859 
00860 #ifdef YYTYPE_UINT8
00861 typedef YYTYPE_UINT8 yytype_uint8;
00862 #else
00863 typedef unsigned char yytype_uint8;
00864 #endif
00865 
00866 #ifdef YYTYPE_INT8
00867 typedef YYTYPE_INT8 yytype_int8;
00868 #elif (defined __STDC__ || defined __C99__FUNC__ \
00869      || defined __cplusplus || defined _MSC_VER)
00870 typedef signed char yytype_int8;
00871 #else
00872 typedef short int yytype_int8;
00873 #endif
00874 
00875 #ifdef YYTYPE_UINT16
00876 typedef YYTYPE_UINT16 yytype_uint16;
00877 #else
00878 typedef unsigned short int yytype_uint16;
00879 #endif
00880 
00881 #ifdef YYTYPE_INT16
00882 typedef YYTYPE_INT16 yytype_int16;
00883 #else
00884 typedef short int yytype_int16;
00885 #endif
00886 
00887 #ifndef YYSIZE_T
00888 # ifdef __SIZE_TYPE__
00889 #  define YYSIZE_T __SIZE_TYPE__
00890 # elif defined size_t
00891 #  define YYSIZE_T size_t
00892 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00893      || defined __cplusplus || defined _MSC_VER)
00894 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00895 #  define YYSIZE_T size_t
00896 # else
00897 #  define YYSIZE_T unsigned int
00898 # endif
00899 #endif
00900 
00901 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00902 
00903 #ifndef YY_
00904 # if defined YYENABLE_NLS && YYENABLE_NLS
00905 #  if ENABLE_NLS
00906 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
00907 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
00908 #  endif
00909 # endif
00910 # ifndef YY_
00911 #  define YY_(msgid) msgid
00912 # endif
00913 #endif
00914 
00915 /* Suppress unused-variable warnings by "using" E.  */
00916 #if ! defined lint || defined __GNUC__
00917 # define YYUSE(e) ((void) (e))
00918 #else
00919 # define YYUSE(e) /* empty */
00920 #endif
00921 
00922 /* Identity function, used to suppress warnings about constant conditions.  */
00923 #ifndef lint
00924 # define YYID(n) (n)
00925 #else
00926 #if (defined __STDC__ || defined __C99__FUNC__ \
00927      || defined __cplusplus || defined _MSC_VER)
00928 static int
00929 YYID (int yyi)
00930 #else
00931 static int
00932 YYID (yyi)
00933     int yyi;
00934 #endif
00935 {
00936   return yyi;
00937 }
00938 #endif
00939 
00940 #if ! defined yyoverflow || YYERROR_VERBOSE
00941 
00942 /* The parser invokes alloca or malloc; define the necessary symbols.  */
00943 
00944 # ifdef YYSTACK_USE_ALLOCA
00945 #  if YYSTACK_USE_ALLOCA
00946 #   ifdef __GNUC__
00947 #    define YYSTACK_ALLOC __builtin_alloca
00948 #   elif defined __BUILTIN_VA_ARG_INCR
00949 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
00950 #   elif defined _AIX
00951 #    define YYSTACK_ALLOC __alloca
00952 #   elif defined _MSC_VER
00953 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
00954 #    define alloca _alloca
00955 #   else
00956 #    define YYSTACK_ALLOC alloca
00957 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00958      || defined __cplusplus || defined _MSC_VER)
00959 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00960 #     ifndef EXIT_SUCCESS
00961 #      define EXIT_SUCCESS 0
00962 #     endif
00963 #    endif
00964 #   endif
00965 #  endif
00966 # endif
00967 
00968 # ifdef YYSTACK_ALLOC
00969    /* Pacify GCC's `empty if-body' warning.  */
00970 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
00971 #  ifndef YYSTACK_ALLOC_MAXIMUM
00972     /* The OS might guarantee only one guard page at the bottom of the stack,
00973        and a page size can be as small as 4096 bytes.  So we cannot safely
00974        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
00975        to allow for a few compiler-allocated temporary stack slots.  */
00976 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
00977 #  endif
00978 # else
00979 #  define YYSTACK_ALLOC YYMALLOC
00980 #  define YYSTACK_FREE YYFREE
00981 #  ifndef YYSTACK_ALLOC_MAXIMUM
00982 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
00983 #  endif
00984 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
00985        && ! ((defined YYMALLOC || defined malloc) \
00986              && (defined YYFREE || defined free)))
00987 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
00988 #   ifndef EXIT_SUCCESS
00989 #    define EXIT_SUCCESS 0
00990 #   endif
00991 #  endif
00992 #  ifndef YYMALLOC
00993 #   define YYMALLOC malloc
00994 #   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
00995      || defined __cplusplus || defined _MSC_VER)
00996 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
00997 #   endif
00998 #  endif
00999 #  ifndef YYFREE
01000 #   define YYFREE free
01001 #   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01002      || defined __cplusplus || defined _MSC_VER)
01003 void free (void *); /* INFRINGES ON USER NAME SPACE */
01004 #   endif
01005 #  endif
01006 # endif
01007 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
01008 
01009 
01010 #if (! defined yyoverflow \
01011      && (! defined __cplusplus \
01012          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01013 
01014 /* A type that is properly aligned for any stack member.  */
01015 union yyalloc
01016 {
01017   yytype_int16 yyss_alloc;
01018   YYSTYPE yyvs_alloc;
01019 };
01020 
01021 /* The size of the maximum gap between one aligned stack and the next.  */
01022 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01023 
01024 /* The size of an array large to enough to hold all stacks, each with
01025    N elements.  */
01026 # define YYSTACK_BYTES(N) \
01027      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01028       + YYSTACK_GAP_MAXIMUM)
01029 
01030 # define YYCOPY_NEEDED 1
01031 
01032 /* Relocate STACK from its old location to the new one.  The
01033    local variables YYSIZE and YYSTACKSIZE give the old and new number of
01034    elements in the stack, and YYPTR gives the new location of the
01035    stack.  Advance YYPTR to a properly aligned location for the next
01036    stack.  */
01037 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
01038     do                                                                  \
01039       {                                                                 \
01040         YYSIZE_T yynewbytes;                                            \
01041         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
01042         Stack = &yyptr->Stack_alloc;                                    \
01043         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01044         yyptr += yynewbytes / sizeof (*yyptr);                          \
01045       }                                                                 \
01046     while (YYID (0))
01047 
01048 #endif
01049 
01050 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
01051 /* Copy COUNT objects from FROM to TO.  The source and destination do
01052    not overlap.  */
01053 # ifndef YYCOPY
01054 #  if defined __GNUC__ && 1 < __GNUC__
01055 #   define YYCOPY(To, From, Count) \
01056       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01057 #  else
01058 #   define YYCOPY(To, From, Count)              \
01059       do                                        \
01060         {                                       \
01061           YYSIZE_T yyi;                         \
01062           for (yyi = 0; yyi < (Count); yyi++)   \
01063             (To)[yyi] = (From)[yyi];            \
01064         }                                       \
01065       while (YYID (0))
01066 #  endif
01067 # endif
01068 #endif /* !YYCOPY_NEEDED */
01069 
01070 /* YYFINAL -- State number of the termination state.  */
01071 #define YYFINAL  3
01072 /* YYLAST -- Last index in YYTABLE.  */
01073 #define YYLAST   10410
01074 
01075 /* YYNTOKENS -- Number of terminals.  */
01076 #define YYNTOKENS  148
01077 /* YYNNTS -- Number of nonterminals.  */
01078 #define YYNNTS  172
01079 /* YYNRULES -- Number of rules.  */
01080 #define YYNRULES  565
01081 /* YYNRULES -- Number of states.  */
01082 #define YYNSTATES  975
01083 
01084 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
01085 #define YYUNDEFTOK  2
01086 #define YYMAXUTOK   375
01087 
01088 #define YYTRANSLATE(YYX)                                                \
01089   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01090 
01091 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
01092 static const yytype_uint8 yytranslate[] =
01093 {
01094        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01095      147,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01096        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01097        2,     2,   146,   123,     2,     2,     2,   121,   116,     2,
01098      142,   143,   119,   117,   140,   118,   139,   120,     2,     2,
01099        2,     2,     2,     2,     2,     2,     2,     2,   111,   145,
01100      113,   109,   112,   110,     2,     2,     2,     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,   138,     2,   144,   115,     2,   141,     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,   136,   114,   137,   124,     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,     2,     2,     2,     2,
01117        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01118        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01119        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
01120        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
01121       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
01122       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
01123       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
01124       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
01125       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
01126       65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
01127       75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
01128       85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
01129       95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
01130      105,   106,   107,   108,   122,   125,   126,   127,   128,   129,
01131      130,   131,   132,   133,   134,   135
01132 };
01133 
01134 #if YYDEBUG
01135 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
01136    YYRHS.  */
01137 static const yytype_uint16 yyprhs[] =
01138 {
01139        0,     0,     3,     4,     7,    10,    12,    14,    18,    21,
01140       23,    24,    30,    35,    38,    40,    42,    46,    49,    50,
01141       55,    59,    63,    67,    70,    74,    78,    82,    86,    90,
01142       95,    99,   103,   107,   114,   120,   126,   132,   138,   142,
01143      146,   150,   154,   156,   158,   162,   166,   170,   173,   175,
01144      177,   179,   181,   183,   188,   193,   194,   200,   203,   207,
01145      212,   218,   223,   229,   232,   235,   238,   241,   244,   246,
01146      250,   252,   256,   258,   261,   265,   271,   274,   279,   282,
01147      287,   289,   293,   295,   299,   302,   306,   308,   312,   314,
01148      319,   323,   327,   331,   335,   338,   340,   342,   347,   351,
01149      355,   359,   363,   366,   368,   370,   372,   375,   377,   381,
01150      383,   385,   387,   389,   391,   393,   395,   397,   399,   401,
01151      402,   407,   409,   411,   413,   415,   417,   419,   421,   423,
01152      425,   427,   429,   431,   433,   435,   437,   439,   441,   443,
01153      445,   447,   449,   451,   453,   455,   457,   459,   461,   463,
01154      465,   467,   469,   471,   473,   475,   477,   479,   481,   483,
01155      485,   487,   489,   491,   493,   495,   497,   499,   501,   503,
01156      505,   507,   509,   511,   513,   515,   517,   519,   521,   523,
01157      525,   527,   529,   531,   533,   535,   537,   539,   541,   543,
01158      545,   547,   551,   557,   561,   567,   574,   580,   586,   592,
01159      598,   603,   607,   611,   615,   619,   623,   627,   631,   635,
01160      639,   644,   649,   652,   655,   659,   663,   667,   671,   675,
01161      679,   683,   687,   691,   695,   699,   703,   707,   710,   713,
01162      717,   721,   725,   729,   730,   735,   742,   744,   746,   748,
01163      751,   756,   759,   763,   765,   767,   769,   771,   773,   776,
01164      779,   784,   786,   787,   790,   793,   796,   798,   800,   802,
01165      805,   809,   814,   818,   823,   826,   828,   830,   832,   834,
01166      836,   838,   840,   842,   844,   845,   850,   851,   856,   860,
01167      864,   867,   871,   875,   877,   882,   886,   888,   889,   896,
01168      901,   905,   908,   910,   913,   916,   923,   930,   931,   932,
01169      940,   941,   942,   950,   956,   961,   962,   963,   973,   974,
01170      981,   982,   983,   992,   993,   999,  1000,  1007,  1008,  1009,
01171     1019,  1021,  1023,  1025,  1027,  1029,  1031,  1033,  1035,  1037,
01172     1039,  1041,  1043,  1045,  1047,  1049,  1051,  1053,  1055,  1058,
01173     1060,  1062,  1064,  1070,  1072,  1075,  1077,  1079,  1081,  1085,
01174     1087,  1091,  1093,  1098,  1105,  1109,  1115,  1118,  1123,  1125,
01175     1129,  1136,  1145,  1150,  1157,  1162,  1165,  1172,  1175,  1180,
01176     1187,  1190,  1195,  1198,  1203,  1205,  1207,  1209,  1213,  1215,
01177     1220,  1222,  1225,  1227,  1231,  1233,  1235,  1236,  1237,  1242,
01178     1247,  1249,  1253,  1257,  1258,  1264,  1267,  1272,  1277,  1280,
01179     1285,  1290,  1294,  1298,  1302,  1305,  1307,  1312,  1313,  1319,
01180     1320,  1326,  1332,  1334,  1336,  1343,  1345,  1347,  1349,  1351,
01181     1354,  1356,  1359,  1361,  1363,  1365,  1367,  1369,  1371,  1373,
01182     1376,  1380,  1384,  1388,  1392,  1396,  1397,  1401,  1403,  1406,
01183     1410,  1414,  1415,  1419,  1420,  1423,  1424,  1427,  1428,  1431,
01184     1433,  1434,  1438,  1439,  1440,  1446,  1448,  1450,  1452,  1454,
01185     1457,  1459,  1461,  1463,  1465,  1469,  1471,  1473,  1476,  1479,
01186     1481,  1483,  1485,  1487,  1489,  1491,  1493,  1495,  1497,  1499,
01187     1501,  1503,  1505,  1507,  1509,  1511,  1513,  1514,  1519,  1522,
01188     1526,  1529,  1536,  1545,  1550,  1557,  1562,  1569,  1572,  1577,
01189     1584,  1587,  1592,  1595,  1600,  1602,  1603,  1605,  1607,  1609,
01190     1611,  1613,  1615,  1617,  1621,  1623,  1627,  1631,  1635,  1637,
01191     1641,  1643,  1647,  1649,  1651,  1654,  1656,  1658,  1660,  1663,
01192     1666,  1668,  1670,  1671,  1676,  1678,  1681,  1683,  1687,  1691,
01193     1694,  1696,  1698,  1700,  1702,  1704,  1706,  1708,  1710,  1712,
01194     1714,  1716,  1718,  1719,  1721,  1722,  1724,  1727,  1730,  1731,
01195     1733,  1735,  1737,  1739,  1741,  1744
01196 };
01197 
01198 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
01199 static const yytype_int16 yyrhs[] =
01200 {
01201      149,     0,    -1,    -1,   150,   151,    -1,   152,   312,    -1,
01202      319,    -1,   153,    -1,   152,   318,   153,    -1,     1,   153,
01203       -1,   158,    -1,    -1,    47,   154,   136,   151,   137,    -1,
01204      156,   255,   230,   258,    -1,   157,   312,    -1,   319,    -1,
01205      158,    -1,   157,   318,   158,    -1,     1,   158,    -1,    -1,
01206       45,   179,   159,   179,    -1,    45,    54,    54,    -1,    45,
01207       54,    64,    -1,    45,    54,    63,    -1,     6,   180,    -1,
01208      158,    40,   161,    -1,   158,    41,   161,    -1,   158,    42,
01209      161,    -1,   158,    43,   161,    -1,   158,    44,   158,    -1,
01210       48,   136,   156,   137,    -1,   174,   109,   162,    -1,   167,
01211      109,   162,    -1,   284,    87,   162,    -1,   215,   138,   190,
01212      315,    87,   162,    -1,   215,   139,    52,    87,   162,    -1,
01213      215,   139,    56,    87,   162,    -1,   215,    85,    56,    87,
01214      162,    -1,   215,    85,    52,    87,   162,    -1,   285,    87,
01215      162,    -1,   174,   109,   197,    -1,   167,   109,   186,    -1,
01216      167,   109,   197,    -1,   160,    -1,   162,    -1,   160,    37,
01217      160,    -1,   160,    38,   160,    -1,    39,   313,   160,    -1,
01218      123,   162,    -1,   184,    -1,   160,    -1,   166,    -1,   163,
01219       -1,   248,    -1,   248,   139,   309,   192,    -1,   248,    85,
01220      309,   192,    -1,    -1,    94,   165,   236,   156,   137,    -1,
01221      308,   192,    -1,   308,   192,   164,    -1,   215,   139,   309,
01222      192,    -1,   215,   139,   309,   192,   164,    -1,   215,    85,
01223      309,   192,    -1,   215,    85,   309,   192,   164,    -1,    32,
01224      192,    -1,    31,   192,    -1,    30,   191,    -1,    21,   191,
01225       -1,    22,   191,    -1,   169,    -1,    89,   168,   314,    -1,
01226      169,    -1,    89,   168,   314,    -1,   171,    -1,   171,   170,
01227       -1,   171,    95,   173,    -1,   171,    95,   173,   140,   172,
01228       -1,   171,    95,    -1,   171,    95,   140,   172,    -1,    95,
01229      173,    -1,    95,   173,   140,   172,    -1,    95,    -1,    95,
01230      140,   172,    -1,   173,    -1,    89,   168,   314,    -1,   170,
01231      140,    -1,   171,   170,   140,    -1,   170,    -1,   172,   140,
01232      170,    -1,   282,    -1,   215,   138,   190,   315,    -1,   215,
01233      139,    52,    -1,   215,    85,    52,    -1,   215,   139,    56,
01234       -1,   215,    85,    56,    -1,    86,    56,    -1,   285,    -1,
01235      282,    -1,   215,   138,   190,   315,    -1,   215,   139,    52,
01236       -1,   215,    85,    52,    -1,   215,   139,    56,    -1,   215,
01237       85,    56,    -1,    86,    56,    -1,   285,    -1,    52,    -1,
01238       56,    -1,    86,   175,    -1,   175,    -1,   215,    85,   175,
01239       -1,    52,    -1,    56,    -1,    53,    -1,   182,    -1,   183,
01240       -1,   177,    -1,   278,    -1,   178,    -1,   280,    -1,   179,
01241       -1,    -1,   180,   140,   181,   179,    -1,   114,    -1,   115,
01242       -1,   116,    -1,    69,    -1,    70,    -1,    71,    -1,    77,
01243       -1,    78,    -1,   112,    -1,    73,    -1,   113,    -1,    74,
01244       -1,    72,    -1,    83,    -1,    84,    -1,   117,    -1,   118,
01245       -1,   119,    -1,    95,    -1,   120,    -1,   121,    -1,    68,
01246       -1,   123,    -1,   124,    -1,    66,    -1,    67,    -1,    81,
01247       -1,    82,    -1,   141,    -1,    49,    -1,    50,    -1,    51,
01248       -1,    47,    -1,    48,    -1,    45,    -1,    37,    -1,     7,
01249       -1,    21,    -1,    16,    -1,     3,    -1,     5,    -1,    46,
01250       -1,    26,    -1,    15,    -1,    14,    -1,    10,    -1,     9,
01251       -1,    36,    -1,    20,    -1,    25,    -1,     4,    -1,    22,
01252       -1,    34,    -1,    39,    -1,    38,    -1,    23,    -1,     8,
01253       -1,    24,    -1,    30,    -1,    33,    -1,    32,    -1,    13,
01254       -1,    35,    -1,     6,    -1,    17,    -1,    31,    -1,    11,
01255       -1,    12,    -1,    18,    -1,    19,    -1,   174,   109,   184,
01256       -1,   174,   109,   184,    44,   184,    -1,   284,    87,   184,
01257       -1,   284,    87,   184,    44,   184,    -1,   215,   138,   190,
01258      315,    87,   184,    -1,   215,   139,    52,    87,   184,    -1,
01259      215,   139,    56,    87,   184,    -1,   215,    85,    52,    87,
01260      184,    -1,   215,    85,    56,    87,   184,    -1,    86,    56,
01261       87,   184,    -1,   285,    87,   184,    -1,   184,    79,   184,
01262       -1,   184,    80,   184,    -1,   184,   117,   184,    -1,   184,
01263      118,   184,    -1,   184,   119,   184,    -1,   184,   120,   184,
01264       -1,   184,   121,   184,    -1,   184,    68,   184,    -1,   122,
01265       59,    68,   184,    -1,   122,    60,    68,   184,    -1,    66,
01266      184,    -1,    67,   184,    -1,   184,   114,   184,    -1,   184,
01267      115,   184,    -1,   184,   116,   184,    -1,   184,    69,   184,
01268       -1,   184,   112,   184,    -1,   184,    73,   184,    -1,   184,
01269      113,   184,    -1,   184,    74,   184,    -1,   184,    70,   184,
01270       -1,   184,    71,   184,    -1,   184,    72,   184,    -1,   184,
01271       77,   184,    -1,   184,    78,   184,    -1,   123,   184,    -1,
01272      124,   184,    -1,   184,    83,   184,    -1,   184,    84,   184,
01273       -1,   184,    75,   184,    -1,   184,    76,   184,    -1,    -1,
01274       46,   313,   185,   184,    -1,   184,   110,   184,   313,   111,
01275      184,    -1,   198,    -1,   184,    -1,   319,    -1,   196,   316,
01276       -1,   196,   140,   306,   316,    -1,   306,   316,    -1,   142,
01277      190,   314,    -1,   319,    -1,   188,    -1,   319,    -1,   191,
01278       -1,   166,    -1,   196,   195,    -1,   306,   195,    -1,   196,
01279      140,   306,   195,    -1,   194,    -1,    -1,   193,   191,    -1,
01280       96,   186,    -1,   140,   194,    -1,   140,    -1,   319,    -1,
01281      186,    -1,    95,   186,    -1,   196,   140,   186,    -1,   196,
01282      140,    95,   186,    -1,   196,   140,   186,    -1,   196,   140,
01283       95,   186,    -1,    95,   186,    -1,   259,    -1,   260,    -1,
01284      263,    -1,   264,    -1,   265,    -1,   268,    -1,   283,    -1,
01285      285,    -1,    53,    -1,    -1,   216,   199,   155,   226,    -1,
01286       -1,    90,   160,   200,   314,    -1,    89,   156,   143,    -1,
01287      215,    85,    56,    -1,    86,    56,    -1,    92,   187,   144,
01288       -1,    93,   305,   137,    -1,    30,    -1,    31,   142,   191,
01289      314,    -1,    31,   142,   314,    -1,    31,    -1,    -1,    46,
01290      313,   142,   201,   160,   314,    -1,    39,   142,   160,   314,
01291       -1,    39,   142,   314,    -1,   308,   250,    -1,   249,    -1,
01292      249,   250,    -1,    97,   241,    -1,   217,   161,   227,   156,
01293      229,   226,    -1,   218,   161,   227,   156,   230,   226,    -1,
01294       -1,    -1,   219,   202,   161,   228,   203,   156,   226,    -1,
01295       -1,    -1,   220,   204,   161,   228,   205,   156,   226,    -1,
01296      221,   161,   312,   253,   226,    -1,   221,   312,   253,   226,
01297       -1,    -1,    -1,   222,   231,    25,   206,   161,   228,   207,
01298      156,   226,    -1,    -1,   223,   176,   286,   208,   155,   226,
01299       -1,    -1,    -1,   223,    83,   160,   209,   317,   210,   155,
01300      226,    -1,    -1,   224,   176,   211,   155,   226,    -1,    -1,
01301      225,   177,   212,   288,   155,   226,    -1,    -1,    -1,   225,
01302      303,   311,   213,   177,   214,   288,   155,   226,    -1,    21,
01303       -1,    22,    -1,    23,    -1,    24,    -1,   198,    -1,     7,
01304       -1,    11,    -1,    12,    -1,    18,    -1,    19,    -1,    16,
01305       -1,    20,    -1,     3,    -1,     4,    -1,     5,    -1,    10,
01306       -1,   317,    -1,    13,    -1,   317,    13,    -1,   317,    -1,
01307       27,    -1,   230,    -1,    14,   161,   227,   156,   229,    -1,
01308      319,    -1,    15,   156,    -1,   174,    -1,   167,    -1,   291,
01309       -1,    89,   234,   314,    -1,   232,    -1,   233,   140,   232,
01310       -1,   233,    -1,   233,   140,    95,   291,    -1,   233,   140,
01311       95,   291,   140,   233,    -1,   233,   140,    95,    -1,   233,
01312      140,    95,   140,   233,    -1,    95,   291,    -1,    95,   291,
01313      140,   233,    -1,    95,    -1,    95,   140,   233,    -1,   293,
01314      140,   296,   140,   299,   302,    -1,   293,   140,   296,   140,
01315      299,   140,   293,   302,    -1,   293,   140,   296,   302,    -1,
01316      293,   140,   296,   140,   293,   302,    -1,   293,   140,   299,
01317      302,    -1,   293,   140,    -1,   293,   140,   299,   140,   293,
01318      302,    -1,   293,   302,    -1,   296,   140,   299,   302,    -1,
01319      296,   140,   299,   140,   293,   302,    -1,   296,   302,    -1,
01320      296,   140,   293,   302,    -1,   299,   302,    -1,   299,   140,
01321      293,   302,    -1,   301,    -1,   319,    -1,   237,    -1,   114,
01322      238,   114,    -1,    76,    -1,   114,   235,   238,   114,    -1,
01323      319,    -1,   145,   239,    -1,   240,    -1,   239,   140,   240,
01324       -1,    52,    -1,   290,    -1,    -1,    -1,   242,   243,   244,
01325      245,    -1,   142,   289,   238,   314,    -1,   289,    -1,   107,
01326      156,   137,    -1,    29,   156,    10,    -1,    -1,    28,   247,
01327      236,   156,    10,    -1,   166,   246,    -1,   248,   139,   309,
01328      189,    -1,   248,    85,   309,   189,    -1,   308,   188,    -1,
01329      215,   139,   309,   189,    -1,   215,    85,   309,   188,    -1,
01330      215,    85,   310,    -1,   215,   139,   188,    -1,   215,    85,
01331      188,    -1,    32,   188,    -1,    32,    -1,   215,   138,   190,
01332      315,    -1,    -1,   136,   251,   236,   156,   137,    -1,    -1,
01333       26,   252,   236,   156,    10,    -1,    17,   196,   227,   156,
01334      254,    -1,   230,    -1,   253,    -1,     8,   256,   257,   227,
01335      156,   255,    -1,   319,    -1,   186,    -1,   197,    -1,   319,
01336       -1,    88,   174,    -1,   319,    -1,     9,   156,    -1,   319,
01337       -1,   281,    -1,   278,    -1,   280,    -1,   261,    -1,    62,
01338       -1,   262,    -1,   261,   262,    -1,    99,   270,   106,    -1,
01339      100,   271,   106,    -1,   101,   272,    65,    -1,   102,   146,
01340      106,    -1,   102,   266,   106,    -1,    -1,   266,   267,   146,
01341       -1,   273,    -1,   267,   273,    -1,   103,   146,   106,    -1,
01342      103,   269,   106,    -1,    -1,   269,    61,   146,    -1,    -1,
01343      270,   273,    -1,    -1,   271,   273,    -1,    -1,   272,   273,
01344       -1,    61,    -1,    -1,   105,   274,   277,    -1,    -1,    -1,
01345      104,   275,   276,   156,   137,    -1,    54,    -1,    55,    -1,
01346       57,    -1,   285,    -1,    98,   279,    -1,   177,    -1,    55,
01347       -1,    54,    -1,    57,    -1,    98,   271,   106,    -1,    59,
01348       -1,    60,    -1,   122,    59,    -1,   122,    60,    -1,    52,
01349       -1,    55,    -1,    54,    -1,    56,    -1,    57,    -1,    34,
01350       -1,    33,    -1,    35,    -1,    36,    -1,    50,    -1,    49,
01351       -1,    51,    -1,   282,    -1,   282,    -1,    63,    -1,    64,
01352       -1,   317,    -1,    -1,   113,   287,   161,   317,    -1,     1,
01353      317,    -1,   142,   289,   314,    -1,   289,   317,    -1,   293,
01354      140,   297,   140,   299,   302,    -1,   293,   140,   297,   140,
01355      299,   140,   293,   302,    -1,   293,   140,   297,   302,    -1,
01356      293,   140,   297,   140,   293,   302,    -1,   293,   140,   299,
01357      302,    -1,   293,   140,   299,   140,   293,   302,    -1,   293,
01358      302,    -1,   297,   140,   299,   302,    -1,   297,   140,   299,
01359      140,   293,   302,    -1,   297,   302,    -1,   297,   140,   293,
01360      302,    -1,   299,   302,    -1,   299,   140,   293,   302,    -1,
01361      301,    -1,    -1,    56,    -1,    55,    -1,    54,    -1,    57,
01362       -1,   290,    -1,    52,    -1,   291,    -1,    89,   234,   314,
01363       -1,   292,    -1,   293,   140,   292,    -1,    52,   109,   186,
01364       -1,    52,   109,   215,    -1,   295,    -1,   296,   140,   295,
01365       -1,   294,    -1,   297,   140,   294,    -1,   119,    -1,    95,
01366       -1,   298,    52,    -1,   298,    -1,   116,    -1,    96,    -1,
01367      300,    52,    -1,   140,   301,    -1,   319,    -1,   283,    -1,
01368       -1,   142,   304,   160,   314,    -1,   319,    -1,   306,   316,
01369       -1,   307,    -1,   306,   140,   307,    -1,   186,    88,   186,
01370       -1,    58,   186,    -1,    52,    -1,    56,    -1,    53,    -1,
01371       52,    -1,    56,    -1,    53,    -1,   182,    -1,    52,    -1,
01372       53,    -1,   182,    -1,   139,    -1,    85,    -1,    -1,   318,
01373       -1,    -1,   147,    -1,   313,   143,    -1,   313,   144,    -1,
01374       -1,   147,    -1,   140,    -1,   145,    -1,   147,    -1,   317,
01375       -1,   318,   145,    -1,    -1
01376 };
01377 
01378 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
01379 static const yytype_uint16 yyrline[] =
01380 {
01381        0,   786,   786,   786,   817,   828,   837,   845,   853,   859,
01382      861,   860,   884,   917,   928,   937,   945,   953,   959,   959,
01383      967,   975,   986,   996,  1004,  1013,  1022,  1035,  1048,  1057,
01384     1069,  1078,  1088,  1117,  1138,  1155,  1172,  1183,  1200,  1210,
01385     1219,  1228,  1237,  1240,  1241,  1249,  1257,  1265,  1273,  1276,
01386     1288,  1289,  1292,  1293,  1302,  1314,  1313,  1335,  1344,  1356,
01387     1365,  1377,  1386,  1398,  1407,  1416,  1424,  1432,  1442,  1443,
01388     1453,  1454,  1464,  1472,  1480,  1488,  1497,  1505,  1514,  1522,
01389     1531,  1539,  1550,  1551,  1561,  1569,  1579,  1587,  1597,  1601,
01390     1609,  1617,  1625,  1633,  1645,  1655,  1667,  1676,  1684,  1692,
01391     1700,  1708,  1721,  1734,  1745,  1753,  1756,  1764,  1772,  1782,
01392     1783,  1784,  1785,  1790,  1801,  1802,  1805,  1813,  1816,  1824,
01393     1824,  1834,  1835,  1836,  1837,  1838,  1839,  1840,  1841,  1842,
01394     1843,  1844,  1845,  1846,  1847,  1848,  1849,  1850,  1851,  1852,
01395     1853,  1854,  1855,  1856,  1857,  1858,  1859,  1860,  1861,  1862,
01396     1865,  1865,  1865,  1866,  1866,  1867,  1867,  1867,  1868,  1868,
01397     1868,  1868,  1869,  1869,  1869,  1869,  1870,  1870,  1870,  1871,
01398     1871,  1871,  1871,  1872,  1872,  1872,  1872,  1873,  1873,  1873,
01399     1873,  1874,  1874,  1874,  1874,  1875,  1875,  1875,  1875,  1876,
01400     1876,  1879,  1888,  1898,  1927,  1958,  1984,  2001,  2018,  2035,
01401     2046,  2057,  2068,  2082,  2096,  2104,  2112,  2120,  2128,  2136,
01402     2144,  2153,  2162,  2170,  2178,  2186,  2194,  2202,  2210,  2218,
01403     2226,  2234,  2242,  2250,  2258,  2266,  2277,  2285,  2293,  2301,
01404     2309,  2317,  2325,  2333,  2333,  2343,  2353,  2359,  2371,  2372,
01405     2376,  2384,  2394,  2404,  2405,  2408,  2409,  2412,  2421,  2429,
01406     2439,  2448,  2457,  2457,  2469,  2479,  2483,  2487,  2493,  2501,
01407     2509,  2523,  2539,  2553,  2568,  2578,  2579,  2580,  2581,  2582,
01408     2583,  2584,  2585,  2586,  2595,  2594,  2619,  2619,  2628,  2636,
01409     2644,  2652,  2665,  2673,  2681,  2689,  2697,  2705,  2705,  2715,
01410     2723,  2731,  2742,  2743,  2754,  2758,  2770,  2782,  2782,  2782,
01411     2793,  2793,  2793,  2804,  2815,  2824,  2826,  2823,  2890,  2889,
01412     2911,  2916,  2910,  2935,  2934,  2956,  2955,  2978,  2979,  2978,
01413     2999,  3007,  3015,  3023,  3033,  3045,  3051,  3057,  3063,  3069,
01414     3075,  3081,  3087,  3093,  3099,  3109,  3115,  3120,  3121,  3128,
01415     3133,  3136,  3137,  3150,  3151,  3161,  3162,  3165,  3173,  3183,
01416     3191,  3201,  3209,  3218,  3227,  3235,  3243,  3252,  3264,  3272,
01417     3282,  3290,  3298,  3306,  3314,  3322,  3331,  3339,  3347,  3355,
01418     3363,  3371,  3379,  3387,  3395,  3405,  3406,  3412,  3421,  3430,
01419     3441,  3442,  3452,  3459,  3468,  3476,  3482,  3485,  3482,  3503,
01420     3511,  3521,  3525,  3532,  3531,  3552,  3568,  3577,  3588,  3597,
01421     3607,  3617,  3625,  3636,  3647,  3655,  3663,  3678,  3677,  3697,
01422     3696,  3717,  3729,  3730,  3733,  3752,  3755,  3763,  3771,  3774,
01423     3778,  3781,  3789,  3792,  3793,  3801,  3804,  3821,  3822,  3823,
01424     3833,  3843,  3870,  3935,  3944,  3955,  3962,  3972,  3980,  3990,
01425     3999,  4010,  4017,  4028,  4035,  4046,  4053,  4064,  4071,  4100,
01426     4102,  4101,  4118,  4124,  4117,  4143,  4151,  4159,  4167,  4170,
01427     4181,  4182,  4183,  4184,  4187,  4217,  4218,  4219,  4227,  4237,
01428     4238,  4239,  4240,  4241,  4242,  4243,  4244,  4245,  4246,  4247,
01429     4248,  4251,  4261,  4271,  4272,  4275,  4284,  4283,  4291,  4303,
01430     4313,  4319,  4327,  4335,  4343,  4351,  4359,  4367,  4375,  4383,
01431     4391,  4399,  4407,  4415,  4423,  4432,  4441,  4450,  4459,  4468,
01432     4479,  4480,  4487,  4496,  4515,  4522,  4535,  4547,  4559,  4567,
01433     4583,  4591,  4607,  4608,  4611,  4624,  4635,  4636,  4639,  4656,
01434     4660,  4670,  4680,  4680,  4709,  4710,  4720,  4727,  4737,  4745,
01435     4755,  4756,  4757,  4760,  4761,  4762,  4763,  4766,  4767,  4768,
01436     4771,  4776,  4783,  4784,  4787,  4788,  4791,  4794,  4797,  4798,
01437     4799,  4802,  4803,  4806,  4807,  4811
01438 };
01439 #endif
01440 
01441 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01442 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01443    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
01444 static const char *const yytname[] =
01445 {
01446   "$end", "error", "$undefined", "keyword_class", "keyword_module",
01447   "keyword_def", "keyword_undef", "keyword_begin", "keyword_rescue",
01448   "keyword_ensure", "keyword_end", "keyword_if", "keyword_unless",
01449   "keyword_then", "keyword_elsif", "keyword_else", "keyword_case",
01450   "keyword_when", "keyword_while", "keyword_until", "keyword_for",
01451   "keyword_break", "keyword_next", "keyword_redo", "keyword_retry",
01452   "keyword_in", "keyword_do", "keyword_do_cond", "keyword_do_block",
01453   "keyword_do_LAMBDA", "keyword_return", "keyword_yield", "keyword_super",
01454   "keyword_self", "keyword_nil", "keyword_true", "keyword_false",
01455   "keyword_and", "keyword_or", "keyword_not", "modifier_if",
01456   "modifier_unless", "modifier_while", "modifier_until", "modifier_rescue",
01457   "keyword_alias", "keyword_defined", "keyword_BEGIN", "keyword_END",
01458   "keyword__LINE__", "keyword__FILE__", "keyword__ENCODING__",
01459   "tIDENTIFIER", "tFID", "tGVAR", "tIVAR", "tCONSTANT", "tCVAR", "tLABEL",
01460   "tINTEGER", "tFLOAT", "tSTRING_CONTENT", "tCHAR", "tNTH_REF",
01461   "tBACK_REF", "tREGEXP_END", "tUPLUS", "tUMINUS", "tPOW", "tCMP", "tEQ",
01462   "tEQQ", "tNEQ", "tGEQ", "tLEQ", "tANDOP", "tOROP", "tMATCH", "tNMATCH",
01463   "tDOT2", "tDOT3", "tAREF", "tASET", "tLSHFT", "tRSHFT", "tCOLON2",
01464   "tCOLON3", "tOP_ASGN", "tASSOC", "tLPAREN", "tLPAREN_ARG", "tRPAREN",
01465   "tLBRACK", "tLBRACE", "tLBRACE_ARG", "tSTAR", "tAMPER", "tLAMBDA",
01466   "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG", "tWORDS_BEG",
01467   "tQWORDS_BEG", "tSTRING_DBEG", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01468   "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01469   "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "idNULL",
01470   "idRespond_to", "idIFUNC", "idCFUNC", "id_core_set_method_alias",
01471   "id_core_set_variable_alias", "id_core_undef_method",
01472   "id_core_define_method", "id_core_define_singleton_method",
01473   "id_core_set_postexe", "tLAST_TOKEN", "'{'", "'}'", "'['", "'.'", "','",
01474   "'`'", "'('", "')'", "']'", "';'", "' '", "'\\n'", "$accept", "program",
01475   "$@1", "top_compstmt", "top_stmts", "top_stmt", "$@2", "bodystmt",
01476   "compstmt", "stmts", "stmt", "$@3", "expr", "expr_value", "command_call",
01477   "block_command", "cmd_brace_block", "@4", "command", "mlhs",
01478   "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head", "mlhs_post",
01479   "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym", "fitem",
01480   "undef_list", "$@5", "op", "reswords", "arg", "$@6", "arg_value",
01481   "aref_args", "paren_args", "opt_paren_args", "opt_call_args",
01482   "call_args", "command_args", "@7", "block_arg", "opt_block_arg", "args",
01483   "mrhs", "primary", "@8", "$@9", "$@10", "$@11", "$@12", "$@13", "$@14",
01484   "$@15", "$@16", "@17", "@18", "@19", "@20", "@21", "$@22", "$@23",
01485   "primary_value", "k_begin", "k_if", "k_unless", "k_while", "k_until",
01486   "k_case", "k_for", "k_class", "k_module", "k_def", "k_end", "then", "do",
01487   "if_tail", "opt_else", "for_var", "f_marg", "f_marg_list", "f_margs",
01488   "block_param", "opt_block_param", "block_param_def", "opt_bv_decl",
01489   "bv_decls", "bvar", "lambda", "@24", "@25", "f_larglist", "lambda_body",
01490   "do_block", "@26", "block_call", "method_call", "brace_block", "@27",
01491   "@28", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
01492   "opt_ensure", "literal", "strings", "string", "string1", "xstring",
01493   "regexp", "words", "word_list", "word", "qwords", "qword_list",
01494   "string_contents", "xstring_contents", "regexp_contents",
01495   "string_content", "@29", "@30", "@31", "string_dvar", "symbol", "sym",
01496   "dsym", "numeric", "variable", "var_ref", "var_lhs", "backref",
01497   "superclass", "$@32", "f_arglist", "f_args", "f_bad_arg", "f_norm_arg",
01498   "f_arg_item", "f_arg", "f_opt", "f_block_opt", "f_block_optarg",
01499   "f_optarg", "restarg_mark", "f_rest_arg", "blkarg_mark", "f_block_arg",
01500   "opt_f_block_arg", "singleton", "$@33", "assoc_list", "assocs", "assoc",
01501   "operation", "operation2", "operation3", "dot_or_colon", "opt_terms",
01502   "opt_nl", "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01503 };
01504 #endif
01505 
01506 # ifdef YYPRINT
01507 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
01508    token YYLEX-NUM.  */
01509 static const yytype_uint16 yytoknum[] =
01510 {
01511        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
01512      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
01513      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
01514      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
01515      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
01516      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
01517      315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
01518      325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
01519      335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
01520      345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
01521      355,   356,   357,   358,   359,   360,   361,   362,   363,    61,
01522       63,    58,    62,    60,   124,    94,    38,    43,    45,    42,
01523       47,    37,   364,    33,   126,   365,   366,   367,   368,   369,
01524      370,   371,   372,   373,   374,   375,   123,   125,    91,    46,
01525       44,    96,    40,    41,    93,    59,    32,    10
01526 };
01527 # endif
01528 
01529 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
01530 static const yytype_uint16 yyr1[] =
01531 {
01532        0,   148,   150,   149,   151,   152,   152,   152,   152,   153,
01533      154,   153,   155,   156,   157,   157,   157,   157,   159,   158,
01534      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01535      158,   158,   158,   158,   158,   158,   158,   158,   158,   158,
01536      158,   158,   158,   160,   160,   160,   160,   160,   160,   161,
01537      162,   162,   163,   163,   163,   165,   164,   166,   166,   166,
01538      166,   166,   166,   166,   166,   166,   166,   166,   167,   167,
01539      168,   168,   169,   169,   169,   169,   169,   169,   169,   169,
01540      169,   169,   170,   170,   171,   171,   172,   172,   173,   173,
01541      173,   173,   173,   173,   173,   173,   174,   174,   174,   174,
01542      174,   174,   174,   174,   175,   175,   176,   176,   176,   177,
01543      177,   177,   177,   177,   178,   178,   179,   179,   180,   181,
01544      180,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01545      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01546      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01547      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01548      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01549      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01550      183,   183,   183,   183,   183,   183,   183,   183,   183,   183,
01551      183,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01552      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01553      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01554      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
01555      184,   184,   184,   185,   184,   184,   184,   186,   187,   187,
01556      187,   187,   188,   189,   189,   190,   190,   191,   191,   191,
01557      191,   191,   193,   192,   194,   195,   195,   195,   196,   196,
01558      196,   196,   197,   197,   197,   198,   198,   198,   198,   198,
01559      198,   198,   198,   198,   199,   198,   200,   198,   198,   198,
01560      198,   198,   198,   198,   198,   198,   198,   201,   198,   198,
01561      198,   198,   198,   198,   198,   198,   198,   202,   203,   198,
01562      204,   205,   198,   198,   198,   206,   207,   198,   208,   198,
01563      209,   210,   198,   211,   198,   212,   198,   213,   214,   198,
01564      198,   198,   198,   198,   215,   216,   217,   218,   219,   220,
01565      221,   222,   223,   224,   225,   226,   227,   227,   227,   228,
01566      228,   229,   229,   230,   230,   231,   231,   232,   232,   233,
01567      233,   234,   234,   234,   234,   234,   234,   234,   234,   234,
01568      235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
01569      235,   235,   235,   235,   235,   236,   236,   237,   237,   237,
01570      238,   238,   239,   239,   240,   240,   242,   243,   241,   244,
01571      244,   245,   245,   247,   246,   248,   248,   248,   249,   249,
01572      249,   249,   249,   249,   249,   249,   249,   251,   250,   252,
01573      250,   253,   254,   254,   255,   255,   256,   256,   256,   257,
01574      257,   258,   258,   259,   259,   259,   260,   261,   261,   261,
01575      262,   263,   264,   265,   265,   266,   266,   267,   267,   268,
01576      268,   269,   269,   270,   270,   271,   271,   272,   272,   273,
01577      274,   273,   275,   276,   273,   277,   277,   277,   277,   278,
01578      279,   279,   279,   279,   280,   281,   281,   281,   281,   282,
01579      282,   282,   282,   282,   282,   282,   282,   282,   282,   282,
01580      282,   283,   284,   285,   285,   286,   287,   286,   286,   288,
01581      288,   289,   289,   289,   289,   289,   289,   289,   289,   289,
01582      289,   289,   289,   289,   289,   289,   290,   290,   290,   290,
01583      291,   291,   292,   292,   293,   293,   294,   295,   296,   296,
01584      297,   297,   298,   298,   299,   299,   300,   300,   301,   302,
01585      302,   303,   304,   303,   305,   305,   306,   306,   307,   307,
01586      308,   308,   308,   309,   309,   309,   309,   310,   310,   310,
01587      311,   311,   312,   312,   313,   313,   314,   315,   316,   316,
01588      316,   317,   317,   318,   318,   319
01589 };
01590 
01591 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
01592 static const yytype_uint8 yyr2[] =
01593 {
01594        0,     2,     0,     2,     2,     1,     1,     3,     2,     1,
01595        0,     5,     4,     2,     1,     1,     3,     2,     0,     4,
01596        3,     3,     3,     2,     3,     3,     3,     3,     3,     4,
01597        3,     3,     3,     6,     5,     5,     5,     5,     3,     3,
01598        3,     3,     1,     1,     3,     3,     3,     2,     1,     1,
01599        1,     1,     1,     4,     4,     0,     5,     2,     3,     4,
01600        5,     4,     5,     2,     2,     2,     2,     2,     1,     3,
01601        1,     3,     1,     2,     3,     5,     2,     4,     2,     4,
01602        1,     3,     1,     3,     2,     3,     1,     3,     1,     4,
01603        3,     3,     3,     3,     2,     1,     1,     4,     3,     3,
01604        3,     3,     2,     1,     1,     1,     2,     1,     3,     1,
01605        1,     1,     1,     1,     1,     1,     1,     1,     1,     0,
01606        4,     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,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01611        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01612        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01613        1,     3,     5,     3,     5,     6,     5,     5,     5,     5,
01614        4,     3,     3,     3,     3,     3,     3,     3,     3,     3,
01615        4,     4,     2,     2,     3,     3,     3,     3,     3,     3,
01616        3,     3,     3,     3,     3,     3,     3,     2,     2,     3,
01617        3,     3,     3,     0,     4,     6,     1,     1,     1,     2,
01618        4,     2,     3,     1,     1,     1,     1,     1,     2,     2,
01619        4,     1,     0,     2,     2,     2,     1,     1,     1,     2,
01620        3,     4,     3,     4,     2,     1,     1,     1,     1,     1,
01621        1,     1,     1,     1,     0,     4,     0,     4,     3,     3,
01622        2,     3,     3,     1,     4,     3,     1,     0,     6,     4,
01623        3,     2,     1,     2,     2,     6,     6,     0,     0,     7,
01624        0,     0,     7,     5,     4,     0,     0,     9,     0,     6,
01625        0,     0,     8,     0,     5,     0,     6,     0,     0,     9,
01626        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01627        1,     1,     1,     1,     1,     1,     1,     1,     2,     1,
01628        1,     1,     5,     1,     2,     1,     1,     1,     3,     1,
01629        3,     1,     4,     6,     3,     5,     2,     4,     1,     3,
01630        6,     8,     4,     6,     4,     2,     6,     2,     4,     6,
01631        2,     4,     2,     4,     1,     1,     1,     3,     1,     4,
01632        1,     2,     1,     3,     1,     1,     0,     0,     4,     4,
01633        1,     3,     3,     0,     5,     2,     4,     4,     2,     4,
01634        4,     3,     3,     3,     2,     1,     4,     0,     5,     0,
01635        5,     5,     1,     1,     6,     1,     1,     1,     1,     2,
01636        1,     2,     1,     1,     1,     1,     1,     1,     1,     2,
01637        3,     3,     3,     3,     3,     0,     3,     1,     2,     3,
01638        3,     0,     3,     0,     2,     0,     2,     0,     2,     1,
01639        0,     3,     0,     0,     5,     1,     1,     1,     1,     2,
01640        1,     1,     1,     1,     3,     1,     1,     2,     2,     1,
01641        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01642        1,     1,     1,     1,     1,     1,     0,     4,     2,     3,
01643        2,     6,     8,     4,     6,     4,     6,     2,     4,     6,
01644        2,     4,     2,     4,     1,     0,     1,     1,     1,     1,
01645        1,     1,     1,     3,     1,     3,     3,     3,     1,     3,
01646        1,     3,     1,     1,     2,     1,     1,     1,     2,     2,
01647        1,     1,     0,     4,     1,     2,     1,     3,     3,     2,
01648        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01649        1,     1,     0,     1,     0,     1,     2,     2,     0,     1,
01650        1,     1,     1,     1,     2,     0
01651 };
01652 
01653 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
01654    Performed when YYTABLE doesn't specify something else to do.  Zero
01655    means the default is an error.  */
01656 static const yytype_uint16 yydefact[] =
01657 {
01658        2,     0,     0,     1,     0,   332,   333,   334,     0,   325,
01659      326,   327,   330,   328,   329,   331,   320,   321,   322,   323,
01660      283,   252,   252,   475,   474,   476,   477,   554,     0,   554,
01661       10,     0,   479,   478,   480,   469,   542,   471,   470,   472,
01662      473,   465,   466,   427,   483,   484,     0,     0,     0,     0,
01663        0,   565,   565,    80,   386,   445,   443,   445,   447,   435,
01664      441,     0,     0,     0,     3,   552,     6,     9,    42,    43,
01665       51,    50,     0,    68,     0,    72,    82,     0,    48,   236,
01666        0,   274,     0,     0,   297,   300,   552,     0,     0,     0,
01667        0,    52,   292,   265,   266,   426,   428,   267,   268,   269,
01668      270,   424,   425,   423,   481,   271,     0,   272,   252,     5,
01669        8,   160,   171,   161,   184,   157,   177,   167,   166,   187,
01670      188,   182,   165,   164,   159,   185,   189,   190,   169,   158,
01671      172,   176,   178,   170,   163,   179,   186,   181,   180,   173,
01672      183,   168,   156,   175,   174,   155,   162,   153,   154,   150,
01673      151,   152,   109,   111,   110,   145,   146,   142,   124,   125,
01674      126,   133,   130,   132,   127,   128,   147,   148,   134,   135,
01675      139,   129,   131,   121,   122,   123,   136,   137,   138,   140,
01676      141,   143,   144,   149,   114,   116,   118,    23,   112,   113,
01677      115,   117,     0,     0,     0,     0,     0,     0,     0,   247,
01678        0,   237,   258,    66,   251,   565,     0,   481,     0,   272,
01679      565,   536,    67,    65,   554,    64,     0,   565,   404,    63,
01680      554,   555,     0,     0,    18,   233,     0,     0,   320,   321,
01681      283,   286,   405,   212,     0,     0,   213,   280,     0,     0,
01682        0,   552,    15,   554,    70,    14,   276,     0,   558,   558,
01683      238,     0,     0,   558,   534,   554,     0,     0,     0,    78,
01684      324,     0,    88,    95,   294,   387,   462,   461,   463,   460,
01685        0,   459,     0,     0,     0,     0,     0,     0,     0,   467,
01686      468,    47,   227,   228,   561,   562,     4,   563,   553,     0,
01687        0,     0,     0,     0,     0,     0,   393,   395,     0,    84,
01688        0,    76,    73,     0,     0,     0,     0,     0,     0,     0,
01689        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01690        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01691        0,   565,     0,     0,    49,     0,     0,     0,     0,   552,
01692        0,   553,     0,   346,   345,     0,     0,   481,   272,   104,
01693      105,     0,     0,   107,     0,     0,   481,   272,   313,   180,
01694      173,   183,   168,   150,   151,   152,   109,   110,   532,   315,
01695      531,     0,     0,     0,   409,   407,   293,   429,     0,     0,
01696      398,    57,   291,   119,   539,   280,   259,   254,     0,     0,
01697      256,   248,   257,     0,   565,     0,     0,     0,   256,   249,
01698      554,     0,   285,   253,   554,   246,   245,   554,   290,    46,
01699       20,    22,    21,     0,   287,     0,     0,     0,     0,     0,
01700        0,    17,   554,   278,    13,   553,    69,   554,   281,   560,
01701      559,   239,   560,   241,   282,   535,     0,    94,   467,   468,
01702       86,    81,     0,     0,   565,     0,   505,   449,   452,   450,
01703      464,   446,   430,   444,   431,   432,   448,   433,   434,     0,
01704      437,   439,     0,   440,     0,     0,   564,     7,    24,    25,
01705       26,    27,    28,    44,    45,   565,     0,    31,    40,     0,
01706       41,   554,     0,    74,    85,    30,   191,   258,    39,   209,
01707      217,   222,   223,   224,   219,   221,   231,   232,   225,   226,
01708      202,   203,   229,   230,   554,   218,   220,   214,   215,   216,
01709      204,   205,   206,   207,   208,   543,   548,   544,   549,   403,
01710      252,   401,   554,   543,   545,   544,   546,   402,   252,     0,
01711      565,   337,     0,   336,     0,     0,     0,     0,     0,     0,
01712      280,     0,   565,     0,   305,   310,   104,   105,   106,     0,
01713      486,   308,   485,     0,   565,     0,     0,     0,   505,   551,
01714      550,   317,   543,   544,   252,   252,   565,   565,    32,   193,
01715       38,   201,    55,    58,     0,   191,   538,     0,   260,   255,
01716      565,   547,   544,   554,   543,   544,   537,   284,   556,   242,
01717      289,    19,     0,   234,     0,    29,     0,   565,   200,    71,
01718       16,   277,   558,     0,    79,    91,    93,   554,   543,   544,
01719      511,   508,   507,   506,   509,     0,   523,   527,   526,   522,
01720      505,     0,   390,   510,   512,   514,   565,   520,   565,   525,
01721      565,     0,   504,   453,     0,   436,   438,   442,   210,   211,
01722      378,   565,     0,   376,   375,   264,     0,    83,    77,     0,
01723        0,     0,     0,     0,   400,    61,     0,   406,     0,     0,
01724      244,   399,    59,   243,   335,   275,   565,   565,   415,   565,
01725      338,   565,   340,   298,   339,   301,     0,     0,   304,   547,
01726      279,   554,   543,   544,     0,     0,   488,     0,     0,   104,
01727      105,   108,   554,     0,   554,   505,     0,     0,     0,   397,
01728       54,   396,    53,     0,     0,     0,   565,   120,   261,   250,
01729        0,     0,   406,     0,     0,   554,    11,   240,    87,    89,
01730        0,   511,     0,   358,   349,   351,   554,   347,   565,     0,
01731        0,   388,     0,   497,   530,     0,   500,   524,     0,   502,
01732      528,     0,   455,   456,   457,   451,   458,   511,     0,   565,
01733        0,   565,   518,   565,   565,   374,   380,     0,     0,   262,
01734       75,   192,     0,    37,   198,    36,   199,    62,   557,     0,
01735       34,   196,    35,   197,    60,   416,   417,   565,   418,     0,
01736      565,   343,     0,     0,   341,     0,     0,     0,   303,     0,
01737        0,   406,     0,   311,     0,     0,   406,   314,   533,   554,
01738        0,   490,   318,     0,     0,   194,     0,     0,   288,   516,
01739      554,     0,   356,     0,   513,   554,     0,     0,   515,   565,
01740      565,   529,   565,   521,   565,   565,     0,     0,   384,   381,
01741      382,   385,     0,   377,   365,   367,     0,   370,     0,   372,
01742      394,   263,   235,    33,   195,     0,     0,   420,   344,     0,
01743       12,   422,     0,   295,   296,     0,     0,   260,   565,   306,
01744        0,   487,   309,   489,   316,   505,   410,   408,     0,   348,
01745      359,     0,   354,   350,   389,   392,   391,     0,   493,     0,
01746      495,     0,   501,     0,   498,   503,   454,     0,   517,     0,
01747      379,   565,   565,   565,   519,   565,   565,     0,   419,     0,
01748       96,   103,     0,   421,     0,   299,   302,   412,   413,   411,
01749        0,     0,     0,    56,     0,   357,     0,   352,   565,   565,
01750      565,   565,   280,     0,   383,     0,   362,     0,   364,   371,
01751        0,   368,   373,   102,     0,   565,     0,   565,   565,     0,
01752      312,     0,   355,     0,   494,     0,   491,   496,   499,   547,
01753      279,   565,   565,   565,   565,   547,   101,   554,   543,   544,
01754      414,   342,   307,   319,   353,   565,   363,     0,   360,   366,
01755      369,   406,   492,   565,   361
01756 };
01757 
01758 /* YYDEFGOTO[NTERM-NUM].  */
01759 static const yytype_int16 yydefgoto[] =
01760 {
01761       -1,     1,     2,    64,    65,    66,   226,   529,   530,   241,
01762      242,   413,    68,   335,    69,    70,   573,   706,    71,    72,
01763      243,    73,    74,    75,   441,    76,   200,   353,   354,   184,
01764      185,   186,   187,   574,   526,   189,    78,   415,   202,   247,
01765      519,   661,   404,   405,   215,   216,   204,   391,   205,   480,
01766       79,   333,   427,   592,   337,   786,   338,   787,   684,   910,
01767      688,   685,   860,   556,   558,   698,   865,   234,    81,    82,
01768       83,    84,    85,    86,    87,    88,    89,    90,   665,   532,
01769      673,   783,   784,   346,   724,   725,   726,   749,   642,   643,
01770      750,   829,   830,   264,   265,   446,   621,   731,   297,   475,
01771       91,    92,   382,   567,   566,   539,   909,   667,   777,   846,
01772      850,    93,    94,    95,    96,    97,    98,    99,   276,   459,
01773      100,   278,   272,   270,   274,   451,   634,   633,   741,   745,
01774      101,   271,   102,   103,   207,   105,   208,   209,   551,   687,
01775      696,   697,   623,   624,   625,   626,   627,   752,   753,   628,
01776      629,   630,   631,   821,   733,   371,   557,   252,   210,   211,
01777      108,   596,   521,   561,   286,   401,   402,   657,   431,   533,
01778      341,   245
01779 };
01780 
01781 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
01782    STATE-NUM.  */
01783 #define YYPACT_NINF -778
01784 static const yytype_int16 yypact[] =
01785 {
01786     -778,   133,  2394,  -778,  7010,  -778,  -778,  -778,  6523,  -778,
01787     -778,  -778,  -778,  -778,  -778,  -778,  7228,  7228,  -778,  -778,
01788     7228,  3145,  2722,  -778,  -778,  -778,  -778,   164,  6384,   -11,
01789     -778,    69,  -778,  -778,  -778,  5623,  2863,  -778,  -778,  5750,
01790     -778,  -778,  -778,  -778,  -778,  -778,  8427,  8427,    96,  4342,
01791     8536,  7446,  7773,  6786,  -778,  6245,  -778,  -778,  -778,    74,
01792       93,   122,  8645,  8427,  -778,   187,  -778,   698,   288,  -778,
01793     -778,   230,   167,  -778,   180,  8754,  -778,   234,  2846,   273,
01794      310,  -778,  8536,  8536,  -778,  -778,  4986,  8859,  8964,  9069,
01795     5496,    16,    60,  -778,  -778,   174,  -778,  -778,  -778,  -778,
01796     -778,  -778,  -778,  -778,   201,  -778,   258,   282,   206,  -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,  -778,  -778,  -778,
01802     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01803     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01804     -778,  -778,  -778,  -778,  -778,  -778,  -778,   212,  -778,  -778,
01805     -778,  -778,   215,  8427,   303,  4472,  8427,  8427,  8427,  -778,
01806      257,  2846,   285,  -778,  -778,   281,   343,    38,   337,   263,
01807      290,  -778,  -778,  -778,  4877,  -778,  7228,  7228,  -778,  -778,
01808     5116,  -778,  8536,   599,  -778,   296,   315,  4602,  -778,  -778,
01809     -778,   311,   328,  -778,   347,   206,   396,   446,  7119,  4342,
01810      329,   187,   698,   -11,   370,  -778,   288,   339,   -30,    30,
01811     -778,   285,   356,    30,  -778,   -11,   442,   375,  9174,   390,
01812     -778,   351,   373,   383,  -778,  -778,  -778,  -778,  -778,  -778,
01813      515,  -778,   552,   587,   620,   397,   607,   407,    34,   473,
01814      474,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  5225,  8536,
01815     8536,  8536,  8536,  7119,  8536,  8536,  -778,  -778,  7882,  -778,
01816     4342,  6898,   413,  7882,  8427,  8427,  8427,  8427,  8427,  8427,
01817     8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,
01818     8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,  8427,
01819     1712,  7228,  2060,  3517,   288,    80,    80,  8536,  8536,   187,
01820      534,   416,   516,  -778,  -778,   386,   568,    50,    72,   301,
01821      321,  8536,   363,  -778,    66,   393,  -778,  -778,  -778,    36,
01822       41,   103,   224,   259,   266,   322,   348,   369,  -778,  -778,
01823     -778,   377, 10211, 10211,  -778,  -778,  -778,  -778,  8645,  8645,
01824     -778,   483,  -778,  -778,  -778,   268,  -778,  -778,  8427,  8427,
01825     7337,  -778,  -778,  2216,  7228,  9441,  8427,  8427,  7555,  -778,
01826      -11,   454,  -778,  -778,   -11,  -778,  -778,    70,  -778,  -778,
01827     -778,  -778,  -778,  6523,  -778,  8427,  3937,   463,  2216,  9441,
01828     8427,   698,   -11,  -778,  -778,  5353,   462,   -11,  -778,  7664,
01829     -778,  -778,  7773,  -778,  -778,  -778,   296,   411,  -778,  -778,
01830     -778,   467,  9174,  9518,  7228,  9595,  1033,  -778,  -778,  -778,
01831     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,    39,
01832     -778,  -778,   472,  -778,  8427,  8427,  -778,  -778,  -778,  -778,
01833     -778,  -778,  -778,  -778,  -778,    28,  8427,  -778,   468,   487,
01834     -778,   -11,  9174,   496,  -778,  -778,  1576,  -778,  -778,   396,
01835     1512,  1512,  1512,  1512,  1223,  1223,  1879,  2079,  1512,  1512,
01836     2146,  2146,   582,   582,  2705,  1223,  1223,  1098,  1098,   790,
01837      514,   514,   396,   396,   396,  3286,  5991,  3372,  6105,  -778,
01838      328,  -778,   -11,   448,  -778,   451,  -778,  -778,  3004,   639,
01839      644,  -778,  3662,   646,  4082,    42,    42,   534,  7991,   639,
01840      109,  9672,  7228,  9749,  -778,   288,  -778,   411,  -778,   187,
01841     -778,  -778,  -778,  9826,  7228,  9903,  3517,  8536,  1115,  -778,
01842     -778,  -778,  -778,  -778,  1235,  1235,    28,    28,  -778, 10270,
01843     -778,  2846,  -778,  -778,  6523, 10289,  -778,  8427,   285,  -778,
01844      290,  5877,  2581,   -11,   410,   529,  -778,  -778,  -778,  -778,
01845     -778,  -778,  8536,  2846,   535,  -778,   328,   328,  2846,    20,
01846      698,  -778,    30,  9174,   467,   338,   271,   -11,   228,   261,
01847      557,  -778,  -778,  -778,  -778,   666,  -778,  -778,  -778,  -778,
01848      923,    43,  -778,  -778,  -778,  -778,   543,  -778,   544,   623,
01849      547,   642,  -778,  -778,   722,  -778,  -778,  -778,   396,   396,
01850     -778,   904,  4747,  -778,  -778,   555,  8100,  -778,   467,  9174,
01851     8427,   598,  8645,  8645,  -778,   483,   570,   538,  8645,  8645,
01852     -778,  -778,   483,  -778,  -778,  -778,  8209,   701,  -778,   441,
01853     -778,   701,  -778,  -778,  -778,  -778,   639,    31,  -778,   110,
01854      132,   -11,   126,   144,  8536,   187,  -778,  8536,  3517,   338,
01855      271,  -778,   -11,   639,    70,   923,  3517,   187,  6662,  -778,
01856     -778,  -778,  -778,  4747,  4602,  8427,    28,  -778,  -778,  -778,
01857     8427,  8427,   536,  8427,  8427,    70,  -778,  -778,  -778,   251,
01858     8427,  -778,   666,   450,  -778,   579,   -11,  -778,   583,  4747,
01859     4602,  -778,   923,  -778,  -778,   923,  -778,  -778,   779,  -778,
01860     -778,  4602,  -778,  -778,  -778,  -778,  -778,   625,   809,   583,
01861      615,   595,  -778,   604,   605,  -778,  -778,   740,  8427,   619,
01862      467,  2846,  8427,  -778,  2846,  -778,  2846,  -778,  -778,  8645,
01863     -778,  2846,  -778,  2846,  -778,   468,  -778,   675,  -778,  4212,
01864      757,  -778,  8536,   639,  -778,   639,  4747,  4747,  -778,  8318,
01865     3807,   147,    42,  -778,   187,   639,  -778,  -778,  -778,   -11,
01866      639,  -778,  -778,   759,   630,  2846,  4602,  8427,  -778,  -778,
01867      -11,   845,   632,   826,  -778,   -11,   760,   637,  -778,   640,
01868      643,  -778,   647,  -778,   651,   647,   656,  9279,  -778,   657,
01869     -778,  -778,   682,  -778,  1199,  -778,  1199,  -778,   779,  -778,
01870     -778,   658,  2846,  -778,  2846,  9384,    80,  -778,  -778,  4747,
01871     -778,  -778,    80,  -778,  -778,   639,   639,  -778,   115,  -778,
01872     3517,  -778,  -778,  -778,  -778,  1115,  -778,  -778,   664,  -778,
01873      662,   845,   491,  -778,  -778,  -778,  -778,   923,  -778,   779,
01874     -778,   779,  -778,   779,  -778,  -778,  -778,   751,   429,   809,
01875     -778,   672,   673,   647,  -778,   679,   647,   765,  -778,   432,
01876      373,   383,  3517,  -778,  3662,  -778,  -778,  -778,  -778,  -778,
01877     4747,   639,  3517,  -778,   845,   662,   845,   685,   647,   686,
01878      647,   647,  -778,  9980,  -778,  1199,  -778,   779,  -778,  -778,
01879      779,  -778,  -778,   411, 10057,  7228, 10134,   644,   441,   639,
01880     -778,   639,   662,   845,  -778,   779,  -778,  -778,  -778,   688,
01881      690,   647,   687,   647,   647,    81,   271,   -11,    86,   118,
01882     -778,  -778,  -778,  -778,   662,   647,  -778,   779,  -778,  -778,
01883     -778,   124,  -778,   647,  -778
01884 };
01885 
01886 /* YYPGOTO[NTERM-NUM].  */
01887 static const yytype_int16 yypgoto[] =
01888 {
01889     -778,  -778,  -778,   399,  -778,    33,  -778,  -530,   -33,  -778,
01890      159,  -778,    23,   -55,    21,  -778,  -462,  -778,   -15,   741,
01891     -136,    -1,   -66,  -778,  -403,   -26,  1181,  -306,   750,   -52,
01892     -778,   -20,  -778,  -778,    32,  -778,   748,  -778,   540,  -778,
01893       46,   -98,  -298,    54,    76,  -778,  -278,  -196,   -44,  -283,
01894       27,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01895     -778,  -778,  -778,  -778,  -778,  -778,  -778,     2,  -778,  -778,
01896     -778,  -778,  -778,  -778,  -778,  -778,  -778,  -778,   298,  -323,
01897     -512,   -97,  -610,  -778,  -755,  -748,   120,  -778,  -485,  -778,
01898     -636,  -778,   -49,  -778,  -778,  -778,  -778,  -778,  -778,  -778,
01899     -778,  -778,   752,  -778,  -778,  -520,  -778,   -92,  -778,  -778,
01900     -778,  -778,  -778,  -778,   753,  -778,  -778,  -778,  -778,  -778,
01901     -778,  -778,  -778,   792,  -778,  -229,  -778,  -778,  -778,  -778,
01902        7,  -778,    13,  -778,  1031,   762,  1198,  1109,  -778,  -778,
01903      -12,  -416,  -706,  -549,  -667,  -121,  -679,  -777,    25,   128,
01904     -778,  -579,  -778,  -434,   531,  -778,  -778,  -778,   -41,  -287,
01905     1927,  -254,  -778,  -778,   -32,    -4,    88,  -554,  -217,    63,
01906      -31,    -2
01907 };
01908 
01909 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
01910    positive, shift that token.  If negative, reduce the rule which
01911    number is the opposite.  If YYTABLE_NINF, syntax error.  */
01912 #define YYTABLE_NINF -566
01913 static const yytype_int16 yytable[] =
01914 {
01915      109,   199,   199,   269,    80,   199,    80,   248,   224,   302,
01916      249,   253,   632,   534,   399,   190,   240,   676,   206,   206,
01917      488,   191,   206,   222,   675,   225,   693,   259,   336,   712,
01918      622,   339,   433,   522,   288,   190,   435,   110,   369,   604,
01919      188,   191,   831,   453,   531,   456,   548,   460,   244,   250,
01920      254,    80,   206,   719,   340,   261,   823,   780,   873,   894,
01921      188,   785,   754,   870,   206,   818,   727,   549,   218,   672,
01922      203,   212,   729,   246,   213,   -96,   520,   261,   528,   648,
01923      260,   703,   704,   281,   206,   206,   374,   188,   206,   345,
01924      355,   355,   815,   531,   -99,   462,   583,  -103,   219,   -98,
01925      447,   372,   260,   422,   640,   334,   334,   294,   295,   334,
01926      429,   586,   579,   832,   260,   260,   260,   430,   564,   565,
01927      579,  -475,   188,   915,   632,  -482,  -474,   791,   287,   -69,
01928      779,  -100,   538,     3,  -102,   -99,   221,   -97,   796,   520,
01929      463,   528,   641,   448,   449,   586,   607,   -96,   894,   287,
01930      730,   -98,   237,   820,   380,   373,   824,  -101,   795,   873,
01931      -83,    67,   240,    67,   481,   597,   800,   818,   942,  -100,
01932      432,   789,   -97,   727,   812,  -475,   284,   430,   285,   550,
01933     -474,   279,   280,   831,   381,   635,   632,   284,  -476,   285,
01934      -88,   597,   440,   767,   417,   964,   375,    80,   823,   199,
01935      774,   199,   199,   392,   728,   227,   240,   755,   392,   424,
01936      425,   284,   -95,   285,   818,   406,   206,   221,   206,   206,
01937      275,   806,   206,  -543,   206,   284,   -99,   285,   -99,    80,
01938      636,   -98,   374,   -98,   468,   469,   470,   471,   244,   277,
01939       80,    80,  -476,   407,   681,   409,   760,   691,   907,   -94,
01940      -91,   436,  -543,   -90,   479,   892,   692,   895,   296,   479,
01941      261,   632,   727,  -100,   727,  -100,   -90,   240,   400,   -97,
01942      403,   -97,   -93,    56,  -544,   483,   298,  -406,   218,   799,
01943      859,   380,   535,   536,   -92,   260,   -92,   -89,  -482,   597,
01944       80,   206,   206,   206,   206,    80,   206,   206,   919,   244,
01945      206,   597,    80,   261,   287,   206,   220,   537,   408,  -477,
01946      -96,   221,   334,   334,   334,   334,   199,   473,   474,   477,
01947      299,   467,   727,   917,   485,   294,   295,  -540,   260,   406,
01948      911,   426,   284,   206,   285,    80,  -406,   -90,   908,   206,
01949      206,   -88,   375,   303,  -479,   378,   952,  -541,   217,   580,
01950      397,  -478,   383,   206,   790,   420,  -279,   220,  -324,   385,
01951      334,   334,   518,  -477,  -547,   727,   388,   727,   -90,   379,
01952      -92,   -90,  -103,   389,   545,   -90,   440,  -102,   527,   199,
01953      206,   206,   941,   776,   709,   717,  -469,  -406,   602,  -406,
01954     -406,  -103,   406,   591,   727,   330,   206,   421,  -479,   568,
01955      570,   -92,   287,   971,   -92,  -478,  -472,  -480,   -92,  -279,
01956     -279,  -324,  -324,  -544,   109,   546,   440,   552,    80,   547,
01957      190,   390,   -95,  -547,   396,   518,   191,    80,   393,   199,
01958      398,   632,   418,  -469,   438,   439,   443,  -540,   414,  -469,
01959     -469,   527,   406,  -540,   261,   188,   206,    67,   331,   332,
01960      518,   416,   472,   214,  -472,   782,   779,  -541,  -481,  -472,
01961     -472,  -480,   559,  -541,   304,   527,   699,   701,  -272,   260,
01962      217,   541,   423,   644,  -547,   518,  -547,  -547,   553,   -68,
01963     -543,   394,   395,   428,   261,   394,   419,  -469,   587,   444,
01964      445,   527,   589,   434,   677,   590,  -280,   713,   437,   669,
01965      651,   671,   721,   457,   611,   612,   613,   614,  -472,   260,
01966      599,  -481,  -481,   461,   923,   601,   560,   934,   656,   -98,
01967      751,  -272,  -272,   902,   542,   543,   663,   199,   668,   904,
01968      442,   554,   555,   420,    80,   658,    80,   718,   659,   199,
01969      406,   464,   465,   721,   206,   611,   612,   613,   614,  -280,
01970     -280,   538,   406,   484,   707,  -102,   206,   -98,    80,   206,
01971     -100,   466,   663,   663,   644,   644,   654,   554,   555,   647,
01972      935,   936,   540,   518,   660,    67,   447,   572,   392,   656,
01973      694,   190,   304,   440,   600,   518,   -94,   191,   -90,   527,
01974      811,   -92,   251,   544,   206,   663,   655,   588,   674,   674,
01975      595,   527,   -83,   656,   662,   261,   188,   603,  -258,   757,
01976      660,   660,   686,   447,   822,   715,   714,   825,   637,   448,
01977      449,   450,   479,   807,   734,   769,   734,   646,   734,   792,
01978      260,   916,   794,   327,   328,   329,   649,   957,  -100,   756,
01979      700,   702,   654,   660,    80,   -97,   802,   -97,   447,   664,
01980      304,   261,   666,   410,   206,   206,   448,   449,   452,   670,
01981      206,   206,   411,   412,   778,   781,   720,   781,   447,   781,
01982      803,   804,   716,   763,   765,   737,   260,   656,   -89,   770,
01983      772,   447,   597,   732,   735,   455,   206,   738,   656,   206,
01984       80,   448,   449,   454,   740,  -259,   816,   817,    80,   325,
01985      326,   327,   328,   329,   644,    80,    80,   334,   826,   762,
01986      334,   448,   449,   458,   768,   893,   779,   896,   721,   813,
01987      611,   612,   613,   614,   448,   449,   756,   852,   748,   833,
01988      188,    80,    80,   384,   827,   834,   386,   387,   289,   290,
01989      291,   292,   293,    80,   836,   838,   848,   756,   793,   734,
01990      840,   734,   734,   855,   856,   722,   918,   858,   920,  -260,
01991      801,   723,   921,   845,   201,   201,   849,   867,   201,   866,
01992      875,   206,   871,   868,   876,   847,   742,   743,   851,   744,
01993      877,    80,   798,   879,   206,    44,    45,   881,    80,    80,
01994      843,   883,    80,   886,   233,   236,   890,   889,  -261,   201,
01995      201,   913,   914,   808,   951,   334,   953,   922,    80,   954,
01996      282,   283,   925,   927,   814,   594,   903,   734,   734,   930,
01997      734,   933,   734,   734,   965,   943,   945,   967,   343,   888,
01998     -543,   721,  -544,   611,   612,   613,   614,   678,   478,   358,
01999      924,   961,   810,   487,   376,   960,   973,   899,   377,   273,
02000        0,    80,   370,   912,   260,   674,   781,   861,   304,   891,
02001      819,   828,    80,   611,   612,   613,   614,     0,   615,   937,
02002        0,   938,   260,   317,   318,   617,     0,   939,   721,     0,
02003      611,   612,   613,   614,     0,     0,     0,   863,     0,   734,
02004      734,   734,     0,   734,   734,   618,     0,   721,   869,   611,
02005      612,   613,   614,   874,    80,     0,    80,   325,   326,   327,
02006      328,   329,    80,     0,    80,   722,   734,   734,   734,   734,
02007      199,   872,     0,     0,     0,     0,     0,     0,     0,   576,
02008      578,     0,     0,   406,   722,   668,   781,   206,   251,     0,
02009        0,   201,     0,     0,   201,   201,   282,     0,     0,   734,
02010      734,   734,   734,   656,     0,   518,   747,     0,   611,   612,
02011      613,   614,   201,   734,   201,   201,   518,     0,     0,   578,
02012        0,   734,   251,     0,   788,   610,     0,   611,   612,   613,
02013      614,     0,   527,     0,     0,     0,     0,     0,     0,     0,
02014        0,   797,     0,   615,     0,     0,     0,     0,     0,   616,
02015      617,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02016        0,     0,   615,     0,     0,     0,   645,     0,   616,   617,
02017      618,     0,     0,   619,     0,     0,     0,     0,     0,     0,
02018        0,     0,     0,   104,     0,   104,     0,     0,     0,   618,
02019        0,     0,   619,     0,     0,     0,   201,     0,     0,   748,
02020        0,   486,   489,   490,   491,   492,   493,   494,   495,   496,
02021      497,   498,   499,   500,   501,   502,   503,   504,   505,   506,
02022      507,   508,   509,   510,   511,   512,   513,   514,   487,   201,
02023      104,   853,     0,   854,   262,   610,     0,   611,   612,   613,
02024      614,     0,     0,   862,     0,     0,     0,     0,   864,     0,
02025        0,     0,     0,     0,     0,     0,   262,     0,     0,     0,
02026        0,   107,     0,   107,     0,     0,     0,   708,   347,   356,
02027      356,   356,   615,     0,     0,     0,   569,   571,   616,   617,
02028        0,     0,     0,     0,     0,     0,   575,   201,   201,     0,
02029        0,     0,   201,     0,   569,   571,   201,     0,     0,   618,
02030        0,     0,   619,   905,   906,     0,     0,     0,   107,   736,
02031        0,   739,   263,   593,     0,     0,   304,   610,   598,   611,
02032      612,   613,   614,     0,     0,   620,     0,   201,     0,     0,
02033      201,   317,   318,    77,   263,    77,   759,     0,     0,     0,
02034        0,     0,   201,     0,     0,     0,   348,   357,   357,     0,
02035      106,     0,   106,     0,   615,     0,   775,     0,     0,   940,
02036      616,   617,   638,   639,   324,   325,   326,   327,   328,   329,
02037        0,     0,     0,     0,   201,     0,   104,     0,     0,     0,
02038       77,   618,     0,     0,   619,  -565,     0,   962,     0,   963,
02039        0,     0,     0,  -565,  -565,  -565,     0,   106,  -565,  -565,
02040     -565,   747,  -565,   611,   612,   613,   614,   695,   104,     0,
02041      809,     0,  -565,     0,     0,     0,     0,     0,   344,   104,
02042      104,     0,  -565,  -565,     0,  -565,  -565,  -565,  -565,  -565,
02043        0,     0,   835,     0,   837,   839,   201,     0,   615,   262,
02044      201,   304,     0,     0,   616,   617,     0,     0,   841,     0,
02045        0,     0,   201,     0,   107,     0,   317,   318,     0,     0,
02046        0,     0,     0,     0,     0,   618,     0,     0,   619,   104,
02047     -565,     0,     0,     0,   104,   201,     0,     0,     0,   857,
02048        0,   104,   262,     0,     0,     0,   107,   322,   323,   324,
02049      325,   326,   327,   328,   329,     0,     0,   107,   107,     0,
02050      878,   880,     0,   882,     0,   884,   885,     0,     0,     0,
02051        0,     0,     0,     0,   104,     0,     0,   263,     0,     0,
02052        0,     0,  -565,     0,  -565,     0,    77,   217,  -565,     0,
02053     -565,     0,  -565,     0,     0,     0,     0,     0,     0,     0,
02054        0,     0,     0,   106,   201,     0,     0,   107,   761,     0,
02055      764,   766,   107,     0,     0,     0,   771,   773,    77,   107,
02056      263,     0,     0,     0,   201,     0,     0,     0,     0,    77,
02057       77,     0,   926,   928,   929,   106,   931,   932,     0,     0,
02058        0,     0,     0,     0,     0,     0,   106,   106,     0,     0,
02059        0,     0,   107,     0,     0,     0,     0,   104,     0,   944,
02060      946,   947,   948,   805,     0,     0,   104,     0,   764,   766,
02061        0,   771,   773,     0,     0,     0,     0,     0,   201,    77,
02062        0,     0,     0,   262,    77,     0,     0,     0,     0,     0,
02063        0,    77,   966,   968,   969,   970,   106,     0,     0,     0,
02064        0,   106,     0,     0,     0,     0,   972,     0,   106,     0,
02065        0,     0,     0,     0,   974,     0,   201,     0,     0,     0,
02066      842,     0,     0,   262,    77,     0,     0,   844,     0,     0,
02067        0,     0,     0,     0,     0,   107,     0,     0,     0,     0,
02068        0,   106,     0,     0,   107,     0,     0,   201,     0,     0,
02069        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02070        0,   263,     0,     0,     0,   844,     0,     0,     0,     0,
02071        0,     0,     0,   104,     0,   104,     0,     0,     0,     0,
02072        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02073      304,  -566,  -566,  -566,  -566,   309,   310,   104,     0,  -566,
02074     -566,   263,     0,     0,     0,   317,   318,    77,     0,     0,
02075        0,     0,     0,     0,     0,     0,    77,     0,     0,     0,
02076        0,     0,     0,     0,   106,     0,     0,     0,     0,     0,
02077      650,     0,     0,   106,   320,   321,   322,   323,   324,   325,
02078      326,   327,   328,   329,   262,     0,     0,     0,     0,     0,
02079        0,   107,     0,   107,   304,   305,   306,   307,   308,   309,
02080      310,   311,   312,   313,   314,   315,   316,     0,     0,   317,
02081      318,     0,     0,     0,     0,   107,     0,     0,     0,     0,
02082        0,     0,     0,   104,     0,     0,     0,     0,     0,     0,
02083      262,     0,     0,   201,     0,     0,   319,     0,   320,   321,
02084      322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
02085        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02086        0,     0,   263,    77,     0,    77,  -237,     0,     0,   104,
02087        0,     0,     0,     0,     0,     0,     0,   104,     0,     0,
02088      106,     0,   106,     0,   104,   104,     0,    77,     0,     0,
02089        0,     0,     0,   746,     0,     0,     0,     0,     0,     0,
02090        0,   107,     0,     0,   106,     0,     0,     0,   263,     0,
02091      104,   104,     0,     0,   515,   516,     0,     0,   517,     0,
02092        0,     0,   104,     0,     0,     0,     0,     0,   155,   156,
02093      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02094      165,     0,     0,   166,   167,   168,   169,   107,     0,     0,
02095        0,     0,     0,     0,     0,   107,     0,   170,     0,     0,
02096      104,     0,   107,   107,     0,     0,     0,   104,   104,     0,
02097        0,   104,     0,    77,   171,   172,   173,   174,   175,   176,
02098      177,   178,   179,   180,     0,   181,   182,   104,   107,   107,
02099      106,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02100      107,     0,     0,   183,   217,     0,     0,     0,   356,     0,
02101        0,     0,     0,     0,     0,     0,     0,     0,     0,    77,
02102        0,     0,     0,     0,     0,     0,   900,    77,     0,     0,
02103      104,     0,     0,     0,    77,    77,   106,     0,   107,     0,
02104        0,   104,     0,     0,   106,   107,   107,     0,     0,   107,
02105        0,   106,   106,     0,     0,     0,     0,     0,     0,     0,
02106       77,    77,     0,     0,     0,   107,     0,     0,     0,     0,
02107        0,     0,    77,     0,     0,     0,     0,   106,   106,     0,
02108        0,     0,     0,   104,     0,   104,   357,     0,     0,   106,
02109        0,   104,     0,   104,     0,     0,     0,   304,   305,   306,
02110      307,   308,   309,   310,   901,     0,   313,   314,   107,     0,
02111       77,     0,   317,   318,     0,     0,     0,    77,    77,   107,
02112        0,    77,     0,   235,   235,     0,     0,   106,   235,   235,
02113      235,     0,     0,     0,   106,   106,     0,    77,   106,     0,
02114      235,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02115      329,     0,   235,     0,   106,     0,     0,     0,     0,     0,
02116        0,   107,     0,   107,   235,   235,   235,     0,     0,   107,
02117        0,   107,     0,     0,     0,     0,   898,     0,     0,     0,
02118       77,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02119        0,    77,     0,     0,     0,     0,     0,   106,     0,     0,
02120        0,     0,     0,     0,     0,     0,     0,     0,   106,     0,
02121        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02122        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02123        0,     0,     0,    77,     0,    77,     0,     0,     0,     0,
02124        0,    77,     0,    77,     0,     0,     0,     0,     0,     0,
02125      106,     0,   106,     0,     0,     0,     0,     0,   106,     0,
02126      106,     0,   523,   524,     0,     0,   525,     0,     0,     0,
02127      235,     0,     0,   235,   235,   235,   155,   156,   157,   158,
02128      159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
02129        0,   166,   167,   168,   169,     0,     0,   304,   305,   306,
02130      307,   308,   309,   310,   311,   170,   313,   314,     0,     0,
02131        0,     0,   317,   318,     0,     0,     0,     0,     0,     0,
02132        0,     0,   171,   172,   173,   174,   175,   176,   177,   178,
02133      179,   180,     0,   181,   182,   235,     0,     0,     0,     0,
02134        0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02135      329,   183,   217,     0,     0,     0,     0,     0,     0,     0,
02136        0,     0,     0,     0,   304,   305,   306,   307,   308,   309,
02137      310,   311,   312,   313,   314,  -566,  -566,     0,   235,   317,
02138      318,   235,   235,   235,   235,   235,   235,   235,   235,   235,
02139      235,   235,   235,   235,   235,   235,   235,   235,   235,   235,
02140      235,   235,   235,   235,   235,   235,   235,     0,   320,   321,
02141      322,   323,   324,   325,   326,   327,   328,   329,   581,   516,
02142        0,     0,   582,     0,     0,     0,     0,     0,     0,     0,
02143        0,     0,   155,   156,   157,   158,   159,   160,   161,   162,
02144      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02145      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02146        0,   170,     0,     0,     0,   235,   235,   235,     0,     0,
02147        0,     0,     0,   235,   235,   235,     0,     0,   171,   172,
02148      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02149      182,     0,   235,     0,     0,     0,     0,   235,     0,     0,
02150        0,     0,     0,     0,     0,     0,   235,   183,   217,   235,
02151        0,     0,     0,     0,     0,     0,     0,     0,     0,   235,
02152        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02153        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02154        0,   235,   235,     0,  -565,     4,     0,     5,     6,     7,
02155        8,     9,     0,   235,     0,    10,    11,     0,     0,   235,
02156       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02157        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02158       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02159       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
02160       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02161       46,    47,     0,     0,     0,   235,     0,     0,     0,     0,
02162        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02163       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02164        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02165        0,     0,     0,     0,   235,     0,     0,     0,     0,     0,
02166        0,     0,     0,     0,     0,     0,    61,    62,    63,     0,
02167        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02168      235,     0,     0,     0,     0,     0,     0,     0,     0,  -565,
02169        0,  -565,     0,     0,     0,     0,     0,     0,     0,     0,
02170        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02171        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02172        0,     0,     0,   235,     0,     0,   235,   235,     0,     0,
02173        0,  -279,     0,     0,     0,     0,     0,     0,     0,  -279,
02174     -279,  -279,     0,   235,  -279,  -279,  -279,     0,  -279,     0,
02175        0,     0,     0,     0,     0,     0,     0,     0,  -279,  -279,
02176     -279,     0,     0,     0,     0,     0,     0,     0,  -279,  -279,
02177        0,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,     0,
02178        0,     0,   235,     0,     0,     0,     0,   235,   235,     0,
02179      235,   235,     0,     0,     0,     0,     0,   235,     0,  -279,
02180     -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02181     -279,  -279,     0,     0,  -279,  -279,  -279,     0,   711,  -279,
02182        0,     0,     0,     0,     0,  -279,     0,     0,     0,     0,
02183        0,     0,     0,     0,     0,   235,     0,     0,  -279,   235,
02184     -101,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02185     -279,  -279,  -279,     0,     0,     0,     0,     0,     0,     0,
02186        0,     0,     0,     0,     0,     0,   235,     0,  -279,  -279,
02187     -279,  -279,  -405,     0,  -279,  -279,  -279,     0,  -279,     0,
02188     -405,  -405,  -405,     0,   235,  -405,  -405,  -405,     0,  -405,
02189        0,     0,     0,     0,     0,     0,     0,     0,  -405,  -405,
02190     -405,     0,     0,     0,   235,     0,     0,     0,     0,  -405,
02191     -405,     0,  -405,  -405,  -405,  -405,  -405,     0,     0,     0,
02192        0,     0,   235,   304,   305,   306,   307,   308,   309,   310,
02193      311,   312,   313,   314,   315,   316,     0,     0,   317,   318,
02194     -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,  -405,
02195     -405,  -405,  -405,     0,     0,  -405,  -405,  -405,     0,     0,
02196     -405,     0,     0,     0,     0,   319,  -405,   320,   321,   322,
02197      323,   324,   325,   326,   327,   328,   329,     0,     0,     0,
02198        0,     0,  -405,     0,  -405,  -405,  -405,  -405,  -405,  -405,
02199     -405,  -405,  -405,  -405,     0,     0,     0,     0,     0,     0,
02200        0,     0,   221,     0,     0,     0,     0,     0,  -405,  -405,
02201     -405,  -405,  -405,  -273,   217,  -405,  -405,  -405,     0,  -405,
02202        0,  -273,  -273,  -273,     0,     0,  -273,  -273,  -273,     0,
02203     -273,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02204     -273,  -273,  -273,     0,     0,     0,     0,     0,     0,     0,
02205     -273,  -273,     0,  -273,  -273,  -273,  -273,  -273,     0,     0,
02206        0,     0,     0,     0,   304,   305,   306,   307,   308,   309,
02207      310,   311,   312,   313,   314,   315,   316,     0,     0,   317,
02208      318,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
02209     -273,  -273,  -273,  -273,     0,     0,  -273,  -273,  -273,     0,
02210        0,  -273,     0,     0,     0,     0,   319,  -273,   320,   321,
02211      322,   323,   324,   325,   326,   327,   328,   329,     0,     0,
02212     -273,     0,     0,  -273,  -273,  -273,  -273,  -273,  -273,  -273,
02213     -273,  -273,  -273,  -273,  -273,     0,     0,     0,     0,     0,
02214        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02215     -273,  -273,  -273,  -273,  -565,     0,  -273,  -273,  -273,     0,
02216     -273,     0,  -565,  -565,  -565,     0,     0,  -565,  -565,  -565,
02217        0,  -565,     0,     0,     0,     0,     0,     0,     0,     0,
02218     -565,  -565,  -565,     0,     0,     0,     0,     0,     0,     0,
02219        0,  -565,  -565,     0,  -565,  -565,  -565,  -565,  -565,     0,
02220        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02221        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02222        0,     0,  -565,  -565,  -565,  -565,  -565,  -565,  -565,  -565,
02223     -565,  -565,  -565,  -565,  -565,     0,     0,  -565,  -565,  -565,
02224        0,     0,  -565,     0,     0,     0,     0,     0,  -565,     0,
02225        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02226        0,     0,     0,     0,  -565,     0,  -565,  -565,  -565,  -565,
02227     -565,  -565,  -565,  -565,  -565,  -565,     0,     0,     0,     0,
02228        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02229     -565,  -565,  -565,  -565,  -565,  -286,   217,  -565,  -565,  -565,
02230        0,  -565,     0,  -286,  -286,  -286,     0,     0,  -286,  -286,
02231     -286,     0,  -286,     0,     0,     0,     0,     0,     0,     0,
02232        0,     0,  -286,  -286,     0,     0,     0,     0,     0,     0,
02233        0,     0,  -286,  -286,     0,  -286,  -286,  -286,  -286,  -286,
02234        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02235        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02236        0,     0,     0,  -286,  -286,  -286,  -286,  -286,  -286,  -286,
02237     -286,  -286,  -286,  -286,  -286,  -286,     0,     0,  -286,  -286,
02238     -286,     0,     0,  -286,     0,     0,     0,     0,     0,  -286,
02239        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02240        0,     0,     0,     0,     0,  -286,     0,  -286,  -286,  -286,
02241     -286,  -286,  -286,  -286,  -286,  -286,  -286,     0,     0,     0,
02242        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02243        0,     0,  -286,  -286,  -286,  -286,  -547,   214,  -286,  -286,
02244     -286,     0,  -286,     0,  -547,  -547,  -547,     0,     0,     0,
02245     -547,  -547,     0,  -547,     0,     0,     0,     0,     0,     0,
02246        0,     0,  -547,     0,     0,     0,     0,     0,     0,     0,
02247        0,     0,     0,  -547,  -547,     0,  -547,  -547,  -547,  -547,
02248     -547,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02249        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02250        0,     0,     0,     0,  -547,  -547,  -547,  -547,  -547,  -547,
02251     -547,  -547,  -547,  -547,  -547,  -547,  -547,     0,     0,  -547,
02252     -547,  -547,  -279,   652,     0,     0,     0,     0,     0,     0,
02253     -279,  -279,  -279,     0,     0,     0,  -279,  -279,     0,  -279,
02254        0,     0,     0,     0,     0,   -99,  -547,     0,  -547,  -547,
02255     -547,  -547,  -547,  -547,  -547,  -547,  -547,  -547,     0,  -279,
02256     -279,     0,  -279,  -279,  -279,  -279,  -279,     0,     0,     0,
02257        0,     0,  -547,  -547,  -547,  -547,   -91,     0,     0,  -547,
02258        0,  -547,     0,  -547,     0,     0,     0,     0,     0,     0,
02259     -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,  -279,
02260     -279,  -279,  -279,     0,     0,  -279,  -279,  -279,     0,   653,
02261        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02262        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02263        0,  -101,  -279,     0,  -279,  -279,  -279,  -279,  -279,  -279,
02264     -279,  -279,  -279,  -279,     0,     0,     0,     0,     0,     0,
02265        0,     0,     0,     0,     0,     0,     0,     0,     0,  -279,
02266     -279,  -279,   -93,     0,     0,  -279,     0,  -279,   238,  -279,
02267        5,     6,     7,     8,     9,  -565,  -565,  -565,    10,    11,
02268        0,     0,  -565,    12,     0,    13,    14,    15,    16,    17,
02269       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02270       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02271        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02272       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02273       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02274        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02275        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02276       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02277       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02278        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02279       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02280        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02281        0,     0,  -565,   238,  -565,     5,     6,     7,     8,     9,
02282        0,     0,  -565,    10,    11,     0,  -565,  -565,    12,     0,
02283       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02284        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02285        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02286       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02287        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02288        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02289        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02290        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02291       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02292        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02293        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02294        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02295        0,     0,     0,     0,     0,     0,     0,  -565,   238,  -565,
02296        5,     6,     7,     8,     9,     0,     0,  -565,    10,    11,
02297        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02298       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02299       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02300        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02301       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02302       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02303        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02304        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02305       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02306       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02307        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02308       62,    63,     0,     0,     0,     0,     0,     0,     4,     0,
02309        5,     6,     7,     8,     9,     0,     0,     0,    10,    11,
02310        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02311       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02312       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02313        0,     0,    28,    29,    30,    31,    32,    33,    34,    35,
02314       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02315       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02316        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02317        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02318       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02319       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02320        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02321       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02322        0,     0,     0,     0,  -565,     0,     0,     0,     0,     0,
02323        0,     0,  -565,   238,  -565,     5,     6,     7,     8,     9,
02324        0,     0,  -565,    10,    11,     0,     0,  -565,    12,     0,
02325       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02326        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02327        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02328       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02329        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02330        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02331        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02332        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02333       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02334        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02335        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02336        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02337        0,  -565,  -565,    10,    11,     0,     0,  -565,    12,  -565,
02338       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02339        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02340        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02341       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02342        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02343        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02344        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02345        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02346       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02347        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02348        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02349        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02350        0,     0,     0,    10,    11,     0,     0,  -565,    12,  -565,
02351       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02352        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02353        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02354       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02355        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02356        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02357        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02358        0,   239,    50,     0,    51,    52,     0,    53,     0,    54,
02359       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02360        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02361        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02362        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02363        0,     0,     0,    10,    11,  -565,     0,  -565,    12,  -565,
02364       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02365        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02366        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02367       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02368        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02369        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02370        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02371        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02372       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02373        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02374        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02375        0,     0,     0,   238,     0,     5,     6,     7,     8,     9,
02376        0,     0,     0,    10,    11,  -565,     0,  -565,    12,  -565,
02377       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02378        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02379        0,    27,     0,     0,     0,     0,     0,    28,    29,     0,
02380       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02381        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02382        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02383        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02384        0,    49,    50,     0,    51,    52,     0,    53,     0,    54,
02385       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02386        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02387        0,     0,     0,     0,    61,    62,    63,     0,     0,     0,
02388        0,     0,     0,     0,     0,     0,     0,     0,     0,  -565,
02389        0,     0,     0,     0,     0,     0,     0,  -565,   238,  -565,
02390        5,     6,     7,     8,     9,     0,     0,  -565,    10,    11,
02391        0,     0,     0,    12,     0,    13,    14,    15,    16,    17,
02392       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02393       23,    24,    25,    26,     0,     0,    27,     0,     0,     0,
02394        0,     0,    28,    29,     0,    31,    32,    33,    34,    35,
02395       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02396       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02397        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02398        0,     0,     0,    48,     0,     0,    49,    50,     0,    51,
02399       52,     0,    53,     0,    54,    55,    56,    57,    58,    59,
02400       60,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02401        0,     0,     0,     0,     0,     0,     0,     0,     0,    61,
02402       62,    63,     0,     0,     0,     0,     0,     0,     0,     0,
02403        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02404        0,     0,  -565,    12,  -565,    13,    14,    15,    16,    17,
02405       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02406       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02407        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02408       36,    37,    38,    39,    40,   193,    41,    42,     0,    43,
02409       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02410        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02411        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02412       52,     0,   196,   197,    54,    55,    56,    57,    58,    59,
02413       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02414        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02415      198,    63,    12,     0,    13,    14,    15,    16,    17,    18,
02416       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02417       24,    25,    26,     0,   221,    27,     0,     0,     0,     0,
02418        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02419       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02420       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02421        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02422        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02423        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02424        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02425        0,     0,     0,     0,     0,     0,     0,     0,    61,    62,
02426       63,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02427        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02428        0,   284,    12,   285,    13,    14,    15,    16,    17,    18,
02429       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02430       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02431        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02432       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02433       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02434        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02435        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02436        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02437        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02438        7,     8,     9,     0,     0,     0,    10,    11,    61,    62,
02439       63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02440        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02441       25,    26,     0,   221,    27,     0,     0,     0,     0,     0,
02442       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
02443       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02444        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02445        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02446        0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
02447       53,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02448        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02449        0,     0,     0,     0,     0,     0,     0,    61,    62,    63,
02450        0,     0,     0,     0,     0,     0,     5,     6,     7,     8,
02451        9,     0,     0,     0,    10,    11,     0,     0,     0,    12,
02452      466,    13,    14,    15,    16,    17,    18,    19,     0,     0,
02453        0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
02454        0,     0,    27,     0,     0,     0,     0,     0,    28,    29,
02455        0,    31,    32,    33,    34,    35,    36,    37,    38,    39,
02456       40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
02457       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02458        0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
02459        0,     0,    49,    50,     0,    51,    52,     0,    53,     0,
02460       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02461        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02462        0,     0,     0,     0,     0,    61,    62,    63,     0,     0,
02463        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02464        0,     0,     0,     0,     0,     0,     0,     0,   466,   111,
02465      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
02466      122,   123,   124,   125,   126,   127,   128,   129,   130,   131,
02467      132,   133,   134,     0,     0,     0,   135,   136,   137,   359,
02468      360,   361,   362,   142,   143,   144,     0,     0,     0,     0,
02469        0,   145,   146,   147,   148,   363,   364,   365,   366,   153,
02470       37,    38,   367,    40,     0,     0,     0,     0,     0,     0,
02471        0,     0,   155,   156,   157,   158,   159,   160,   161,   162,
02472      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02473      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02474        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
02475        0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
02476      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02477      182,     0,     0,     0,     0,     0,  -540,  -540,  -540,     0,
02478     -540,     0,     0,     0,  -540,  -540,     0,   183,   368,  -540,
02479        0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,     0,  -540,
02480        0,     0,     0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,
02481        0,     0,  -540,     0,     0,     0,     0,     0,     0,  -540,
02482        0,     0,  -540,  -540,  -540,  -540,  -540,  -540,  -540,  -540,
02483     -540,  -540,  -540,  -540,     0,  -540,  -540,  -540,     0,  -540,
02484     -540,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02485        0,     0,     0,     0,     0,     0,     0,     0,     0,  -540,
02486        0,     0,  -540,  -540,     0,  -540,  -540,     0,  -540,  -540,
02487     -540,  -540,  -540,  -540,  -540,  -540,  -540,     0,     0,     0,
02488        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02489        0,     0,     0,     0,     0,  -540,  -540,  -540,     0,     0,
02490        0,     0,     0,  -541,  -541,  -541,     0,  -541,     0,  -540,
02491        0,  -541,  -541,     0,     0,  -540,  -541,     0,  -541,  -541,
02492     -541,  -541,  -541,  -541,  -541,     0,  -541,     0,     0,     0,
02493     -541,  -541,  -541,  -541,  -541,  -541,  -541,     0,     0,  -541,
02494        0,     0,     0,     0,     0,     0,  -541,     0,     0,  -541,
02495     -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,  -541,
02496     -541,     0,  -541,  -541,  -541,     0,  -541,  -541,     0,     0,
02497        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02498        0,     0,     0,     0,     0,     0,  -541,     0,     0,  -541,
02499     -541,     0,  -541,  -541,     0,  -541,  -541,  -541,  -541,  -541,
02500     -541,  -541,  -541,  -541,     0,     0,     0,     0,     0,     0,
02501        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02502        0,     0,  -541,  -541,  -541,     0,     0,     0,     0,     0,
02503     -543,  -543,  -543,     0,  -543,     0,  -541,     0,  -543,  -543,
02504        0,     0,  -541,  -543,     0,  -543,  -543,  -543,  -543,  -543,
02505     -543,  -543,     0,     0,     0,     0,     0,  -543,  -543,  -543,
02506     -543,  -543,  -543,  -543,     0,     0,  -543,     0,     0,     0,
02507        0,     0,     0,  -543,     0,     0,  -543,  -543,  -543,  -543,
02508     -543,  -543,  -543,  -543,  -543,  -543,  -543,  -543,     0,  -543,
02509     -543,  -543,     0,  -543,  -543,     0,     0,     0,     0,     0,
02510        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02511        0,     0,     0,  -543,   710,     0,  -543,  -543,     0,  -543,
02512     -543,     0,  -543,  -543,  -543,  -543,  -543,  -543,  -543,  -543,
02513     -543,     0,     0,     0,     0,     0,   -99,     0,     0,     0,
02514        0,     0,     0,     0,  -545,  -545,  -545,     0,  -545,  -543,
02515     -543,  -543,  -545,  -545,     0,     0,     0,  -545,     0,  -545,
02516     -545,  -545,  -545,  -545,  -545,  -545,     0,     0,     0,  -543,
02517        0,  -545,  -545,  -545,  -545,  -545,  -545,  -545,     0,     0,
02518     -545,     0,     0,     0,     0,     0,     0,  -545,     0,     0,
02519     -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,  -545,
02520     -545,  -545,     0,  -545,  -545,  -545,     0,  -545,  -545,     0,
02521        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02522        0,     0,     0,     0,     0,     0,     0,  -545,     0,     0,
02523     -545,  -545,     0,  -545,  -545,     0,  -545,  -545,  -545,  -545,
02524     -545,  -545,  -545,  -545,  -545,     0,     0,     0,     0,     0,
02525        0,     0,     0,     0,     0,     0,     0,     0,  -546,  -546,
02526     -546,     0,  -546,  -545,  -545,  -545,  -546,  -546,     0,     0,
02527        0,  -546,     0,  -546,  -546,  -546,  -546,  -546,  -546,  -546,
02528        0,     0,     0,  -545,     0,  -546,  -546,  -546,  -546,  -546,
02529     -546,  -546,     0,     0,  -546,     0,     0,     0,     0,     0,
02530        0,  -546,     0,     0,  -546,  -546,  -546,  -546,  -546,  -546,
02531     -546,  -546,  -546,  -546,  -546,  -546,     0,  -546,  -546,  -546,
02532        0,  -546,  -546,     0,     0,     0,     0,     0,     0,     0,
02533        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02534        0,  -546,     0,     0,  -546,  -546,     0,  -546,  -546,     0,
02535     -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,  -546,     0,
02536        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02537        0,     0,     0,     0,     0,     0,     0,  -546,  -546,  -546,
02538        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02539        0,     0,     0,     0,     0,     0,     0,  -546,   111,   112,
02540      113,   114,   115,   116,   117,   118,   119,   120,   121,   122,
02541      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
02542      133,   134,     0,     0,     0,   135,   136,   137,   138,   139,
02543      140,   141,   142,   143,   144,     0,     0,     0,     0,     0,
02544      145,   146,   147,   148,   149,   150,   151,   152,   153,   266,
02545      267,   154,   268,     0,     0,     0,     0,     0,     0,     0,
02546        0,   155,   156,   157,   158,   159,   160,   161,   162,   163,
02547        0,     0,   164,   165,     0,     0,   166,   167,   168,   169,
02548        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02549      170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02550        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
02551      174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
02552        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02553        0,     0,     0,     0,     0,     0,   183,   111,   112,   113,
02554      114,   115,   116,   117,   118,   119,   120,   121,   122,   123,
02555      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02556      134,     0,     0,     0,   135,   136,   137,   138,   139,   140,
02557      141,   142,   143,   144,     0,     0,     0,     0,     0,   145,
02558      146,   147,   148,   149,   150,   151,   152,   153,   223,     0,
02559      154,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02560      155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
02561        0,   164,   165,     0,     0,   166,   167,   168,   169,     0,
02562        0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
02563        0,     0,    55,     0,     0,     0,     0,     0,     0,     0,
02564        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
02565      175,   176,   177,   178,   179,   180,     0,   181,   182,     0,
02566        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02567        0,     0,     0,     0,     0,   183,   111,   112,   113,   114,
02568      115,   116,   117,   118,   119,   120,   121,   122,   123,   124,
02569      125,   126,   127,   128,   129,   130,   131,   132,   133,   134,
02570        0,     0,     0,   135,   136,   137,   138,   139,   140,   141,
02571      142,   143,   144,     0,     0,     0,     0,     0,   145,   146,
02572      147,   148,   149,   150,   151,   152,   153,     0,     0,   154,
02573        0,     0,     0,     0,     0,     0,     0,     0,     0,   155,
02574      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02575      164,   165,     0,     0,   166,   167,   168,   169,     0,     0,
02576        0,     0,     0,     0,     0,     0,     0,     0,   170,     0,
02577        0,    55,     0,     0,     0,     0,     0,     0,     0,     0,
02578        0,     0,     0,     0,     0,   171,   172,   173,   174,   175,
02579      176,   177,   178,   179,   180,     0,   181,   182,     0,     0,
02580        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02581        0,     0,     0,     0,   183,   111,   112,   113,   114,   115,
02582      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
02583      126,   127,   128,   129,   130,   131,   132,   133,   134,     0,
02584        0,     0,   135,   136,   137,   138,   139,   140,   141,   142,
02585      143,   144,     0,     0,     0,     0,     0,   145,   146,   147,
02586      148,   149,   150,   151,   152,   153,     0,     0,   154,     0,
02587        0,     0,     0,     0,     0,     0,     0,     0,   155,   156,
02588      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02589      165,     0,     0,   166,   167,   168,   169,     0,     0,     0,
02590        0,     0,     0,     0,     0,     0,     0,   170,     0,     0,
02591        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02592        0,     0,     0,     0,   171,   172,   173,   174,   175,   176,
02593      177,   178,   179,   180,     0,   181,   182,     0,     0,     5,
02594        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02595        0,     0,    12,   183,    13,    14,    15,   228,   229,    18,
02596       19,     0,     0,     0,     0,     0,   230,   231,   232,    23,
02597       24,    25,    26,     0,     0,   192,     0,     0,     0,     0,
02598        0,     0,   255,     0,     0,    32,    33,    34,    35,    36,
02599       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02600       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02601        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02602        0,     0,   256,     0,     0,   195,    50,     0,    51,    52,
02603        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02604        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02605        0,     5,     6,     7,     0,     9,     0,     0,   257,    10,
02606       11,     0,     0,     0,    12,     0,    13,    14,    15,   228,
02607      229,    18,    19,     0,     0,     0,   258,     0,   230,   231,
02608      232,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02609        0,     0,     0,     0,   255,     0,     0,    32,    33,    34,
02610       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02611       43,    44,    45,     0,     0,     0,     0,     0,     0,     0,
02612        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02613        0,     0,     0,     0,   256,     0,     0,   195,    50,     0,
02614       51,    52,     0,     0,     0,    54,    55,    56,    57,    58,
02615       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02616        0,     0,     0,     5,     6,     7,     8,     9,     0,     0,
02617      257,    10,    11,     0,     0,     0,    12,     0,    13,    14,
02618       15,    16,    17,    18,    19,     0,     0,     0,   482,     0,
02619       20,    21,    22,    23,    24,    25,    26,     0,     0,    27,
02620        0,     0,     0,     0,     0,    28,    29,    30,    31,    32,
02621       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02622       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02623        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02624        0,     0,     0,     0,     0,     0,    48,     0,     0,    49,
02625       50,     0,    51,    52,     0,    53,     0,    54,    55,    56,
02626       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02627        0,     0,     5,     6,     7,     8,     9,     0,     0,     0,
02628       10,    11,    61,    62,    63,    12,     0,    13,    14,    15,
02629       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02630       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02631        0,     0,     0,     0,    28,    29,     0,    31,    32,    33,
02632       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02633        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02634        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02635        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02636        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02637       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02638        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02639       11,    61,    62,    63,    12,     0,    13,    14,    15,    16,
02640       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02641       22,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02642        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02643       35,    36,    37,    38,    39,    40,   193,    41,    42,     0,
02644       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02645        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02646        0,     0,     0,     0,   194,     0,     0,   195,    50,     0,
02647       51,    52,     0,   196,   197,    54,    55,    56,    57,    58,
02648       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02649        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02650       61,   198,    63,    12,     0,    13,    14,    15,   228,   229,
02651       18,    19,     0,     0,     0,     0,     0,   230,   231,   232,
02652       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02653        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02654       36,    37,    38,    39,    40,   193,    41,    42,     0,    43,
02655       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02656        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02657        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02658       52,     0,   577,   197,    54,    55,    56,    57,    58,    59,
02659       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02660        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02661      198,    63,    12,     0,    13,    14,    15,   228,   229,    18,
02662       19,     0,     0,     0,     0,     0,   230,   231,   232,    23,
02663       24,    25,    26,     0,     0,   192,     0,     0,     0,     0,
02664        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02665       37,    38,    39,    40,   193,    41,    42,     0,    43,    44,
02666       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02667        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02668        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02669        0,   196,     0,    54,    55,    56,    57,    58,    59,    60,
02670        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02671        7,     0,     9,     0,     0,     0,    10,    11,    61,   198,
02672       63,    12,     0,    13,    14,    15,   228,   229,    18,    19,
02673        0,     0,     0,     0,     0,   230,   231,   232,    23,    24,
02674       25,    26,     0,     0,   192,     0,     0,     0,     0,     0,
02675        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02676       38,    39,    40,   193,    41,    42,     0,    43,    44,    45,
02677        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02678        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02679        0,   194,     0,     0,   195,    50,     0,    51,    52,     0,
02680        0,   197,    54,    55,    56,    57,    58,    59,    60,     0,
02681        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02682        0,     9,     0,     0,     0,    10,    11,    61,   198,    63,
02683       12,     0,    13,    14,    15,   228,   229,    18,    19,     0,
02684        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02685       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02686       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02687       39,    40,   193,    41,    42,     0,    43,    44,    45,     0,
02688       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02689        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02690      194,     0,     0,   195,    50,     0,    51,    52,     0,   577,
02691        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02692        0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02693        9,     0,     0,     0,    10,    11,    61,   198,    63,    12,
02694        0,    13,    14,    15,   228,   229,    18,    19,     0,     0,
02695        0,     0,     0,   230,   231,   232,    23,    24,    25,    26,
02696        0,     0,   192,     0,     0,     0,     0,     0,     0,    29,
02697        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02698       40,   193,    41,    42,     0,    43,    44,    45,     0,    46,
02699       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02700        0,     0,     0,     0,     0,     0,     0,     0,     0,   194,
02701        0,     0,   195,    50,     0,    51,    52,     0,     0,     0,
02702       54,    55,    56,    57,    58,    59,    60,     0,     0,     0,
02703        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02704        0,     0,     0,    10,    11,    61,   198,    63,    12,     0,
02705       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02706        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02707        0,   192,     0,     0,     0,     0,     0,     0,    29,     0,
02708        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02709        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02710        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02711        0,     0,     0,     0,     0,     0,     0,     0,   194,     0,
02712        0,   195,    50,     0,    51,    52,     0,   476,     0,    54,
02713       55,    56,    57,    58,    59,    60,     0,     0,     0,     0,
02714        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02715        0,     0,    10,    11,    61,   198,    63,    12,     0,    13,
02716       14,    15,   228,   229,    18,    19,     0,     0,     0,     0,
02717        0,   230,   231,   232,    23,    24,    25,    26,     0,     0,
02718      192,     0,     0,     0,     0,     0,     0,    29,     0,     0,
02719       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02720       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02721        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02722        0,     0,     0,     0,     0,     0,     0,   194,     0,     0,
02723      195,    50,     0,    51,    52,     0,   196,     0,    54,    55,
02724       56,    57,    58,    59,    60,     0,     0,     0,     0,     0,
02725        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02726        0,    10,    11,    61,   198,    63,    12,     0,    13,    14,
02727       15,   228,   229,    18,    19,     0,     0,     0,     0,     0,
02728      230,   231,   232,    23,    24,    25,    26,     0,     0,   192,
02729        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02730       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02731       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02732        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02733        0,     0,     0,     0,     0,     0,   194,     0,     0,   195,
02734       50,     0,    51,    52,     0,   758,     0,    54,    55,    56,
02735       57,    58,    59,    60,     0,     0,     0,     0,     0,     0,
02736        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02737       10,    11,    61,   198,    63,    12,     0,    13,    14,    15,
02738      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02739      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02740        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02741       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02742        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02743        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02744        0,     0,     0,     0,     0,   194,     0,     0,   195,    50,
02745        0,    51,    52,     0,   476,     0,    54,    55,    56,    57,
02746       58,    59,    60,     0,     0,     0,     0,     0,     0,     0,
02747        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02748       11,    61,   198,    63,    12,     0,    13,    14,    15,   228,
02749      229,    18,    19,     0,     0,     0,     0,     0,   230,   231,
02750      232,    23,    24,    25,    26,     0,     0,   192,     0,     0,
02751        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02752       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02753       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02754        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02755        0,     0,     0,     0,   194,     0,     0,   195,    50,     0,
02756       51,    52,     0,   577,     0,    54,    55,    56,    57,    58,
02757       59,    60,     0,     0,     0,     0,     0,     0,     0,     0,
02758        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02759       61,   198,    63,    12,     0,    13,    14,    15,   228,   229,
02760       18,    19,     0,     0,     0,     0,     0,   230,   231,   232,
02761       23,    24,    25,    26,     0,     0,   192,     0,     0,     0,
02762        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02763       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02764       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02765        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02766        0,     0,     0,   194,     0,     0,   195,    50,     0,    51,
02767       52,     0,     0,     0,    54,    55,    56,    57,    58,    59,
02768       60,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02769        6,     7,     0,     9,     0,     0,     0,    10,    11,    61,
02770      198,    63,    12,     0,    13,    14,    15,    16,    17,    18,
02771       19,     0,     0,     0,     0,     0,    20,    21,    22,    23,
02772       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02773        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02774       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02775       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02776        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02777        0,     0,   194,     0,     0,   195,    50,     0,    51,    52,
02778        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02779        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02780        7,     0,     9,     0,     0,     0,    10,    11,    61,    62,
02781       63,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02782        0,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02783       25,    26,     0,     0,   192,     0,     0,     0,     0,     0,
02784        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02785       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02786        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02787        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02788        0,   194,     0,     0,   195,    50,     0,    51,    52,     0,
02789        0,     0,    54,    55,    56,    57,    58,    59,    60,     0,
02790        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02791        0,     9,     0,     0,     0,    10,    11,    61,   198,    63,
02792       12,     0,    13,    14,    15,   228,   229,    18,    19,     0,
02793        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02794       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02795      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02796       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02797        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02798        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02799      256,     0,     0,   300,    50,     0,    51,    52,     0,   301,
02800        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02801        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02802       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02803      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02804      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02805        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02806       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02807        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02808        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02809        0,     0,     0,     0,     0,   342,     0,     0,    49,    50,
02810        0,    51,    52,     0,    53,     0,    54,    55,    56,    57,
02811       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02812        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02813       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02814        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02815       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02816      255,     0,     0,    32,    33,    34,   349,    36,    37,    38,
02817      350,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02818        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02819        0,     0,     0,     0,     0,     0,     0,   351,     0,     0,
02820      352,     0,     0,   195,    50,     0,    51,    52,     0,     0,
02821        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02822        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02823       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02824      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02825      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02826        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02827       34,   349,    36,    37,    38,   350,    40,     0,    41,    42,
02828        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02829        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02830        0,     0,     0,     0,     0,   352,     0,     0,   195,    50,
02831        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02832       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02833        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02834       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02835        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02836       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02837      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02838       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02839        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02840        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02841      256,     0,     0,   300,    50,     0,    51,    52,     0,     0,
02842        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02843        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02844       10,    11,     0,     0,     0,    12,   257,    13,    14,    15,
02845      228,   229,    18,    19,     0,     0,     0,     0,     0,   230,
02846      231,   232,    23,    24,    25,    26,     0,     0,   192,     0,
02847        0,     0,     0,     0,     0,   255,     0,     0,    32,    33,
02848       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02849        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02850        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02851        0,     0,     0,     0,     0,   887,     0,     0,   195,    50,
02852        0,    51,    52,     0,     0,     0,    54,    55,    56,    57,
02853       58,    59,    60,     0,     0,     0,     0,     5,     6,     7,
02854        0,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02855       12,   257,    13,    14,    15,   228,   229,    18,    19,     0,
02856        0,     0,     0,     0,   230,   231,   232,    23,    24,    25,
02857       26,     0,     0,   192,     0,     0,     0,     0,     0,     0,
02858      255,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02859       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02860        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02861        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02862      897,     0,     0,   195,    50,     0,    51,    52,     0,     0,
02863        0,    54,    55,    56,    57,    58,    59,    60,     0,     0,
02864        0,     0,     0,   584,   524,     0,     0,   585,     0,     0,
02865        0,     0,     0,     0,     0,     0,   257,   155,   156,   157,
02866      158,   159,   160,   161,   162,   163,     0,     0,   164,   165,
02867        0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
02868        0,     0,     0,     0,     0,     0,   170,     0,     0,     0,
02869        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02870        0,     0,     0,   171,   172,   173,   174,   175,   176,   177,
02871      178,   179,   180,     0,   181,   182,     0,     0,     0,     0,
02872      605,   516,     0,     0,   606,     0,     0,     0,     0,     0,
02873        0,     0,   183,   217,   155,   156,   157,   158,   159,   160,
02874      161,   162,   163,     0,     0,   164,   165,     0,     0,   166,
02875      167,   168,   169,     0,     0,     0,     0,     0,     0,     0,
02876        0,     0,     0,   170,     0,     0,     0,     0,     0,     0,
02877        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02878      171,   172,   173,   174,   175,   176,   177,   178,   179,   180,
02879        0,   181,   182,     0,     0,     0,     0,   608,   524,     0,
02880        0,   609,     0,     0,     0,     0,     0,     0,     0,   183,
02881      217,   155,   156,   157,   158,   159,   160,   161,   162,   163,
02882        0,     0,   164,   165,     0,     0,   166,   167,   168,   169,
02883        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02884      170,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02885        0,     0,     0,     0,     0,     0,     0,   171,   172,   173,
02886      174,   175,   176,   177,   178,   179,   180,     0,   181,   182,
02887        0,     0,     0,     0,   679,   516,     0,     0,   680,     0,
02888        0,     0,     0,     0,     0,     0,   183,   217,   155,   156,
02889      157,   158,   159,   160,   161,   162,   163,     0,     0,   164,
02890      165,     0,     0,   166,   167,   168,   169,     0,     0,     0,
02891        0,     0,     0,     0,     0,     0,     0,   170,     0,     0,
02892        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02893        0,     0,     0,     0,   171,   172,   173,   174,   175,   176,
02894      177,   178,   179,   180,     0,   181,   182,     0,     0,     0,
02895        0,   682,   524,     0,     0,   683,     0,     0,     0,     0,
02896        0,     0,     0,   183,   217,   155,   156,   157,   158,   159,
02897      160,   161,   162,   163,     0,     0,   164,   165,     0,     0,
02898      166,   167,   168,   169,     0,     0,     0,     0,     0,     0,
02899        0,     0,     0,     0,   170,     0,     0,     0,     0,     0,
02900        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02901        0,   171,   172,   173,   174,   175,   176,   177,   178,   179,
02902      180,     0,   181,   182,     0,     0,     0,     0,   689,   516,
02903        0,     0,   690,     0,     0,     0,     0,     0,     0,     0,
02904      183,   217,   155,   156,   157,   158,   159,   160,   161,   162,
02905      163,     0,     0,   164,   165,     0,     0,   166,   167,   168,
02906      169,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02907        0,   170,     0,     0,     0,     0,     0,     0,     0,     0,
02908        0,     0,     0,     0,     0,     0,     0,     0,   171,   172,
02909      173,   174,   175,   176,   177,   178,   179,   180,     0,   181,
02910      182,     0,     0,     0,     0,   562,   524,     0,     0,   563,
02911        0,     0,     0,     0,     0,     0,     0,   183,   217,   155,
02912      156,   157,   158,   159,   160,   161,   162,   163,     0,     0,
02913      164,   165,     0,     0,   166,   167,   168,   169,     0,     0,
02914        0,     0,     0,     0,     0,     0,     0,     0,   170,     0,
02915        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02916        0,     0,     0,     0,     0,   171,   172,   173,   174,   175,
02917      176,   177,   178,   179,   180,     0,   181,   182,     0,     0,
02918        0,     0,   949,   516,     0,     0,   950,     0,     0,     0,
02919        0,     0,     0,     0,   183,   217,   155,   156,   157,   158,
02920      159,   160,   161,   162,   163,     0,     0,   164,   165,     0,
02921        0,   166,   167,   168,   169,     0,     0,     0,     0,     0,
02922        0,     0,     0,     0,     0,   170,     0,     0,     0,     0,
02923        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02924        0,     0,   171,   172,   173,   174,   175,   176,   177,   178,
02925      179,   180,     0,   181,   182,     0,     0,     0,     0,   955,
02926      516,     0,     0,   956,     0,     0,     0,     0,     0,     0,
02927        0,   183,   217,   155,   156,   157,   158,   159,   160,   161,
02928      162,   163,     0,     0,   164,   165,     0,     0,   166,   167,
02929      168,   169,     0,     0,     0,     0,     0,     0,     0,     0,
02930        0,     0,   170,     0,     0,     0,     0,     0,     0,     0,
02931        0,     0,     0,     0,     0,     0,     0,     0,     0,   171,
02932      172,   173,   174,   175,   176,   177,   178,   179,   180,     0,
02933      181,   182,     0,     0,     0,     0,   958,   524,     0,     0,
02934      959,     0,     0,     0,     0,     0,     0,     0,   183,   217,
02935      155,   156,   157,   158,   159,   160,   161,   162,   163,     0,
02936        0,   164,   165,     0,     0,   166,   167,   168,   169,     0,
02937        0,     0,     0,     0,     0,     0,     0,     0,     0,   170,
02938        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02939        0,     0,     0,     0,     0,     0,   171,   172,   173,   174,
02940      175,   176,   177,   178,   179,   180,     0,   181,   182,     0,
02941        0,     0,     0,   562,   524,     0,     0,   563,     0,     0,
02942        0,     0,     0,     0,     0,   183,   217,   155,   156,   157,
02943      158,   159,   160,   161,   162,   163,     0,     0,   164,   165,
02944        0,     0,   166,   167,   168,   169,     0,     0,     0,     0,
02945        0,     0,     0,     0,     0,     0,   170,     0,     0,     0,
02946        0,     0,     0,     0,   705,     0,     0,     0,     0,     0,
02947        0,     0,     0,   171,   172,   173,   174,   175,   176,   177,
02948      178,   179,   180,   650,   181,   182,     0,     0,   304,   305,
02949      306,   307,   308,   309,   310,   311,   312,   313,   314,   315,
02950      316,     0,   183,   317,   318,     0,     0,   304,   305,   306,
02951      307,   308,   309,   310,   311,   312,   313,   314,   315,   316,
02952        0,     0,   317,   318,     0,     0,     0,     0,     0,     0,
02953      319,     0,   320,   321,   322,   323,   324,   325,   326,   327,
02954      328,   329,     0,     0,     0,     0,     0,     0,     0,   319,
02955        0,   320,   321,   322,   323,   324,   325,   326,   327,   328,
02956      329
02957 };
02958 
02959 #define yypact_value_is_default(yystate) \
02960   ((yystate) == (-778))
02961 
02962 #define yytable_value_is_error(yytable_value) \
02963   ((yytable_value) == (-566))
02964 
02965 static const yytype_int16 yycheck[] =
02966 {
02967        2,    16,    17,    55,     2,    20,     4,    51,    28,    75,
02968       51,    52,   446,   336,   210,     8,    49,   537,    16,    17,
02969      303,     8,    20,    27,   536,    29,   556,    53,    83,   583,
02970      446,    86,   249,   331,    65,    28,   253,     4,    90,   442,
02971        8,    28,   748,   272,    13,   274,   352,   276,    49,    51,
02972       52,    49,    50,   607,    86,    53,   735,   667,   813,   836,
02973       28,   671,   641,   811,    62,   732,   615,     1,    22,    27,
02974       16,    17,    29,    50,    20,    25,   330,    75,   332,   482,
02975       53,   566,   567,    62,    82,    83,    26,    55,    86,    87,
02976       88,    89,   728,    13,    13,    61,   394,    25,    22,    13,
02977       61,    85,    75,   239,    76,    82,    83,    37,    38,    86,
02978      140,   398,   390,   749,    87,    88,    89,   147,   372,   373,
02979      398,    85,    90,   871,   558,    87,    85,   681,    65,   109,
02980       15,    13,    17,     0,    25,    25,   147,    13,   692,   393,
02981      106,   395,   114,   104,   105,   432,   444,   109,   925,    86,
02982      107,    25,    56,   732,   108,   139,   735,    25,   688,   914,
02983      140,     2,   195,     4,   300,   419,   696,   834,   916,    25,
02984      140,   140,    25,   722,   723,   139,   145,   147,   147,   113,
02985      139,    59,    60,   889,   108,   146,   620,   145,    85,   147,
02986      140,   445,   258,   655,   227,   943,   136,   195,   877,   214,
02987      662,   216,   217,   205,   620,   136,   239,   641,   210,   241,
02988      241,   145,   140,   147,   881,   217,   214,   147,   216,   217,
02989      146,   706,   220,   142,   222,   145,   145,   147,   147,   227,
02990      459,   145,    26,   147,   289,   290,   291,   292,   239,   146,
02991      238,   239,   139,   220,   542,   222,   649,   553,   858,   140,
02992      140,   255,   142,    25,   298,   834,   554,   836,    28,   303,
02993      258,   695,   811,   145,   813,   147,   140,   300,   214,   145,
02994      216,   147,   140,    99,   142,   301,   109,    26,   232,   695,
02995      792,   235,   337,   338,   140,   258,    25,   140,    87,   543,
02996      288,   289,   290,   291,   292,   293,   294,   295,   877,   300,
02997      298,   555,   300,   301,   241,   303,   142,   339,   220,    85,
02998      109,   147,   289,   290,   291,   292,   331,   294,   295,   298,
02999      140,   288,   871,   872,   303,    37,    38,    26,   301,   331,
03000      860,   243,   145,   331,   147,   333,    85,   109,   858,   337,
03001      338,   140,   136,   109,    85,    87,   925,    26,   142,   390,
03002       87,    85,   140,   351,   677,    87,    85,   142,    85,    56,
03003      337,   338,   330,   139,    26,   914,   109,   916,   140,    87,
03004      109,   143,   109,    88,   351,   147,   442,   109,   332,   394,
03005      378,   379,   912,   666,   580,   602,    85,   136,   429,   138,
03006      139,   109,   394,   413,   943,    85,   394,   238,   139,   378,
03007      379,   140,   339,   957,   143,   139,    85,    85,   147,   138,
03008      139,   138,   139,   142,   416,    52,   482,   354,   416,    56,
03009      413,   140,   140,    85,    87,   393,   413,   425,    85,   444,
03010      140,   865,    85,    85,    59,    60,    85,   136,   142,   138,
03011      139,   395,   444,   142,   442,   413,   444,   288,   138,   139,
03012      418,   136,   293,   142,    85,    14,    15,   136,    85,   138,
03013      139,   139,    85,   142,    68,   419,   564,   565,    85,   442,
03014      142,    85,   143,   475,   136,   443,   138,   139,    85,   109,
03015      142,   138,   139,   144,   482,   138,   139,   139,   400,   138,
03016      139,   445,   404,   137,   538,   407,    85,    87,    56,   532,
03017      504,   534,    52,   106,    54,    55,    56,    57,   139,   482,
03018      422,   138,   139,   106,    85,   427,   139,    85,   522,   109,
03019      641,   138,   139,   846,   138,   139,   528,   542,   530,   852,
03020      140,   138,   139,    87,   532,    87,   534,   603,    87,   554,
03021      542,    68,    68,    52,   542,    54,    55,    56,    57,   138,
03022      139,    17,   554,   140,   574,   109,   554,   109,   556,   557,
03023      109,   145,   564,   565,   566,   567,   520,   138,   139,   481,
03024      138,   139,    56,   541,   528,   416,    61,    94,   580,   583,
03025      557,   574,    68,   649,   425,   553,   140,   574,   140,   543,
03026      140,   140,    52,    25,   592,   597,   520,   143,   535,   536,
03027      137,   555,   140,   607,   528,   603,   574,   140,   140,   642,
03028      564,   565,   549,    61,   735,   592,    87,   738,   146,   104,
03029      105,   106,   666,    87,   626,    87,   628,   140,   630,   684,
03030      603,   140,   687,   119,   120,   121,   140,   935,   109,   641,
03031      564,   565,   596,   597,   642,   109,   698,   109,    61,    10,
03032       68,   649,     8,    54,   652,   653,   104,   105,   106,    13,
03033      658,   659,    63,    64,   666,   667,   109,   669,    61,   671,
03034      703,   704,   137,   652,   653,    52,   649,   681,   140,   658,
03035      659,    61,   936,   140,   140,    65,   684,   140,   692,   687,
03036      688,   104,   105,   106,    52,   140,   729,   730,   696,   117,
03037      118,   119,   120,   121,   706,   703,   704,   684,   741,   111,
03038      687,   104,   105,   106,   144,   836,    15,   838,    52,   140,
03039       54,    55,    56,    57,   104,   105,   728,   782,   145,   114,
03040      698,   729,   730,   193,   109,   140,   196,   197,    40,    41,
03041       42,    43,    44,   741,   140,   140,   779,   749,   685,   751,
03042       10,   753,   754,   786,   787,    89,   877,   790,   879,   140,
03043      697,    95,   883,    88,    16,    17,     9,   137,    20,    10,
03044       10,   769,   140,   806,   137,   777,    54,    55,   780,    57,
03045      140,   779,   694,   140,   782,    63,    64,   140,   786,   787,
03046      769,   140,   790,   137,    46,    47,   114,   140,   140,    51,
03047       52,   137,   140,   715,   925,   782,   927,    56,   806,   930,
03048       62,    63,   140,   140,   726,   416,   849,   819,   820,   140,
03049      822,    56,   824,   825,   945,   140,   140,   140,    87,   827,
03050      142,    52,   142,    54,    55,    56,    57,   539,   298,    89,
03051      889,   938,   722,   303,    92,   937,   967,   845,    95,    57,
03052       -1,   849,    90,   865,   827,   792,   858,   794,    68,   834,
03053      732,    52,   860,    54,    55,    56,    57,    -1,    89,   902,
03054       -1,   904,   845,    83,    84,    96,    -1,   910,    52,    -1,
03055       54,    55,    56,    57,    -1,    -1,    -1,   799,    -1,   891,
03056      892,   893,    -1,   895,   896,   116,    -1,    52,   810,    54,
03057       55,    56,    57,   815,   902,    -1,   904,   117,   118,   119,
03058      120,   121,   910,    -1,   912,    89,   918,   919,   920,   921,
03059      935,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   389,
03060      390,    -1,    -1,   935,    89,   937,   938,   935,   398,    -1,
03061       -1,   193,    -1,    -1,   196,   197,   198,    -1,    -1,   951,
03062      952,   953,   954,   957,    -1,   923,    52,    -1,    54,    55,
03063       56,    57,   214,   965,   216,   217,   934,    -1,    -1,   429,
03064       -1,   973,   432,    -1,   676,    52,    -1,    54,    55,    56,
03065       57,    -1,   936,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03066       -1,   693,    -1,    89,    -1,    -1,    -1,    -1,    -1,    95,
03067       96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03068       -1,    -1,    89,    -1,    -1,    -1,   476,    -1,    95,    96,
03069      116,    -1,    -1,   119,    -1,    -1,    -1,    -1,    -1,    -1,
03070       -1,    -1,    -1,     2,    -1,     4,    -1,    -1,    -1,   116,
03071       -1,    -1,   119,    -1,    -1,    -1,   298,    -1,    -1,   145,
03072       -1,   303,   304,   305,   306,   307,   308,   309,   310,   311,
03073      312,   313,   314,   315,   316,   317,   318,   319,   320,   321,
03074      322,   323,   324,   325,   326,   327,   328,   329,   538,   331,
03075       49,   783,    -1,   785,    53,    52,    -1,    54,    55,    56,
03076       57,    -1,    -1,   795,    -1,    -1,    -1,    -1,   800,    -1,
03077       -1,    -1,    -1,    -1,    -1,    -1,    75,    -1,    -1,    -1,
03078       -1,     2,    -1,     4,    -1,    -1,    -1,   577,    87,    88,
03079       89,    90,    89,    -1,    -1,    -1,   378,   379,    95,    96,
03080       -1,    -1,    -1,    -1,    -1,    -1,   388,   389,   390,    -1,
03081       -1,    -1,   394,    -1,   396,   397,   398,    -1,    -1,   116,
03082       -1,    -1,   119,   855,   856,    -1,    -1,    -1,    49,   628,
03083       -1,   630,    53,   415,    -1,    -1,    68,    52,   420,    54,
03084       55,    56,    57,    -1,    -1,   142,    -1,   429,    -1,    -1,
03085      432,    83,    84,     2,    75,     4,   646,    -1,    -1,    -1,
03086       -1,    -1,   444,    -1,    -1,    -1,    87,    88,    89,    -1,
03087        2,    -1,     4,    -1,    89,    -1,   666,    -1,    -1,   911,
03088       95,    96,   464,   465,   116,   117,   118,   119,   120,   121,
03089       -1,    -1,    -1,    -1,   476,    -1,   195,    -1,    -1,    -1,
03090       49,   116,    -1,    -1,   119,     0,    -1,   939,    -1,   941,
03091       -1,    -1,    -1,     8,     9,    10,    -1,    49,    13,    14,
03092       15,    52,    17,    54,    55,    56,    57,   142,   227,    -1,
03093      720,    -1,    27,    -1,    -1,    -1,    -1,    -1,    87,   238,
03094      239,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03095       -1,    -1,   751,    -1,   753,   754,   538,    -1,    89,   258,
03096      542,    68,    -1,    -1,    95,    96,    -1,    -1,   758,    -1,
03097       -1,    -1,   554,    -1,   195,    -1,    83,    84,    -1,    -1,
03098       -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,   119,   288,
03099       85,    -1,    -1,    -1,   293,   577,    -1,    -1,    -1,   789,
03100       -1,   300,   301,    -1,    -1,    -1,   227,   114,   115,   116,
03101      117,   118,   119,   120,   121,    -1,    -1,   238,   239,    -1,
03102      819,   820,    -1,   822,    -1,   824,   825,    -1,    -1,    -1,
03103       -1,    -1,    -1,    -1,   333,    -1,    -1,   258,    -1,    -1,
03104       -1,    -1,   137,    -1,   139,    -1,   195,   142,   143,    -1,
03105      145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03106       -1,    -1,    -1,   195,   646,    -1,    -1,   288,   650,    -1,
03107      652,   653,   293,    -1,    -1,    -1,   658,   659,   227,   300,
03108      301,    -1,    -1,    -1,   666,    -1,    -1,    -1,    -1,   238,
03109      239,    -1,   891,   892,   893,   227,   895,   896,    -1,    -1,
03110       -1,    -1,    -1,    -1,    -1,    -1,   238,   239,    -1,    -1,
03111       -1,    -1,   333,    -1,    -1,    -1,    -1,   416,    -1,   918,
03112      919,   920,   921,   705,    -1,    -1,   425,    -1,   710,   711,
03113       -1,   713,   714,    -1,    -1,    -1,    -1,    -1,   720,   288,
03114       -1,    -1,    -1,   442,   293,    -1,    -1,    -1,    -1,    -1,
03115       -1,   300,   951,   952,   953,   954,   288,    -1,    -1,    -1,
03116       -1,   293,    -1,    -1,    -1,    -1,   965,    -1,   300,    -1,
03117       -1,    -1,    -1,    -1,   973,    -1,   758,    -1,    -1,    -1,
03118      762,    -1,    -1,   482,   333,    -1,    -1,   769,    -1,    -1,
03119       -1,    -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,
03120       -1,   333,    -1,    -1,   425,    -1,    -1,   789,    -1,    -1,
03121       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03122       -1,   442,    -1,    -1,    -1,   807,    -1,    -1,    -1,    -1,
03123       -1,    -1,    -1,   532,    -1,   534,    -1,    -1,    -1,    -1,
03124       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03125       68,    69,    70,    71,    72,    73,    74,   556,    -1,    77,
03126       78,   482,    -1,    -1,    -1,    83,    84,   416,    -1,    -1,
03127       -1,    -1,    -1,    -1,    -1,    -1,   425,    -1,    -1,    -1,
03128       -1,    -1,    -1,    -1,   416,    -1,    -1,    -1,    -1,    -1,
03129       44,    -1,    -1,   425,   112,   113,   114,   115,   116,   117,
03130      118,   119,   120,   121,   603,    -1,    -1,    -1,    -1,    -1,
03131       -1,   532,    -1,   534,    68,    69,    70,    71,    72,    73,
03132       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03133       84,    -1,    -1,    -1,    -1,   556,    -1,    -1,    -1,    -1,
03134       -1,    -1,    -1,   642,    -1,    -1,    -1,    -1,    -1,    -1,
03135      649,    -1,    -1,   935,    -1,    -1,   110,    -1,   112,   113,
03136      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03137       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03138       -1,    -1,   603,   532,    -1,   534,   140,    -1,    -1,   688,
03139       -1,    -1,    -1,    -1,    -1,    -1,    -1,   696,    -1,    -1,
03140      532,    -1,   534,    -1,   703,   704,    -1,   556,    -1,    -1,
03141       -1,    -1,    -1,   634,    -1,    -1,    -1,    -1,    -1,    -1,
03142       -1,   642,    -1,    -1,   556,    -1,    -1,    -1,   649,    -1,
03143      729,   730,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
03144       -1,    -1,   741,    -1,    -1,    -1,    -1,    -1,    66,    67,
03145       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03146       78,    -1,    -1,    81,    82,    83,    84,   688,    -1,    -1,
03147       -1,    -1,    -1,    -1,    -1,   696,    -1,    95,    -1,    -1,
03148      779,    -1,   703,   704,    -1,    -1,    -1,   786,   787,    -1,
03149       -1,   790,    -1,   642,   112,   113,   114,   115,   116,   117,
03150      118,   119,   120,   121,    -1,   123,   124,   806,   729,   730,
03151      642,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03152      741,    -1,    -1,   141,   142,    -1,    -1,    -1,   827,    -1,
03153       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   688,
03154       -1,    -1,    -1,    -1,    -1,    -1,   845,   696,    -1,    -1,
03155      849,    -1,    -1,    -1,   703,   704,   688,    -1,   779,    -1,
03156       -1,   860,    -1,    -1,   696,   786,   787,    -1,    -1,   790,
03157       -1,   703,   704,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03158      729,   730,    -1,    -1,    -1,   806,    -1,    -1,    -1,    -1,
03159       -1,    -1,   741,    -1,    -1,    -1,    -1,   729,   730,    -1,
03160       -1,    -1,    -1,   902,    -1,   904,   827,    -1,    -1,   741,
03161       -1,   910,    -1,   912,    -1,    -1,    -1,    68,    69,    70,
03162       71,    72,    73,    74,   845,    -1,    77,    78,   849,    -1,
03163      779,    -1,    83,    84,    -1,    -1,    -1,   786,   787,   860,
03164       -1,   790,    -1,    46,    47,    -1,    -1,   779,    51,    52,
03165       53,    -1,    -1,    -1,   786,   787,    -1,   806,   790,    -1,
03166       63,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03167      121,    -1,    75,    -1,   806,    -1,    -1,    -1,    -1,    -1,
03168       -1,   902,    -1,   904,    87,    88,    89,    -1,    -1,   910,
03169       -1,   912,    -1,    -1,    -1,    -1,   845,    -1,    -1,    -1,
03170      849,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03171       -1,   860,    -1,    -1,    -1,    -1,    -1,   849,    -1,    -1,
03172       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   860,    -1,
03173       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03174       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03175       -1,    -1,    -1,   902,    -1,   904,    -1,    -1,    -1,    -1,
03176       -1,   910,    -1,   912,    -1,    -1,    -1,    -1,    -1,    -1,
03177      902,    -1,   904,    -1,    -1,    -1,    -1,    -1,   910,    -1,
03178      912,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
03179      193,    -1,    -1,   196,   197,   198,    66,    67,    68,    69,
03180       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
03181       -1,    81,    82,    83,    84,    -1,    -1,    68,    69,    70,
03182       71,    72,    73,    74,    75,    95,    77,    78,    -1,    -1,
03183       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03184       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03185      120,   121,    -1,   123,   124,   258,    -1,    -1,    -1,    -1,
03186       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03187      121,   141,   142,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03188       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03189       74,    75,    76,    77,    78,    79,    80,    -1,   301,    83,
03190       84,   304,   305,   306,   307,   308,   309,   310,   311,   312,
03191      313,   314,   315,   316,   317,   318,   319,   320,   321,   322,
03192      323,   324,   325,   326,   327,   328,   329,    -1,   112,   113,
03193      114,   115,   116,   117,   118,   119,   120,   121,    52,    53,
03194       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03195       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03196       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03197       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03198       -1,    95,    -1,    -1,    -1,   388,   389,   390,    -1,    -1,
03199       -1,    -1,    -1,   396,   397,   398,    -1,    -1,   112,   113,
03200      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03201      124,    -1,   415,    -1,    -1,    -1,    -1,   420,    -1,    -1,
03202       -1,    -1,    -1,    -1,    -1,    -1,   429,   141,   142,   432,
03203       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   442,
03204       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03205       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03206       -1,   464,   465,    -1,     0,     1,    -1,     3,     4,     5,
03207        6,     7,    -1,   476,    -1,    11,    12,    -1,    -1,   482,
03208       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03209       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03210       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03211       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03212       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03213       66,    67,    -1,    -1,    -1,   538,    -1,    -1,    -1,    -1,
03214       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03215       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03216       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03217       -1,    -1,    -1,    -1,   577,    -1,    -1,    -1,    -1,    -1,
03218       -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,
03219       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03220      603,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,
03221       -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03222       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03223       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03224       -1,    -1,    -1,   646,    -1,    -1,   649,   650,    -1,    -1,
03225       -1,     0,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,
03226        9,    10,    -1,   666,    13,    14,    15,    -1,    17,    -1,
03227       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    27,    28,
03228       29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    37,    38,
03229       -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,    -1,
03230       -1,    -1,   705,    -1,    -1,    -1,    -1,   710,   711,    -1,
03231      713,   714,    -1,    -1,    -1,    -1,    -1,   720,    -1,    68,
03232       69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
03233       79,    80,    -1,    -1,    83,    84,    85,    -1,    87,    88,
03234       -1,    -1,    -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,
03235       -1,    -1,    -1,    -1,    -1,   758,    -1,    -1,   107,   762,
03236      109,   110,   111,   112,   113,   114,   115,   116,   117,   118,
03237      119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03238       -1,    -1,    -1,    -1,    -1,    -1,   789,    -1,   137,   138,
03239      139,   140,     0,    -1,   143,   144,   145,    -1,   147,    -1,
03240        8,     9,    10,    -1,   807,    13,    14,    15,    -1,    17,
03241       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,    27,
03242       28,    -1,    -1,    -1,   827,    -1,    -1,    -1,    -1,    37,
03243       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03244       -1,    -1,   845,    68,    69,    70,    71,    72,    73,    74,
03245       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03246       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
03247       78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    -1,
03248       88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,   114,
03249      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03250       -1,    -1,   110,    -1,   112,   113,   114,   115,   116,   117,
03251      118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
03252       -1,    -1,   147,    -1,    -1,    -1,    -1,    -1,   136,   137,
03253      138,   139,   140,     0,   142,   143,   144,   145,    -1,   147,
03254       -1,     8,     9,    10,    -1,    -1,    13,    14,    15,    -1,
03255       17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03256       27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03257       37,    38,    -1,    40,    41,    42,    43,    44,    -1,    -1,
03258       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03259       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03260       84,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03261       77,    78,    79,    80,    -1,    -1,    83,    84,    85,    -1,
03262       -1,    88,    -1,    -1,    -1,    -1,   110,    94,   112,   113,
03263      114,   115,   116,   117,   118,   119,   120,   121,    -1,    -1,
03264      107,    -1,    -1,   110,   111,   112,   113,   114,   115,   116,
03265      117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,
03266       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03267      137,   138,   139,   140,     0,    -1,   143,   144,   145,    -1,
03268      147,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03269       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03270       26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03271       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03272       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03273       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03274       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03275       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03276       -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,    -1,
03277       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03278       -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,   115,
03279      116,   117,   118,   119,   120,   121,    -1,    -1,    -1,    -1,
03280       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03281      136,   137,   138,   139,   140,     0,   142,   143,   144,   145,
03282       -1,   147,    -1,     8,     9,    10,    -1,    -1,    13,    14,
03283       15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03284       -1,    -1,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
03285       -1,    -1,    37,    38,    -1,    40,    41,    42,    43,    44,
03286       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03287       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03288       -1,    -1,    -1,    68,    69,    70,    71,    72,    73,    74,
03289       75,    76,    77,    78,    79,    80,    -1,    -1,    83,    84,
03290       85,    -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,
03291       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03292       -1,    -1,    -1,    -1,    -1,   110,    -1,   112,   113,   114,
03293      115,   116,   117,   118,   119,   120,   121,    -1,    -1,    -1,
03294       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03295       -1,    -1,   137,   138,   139,   140,     0,   142,   143,   144,
03296      145,    -1,   147,    -1,     8,     9,    10,    -1,    -1,    -1,
03297       14,    15,    -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,
03298       -1,    -1,    26,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03299       -1,    -1,    -1,    37,    38,    -1,    40,    41,    42,    43,
03300       44,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03301       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03302       -1,    -1,    -1,    -1,    68,    69,    70,    71,    72,    73,
03303       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03304       84,    85,     0,    87,    -1,    -1,    -1,    -1,    -1,    -1,
03305        8,     9,    10,    -1,    -1,    -1,    14,    15,    -1,    17,
03306       -1,    -1,    -1,    -1,    -1,   109,   110,    -1,   112,   113,
03307      114,   115,   116,   117,   118,   119,   120,   121,    -1,    37,
03308       38,    -1,    40,    41,    42,    43,    44,    -1,    -1,    -1,
03309       -1,    -1,   136,   137,   138,   139,   140,    -1,    -1,   143,
03310       -1,   145,    -1,   147,    -1,    -1,    -1,    -1,    -1,    -1,
03311       68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
03312       78,    79,    80,    -1,    -1,    83,    84,    85,    -1,    87,
03313       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03314       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03315       -1,   109,   110,    -1,   112,   113,   114,   115,   116,   117,
03316      118,   119,   120,   121,    -1,    -1,    -1,    -1,    -1,    -1,
03317       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,
03318      138,   139,   140,    -1,    -1,   143,    -1,   145,     1,   147,
03319        3,     4,     5,     6,     7,     8,     9,    10,    11,    12,
03320       -1,    -1,    15,    16,    -1,    18,    19,    20,    21,    22,
03321       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03322       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03323       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03324       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03325       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03326       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03327       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03328       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03329      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03330       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03331      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03332       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03333       -1,    -1,   145,     1,   147,     3,     4,     5,     6,     7,
03334       -1,    -1,    10,    11,    12,    -1,    14,    15,    16,    -1,
03335       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03336       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03337       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03338       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03339       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03340       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03341       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03342       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03343       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03344       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03345       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03346       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03347       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     1,   147,
03348        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03349       -1,    -1,    15,    16,    17,    18,    19,    20,    21,    22,
03350       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03351       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03352       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03353       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03354       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03355       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03356       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03357       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03358      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03359       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03360      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,
03361        3,     4,     5,     6,     7,    -1,    -1,    -1,    11,    12,
03362       -1,    -1,   145,    16,   147,    18,    19,    20,    21,    22,
03363       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03364       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03365       -1,    -1,    45,    46,    47,    48,    49,    50,    51,    52,
03366       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03367       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03368       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03369       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03370       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03371      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03372       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03373      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03374       -1,    -1,    -1,    -1,   137,    -1,    -1,    -1,    -1,    -1,
03375       -1,    -1,   145,     1,   147,     3,     4,     5,     6,     7,
03376       -1,    -1,    10,    11,    12,    -1,    -1,    15,    16,    -1,
03377       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03378       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03379       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03380       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03381       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03382       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03383       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03384       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03385       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03386       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03387       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03388       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03389       -1,     9,    10,    11,    12,    -1,    -1,   145,    16,   147,
03390       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03391       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03392       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03393       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03394       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03395       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03396       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03397       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03398       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03399       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03400       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03401       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03402       -1,    -1,    -1,    11,    12,    -1,    -1,   145,    16,   147,
03403       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03404       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03405       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03406       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03407       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03408       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03409       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03410       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03411       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03412       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03413       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03414       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03415       -1,    -1,    -1,    11,    12,   143,    -1,   145,    16,   147,
03416       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03417       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03418       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03419       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03420       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03421       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03422       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03423       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03424       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03425       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03426       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03427       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03428       -1,    -1,    -1,    11,    12,   143,    -1,   145,    16,   147,
03429       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03430       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03431       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,
03432       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03433       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03434       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03435       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03436       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03437       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03438       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03439       -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,    -1,
03440       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   137,
03441       -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     1,   147,
03442        3,     4,     5,     6,     7,    -1,    -1,    10,    11,    12,
03443       -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,    22,
03444       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03445       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03446       -1,    -1,    45,    46,    -1,    48,    49,    50,    51,    52,
03447       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03448       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03449       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03450       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03451       93,    -1,    95,    -1,    97,    98,    99,   100,   101,   102,
03452      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03453       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,
03454      123,   124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03455        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03456       -1,    -1,   145,    16,   147,    18,    19,    20,    21,    22,
03457       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03458       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03459       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03460       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03461       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03462       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03463       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03464       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03465      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03466        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03467      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03468       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03469       34,    35,    36,    -1,   147,    39,    -1,    -1,    -1,    -1,
03470       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03471       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03472       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03473       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03474       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03475       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03476       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03477       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,
03478      124,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03479        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03480       -1,   145,    16,   147,    18,    19,    20,    21,    22,    23,
03481       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03482       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03483       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03484       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03485       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03486       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03487       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03488       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03489       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03490        5,     6,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03491      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03492       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03493       35,    36,    -1,   147,    39,    -1,    -1,    -1,    -1,    -1,
03494       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03495       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03496       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03497       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03498       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03499       95,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03500       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03501       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03502       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,     6,
03503        7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,
03504      145,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03505       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03506       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03507       -1,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03508       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
03509       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03510       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03511       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
03512       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03513       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03514       -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
03515       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03516       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   145,     3,
03517        4,     5,     6,     7,     8,     9,    10,    11,    12,    13,
03518       14,    15,    16,    17,    18,    19,    20,    21,    22,    23,
03519       24,    25,    26,    -1,    -1,    -1,    30,    31,    32,    33,
03520       34,    35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,
03521       -1,    45,    46,    47,    48,    49,    50,    51,    52,    53,
03522       54,    55,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,
03523       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
03524       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03525       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03526       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03527       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03528      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03529      124,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03530        7,    -1,    -1,    -1,    11,    12,    -1,   141,   142,    16,
03531       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    26,
03532       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03533       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03534       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03535       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03536       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03537       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03538       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    96,
03539       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03540       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03541       -1,    -1,    -1,    -1,    -1,   122,   123,   124,    -1,    -1,
03542       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,   136,
03543       -1,    11,    12,    -1,    -1,   142,    16,    -1,    18,    19,
03544       20,    21,    22,    23,    24,    -1,    26,    -1,    -1,    -1,
03545       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03546       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03547       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
03548       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03549       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03550       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03551       90,    -1,    92,    93,    -1,    95,    96,    97,    98,    99,
03552      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03553       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03554       -1,    -1,   122,   123,   124,    -1,    -1,    -1,    -1,    -1,
03555        3,     4,     5,    -1,     7,    -1,   136,    -1,    11,    12,
03556       -1,    -1,   142,    16,    -1,    18,    19,    20,    21,    22,
03557       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03558       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03559       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03560       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03561       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03562       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03563       -1,    -1,    -1,    86,    87,    -1,    89,    90,    -1,    92,
03564       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03565      103,    -1,    -1,    -1,    -1,    -1,   109,    -1,    -1,    -1,
03566       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,   122,
03567      123,   124,    11,    12,    -1,    -1,    -1,    16,    -1,    18,
03568       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,   142,
03569       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03570       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03571       49,    50,    51,    52,    53,    54,    55,    56,    57,    58,
03572       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03573       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03574       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03575       89,    90,    -1,    92,    93,    -1,    95,    96,    97,    98,
03576       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03577       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03578        5,    -1,     7,   122,   123,   124,    11,    12,    -1,    -1,
03579       -1,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03580       -1,    -1,    -1,   142,    -1,    30,    31,    32,    33,    34,
03581       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03582       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03583       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03584       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03585       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03586       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03587       95,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03588       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03589       -1,    -1,    -1,    -1,    -1,    -1,    -1,   122,   123,   124,
03590       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03591       -1,    -1,    -1,    -1,    -1,    -1,    -1,   142,     3,     4,
03592        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
03593       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
03594       25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03595       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
03596       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03597       55,    56,    57,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03598       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03599       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03600       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03601       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03602       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03603      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03604       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03605       -1,    -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,
03606        6,     7,     8,     9,    10,    11,    12,    13,    14,    15,
03607       16,    17,    18,    19,    20,    21,    22,    23,    24,    25,
03608       26,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03609       36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,
03610       46,    47,    48,    49,    50,    51,    52,    53,    54,    -1,
03611       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03612       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03613       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03614       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03615       -1,    -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03616       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03617      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03618       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03619       -1,    -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,
03620        7,     8,     9,    10,    11,    12,    13,    14,    15,    16,
03621       17,    18,    19,    20,    21,    22,    23,    24,    25,    26,
03622       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03623       37,    38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03624       47,    48,    49,    50,    51,    52,    53,    -1,    -1,    56,
03625       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
03626       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03627       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
03628       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
03629       -1,    98,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03630       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03631      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
03632       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03633       -1,    -1,    -1,    -1,   141,     3,     4,     5,     6,     7,
03634        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
03635       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
03636       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    37,
03637       38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03638       48,    49,    50,    51,    52,    53,    -1,    -1,    56,    -1,
03639       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
03640       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03641       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03642       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
03643       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03644       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
03645      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,     3,
03646        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03647       -1,    -1,    16,   141,    18,    19,    20,    21,    22,    23,
03648       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03649       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03650       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03651       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03652       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03653       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03654       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03655       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03657       -1,     3,     4,     5,    -1,     7,    -1,    -1,   122,    11,
03658       12,    -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,
03659       22,    23,    24,    -1,    -1,    -1,   140,    -1,    30,    31,
03660       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03661       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03662       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03663       62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03664       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03665       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03666       92,    93,    -1,    -1,    -1,    97,    98,    99,   100,   101,
03667      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03668       -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,
03669      122,    11,    12,    -1,    -1,    -1,    16,    -1,    18,    19,
03670       20,    21,    22,    23,    24,    -1,    -1,    -1,   140,    -1,
03671       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03672       -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
03673       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03674       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03675       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03676       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03677       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03678      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03679       -1,    -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,
03680       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03681       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03682       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03683       -1,    -1,    -1,    -1,    45,    46,    -1,    48,    49,    50,
03684       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03685       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03686       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03687       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03688       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03689      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03690       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03691       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03692       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03693       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03694       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03695       52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
03696       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03697       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03698       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03699       92,    93,    -1,    95,    96,    97,    98,    99,   100,   101,
03700      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03701        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03702      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03703       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03704       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03705       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03706       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03707       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03708       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03709       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03710       93,    -1,    95,    96,    97,    98,    99,   100,   101,   102,
03711      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03712        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03713      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03714       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03715       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03716       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03717       54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
03718       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03719       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03720       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03721       -1,    95,    -1,    97,    98,    99,   100,   101,   102,   103,
03722       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03723        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03724      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03725       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03726       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03727       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03728       55,    56,    57,    58,    59,    60,    -1,    62,    63,    64,
03729       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03730       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03731       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03732       -1,    96,    97,    98,    99,   100,   101,   102,   103,    -1,
03733       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03734       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03735       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03736       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03737       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03738       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03739       56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
03740       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03741       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03742       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03743       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03744       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03745        7,    -1,    -1,    -1,    11,    12,   122,   123,   124,    16,
03746       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03747       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03748       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03749       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03750       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03751       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03752       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03753       -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,    -1,
03754       97,    98,    99,   100,   101,   102,   103,    -1,    -1,    -1,
03755       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03756       -1,    -1,    -1,    11,    12,   122,   123,   124,    16,    -1,
03757       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03758       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03759       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03760       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03761       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03762       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03763       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03764       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    97,
03765       98,    99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,
03766       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
03767       -1,    -1,    11,    12,   122,   123,   124,    16,    -1,    18,
03768       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03769       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03770       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03771       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03772       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03773       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03774       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03775       89,    90,    -1,    92,    93,    -1,    95,    -1,    97,    98,
03776       99,   100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,
03777       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03778       -1,    11,    12,   122,   123,   124,    16,    -1,    18,    19,
03779       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03780       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03781       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03782       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03783       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03784       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03785       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03786       90,    -1,    92,    93,    -1,    95,    -1,    97,    98,    99,
03787      100,   101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,
03788       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03789       11,    12,   122,   123,   124,    16,    -1,    18,    19,    20,
03790       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03791       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03792       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03793       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03794       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03795       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03796       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03797       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03798      101,   102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03799       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03800       12,   122,   123,   124,    16,    -1,    18,    19,    20,    21,
03801       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03802       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03803       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03804       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03805       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03806       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03807       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03808       92,    93,    -1,    95,    -1,    97,    98,    99,   100,   101,
03809      102,   103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03810        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03811      122,   123,   124,    16,    -1,    18,    19,    20,    21,    22,
03812       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03813       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03814       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03815       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03816       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03817       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03818       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03819       93,    -1,    -1,    -1,    97,    98,    99,   100,   101,   102,
03820      103,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03821        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,
03822      123,   124,    16,    -1,    18,    19,    20,    21,    22,    23,
03823       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03824       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03825       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03826       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03827       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03828       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03829       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03830       -1,    -1,    -1,    97,    98,    99,   100,   101,   102,   103,
03831       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03832        5,    -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,
03833      124,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03834       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03835       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03836       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03837       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03838       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03839       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03840       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03841       -1,    -1,    97,    98,    99,   100,   101,   102,   103,    -1,
03842       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03843       -1,     7,    -1,    -1,    -1,    11,    12,   122,   123,   124,
03844       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03845       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03846       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03847       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03848       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03849       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03850       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03851       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03852       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03853       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03854       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03855       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03856       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03857       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03858       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03859       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03860       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03861       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03862       -1,    92,    93,    -1,    95,    -1,    97,    98,    99,   100,
03863      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03864       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03865       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03866       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03867       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03868       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03869       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03870       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03871       -1,    -1,    -1,    -1,    -1,    -1,    -1,    83,    -1,    -1,
03872       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03873       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03874       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03875       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03876       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03877       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03878       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03879       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03880       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03881       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03882       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03883       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03884      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03885       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03886       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03887       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03888       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03889       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03890       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03891       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03892       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03893       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03894       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03895       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03896       11,    12,    -1,    -1,    -1,    16,   122,    18,    19,    20,
03897       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03898       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03899       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03900       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03901       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
03902       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03903       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03904       -1,    92,    93,    -1,    -1,    -1,    97,    98,    99,   100,
03905      101,   102,   103,    -1,    -1,    -1,    -1,     3,     4,     5,
03906       -1,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03907       16,   122,    18,    19,    20,    21,    22,    23,    24,    -1,
03908       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03909       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03910       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03911       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03912       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03913       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03914       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03915       -1,    97,    98,    99,   100,   101,   102,   103,    -1,    -1,
03916       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
03917       -1,    -1,    -1,    -1,    -1,    -1,   122,    66,    67,    68,
03918       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03919       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03920       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
03921       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03922       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
03923      119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,
03924       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
03925       -1,    -1,   141,   142,    66,    67,    68,    69,    70,    71,
03926       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
03927       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03928       -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,
03929       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03930      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
03931       -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,
03932       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,
03933      142,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03934       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03935       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03936       95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03937       -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,
03938      115,   116,   117,   118,   119,   120,   121,    -1,   123,   124,
03939       -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,
03940       -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,
03941       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03942       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03943       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,
03944       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03945       -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,   117,
03946      118,   119,   120,   121,    -1,   123,   124,    -1,    -1,    -1,
03947       -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,
03948       -1,    -1,    -1,   141,   142,    66,    67,    68,    69,    70,
03949       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
03950       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
03951       -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,
03952       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03953       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
03954      121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,    53,
03955       -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03956      141,   142,    66,    67,    68,    69,    70,    71,    72,    73,
03957       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
03958       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03959       -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03960       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,   113,
03961      114,   115,   116,   117,   118,   119,   120,   121,    -1,   123,
03962      124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,    56,
03963       -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,    66,
03964       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03965       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
03966       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,
03967       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03968       -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,   116,
03969      117,   118,   119,   120,   121,    -1,   123,   124,    -1,    -1,
03970       -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,    -1,
03971       -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,    69,
03972       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
03973       -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
03974       -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,    -1,
03975       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03976       -1,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
03977      120,   121,    -1,   123,   124,    -1,    -1,    -1,    -1,    52,
03978       53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,
03979       -1,   141,   142,    66,    67,    68,    69,    70,    71,    72,
03980       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
03981       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03982       -1,    -1,    95,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03983       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   112,
03984      113,   114,   115,   116,   117,   118,   119,   120,   121,    -1,
03985      123,   124,    -1,    -1,    -1,    -1,    52,    53,    -1,    -1,
03986       56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   141,   142,
03987       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
03988       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
03989       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
03990       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03991       -1,    -1,    -1,    -1,    -1,    -1,   112,   113,   114,   115,
03992      116,   117,   118,   119,   120,   121,    -1,   123,   124,    -1,
03993       -1,    -1,    -1,    52,    53,    -1,    -1,    56,    -1,    -1,
03994       -1,    -1,    -1,    -1,    -1,   141,   142,    66,    67,    68,
03995       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03996       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03997       -1,    -1,    -1,    -1,    -1,    -1,    95,    -1,    -1,    -1,
03998       -1,    -1,    -1,    -1,    44,    -1,    -1,    -1,    -1,    -1,
03999       -1,    -1,    -1,   112,   113,   114,   115,   116,   117,   118,
04000      119,   120,   121,    44,   123,   124,    -1,    -1,    68,    69,
04001       70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
04002       80,    -1,   141,    83,    84,    -1,    -1,    68,    69,    70,
04003       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
04004       -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
04005      110,    -1,   112,   113,   114,   115,   116,   117,   118,   119,
04006      120,   121,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   110,
04007       -1,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04008      121
04009 };
04010 
04011 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
04012    symbol of state STATE-NUM.  */
04013 static const yytype_uint16 yystos[] =
04014 {
04015        0,   149,   150,     0,     1,     3,     4,     5,     6,     7,
04016       11,    12,    16,    18,    19,    20,    21,    22,    23,    24,
04017       30,    31,    32,    33,    34,    35,    36,    39,    45,    46,
04018       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
04019       57,    59,    60,    62,    63,    64,    66,    67,    86,    89,
04020       90,    92,    93,    95,    97,    98,    99,   100,   101,   102,
04021      103,   122,   123,   124,   151,   152,   153,   158,   160,   162,
04022      163,   166,   167,   169,   170,   171,   173,   174,   184,   198,
04023      215,   216,   217,   218,   219,   220,   221,   222,   223,   224,
04024      225,   248,   249,   259,   260,   261,   262,   263,   264,   265,
04025      268,   278,   280,   281,   282,   283,   284,   285,   308,   319,
04026      153,     3,     4,     5,     6,     7,     8,     9,    10,    11,
04027       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
04028       22,    23,    24,    25,    26,    30,    31,    32,    33,    34,
04029       35,    36,    37,    38,    39,    45,    46,    47,    48,    49,
04030       50,    51,    52,    53,    56,    66,    67,    68,    69,    70,
04031       71,    72,    73,    74,    77,    78,    81,    82,    83,    84,
04032       95,   112,   113,   114,   115,   116,   117,   118,   119,   120,
04033      121,   123,   124,   141,   177,   178,   179,   180,   182,   183,
04034      278,   280,    39,    58,    86,    89,    95,    96,   123,   166,
04035      174,   184,   186,   191,   194,   196,   215,   282,   284,   285,
04036      306,   307,   191,   191,   142,   192,   193,   142,   188,   192,
04037      142,   147,   313,    54,   179,   313,   154,   136,    21,    22,
04038       30,    31,    32,   184,   215,   308,   184,    56,     1,    89,
04039      156,   157,   158,   168,   169,   319,   160,   187,   196,   306,
04040      319,   186,   305,   306,   319,    46,    86,   122,   140,   173,
04041      198,   215,   282,   285,   241,   242,    54,    55,    57,   177,
04042      271,   279,   270,   271,   272,   146,   266,   146,   269,    59,
04043       60,   162,   184,   184,   145,   147,   312,   317,   318,    40,
04044       41,    42,    43,    44,    37,    38,    28,   246,   109,   140,
04045       89,    95,   170,   109,    68,    69,    70,    71,    72,    73,
04046       74,    75,    76,    77,    78,    79,    80,    83,    84,   110,
04047      112,   113,   114,   115,   116,   117,   118,   119,   120,   121,
04048       85,   138,   139,   199,   160,   161,   161,   202,   204,   161,
04049      312,   318,    86,   167,   174,   215,   231,   282,   285,    52,
04050       56,    83,    86,   175,   176,   215,   282,   285,   176,    33,
04051       34,    35,    36,    49,    50,    51,    52,    56,   142,   177,
04052      283,   303,    85,   139,    26,   136,   250,   262,    87,    87,
04053      188,   192,   250,   140,   186,    56,   186,   186,   109,    88,
04054      140,   195,   319,    85,   138,   139,    87,    87,   140,   195,
04055      191,   313,   314,   191,   190,   191,   319,   160,   314,   160,
04056       54,    63,    64,   159,   142,   185,   136,   156,    85,   139,
04057       87,   158,   168,   143,   312,   318,   314,   200,   144,   140,
04058      147,   316,   140,   316,   137,   316,   313,    56,    59,    60,
04059      170,   172,   140,    85,   138,   139,   243,    61,   104,   105,
04060      106,   273,   106,   273,   106,    65,   273,   106,   106,   267,
04061      273,   106,    61,   106,    68,    68,   145,   153,   161,   161,
04062      161,   161,   158,   160,   160,   247,    95,   162,   186,   196,
04063      197,   168,   140,   173,   140,   162,   184,   186,   197,   184,
04064      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04065      184,   184,   184,   184,   184,   184,   184,   184,   184,   184,
04066      184,   184,   184,   184,   184,    52,    53,    56,   182,   188,
04067      309,   310,   190,    52,    53,    56,   182,   188,   309,   155,
04068      156,    13,   227,   317,   227,   161,   161,   312,    17,   253,
04069       56,    85,   138,   139,    25,   160,    52,    56,   175,     1,
04070      113,   286,   317,    85,   138,   139,   211,   304,   212,    85,
04071      139,   311,    52,    56,   309,   309,   252,   251,   162,   184,
04072      162,   184,    94,   164,   181,   184,   186,    95,   186,   194,
04073      306,    52,    56,   190,    52,    56,   307,   314,   143,   314,
04074      314,   179,   201,   184,   151,   137,   309,   309,   184,   314,
04075      158,   314,   306,   140,   172,    52,    56,   190,    52,    56,
04076       52,    54,    55,    56,    57,    89,    95,    96,   116,   119,
04077      142,   244,   289,   290,   291,   292,   293,   294,   297,   298,
04078      299,   300,   301,   275,   274,   146,   273,   146,   184,   184,
04079       76,   114,   236,   237,   319,   186,   140,   314,   172,   140,
04080       44,   313,    87,    87,   188,   192,   313,   315,    87,    87,
04081      188,   189,   192,   319,    10,   226,     8,   255,   319,   156,
04082       13,   156,    27,   228,   317,   228,   253,   196,   226,    52,
04083       56,   190,    52,    56,   206,   209,   317,   287,   208,    52,
04084       56,   175,   190,   155,   160,   142,   288,   289,   213,   189,
04085      192,   189,   192,   236,   236,    44,   165,   179,   186,   195,
04086       87,    87,   315,    87,    87,   160,   137,   316,   170,   315,
04087      109,    52,    89,    95,   232,   233,   234,   291,   289,    29,
04088      107,   245,   140,   302,   319,   140,   302,    52,   140,   302,
04089       52,   276,    54,    55,    57,   277,   285,    52,   145,   235,
04090      238,   293,   295,   296,   299,   301,   319,   156,    95,   186,
04091      172,   184,   111,   162,   184,   162,   184,   164,   144,    87,
04092      162,   184,   162,   184,   164,   186,   197,   256,   319,    15,
04093      230,   319,    14,   229,   230,   230,   203,   205,   226,   140,
04094      227,   315,   161,   317,   161,   155,   315,   226,   314,   289,
04095      155,   317,   177,   156,   156,   184,   236,    87,   314,   186,
04096      234,   140,   291,   140,   314,   238,   156,   156,   292,   297,
04097      299,   301,   293,   294,   299,   293,   156,   109,    52,   239,
04098      240,   290,   238,   114,   140,   302,   140,   302,   140,   302,
04099       10,   186,   184,   162,   184,    88,   257,   319,   156,     9,
04100      258,   319,   161,   226,   226,   156,   156,   186,   156,   228,
04101      210,   317,   226,   314,   226,   214,    10,   137,   156,   314,
04102      233,   140,    95,   232,   314,    10,   137,   140,   302,   140,
04103      302,   140,   302,   140,   302,   302,   137,    86,   215,   140,
04104      114,   296,   299,   293,   295,   299,   293,    86,   174,   215,
04105      282,   285,   227,   156,   227,   226,   226,   230,   253,   254,
04106      207,   155,   288,   137,   140,   233,   140,   291,   293,   299,
04107      293,   293,    56,    85,   240,   140,   302,   140,   302,   302,
04108      140,   302,   302,    56,    85,   138,   139,   156,   156,   156,
04109      226,   155,   233,   140,   302,   140,   302,   302,   302,    52,
04110       56,   293,   299,   293,   293,    52,    56,   190,    52,    56,
04111      255,   229,   226,   226,   233,   293,   302,   140,   302,   302,
04112      302,   315,   302,   293,   302
04113 };
04114 
04115 #define yyerrok         (yyerrstatus = 0)
04116 #define yyclearin       (yychar = YYEMPTY)
04117 #define YYEMPTY         (-2)
04118 #define YYEOF           0
04119 
04120 #define YYACCEPT        goto yyacceptlab
04121 #define YYABORT         goto yyabortlab
04122 #define YYERROR         goto yyerrorlab
04123 
04124 
04125 /* Like YYERROR except do call yyerror.  This remains here temporarily
04126    to ease the transition to the new meaning of YYERROR, for GCC.
04127    Once GCC version 2 has supplanted version 1, this can go.  However,
04128    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
04129    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
04130    discussed.  */
04131 
04132 #define YYFAIL          goto yyerrlab
04133 #if defined YYFAIL
04134   /* This is here to suppress warnings from the GCC cpp's
04135      -Wunused-macros.  Normally we don't worry about that warning, but
04136      some users do, and we want to make it easy for users to remove
04137      YYFAIL uses, which will produce warnings from Bison 2.5.  */
04138 #endif
04139 
04140 #define YYRECOVERING()  (!!yyerrstatus)
04141 
04142 #define YYBACKUP(Token, Value)                                  \
04143 do                                                              \
04144   if (yychar == YYEMPTY && yylen == 1)                          \
04145     {                                                           \
04146       yychar = (Token);                                         \
04147       yylval = (Value);                                         \
04148       YYPOPSTACK (1);                                           \
04149       goto yybackup;                                            \
04150     }                                                           \
04151   else                                                          \
04152     {                                                           \
04153       parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04154       YYERROR;                                                  \
04155     }                                                           \
04156 while (YYID (0))
04157 
04158 
04159 #define YYTERROR        1
04160 #define YYERRCODE       256
04161 
04162 
04163 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
04164    If N is 0, then set CURRENT to the empty location which ends
04165    the previous symbol: RHS[0] (always defined).  */
04166 
04167 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04168 #ifndef YYLLOC_DEFAULT
04169 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
04170     do                                                                  \
04171       if (YYID (N))                                                    \
04172         {                                                               \
04173           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
04174           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
04175           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
04176           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
04177         }                                                               \
04178       else                                                              \
04179         {                                                               \
04180           (Current).first_line   = (Current).last_line   =              \
04181             YYRHSLOC (Rhs, 0).last_line;                                \
04182           (Current).first_column = (Current).last_column =              \
04183             YYRHSLOC (Rhs, 0).last_column;                              \
04184         }                                                               \
04185     while (YYID (0))
04186 #endif
04187 
04188 
04189 /* This macro is provided for backward compatibility. */
04190 
04191 #ifndef YY_LOCATION_PRINT
04192 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04193 #endif
04194 
04195 
04196 /* YYLEX -- calling `yylex' with the right arguments.  */
04197 
04198 #ifdef YYLEX_PARAM
04199 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04200 #else
04201 # define YYLEX yylex (&yylval)
04202 #endif
04203 
04204 /* Enable debugging if requested.  */
04205 #if YYDEBUG
04206 
04207 # ifndef YYFPRINTF
04208 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
04209 #  define YYFPRINTF fprintf
04210 # endif
04211 
04212 # define YYDPRINTF(Args)                        \
04213 do {                                            \
04214   if (yydebug)                                  \
04215     YYFPRINTF Args;                             \
04216 } while (YYID (0))
04217 
04218 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
04219 do {                                                                      \
04220   if (yydebug)                                                            \
04221     {                                                                     \
04222       YYFPRINTF (stderr, "%s ", Title);                                   \
04223       yy_symbol_print (stderr,                                            \
04224                   Type, Value, parser); \
04225       YYFPRINTF (stderr, "\n");                                           \
04226     }                                                                     \
04227 } while (YYID (0))
04228 
04229 
04230 /*--------------------------------.
04231 | Print this symbol on YYOUTPUT.  |
04232 `--------------------------------*/
04233 
04234 /*ARGSUSED*/
04235 #if (defined __STDC__ || defined __C99__FUNC__ \
04236      || defined __cplusplus || defined _MSC_VER)
04237 static void
04238 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04239 #else
04240 static void
04241 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04242     FILE *yyoutput;
04243     int yytype;
04244     YYSTYPE const * const yyvaluep;
04245     struct parser_params *parser;
04246 #endif
04247 {
04248   if (!yyvaluep)
04249     return;
04250   YYUSE (parser);
04251 # ifdef YYPRINT
04252   if (yytype < YYNTOKENS)
04253     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04254 # else
04255   YYUSE (yyoutput);
04256 # endif
04257   switch (yytype)
04258     {
04259       default:
04260         break;
04261     }
04262 }
04263 
04264 
04265 /*--------------------------------.
04266 | Print this symbol on YYOUTPUT.  |
04267 `--------------------------------*/
04268 
04269 #if (defined __STDC__ || defined __C99__FUNC__ \
04270      || defined __cplusplus || defined _MSC_VER)
04271 static void
04272 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04273 #else
04274 static void
04275 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04276     FILE *yyoutput;
04277     int yytype;
04278     YYSTYPE const * const yyvaluep;
04279     struct parser_params *parser;
04280 #endif
04281 {
04282   if (yytype < YYNTOKENS)
04283     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04284   else
04285     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04286 
04287   yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04288   YYFPRINTF (yyoutput, ")");
04289 }
04290 
04291 /*------------------------------------------------------------------.
04292 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
04293 | TOP (included).                                                   |
04294 `------------------------------------------------------------------*/
04295 
04296 #if (defined __STDC__ || defined __C99__FUNC__ \
04297      || defined __cplusplus || defined _MSC_VER)
04298 static void
04299 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04300 #else
04301 static void
04302 yy_stack_print (yybottom, yytop)
04303     yytype_int16 *yybottom;
04304     yytype_int16 *yytop;
04305 #endif
04306 {
04307   YYFPRINTF (stderr, "Stack now");
04308   for (; yybottom <= yytop; yybottom++)
04309     {
04310       int yybot = *yybottom;
04311       YYFPRINTF (stderr, " %d", yybot);
04312     }
04313   YYFPRINTF (stderr, "\n");
04314 }
04315 
04316 # define YY_STACK_PRINT(Bottom, Top)                            \
04317 do {                                                            \
04318   if (yydebug)                                                  \
04319     yy_stack_print ((Bottom), (Top));                           \
04320 } while (YYID (0))
04321 
04322 
04323 /*------------------------------------------------.
04324 | Report that the YYRULE is going to be reduced.  |
04325 `------------------------------------------------*/
04326 
04327 #if (defined __STDC__ || defined __C99__FUNC__ \
04328      || defined __cplusplus || defined _MSC_VER)
04329 static void
04330 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04331 #else
04332 static void
04333 yy_reduce_print (yyvsp, yyrule, parser)
04334     YYSTYPE *yyvsp;
04335     int yyrule;
04336     struct parser_params *parser;
04337 #endif
04338 {
04339   int yynrhs = yyr2[yyrule];
04340   int yyi;
04341   unsigned long int yylno = yyrline[yyrule];
04342   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04343              yyrule - 1, yylno);
04344   /* The symbols being reduced.  */
04345   for (yyi = 0; yyi < yynrhs; yyi++)
04346     {
04347       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
04348       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04349                        &(yyvsp[(yyi + 1) - (yynrhs)])
04350                                        , parser);
04351       YYFPRINTF (stderr, "\n");
04352     }
04353 }
04354 
04355 # define YY_REDUCE_PRINT(Rule)          \
04356 do {                                    \
04357   if (yydebug)                          \
04358     yy_reduce_print (yyvsp, Rule, parser); \
04359 } while (YYID (0))
04360 
04361 /* Nonzero means print parse trace.  It is left uninitialized so that
04362    multiple parsers can coexist.  */
04363 #ifndef yydebug
04364 int yydebug;
04365 #endif
04366 #else /* !YYDEBUG */
04367 # define YYDPRINTF(Args)
04368 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04369 # define YY_STACK_PRINT(Bottom, Top)
04370 # define YY_REDUCE_PRINT(Rule)
04371 #endif /* !YYDEBUG */
04372 
04373 
04374 /* YYINITDEPTH -- initial size of the parser's stacks.  */
04375 #ifndef YYINITDEPTH
04376 # define YYINITDEPTH 200
04377 #endif
04378 
04379 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
04380    if the built-in stack extension method is used).
04381 
04382    Do not make this value too large; the results are undefined if
04383    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
04384    evaluated with infinite-precision integer arithmetic.  */
04385 
04386 #ifndef YYMAXDEPTH
04387 # define YYMAXDEPTH 10000
04388 #endif
04389 
04390 
04391 #if YYERROR_VERBOSE
04392 
04393 # ifndef yystrlen
04394 #  if defined __GLIBC__ && defined _STRING_H
04395 #   define yystrlen strlen
04396 #  else
04397 /* Return the length of YYSTR.  */
04398 #if (defined __STDC__ || defined __C99__FUNC__ \
04399      || defined __cplusplus || defined _MSC_VER)
04400 static YYSIZE_T
04401 yystrlen (const char *yystr)
04402 #else
04403 static YYSIZE_T
04404 yystrlen (yystr)
04405     const char *yystr;
04406 #endif
04407 {
04408   YYSIZE_T yylen;
04409   for (yylen = 0; yystr[yylen]; yylen++)
04410     continue;
04411   return yylen;
04412 }
04413 #  endif
04414 # endif
04415 
04416 # ifndef yystpcpy
04417 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04418 #   define yystpcpy stpcpy
04419 #  else
04420 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
04421    YYDEST.  */
04422 #if (defined __STDC__ || defined __C99__FUNC__ \
04423      || defined __cplusplus || defined _MSC_VER)
04424 static char *
04425 yystpcpy (char *yydest, const char *yysrc)
04426 #else
04427 static char *
04428 yystpcpy (yydest, yysrc)
04429     char *yydest;
04430     const char *yysrc;
04431 #endif
04432 {
04433   char *yyd = yydest;
04434   const char *yys = yysrc;
04435 
04436   while ((*yyd++ = *yys++) != '\0')
04437     continue;
04438 
04439   return yyd - 1;
04440 }
04441 #  endif
04442 # endif
04443 
04444 # ifndef yytnamerr
04445 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
04446    quotes and backslashes, so that it's suitable for yyerror.  The
04447    heuristic is that double-quoting is unnecessary unless the string
04448    contains an apostrophe, a comma, or backslash (other than
04449    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
04450    null, do not copy; instead, return the length of what the result
04451    would have been.  */
04452 static YYSIZE_T
04453 yytnamerr (char *yyres, const char *yystr)
04454 {
04455   if (*yystr == '"')
04456     {
04457       YYSIZE_T yyn = 0;
04458       char const *yyp = yystr;
04459 
04460       for (;;)
04461         switch (*++yyp)
04462           {
04463           case '\'':
04464           case ',':
04465             goto do_not_strip_quotes;
04466 
04467           case '\\':
04468             if (*++yyp != '\\')
04469               goto do_not_strip_quotes;
04470             /* Fall through.  */
04471           default:
04472             if (yyres)
04473               yyres[yyn] = *yyp;
04474             yyn++;
04475             break;
04476 
04477           case '"':
04478             if (yyres)
04479               yyres[yyn] = '\0';
04480             return yyn;
04481           }
04482     do_not_strip_quotes: ;
04483     }
04484 
04485   if (! yyres)
04486     return yystrlen (yystr);
04487 
04488   return yystpcpy (yyres, yystr) - yyres;
04489 }
04490 # endif
04491 
04492 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
04493    about the unexpected token YYTOKEN for the state stack whose top is
04494    YYSSP.
04495 
04496    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
04497    not large enough to hold the message.  In that case, also set
04498    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
04499    required number of bytes is too large to store.  */
04500 static int
04501 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
04502                 yytype_int16 *yyssp, int yytoken)
04503 {
04504   YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
04505   YYSIZE_T yysize = yysize0;
04506   YYSIZE_T yysize1;
04507   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04508   /* Internationalized format string. */
04509   const char *yyformat = 0;
04510   /* Arguments of yyformat. */
04511   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04512   /* Number of reported tokens (one for the "unexpected", one per
04513      "expected"). */
04514   int yycount = 0;
04515 
04516   /* There are many possibilities here to consider:
04517      - Assume YYFAIL is not used.  It's too flawed to consider.  See
04518        <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
04519        for details.  YYERROR is fine as it does not invoke this
04520        function.
04521      - If this state is a consistent state with a default action, then
04522        the only way this function was invoked is if the default action
04523        is an error action.  In that case, don't check for expected
04524        tokens because there are none.
04525      - The only way there can be no lookahead present (in yychar) is if
04526        this state is a consistent state with a default action.  Thus,
04527        detecting the absence of a lookahead is sufficient to determine
04528        that there is no unexpected or expected token to report.  In that
04529        case, just report a simple "syntax error".
04530      - Don't assume there isn't a lookahead just because this state is a
04531        consistent state with a default action.  There might have been a
04532        previous inconsistent state, consistent state with a non-default
04533        action, or user semantic action that manipulated yychar.
04534      - Of course, the expected token list depends on states to have
04535        correct lookahead information, and it depends on the parser not
04536        to perform extra reductions after fetching a lookahead from the
04537        scanner and before detecting a syntax error.  Thus, state merging
04538        (from LALR or IELR) and default reductions corrupt the expected
04539        token list.  However, the list is correct for canonical LR with
04540        one exception: it will still contain any token that will not be
04541        accepted due to an error action in a later state.
04542   */
04543   if (yytoken != YYEMPTY)
04544     {
04545       int yyn = yypact[*yyssp];
04546       yyarg[yycount++] = yytname[yytoken];
04547       if (!yypact_value_is_default (yyn))
04548         {
04549           /* Start YYX at -YYN if negative to avoid negative indexes in
04550              YYCHECK.  In other words, skip the first -YYN actions for
04551              this state because they are default actions.  */
04552           int yyxbegin = yyn < 0 ? -yyn : 0;
04553           /* Stay within bounds of both yycheck and yytname.  */
04554           int yychecklim = YYLAST - yyn + 1;
04555           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04556           int yyx;
04557 
04558           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04559             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
04560                 && !yytable_value_is_error (yytable[yyx + yyn]))
04561               {
04562                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04563                   {
04564                     yycount = 1;
04565                     yysize = yysize0;
04566                     break;
04567                   }
04568                 yyarg[yycount++] = yytname[yyx];
04569                 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04570                 if (! (yysize <= yysize1
04571                        && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04572                   return 2;
04573                 yysize = yysize1;
04574               }
04575         }
04576     }
04577 
04578   switch (yycount)
04579     {
04580 # define YYCASE_(N, S)                      \
04581       case N:                               \
04582         yyformat = S;                       \
04583       break
04584       YYCASE_(0, YY_("syntax error"));
04585       YYCASE_(1, YY_("syntax error, unexpected %s"));
04586       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
04587       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
04588       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
04589       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
04590 # undef YYCASE_
04591     }
04592 
04593   yysize1 = yysize + yystrlen (yyformat);
04594   if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04595     return 2;
04596   yysize = yysize1;
04597 
04598   if (*yymsg_alloc < yysize)
04599     {
04600       *yymsg_alloc = 2 * yysize;
04601       if (! (yysize <= *yymsg_alloc
04602              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
04603         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
04604       return 1;
04605     }
04606 
04607   /* Avoid sprintf, as that infringes on the user's name space.
04608      Don't have undefined behavior even if the translation
04609      produced a string with the wrong number of "%s"s.  */
04610   {
04611     char *yyp = *yymsg;
04612     int yyi = 0;
04613     while ((*yyp = *yyformat) != '\0')
04614       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
04615         {
04616           yyp += yytnamerr (yyp, yyarg[yyi++]);
04617           yyformat += 2;
04618         }
04619       else
04620         {
04621           yyp++;
04622           yyformat++;
04623         }
04624   }
04625   return 0;
04626 }
04627 #endif /* YYERROR_VERBOSE */
04628 
04629 /*-----------------------------------------------.
04630 | Release the memory associated to this symbol.  |
04631 `-----------------------------------------------*/
04632 
04633 /*ARGSUSED*/
04634 #if (defined __STDC__ || defined __C99__FUNC__ \
04635      || defined __cplusplus || defined _MSC_VER)
04636 static void
04637 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04638 #else
04639 static void
04640 yydestruct (yymsg, yytype, yyvaluep, parser)
04641     const char *yymsg;
04642     int yytype;
04643     YYSTYPE *yyvaluep;
04644     struct parser_params *parser;
04645 #endif
04646 {
04647   YYUSE (yyvaluep);
04648   YYUSE (parser);
04649 
04650   if (!yymsg)
04651     yymsg = "Deleting";
04652   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04653 
04654   switch (yytype)
04655     {
04656 
04657       default:
04658         break;
04659     }
04660 }
04661 
04662 
04663 /* Prevent warnings from -Wmissing-prototypes.  */
04664 #ifdef YYPARSE_PARAM
04665 #if defined __STDC__ || defined __cplusplus
04666 int yyparse (void *YYPARSE_PARAM);
04667 #else
04668 int yyparse ();
04669 #endif
04670 #else /* ! YYPARSE_PARAM */
04671 #if defined __STDC__ || defined __cplusplus
04672 int yyparse (struct parser_params *parser);
04673 #else
04674 int yyparse ();
04675 #endif
04676 #endif /* ! YYPARSE_PARAM */
04677 
04678 
04679 /*----------.
04680 | yyparse.  |
04681 `----------*/
04682 
04683 #ifdef YYPARSE_PARAM
04684 #if (defined __STDC__ || defined __C99__FUNC__ \
04685      || defined __cplusplus || defined _MSC_VER)
04686 int
04687 yyparse (void *YYPARSE_PARAM)
04688 #else
04689 int
04690 yyparse (YYPARSE_PARAM)
04691     void *YYPARSE_PARAM;
04692 #endif
04693 #else /* ! YYPARSE_PARAM */
04694 #if (defined __STDC__ || defined __C99__FUNC__ \
04695      || defined __cplusplus || defined _MSC_VER)
04696 int
04697 yyparse (struct parser_params *parser)
04698 #else
04699 int
04700 yyparse (parser)
04701     struct parser_params *parser;
04702 #endif
04703 #endif
04704 {
04705 /* The lookahead symbol.  */
04706 int yychar;
04707 
04708 /* The semantic value of the lookahead symbol.  */
04709 YYSTYPE yylval;
04710 
04711     /* Number of syntax errors so far.  */
04712     int yynerrs;
04713 
04714     int yystate;
04715     /* Number of tokens to shift before error messages enabled.  */
04716     int yyerrstatus;
04717 
04718     /* The stacks and their tools:
04719        `yyss': related to states.
04720        `yyvs': related to semantic values.
04721 
04722        Refer to the stacks thru separate pointers, to allow yyoverflow
04723        to reallocate them elsewhere.  */
04724 
04725     /* The state stack.  */
04726     yytype_int16 yyssa[YYINITDEPTH];
04727     yytype_int16 *yyss;
04728     yytype_int16 *yyssp;
04729 
04730     /* The semantic value stack.  */
04731     YYSTYPE yyvsa[YYINITDEPTH];
04732     YYSTYPE *yyvs;
04733     YYSTYPE *yyvsp;
04734 
04735     YYSIZE_T yystacksize;
04736 
04737   int yyn;
04738   int yyresult;
04739   /* Lookahead token as an internal (translated) token number.  */
04740   int yytoken;
04741   /* The variables used to return semantic value and location from the
04742      action routines.  */
04743   YYSTYPE yyval;
04744 
04745 #if YYERROR_VERBOSE
04746   /* Buffer for error messages, and its allocated size.  */
04747   char yymsgbuf[128];
04748   char *yymsg = yymsgbuf;
04749   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04750 #endif
04751 
04752 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
04753 
04754   /* The number of symbols on the RHS of the reduced rule.
04755      Keep to zero when no symbol should be popped.  */
04756   int yylen = 0;
04757 
04758   yytoken = 0;
04759   yyss = yyssa;
04760   yyvs = yyvsa;
04761   yystacksize = YYINITDEPTH;
04762 
04763   YYDPRINTF ((stderr, "Starting parse\n"));
04764 
04765   yystate = 0;
04766   yyerrstatus = 0;
04767   yynerrs = 0;
04768   yychar = YYEMPTY; /* Cause a token to be read.  */
04769 
04770   /* Initialize stack pointers.
04771      Waste one element of value and location stack
04772      so that they stay on the same level as the state stack.
04773      The wasted elements are never initialized.  */
04774   yyssp = yyss;
04775   yyvsp = yyvs;
04776 
04777   goto yysetstate;
04778 
04779 /*------------------------------------------------------------.
04780 | yynewstate -- Push a new state, which is found in yystate.  |
04781 `------------------------------------------------------------*/
04782  yynewstate:
04783   /* In all cases, when you get here, the value and location stacks
04784      have just been pushed.  So pushing a state here evens the stacks.  */
04785   yyssp++;
04786 
04787  yysetstate:
04788   *yyssp = yystate;
04789 
04790   if (yyss + yystacksize - 1 <= yyssp)
04791     {
04792       /* Get the current used size of the three stacks, in elements.  */
04793       YYSIZE_T yysize = yyssp - yyss + 1;
04794 
04795 #ifdef yyoverflow
04796       {
04797         /* Give user a chance to reallocate the stack.  Use copies of
04798            these so that the &'s don't force the real ones into
04799            memory.  */
04800         YYSTYPE *yyvs1 = yyvs;
04801         yytype_int16 *yyss1 = yyss;
04802 
04803         /* Each stack pointer address is followed by the size of the
04804            data in use in that stack, in bytes.  This used to be a
04805            conditional around just the two extra args, but that might
04806            be undefined if yyoverflow is a macro.  */
04807         yyoverflow (YY_("memory exhausted"),
04808                     &yyss1, yysize * sizeof (*yyssp),
04809                     &yyvs1, yysize * sizeof (*yyvsp),
04810                     &yystacksize);
04811 
04812         yyss = yyss1;
04813         yyvs = yyvs1;
04814       }
04815 #else /* no yyoverflow */
04816 # ifndef YYSTACK_RELOCATE
04817       goto yyexhaustedlab;
04818 # else
04819       /* Extend the stack our own way.  */
04820       if (YYMAXDEPTH <= yystacksize)
04821         goto yyexhaustedlab;
04822       yystacksize *= 2;
04823       if (YYMAXDEPTH < yystacksize)
04824         yystacksize = YYMAXDEPTH;
04825 
04826       {
04827         yytype_int16 *yyss1 = yyss;
04828         union yyalloc *yyptr =
04829           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
04830         if (! yyptr)
04831           goto yyexhaustedlab;
04832         YYSTACK_RELOCATE (yyss_alloc, yyss);
04833         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
04834 #  undef YYSTACK_RELOCATE
04835         if (yyss1 != yyssa)
04836           YYSTACK_FREE (yyss1);
04837       }
04838 # endif
04839 #endif /* no yyoverflow */
04840 
04841       yyssp = yyss + yysize - 1;
04842       yyvsp = yyvs + yysize - 1;
04843 
04844       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
04845                   (unsigned long int) yystacksize));
04846 
04847       if (yyss + yystacksize - 1 <= yyssp)
04848         YYABORT;
04849     }
04850 
04851   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
04852 
04853   if (yystate == YYFINAL)
04854     YYACCEPT;
04855 
04856   goto yybackup;
04857 
04858 /*-----------.
04859 | yybackup.  |
04860 `-----------*/
04861 yybackup:
04862 
04863   /* Do appropriate processing given the current state.  Read a
04864      lookahead token if we need one and don't already have one.  */
04865 
04866   /* First try to decide what to do without reference to lookahead token.  */
04867   yyn = yypact[yystate];
04868   if (yypact_value_is_default (yyn))
04869     goto yydefault;
04870 
04871   /* Not known => get a lookahead token if don't already have one.  */
04872 
04873   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
04874   if (yychar == YYEMPTY)
04875     {
04876       YYDPRINTF ((stderr, "Reading a token: "));
04877       yychar = YYLEX;
04878     }
04879 
04880   if (yychar <= YYEOF)
04881     {
04882       yychar = yytoken = YYEOF;
04883       YYDPRINTF ((stderr, "Now at end of input.\n"));
04884     }
04885   else
04886     {
04887       yytoken = YYTRANSLATE (yychar);
04888       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
04889     }
04890 
04891   /* If the proper action on seeing token YYTOKEN is to reduce or to
04892      detect an error, take that action.  */
04893   yyn += yytoken;
04894   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
04895     goto yydefault;
04896   yyn = yytable[yyn];
04897   if (yyn <= 0)
04898     {
04899       if (yytable_value_is_error (yyn))
04900         goto yyerrlab;
04901       yyn = -yyn;
04902       goto yyreduce;
04903     }
04904 
04905   /* Count tokens shifted since error; after three, turn off error
04906      status.  */
04907   if (yyerrstatus)
04908     yyerrstatus--;
04909 
04910   /* Shift the lookahead token.  */
04911   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
04912 
04913   /* Discard the shifted token.  */
04914   yychar = YYEMPTY;
04915 
04916   yystate = yyn;
04917   *++yyvsp = yylval;
04918 
04919   goto yynewstate;
04920 
04921 
04922 /*-----------------------------------------------------------.
04923 | yydefault -- do the default action for the current state.  |
04924 `-----------------------------------------------------------*/
04925 yydefault:
04926   yyn = yydefact[yystate];
04927   if (yyn == 0)
04928     goto yyerrlab;
04929   goto yyreduce;
04930 
04931 
04932 /*-----------------------------.
04933 | yyreduce -- Do a reduction.  |
04934 `-----------------------------*/
04935 yyreduce:
04936   /* yyn is the number of a rule to reduce with.  */
04937   yylen = yyr2[yyn];
04938 
04939   /* If YYLEN is nonzero, implement the default value of the action:
04940      `$$ = $1'.
04941 
04942      Otherwise, the following line sets YYVAL to garbage.
04943      This behavior is undocumented and Bison
04944      users should not rely upon it.  Assigning to YYVAL
04945      unconditionally makes the parser a bit smaller, and it avoids a
04946      GCC warning that YYVAL may be used uninitialized.  */
04947   yyval = yyvsp[1-yylen];
04948 
04949 
04950   YY_REDUCE_PRINT (yyn);
04951   switch (yyn)
04952     {
04953         case 2:
04954 
04955 /* Line 1806 of yacc.c  */
04956 #line 786 "parse.y"
04957     {
04958                         lex_state = EXPR_BEG;
04959                     /*%%%*/
04960                         local_push(compile_for_eval || rb_parse_in_main());
04961                     /*%
04962                         local_push(0);
04963                     %*/
04964                     }
04965     break;
04966 
04967   case 3:
04968 
04969 /* Line 1806 of yacc.c  */
04970 #line 795 "parse.y"
04971     {
04972                     /*%%%*/
04973                         if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
04974                             /* last expression should not be void */
04975                             if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
04976                             else {
04977                                 NODE *node = (yyvsp[(2) - (2)].node);
04978                                 while (node->nd_next) {
04979                                     node = node->nd_next;
04980                                 }
04981                                 void_expr(node->nd_head);
04982                             }
04983                         }
04984                         ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
04985                     /*%
04986                         $$ = $2;
04987                         parser->result = dispatch1(program, $$);
04988                     %*/
04989                         local_pop();
04990                     }
04991     break;
04992 
04993   case 4:
04994 
04995 /* Line 1806 of yacc.c  */
04996 #line 818 "parse.y"
04997     {
04998                     /*%%%*/
04999                         void_stmts((yyvsp[(1) - (2)].node));
05000                         fixup_nodes(&deferred_nodes);
05001                     /*%
05002                     %*/
05003                         (yyval.node) = (yyvsp[(1) - (2)].node);
05004                     }
05005     break;
05006 
05007   case 5:
05008 
05009 /* Line 1806 of yacc.c  */
05010 #line 829 "parse.y"
05011     {
05012                     /*%%%*/
05013                         (yyval.node) = NEW_BEGIN(0);
05014                     /*%
05015                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05016                                                   dispatch0(void_stmt));
05017                     %*/
05018                     }
05019     break;
05020 
05021   case 6:
05022 
05023 /* Line 1806 of yacc.c  */
05024 #line 838 "parse.y"
05025     {
05026                     /*%%%*/
05027                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05028                     /*%
05029                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05030                     %*/
05031                     }
05032     break;
05033 
05034   case 7:
05035 
05036 /* Line 1806 of yacc.c  */
05037 #line 846 "parse.y"
05038     {
05039                     /*%%%*/
05040                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05041                     /*%
05042                         $$ = dispatch2(stmts_add, $1, $3);
05043                     %*/
05044                     }
05045     break;
05046 
05047   case 8:
05048 
05049 /* Line 1806 of yacc.c  */
05050 #line 854 "parse.y"
05051     {
05052                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05053                     }
05054     break;
05055 
05056   case 10:
05057 
05058 /* Line 1806 of yacc.c  */
05059 #line 861 "parse.y"
05060     {
05061                         if (in_def || in_single) {
05062                             yyerror("BEGIN in method");
05063                         }
05064                     /*%%%*/
05065                         /* local_push(0); */
05066                     /*%
05067                     %*/
05068                     }
05069     break;
05070 
05071   case 11:
05072 
05073 /* Line 1806 of yacc.c  */
05074 #line 871 "parse.y"
05075     {
05076                     /*%%%*/
05077                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05078                                                             (yyvsp[(4) - (5)].node));
05079                         /* NEW_PREEXE($4)); */
05080                         /* local_pop(); */
05081                         (yyval.node) = NEW_BEGIN(0);
05082                     /*%
05083                         $$ = dispatch1(BEGIN, $4);
05084                     %*/
05085                     }
05086     break;
05087 
05088   case 12:
05089 
05090 /* Line 1806 of yacc.c  */
05091 #line 888 "parse.y"
05092     {
05093                     /*%%%*/
05094                         (yyval.node) = (yyvsp[(1) - (4)].node);
05095                         if ((yyvsp[(2) - (4)].node)) {
05096                             (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05097                         }
05098                         else if ((yyvsp[(3) - (4)].node)) {
05099                             rb_warn0("else without rescue is useless");
05100                             (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05101                         }
05102                         if ((yyvsp[(4) - (4)].node)) {
05103                             if ((yyval.node)) {
05104                                 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05105                             }
05106                             else {
05107                                 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05108                             }
05109                         }
05110                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05111                     /*%
05112                         $$ = dispatch4(bodystmt,
05113                                        escape_Qundef($1),
05114                                        escape_Qundef($2),
05115                                        escape_Qundef($3),
05116                                        escape_Qundef($4));
05117                     %*/
05118                     }
05119     break;
05120 
05121   case 13:
05122 
05123 /* Line 1806 of yacc.c  */
05124 #line 918 "parse.y"
05125     {
05126                     /*%%%*/
05127                         void_stmts((yyvsp[(1) - (2)].node));
05128                         fixup_nodes(&deferred_nodes);
05129                     /*%
05130                     %*/
05131                         (yyval.node) = (yyvsp[(1) - (2)].node);
05132                     }
05133     break;
05134 
05135   case 14:
05136 
05137 /* Line 1806 of yacc.c  */
05138 #line 929 "parse.y"
05139     {
05140                     /*%%%*/
05141                         (yyval.node) = NEW_BEGIN(0);
05142                     /*%
05143                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05144                                                   dispatch0(void_stmt));
05145                     %*/
05146                     }
05147     break;
05148 
05149   case 15:
05150 
05151 /* Line 1806 of yacc.c  */
05152 #line 938 "parse.y"
05153     {
05154                     /*%%%*/
05155                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05156                     /*%
05157                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05158                     %*/
05159                     }
05160     break;
05161 
05162   case 16:
05163 
05164 /* Line 1806 of yacc.c  */
05165 #line 946 "parse.y"
05166     {
05167                     /*%%%*/
05168                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05169                     /*%
05170                         $$ = dispatch2(stmts_add, $1, $3);
05171                     %*/
05172                     }
05173     break;
05174 
05175   case 17:
05176 
05177 /* Line 1806 of yacc.c  */
05178 #line 954 "parse.y"
05179     {
05180                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05181                     }
05182     break;
05183 
05184   case 18:
05185 
05186 /* Line 1806 of yacc.c  */
05187 #line 959 "parse.y"
05188     {lex_state = EXPR_FNAME;}
05189     break;
05190 
05191   case 19:
05192 
05193 /* Line 1806 of yacc.c  */
05194 #line 960 "parse.y"
05195     {
05196                     /*%%%*/
05197                         (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05198                     /*%
05199                         $$ = dispatch2(alias, $2, $4);
05200                     %*/
05201                     }
05202     break;
05203 
05204   case 20:
05205 
05206 /* Line 1806 of yacc.c  */
05207 #line 968 "parse.y"
05208     {
05209                     /*%%%*/
05210                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05211                     /*%
05212                         $$ = dispatch2(var_alias, $2, $3);
05213                     %*/
05214                     }
05215     break;
05216 
05217   case 21:
05218 
05219 /* Line 1806 of yacc.c  */
05220 #line 976 "parse.y"
05221     {
05222                     /*%%%*/
05223                         char buf[2];
05224                         buf[0] = '$';
05225                         buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05226                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05227                     /*%
05228                         $$ = dispatch2(var_alias, $2, $3);
05229                     %*/
05230                     }
05231     break;
05232 
05233   case 22:
05234 
05235 /* Line 1806 of yacc.c  */
05236 #line 987 "parse.y"
05237     {
05238                     /*%%%*/
05239                         yyerror("can't make alias for the number variables");
05240                         (yyval.node) = NEW_BEGIN(0);
05241                     /*%
05242                         $$ = dispatch2(var_alias, $2, $3);
05243                         $$ = dispatch1(alias_error, $$);
05244                     %*/
05245                     }
05246     break;
05247 
05248   case 23:
05249 
05250 /* Line 1806 of yacc.c  */
05251 #line 997 "parse.y"
05252     {
05253                     /*%%%*/
05254                         (yyval.node) = (yyvsp[(2) - (2)].node);
05255                     /*%
05256                         $$ = dispatch1(undef, $2);
05257                     %*/
05258                     }
05259     break;
05260 
05261   case 24:
05262 
05263 /* Line 1806 of yacc.c  */
05264 #line 1005 "parse.y"
05265     {
05266                     /*%%%*/
05267                         (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05268                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05269                     /*%
05270                         $$ = dispatch2(if_mod, $3, $1);
05271                     %*/
05272                     }
05273     break;
05274 
05275   case 25:
05276 
05277 /* Line 1806 of yacc.c  */
05278 #line 1014 "parse.y"
05279     {
05280                     /*%%%*/
05281                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05282                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05283                     /*%
05284                         $$ = dispatch2(unless_mod, $3, $1);
05285                     %*/
05286                     }
05287     break;
05288 
05289   case 26:
05290 
05291 /* Line 1806 of yacc.c  */
05292 #line 1023 "parse.y"
05293     {
05294                     /*%%%*/
05295                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05296                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05297                         }
05298                         else {
05299                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05300                         }
05301                     /*%
05302                         $$ = dispatch2(while_mod, $3, $1);
05303                     %*/
05304                     }
05305     break;
05306 
05307   case 27:
05308 
05309 /* Line 1806 of yacc.c  */
05310 #line 1036 "parse.y"
05311     {
05312                     /*%%%*/
05313                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05314                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05315                         }
05316                         else {
05317                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05318                         }
05319                     /*%
05320                         $$ = dispatch2(until_mod, $3, $1);
05321                     %*/
05322                     }
05323     break;
05324 
05325   case 28:
05326 
05327 /* Line 1806 of yacc.c  */
05328 #line 1049 "parse.y"
05329     {
05330                     /*%%%*/
05331                         NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05332                         (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05333                     /*%
05334                         $$ = dispatch2(rescue_mod, $3, $1);
05335                     %*/
05336                     }
05337     break;
05338 
05339   case 29:
05340 
05341 /* Line 1806 of yacc.c  */
05342 #line 1058 "parse.y"
05343     {
05344                         if (in_def || in_single) {
05345                             rb_warn0("END in method; use at_exit");
05346                         }
05347                     /*%%%*/
05348                         (yyval.node) = NEW_POSTEXE(NEW_NODE(
05349                             NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
05350                     /*%
05351                         $$ = dispatch1(END, $3);
05352                     %*/
05353                     }
05354     break;
05355 
05356   case 30:
05357 
05358 /* Line 1806 of yacc.c  */
05359 #line 1070 "parse.y"
05360     {
05361                     /*%%%*/
05362                         value_expr((yyvsp[(3) - (3)].node));
05363                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05364                     /*%
05365                         $$ = dispatch2(assign, $1, $3);
05366                     %*/
05367                     }
05368     break;
05369 
05370   case 31:
05371 
05372 /* Line 1806 of yacc.c  */
05373 #line 1079 "parse.y"
05374     {
05375                     /*%%%*/
05376                         value_expr((yyvsp[(3) - (3)].node));
05377                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05378                         (yyval.node) = (yyvsp[(1) - (3)].node);
05379                     /*%
05380                         $$ = dispatch2(massign, $1, $3);
05381                     %*/
05382                     }
05383     break;
05384 
05385   case 32:
05386 
05387 /* Line 1806 of yacc.c  */
05388 #line 1089 "parse.y"
05389     {
05390                     /*%%%*/
05391                         value_expr((yyvsp[(3) - (3)].node));
05392                         if ((yyvsp[(1) - (3)].node)) {
05393                             ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
05394                             if ((yyvsp[(2) - (3)].id) == tOROP) {
05395                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05396                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
05397                                 if (is_asgn_or_id(vid)) {
05398                                     (yyval.node)->nd_aid = vid;
05399                                 }
05400                             }
05401                             else if ((yyvsp[(2) - (3)].id) == tANDOP) {
05402                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05403                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
05404                             }
05405                             else {
05406                                 (yyval.node) = (yyvsp[(1) - (3)].node);
05407                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
05408                             }
05409                         }
05410                         else {
05411                             (yyval.node) = NEW_BEGIN(0);
05412                         }
05413                     /*%
05414                         $$ = dispatch3(opassign, $1, $2, $3);
05415                     %*/
05416                     }
05417     break;
05418 
05419   case 33:
05420 
05421 /* Line 1806 of yacc.c  */
05422 #line 1118 "parse.y"
05423     {
05424                     /*%%%*/
05425                         NODE *args;
05426 
05427                         value_expr((yyvsp[(6) - (6)].node));
05428                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05429                         args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05430                         if ((yyvsp[(5) - (6)].id) == tOROP) {
05431                             (yyvsp[(5) - (6)].id) = 0;
05432                         }
05433                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05434                             (yyvsp[(5) - (6)].id) = 1;
05435                         }
05436                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05437                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05438                     /*%
05439                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
05440                         $$ = dispatch3(opassign, $$, $5, $6);
05441                     %*/
05442                     }
05443     break;
05444 
05445   case 34:
05446 
05447 /* Line 1806 of yacc.c  */
05448 #line 1139 "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 35:
05468 
05469 /* Line 1806 of yacc.c  */
05470 #line 1156 "parse.y"
05471     {
05472                     /*%%%*/
05473                         value_expr((yyvsp[(5) - (5)].node));
05474                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05475                             (yyvsp[(4) - (5)].id) = 0;
05476                         }
05477                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05478                             (yyvsp[(4) - (5)].id) = 1;
05479                         }
05480                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05481                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05482                     /*%
05483                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
05484                         $$ = dispatch3(opassign, $$, $4, $5);
05485                     %*/
05486                     }
05487     break;
05488 
05489   case 36:
05490 
05491 /* Line 1806 of yacc.c  */
05492 #line 1173 "parse.y"
05493     {
05494                     /*%%%*/
05495                         yyerror("constant re-assignment");
05496                         (yyval.node) = 0;
05497                     /*%
05498                         $$ = dispatch2(const_path_field, $1, $3);
05499                         $$ = dispatch3(opassign, $$, $4, $5);
05500                         $$ = dispatch1(assign_error, $$);
05501                     %*/
05502                     }
05503     break;
05504 
05505   case 37:
05506 
05507 /* Line 1806 of yacc.c  */
05508 #line 1184 "parse.y"
05509     {
05510                     /*%%%*/
05511                         value_expr((yyvsp[(5) - (5)].node));
05512                         if ((yyvsp[(4) - (5)].id) == tOROP) {
05513                             (yyvsp[(4) - (5)].id) = 0;
05514                         }
05515                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
05516                             (yyvsp[(4) - (5)].id) = 1;
05517                         }
05518                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05519                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05520                     /*%
05521                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
05522                         $$ = dispatch3(opassign, $$, $4, $5);
05523                     %*/
05524                     }
05525     break;
05526 
05527   case 38:
05528 
05529 /* Line 1806 of yacc.c  */
05530 #line 1201 "parse.y"
05531     {
05532                     /*%%%*/
05533                         rb_backref_error((yyvsp[(1) - (3)].node));
05534                         (yyval.node) = NEW_BEGIN(0);
05535                     /*%
05536                         $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
05537                         $$ = dispatch1(assign_error, $$);
05538                     %*/
05539                     }
05540     break;
05541 
05542   case 39:
05543 
05544 /* Line 1806 of yacc.c  */
05545 #line 1211 "parse.y"
05546     {
05547                     /*%%%*/
05548                         value_expr((yyvsp[(3) - (3)].node));
05549                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05550                     /*%
05551                         $$ = dispatch2(assign, $1, $3);
05552                     %*/
05553                     }
05554     break;
05555 
05556   case 40:
05557 
05558 /* Line 1806 of yacc.c  */
05559 #line 1220 "parse.y"
05560     {
05561                     /*%%%*/
05562                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05563                         (yyval.node) = (yyvsp[(1) - (3)].node);
05564                     /*%
05565                         $$ = dispatch2(massign, $1, $3);
05566                     %*/
05567                     }
05568     break;
05569 
05570   case 41:
05571 
05572 /* Line 1806 of yacc.c  */
05573 #line 1229 "parse.y"
05574     {
05575                     /*%%%*/
05576                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05577                         (yyval.node) = (yyvsp[(1) - (3)].node);
05578                     /*%
05579                         $$ = dispatch2(massign, $1, $3);
05580                     %*/
05581                     }
05582     break;
05583 
05584   case 44:
05585 
05586 /* Line 1806 of yacc.c  */
05587 #line 1242 "parse.y"
05588     {
05589                     /*%%%*/
05590                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05591                     /*%
05592                         $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
05593                     %*/
05594                     }
05595     break;
05596 
05597   case 45:
05598 
05599 /* Line 1806 of yacc.c  */
05600 #line 1250 "parse.y"
05601     {
05602                     /*%%%*/
05603                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05604                     /*%
05605                         $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
05606                     %*/
05607                     }
05608     break;
05609 
05610   case 46:
05611 
05612 /* Line 1806 of yacc.c  */
05613 #line 1258 "parse.y"
05614     {
05615                     /*%%%*/
05616                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05617                     /*%
05618                         $$ = dispatch2(unary, ripper_intern("not"), $3);
05619                     %*/
05620                     }
05621     break;
05622 
05623   case 47:
05624 
05625 /* Line 1806 of yacc.c  */
05626 #line 1266 "parse.y"
05627     {
05628                     /*%%%*/
05629                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05630                     /*%
05631                         $$ = dispatch2(unary, ripper_id2sym('!'), $2);
05632                     %*/
05633                     }
05634     break;
05635 
05636   case 49:
05637 
05638 /* Line 1806 of yacc.c  */
05639 #line 1277 "parse.y"
05640     {
05641                     /*%%%*/
05642                         value_expr((yyvsp[(1) - (1)].node));
05643                         (yyval.node) = (yyvsp[(1) - (1)].node);
05644                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
05645                     /*%
05646                         $$ = $1;
05647                     %*/
05648                     }
05649     break;
05650 
05651   case 53:
05652 
05653 /* Line 1806 of yacc.c  */
05654 #line 1294 "parse.y"
05655     {
05656                     /*%%%*/
05657                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05658                     /*%
05659                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
05660                         $$ = method_arg($$, $4);
05661                     %*/
05662                     }
05663     break;
05664 
05665   case 54:
05666 
05667 /* Line 1806 of yacc.c  */
05668 #line 1303 "parse.y"
05669     {
05670                     /*%%%*/
05671                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05672                     /*%
05673                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
05674                         $$ = method_arg($$, $4);
05675                     %*/
05676                     }
05677     break;
05678 
05679   case 55:
05680 
05681 /* Line 1806 of yacc.c  */
05682 #line 1314 "parse.y"
05683     {
05684                         (yyvsp[(1) - (1)].vars) = dyna_push();
05685                     /*%%%*/
05686                         (yyval.num) = ruby_sourceline;
05687                     /*%
05688                     %*/
05689                     }
05690     break;
05691 
05692   case 56:
05693 
05694 /* Line 1806 of yacc.c  */
05695 #line 1324 "parse.y"
05696     {
05697                     /*%%%*/
05698                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05699                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05700                     /*%
05701                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
05702                     %*/
05703                         dyna_pop((yyvsp[(1) - (5)].vars));
05704                     }
05705     break;
05706 
05707   case 57:
05708 
05709 /* Line 1806 of yacc.c  */
05710 #line 1336 "parse.y"
05711     {
05712                     /*%%%*/
05713                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
05714                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05715                     /*%
05716                         $$ = dispatch2(command, $1, $2);
05717                     %*/
05718                     }
05719     break;
05720 
05721   case 58:
05722 
05723 /* Line 1806 of yacc.c  */
05724 #line 1345 "parse.y"
05725     {
05726                     /*%%%*/
05727                         block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05728                         (yyvsp[(3) - (3)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (3)].id), (yyvsp[(2) - (3)].node));
05729                         (yyval.node) = (yyvsp[(3) - (3)].node);
05730                         fixpos((yyval.node), (yyvsp[(2) - (3)].node));
05731                     /*%
05732                         $$ = dispatch2(command, $1, $2);
05733                         $$ = method_add_block($$, $3);
05734                     %*/
05735                     }
05736     break;
05737 
05738   case 59:
05739 
05740 /* Line 1806 of yacc.c  */
05741 #line 1357 "parse.y"
05742     {
05743                     /*%%%*/
05744                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05745                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05746                     /*%
05747                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05748                     %*/
05749                     }
05750     break;
05751 
05752   case 60:
05753 
05754 /* Line 1806 of yacc.c  */
05755 #line 1366 "parse.y"
05756     {
05757                     /*%%%*/
05758                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05759                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05760                         (yyval.node) = (yyvsp[(5) - (5)].node);
05761                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05762                     /*%
05763                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05764                         $$ = method_add_block($$, $5);
05765                     %*/
05766                    }
05767     break;
05768 
05769   case 61:
05770 
05771 /* Line 1806 of yacc.c  */
05772 #line 1378 "parse.y"
05773     {
05774                     /*%%%*/
05775                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05776                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05777                     /*%
05778                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05779                     %*/
05780                     }
05781     break;
05782 
05783   case 62:
05784 
05785 /* Line 1806 of yacc.c  */
05786 #line 1387 "parse.y"
05787     {
05788                     /*%%%*/
05789                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05790                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05791                         (yyval.node) = (yyvsp[(5) - (5)].node);
05792                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05793                     /*%
05794                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05795                         $$ = method_add_block($$, $5);
05796                     %*/
05797                    }
05798     break;
05799 
05800   case 63:
05801 
05802 /* Line 1806 of yacc.c  */
05803 #line 1399 "parse.y"
05804     {
05805                     /*%%%*/
05806                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05807                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05808                     /*%
05809                         $$ = dispatch1(super, $2);
05810                     %*/
05811                     }
05812     break;
05813 
05814   case 64:
05815 
05816 /* Line 1806 of yacc.c  */
05817 #line 1408 "parse.y"
05818     {
05819                     /*%%%*/
05820                         (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
05821                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05822                     /*%
05823                         $$ = dispatch1(yield, $2);
05824                     %*/
05825                     }
05826     break;
05827 
05828   case 65:
05829 
05830 /* Line 1806 of yacc.c  */
05831 #line 1417 "parse.y"
05832     {
05833                     /*%%%*/
05834                         (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
05835                     /*%
05836                         $$ = dispatch1(return, $2);
05837                     %*/
05838                     }
05839     break;
05840 
05841   case 66:
05842 
05843 /* Line 1806 of yacc.c  */
05844 #line 1425 "parse.y"
05845     {
05846                     /*%%%*/
05847                         (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
05848                     /*%
05849                         $$ = dispatch1(break, $2);
05850                     %*/
05851                     }
05852     break;
05853 
05854   case 67:
05855 
05856 /* Line 1806 of yacc.c  */
05857 #line 1433 "parse.y"
05858     {
05859                     /*%%%*/
05860                         (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
05861                     /*%
05862                         $$ = dispatch1(next, $2);
05863                     %*/
05864                     }
05865     break;
05866 
05867   case 69:
05868 
05869 /* Line 1806 of yacc.c  */
05870 #line 1444 "parse.y"
05871     {
05872                     /*%%%*/
05873                         (yyval.node) = (yyvsp[(2) - (3)].node);
05874                     /*%
05875                         $$ = dispatch1(mlhs_paren, $2);
05876                     %*/
05877                     }
05878     break;
05879 
05880   case 71:
05881 
05882 /* Line 1806 of yacc.c  */
05883 #line 1455 "parse.y"
05884     {
05885                     /*%%%*/
05886                         (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
05887                     /*%
05888                         $$ = dispatch1(mlhs_paren, $2);
05889                     %*/
05890                     }
05891     break;
05892 
05893   case 72:
05894 
05895 /* Line 1806 of yacc.c  */
05896 #line 1465 "parse.y"
05897     {
05898                     /*%%%*/
05899                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
05900                     /*%
05901                         $$ = $1;
05902                     %*/
05903                     }
05904     break;
05905 
05906   case 73:
05907 
05908 /* Line 1806 of yacc.c  */
05909 #line 1473 "parse.y"
05910     {
05911                     /*%%%*/
05912                         (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
05913                     /*%
05914                         $$ = mlhs_add($1, $2);
05915                     %*/
05916                     }
05917     break;
05918 
05919   case 74:
05920 
05921 /* Line 1806 of yacc.c  */
05922 #line 1481 "parse.y"
05923     {
05924                     /*%%%*/
05925                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05926                     /*%
05927                         $$ = mlhs_add_star($1, $3);
05928                     %*/
05929                     }
05930     break;
05931 
05932   case 75:
05933 
05934 /* Line 1806 of yacc.c  */
05935 #line 1489 "parse.y"
05936     {
05937                     /*%%%*/
05938                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
05939                     /*%
05940                         $1 = mlhs_add_star($1, $3);
05941                         $$ = mlhs_add($1, $5);
05942                     %*/
05943                     }
05944     break;
05945 
05946   case 76:
05947 
05948 /* Line 1806 of yacc.c  */
05949 #line 1498 "parse.y"
05950     {
05951                     /*%%%*/
05952                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
05953                     /*%
05954                         $$ = mlhs_add_star($1, Qnil);
05955                     %*/
05956                     }
05957     break;
05958 
05959   case 77:
05960 
05961 /* Line 1806 of yacc.c  */
05962 #line 1506 "parse.y"
05963     {
05964                     /*%%%*/
05965                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
05966                     /*%
05967                         $1 = mlhs_add_star($1, Qnil);
05968                         $$ = mlhs_add($1, $4);
05969                     %*/
05970                     }
05971     break;
05972 
05973   case 78:
05974 
05975 /* Line 1806 of yacc.c  */
05976 #line 1515 "parse.y"
05977     {
05978                     /*%%%*/
05979                         (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
05980                     /*%
05981                         $$ = mlhs_add_star(mlhs_new(), $2);
05982                     %*/
05983                     }
05984     break;
05985 
05986   case 79:
05987 
05988 /* Line 1806 of yacc.c  */
05989 #line 1523 "parse.y"
05990     {
05991                     /*%%%*/
05992                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
05993                     /*%
05994                         $2 = mlhs_add_star(mlhs_new(), $2);
05995                         $$ = mlhs_add($2, $4);
05996                     %*/
05997                     }
05998     break;
05999 
06000   case 80:
06001 
06002 /* Line 1806 of yacc.c  */
06003 #line 1532 "parse.y"
06004     {
06005                     /*%%%*/
06006                         (yyval.node) = NEW_MASGN(0, -1);
06007                     /*%
06008                         $$ = mlhs_add_star(mlhs_new(), Qnil);
06009                     %*/
06010                     }
06011     break;
06012 
06013   case 81:
06014 
06015 /* Line 1806 of yacc.c  */
06016 #line 1540 "parse.y"
06017     {
06018                     /*%%%*/
06019                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
06020                     /*%
06021                         $$ = mlhs_add_star(mlhs_new(), Qnil);
06022                         $$ = mlhs_add($$, $3);
06023                     %*/
06024                     }
06025     break;
06026 
06027   case 83:
06028 
06029 /* Line 1806 of yacc.c  */
06030 #line 1552 "parse.y"
06031     {
06032                     /*%%%*/
06033                         (yyval.node) = (yyvsp[(2) - (3)].node);
06034                     /*%
06035                         $$ = dispatch1(mlhs_paren, $2);
06036                     %*/
06037                     }
06038     break;
06039 
06040   case 84:
06041 
06042 /* Line 1806 of yacc.c  */
06043 #line 1562 "parse.y"
06044     {
06045                     /*%%%*/
06046                         (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06047                     /*%
06048                         $$ = mlhs_add(mlhs_new(), $1);
06049                     %*/
06050                     }
06051     break;
06052 
06053   case 85:
06054 
06055 /* Line 1806 of yacc.c  */
06056 #line 1570 "parse.y"
06057     {
06058                     /*%%%*/
06059                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06060                     /*%
06061                         $$ = mlhs_add($1, $2);
06062                     %*/
06063                     }
06064     break;
06065 
06066   case 86:
06067 
06068 /* Line 1806 of yacc.c  */
06069 #line 1580 "parse.y"
06070     {
06071                     /*%%%*/
06072                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06073                     /*%
06074                         $$ = mlhs_add(mlhs_new(), $1);
06075                     %*/
06076                     }
06077     break;
06078 
06079   case 87:
06080 
06081 /* Line 1806 of yacc.c  */
06082 #line 1588 "parse.y"
06083     {
06084                     /*%%%*/
06085                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06086                     /*%
06087                         $$ = mlhs_add($1, $3);
06088                     %*/
06089                     }
06090     break;
06091 
06092   case 88:
06093 
06094 /* Line 1806 of yacc.c  */
06095 #line 1598 "parse.y"
06096     {
06097                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06098                     }
06099     break;
06100 
06101   case 89:
06102 
06103 /* Line 1806 of yacc.c  */
06104 #line 1602 "parse.y"
06105     {
06106                     /*%%%*/
06107                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06108                     /*%
06109                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06110                     %*/
06111                     }
06112     break;
06113 
06114   case 90:
06115 
06116 /* Line 1806 of yacc.c  */
06117 #line 1610 "parse.y"
06118     {
06119                     /*%%%*/
06120                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06121                     /*%
06122                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06123                     %*/
06124                     }
06125     break;
06126 
06127   case 91:
06128 
06129 /* Line 1806 of yacc.c  */
06130 #line 1618 "parse.y"
06131     {
06132                     /*%%%*/
06133                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06134                     /*%
06135                         $$ = dispatch2(const_path_field, $1, $3);
06136                     %*/
06137                     }
06138     break;
06139 
06140   case 92:
06141 
06142 /* Line 1806 of yacc.c  */
06143 #line 1626 "parse.y"
06144     {
06145                     /*%%%*/
06146                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06147                     /*%
06148                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06149                     %*/
06150                     }
06151     break;
06152 
06153   case 93:
06154 
06155 /* Line 1806 of yacc.c  */
06156 #line 1634 "parse.y"
06157     {
06158                     /*%%%*/
06159                         if (in_def || in_single)
06160                             yyerror("dynamic constant assignment");
06161                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06162                     /*%
06163                         if (in_def || in_single)
06164                             yyerror("dynamic constant assignment");
06165                         $$ = dispatch2(const_path_field, $1, $3);
06166                     %*/
06167                     }
06168     break;
06169 
06170   case 94:
06171 
06172 /* Line 1806 of yacc.c  */
06173 #line 1646 "parse.y"
06174     {
06175                     /*%%%*/
06176                         if (in_def || in_single)
06177                             yyerror("dynamic constant assignment");
06178                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06179                     /*%
06180                         $$ = dispatch1(top_const_field, $2);
06181                     %*/
06182                     }
06183     break;
06184 
06185   case 95:
06186 
06187 /* Line 1806 of yacc.c  */
06188 #line 1656 "parse.y"
06189     {
06190                     /*%%%*/
06191                         rb_backref_error((yyvsp[(1) - (1)].node));
06192                         (yyval.node) = NEW_BEGIN(0);
06193                     /*%
06194                         $$ = dispatch1(var_field, $1);
06195                         $$ = dispatch1(assign_error, $$);
06196                     %*/
06197                     }
06198     break;
06199 
06200   case 96:
06201 
06202 /* Line 1806 of yacc.c  */
06203 #line 1668 "parse.y"
06204     {
06205                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06206                     /*%%%*/
06207                         if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06208                     /*%
06209                         $$ = dispatch1(var_field, $$);
06210                     %*/
06211                     }
06212     break;
06213 
06214   case 97:
06215 
06216 /* Line 1806 of yacc.c  */
06217 #line 1677 "parse.y"
06218     {
06219                     /*%%%*/
06220                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06221                     /*%
06222                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06223                     %*/
06224                     }
06225     break;
06226 
06227   case 98:
06228 
06229 /* Line 1806 of yacc.c  */
06230 #line 1685 "parse.y"
06231     {
06232                     /*%%%*/
06233                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06234                     /*%
06235                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06236                     %*/
06237                     }
06238     break;
06239 
06240   case 99:
06241 
06242 /* Line 1806 of yacc.c  */
06243 #line 1693 "parse.y"
06244     {
06245                     /*%%%*/
06246                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06247                     /*%
06248                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
06249                     %*/
06250                     }
06251     break;
06252 
06253   case 100:
06254 
06255 /* Line 1806 of yacc.c  */
06256 #line 1701 "parse.y"
06257     {
06258                     /*%%%*/
06259                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06260                     /*%
06261                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06262                     %*/
06263                     }
06264     break;
06265 
06266   case 101:
06267 
06268 /* Line 1806 of yacc.c  */
06269 #line 1709 "parse.y"
06270     {
06271                     /*%%%*/
06272                         if (in_def || in_single)
06273                             yyerror("dynamic constant assignment");
06274                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06275                     /*%
06276                         $$ = dispatch2(const_path_field, $1, $3);
06277                         if (in_def || in_single) {
06278                             $$ = dispatch1(assign_error, $$);
06279                         }
06280                     %*/
06281                     }
06282     break;
06283 
06284   case 102:
06285 
06286 /* Line 1806 of yacc.c  */
06287 #line 1722 "parse.y"
06288     {
06289                     /*%%%*/
06290                         if (in_def || in_single)
06291                             yyerror("dynamic constant assignment");
06292                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06293                     /*%
06294                         $$ = dispatch1(top_const_field, $2);
06295                         if (in_def || in_single) {
06296                             $$ = dispatch1(assign_error, $$);
06297                         }
06298                     %*/
06299                     }
06300     break;
06301 
06302   case 103:
06303 
06304 /* Line 1806 of yacc.c  */
06305 #line 1735 "parse.y"
06306     {
06307                     /*%%%*/
06308                         rb_backref_error((yyvsp[(1) - (1)].node));
06309                         (yyval.node) = NEW_BEGIN(0);
06310                     /*%
06311                         $$ = dispatch1(assign_error, $1);
06312                     %*/
06313                     }
06314     break;
06315 
06316   case 104:
06317 
06318 /* Line 1806 of yacc.c  */
06319 #line 1746 "parse.y"
06320     {
06321                     /*%%%*/
06322                         yyerror("class/module name must be CONSTANT");
06323                     /*%
06324                         $$ = dispatch1(class_name_error, $1);
06325                     %*/
06326                     }
06327     break;
06328 
06329   case 106:
06330 
06331 /* Line 1806 of yacc.c  */
06332 #line 1757 "parse.y"
06333     {
06334                     /*%%%*/
06335                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06336                     /*%
06337                         $$ = dispatch1(top_const_ref, $2);
06338                     %*/
06339                     }
06340     break;
06341 
06342   case 107:
06343 
06344 /* Line 1806 of yacc.c  */
06345 #line 1765 "parse.y"
06346     {
06347                     /*%%%*/
06348                         (yyval.node) = NEW_COLON2(0, (yyval.node));
06349                     /*%
06350                         $$ = dispatch1(const_ref, $1);
06351                     %*/
06352                     }
06353     break;
06354 
06355   case 108:
06356 
06357 /* Line 1806 of yacc.c  */
06358 #line 1773 "parse.y"
06359     {
06360                     /*%%%*/
06361                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06362                     /*%
06363                         $$ = dispatch2(const_path_ref, $1, $3);
06364                     %*/
06365                     }
06366     break;
06367 
06368   case 112:
06369 
06370 /* Line 1806 of yacc.c  */
06371 #line 1786 "parse.y"
06372     {
06373                         lex_state = EXPR_ENDFN;
06374                         (yyval.id) = (yyvsp[(1) - (1)].id);
06375                     }
06376     break;
06377 
06378   case 113:
06379 
06380 /* Line 1806 of yacc.c  */
06381 #line 1791 "parse.y"
06382     {
06383                         lex_state = EXPR_ENDFN;
06384                     /*%%%*/
06385                         (yyval.id) = (yyvsp[(1) - (1)].id);
06386                     /*%
06387                         $$ = $1;
06388                     %*/
06389                     }
06390     break;
06391 
06392   case 116:
06393 
06394 /* Line 1806 of yacc.c  */
06395 #line 1806 "parse.y"
06396     {
06397                     /*%%%*/
06398                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06399                     /*%
06400                         $$ = dispatch1(symbol_literal, $1);
06401                     %*/
06402                     }
06403     break;
06404 
06405   case 118:
06406 
06407 /* Line 1806 of yacc.c  */
06408 #line 1817 "parse.y"
06409     {
06410                     /*%%%*/
06411                         (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06412                     /*%
06413                         $$ = rb_ary_new3(1, $1);
06414                     %*/
06415                     }
06416     break;
06417 
06418   case 119:
06419 
06420 /* Line 1806 of yacc.c  */
06421 #line 1824 "parse.y"
06422     {lex_state = EXPR_FNAME;}
06423     break;
06424 
06425   case 120:
06426 
06427 /* Line 1806 of yacc.c  */
06428 #line 1825 "parse.y"
06429     {
06430                     /*%%%*/
06431                         (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06432                     /*%
06433                         rb_ary_push($1, $4);
06434                     %*/
06435                     }
06436     break;
06437 
06438   case 121:
06439 
06440 /* Line 1806 of yacc.c  */
06441 #line 1834 "parse.y"
06442     { ifndef_ripper((yyval.id) = '|'); }
06443     break;
06444 
06445   case 122:
06446 
06447 /* Line 1806 of yacc.c  */
06448 #line 1835 "parse.y"
06449     { ifndef_ripper((yyval.id) = '^'); }
06450     break;
06451 
06452   case 123:
06453 
06454 /* Line 1806 of yacc.c  */
06455 #line 1836 "parse.y"
06456     { ifndef_ripper((yyval.id) = '&'); }
06457     break;
06458 
06459   case 124:
06460 
06461 /* Line 1806 of yacc.c  */
06462 #line 1837 "parse.y"
06463     { ifndef_ripper((yyval.id) = tCMP); }
06464     break;
06465 
06466   case 125:
06467 
06468 /* Line 1806 of yacc.c  */
06469 #line 1838 "parse.y"
06470     { ifndef_ripper((yyval.id) = tEQ); }
06471     break;
06472 
06473   case 126:
06474 
06475 /* Line 1806 of yacc.c  */
06476 #line 1839 "parse.y"
06477     { ifndef_ripper((yyval.id) = tEQQ); }
06478     break;
06479 
06480   case 127:
06481 
06482 /* Line 1806 of yacc.c  */
06483 #line 1840 "parse.y"
06484     { ifndef_ripper((yyval.id) = tMATCH); }
06485     break;
06486 
06487   case 128:
06488 
06489 /* Line 1806 of yacc.c  */
06490 #line 1841 "parse.y"
06491     { ifndef_ripper((yyval.id) = tNMATCH); }
06492     break;
06493 
06494   case 129:
06495 
06496 /* Line 1806 of yacc.c  */
06497 #line 1842 "parse.y"
06498     { ifndef_ripper((yyval.id) = '>'); }
06499     break;
06500 
06501   case 130:
06502 
06503 /* Line 1806 of yacc.c  */
06504 #line 1843 "parse.y"
06505     { ifndef_ripper((yyval.id) = tGEQ); }
06506     break;
06507 
06508   case 131:
06509 
06510 /* Line 1806 of yacc.c  */
06511 #line 1844 "parse.y"
06512     { ifndef_ripper((yyval.id) = '<'); }
06513     break;
06514 
06515   case 132:
06516 
06517 /* Line 1806 of yacc.c  */
06518 #line 1845 "parse.y"
06519     { ifndef_ripper((yyval.id) = tLEQ); }
06520     break;
06521 
06522   case 133:
06523 
06524 /* Line 1806 of yacc.c  */
06525 #line 1846 "parse.y"
06526     { ifndef_ripper((yyval.id) = tNEQ); }
06527     break;
06528 
06529   case 134:
06530 
06531 /* Line 1806 of yacc.c  */
06532 #line 1847 "parse.y"
06533     { ifndef_ripper((yyval.id) = tLSHFT); }
06534     break;
06535 
06536   case 135:
06537 
06538 /* Line 1806 of yacc.c  */
06539 #line 1848 "parse.y"
06540     { ifndef_ripper((yyval.id) = tRSHFT); }
06541     break;
06542 
06543   case 136:
06544 
06545 /* Line 1806 of yacc.c  */
06546 #line 1849 "parse.y"
06547     { ifndef_ripper((yyval.id) = '+'); }
06548     break;
06549 
06550   case 137:
06551 
06552 /* Line 1806 of yacc.c  */
06553 #line 1850 "parse.y"
06554     { ifndef_ripper((yyval.id) = '-'); }
06555     break;
06556 
06557   case 138:
06558 
06559 /* Line 1806 of yacc.c  */
06560 #line 1851 "parse.y"
06561     { ifndef_ripper((yyval.id) = '*'); }
06562     break;
06563 
06564   case 139:
06565 
06566 /* Line 1806 of yacc.c  */
06567 #line 1852 "parse.y"
06568     { ifndef_ripper((yyval.id) = '*'); }
06569     break;
06570 
06571   case 140:
06572 
06573 /* Line 1806 of yacc.c  */
06574 #line 1853 "parse.y"
06575     { ifndef_ripper((yyval.id) = '/'); }
06576     break;
06577 
06578   case 141:
06579 
06580 /* Line 1806 of yacc.c  */
06581 #line 1854 "parse.y"
06582     { ifndef_ripper((yyval.id) = '%'); }
06583     break;
06584 
06585   case 142:
06586 
06587 /* Line 1806 of yacc.c  */
06588 #line 1855 "parse.y"
06589     { ifndef_ripper((yyval.id) = tPOW); }
06590     break;
06591 
06592   case 143:
06593 
06594 /* Line 1806 of yacc.c  */
06595 #line 1856 "parse.y"
06596     { ifndef_ripper((yyval.id) = '!'); }
06597     break;
06598 
06599   case 144:
06600 
06601 /* Line 1806 of yacc.c  */
06602 #line 1857 "parse.y"
06603     { ifndef_ripper((yyval.id) = '~'); }
06604     break;
06605 
06606   case 145:
06607 
06608 /* Line 1806 of yacc.c  */
06609 #line 1858 "parse.y"
06610     { ifndef_ripper((yyval.id) = tUPLUS); }
06611     break;
06612 
06613   case 146:
06614 
06615 /* Line 1806 of yacc.c  */
06616 #line 1859 "parse.y"
06617     { ifndef_ripper((yyval.id) = tUMINUS); }
06618     break;
06619 
06620   case 147:
06621 
06622 /* Line 1806 of yacc.c  */
06623 #line 1860 "parse.y"
06624     { ifndef_ripper((yyval.id) = tAREF); }
06625     break;
06626 
06627   case 148:
06628 
06629 /* Line 1806 of yacc.c  */
06630 #line 1861 "parse.y"
06631     { ifndef_ripper((yyval.id) = tASET); }
06632     break;
06633 
06634   case 149:
06635 
06636 /* Line 1806 of yacc.c  */
06637 #line 1862 "parse.y"
06638     { ifndef_ripper((yyval.id) = '`'); }
06639     break;
06640 
06641   case 191:
06642 
06643 /* Line 1806 of yacc.c  */
06644 #line 1880 "parse.y"
06645     {
06646                     /*%%%*/
06647                         value_expr((yyvsp[(3) - (3)].node));
06648                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06649                     /*%
06650                         $$ = dispatch2(assign, $1, $3);
06651                     %*/
06652                     }
06653     break;
06654 
06655   case 192:
06656 
06657 /* Line 1806 of yacc.c  */
06658 #line 1889 "parse.y"
06659     {
06660                     /*%%%*/
06661                         value_expr((yyvsp[(3) - (5)].node));
06662                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06663                         (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06664                     /*%
06665                         $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
06666                     %*/
06667                     }
06668     break;
06669 
06670   case 193:
06671 
06672 /* Line 1806 of yacc.c  */
06673 #line 1899 "parse.y"
06674     {
06675                     /*%%%*/
06676                         value_expr((yyvsp[(3) - (3)].node));
06677                         if ((yyvsp[(1) - (3)].node)) {
06678                             ID vid = (yyvsp[(1) - (3)].node)->nd_vid;
06679                             if ((yyvsp[(2) - (3)].id) == tOROP) {
06680                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06681                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (3)].node));
06682                                 if (is_asgn_or_id(vid)) {
06683                                     (yyval.node)->nd_aid = vid;
06684                                 }
06685                             }
06686                             else if ((yyvsp[(2) - (3)].id) == tANDOP) {
06687                                 (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
06688                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (3)].node));
06689                             }
06690                             else {
06691                                 (yyval.node) = (yyvsp[(1) - (3)].node);
06692                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (3)].id), NEW_LIST((yyvsp[(3) - (3)].node)));
06693                             }
06694                         }
06695                         else {
06696                             (yyval.node) = NEW_BEGIN(0);
06697                         }
06698                     /*%
06699                         $$ = dispatch3(opassign, $1, $2, $3);
06700                     %*/
06701                     }
06702     break;
06703 
06704   case 194:
06705 
06706 /* Line 1806 of yacc.c  */
06707 #line 1928 "parse.y"
06708     {
06709                     /*%%%*/
06710                         value_expr((yyvsp[(3) - (5)].node));
06711                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06712                         if ((yyvsp[(1) - (5)].node)) {
06713                             ID vid = (yyvsp[(1) - (5)].node)->nd_vid;
06714                             if ((yyvsp[(2) - (5)].id) == tOROP) {
06715                                 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06716                                 (yyval.node) = NEW_OP_ASGN_OR(gettable(vid), (yyvsp[(1) - (5)].node));
06717                                 if (is_asgn_or_id(vid)) {
06718                                     (yyval.node)->nd_aid = vid;
06719                                 }
06720                             }
06721                             else if ((yyvsp[(2) - (5)].id) == tANDOP) {
06722                                 (yyvsp[(1) - (5)].node)->nd_value = (yyvsp[(3) - (5)].node);
06723                                 (yyval.node) = NEW_OP_ASGN_AND(gettable(vid), (yyvsp[(1) - (5)].node));
06724                             }
06725                             else {
06726                                 (yyval.node) = (yyvsp[(1) - (5)].node);
06727                                 (yyval.node)->nd_value = NEW_CALL(gettable(vid), (yyvsp[(2) - (5)].id), NEW_LIST((yyvsp[(3) - (5)].node)));
06728                             }
06729                         }
06730                         else {
06731                             (yyval.node) = NEW_BEGIN(0);
06732                         }
06733                     /*%
06734                         $3 = dispatch2(rescue_mod, $3, $5);
06735                         $$ = dispatch3(opassign, $1, $2, $3);
06736                     %*/
06737                     }
06738     break;
06739 
06740   case 195:
06741 
06742 /* Line 1806 of yacc.c  */
06743 #line 1959 "parse.y"
06744     {
06745                     /*%%%*/
06746                         NODE *args;
06747 
06748                         value_expr((yyvsp[(6) - (6)].node));
06749                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06750                         if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06751                             args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06752                         }
06753                         else {
06754                             args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06755                         }
06756                         if ((yyvsp[(5) - (6)].id) == tOROP) {
06757                             (yyvsp[(5) - (6)].id) = 0;
06758                         }
06759                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06760                             (yyvsp[(5) - (6)].id) = 1;
06761                         }
06762                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06763                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06764                     /*%
06765                         $1 = dispatch2(aref_field, $1, escape_Qundef($3));
06766                         $$ = dispatch3(opassign, $1, $5, $6);
06767                     %*/
06768                     }
06769     break;
06770 
06771   case 196:
06772 
06773 /* Line 1806 of yacc.c  */
06774 #line 1985 "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 197:
06794 
06795 /* Line 1806 of yacc.c  */
06796 #line 2002 "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_id2sym('.'), $3);
06810                         $$ = dispatch3(opassign, $1, $4, $5);
06811                     %*/
06812                     }
06813     break;
06814 
06815   case 198:
06816 
06817 /* Line 1806 of yacc.c  */
06818 #line 2019 "parse.y"
06819     {
06820                     /*%%%*/
06821                         value_expr((yyvsp[(5) - (5)].node));
06822                         if ((yyvsp[(4) - (5)].id) == tOROP) {
06823                             (yyvsp[(4) - (5)].id) = 0;
06824                         }
06825                         else if ((yyvsp[(4) - (5)].id) == tANDOP) {
06826                             (yyvsp[(4) - (5)].id) = 1;
06827                         }
06828                         (yyval.node) = NEW_OP_ASGN2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06829                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
06830                     /*%
06831                         $1 = dispatch3(field, $1, ripper_intern("::"), $3);
06832                         $$ = dispatch3(opassign, $1, $4, $5);
06833                     %*/
06834                     }
06835     break;
06836 
06837   case 199:
06838 
06839 /* Line 1806 of yacc.c  */
06840 #line 2036 "parse.y"
06841     {
06842                     /*%%%*/
06843                         yyerror("constant re-assignment");
06844                         (yyval.node) = NEW_BEGIN(0);
06845                     /*%
06846                         $$ = dispatch2(const_path_field, $1, $3);
06847                         $$ = dispatch3(opassign, $$, $4, $5);
06848                         $$ = dispatch1(assign_error, $$);
06849                     %*/
06850                     }
06851     break;
06852 
06853   case 200:
06854 
06855 /* Line 1806 of yacc.c  */
06856 #line 2047 "parse.y"
06857     {
06858                     /*%%%*/
06859                         yyerror("constant re-assignment");
06860                         (yyval.node) = NEW_BEGIN(0);
06861                     /*%
06862                         $$ = dispatch1(top_const_field, $2);
06863                         $$ = dispatch3(opassign, $$, $3, $4);
06864                         $$ = dispatch1(assign_error, $$);
06865                     %*/
06866                     }
06867     break;
06868 
06869   case 201:
06870 
06871 /* Line 1806 of yacc.c  */
06872 #line 2058 "parse.y"
06873     {
06874                     /*%%%*/
06875                         rb_backref_error((yyvsp[(1) - (3)].node));
06876                         (yyval.node) = NEW_BEGIN(0);
06877                     /*%
06878                         $$ = dispatch1(var_field, $1);
06879                         $$ = dispatch3(opassign, $$, $2, $3);
06880                         $$ = dispatch1(assign_error, $$);
06881                     %*/
06882                     }
06883     break;
06884 
06885   case 202:
06886 
06887 /* Line 1806 of yacc.c  */
06888 #line 2069 "parse.y"
06889     {
06890                     /*%%%*/
06891                         value_expr((yyvsp[(1) - (3)].node));
06892                         value_expr((yyvsp[(3) - (3)].node));
06893                         (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06894                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06895                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06896                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
06897                         }
06898                     /*%
06899                         $$ = dispatch2(dot2, $1, $3);
06900                     %*/
06901                     }
06902     break;
06903 
06904   case 203:
06905 
06906 /* Line 1806 of yacc.c  */
06907 #line 2083 "parse.y"
06908     {
06909                     /*%%%*/
06910                         value_expr((yyvsp[(1) - (3)].node));
06911                         value_expr((yyvsp[(3) - (3)].node));
06912                         (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06913                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
06914                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
06915                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
06916                         }
06917                     /*%
06918                         $$ = dispatch2(dot3, $1, $3);
06919                     %*/
06920                     }
06921     break;
06922 
06923   case 204:
06924 
06925 /* Line 1806 of yacc.c  */
06926 #line 2097 "parse.y"
06927     {
06928                     /*%%%*/
06929                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
06930                     /*%
06931                         $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
06932                     %*/
06933                     }
06934     break;
06935 
06936   case 205:
06937 
06938 /* Line 1806 of yacc.c  */
06939 #line 2105 "parse.y"
06940     {
06941                     /*%%%*/
06942                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
06943                     /*%
06944                         $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
06945                     %*/
06946                     }
06947     break;
06948 
06949   case 206:
06950 
06951 /* Line 1806 of yacc.c  */
06952 #line 2113 "parse.y"
06953     {
06954                     /*%%%*/
06955                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
06956                     /*%
06957                         $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
06958                     %*/
06959                     }
06960     break;
06961 
06962   case 207:
06963 
06964 /* Line 1806 of yacc.c  */
06965 #line 2121 "parse.y"
06966     {
06967                     /*%%%*/
06968                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
06969                     /*%
06970                         $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
06971                     %*/
06972                     }
06973     break;
06974 
06975   case 208:
06976 
06977 /* Line 1806 of yacc.c  */
06978 #line 2129 "parse.y"
06979     {
06980                     /*%%%*/
06981                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
06982                     /*%
06983                         $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
06984                     %*/
06985                     }
06986     break;
06987 
06988   case 209:
06989 
06990 /* Line 1806 of yacc.c  */
06991 #line 2137 "parse.y"
06992     {
06993                     /*%%%*/
06994                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
06995                     /*%
06996                         $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
06997                     %*/
06998                     }
06999     break;
07000 
07001   case 210:
07002 
07003 /* Line 1806 of yacc.c  */
07004 #line 2145 "parse.y"
07005     {
07006                     /*%%%*/
07007                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07008                     /*%
07009                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
07010                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
07011                     %*/
07012                     }
07013     break;
07014 
07015   case 211:
07016 
07017 /* Line 1806 of yacc.c  */
07018 #line 2154 "parse.y"
07019     {
07020                     /*%%%*/
07021                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07022                     /*%
07023                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
07024                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
07025                     %*/
07026                     }
07027     break;
07028 
07029   case 212:
07030 
07031 /* Line 1806 of yacc.c  */
07032 #line 2163 "parse.y"
07033     {
07034                     /*%%%*/
07035                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07036                     /*%
07037                         $$ = dispatch2(unary, ripper_intern("+@"), $2);
07038                     %*/
07039                     }
07040     break;
07041 
07042   case 213:
07043 
07044 /* Line 1806 of yacc.c  */
07045 #line 2171 "parse.y"
07046     {
07047                     /*%%%*/
07048                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07049                     /*%
07050                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
07051                     %*/
07052                     }
07053     break;
07054 
07055   case 214:
07056 
07057 /* Line 1806 of yacc.c  */
07058 #line 2179 "parse.y"
07059     {
07060                     /*%%%*/
07061                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07062                     /*%
07063                         $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
07064                     %*/
07065                     }
07066     break;
07067 
07068   case 215:
07069 
07070 /* Line 1806 of yacc.c  */
07071 #line 2187 "parse.y"
07072     {
07073                     /*%%%*/
07074                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07075                     /*%
07076                         $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
07077                     %*/
07078                     }
07079     break;
07080 
07081   case 216:
07082 
07083 /* Line 1806 of yacc.c  */
07084 #line 2195 "parse.y"
07085     {
07086                     /*%%%*/
07087                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07088                     /*%
07089                         $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
07090                     %*/
07091                     }
07092     break;
07093 
07094   case 217:
07095 
07096 /* Line 1806 of yacc.c  */
07097 #line 2203 "parse.y"
07098     {
07099                     /*%%%*/
07100                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07101                     /*%
07102                         $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
07103                     %*/
07104                     }
07105     break;
07106 
07107   case 218:
07108 
07109 /* Line 1806 of yacc.c  */
07110 #line 2211 "parse.y"
07111     {
07112                     /*%%%*/
07113                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07114                     /*%
07115                         $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
07116                     %*/
07117                     }
07118     break;
07119 
07120   case 219:
07121 
07122 /* Line 1806 of yacc.c  */
07123 #line 2219 "parse.y"
07124     {
07125                     /*%%%*/
07126                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07127                     /*%
07128                         $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
07129                     %*/
07130                     }
07131     break;
07132 
07133   case 220:
07134 
07135 /* Line 1806 of yacc.c  */
07136 #line 2227 "parse.y"
07137     {
07138                     /*%%%*/
07139                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07140                     /*%
07141                         $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
07142                     %*/
07143                     }
07144     break;
07145 
07146   case 221:
07147 
07148 /* Line 1806 of yacc.c  */
07149 #line 2235 "parse.y"
07150     {
07151                     /*%%%*/
07152                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07153                     /*%
07154                         $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
07155                     %*/
07156                     }
07157     break;
07158 
07159   case 222:
07160 
07161 /* Line 1806 of yacc.c  */
07162 #line 2243 "parse.y"
07163     {
07164                     /*%%%*/
07165                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07166                     /*%
07167                         $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
07168                     %*/
07169                     }
07170     break;
07171 
07172   case 223:
07173 
07174 /* Line 1806 of yacc.c  */
07175 #line 2251 "parse.y"
07176     {
07177                     /*%%%*/
07178                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07179                     /*%
07180                         $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
07181                     %*/
07182                     }
07183     break;
07184 
07185   case 224:
07186 
07187 /* Line 1806 of yacc.c  */
07188 #line 2259 "parse.y"
07189     {
07190                     /*%%%*/
07191                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07192                     /*%
07193                         $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
07194                     %*/
07195                     }
07196     break;
07197 
07198   case 225:
07199 
07200 /* Line 1806 of yacc.c  */
07201 #line 2267 "parse.y"
07202     {
07203                     /*%%%*/
07204                         (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07205                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && TYPE((yyvsp[(1) - (3)].node)->nd_lit) == T_REGEXP) {
07206                             (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07207                         }
07208                     /*%
07209                         $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
07210                     %*/
07211                     }
07212     break;
07213 
07214   case 226:
07215 
07216 /* Line 1806 of yacc.c  */
07217 #line 2278 "parse.y"
07218     {
07219                     /*%%%*/
07220                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07221                     /*%
07222                         $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
07223                     %*/
07224                     }
07225     break;
07226 
07227   case 227:
07228 
07229 /* Line 1806 of yacc.c  */
07230 #line 2286 "parse.y"
07231     {
07232                     /*%%%*/
07233                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07234                     /*%
07235                         $$ = dispatch2(unary, ID2SYM('!'), $2);
07236                     %*/
07237                     }
07238     break;
07239 
07240   case 228:
07241 
07242 /* Line 1806 of yacc.c  */
07243 #line 2294 "parse.y"
07244     {
07245                     /*%%%*/
07246                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07247                     /*%
07248                         $$ = dispatch2(unary, ID2SYM('~'), $2);
07249                     %*/
07250                     }
07251     break;
07252 
07253   case 229:
07254 
07255 /* Line 1806 of yacc.c  */
07256 #line 2302 "parse.y"
07257     {
07258                     /*%%%*/
07259                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07260                     /*%
07261                         $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
07262                     %*/
07263                     }
07264     break;
07265 
07266   case 230:
07267 
07268 /* Line 1806 of yacc.c  */
07269 #line 2310 "parse.y"
07270     {
07271                     /*%%%*/
07272                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07273                     /*%
07274                         $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
07275                     %*/
07276                     }
07277     break;
07278 
07279   case 231:
07280 
07281 /* Line 1806 of yacc.c  */
07282 #line 2318 "parse.y"
07283     {
07284                     /*%%%*/
07285                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07286                     /*%
07287                         $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
07288                     %*/
07289                     }
07290     break;
07291 
07292   case 232:
07293 
07294 /* Line 1806 of yacc.c  */
07295 #line 2326 "parse.y"
07296     {
07297                     /*%%%*/
07298                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07299                     /*%
07300                         $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
07301                     %*/
07302                     }
07303     break;
07304 
07305   case 233:
07306 
07307 /* Line 1806 of yacc.c  */
07308 #line 2333 "parse.y"
07309     {in_defined = 1;}
07310     break;
07311 
07312   case 234:
07313 
07314 /* Line 1806 of yacc.c  */
07315 #line 2334 "parse.y"
07316     {
07317                     /*%%%*/
07318                         in_defined = 0;
07319                         (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07320                     /*%
07321                         in_defined = 0;
07322                         $$ = dispatch1(defined, $4);
07323                     %*/
07324                     }
07325     break;
07326 
07327   case 235:
07328 
07329 /* Line 1806 of yacc.c  */
07330 #line 2344 "parse.y"
07331     {
07332                     /*%%%*/
07333                         value_expr((yyvsp[(1) - (6)].node));
07334                         (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07335                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07336                     /*%
07337                         $$ = dispatch3(ifop, $1, $3, $6);
07338                     %*/
07339                     }
07340     break;
07341 
07342   case 236:
07343 
07344 /* Line 1806 of yacc.c  */
07345 #line 2354 "parse.y"
07346     {
07347                         (yyval.node) = (yyvsp[(1) - (1)].node);
07348                     }
07349     break;
07350 
07351   case 237:
07352 
07353 /* Line 1806 of yacc.c  */
07354 #line 2360 "parse.y"
07355     {
07356                     /*%%%*/
07357                         value_expr((yyvsp[(1) - (1)].node));
07358                         (yyval.node) = (yyvsp[(1) - (1)].node);
07359                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
07360                     /*%
07361                         $$ = $1;
07362                     %*/
07363                     }
07364     break;
07365 
07366   case 239:
07367 
07368 /* Line 1806 of yacc.c  */
07369 #line 2373 "parse.y"
07370     {
07371                         (yyval.node) = (yyvsp[(1) - (2)].node);
07372                     }
07373     break;
07374 
07375   case 240:
07376 
07377 /* Line 1806 of yacc.c  */
07378 #line 2377 "parse.y"
07379     {
07380                     /*%%%*/
07381                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07382                     /*%
07383                         $$ = arg_add_assocs($1, $3);
07384                     %*/
07385                     }
07386     break;
07387 
07388   case 241:
07389 
07390 /* Line 1806 of yacc.c  */
07391 #line 2385 "parse.y"
07392     {
07393                     /*%%%*/
07394                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07395                     /*%
07396                         $$ = arg_add_assocs(arg_new(), $1);
07397                     %*/
07398                     }
07399     break;
07400 
07401   case 242:
07402 
07403 /* Line 1806 of yacc.c  */
07404 #line 2395 "parse.y"
07405     {
07406                     /*%%%*/
07407                         (yyval.node) = (yyvsp[(2) - (3)].node);
07408                     /*%
07409                         $$ = dispatch1(arg_paren, escape_Qundef($2));
07410                     %*/
07411                     }
07412     break;
07413 
07414   case 247:
07415 
07416 /* Line 1806 of yacc.c  */
07417 #line 2413 "parse.y"
07418     {
07419                     /*%%%*/
07420                         value_expr((yyvsp[(1) - (1)].node));
07421                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07422                     /*%
07423                         $$ = arg_add(arg_new(), $1);
07424                     %*/
07425                     }
07426     break;
07427 
07428   case 248:
07429 
07430 /* Line 1806 of yacc.c  */
07431 #line 2422 "parse.y"
07432     {
07433                     /*%%%*/
07434                         (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07435                     /*%
07436                         $$ = arg_add_optblock($1, $2);
07437                     %*/
07438                     }
07439     break;
07440 
07441   case 249:
07442 
07443 /* Line 1806 of yacc.c  */
07444 #line 2430 "parse.y"
07445     {
07446                     /*%%%*/
07447                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07448                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07449                     /*%
07450                         $$ = arg_add_assocs(arg_new(), $1);
07451                         $$ = arg_add_optblock($$, $2);
07452                     %*/
07453                     }
07454     break;
07455 
07456   case 250:
07457 
07458 /* Line 1806 of yacc.c  */
07459 #line 2440 "parse.y"
07460     {
07461                     /*%%%*/
07462                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07463                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07464                     /*%
07465                         $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
07466                     %*/
07467                     }
07468     break;
07469 
07470   case 252:
07471 
07472 /* Line 1806 of yacc.c  */
07473 #line 2457 "parse.y"
07474     {
07475                         (yyval.val) = cmdarg_stack;
07476                         CMDARG_PUSH(1);
07477                     }
07478     break;
07479 
07480   case 253:
07481 
07482 /* Line 1806 of yacc.c  */
07483 #line 2462 "parse.y"
07484     {
07485                         /* CMDARG_POP() */
07486                         cmdarg_stack = (yyvsp[(1) - (2)].val);
07487                         (yyval.node) = (yyvsp[(2) - (2)].node);
07488                     }
07489     break;
07490 
07491   case 254:
07492 
07493 /* Line 1806 of yacc.c  */
07494 #line 2470 "parse.y"
07495     {
07496                     /*%%%*/
07497                         (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07498                     /*%
07499                         $$ = $2;
07500                     %*/
07501                     }
07502     break;
07503 
07504   case 255:
07505 
07506 /* Line 1806 of yacc.c  */
07507 #line 2480 "parse.y"
07508     {
07509                         (yyval.node) = (yyvsp[(2) - (2)].node);
07510                     }
07511     break;
07512 
07513   case 256:
07514 
07515 /* Line 1806 of yacc.c  */
07516 #line 2484 "parse.y"
07517     {
07518                         (yyval.node) = 0;
07519                     }
07520     break;
07521 
07522   case 257:
07523 
07524 /* Line 1806 of yacc.c  */
07525 #line 2488 "parse.y"
07526     {
07527                         (yyval.node) = 0;
07528                     }
07529     break;
07530 
07531   case 258:
07532 
07533 /* Line 1806 of yacc.c  */
07534 #line 2494 "parse.y"
07535     {
07536                     /*%%%*/
07537                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07538                     /*%
07539                         $$ = arg_add(arg_new(), $1);
07540                     %*/
07541                     }
07542     break;
07543 
07544   case 259:
07545 
07546 /* Line 1806 of yacc.c  */
07547 #line 2502 "parse.y"
07548     {
07549                     /*%%%*/
07550                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07551                     /*%
07552                         $$ = arg_add_star(arg_new(), $2);
07553                     %*/
07554                     }
07555     break;
07556 
07557   case 260:
07558 
07559 /* Line 1806 of yacc.c  */
07560 #line 2510 "parse.y"
07561     {
07562                     /*%%%*/
07563                         NODE *n1;
07564                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07565                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07566                         }
07567                         else {
07568                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07569                         }
07570                     /*%
07571                         $$ = arg_add($1, $3);
07572                     %*/
07573                     }
07574     break;
07575 
07576   case 261:
07577 
07578 /* Line 1806 of yacc.c  */
07579 #line 2524 "parse.y"
07580     {
07581                     /*%%%*/
07582                         NODE *n1;
07583                         if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07584                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07585                         }
07586                         else {
07587                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07588                         }
07589                     /*%
07590                         $$ = arg_add_star($1, $4);
07591                     %*/
07592                     }
07593     break;
07594 
07595   case 262:
07596 
07597 /* Line 1806 of yacc.c  */
07598 #line 2540 "parse.y"
07599     {
07600                     /*%%%*/
07601                         NODE *n1;
07602                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07603                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07604                         }
07605                         else {
07606                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07607                         }
07608                     /*%
07609                         $$ = mrhs_add(args2mrhs($1), $3);
07610                     %*/
07611                     }
07612     break;
07613 
07614   case 263:
07615 
07616 /* Line 1806 of yacc.c  */
07617 #line 2554 "parse.y"
07618     {
07619                     /*%%%*/
07620                         NODE *n1;
07621                         if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07622                             (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07623                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07624                         }
07625                         else {
07626                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07627                         }
07628                     /*%
07629                         $$ = mrhs_add_star(args2mrhs($1), $4);
07630                     %*/
07631                     }
07632     break;
07633 
07634   case 264:
07635 
07636 /* Line 1806 of yacc.c  */
07637 #line 2569 "parse.y"
07638     {
07639                     /*%%%*/
07640                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07641                     /*%
07642                         $$ = mrhs_add_star(mrhs_new(), $2);
07643                     %*/
07644                     }
07645     break;
07646 
07647   case 273:
07648 
07649 /* Line 1806 of yacc.c  */
07650 #line 2587 "parse.y"
07651     {
07652                     /*%%%*/
07653                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07654                     /*%
07655                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07656                     %*/
07657                     }
07658     break;
07659 
07660   case 274:
07661 
07662 /* Line 1806 of yacc.c  */
07663 #line 2595 "parse.y"
07664     {
07665                     /*%%%*/
07666                         (yyval.num) = ruby_sourceline;
07667                     /*%
07668                     %*/
07669                     }
07670     break;
07671 
07672   case 275:
07673 
07674 /* Line 1806 of yacc.c  */
07675 #line 2603 "parse.y"
07676     {
07677                     /*%%%*/
07678                         if ((yyvsp[(3) - (4)].node) == NULL) {
07679                             (yyval.node) = NEW_NIL();
07680                         }
07681                         else {
07682                             if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07683                                 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07684                                 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07685                             (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07686                         }
07687                         nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07688                     /*%
07689                         $$ = dispatch1(begin, $3);
07690                     %*/
07691                     }
07692     break;
07693 
07694   case 276:
07695 
07696 /* Line 1806 of yacc.c  */
07697 #line 2619 "parse.y"
07698     {lex_state = EXPR_ENDARG;}
07699     break;
07700 
07701   case 277:
07702 
07703 /* Line 1806 of yacc.c  */
07704 #line 2620 "parse.y"
07705     {
07706                         rb_warning0("(...) interpreted as grouped expression");
07707                     /*%%%*/
07708                         (yyval.node) = (yyvsp[(2) - (4)].node);
07709                     /*%
07710                         $$ = dispatch1(paren, $2);
07711                     %*/
07712                     }
07713     break;
07714 
07715   case 278:
07716 
07717 /* Line 1806 of yacc.c  */
07718 #line 2629 "parse.y"
07719     {
07720                     /*%%%*/
07721                         (yyval.node) = (yyvsp[(2) - (3)].node);
07722                     /*%
07723                         $$ = dispatch1(paren, $2);
07724                     %*/
07725                     }
07726     break;
07727 
07728   case 279:
07729 
07730 /* Line 1806 of yacc.c  */
07731 #line 2637 "parse.y"
07732     {
07733                     /*%%%*/
07734                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07735                     /*%
07736                         $$ = dispatch2(const_path_ref, $1, $3);
07737                     %*/
07738                     }
07739     break;
07740 
07741   case 280:
07742 
07743 /* Line 1806 of yacc.c  */
07744 #line 2645 "parse.y"
07745     {
07746                     /*%%%*/
07747                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07748                     /*%
07749                         $$ = dispatch1(top_const_ref, $2);
07750                     %*/
07751                     }
07752     break;
07753 
07754   case 281:
07755 
07756 /* Line 1806 of yacc.c  */
07757 #line 2653 "parse.y"
07758     {
07759                     /*%%%*/
07760                         if ((yyvsp[(2) - (3)].node) == 0) {
07761                             (yyval.node) = NEW_ZARRAY(); /* zero length array*/
07762                         }
07763                         else {
07764                             (yyval.node) = (yyvsp[(2) - (3)].node);
07765                         }
07766                     /*%
07767                         $$ = dispatch1(array, escape_Qundef($2));
07768                     %*/
07769                     }
07770     break;
07771 
07772   case 282:
07773 
07774 /* Line 1806 of yacc.c  */
07775 #line 2666 "parse.y"
07776     {
07777                     /*%%%*/
07778                         (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07779                     /*%
07780                         $$ = dispatch1(hash, escape_Qundef($2));
07781                     %*/
07782                     }
07783     break;
07784 
07785   case 283:
07786 
07787 /* Line 1806 of yacc.c  */
07788 #line 2674 "parse.y"
07789     {
07790                     /*%%%*/
07791                         (yyval.node) = NEW_RETURN(0);
07792                     /*%
07793                         $$ = dispatch0(return0);
07794                     %*/
07795                     }
07796     break;
07797 
07798   case 284:
07799 
07800 /* Line 1806 of yacc.c  */
07801 #line 2682 "parse.y"
07802     {
07803                     /*%%%*/
07804                         (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07805                     /*%
07806                         $$ = dispatch1(yield, dispatch1(paren, $3));
07807                     %*/
07808                     }
07809     break;
07810 
07811   case 285:
07812 
07813 /* Line 1806 of yacc.c  */
07814 #line 2690 "parse.y"
07815     {
07816                     /*%%%*/
07817                         (yyval.node) = NEW_YIELD(0, Qfalse);
07818                     /*%
07819                         $$ = dispatch1(yield, dispatch1(paren, arg_new()));
07820                     %*/
07821                     }
07822     break;
07823 
07824   case 286:
07825 
07826 /* Line 1806 of yacc.c  */
07827 #line 2698 "parse.y"
07828     {
07829                     /*%%%*/
07830                         (yyval.node) = NEW_YIELD(0, Qfalse);
07831                     /*%
07832                         $$ = dispatch0(yield0);
07833                     %*/
07834                     }
07835     break;
07836 
07837   case 287:
07838 
07839 /* Line 1806 of yacc.c  */
07840 #line 2705 "parse.y"
07841     {in_defined = 1;}
07842     break;
07843 
07844   case 288:
07845 
07846 /* Line 1806 of yacc.c  */
07847 #line 2706 "parse.y"
07848     {
07849                     /*%%%*/
07850                         in_defined = 0;
07851                         (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
07852                     /*%
07853                         in_defined = 0;
07854                         $$ = dispatch1(defined, $5);
07855                     %*/
07856                     }
07857     break;
07858 
07859   case 289:
07860 
07861 /* Line 1806 of yacc.c  */
07862 #line 2716 "parse.y"
07863     {
07864                     /*%%%*/
07865                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
07866                     /*%
07867                         $$ = dispatch2(unary, ripper_intern("not"), $3);
07868                     %*/
07869                     }
07870     break;
07871 
07872   case 290:
07873 
07874 /* Line 1806 of yacc.c  */
07875 #line 2724 "parse.y"
07876     {
07877                     /*%%%*/
07878                         (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
07879                     /*%
07880                         $$ = dispatch2(unary, ripper_intern("not"), Qnil);
07881                     %*/
07882                     }
07883     break;
07884 
07885   case 291:
07886 
07887 /* Line 1806 of yacc.c  */
07888 #line 2732 "parse.y"
07889     {
07890                     /*%%%*/
07891                         (yyvsp[(2) - (2)].node)->nd_iter = NEW_FCALL((yyvsp[(1) - (2)].id), 0);
07892                         (yyval.node) = (yyvsp[(2) - (2)].node);
07893                         fixpos((yyvsp[(2) - (2)].node)->nd_iter, (yyvsp[(2) - (2)].node));
07894                     /*%
07895                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07896                         $$ = method_add_block($$, $2);
07897                     %*/
07898                     }
07899     break;
07900 
07901   case 293:
07902 
07903 /* Line 1806 of yacc.c  */
07904 #line 2744 "parse.y"
07905     {
07906                     /*%%%*/
07907                         block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
07908                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
07909                         (yyval.node) = (yyvsp[(2) - (2)].node);
07910                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
07911                     /*%
07912                         $$ = method_add_block($1, $2);
07913                     %*/
07914                     }
07915     break;
07916 
07917   case 294:
07918 
07919 /* Line 1806 of yacc.c  */
07920 #line 2755 "parse.y"
07921     {
07922                         (yyval.node) = (yyvsp[(2) - (2)].node);
07923                     }
07924     break;
07925 
07926   case 295:
07927 
07928 /* Line 1806 of yacc.c  */
07929 #line 2762 "parse.y"
07930     {
07931                     /*%%%*/
07932                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07933                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07934                     /*%
07935                         $$ = dispatch3(if, $2, $4, escape_Qundef($5));
07936                     %*/
07937                     }
07938     break;
07939 
07940   case 296:
07941 
07942 /* Line 1806 of yacc.c  */
07943 #line 2774 "parse.y"
07944     {
07945                     /*%%%*/
07946                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
07947                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
07948                     /*%
07949                         $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
07950                     %*/
07951                     }
07952     break;
07953 
07954   case 297:
07955 
07956 /* Line 1806 of yacc.c  */
07957 #line 2782 "parse.y"
07958     {COND_PUSH(1);}
07959     break;
07960 
07961   case 298:
07962 
07963 /* Line 1806 of yacc.c  */
07964 #line 2782 "parse.y"
07965     {COND_POP();}
07966     break;
07967 
07968   case 299:
07969 
07970 /* Line 1806 of yacc.c  */
07971 #line 2785 "parse.y"
07972     {
07973                     /*%%%*/
07974                         (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
07975                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
07976                     /*%
07977                         $$ = dispatch2(while, $3, $6);
07978                     %*/
07979                     }
07980     break;
07981 
07982   case 300:
07983 
07984 /* Line 1806 of yacc.c  */
07985 #line 2793 "parse.y"
07986     {COND_PUSH(1);}
07987     break;
07988 
07989   case 301:
07990 
07991 /* Line 1806 of yacc.c  */
07992 #line 2793 "parse.y"
07993     {COND_POP();}
07994     break;
07995 
07996   case 302:
07997 
07998 /* Line 1806 of yacc.c  */
07999 #line 2796 "parse.y"
08000     {
08001                     /*%%%*/
08002                         (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08003                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08004                     /*%
08005                         $$ = dispatch2(until, $3, $6);
08006                     %*/
08007                     }
08008     break;
08009 
08010   case 303:
08011 
08012 /* Line 1806 of yacc.c  */
08013 #line 2807 "parse.y"
08014     {
08015                     /*%%%*/
08016                         (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08017                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08018                     /*%
08019                         $$ = dispatch2(case, $2, $4);
08020                     %*/
08021                     }
08022     break;
08023 
08024   case 304:
08025 
08026 /* Line 1806 of yacc.c  */
08027 #line 2816 "parse.y"
08028     {
08029                     /*%%%*/
08030                         (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08031                     /*%
08032                         $$ = dispatch2(case, Qnil, $3);
08033                     %*/
08034                     }
08035     break;
08036 
08037   case 305:
08038 
08039 /* Line 1806 of yacc.c  */
08040 #line 2824 "parse.y"
08041     {COND_PUSH(1);}
08042     break;
08043 
08044   case 306:
08045 
08046 /* Line 1806 of yacc.c  */
08047 #line 2826 "parse.y"
08048     {COND_POP();}
08049     break;
08050 
08051   case 307:
08052 
08053 /* Line 1806 of yacc.c  */
08054 #line 2829 "parse.y"
08055     {
08056                     /*%%%*/
08057                         /*
08058                          *  for a, b, c in e
08059                          *  #=>
08060                          *  e.each{|*x| a, b, c = x
08061                          *
08062                          *  for a in e
08063                          *  #=>
08064                          *  e.each{|x| a, = x}
08065                          */
08066                         ID id = internal_id();
08067                         ID *tbl = ALLOC_N(ID, 2);
08068                         NODE *m = NEW_ARGS_AUX(0, 0);
08069                         NODE *args, *scope;
08070 
08071                         if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08072                             /* if args.length == 1 && args[0].kind_of?(Array)
08073                              *   args = args[0]
08074                              * end
08075                              */
08076                             NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08077                             NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08078                             m->nd_next = block_append(
08079                                 NEW_IF(
08080                                     NEW_NODE(NODE_AND,
08081                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("length"), 0),
08082                                                       rb_intern("=="), one),
08083                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero),
08084                                                       rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08085                                              0),
08086                                     NEW_DASGN_CURR(id,
08087                                                    NEW_CALL(NEW_DVAR(id), rb_intern("[]"), zero)),
08088                                     0),
08089                                 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08090 
08091                             args = new_args(m, 0, id, 0, 0);
08092                         }
08093                         else {
08094                             if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08095                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08096                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08097                                 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08098                                 m->nd_plen = 1;
08099                                 m->nd_next = (yyvsp[(2) - (9)].node);
08100                                 args = new_args(m, 0, 0, 0, 0);
08101                             }
08102                             else {
08103                                 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08104                                 args = new_args(m, 0, id, 0, 0);
08105                             }
08106                         }
08107                         scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08108                         tbl[0] = 1; tbl[1] = id;
08109                         (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08110                         fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08111                     /*%
08112                         $$ = dispatch3(for, $2, $5, $8);
08113                     %*/
08114                     }
08115     break;
08116 
08117   case 308:
08118 
08119 /* Line 1806 of yacc.c  */
08120 #line 2890 "parse.y"
08121     {
08122                         if (in_def || in_single)
08123                             yyerror("class definition in method body");
08124                         local_push(0);
08125                     /*%%%*/
08126                         (yyval.num) = ruby_sourceline;
08127                     /*%
08128                     %*/
08129                     }
08130     break;
08131 
08132   case 309:
08133 
08134 /* Line 1806 of yacc.c  */
08135 #line 2901 "parse.y"
08136     {
08137                     /*%%%*/
08138                         (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08139                         nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08140                     /*%
08141                         $$ = dispatch3(class, $2, $3, $5);
08142                     %*/
08143                         local_pop();
08144                     }
08145     break;
08146 
08147   case 310:
08148 
08149 /* Line 1806 of yacc.c  */
08150 #line 2911 "parse.y"
08151     {
08152                         (yyval.num) = in_def;
08153                         in_def = 0;
08154                     }
08155     break;
08156 
08157   case 311:
08158 
08159 /* Line 1806 of yacc.c  */
08160 #line 2916 "parse.y"
08161     {
08162                         (yyval.num) = in_single;
08163                         in_single = 0;
08164                         local_push(0);
08165                     }
08166     break;
08167 
08168   case 312:
08169 
08170 /* Line 1806 of yacc.c  */
08171 #line 2923 "parse.y"
08172     {
08173                     /*%%%*/
08174                         (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08175                         fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08176                     /*%
08177                         $$ = dispatch2(sclass, $3, $7);
08178                     %*/
08179                         local_pop();
08180                         in_def = (yyvsp[(4) - (8)].num);
08181                         in_single = (yyvsp[(6) - (8)].num);
08182                     }
08183     break;
08184 
08185   case 313:
08186 
08187 /* Line 1806 of yacc.c  */
08188 #line 2935 "parse.y"
08189     {
08190                         if (in_def || in_single)
08191                             yyerror("module definition in method body");
08192                         local_push(0);
08193                     /*%%%*/
08194                         (yyval.num) = ruby_sourceline;
08195                     /*%
08196                     %*/
08197                     }
08198     break;
08199 
08200   case 314:
08201 
08202 /* Line 1806 of yacc.c  */
08203 #line 2946 "parse.y"
08204     {
08205                     /*%%%*/
08206                         (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08207                         nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08208                     /*%
08209                         $$ = dispatch2(module, $2, $4);
08210                     %*/
08211                         local_pop();
08212                     }
08213     break;
08214 
08215   case 315:
08216 
08217 /* Line 1806 of yacc.c  */
08218 #line 2956 "parse.y"
08219     {
08220                         (yyval.id) = cur_mid;
08221                         cur_mid = (yyvsp[(2) - (2)].id);
08222                         in_def++;
08223                         local_push(0);
08224                     }
08225     break;
08226 
08227   case 316:
08228 
08229 /* Line 1806 of yacc.c  */
08230 #line 2965 "parse.y"
08231     {
08232                     /*%%%*/
08233                         NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08234                         reduce_nodes(&body);
08235                         (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08236                         nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08237                     /*%
08238                         $$ = dispatch3(def, $2, $4, $5);
08239                     %*/
08240                         local_pop();
08241                         in_def--;
08242                         cur_mid = (yyvsp[(3) - (6)].id);
08243                     }
08244     break;
08245 
08246   case 317:
08247 
08248 /* Line 1806 of yacc.c  */
08249 #line 2978 "parse.y"
08250     {lex_state = EXPR_FNAME;}
08251     break;
08252 
08253   case 318:
08254 
08255 /* Line 1806 of yacc.c  */
08256 #line 2979 "parse.y"
08257     {
08258                         in_single++;
08259                         lex_state = EXPR_ENDFN; /* force for args */
08260                         local_push(0);
08261                     }
08262     break;
08263 
08264   case 319:
08265 
08266 /* Line 1806 of yacc.c  */
08267 #line 2987 "parse.y"
08268     {
08269                     /*%%%*/
08270                         NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08271                         reduce_nodes(&body);
08272                         (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08273                         nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08274                     /*%
08275                         $$ = dispatch5(defs, $2, $3, $5, $7, $8);
08276                     %*/
08277                         local_pop();
08278                         in_single--;
08279                     }
08280     break;
08281 
08282   case 320:
08283 
08284 /* Line 1806 of yacc.c  */
08285 #line 3000 "parse.y"
08286     {
08287                     /*%%%*/
08288                         (yyval.node) = NEW_BREAK(0);
08289                     /*%
08290                         $$ = dispatch1(break, arg_new());
08291                     %*/
08292                     }
08293     break;
08294 
08295   case 321:
08296 
08297 /* Line 1806 of yacc.c  */
08298 #line 3008 "parse.y"
08299     {
08300                     /*%%%*/
08301                         (yyval.node) = NEW_NEXT(0);
08302                     /*%
08303                         $$ = dispatch1(next, arg_new());
08304                     %*/
08305                     }
08306     break;
08307 
08308   case 322:
08309 
08310 /* Line 1806 of yacc.c  */
08311 #line 3016 "parse.y"
08312     {
08313                     /*%%%*/
08314                         (yyval.node) = NEW_REDO();
08315                     /*%
08316                         $$ = dispatch0(redo);
08317                     %*/
08318                     }
08319     break;
08320 
08321   case 323:
08322 
08323 /* Line 1806 of yacc.c  */
08324 #line 3024 "parse.y"
08325     {
08326                     /*%%%*/
08327                         (yyval.node) = NEW_RETRY();
08328                     /*%
08329                         $$ = dispatch0(retry);
08330                     %*/
08331                     }
08332     break;
08333 
08334   case 324:
08335 
08336 /* Line 1806 of yacc.c  */
08337 #line 3034 "parse.y"
08338     {
08339                     /*%%%*/
08340                         value_expr((yyvsp[(1) - (1)].node));
08341                         (yyval.node) = (yyvsp[(1) - (1)].node);
08342                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
08343                     /*%
08344                         $$ = $1;
08345                     %*/
08346                     }
08347     break;
08348 
08349   case 325:
08350 
08351 /* Line 1806 of yacc.c  */
08352 #line 3046 "parse.y"
08353     {
08354                         token_info_push("begin");
08355                     }
08356     break;
08357 
08358   case 326:
08359 
08360 /* Line 1806 of yacc.c  */
08361 #line 3052 "parse.y"
08362     {
08363                         token_info_push("if");
08364                     }
08365     break;
08366 
08367   case 327:
08368 
08369 /* Line 1806 of yacc.c  */
08370 #line 3058 "parse.y"
08371     {
08372                         token_info_push("unless");
08373                     }
08374     break;
08375 
08376   case 328:
08377 
08378 /* Line 1806 of yacc.c  */
08379 #line 3064 "parse.y"
08380     {
08381                         token_info_push("while");
08382                     }
08383     break;
08384 
08385   case 329:
08386 
08387 /* Line 1806 of yacc.c  */
08388 #line 3070 "parse.y"
08389     {
08390                         token_info_push("until");
08391                     }
08392     break;
08393 
08394   case 330:
08395 
08396 /* Line 1806 of yacc.c  */
08397 #line 3076 "parse.y"
08398     {
08399                         token_info_push("case");
08400                     }
08401     break;
08402 
08403   case 331:
08404 
08405 /* Line 1806 of yacc.c  */
08406 #line 3082 "parse.y"
08407     {
08408                         token_info_push("for");
08409                     }
08410     break;
08411 
08412   case 332:
08413 
08414 /* Line 1806 of yacc.c  */
08415 #line 3088 "parse.y"
08416     {
08417                         token_info_push("class");
08418                     }
08419     break;
08420 
08421   case 333:
08422 
08423 /* Line 1806 of yacc.c  */
08424 #line 3094 "parse.y"
08425     {
08426                         token_info_push("module");
08427                     }
08428     break;
08429 
08430   case 334:
08431 
08432 /* Line 1806 of yacc.c  */
08433 #line 3100 "parse.y"
08434     {
08435                         token_info_push("def");
08436                     /*%%%*/
08437                         (yyval.num) = ruby_sourceline;
08438                     /*%
08439                     %*/
08440                     }
08441     break;
08442 
08443   case 335:
08444 
08445 /* Line 1806 of yacc.c  */
08446 #line 3110 "parse.y"
08447     {
08448                         token_info_pop("end");
08449                     }
08450     break;
08451 
08452   case 342:
08453 
08454 /* Line 1806 of yacc.c  */
08455 #line 3140 "parse.y"
08456     {
08457                     /*%%%*/
08458                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08459                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08460                     /*%
08461                         $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
08462                     %*/
08463                     }
08464     break;
08465 
08466   case 344:
08467 
08468 /* Line 1806 of yacc.c  */
08469 #line 3152 "parse.y"
08470     {
08471                     /*%%%*/
08472                         (yyval.node) = (yyvsp[(2) - (2)].node);
08473                     /*%
08474                         $$ = dispatch1(else, $2);
08475                     %*/
08476                     }
08477     break;
08478 
08479   case 347:
08480 
08481 /* Line 1806 of yacc.c  */
08482 #line 3166 "parse.y"
08483     {
08484                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08485                     /*%%%*/
08486                     /*%
08487                         $$ = dispatch1(mlhs_paren, $$);
08488                     %*/
08489                     }
08490     break;
08491 
08492   case 348:
08493 
08494 /* Line 1806 of yacc.c  */
08495 #line 3174 "parse.y"
08496     {
08497                     /*%%%*/
08498                         (yyval.node) = (yyvsp[(2) - (3)].node);
08499                     /*%
08500                         $$ = dispatch1(mlhs_paren, $2);
08501                     %*/
08502                     }
08503     break;
08504 
08505   case 349:
08506 
08507 /* Line 1806 of yacc.c  */
08508 #line 3184 "parse.y"
08509     {
08510                     /*%%%*/
08511                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08512                     /*%
08513                         $$ = mlhs_add(mlhs_new(), $1);
08514                     %*/
08515                     }
08516     break;
08517 
08518   case 350:
08519 
08520 /* Line 1806 of yacc.c  */
08521 #line 3192 "parse.y"
08522     {
08523                     /*%%%*/
08524                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08525                     /*%
08526                         $$ = mlhs_add($1, $3);
08527                     %*/
08528                     }
08529     break;
08530 
08531   case 351:
08532 
08533 /* Line 1806 of yacc.c  */
08534 #line 3202 "parse.y"
08535     {
08536                     /*%%%*/
08537                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08538                     /*%
08539                         $$ = $1;
08540                     %*/
08541                     }
08542     break;
08543 
08544   case 352:
08545 
08546 /* Line 1806 of yacc.c  */
08547 #line 3210 "parse.y"
08548     {
08549                         (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08550                     /*%%%*/
08551                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08552                     /*%
08553                         $$ = mlhs_add_star($1, $$);
08554                     %*/
08555                     }
08556     break;
08557 
08558   case 353:
08559 
08560 /* Line 1806 of yacc.c  */
08561 #line 3219 "parse.y"
08562     {
08563                         (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08564                     /*%%%*/
08565                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08566                     /*%
08567                         $$ = mlhs_add_star($1, $$);
08568                     %*/
08569                     }
08570     break;
08571 
08572   case 354:
08573 
08574 /* Line 1806 of yacc.c  */
08575 #line 3228 "parse.y"
08576     {
08577                     /*%%%*/
08578                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08579                     /*%
08580                         $$ = mlhs_add_star($1, Qnil);
08581                     %*/
08582                     }
08583     break;
08584 
08585   case 355:
08586 
08587 /* Line 1806 of yacc.c  */
08588 #line 3236 "parse.y"
08589     {
08590                     /*%%%*/
08591                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08592                     /*%
08593                         $$ = mlhs_add_star($1, $5);
08594                     %*/
08595                     }
08596     break;
08597 
08598   case 356:
08599 
08600 /* Line 1806 of yacc.c  */
08601 #line 3244 "parse.y"
08602     {
08603                         (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08604                     /*%%%*/
08605                         (yyval.node) = NEW_MASGN(0, (yyval.node));
08606                     /*%
08607                         $$ = mlhs_add_star(mlhs_new(), $$);
08608                     %*/
08609                     }
08610     break;
08611 
08612   case 357:
08613 
08614 /* Line 1806 of yacc.c  */
08615 #line 3253 "parse.y"
08616     {
08617                         (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08618                     /*%%%*/
08619                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08620                     /*%
08621                       #if 0
08622                       TODO: Check me
08623                       #endif
08624                         $$ = mlhs_add_star($$, $4);
08625                     %*/
08626                     }
08627     break;
08628 
08629   case 358:
08630 
08631 /* Line 1806 of yacc.c  */
08632 #line 3265 "parse.y"
08633     {
08634                     /*%%%*/
08635                         (yyval.node) = NEW_MASGN(0, -1);
08636                     /*%
08637                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08638                     %*/
08639                     }
08640     break;
08641 
08642   case 359:
08643 
08644 /* Line 1806 of yacc.c  */
08645 #line 3273 "parse.y"
08646     {
08647                     /*%%%*/
08648                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08649                     /*%
08650                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08651                     %*/
08652                     }
08653     break;
08654 
08655   case 360:
08656 
08657 /* Line 1806 of yacc.c  */
08658 #line 3283 "parse.y"
08659     {
08660                     /*%%%*/
08661                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
08662                     /*%
08663                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
08664                     %*/
08665                     }
08666     break;
08667 
08668   case 361:
08669 
08670 /* Line 1806 of yacc.c  */
08671 #line 3291 "parse.y"
08672     {
08673                     /*%%%*/
08674                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
08675                     /*%
08676                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
08677                     %*/
08678                     }
08679     break;
08680 
08681   case 362:
08682 
08683 /* Line 1806 of yacc.c  */
08684 #line 3299 "parse.y"
08685     {
08686                     /*%%%*/
08687                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
08688                     /*%
08689                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
08690                     %*/
08691                     }
08692     break;
08693 
08694   case 363:
08695 
08696 /* Line 1806 of yacc.c  */
08697 #line 3307 "parse.y"
08698     {
08699                     /*%%%*/
08700                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08701                     /*%
08702                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
08703                     %*/
08704                     }
08705     break;
08706 
08707   case 364:
08708 
08709 /* Line 1806 of yacc.c  */
08710 #line 3315 "parse.y"
08711     {
08712                     /*%%%*/
08713                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08714                     /*%
08715                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
08716                     %*/
08717                     }
08718     break;
08719 
08720   case 365:
08721 
08722 /* Line 1806 of yacc.c  */
08723 #line 3323 "parse.y"
08724     {
08725                     /*%%%*/
08726                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 1, 0, 0);
08727                     /*%
08728                         $$ = params_new($1, Qnil, Qnil, Qnil, Qnil);
08729                         dispatch1(excessed_comma, $$);
08730                     %*/
08731                     }
08732     break;
08733 
08734   case 366:
08735 
08736 /* Line 1806 of yacc.c  */
08737 #line 3332 "parse.y"
08738     {
08739                     /*%%%*/
08740                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08741                     /*%
08742                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
08743                     %*/
08744                     }
08745     break;
08746 
08747   case 367:
08748 
08749 /* Line 1806 of yacc.c  */
08750 #line 3340 "parse.y"
08751     {
08752                     /*%%%*/
08753                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
08754                     /*%
08755                         $$ = params_new($1, Qnil,Qnil, Qnil, escape_Qundef($2));
08756                     %*/
08757                     }
08758     break;
08759 
08760   case 368:
08761 
08762 /* Line 1806 of yacc.c  */
08763 #line 3348 "parse.y"
08764     {
08765                     /*%%%*/
08766                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
08767                     /*%
08768                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
08769                     %*/
08770                     }
08771     break;
08772 
08773   case 369:
08774 
08775 /* Line 1806 of yacc.c  */
08776 #line 3356 "parse.y"
08777     {
08778                     /*%%%*/
08779                         (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
08780                     /*%
08781                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
08782                     %*/
08783                     }
08784     break;
08785 
08786   case 370:
08787 
08788 /* Line 1806 of yacc.c  */
08789 #line 3364 "parse.y"
08790     {
08791                     /*%%%*/
08792                         (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
08793                     /*%
08794                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
08795                     %*/
08796                     }
08797     break;
08798 
08799   case 371:
08800 
08801 /* Line 1806 of yacc.c  */
08802 #line 3372 "parse.y"
08803     {
08804                     /*%%%*/
08805                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08806                     /*%
08807                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
08808                     %*/
08809                     }
08810     break;
08811 
08812   case 372:
08813 
08814 /* Line 1806 of yacc.c  */
08815 #line 3380 "parse.y"
08816     {
08817                     /*%%%*/
08818                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
08819                     /*%
08820                         $$ = params_new(Qnil, Qnil, $1, Qnil, escape_Qundef($2));
08821                     %*/
08822                     }
08823     break;
08824 
08825   case 373:
08826 
08827 /* Line 1806 of yacc.c  */
08828 #line 3388 "parse.y"
08829     {
08830                     /*%%%*/
08831                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
08832                     /*%
08833                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
08834                     %*/
08835                     }
08836     break;
08837 
08838   case 374:
08839 
08840 /* Line 1806 of yacc.c  */
08841 #line 3396 "parse.y"
08842     {
08843                     /*%%%*/
08844                         (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
08845                     /*%
08846                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
08847                     %*/
08848                     }
08849     break;
08850 
08851   case 376:
08852 
08853 /* Line 1806 of yacc.c  */
08854 #line 3407 "parse.y"
08855     {
08856                         command_start = TRUE;
08857                     }
08858     break;
08859 
08860   case 377:
08861 
08862 /* Line 1806 of yacc.c  */
08863 #line 3413 "parse.y"
08864     {
08865                     /*%%%*/
08866                         (yyval.node) = 0;
08867                     /*%
08868                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08869                                           escape_Qundef($2));
08870                     %*/
08871                     }
08872     break;
08873 
08874   case 378:
08875 
08876 /* Line 1806 of yacc.c  */
08877 #line 3422 "parse.y"
08878     {
08879                     /*%%%*/
08880                         (yyval.node) = 0;
08881                     /*%
08882                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil),
08883                                           Qnil);
08884                     %*/
08885                     }
08886     break;
08887 
08888   case 379:
08889 
08890 /* Line 1806 of yacc.c  */
08891 #line 3431 "parse.y"
08892     {
08893                     /*%%%*/
08894                         (yyval.node) = (yyvsp[(2) - (4)].node);
08895                     /*%
08896                         $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
08897                     %*/
08898                     }
08899     break;
08900 
08901   case 381:
08902 
08903 /* Line 1806 of yacc.c  */
08904 #line 3443 "parse.y"
08905     {
08906                     /*%%%*/
08907                         (yyval.node) = 0;
08908                     /*%
08909                         $$ = $2;
08910                     %*/
08911                     }
08912     break;
08913 
08914   case 384:
08915 
08916 /* Line 1806 of yacc.c  */
08917 #line 3469 "parse.y"
08918     {
08919                         new_bv(get_id((yyvsp[(1) - (1)].id)));
08920                     /*%%%*/
08921                     /*%
08922                         $$ = get_value($1);
08923                     %*/
08924                     }
08925     break;
08926 
08927   case 385:
08928 
08929 /* Line 1806 of yacc.c  */
08930 #line 3477 "parse.y"
08931     {
08932                         (yyval.node) = 0;
08933                     }
08934     break;
08935 
08936   case 386:
08937 
08938 /* Line 1806 of yacc.c  */
08939 #line 3482 "parse.y"
08940     {
08941                         (yyval.vars) = dyna_push();
08942                     }
08943     break;
08944 
08945   case 387:
08946 
08947 /* Line 1806 of yacc.c  */
08948 #line 3485 "parse.y"
08949     {
08950                         (yyval.num) = lpar_beg;
08951                         lpar_beg = ++paren_nest;
08952                     }
08953     break;
08954 
08955   case 388:
08956 
08957 /* Line 1806 of yacc.c  */
08958 #line 3491 "parse.y"
08959     {
08960                         lpar_beg = (yyvsp[(2) - (4)].num);
08961                     /*%%%*/
08962                         (yyval.node) = (yyvsp[(3) - (4)].node);
08963                         (yyval.node)->nd_body = NEW_SCOPE((yyvsp[(3) - (4)].node)->nd_head, (yyvsp[(4) - (4)].node));
08964                     /*%
08965                         $$ = dispatch2(lambda, $3, $4);
08966                     %*/
08967                         dyna_pop((yyvsp[(1) - (4)].vars));
08968                     }
08969     break;
08970 
08971   case 389:
08972 
08973 /* Line 1806 of yacc.c  */
08974 #line 3504 "parse.y"
08975     {
08976                     /*%%%*/
08977                         (yyval.node) = NEW_LAMBDA((yyvsp[(2) - (4)].node));
08978                     /*%
08979                         $$ = dispatch1(paren, $2);
08980                     %*/
08981                     }
08982     break;
08983 
08984   case 390:
08985 
08986 /* Line 1806 of yacc.c  */
08987 #line 3512 "parse.y"
08988     {
08989                     /*%%%*/
08990                         (yyval.node) = NEW_LAMBDA((yyvsp[(1) - (1)].node));
08991                     /*%
08992                         $$ = $1;
08993                     %*/
08994                     }
08995     break;
08996 
08997   case 391:
08998 
08999 /* Line 1806 of yacc.c  */
09000 #line 3522 "parse.y"
09001     {
09002                         (yyval.node) = (yyvsp[(2) - (3)].node);
09003                     }
09004     break;
09005 
09006   case 392:
09007 
09008 /* Line 1806 of yacc.c  */
09009 #line 3526 "parse.y"
09010     {
09011                         (yyval.node) = (yyvsp[(2) - (3)].node);
09012                     }
09013     break;
09014 
09015   case 393:
09016 
09017 /* Line 1806 of yacc.c  */
09018 #line 3532 "parse.y"
09019     {
09020                         (yyvsp[(1) - (1)].vars) = dyna_push();
09021                     /*%%%*/
09022                         (yyval.num) = ruby_sourceline;
09023                     /*% %*/
09024                     }
09025     break;
09026 
09027   case 394:
09028 
09029 /* Line 1806 of yacc.c  */
09030 #line 3541 "parse.y"
09031     {
09032                     /*%%%*/
09033                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09034                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09035                     /*%
09036                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09037                     %*/
09038                         dyna_pop((yyvsp[(1) - (5)].vars));
09039                     }
09040     break;
09041 
09042   case 395:
09043 
09044 /* Line 1806 of yacc.c  */
09045 #line 3553 "parse.y"
09046     {
09047                     /*%%%*/
09048                         if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09049                             compile_error(PARSER_ARG "block given to yield");
09050                         }
09051                         else {
09052                             block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09053                         }
09054                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09055                         (yyval.node) = (yyvsp[(2) - (2)].node);
09056                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09057                     /*%
09058                         $$ = method_add_block($1, $2);
09059                     %*/
09060                     }
09061     break;
09062 
09063   case 396:
09064 
09065 /* Line 1806 of yacc.c  */
09066 #line 3569 "parse.y"
09067     {
09068                     /*%%%*/
09069                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09070                     /*%
09071                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09072                         $$ = method_optarg($$, $4);
09073                     %*/
09074                     }
09075     break;
09076 
09077   case 397:
09078 
09079 /* Line 1806 of yacc.c  */
09080 #line 3578 "parse.y"
09081     {
09082                     /*%%%*/
09083                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09084                     /*%
09085                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09086                         $$ = method_optarg($$, $4);
09087                     %*/
09088                     }
09089     break;
09090 
09091   case 398:
09092 
09093 /* Line 1806 of yacc.c  */
09094 #line 3589 "parse.y"
09095     {
09096                     /*%%%*/
09097                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
09098                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
09099                     /*%
09100                         $$ = method_arg(dispatch1(fcall, $1), $2);
09101                     %*/
09102                     }
09103     break;
09104 
09105   case 399:
09106 
09107 /* Line 1806 of yacc.c  */
09108 #line 3598 "parse.y"
09109     {
09110                     /*%%%*/
09111                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09112                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09113                     /*%
09114                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09115                         $$ = method_optarg($$, $4);
09116                     %*/
09117                     }
09118     break;
09119 
09120   case 400:
09121 
09122 /* Line 1806 of yacc.c  */
09123 #line 3608 "parse.y"
09124     {
09125                     /*%%%*/
09126                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09127                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09128                     /*%
09129                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09130                         $$ = method_optarg($$, $4);
09131                     %*/
09132                     }
09133     break;
09134 
09135   case 401:
09136 
09137 /* Line 1806 of yacc.c  */
09138 #line 3618 "parse.y"
09139     {
09140                     /*%%%*/
09141                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09142                     /*%
09143                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09144                     %*/
09145                     }
09146     break;
09147 
09148   case 402:
09149 
09150 /* Line 1806 of yacc.c  */
09151 #line 3626 "parse.y"
09152     {
09153                     /*%%%*/
09154                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09155                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09156                     /*%
09157                         $$ = dispatch3(call, $1, ripper_id2sym('.'),
09158                                        ripper_intern("call"));
09159                         $$ = method_optarg($$, $3);
09160                     %*/
09161                     }
09162     break;
09163 
09164   case 403:
09165 
09166 /* Line 1806 of yacc.c  */
09167 #line 3637 "parse.y"
09168     {
09169                     /*%%%*/
09170                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), rb_intern("call"), (yyvsp[(3) - (3)].node));
09171                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
09172                     /*%
09173                         $$ = dispatch3(call, $1, ripper_intern("::"),
09174                                        ripper_intern("call"));
09175                         $$ = method_optarg($$, $3);
09176                     %*/
09177                     }
09178     break;
09179 
09180   case 404:
09181 
09182 /* Line 1806 of yacc.c  */
09183 #line 3648 "parse.y"
09184     {
09185                     /*%%%*/
09186                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09187                     /*%
09188                         $$ = dispatch1(super, $2);
09189                     %*/
09190                     }
09191     break;
09192 
09193   case 405:
09194 
09195 /* Line 1806 of yacc.c  */
09196 #line 3656 "parse.y"
09197     {
09198                     /*%%%*/
09199                         (yyval.node) = NEW_ZSUPER();
09200                     /*%
09201                         $$ = dispatch0(zsuper);
09202                     %*/
09203                     }
09204     break;
09205 
09206   case 406:
09207 
09208 /* Line 1806 of yacc.c  */
09209 #line 3664 "parse.y"
09210     {
09211                     /*%%%*/
09212                         if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09213                             (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09214                         else
09215                             (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09216                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09217                     /*%
09218                         $$ = dispatch2(aref, $1, escape_Qundef($3));
09219                     %*/
09220                     }
09221     break;
09222 
09223   case 407:
09224 
09225 /* Line 1806 of yacc.c  */
09226 #line 3678 "parse.y"
09227     {
09228                         (yyvsp[(1) - (1)].vars) = dyna_push();
09229                     /*%%%*/
09230                         (yyval.num) = ruby_sourceline;
09231                     /*%
09232                     %*/
09233                     }
09234     break;
09235 
09236   case 408:
09237 
09238 /* Line 1806 of yacc.c  */
09239 #line 3687 "parse.y"
09240     {
09241                     /*%%%*/
09242                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09243                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09244                     /*%
09245                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
09246                     %*/
09247                         dyna_pop((yyvsp[(1) - (5)].vars));
09248                     }
09249     break;
09250 
09251   case 409:
09252 
09253 /* Line 1806 of yacc.c  */
09254 #line 3697 "parse.y"
09255     {
09256                         (yyvsp[(1) - (1)].vars) = dyna_push();
09257                     /*%%%*/
09258                         (yyval.num) = ruby_sourceline;
09259                     /*%
09260                     %*/
09261                     }
09262     break;
09263 
09264   case 410:
09265 
09266 /* Line 1806 of yacc.c  */
09267 #line 3706 "parse.y"
09268     {
09269                     /*%%%*/
09270                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09271                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09272                     /*%
09273                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09274                     %*/
09275                         dyna_pop((yyvsp[(1) - (5)].vars));
09276                     }
09277     break;
09278 
09279   case 411:
09280 
09281 /* Line 1806 of yacc.c  */
09282 #line 3720 "parse.y"
09283     {
09284                     /*%%%*/
09285                         (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09286                     /*%
09287                         $$ = dispatch3(when, $2, $4, escape_Qundef($5));
09288                     %*/
09289                     }
09290     break;
09291 
09292   case 414:
09293 
09294 /* Line 1806 of yacc.c  */
09295 #line 3736 "parse.y"
09296     {
09297                     /*%%%*/
09298                         if ((yyvsp[(3) - (6)].node)) {
09299                             (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09300                             (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09301                         }
09302                         (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09303                         fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09304                     /*%
09305                         $$ = dispatch4(rescue,
09306                                        escape_Qundef($2),
09307                                        escape_Qundef($3),
09308                                        escape_Qundef($5),
09309                                        escape_Qundef($6));
09310                     %*/
09311                     }
09312     break;
09313 
09314   case 416:
09315 
09316 /* Line 1806 of yacc.c  */
09317 #line 3756 "parse.y"
09318     {
09319                     /*%%%*/
09320                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09321                     /*%
09322                         $$ = rb_ary_new3(1, $1);
09323                     %*/
09324                     }
09325     break;
09326 
09327   case 417:
09328 
09329 /* Line 1806 of yacc.c  */
09330 #line 3764 "parse.y"
09331     {
09332                     /*%%%*/
09333                         if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09334                     /*%
09335                         $$ = $1;
09336                     %*/
09337                     }
09338     break;
09339 
09340   case 419:
09341 
09342 /* Line 1806 of yacc.c  */
09343 #line 3775 "parse.y"
09344     {
09345                         (yyval.node) = (yyvsp[(2) - (2)].node);
09346                     }
09347     break;
09348 
09349   case 421:
09350 
09351 /* Line 1806 of yacc.c  */
09352 #line 3782 "parse.y"
09353     {
09354                     /*%%%*/
09355                         (yyval.node) = (yyvsp[(2) - (2)].node);
09356                     /*%
09357                         $$ = dispatch1(ensure, $2);
09358                     %*/
09359                     }
09360     break;
09361 
09362   case 424:
09363 
09364 /* Line 1806 of yacc.c  */
09365 #line 3794 "parse.y"
09366     {
09367                     /*%%%*/
09368                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09369                     /*%
09370                         $$ = dispatch1(symbol_literal, $1);
09371                     %*/
09372                     }
09373     break;
09374 
09375   case 426:
09376 
09377 /* Line 1806 of yacc.c  */
09378 #line 3805 "parse.y"
09379     {
09380                     /*%%%*/
09381                         NODE *node = (yyvsp[(1) - (1)].node);
09382                         if (!node) {
09383                             node = NEW_STR(STR_NEW0());
09384                         }
09385                         else {
09386                             node = evstr2dstr(node);
09387                         }
09388                         (yyval.node) = node;
09389                     /*%
09390                         $$ = $1;
09391                     %*/
09392                     }
09393     break;
09394 
09395   case 429:
09396 
09397 /* Line 1806 of yacc.c  */
09398 #line 3824 "parse.y"
09399     {
09400                     /*%%%*/
09401                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09402                     /*%
09403                         $$ = dispatch2(string_concat, $1, $2);
09404                     %*/
09405                     }
09406     break;
09407 
09408   case 430:
09409 
09410 /* Line 1806 of yacc.c  */
09411 #line 3834 "parse.y"
09412     {
09413                     /*%%%*/
09414                         (yyval.node) = (yyvsp[(2) - (3)].node);
09415                     /*%
09416                         $$ = dispatch1(string_literal, $2);
09417                     %*/
09418                     }
09419     break;
09420 
09421   case 431:
09422 
09423 /* Line 1806 of yacc.c  */
09424 #line 3844 "parse.y"
09425     {
09426                     /*%%%*/
09427                         NODE *node = (yyvsp[(2) - (3)].node);
09428                         if (!node) {
09429                             node = NEW_XSTR(STR_NEW0());
09430                         }
09431                         else {
09432                             switch (nd_type(node)) {
09433                               case NODE_STR:
09434                                 nd_set_type(node, NODE_XSTR);
09435                                 break;
09436                               case NODE_DSTR:
09437                                 nd_set_type(node, NODE_DXSTR);
09438                                 break;
09439                               default:
09440                                 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09441                                 break;
09442                             }
09443                         }
09444                         (yyval.node) = node;
09445                     /*%
09446                         $$ = dispatch1(xstring_literal, $2);
09447                     %*/
09448                     }
09449     break;
09450 
09451   case 432:
09452 
09453 /* Line 1806 of yacc.c  */
09454 #line 3871 "parse.y"
09455     {
09456                     /*%%%*/
09457                         int options = (yyvsp[(3) - (3)].num);
09458                         NODE *node = (yyvsp[(2) - (3)].node);
09459                         NODE *list, *prev;
09460                         if (!node) {
09461                             node = NEW_LIT(reg_compile(STR_NEW0(), options));
09462                         }
09463                         else switch (nd_type(node)) {
09464                           case NODE_STR:
09465                             {
09466                                 VALUE src = node->nd_lit;
09467                                 nd_set_type(node, NODE_LIT);
09468                                 node->nd_lit = reg_compile(src, options);
09469                             }
09470                             break;
09471                           default:
09472                             node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09473                           case NODE_DSTR:
09474                             if (options & RE_OPTION_ONCE) {
09475                                 nd_set_type(node, NODE_DREGX_ONCE);
09476                             }
09477                             else {
09478                                 nd_set_type(node, NODE_DREGX);
09479                             }
09480                             node->nd_cflag = options & RE_OPTION_MASK;
09481                             if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09482                             for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09483                                 if (nd_type(list->nd_head) == NODE_STR) {
09484                                     VALUE tail = list->nd_head->nd_lit;
09485                                     if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09486                                         VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09487                                         if (!literal_concat0(parser, lit, tail)) {
09488                                             node = 0;
09489                                             break;
09490                                         }
09491                                         rb_str_resize(tail, 0);
09492                                         prev->nd_next = list->nd_next;
09493                                         rb_gc_force_recycle((VALUE)list->nd_head);
09494                                         rb_gc_force_recycle((VALUE)list);
09495                                         list = prev;
09496                                     }
09497                                     else {
09498                                         prev = list;
09499                                     }
09500                                 }
09501                                 else {
09502                                     prev = 0;
09503                                 }
09504                             }
09505                             if (!node->nd_next) {
09506                                 VALUE src = node->nd_lit;
09507                                 nd_set_type(node, NODE_LIT);
09508                                 node->nd_lit = reg_compile(src, options);
09509                             }
09510                             break;
09511                         }
09512                         (yyval.node) = node;
09513                     /*%
09514                         $$ = dispatch2(regexp_literal, $2, $3);
09515                     %*/
09516                     }
09517     break;
09518 
09519   case 433:
09520 
09521 /* Line 1806 of yacc.c  */
09522 #line 3936 "parse.y"
09523     {
09524                     /*%%%*/
09525                         (yyval.node) = NEW_ZARRAY();
09526                     /*%
09527                         $$ = dispatch0(words_new);
09528                         $$ = dispatch1(array, $$);
09529                     %*/
09530                     }
09531     break;
09532 
09533   case 434:
09534 
09535 /* Line 1806 of yacc.c  */
09536 #line 3945 "parse.y"
09537     {
09538                     /*%%%*/
09539                         (yyval.node) = (yyvsp[(2) - (3)].node);
09540                     /*%
09541                         $$ = dispatch1(array, $2);
09542                     %*/
09543                     }
09544     break;
09545 
09546   case 435:
09547 
09548 /* Line 1806 of yacc.c  */
09549 #line 3955 "parse.y"
09550     {
09551                     /*%%%*/
09552                         (yyval.node) = 0;
09553                     /*%
09554                         $$ = dispatch0(words_new);
09555                     %*/
09556                     }
09557     break;
09558 
09559   case 436:
09560 
09561 /* Line 1806 of yacc.c  */
09562 #line 3963 "parse.y"
09563     {
09564                     /*%%%*/
09565                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09566                     /*%
09567                         $$ = dispatch2(words_add, $1, $2);
09568                     %*/
09569                     }
09570     break;
09571 
09572   case 438:
09573 
09574 /* Line 1806 of yacc.c  */
09575 #line 3981 "parse.y"
09576     {
09577                     /*%%%*/
09578                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09579                     /*%
09580                         $$ = dispatch2(word_add, $1, $2);
09581                     %*/
09582                     }
09583     break;
09584 
09585   case 439:
09586 
09587 /* Line 1806 of yacc.c  */
09588 #line 3991 "parse.y"
09589     {
09590                     /*%%%*/
09591                         (yyval.node) = NEW_ZARRAY();
09592                     /*%
09593                         $$ = dispatch0(qwords_new);
09594                         $$ = dispatch1(array, $$);
09595                     %*/
09596                     }
09597     break;
09598 
09599   case 440:
09600 
09601 /* Line 1806 of yacc.c  */
09602 #line 4000 "parse.y"
09603     {
09604                     /*%%%*/
09605                         (yyval.node) = (yyvsp[(2) - (3)].node);
09606                     /*%
09607                         $$ = dispatch1(array, $2);
09608                     %*/
09609                     }
09610     break;
09611 
09612   case 441:
09613 
09614 /* Line 1806 of yacc.c  */
09615 #line 4010 "parse.y"
09616     {
09617                     /*%%%*/
09618                         (yyval.node) = 0;
09619                     /*%
09620                         $$ = dispatch0(qwords_new);
09621                     %*/
09622                     }
09623     break;
09624 
09625   case 442:
09626 
09627 /* Line 1806 of yacc.c  */
09628 #line 4018 "parse.y"
09629     {
09630                     /*%%%*/
09631                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09632                     /*%
09633                         $$ = dispatch2(qwords_add, $1, $2);
09634                     %*/
09635                     }
09636     break;
09637 
09638   case 443:
09639 
09640 /* Line 1806 of yacc.c  */
09641 #line 4028 "parse.y"
09642     {
09643                     /*%%%*/
09644                         (yyval.node) = 0;
09645                     /*%
09646                         $$ = dispatch0(string_content);
09647                     %*/
09648                     }
09649     break;
09650 
09651   case 444:
09652 
09653 /* Line 1806 of yacc.c  */
09654 #line 4036 "parse.y"
09655     {
09656                     /*%%%*/
09657                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09658                     /*%
09659                         $$ = dispatch2(string_add, $1, $2);
09660                     %*/
09661                     }
09662     break;
09663 
09664   case 445:
09665 
09666 /* Line 1806 of yacc.c  */
09667 #line 4046 "parse.y"
09668     {
09669                     /*%%%*/
09670                         (yyval.node) = 0;
09671                     /*%
09672                         $$ = dispatch0(xstring_new);
09673                     %*/
09674                     }
09675     break;
09676 
09677   case 446:
09678 
09679 /* Line 1806 of yacc.c  */
09680 #line 4054 "parse.y"
09681     {
09682                     /*%%%*/
09683                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09684                     /*%
09685                         $$ = dispatch2(xstring_add, $1, $2);
09686                     %*/
09687                     }
09688     break;
09689 
09690   case 447:
09691 
09692 /* Line 1806 of yacc.c  */
09693 #line 4064 "parse.y"
09694     {
09695                     /*%%%*/
09696                         (yyval.node) = 0;
09697                     /*%
09698                         $$ = dispatch0(regexp_new);
09699                     %*/
09700                     }
09701     break;
09702 
09703   case 448:
09704 
09705 /* Line 1806 of yacc.c  */
09706 #line 4072 "parse.y"
09707     {
09708                     /*%%%*/
09709                         NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
09710                         if (!head) {
09711                             (yyval.node) = tail;
09712                         }
09713                         else if (!tail) {
09714                             (yyval.node) = head;
09715                         }
09716                         else {
09717                             switch (nd_type(head)) {
09718                               case NODE_STR:
09719                                 nd_set_type(head, NODE_DSTR);
09720                                 break;
09721                               case NODE_DSTR:
09722                                 break;
09723                               default:
09724                                 head = list_append(NEW_DSTR(Qnil), head);
09725                                 break;
09726                             }
09727                             (yyval.node) = list_append(head, tail);
09728                         }
09729                     /*%
09730                         $$ = dispatch2(regexp_add, $1, $2);
09731                     %*/
09732                     }
09733     break;
09734 
09735   case 450:
09736 
09737 /* Line 1806 of yacc.c  */
09738 #line 4102 "parse.y"
09739     {
09740                         (yyval.node) = lex_strterm;
09741                         lex_strterm = 0;
09742                         lex_state = EXPR_BEG;
09743                     }
09744     break;
09745 
09746   case 451:
09747 
09748 /* Line 1806 of yacc.c  */
09749 #line 4108 "parse.y"
09750     {
09751                     /*%%%*/
09752                         lex_strterm = (yyvsp[(2) - (3)].node);
09753                         (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
09754                     /*%
09755                         lex_strterm = $<node>2;
09756                         $$ = dispatch1(string_dvar, $3);
09757                     %*/
09758                     }
09759     break;
09760 
09761   case 452:
09762 
09763 /* Line 1806 of yacc.c  */
09764 #line 4118 "parse.y"
09765     {
09766                         (yyvsp[(1) - (1)].val) = cond_stack;
09767                         (yyval.val) = cmdarg_stack;
09768                         cond_stack = 0;
09769                         cmdarg_stack = 0;
09770                     }
09771     break;
09772 
09773   case 453:
09774 
09775 /* Line 1806 of yacc.c  */
09776 #line 4124 "parse.y"
09777     {
09778                         (yyval.node) = lex_strterm;
09779                         lex_strterm = 0;
09780                         lex_state = EXPR_BEG;
09781                     }
09782     break;
09783 
09784   case 454:
09785 
09786 /* Line 1806 of yacc.c  */
09787 #line 4130 "parse.y"
09788     {
09789                         cond_stack = (yyvsp[(1) - (5)].val);
09790                         cmdarg_stack = (yyvsp[(2) - (5)].val);
09791                         lex_strterm = (yyvsp[(3) - (5)].node);
09792                     /*%%%*/
09793                         if ((yyvsp[(4) - (5)].node)) (yyvsp[(4) - (5)].node)->flags &= ~NODE_FL_NEWLINE;
09794                         (yyval.node) = new_evstr((yyvsp[(4) - (5)].node));
09795                     /*%
09796                         $$ = dispatch1(string_embexpr, $4);
09797                     %*/
09798                     }
09799     break;
09800 
09801   case 455:
09802 
09803 /* Line 1806 of yacc.c  */
09804 #line 4144 "parse.y"
09805     {
09806                     /*%%%*/
09807                         (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
09808                     /*%
09809                         $$ = dispatch1(var_ref, $1);
09810                     %*/
09811                     }
09812     break;
09813 
09814   case 456:
09815 
09816 /* Line 1806 of yacc.c  */
09817 #line 4152 "parse.y"
09818     {
09819                     /*%%%*/
09820                         (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
09821                     /*%
09822                         $$ = dispatch1(var_ref, $1);
09823                     %*/
09824                     }
09825     break;
09826 
09827   case 457:
09828 
09829 /* Line 1806 of yacc.c  */
09830 #line 4160 "parse.y"
09831     {
09832                     /*%%%*/
09833                         (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
09834                     /*%
09835                         $$ = dispatch1(var_ref, $1);
09836                     %*/
09837                     }
09838     break;
09839 
09840   case 459:
09841 
09842 /* Line 1806 of yacc.c  */
09843 #line 4171 "parse.y"
09844     {
09845                         lex_state = EXPR_END;
09846                     /*%%%*/
09847                         (yyval.id) = (yyvsp[(2) - (2)].id);
09848                     /*%
09849                         $$ = dispatch1(symbol, $2);
09850                     %*/
09851                     }
09852     break;
09853 
09854   case 464:
09855 
09856 /* Line 1806 of yacc.c  */
09857 #line 4188 "parse.y"
09858     {
09859                         lex_state = EXPR_END;
09860                     /*%%%*/
09861                         if (!((yyval.node) = (yyvsp[(2) - (3)].node))) {
09862                             (yyval.node) = NEW_LIT(ID2SYM(rb_intern("")));
09863                         }
09864                         else {
09865                             VALUE lit;
09866 
09867                             switch (nd_type((yyval.node))) {
09868                               case NODE_DSTR:
09869                                 nd_set_type((yyval.node), NODE_DSYM);
09870                                 break;
09871                               case NODE_STR:
09872                                 lit = (yyval.node)->nd_lit;
09873                                 (yyval.node)->nd_lit = ID2SYM(rb_intern_str(lit));
09874                                 nd_set_type((yyval.node), NODE_LIT);
09875                                 break;
09876                               default:
09877                                 (yyval.node) = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST((yyval.node)));
09878                                 break;
09879                             }
09880                         }
09881                     /*%
09882                         $$ = dispatch1(dyna_symbol, $2);
09883                     %*/
09884                     }
09885     break;
09886 
09887   case 467:
09888 
09889 /* Line 1806 of yacc.c  */
09890 #line 4220 "parse.y"
09891     {
09892                     /*%%%*/
09893                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09894                     /*%
09895                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
09896                     %*/
09897                     }
09898     break;
09899 
09900   case 468:
09901 
09902 /* Line 1806 of yacc.c  */
09903 #line 4228 "parse.y"
09904     {
09905                     /*%%%*/
09906                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
09907                     /*%
09908                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
09909                     %*/
09910                     }
09911     break;
09912 
09913   case 474:
09914 
09915 /* Line 1806 of yacc.c  */
09916 #line 4242 "parse.y"
09917     {ifndef_ripper((yyval.id) = keyword_nil);}
09918     break;
09919 
09920   case 475:
09921 
09922 /* Line 1806 of yacc.c  */
09923 #line 4243 "parse.y"
09924     {ifndef_ripper((yyval.id) = keyword_self);}
09925     break;
09926 
09927   case 476:
09928 
09929 /* Line 1806 of yacc.c  */
09930 #line 4244 "parse.y"
09931     {ifndef_ripper((yyval.id) = keyword_true);}
09932     break;
09933 
09934   case 477:
09935 
09936 /* Line 1806 of yacc.c  */
09937 #line 4245 "parse.y"
09938     {ifndef_ripper((yyval.id) = keyword_false);}
09939     break;
09940 
09941   case 478:
09942 
09943 /* Line 1806 of yacc.c  */
09944 #line 4246 "parse.y"
09945     {ifndef_ripper((yyval.id) = keyword__FILE__);}
09946     break;
09947 
09948   case 479:
09949 
09950 /* Line 1806 of yacc.c  */
09951 #line 4247 "parse.y"
09952     {ifndef_ripper((yyval.id) = keyword__LINE__);}
09953     break;
09954 
09955   case 480:
09956 
09957 /* Line 1806 of yacc.c  */
09958 #line 4248 "parse.y"
09959     {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
09960     break;
09961 
09962   case 481:
09963 
09964 /* Line 1806 of yacc.c  */
09965 #line 4252 "parse.y"
09966     {
09967                     /*%%%*/
09968                         if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
09969                     /*%
09970                         $$ = dispatch1(var_ref, $1);
09971                     %*/
09972                     }
09973     break;
09974 
09975   case 482:
09976 
09977 /* Line 1806 of yacc.c  */
09978 #line 4262 "parse.y"
09979     {
09980                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
09981                     /*%%%*/
09982                     /*%
09983                         $$ = dispatch1(var_field, $$);
09984                     %*/
09985                     }
09986     break;
09987 
09988   case 485:
09989 
09990 /* Line 1806 of yacc.c  */
09991 #line 4276 "parse.y"
09992     {
09993                     /*%%%*/
09994                         (yyval.node) = 0;
09995                     /*%
09996                         $$ = Qnil;
09997                     %*/
09998                     }
09999     break;
10000 
10001   case 486:
10002 
10003 /* Line 1806 of yacc.c  */
10004 #line 4284 "parse.y"
10005     {
10006                         lex_state = EXPR_BEG;
10007                     }
10008     break;
10009 
10010   case 487:
10011 
10012 /* Line 1806 of yacc.c  */
10013 #line 4288 "parse.y"
10014     {
10015                         (yyval.node) = (yyvsp[(3) - (4)].node);
10016                     }
10017     break;
10018 
10019   case 488:
10020 
10021 /* Line 1806 of yacc.c  */
10022 #line 4292 "parse.y"
10023     {
10024                     /*%%%*/
10025                         yyerrok;
10026                         (yyval.node) = 0;
10027                     /*%
10028                         yyerrok;
10029                         $$ = Qnil;
10030                     %*/
10031                     }
10032     break;
10033 
10034   case 489:
10035 
10036 /* Line 1806 of yacc.c  */
10037 #line 4304 "parse.y"
10038     {
10039                     /*%%%*/
10040                         (yyval.node) = (yyvsp[(2) - (3)].node);
10041                     /*%
10042                         $$ = dispatch1(paren, $2);
10043                     %*/
10044                         lex_state = EXPR_BEG;
10045                         command_start = TRUE;
10046                     }
10047     break;
10048 
10049   case 490:
10050 
10051 /* Line 1806 of yacc.c  */
10052 #line 4314 "parse.y"
10053     {
10054                         (yyval.node) = (yyvsp[(1) - (2)].node);
10055                     }
10056     break;
10057 
10058   case 491:
10059 
10060 /* Line 1806 of yacc.c  */
10061 #line 4320 "parse.y"
10062     {
10063                     /*%%%*/
10064                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), 0, (yyvsp[(6) - (6)].id));
10065                     /*%
10066                         $$ = params_new($1, $3, $5, Qnil, escape_Qundef($6));
10067                     %*/
10068                     }
10069     break;
10070 
10071   case 492:
10072 
10073 /* Line 1806 of yacc.c  */
10074 #line 4328 "parse.y"
10075     {
10076                     /*%%%*/
10077                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].id));
10078                     /*%
10079                         $$ = params_new($1, $3, $5, $7, escape_Qundef($8));
10080                     %*/
10081                     }
10082     break;
10083 
10084   case 493:
10085 
10086 /* Line 1806 of yacc.c  */
10087 #line 4336 "parse.y"
10088     {
10089                     /*%%%*/
10090                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), 0, 0, (yyvsp[(4) - (4)].id));
10091                     /*%
10092                         $$ = params_new($1, $3, Qnil, Qnil, escape_Qundef($4));
10093                     %*/
10094                     }
10095     break;
10096 
10097   case 494:
10098 
10099 /* Line 1806 of yacc.c  */
10100 #line 4344 "parse.y"
10101     {
10102                     /*%%%*/
10103                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), 0, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10104                     /*%
10105                         $$ = params_new($1, $3, Qnil, $5, escape_Qundef($6));
10106                     %*/
10107                     }
10108     break;
10109 
10110   case 495:
10111 
10112 /* Line 1806 of yacc.c  */
10113 #line 4352 "parse.y"
10114     {
10115                     /*%%%*/
10116                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10117                     /*%
10118                         $$ = params_new($1, Qnil, $3, Qnil, escape_Qundef($4));
10119                     %*/
10120                     }
10121     break;
10122 
10123   case 496:
10124 
10125 /* Line 1806 of yacc.c  */
10126 #line 4360 "parse.y"
10127     {
10128                     /*%%%*/
10129                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), 0, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10130                     /*%
10131                         $$ = params_new($1, Qnil, $3, $5, escape_Qundef($6));
10132                     %*/
10133                     }
10134     break;
10135 
10136   case 497:
10137 
10138 /* Line 1806 of yacc.c  */
10139 #line 4368 "parse.y"
10140     {
10141                     /*%%%*/
10142                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), 0, 0, 0, (yyvsp[(2) - (2)].id));
10143                     /*%
10144                         $$ = params_new($1, Qnil, Qnil, Qnil,escape_Qundef($2));
10145                     %*/
10146                     }
10147     break;
10148 
10149   case 498:
10150 
10151 /* Line 1806 of yacc.c  */
10152 #line 4376 "parse.y"
10153     {
10154                     /*%%%*/
10155                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), 0, (yyvsp[(4) - (4)].id));
10156                     /*%
10157                         $$ = params_new(Qnil, $1, $3, Qnil, escape_Qundef($4));
10158                     %*/
10159                     }
10160     break;
10161 
10162   case 499:
10163 
10164 /* Line 1806 of yacc.c  */
10165 #line 4384 "parse.y"
10166     {
10167                     /*%%%*/
10168                         (yyval.node) = new_args(0, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].id));
10169                     /*%
10170                         $$ = params_new(Qnil, $1, $3, $5, escape_Qundef($6));
10171                     %*/
10172                     }
10173     break;
10174 
10175   case 500:
10176 
10177 /* Line 1806 of yacc.c  */
10178 #line 4392 "parse.y"
10179     {
10180                     /*%%%*/
10181                         (yyval.node) = new_args(0, (yyvsp[(1) - (2)].node), 0, 0, (yyvsp[(2) - (2)].id));
10182                     /*%
10183                         $$ = params_new(Qnil, $1, Qnil, Qnil,escape_Qundef($2));
10184                     %*/
10185                     }
10186     break;
10187 
10188   case 501:
10189 
10190 /* Line 1806 of yacc.c  */
10191 #line 4400 "parse.y"
10192     {
10193                     /*%%%*/
10194                         (yyval.node) = new_args(0, (yyvsp[(1) - (4)].node), 0, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10195                     /*%
10196                         $$ = params_new(Qnil, $1, Qnil, $3, escape_Qundef($4));
10197                     %*/
10198                     }
10199     break;
10200 
10201   case 502:
10202 
10203 /* Line 1806 of yacc.c  */
10204 #line 4408 "parse.y"
10205     {
10206                     /*%%%*/
10207                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (2)].id), 0, (yyvsp[(2) - (2)].id));
10208                     /*%
10209                         $$ = params_new(Qnil, Qnil, $1, Qnil,escape_Qundef($2));
10210                     %*/
10211                     }
10212     break;
10213 
10214   case 503:
10215 
10216 /* Line 1806 of yacc.c  */
10217 #line 4416 "parse.y"
10218     {
10219                     /*%%%*/
10220                         (yyval.node) = new_args(0, 0, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].id));
10221                     /*%
10222                         $$ = params_new(Qnil, Qnil, $1, $3, escape_Qundef($4));
10223                     %*/
10224                     }
10225     break;
10226 
10227   case 504:
10228 
10229 /* Line 1806 of yacc.c  */
10230 #line 4424 "parse.y"
10231     {
10232                     /*%%%*/
10233                         (yyval.node) = new_args(0, 0, 0, 0, (yyvsp[(1) - (1)].id));
10234                     /*%
10235                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, $1);
10236                     %*/
10237                     }
10238     break;
10239 
10240   case 505:
10241 
10242 /* Line 1806 of yacc.c  */
10243 #line 4432 "parse.y"
10244     {
10245                     /*%%%*/
10246                         (yyval.node) = new_args(0, 0, 0, 0, 0);
10247                     /*%
10248                         $$ = params_new(Qnil, Qnil, Qnil, Qnil, Qnil);
10249                     %*/
10250                     }
10251     break;
10252 
10253   case 506:
10254 
10255 /* Line 1806 of yacc.c  */
10256 #line 4442 "parse.y"
10257     {
10258                     /*%%%*/
10259                         yyerror("formal argument cannot be a constant");
10260                         (yyval.id) = 0;
10261                     /*%
10262                         $$ = dispatch1(param_error, $1);
10263                     %*/
10264                     }
10265     break;
10266 
10267   case 507:
10268 
10269 /* Line 1806 of yacc.c  */
10270 #line 4451 "parse.y"
10271     {
10272                     /*%%%*/
10273                         yyerror("formal argument cannot be an instance variable");
10274                         (yyval.id) = 0;
10275                     /*%
10276                         $$ = dispatch1(param_error, $1);
10277                     %*/
10278                     }
10279     break;
10280 
10281   case 508:
10282 
10283 /* Line 1806 of yacc.c  */
10284 #line 4460 "parse.y"
10285     {
10286                     /*%%%*/
10287                         yyerror("formal argument cannot be a global variable");
10288                         (yyval.id) = 0;
10289                     /*%
10290                         $$ = dispatch1(param_error, $1);
10291                     %*/
10292                     }
10293     break;
10294 
10295   case 509:
10296 
10297 /* Line 1806 of yacc.c  */
10298 #line 4469 "parse.y"
10299     {
10300                     /*%%%*/
10301                         yyerror("formal argument cannot be a class variable");
10302                         (yyval.id) = 0;
10303                     /*%
10304                         $$ = dispatch1(param_error, $1);
10305                     %*/
10306                     }
10307     break;
10308 
10309   case 511:
10310 
10311 /* Line 1806 of yacc.c  */
10312 #line 4481 "parse.y"
10313     {
10314                         formal_argument(get_id((yyvsp[(1) - (1)].id)));
10315                         (yyval.id) = (yyvsp[(1) - (1)].id);
10316                     }
10317     break;
10318 
10319   case 512:
10320 
10321 /* Line 1806 of yacc.c  */
10322 #line 4488 "parse.y"
10323     {
10324                         arg_var(get_id((yyvsp[(1) - (1)].id)));
10325                     /*%%%*/
10326                         (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10327                     /*%
10328                         $$ = get_value($1);
10329                     %*/
10330                     }
10331     break;
10332 
10333   case 513:
10334 
10335 /* Line 1806 of yacc.c  */
10336 #line 4497 "parse.y"
10337     {
10338                         ID tid = internal_id();
10339                         arg_var(tid);
10340                     /*%%%*/
10341                         if (dyna_in_block()) {
10342                             (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10343                         }
10344                         else {
10345                             (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10346                         }
10347                         (yyval.node) = NEW_ARGS_AUX(tid, 1);
10348                         (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10349                     /*%
10350                         $$ = dispatch1(mlhs_paren, $2);
10351                     %*/
10352                     }
10353     break;
10354 
10355   case 515:
10356 
10357 /* Line 1806 of yacc.c  */
10358 #line 4523 "parse.y"
10359     {
10360                     /*%%%*/
10361                         (yyval.node) = (yyvsp[(1) - (3)].node);
10362                         (yyval.node)->nd_plen++;
10363                         (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10364                         rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10365                     /*%
10366                         $$ = rb_ary_push($1, $3);
10367                     %*/
10368                     }
10369     break;
10370 
10371   case 516:
10372 
10373 /* Line 1806 of yacc.c  */
10374 #line 4536 "parse.y"
10375     {
10376                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10377                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10378                     /*%%%*/
10379                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10380                     /*%
10381                         $$ = rb_assoc_new($$, $3);
10382                     %*/
10383                     }
10384     break;
10385 
10386   case 517:
10387 
10388 /* Line 1806 of yacc.c  */
10389 #line 4548 "parse.y"
10390     {
10391                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10392                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10393                     /*%%%*/
10394                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10395                     /*%
10396                         $$ = rb_assoc_new($$, $3);
10397                     %*/
10398                     }
10399     break;
10400 
10401   case 518:
10402 
10403 /* Line 1806 of yacc.c  */
10404 #line 4560 "parse.y"
10405     {
10406                     /*%%%*/
10407                         (yyval.node) = (yyvsp[(1) - (1)].node);
10408                     /*%
10409                         $$ = rb_ary_new3(1, $1);
10410                     %*/
10411                     }
10412     break;
10413 
10414   case 519:
10415 
10416 /* Line 1806 of yacc.c  */
10417 #line 4568 "parse.y"
10418     {
10419                     /*%%%*/
10420                         NODE *opts = (yyvsp[(1) - (3)].node);
10421 
10422                         while (opts->nd_next) {
10423                             opts = opts->nd_next;
10424                         }
10425                         opts->nd_next = (yyvsp[(3) - (3)].node);
10426                         (yyval.node) = (yyvsp[(1) - (3)].node);
10427                     /*%
10428                         $$ = rb_ary_push($1, $3);
10429                     %*/
10430                     }
10431     break;
10432 
10433   case 520:
10434 
10435 /* Line 1806 of yacc.c  */
10436 #line 4584 "parse.y"
10437     {
10438                     /*%%%*/
10439                         (yyval.node) = (yyvsp[(1) - (1)].node);
10440                     /*%
10441                         $$ = rb_ary_new3(1, $1);
10442                     %*/
10443                     }
10444     break;
10445 
10446   case 521:
10447 
10448 /* Line 1806 of yacc.c  */
10449 #line 4592 "parse.y"
10450     {
10451                     /*%%%*/
10452                         NODE *opts = (yyvsp[(1) - (3)].node);
10453 
10454                         while (opts->nd_next) {
10455                             opts = opts->nd_next;
10456                         }
10457                         opts->nd_next = (yyvsp[(3) - (3)].node);
10458                         (yyval.node) = (yyvsp[(1) - (3)].node);
10459                     /*%
10460                         $$ = rb_ary_push($1, $3);
10461                     %*/
10462                     }
10463     break;
10464 
10465   case 524:
10466 
10467 /* Line 1806 of yacc.c  */
10468 #line 4612 "parse.y"
10469     {
10470                     /*%%%*/
10471                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10472                             yyerror("rest argument must be local variable");
10473                     /*% %*/
10474                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10475                     /*%%%*/
10476                         (yyval.id) = (yyvsp[(2) - (2)].id);
10477                     /*%
10478                         $$ = dispatch1(rest_param, $2);
10479                     %*/
10480                     }
10481     break;
10482 
10483   case 525:
10484 
10485 /* Line 1806 of yacc.c  */
10486 #line 4625 "parse.y"
10487     {
10488                     /*%%%*/
10489                         (yyval.id) = internal_id();
10490                         arg_var((yyval.id));
10491                     /*%
10492                         $$ = dispatch1(rest_param, Qnil);
10493                     %*/
10494                     }
10495     break;
10496 
10497   case 528:
10498 
10499 /* Line 1806 of yacc.c  */
10500 #line 4640 "parse.y"
10501     {
10502                     /*%%%*/
10503                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10504                             yyerror("block argument must be local variable");
10505                         else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
10506                             yyerror("duplicated block argument name");
10507                     /*% %*/
10508                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10509                     /*%%%*/
10510                         (yyval.id) = (yyvsp[(2) - (2)].id);
10511                     /*%
10512                         $$ = dispatch1(blockarg, $2);
10513                     %*/
10514                     }
10515     break;
10516 
10517   case 529:
10518 
10519 /* Line 1806 of yacc.c  */
10520 #line 4657 "parse.y"
10521     {
10522                         (yyval.id) = (yyvsp[(2) - (2)].id);
10523                     }
10524     break;
10525 
10526   case 530:
10527 
10528 /* Line 1806 of yacc.c  */
10529 #line 4661 "parse.y"
10530     {
10531                     /*%%%*/
10532                         (yyval.id) = 0;
10533                     /*%
10534                         $$ = Qundef;
10535                     %*/
10536                     }
10537     break;
10538 
10539   case 531:
10540 
10541 /* Line 1806 of yacc.c  */
10542 #line 4671 "parse.y"
10543     {
10544                     /*%%%*/
10545                         value_expr((yyvsp[(1) - (1)].node));
10546                         (yyval.node) = (yyvsp[(1) - (1)].node);
10547                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
10548                     /*%
10549                         $$ = $1;
10550                     %*/
10551                     }
10552     break;
10553 
10554   case 532:
10555 
10556 /* Line 1806 of yacc.c  */
10557 #line 4680 "parse.y"
10558     {lex_state = EXPR_BEG;}
10559     break;
10560 
10561   case 533:
10562 
10563 /* Line 1806 of yacc.c  */
10564 #line 4681 "parse.y"
10565     {
10566                     /*%%%*/
10567                         if ((yyvsp[(3) - (4)].node) == 0) {
10568                             yyerror("can't define singleton method for ().");
10569                         }
10570                         else {
10571                             switch (nd_type((yyvsp[(3) - (4)].node))) {
10572                               case NODE_STR:
10573                               case NODE_DSTR:
10574                               case NODE_XSTR:
10575                               case NODE_DXSTR:
10576                               case NODE_DREGX:
10577                               case NODE_LIT:
10578                               case NODE_ARRAY:
10579                               case NODE_ZARRAY:
10580                                 yyerror("can't define singleton method for literals");
10581                               default:
10582                                 value_expr((yyvsp[(3) - (4)].node));
10583                                 break;
10584                             }
10585                         }
10586                         (yyval.node) = (yyvsp[(3) - (4)].node);
10587                     /*%
10588                         $$ = dispatch1(paren, $3);
10589                     %*/
10590                     }
10591     break;
10592 
10593   case 535:
10594 
10595 /* Line 1806 of yacc.c  */
10596 #line 4711 "parse.y"
10597     {
10598                     /*%%%*/
10599                         (yyval.node) = (yyvsp[(1) - (2)].node);
10600                     /*%
10601                         $$ = dispatch1(assoclist_from_args, $1);
10602                     %*/
10603                     }
10604     break;
10605 
10606   case 537:
10607 
10608 /* Line 1806 of yacc.c  */
10609 #line 4728 "parse.y"
10610     {
10611                     /*%%%*/
10612                         (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
10613                     /*%
10614                         $$ = rb_ary_push($1, $3);
10615                     %*/
10616                     }
10617     break;
10618 
10619   case 538:
10620 
10621 /* Line 1806 of yacc.c  */
10622 #line 4738 "parse.y"
10623     {
10624                     /*%%%*/
10625                         (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
10626                     /*%
10627                         $$ = dispatch2(assoc_new, $1, $3);
10628                     %*/
10629                     }
10630     break;
10631 
10632   case 539:
10633 
10634 /* Line 1806 of yacc.c  */
10635 #line 4746 "parse.y"
10636     {
10637                     /*%%%*/
10638                         (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
10639                     /*%
10640                         $$ = dispatch2(assoc_new, $1, $2);
10641                     %*/
10642                     }
10643     break;
10644 
10645   case 561:
10646 
10647 /* Line 1806 of yacc.c  */
10648 #line 4802 "parse.y"
10649     {yyerrok;}
10650     break;
10651 
10652   case 564:
10653 
10654 /* Line 1806 of yacc.c  */
10655 #line 4807 "parse.y"
10656     {yyerrok;}
10657     break;
10658 
10659   case 565:
10660 
10661 /* Line 1806 of yacc.c  */
10662 #line 4811 "parse.y"
10663     {
10664                     /*%%%*/
10665                         (yyval.node) = 0;
10666                     /*%
10667                         $$ = Qundef;
10668                     %*/
10669                     }
10670     break;
10671 
10672 
10673 
10674 /* Line 1806 of yacc.c  */
10675 #line 10674 "parse.c"
10676       default: break;
10677     }
10678   /* User semantic actions sometimes alter yychar, and that requires
10679      that yytoken be updated with the new translation.  We take the
10680      approach of translating immediately before every use of yytoken.
10681      One alternative is translating here after every semantic action,
10682      but that translation would be missed if the semantic action invokes
10683      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
10684      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
10685      incorrect destructor might then be invoked immediately.  In the
10686      case of YYERROR or YYBACKUP, subsequent parser actions might lead
10687      to an incorrect destructor call or verbose syntax error message
10688      before the lookahead is translated.  */
10689   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
10690 
10691   YYPOPSTACK (yylen);
10692   yylen = 0;
10693   YY_STACK_PRINT (yyss, yyssp);
10694 
10695   *++yyvsp = yyval;
10696 
10697   /* Now `shift' the result of the reduction.  Determine what state
10698      that goes to, based on the state we popped back to and the rule
10699      number reduced by.  */
10700 
10701   yyn = yyr1[yyn];
10702 
10703   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
10704   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
10705     yystate = yytable[yystate];
10706   else
10707     yystate = yydefgoto[yyn - YYNTOKENS];
10708 
10709   goto yynewstate;
10710 
10711 
10712 /*------------------------------------.
10713 | yyerrlab -- here on detecting error |
10714 `------------------------------------*/
10715 yyerrlab:
10716   /* Make sure we have latest lookahead translation.  See comments at
10717      user semantic actions for why this is necessary.  */
10718   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
10719 
10720   /* If not already recovering from an error, report this error.  */
10721   if (!yyerrstatus)
10722     {
10723       ++yynerrs;
10724 #if ! YYERROR_VERBOSE
10725       parser_yyerror (parser, YY_("syntax error"));
10726 #else
10727 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
10728                                         yyssp, yytoken)
10729       {
10730         char const *yymsgp = YY_("syntax error");
10731         int yysyntax_error_status;
10732         yysyntax_error_status = YYSYNTAX_ERROR;
10733         if (yysyntax_error_status == 0)
10734           yymsgp = yymsg;
10735         else if (yysyntax_error_status == 1)
10736           {
10737             if (yymsg != yymsgbuf)
10738               YYSTACK_FREE (yymsg);
10739             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
10740             if (!yymsg)
10741               {
10742                 yymsg = yymsgbuf;
10743                 yymsg_alloc = sizeof yymsgbuf;
10744                 yysyntax_error_status = 2;
10745               }
10746             else
10747               {
10748                 yysyntax_error_status = YYSYNTAX_ERROR;
10749                 yymsgp = yymsg;
10750               }
10751           }
10752         parser_yyerror (parser, yymsgp);
10753         if (yysyntax_error_status == 2)
10754           goto yyexhaustedlab;
10755       }
10756 # undef YYSYNTAX_ERROR
10757 #endif
10758     }
10759 
10760 
10761 
10762   if (yyerrstatus == 3)
10763     {
10764       /* If just tried and failed to reuse lookahead token after an
10765          error, discard it.  */
10766 
10767       if (yychar <= YYEOF)
10768         {
10769           /* Return failure if at end of input.  */
10770           if (yychar == YYEOF)
10771             YYABORT;
10772         }
10773       else
10774         {
10775           yydestruct ("Error: discarding",
10776                       yytoken, &yylval, parser);
10777           yychar = YYEMPTY;
10778         }
10779     }
10780 
10781   /* Else will try to reuse lookahead token after shifting the error
10782      token.  */
10783   goto yyerrlab1;
10784 
10785 
10786 /*---------------------------------------------------.
10787 | yyerrorlab -- error raised explicitly by YYERROR.  |
10788 `---------------------------------------------------*/
10789 yyerrorlab:
10790 
10791   /* Pacify compilers like GCC when the user code never invokes
10792      YYERROR and the label yyerrorlab therefore never appears in user
10793      code.  */
10794   if (/*CONSTCOND*/ 0)
10795      goto yyerrorlab;
10796 
10797   /* Do not reclaim the symbols of the rule which action triggered
10798      this YYERROR.  */
10799   YYPOPSTACK (yylen);
10800   yylen = 0;
10801   YY_STACK_PRINT (yyss, yyssp);
10802   yystate = *yyssp;
10803   goto yyerrlab1;
10804 
10805 
10806 /*-------------------------------------------------------------.
10807 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
10808 `-------------------------------------------------------------*/
10809 yyerrlab1:
10810   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
10811 
10812   for (;;)
10813     {
10814       yyn = yypact[yystate];
10815       if (!yypact_value_is_default (yyn))
10816         {
10817           yyn += YYTERROR;
10818           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
10819             {
10820               yyn = yytable[yyn];
10821               if (0 < yyn)
10822                 break;
10823             }
10824         }
10825 
10826       /* Pop the current state because it cannot handle the error token.  */
10827       if (yyssp == yyss)
10828         YYABORT;
10829 
10830 
10831       yydestruct ("Error: popping",
10832                   yystos[yystate], yyvsp, parser);
10833       YYPOPSTACK (1);
10834       yystate = *yyssp;
10835       YY_STACK_PRINT (yyss, yyssp);
10836     }
10837 
10838   *++yyvsp = yylval;
10839 
10840 
10841   /* Shift the error token.  */
10842   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
10843 
10844   yystate = yyn;
10845   goto yynewstate;
10846 
10847 
10848 /*-------------------------------------.
10849 | yyacceptlab -- YYACCEPT comes here.  |
10850 `-------------------------------------*/
10851 yyacceptlab:
10852   yyresult = 0;
10853   goto yyreturn;
10854 
10855 /*-----------------------------------.
10856 | yyabortlab -- YYABORT comes here.  |
10857 `-----------------------------------*/
10858 yyabortlab:
10859   yyresult = 1;
10860   goto yyreturn;
10861 
10862 #if !defined(yyoverflow) || YYERROR_VERBOSE
10863 /*-------------------------------------------------.
10864 | yyexhaustedlab -- memory exhaustion comes here.  |
10865 `-------------------------------------------------*/
10866 yyexhaustedlab:
10867   parser_yyerror (parser, YY_("memory exhausted"));
10868   yyresult = 2;
10869   /* Fall through.  */
10870 #endif
10871 
10872 yyreturn:
10873   if (yychar != YYEMPTY)
10874     {
10875       /* Make sure we have latest lookahead translation.  See comments at
10876          user semantic actions for why this is necessary.  */
10877       yytoken = YYTRANSLATE (yychar);
10878       yydestruct ("Cleanup: discarding lookahead",
10879                   yytoken, &yylval, parser);
10880     }
10881   /* Do not reclaim the symbols of the rule which action triggered
10882      this YYABORT or YYACCEPT.  */
10883   YYPOPSTACK (yylen);
10884   YY_STACK_PRINT (yyss, yyssp);
10885   while (yyssp != yyss)
10886     {
10887       yydestruct ("Cleanup: popping",
10888                   yystos[*yyssp], yyvsp, parser);
10889       YYPOPSTACK (1);
10890     }
10891 #ifndef yyoverflow
10892   if (yyss != yyssa)
10893     YYSTACK_FREE (yyss);
10894 #endif
10895 #if YYERROR_VERBOSE
10896   if (yymsg != yymsgbuf)
10897     YYSTACK_FREE (yymsg);
10898 #endif
10899   /* Make sure YYID is used.  */
10900   return YYID (yyresult);
10901 }
10902 
10903 
10904 
10905 /* Line 2067 of yacc.c  */
10906 #line 4819 "parse.y"
10907 
10908 # undef parser
10909 # undef yylex
10910 # undef yylval
10911 # define yylval  (*((YYSTYPE*)(parser->parser_yylval)))
10912 
10913 static int parser_regx_options(struct parser_params*);
10914 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
10915 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
10916 static int parser_parse_string(struct parser_params*,NODE*);
10917 static int parser_here_document(struct parser_params*,NODE*);
10918 
10919 
10920 # define nextc()                   parser_nextc(parser)
10921 # define pushback(c)               parser_pushback(parser, c)
10922 # define newtok()                  parser_newtok(parser)
10923 # define tokspace(n)               parser_tokspace(parser, n)
10924 # define tokadd(c)                 parser_tokadd(parser, c)
10925 # define tok_hex(numlen)           parser_tok_hex(parser, numlen)
10926 # define read_escape(flags,e)      parser_read_escape(parser, flags, e)
10927 # define tokadd_escape(e)          parser_tokadd_escape(parser, e)
10928 # define regx_options()            parser_regx_options(parser)
10929 # define tokadd_string(f,t,p,n,e)  parser_tokadd_string(parser,f,t,p,n,e)
10930 # define parse_string(n)           parser_parse_string(parser,n)
10931 # define tokaddmbc(c, enc)         parser_tokaddmbc(parser, c, enc)
10932 # define here_document(n)          parser_here_document(parser,n)
10933 # define heredoc_identifier()      parser_heredoc_identifier(parser)
10934 # define heredoc_restore(n)        parser_heredoc_restore(parser,n)
10935 # define whole_match_p(e,l,i)      parser_whole_match_p(parser,e,l,i)
10936 
10937 #ifndef RIPPER
10938 # define set_yylval_str(x) yylval.node = NEW_STR(x)
10939 # define set_yylval_num(x) yylval.num = x
10940 # define set_yylval_id(x)  yylval.id = x
10941 # define set_yylval_name(x)  yylval.id = x
10942 # define set_yylval_literal(x) yylval.node = NEW_LIT(x)
10943 # define set_yylval_node(x) yylval.node = x
10944 # define yylval_id() yylval.id
10945 #else
10946 static inline VALUE
10947 ripper_yylval_id(ID x)
10948 {
10949     return (VALUE)NEW_LASGN(x, ID2SYM(x));
10950 }
10951 # define set_yylval_str(x) (void)(x)
10952 # define set_yylval_num(x) (void)(x)
10953 # define set_yylval_id(x)  (void)(x)
10954 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
10955 # define set_yylval_literal(x) (void)(x)
10956 # define set_yylval_node(x) (void)(x)
10957 # define yylval_id() yylval.id
10958 #endif
10959 
10960 #ifndef RIPPER
10961 #define ripper_flush(p) (void)(p)
10962 #else
10963 #define ripper_flush(p) (p->tokp = p->parser_lex_p)
10964 
10965 #define yylval_rval *(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val)
10966 
10967 static int
10968 ripper_has_scan_event(struct parser_params *parser)
10969 {
10970 
10971     if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
10972     return lex_p > parser->tokp;
10973 }
10974 
10975 static VALUE
10976 ripper_scan_event_val(struct parser_params *parser, int t)
10977 {
10978     VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
10979     VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
10980     ripper_flush(parser);
10981     return rval;
10982 }
10983 
10984 static void
10985 ripper_dispatch_scan_event(struct parser_params *parser, int t)
10986 {
10987     if (!ripper_has_scan_event(parser)) return;
10988     yylval_rval = ripper_scan_event_val(parser, t);
10989 }
10990 
10991 static void
10992 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
10993 {
10994     if (!ripper_has_scan_event(parser)) return;
10995     (void)ripper_scan_event_val(parser, t);
10996 }
10997 
10998 static void
10999 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11000 {
11001     int saved_line = ruby_sourceline;
11002     const char *saved_tokp = parser->tokp;
11003 
11004     ruby_sourceline = parser->delayed_line;
11005     parser->tokp = lex_pbeg + parser->delayed_col;
11006     yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11007     parser->delayed = Qnil;
11008     ruby_sourceline = saved_line;
11009     parser->tokp = saved_tokp;
11010 }
11011 #endif /* RIPPER */
11012 
11013 #include "ruby/regex.h"
11014 #include "ruby/util.h"
11015 
11016 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
11017    since ours (we hope) works properly with all combinations of
11018    machines, compilers, `char' and `unsigned char' argument types.
11019    (Per Bothner suggested the basic approach.)  */
11020 #undef SIGN_EXTEND_CHAR
11021 #if __STDC__
11022 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11023 #else  /* not __STDC__ */
11024 /* As in Harbison and Steele.  */
11025 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11026 #endif
11027 
11028 #define parser_encoding_name()  (parser->enc->name)
11029 #define parser_mbclen()  mbclen((lex_p-1),lex_pend,parser->enc)
11030 #define parser_precise_mbclen()  rb_enc_precise_mbclen((lex_p-1),lex_pend,parser->enc)
11031 #define is_identchar(p,e,enc) (rb_enc_isalnum(*p,enc) || (*p) == '_' || !ISASCII(*p))
11032 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,parser->enc))
11033 
11034 #define parser_isascii() ISASCII(*(lex_p-1))
11035 
11036 #ifndef RIPPER
11037 static int
11038 token_info_get_column(struct parser_params *parser, const char *token)
11039 {
11040     int column = 1;
11041     const char *p, *pend = lex_p - strlen(token);
11042     for (p = lex_pbeg; p < pend; p++) {
11043         if (*p == '\t') {
11044             column = (((column - 1) / 8) + 1) * 8;
11045         }
11046         column++;
11047     }
11048     return column;
11049 }
11050 
11051 static int
11052 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11053 {
11054     const char *p, *pend = lex_p - strlen(token);
11055     for (p = lex_pbeg; p < pend; p++) {
11056         if (*p != ' ' && *p != '\t') {
11057             return 1;
11058         }
11059     }
11060     return 0;
11061 }
11062 
11063 #undef token_info_push
11064 static void
11065 token_info_push(struct parser_params *parser, const char *token)
11066 {
11067     token_info *ptinfo;
11068 
11069     if (compile_for_eval) return;
11070     ptinfo = ALLOC(token_info);
11071     ptinfo->token = token;
11072     ptinfo->linenum = ruby_sourceline;
11073     ptinfo->column = token_info_get_column(parser, token);
11074     ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11075     ptinfo->next = parser->parser_token_info;
11076 
11077     parser->parser_token_info = ptinfo;
11078 }
11079 
11080 #undef token_info_pop
11081 static void
11082 token_info_pop(struct parser_params *parser, const char *token)
11083 {
11084     int linenum;
11085     token_info *ptinfo = parser->parser_token_info;
11086 
11087     if (!ptinfo) return;
11088     parser->parser_token_info = ptinfo->next;
11089     if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11090         goto finish;
11091     }
11092     linenum = ruby_sourceline;
11093     if (linenum == ptinfo->linenum) { /* SKIP */
11094         goto finish;
11095     }
11096     if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11097         goto finish;
11098     }
11099     rb_compile_warning(ruby_sourcefile, linenum,
11100                "mismatched indentations at '%s' with '%s' at %d",
11101                token, ptinfo->token, ptinfo->linenum);
11102 
11103   finish:
11104     xfree(ptinfo);
11105 }
11106 #endif  /* RIPPER */
11107 
11108 static int
11109 parser_yyerror(struct parser_params *parser, const char *msg)
11110 {
11111 #ifndef RIPPER
11112     const int max_line_margin = 30;
11113     const char *p, *pe;
11114     char *buf;
11115     long len;
11116     int i;
11117 
11118     compile_error(PARSER_ARG "%s", msg);
11119     p = lex_p;
11120     while (lex_pbeg <= p) {
11121         if (*p == '\n') break;
11122         p--;
11123     }
11124     p++;
11125 
11126     pe = lex_p;
11127     while (pe < lex_pend) {
11128         if (*pe == '\n') break;
11129         pe++;
11130     }
11131 
11132     len = pe - p;
11133     if (len > 4) {
11134         char *p2;
11135         const char *pre = "", *post = "";
11136 
11137         if (len > max_line_margin * 2 + 10) {
11138             if (lex_p - p > max_line_margin) {
11139                 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11140                 pre = "...";
11141             }
11142             if (pe - lex_p > max_line_margin) {
11143                 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11144                 post = "...";
11145             }
11146             len = pe - p;
11147         }
11148         buf = ALLOCA_N(char, len+2);
11149         MEMCPY(buf, p, char, len);
11150         buf[len] = '\0';
11151         rb_compile_error_append("%s%s%s", pre, buf, post);
11152 
11153         i = (int)(lex_p - p);
11154         p2 = buf; pe = buf + len;
11155 
11156         while (p2 < pe) {
11157             if (*p2 != '\t') *p2 = ' ';
11158             p2++;
11159         }
11160         buf[i] = '^';
11161         buf[i+1] = '\0';
11162         rb_compile_error_append("%s%s", pre, buf);
11163     }
11164 #else
11165     dispatch1(parse_error, STR_NEW2(msg));
11166 #endif /* !RIPPER */
11167     return 0;
11168 }
11169 
11170 static void parser_prepare(struct parser_params *parser);
11171 
11172 #ifndef RIPPER
11173 VALUE ruby_suppress_tracing(VALUE (*func)(VALUE, int), VALUE arg, int always);
11174 
11175 static VALUE
11176 debug_lines(const char *f)
11177 {
11178     ID script_lines;
11179     CONST_ID(script_lines, "SCRIPT_LINES__");
11180     if (rb_const_defined_at(rb_cObject, script_lines)) {
11181         VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11182         if (TYPE(hash) == T_HASH) {
11183             VALUE fname = rb_str_new2(f);
11184             VALUE lines = rb_ary_new();
11185             rb_hash_aset(hash, fname, lines);
11186             return lines;
11187         }
11188     }
11189     return 0;
11190 }
11191 
11192 static VALUE
11193 coverage(const char *f, int n)
11194 {
11195     extern VALUE rb_get_coverages(void);
11196     VALUE coverages = rb_get_coverages();
11197     if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11198         VALUE fname = rb_str_new2(f);
11199         VALUE lines = rb_ary_new2(n);
11200         int i;
11201         RBASIC(lines)->klass = 0;
11202         for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11203         RARRAY(lines)->as.heap.len = n;
11204         rb_hash_aset(coverages, fname, lines);
11205         return lines;
11206     }
11207     return 0;
11208 }
11209 
11210 static int
11211 e_option_supplied(struct parser_params *parser)
11212 {
11213     return strcmp(ruby_sourcefile, "-e") == 0;
11214 }
11215 
11216 static VALUE
11217 yycompile0(VALUE arg, int tracing)
11218 {
11219     int n;
11220     NODE *tree;
11221     struct parser_params *parser = (struct parser_params *)arg;
11222 
11223     if (!compile_for_eval && rb_safe_level() == 0) {
11224         ruby_debug_lines = debug_lines(ruby_sourcefile);
11225         if (ruby_debug_lines && ruby_sourceline > 0) {
11226             VALUE str = STR_NEW0();
11227             n = ruby_sourceline;
11228             do {
11229                 rb_ary_push(ruby_debug_lines, str);
11230             } while (--n);
11231         }
11232 
11233         if (!e_option_supplied(parser)) {
11234             ruby_coverage = coverage(ruby_sourcefile, ruby_sourceline);
11235         }
11236     }
11237 
11238     parser_prepare(parser);
11239     deferred_nodes = 0;
11240     n = yyparse((void*)parser);
11241     ruby_debug_lines = 0;
11242     ruby_coverage = 0;
11243     compile_for_eval = 0;
11244 
11245     lex_strterm = 0;
11246     lex_p = lex_pbeg = lex_pend = 0;
11247     lex_lastline = lex_nextline = 0;
11248     if (parser->nerr) {
11249         return 0;
11250     }
11251     tree = ruby_eval_tree;
11252     if (!tree) {
11253         tree = NEW_NIL();
11254     }
11255     else if (ruby_eval_tree_begin) {
11256         tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11257     }
11258     return (VALUE)tree;
11259 }
11260 
11261 static NODE*
11262 yycompile(struct parser_params *parser, const char *f, int line)
11263 {
11264     ruby_sourcefile = ruby_strdup(f);
11265     ruby_sourceline = line - 1;
11266     return (NODE *)ruby_suppress_tracing(yycompile0, (VALUE)parser, TRUE);
11267 }
11268 #endif /* !RIPPER */
11269 
11270 static rb_encoding *
11271 must_be_ascii_compatible(VALUE s)
11272 {
11273     rb_encoding *enc = rb_enc_get(s);
11274     if (!rb_enc_asciicompat(enc)) {
11275         rb_raise(rb_eArgError, "invalid source encoding");
11276     }
11277     return enc;
11278 }
11279 
11280 static VALUE
11281 lex_get_str(struct parser_params *parser, VALUE s)
11282 {
11283     char *beg, *end, *pend;
11284     rb_encoding *enc = must_be_ascii_compatible(s);
11285 
11286     beg = RSTRING_PTR(s);
11287     if (lex_gets_ptr) {
11288         if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11289         beg += lex_gets_ptr;
11290     }
11291     pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11292     end = beg;
11293     while (end < pend) {
11294         if (*end++ == '\n') break;
11295     }
11296     lex_gets_ptr = end - RSTRING_PTR(s);
11297     return rb_enc_str_new(beg, end - beg, enc);
11298 }
11299 
11300 static VALUE
11301 lex_getline(struct parser_params *parser)
11302 {
11303     VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11304     if (NIL_P(line)) return line;
11305     must_be_ascii_compatible(line);
11306 #ifndef RIPPER
11307     if (ruby_debug_lines) {
11308         rb_enc_associate(line, parser->enc);
11309         rb_ary_push(ruby_debug_lines, line);
11310     }
11311     if (ruby_coverage) {
11312         rb_ary_push(ruby_coverage, Qnil);
11313     }
11314 #endif
11315     return line;
11316 }
11317 
11318 static const rb_data_type_t parser_data_type;
11319 
11320 #ifndef RIPPER
11321 static NODE*
11322 parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11323 {
11324     struct parser_params *parser;
11325     NODE *node;
11326     volatile VALUE tmp;
11327 
11328     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11329     lex_gets = lex_get_str;
11330     lex_gets_ptr = 0;
11331     lex_input = s;
11332     lex_pbeg = lex_p = lex_pend = 0;
11333     compile_for_eval = rb_parse_in_eval();
11334 
11335     node = yycompile(parser, f, line);
11336     tmp = vparser; /* prohibit tail call optimization */
11337 
11338     return node;
11339 }
11340 
11341 NODE*
11342 rb_compile_string(const char *f, VALUE s, int line)
11343 {
11344     must_be_ascii_compatible(s);
11345     return parser_compile_string(rb_parser_new(), f, s, line);
11346 }
11347 
11348 NODE*
11349 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11350 {
11351     must_be_ascii_compatible(s);
11352     return parser_compile_string(vparser, f, s, line);
11353 }
11354 
11355 NODE*
11356 rb_compile_cstr(const char *f, const char *s, int len, int line)
11357 {
11358     VALUE str = rb_str_new(s, len);
11359     return parser_compile_string(rb_parser_new(), f, str, line);
11360 }
11361 
11362 NODE*
11363 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11364 {
11365     VALUE str = rb_str_new(s, len);
11366     return parser_compile_string(vparser, f, str, line);
11367 }
11368 
11369 static VALUE
11370 lex_io_gets(struct parser_params *parser, VALUE io)
11371 {
11372     return rb_io_gets(io);
11373 }
11374 
11375 NODE*
11376 rb_compile_file(const char *f, VALUE file, int start)
11377 {
11378     VALUE volatile vparser = rb_parser_new();
11379 
11380     return rb_parser_compile_file(vparser, f, file, start);
11381 }
11382 
11383 NODE*
11384 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11385 {
11386     struct parser_params *parser;
11387     volatile VALUE tmp;
11388     NODE *node;
11389 
11390     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11391     lex_gets = lex_io_gets;
11392     lex_input = file;
11393     lex_pbeg = lex_p = lex_pend = 0;
11394     compile_for_eval = rb_parse_in_eval();
11395 
11396     node = yycompile(parser, f, start);
11397     tmp = vparser; /* prohibit tail call optimization */
11398 
11399     return node;
11400 }
11401 #endif  /* !RIPPER */
11402 
11403 #define STR_FUNC_ESCAPE 0x01
11404 #define STR_FUNC_EXPAND 0x02
11405 #define STR_FUNC_REGEXP 0x04
11406 #define STR_FUNC_QWORDS 0x08
11407 #define STR_FUNC_SYMBOL 0x10
11408 #define STR_FUNC_INDENT 0x20
11409 
11410 enum string_type {
11411     str_squote = (0),
11412     str_dquote = (STR_FUNC_EXPAND),
11413     str_xquote = (STR_FUNC_EXPAND),
11414     str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11415     str_sword  = (STR_FUNC_QWORDS),
11416     str_dword  = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11417     str_ssym   = (STR_FUNC_SYMBOL),
11418     str_dsym   = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11419 };
11420 
11421 static VALUE
11422 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11423 {
11424     VALUE str;
11425 
11426     str = rb_enc_str_new(p, n, enc);
11427     if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11428         if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11429         }
11430         else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11431             rb_enc_associate(str, rb_ascii8bit_encoding());
11432         }
11433     }
11434 
11435     return str;
11436 }
11437 
11438 #define lex_goto_eol(parser) (parser->parser_lex_p = parser->parser_lex_pend)
11439 #define peek(c) (lex_p < lex_pend && (c) == *lex_p)
11440 
11441 static inline int
11442 parser_nextc(struct parser_params *parser)
11443 {
11444     int c;
11445 
11446     if (lex_p == lex_pend) {
11447         VALUE v = lex_nextline;
11448         lex_nextline = 0;
11449         if (!v) {
11450             if (parser->eofp)
11451                 return -1;
11452 
11453             if (!lex_input || NIL_P(v = lex_getline(parser))) {
11454                 parser->eofp = Qtrue;
11455                 lex_goto_eol(parser);
11456                 return -1;
11457             }
11458         }
11459         {
11460 #ifdef RIPPER
11461             if (parser->tokp < lex_pend) {
11462                 if (NIL_P(parser->delayed)) {
11463                     parser->delayed = rb_str_buf_new(1024);
11464                     rb_str_buf_cat(parser->delayed,
11465                                    parser->tokp, lex_pend - parser->tokp);
11466                     parser->delayed_line = ruby_sourceline;
11467                     parser->delayed_col = (int)(parser->tokp - lex_pbeg);
11468                 }
11469                 else {
11470                     rb_str_buf_cat(parser->delayed,
11471                                    parser->tokp, lex_pend - parser->tokp);
11472                 }
11473             }
11474 #endif
11475             if (heredoc_end > 0) {
11476                 ruby_sourceline = heredoc_end;
11477                 heredoc_end = 0;
11478             }
11479             ruby_sourceline++;
11480             parser->line_count++;
11481             lex_pbeg = lex_p = RSTRING_PTR(v);
11482             lex_pend = lex_p + RSTRING_LEN(v);
11483             ripper_flush(parser);
11484             lex_lastline = v;
11485         }
11486     }
11487     c = (unsigned char)*lex_p++;
11488     if (c == '\r' && peek('\n')) {
11489         lex_p++;
11490         c = '\n';
11491     }
11492 
11493     return c;
11494 }
11495 
11496 static void
11497 parser_pushback(struct parser_params *parser, int c)
11498 {
11499     if (c == -1) return;
11500     lex_p--;
11501     if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
11502         lex_p--;
11503     }
11504 }
11505 
11506 #define was_bol() (lex_p == lex_pbeg + 1)
11507 
11508 #define tokfix() (tokenbuf[tokidx]='\0')
11509 #define tok() tokenbuf
11510 #define toklen() tokidx
11511 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
11512 
11513 static char*
11514 parser_newtok(struct parser_params *parser)
11515 {
11516     tokidx = 0;
11517     if (!tokenbuf) {
11518         toksiz = 60;
11519         tokenbuf = ALLOC_N(char, 60);
11520     }
11521     if (toksiz > 4096) {
11522         toksiz = 60;
11523         REALLOC_N(tokenbuf, char, 60);
11524     }
11525     return tokenbuf;
11526 }
11527 
11528 static char *
11529 parser_tokspace(struct parser_params *parser, int n)
11530 {
11531     tokidx += n;
11532 
11533     if (tokidx >= toksiz) {
11534         do {toksiz *= 2;} while (toksiz < tokidx);
11535         REALLOC_N(tokenbuf, char, toksiz);
11536     }
11537     return &tokenbuf[tokidx-n];
11538 }
11539 
11540 static void
11541 parser_tokadd(struct parser_params *parser, int c)
11542 {
11543     tokenbuf[tokidx++] = (char)c;
11544     if (tokidx >= toksiz) {
11545         toksiz *= 2;
11546         REALLOC_N(tokenbuf, char, toksiz);
11547     }
11548 }
11549 
11550 static int
11551 parser_tok_hex(struct parser_params *parser, size_t *numlen)
11552 {
11553     int c;
11554 
11555     c = scan_hex(lex_p, 2, numlen);
11556     if (!*numlen) {
11557         yyerror("invalid hex escape");
11558         return 0;
11559     }
11560     lex_p += *numlen;
11561     return c;
11562 }
11563 
11564 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
11565 
11566 static int
11567 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
11568                    int string_literal, int symbol_literal, int regexp_literal)
11569 {
11570     /*
11571      * If string_literal is true, then we allow multiple codepoints
11572      * in \u{}, and add the codepoints to the current token.
11573      * Otherwise we're parsing a character literal and return a single
11574      * codepoint without adding it
11575      */
11576 
11577     int codepoint;
11578     size_t numlen;
11579 
11580     if (regexp_literal) { tokadd('\\'); tokadd('u'); }
11581 
11582     if (peek('{')) {  /* handle \u{...} form */
11583         do {
11584             if (regexp_literal) { tokadd(*lex_p); }
11585             nextc();
11586             codepoint = scan_hex(lex_p, 6, &numlen);
11587             if (numlen == 0)  {
11588                 yyerror("invalid Unicode escape");
11589                 return 0;
11590             }
11591             if (codepoint > 0x10ffff) {
11592                 yyerror("invalid Unicode codepoint (too large)");
11593                 return 0;
11594             }
11595             lex_p += numlen;
11596             if (regexp_literal) {
11597                 tokcopy((int)numlen);
11598             }
11599             else if (codepoint >= 0x80) {
11600                 *encp = UTF8_ENC();
11601                 if (string_literal) tokaddmbc(codepoint, *encp);
11602             }
11603             else if (string_literal) {
11604                 tokadd(codepoint);
11605             }
11606         } while (string_literal && (peek(' ') || peek('\t')));
11607 
11608         if (!peek('}')) {
11609             yyerror("unterminated Unicode escape");
11610             return 0;
11611         }
11612 
11613         if (regexp_literal) { tokadd('}'); }
11614         nextc();
11615     }
11616     else {                      /* handle \uxxxx form */
11617         codepoint = scan_hex(lex_p, 4, &numlen);
11618         if (numlen < 4) {
11619             yyerror("invalid Unicode escape");
11620             return 0;
11621         }
11622         lex_p += 4;
11623         if (regexp_literal) {
11624             tokcopy(4);
11625         }
11626         else if (codepoint >= 0x80) {
11627             *encp = UTF8_ENC();
11628             if (string_literal) tokaddmbc(codepoint, *encp);
11629         }
11630         else if (string_literal) {
11631             tokadd(codepoint);
11632         }
11633     }
11634 
11635     return codepoint;
11636 }
11637 
11638 #define ESCAPE_CONTROL 1
11639 #define ESCAPE_META    2
11640 
11641 static int
11642 parser_read_escape(struct parser_params *parser, int flags,
11643                    rb_encoding **encp)
11644 {
11645     int c;
11646     size_t numlen;
11647 
11648     switch (c = nextc()) {
11649       case '\\':        /* Backslash */
11650         return c;
11651 
11652       case 'n': /* newline */
11653         return '\n';
11654 
11655       case 't': /* horizontal tab */
11656         return '\t';
11657 
11658       case 'r': /* carriage-return */
11659         return '\r';
11660 
11661       case 'f': /* form-feed */
11662         return '\f';
11663 
11664       case 'v': /* vertical tab */
11665         return '\13';
11666 
11667       case 'a': /* alarm(bell) */
11668         return '\007';
11669 
11670       case 'e': /* escape */
11671         return 033;
11672 
11673       case '0': case '1': case '2': case '3': /* octal constant */
11674       case '4': case '5': case '6': case '7':
11675         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11676         pushback(c);
11677         c = scan_oct(lex_p, 3, &numlen);
11678         lex_p += numlen;
11679         return c;
11680 
11681       case 'x': /* hex constant */
11682         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11683         c = tok_hex(&numlen);
11684         if (numlen == 0) return 0;
11685         return c;
11686 
11687       case 'b': /* backspace */
11688         return '\010';
11689 
11690       case 's': /* space */
11691         return ' ';
11692 
11693       case 'M':
11694         if (flags & ESCAPE_META) goto eof;
11695         if ((c = nextc()) != '-') {
11696             pushback(c);
11697             goto eof;
11698         }
11699         if ((c = nextc()) == '\\') {
11700             if (peek('u')) goto eof;
11701             return read_escape(flags|ESCAPE_META, encp) | 0x80;
11702         }
11703         else if (c == -1 || !ISASCII(c)) goto eof;
11704         else {
11705             return ((c & 0xff) | 0x80);
11706         }
11707 
11708       case 'C':
11709         if ((c = nextc()) != '-') {
11710             pushback(c);
11711             goto eof;
11712         }
11713       case 'c':
11714         if (flags & ESCAPE_CONTROL) goto eof;
11715         if ((c = nextc())== '\\') {
11716             if (peek('u')) goto eof;
11717             c = read_escape(flags|ESCAPE_CONTROL, encp);
11718         }
11719         else if (c == '?')
11720             return 0177;
11721         else if (c == -1 || !ISASCII(c)) goto eof;
11722         return c & 0x9f;
11723 
11724       eof:
11725       case -1:
11726         yyerror("Invalid escape character syntax");
11727         return '\0';
11728 
11729       default:
11730         return c;
11731     }
11732 }
11733 
11734 static void
11735 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
11736 {
11737     int len = rb_enc_codelen(c, enc);
11738     rb_enc_mbcput(c, tokspace(len), enc);
11739 }
11740 
11741 static int
11742 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
11743 {
11744     int c;
11745     int flags = 0;
11746     size_t numlen;
11747 
11748   first:
11749     switch (c = nextc()) {
11750       case '\n':
11751         return 0;               /* just ignore */
11752 
11753       case '0': case '1': case '2': case '3': /* octal constant */
11754       case '4': case '5': case '6': case '7':
11755         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11756         {
11757             ruby_scan_oct(--lex_p, 3, &numlen);
11758             if (numlen == 0) goto eof;
11759             lex_p += numlen;
11760             tokcopy((int)numlen + 1);
11761         }
11762         return 0;
11763 
11764       case 'x': /* hex constant */
11765         if (flags & (ESCAPE_CONTROL|ESCAPE_META)) goto eof;
11766         {
11767             tok_hex(&numlen);
11768             if (numlen == 0) goto eof;
11769             tokcopy((int)numlen + 2);
11770         }
11771         return 0;
11772 
11773       case 'M':
11774         if (flags & ESCAPE_META) goto eof;
11775         if ((c = nextc()) != '-') {
11776             pushback(c);
11777             goto eof;
11778         }
11779         tokcopy(3);
11780         flags |= ESCAPE_META;
11781         goto escaped;
11782 
11783       case 'C':
11784         if (flags & ESCAPE_CONTROL) goto eof;
11785         if ((c = nextc()) != '-') {
11786             pushback(c);
11787             goto eof;
11788         }
11789         tokcopy(3);
11790         goto escaped;
11791 
11792       case 'c':
11793         if (flags & ESCAPE_CONTROL) goto eof;
11794         tokcopy(2);
11795         flags |= ESCAPE_CONTROL;
11796       escaped:
11797         if ((c = nextc()) == '\\') {
11798             goto first;
11799         }
11800         else if (c == -1) goto eof;
11801         tokadd(c);
11802         return 0;
11803 
11804       eof:
11805       case -1:
11806         yyerror("Invalid escape character syntax");
11807         return -1;
11808 
11809       default:
11810         tokadd('\\');
11811         tokadd(c);
11812     }
11813     return 0;
11814 }
11815 
11816 extern int rb_char_to_option_kcode(int c, int *option, int *kcode);
11817 
11818 static int
11819 parser_regx_options(struct parser_params *parser)
11820 {
11821     int kcode = 0;
11822     int kopt = 0;
11823     int options = 0;
11824     int c, opt, kc;
11825 
11826     newtok();
11827     while (c = nextc(), ISALPHA(c)) {
11828         if (c == 'o') {
11829             options |= RE_OPTION_ONCE;
11830         }
11831         else if (rb_char_to_option_kcode(c, &opt, &kc)) {
11832             if (kc >= 0) {
11833                 if (kc != rb_ascii8bit_encindex()) kcode = c;
11834                 kopt = opt;
11835             }
11836             else {
11837                 options |= opt;
11838             }
11839         }
11840         else {
11841             tokadd(c);
11842         }
11843     }
11844     options |= kopt;
11845     pushback(c);
11846     if (toklen()) {
11847         tokfix();
11848         compile_error(PARSER_ARG "unknown regexp option%s - %s",
11849                       toklen() > 1 ? "s" : "", tok());
11850     }
11851     return options | RE_OPTION_ENCODING(kcode);
11852 }
11853 
11854 static void
11855 dispose_string(VALUE str)
11856 {
11857     /* TODO: should use another API? */
11858     if (RBASIC(str)->flags & RSTRING_NOEMBED)
11859         xfree(RSTRING_PTR(str));
11860     rb_gc_force_recycle(str);
11861 }
11862 
11863 static int
11864 parser_tokadd_mbchar(struct parser_params *parser, int c)
11865 {
11866     int len = parser_precise_mbclen();
11867     if (!MBCLEN_CHARFOUND_P(len)) {
11868         compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
11869         return -1;
11870     }
11871     tokadd(c);
11872     lex_p += --len;
11873     if (len > 0) tokcopy(len);
11874     return c;
11875 }
11876 
11877 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, c)
11878 
11879 static int
11880 parser_tokadd_string(struct parser_params *parser,
11881                      int func, int term, int paren, long *nest,
11882                      rb_encoding **encp)
11883 {
11884     int c;
11885     int has_nonascii = 0;
11886     rb_encoding *enc = *encp;
11887     char *errbuf = 0;
11888     static const char mixed_msg[] = "%s mixed within %s source";
11889 
11890 #define mixed_error(enc1, enc2) if (!errbuf) {  \
11891         size_t len = sizeof(mixed_msg) - 4;     \
11892         len += strlen(rb_enc_name(enc1));       \
11893         len += strlen(rb_enc_name(enc2));       \
11894         errbuf = ALLOCA_N(char, len);           \
11895         snprintf(errbuf, len, mixed_msg,        \
11896                  rb_enc_name(enc1),             \
11897                  rb_enc_name(enc2));            \
11898         yyerror(errbuf);                        \
11899     }
11900 #define mixed_escape(beg, enc1, enc2) do {      \
11901         const char *pos = lex_p;                \
11902         lex_p = beg;                            \
11903         mixed_error(enc1, enc2);                \
11904         lex_p = pos;                            \
11905     } while (0)
11906 
11907     while ((c = nextc()) != -1) {
11908         if (paren && c == paren) {
11909             ++*nest;
11910         }
11911         else if (c == term) {
11912             if (!nest || !*nest) {
11913                 pushback(c);
11914                 break;
11915             }
11916             --*nest;
11917         }
11918         else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
11919             int c2 = *lex_p;
11920             if (c2 == '$' || c2 == '@' || c2 == '{') {
11921                 pushback(c);
11922                 break;
11923             }
11924         }
11925         else if (c == '\\') {
11926             const char *beg = lex_p - 1;
11927             c = nextc();
11928             switch (c) {
11929               case '\n':
11930                 if (func & STR_FUNC_QWORDS) break;
11931                 if (func & STR_FUNC_EXPAND) continue;
11932                 tokadd('\\');
11933                 break;
11934 
11935               case '\\':
11936                 if (func & STR_FUNC_ESCAPE) tokadd(c);
11937                 break;
11938 
11939               case 'u':
11940                 if ((func & STR_FUNC_EXPAND) == 0) {
11941                     tokadd('\\');
11942                     break;
11943                 }
11944                 parser_tokadd_utf8(parser, &enc, 1,
11945                                    func & STR_FUNC_SYMBOL,
11946                                    func & STR_FUNC_REGEXP);
11947                 if (has_nonascii && enc != *encp) {
11948                     mixed_escape(beg, enc, *encp);
11949                 }
11950                 continue;
11951 
11952               default:
11953                 if (func & STR_FUNC_REGEXP) {
11954                     pushback(c);
11955                     if ((c = tokadd_escape(&enc)) < 0)
11956                         return -1;
11957                     if (has_nonascii && enc != *encp) {
11958                         mixed_escape(beg, enc, *encp);
11959                     }
11960                     continue;
11961                 }
11962                 else if (func & STR_FUNC_EXPAND) {
11963                     pushback(c);
11964                     if (func & STR_FUNC_ESCAPE) tokadd('\\');
11965                     c = read_escape(0, &enc);
11966                 }
11967                 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11968                     /* ignore backslashed spaces in %w */
11969                 }
11970                 else if (c != term && !(paren && c == paren)) {
11971                     tokadd('\\');
11972                     pushback(c);
11973                     continue;
11974                 }
11975             }
11976         }
11977         else if (!parser_isascii()) {
11978             has_nonascii = 1;
11979             if (enc != *encp) {
11980                 mixed_error(enc, *encp);
11981                 continue;
11982             }
11983             if (tokadd_mbchar(c) == -1) return -1;
11984             continue;
11985         }
11986         else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
11987             pushback(c);
11988             break;
11989         }
11990         if (c & 0x80) {
11991             has_nonascii = 1;
11992             if (enc != *encp) {
11993                 mixed_error(enc, *encp);
11994                 continue;
11995             }
11996         }
11997         tokadd(c);
11998     }
11999     *encp = enc;
12000     return c;
12001 }
12002 
12003 #define NEW_STRTERM(func, term, paren) \
12004         rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12005 
12006 static int
12007 parser_parse_string(struct parser_params *parser, NODE *quote)
12008 {
12009     int func = (int)quote->nd_func;
12010     int term = nd_term(quote);
12011     int paren = nd_paren(quote);
12012     int c, space = 0;
12013     rb_encoding *enc = parser->enc;
12014 
12015     if (func == -1) return tSTRING_END;
12016     c = nextc();
12017     if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12018         do {c = nextc();} while (ISSPACE(c));
12019         space = 1;
12020     }
12021     if (c == term && !quote->nd_nest) {
12022         if (func & STR_FUNC_QWORDS) {
12023             quote->nd_func = -1;
12024             return ' ';
12025         }
12026         if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12027         set_yylval_num(regx_options());
12028         return tREGEXP_END;
12029     }
12030     if (space) {
12031         pushback(c);
12032         return ' ';
12033     }
12034     newtok();
12035     if ((func & STR_FUNC_EXPAND) && c == '#') {
12036         switch (c = nextc()) {
12037           case '$':
12038           case '@':
12039             pushback(c);
12040             return tSTRING_DVAR;
12041           case '{':
12042             return tSTRING_DBEG;
12043         }
12044         tokadd('#');
12045     }
12046     pushback(c);
12047     if (tokadd_string(func, term, paren, &quote->nd_nest,
12048                       &enc) == -1) {
12049         ruby_sourceline = nd_line(quote);
12050         if (func & STR_FUNC_REGEXP) {
12051             if (parser->eofp)
12052                 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12053             return tREGEXP_END;
12054         }
12055         else {
12056             if (parser->eofp)
12057                 compile_error(PARSER_ARG "unterminated string meets end of file");
12058             return tSTRING_END;
12059         }
12060     }
12061 
12062     tokfix();
12063     set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12064 
12065 #ifdef RIPPER
12066     if (!NIL_P(parser->delayed)){
12067         ptrdiff_t len = lex_p - parser->tokp;
12068         if (len > 0) {
12069             rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12070         }
12071         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12072         parser->tokp = lex_p;
12073     }
12074 #endif
12075 
12076     return tSTRING_CONTENT;
12077 }
12078 
12079 static int
12080 parser_heredoc_identifier(struct parser_params *parser)
12081 {
12082     int c = nextc(), term, func = 0;
12083     long len;
12084 
12085     if (c == '-') {
12086         c = nextc();
12087         func = STR_FUNC_INDENT;
12088     }
12089     switch (c) {
12090       case '\'':
12091         func |= str_squote; goto quoted;
12092       case '"':
12093         func |= str_dquote; goto quoted;
12094       case '`':
12095         func |= str_xquote;
12096       quoted:
12097         newtok();
12098         tokadd(func);
12099         term = c;
12100         while ((c = nextc()) != -1 && c != term) {
12101             if (tokadd_mbchar(c) == -1) return 0;
12102         }
12103         if (c == -1) {
12104             compile_error(PARSER_ARG "unterminated here document identifier");
12105             return 0;
12106         }
12107         break;
12108 
12109       default:
12110         if (!parser_is_identchar()) {
12111             pushback(c);
12112             if (func & STR_FUNC_INDENT) {
12113                 pushback('-');
12114             }
12115             return 0;
12116         }
12117         newtok();
12118         term = '"';
12119         tokadd(func |= str_dquote);
12120         do {
12121             if (tokadd_mbchar(c) == -1) return 0;
12122         } while ((c = nextc()) != -1 && parser_is_identchar());
12123         pushback(c);
12124         break;
12125     }
12126 
12127     tokfix();
12128 #ifdef RIPPER
12129     ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12130 #endif
12131     len = lex_p - lex_pbeg;
12132     lex_goto_eol(parser);
12133     lex_strterm = rb_node_newnode(NODE_HEREDOC,
12134                                   STR_NEW(tok(), toklen()),     /* nd_lit */
12135                                   len,                          /* nd_nth */
12136                                   lex_lastline);                /* nd_orig */
12137     nd_set_line(lex_strterm, ruby_sourceline);
12138     ripper_flush(parser);
12139     return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12140 }
12141 
12142 static void
12143 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12144 {
12145     VALUE line;
12146 
12147     line = here->nd_orig;
12148     lex_lastline = line;
12149     lex_pbeg = RSTRING_PTR(line);
12150     lex_pend = lex_pbeg + RSTRING_LEN(line);
12151     lex_p = lex_pbeg + here->nd_nth;
12152     heredoc_end = ruby_sourceline;
12153     ruby_sourceline = nd_line(here);
12154     dispose_string(here->nd_lit);
12155     rb_gc_force_recycle((VALUE)here);
12156     ripper_flush(parser);
12157 }
12158 
12159 static int
12160 parser_whole_match_p(struct parser_params *parser,
12161     const char *eos, long len, int indent)
12162 {
12163     const char *p = lex_pbeg;
12164     long n;
12165 
12166     if (indent) {
12167         while (*p && ISSPACE(*p)) p++;
12168     }
12169     n = lex_pend - (p + len);
12170     if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12171     return strncmp(eos, p, len) == 0;
12172 }
12173 
12174 static int
12175 parser_here_document(struct parser_params *parser, NODE *here)
12176 {
12177     int c, func, indent = 0;
12178     const char *eos, *p, *pend;
12179     long len;
12180     VALUE str = 0;
12181     rb_encoding *enc = parser->enc;
12182 
12183     eos = RSTRING_PTR(here->nd_lit);
12184     len = RSTRING_LEN(here->nd_lit) - 1;
12185     indent = (func = *eos++) & STR_FUNC_INDENT;
12186 
12187     if ((c = nextc()) == -1) {
12188       error:
12189         compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12190 #ifdef RIPPER
12191         if (NIL_P(parser->delayed)) {
12192             ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12193         }
12194         else {
12195             if (str ||
12196                 ((len = lex_p - parser->tokp) > 0 &&
12197                  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12198                 rb_str_append(parser->delayed, str);
12199             }
12200             ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12201         }
12202         lex_goto_eol(parser);
12203 #endif
12204       restore:
12205         heredoc_restore(lex_strterm);
12206         lex_strterm = 0;
12207         return 0;
12208     }
12209     if (was_bol() && whole_match_p(eos, len, indent)) {
12210         heredoc_restore(lex_strterm);
12211         return tSTRING_END;
12212     }
12213 
12214     if (!(func & STR_FUNC_EXPAND)) {
12215         do {
12216             p = RSTRING_PTR(lex_lastline);
12217             pend = lex_pend;
12218             if (pend > p) {
12219                 switch (pend[-1]) {
12220                   case '\n':
12221                     if (--pend == p || pend[-1] != '\r') {
12222                         pend++;
12223                         break;
12224                     }
12225                   case '\r':
12226                     --pend;
12227                 }
12228             }
12229             if (str)
12230                 rb_str_cat(str, p, pend - p);
12231             else
12232                 str = STR_NEW(p, pend - p);
12233             if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12234             lex_goto_eol(parser);
12235             if (nextc() == -1) {
12236                 if (str) dispose_string(str);
12237                 goto error;
12238             }
12239         } while (!whole_match_p(eos, len, indent));
12240     }
12241     else {
12242         /*      int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12243         newtok();
12244         if (c == '#') {
12245             switch (c = nextc()) {
12246               case '$':
12247               case '@':
12248                 pushback(c);
12249                 return tSTRING_DVAR;
12250               case '{':
12251                 return tSTRING_DBEG;
12252             }
12253             tokadd('#');
12254         }
12255         do {
12256             pushback(c);
12257             if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12258                 if (parser->eofp) goto error;
12259                 goto restore;
12260             }
12261             if (c != '\n') {
12262                 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12263                 return tSTRING_CONTENT;
12264             }
12265             tokadd(nextc());
12266             /*      if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12267             if ((c = nextc()) == -1) goto error;
12268         } while (!whole_match_p(eos, len, indent));
12269         str = STR_NEW3(tok(), toklen(), enc, func);
12270     }
12271 #ifdef RIPPER
12272     if (!NIL_P(parser->delayed))
12273         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12274     lex_goto_eol(parser);
12275     ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12276 #endif
12277     heredoc_restore(lex_strterm);
12278     lex_strterm = NEW_STRTERM(-1, 0, 0);
12279     set_yylval_str(str);
12280     return tSTRING_CONTENT;
12281 }
12282 
12283 #include "lex.c"
12284 
12285 static void
12286 arg_ambiguous_gen(struct parser_params *parser)
12287 {
12288 #ifndef RIPPER
12289     rb_warning0("ambiguous first argument; put parentheses or even spaces");
12290 #else
12291     dispatch0(arg_ambiguous);
12292 #endif
12293 }
12294 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12295 
12296 static ID
12297 formal_argument_gen(struct parser_params *parser, ID lhs)
12298 {
12299 #ifndef RIPPER
12300     if (!is_local_id(lhs))
12301         yyerror("formal argument must be local variable");
12302 #endif
12303     shadowing_lvar(lhs);
12304     return lhs;
12305 }
12306 
12307 static int
12308 lvar_defined_gen(struct parser_params *parser, ID id)
12309 {
12310     return (dyna_in_block() && dvar_defined(id)) || local_id(id);
12311 }
12312 
12313 /* emacsen -*- hack */
12314 static long
12315 parser_encode_length(struct parser_params *parser, const char *name, long len)
12316 {
12317     long nlen;
12318 
12319     if (len > 5 && name[nlen = len - 5] == '-') {
12320         if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12321             return nlen;
12322     }
12323     if (len > 4 && name[nlen = len - 4] == '-') {
12324         if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12325             return nlen;
12326         if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12327             !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12328             /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
12329             return nlen;
12330     }
12331     return len;
12332 }
12333 
12334 static void
12335 parser_set_encode(struct parser_params *parser, const char *name)
12336 {
12337     int idx = rb_enc_find_index(name);
12338     rb_encoding *enc;
12339     VALUE excargs[3];
12340 
12341     if (idx < 0) {
12342         VALUE rb_make_backtrace(void);
12343         VALUE rb_make_exception(int, VALUE*);
12344 
12345         excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12346       error:
12347         excargs[0] = rb_eArgError;
12348         excargs[2] = rb_make_backtrace();
12349         rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12350         rb_exc_raise(rb_make_exception(3, excargs));
12351     }
12352     enc = rb_enc_from_index(idx);
12353     if (!rb_enc_asciicompat(enc)) {
12354         excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12355         goto error;
12356     }
12357     parser->enc = enc;
12358 #ifndef RIPPER
12359     if (ruby_debug_lines) {
12360         long i, n = RARRAY_LEN(ruby_debug_lines);
12361         const VALUE *p = RARRAY_PTR(ruby_debug_lines);
12362         for (i = 0; i < n; ++i) {
12363             rb_enc_associate_index(*p, idx);
12364         }
12365     }
12366 #endif
12367 }
12368 
12369 static int
12370 comment_at_top(struct parser_params *parser)
12371 {
12372     const char *p = lex_pbeg, *pend = lex_p - 1;
12373     if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
12374     while (p < pend) {
12375         if (!ISSPACE(*p)) return 0;
12376         p++;
12377     }
12378     return 1;
12379 }
12380 
12381 #ifndef RIPPER
12382 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
12383 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
12384 
12385 static void
12386 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
12387 {
12388     if (!comment_at_top(parser)) {
12389         return;
12390     }
12391     parser_set_encode(parser, val);
12392 }
12393 
12394 struct magic_comment {
12395     const char *name;
12396     rb_magic_comment_setter_t func;
12397     rb_magic_comment_length_t length;
12398 };
12399 
12400 static const struct magic_comment magic_comments[] = {
12401     {"coding", magic_comment_encoding, parser_encode_length},
12402     {"encoding", magic_comment_encoding, parser_encode_length},
12403 };
12404 #endif
12405 
12406 static const char *
12407 magic_comment_marker(const char *str, long len)
12408 {
12409     long i = 2;
12410 
12411     while (i < len) {
12412         switch (str[i]) {
12413           case '-':
12414             if (str[i-1] == '*' && str[i-2] == '-') {
12415                 return str + i + 1;
12416             }
12417             i += 2;
12418             break;
12419           case '*':
12420             if (i + 1 >= len) return 0;
12421             if (str[i+1] != '-') {
12422                 i += 4;
12423             }
12424             else if (str[i-1] != '-') {
12425                 i += 2;
12426             }
12427             else {
12428                 return str + i + 2;
12429             }
12430             break;
12431           default:
12432             i += 3;
12433             break;
12434         }
12435     }
12436     return 0;
12437 }
12438 
12439 static int
12440 parser_magic_comment(struct parser_params *parser, const char *str, long len)
12441 {
12442     VALUE name = 0, val = 0;
12443     const char *beg, *end, *vbeg, *vend;
12444 #define str_copy(_s, _p, _n) ((_s) \
12445         ? (rb_str_resize((_s), (_n)), \
12446            MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
12447         : ((_s) = STR_NEW((_p), (_n))))
12448 
12449     if (len <= 7) return FALSE;
12450     if (!(beg = magic_comment_marker(str, len))) return FALSE;
12451     if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
12452     str = beg;
12453     len = end - beg - 3;
12454 
12455     /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
12456     while (len > 0) {
12457 #ifndef RIPPER
12458         const struct magic_comment *p = magic_comments;
12459 #endif
12460         char *s;
12461         int i;
12462         long n = 0;
12463 
12464         for (; len > 0 && *str; str++, --len) {
12465             switch (*str) {
12466               case '\'': case '"': case ':': case ';':
12467                 continue;
12468             }
12469             if (!ISSPACE(*str)) break;
12470         }
12471         for (beg = str; len > 0; str++, --len) {
12472             switch (*str) {
12473               case '\'': case '"': case ':': case ';':
12474                 break;
12475               default:
12476                 if (ISSPACE(*str)) break;
12477                 continue;
12478             }
12479             break;
12480         }
12481         for (end = str; len > 0 && ISSPACE(*str); str++, --len);
12482         if (!len) break;
12483         if (*str != ':') continue;
12484 
12485         do str++; while (--len > 0 && ISSPACE(*str));
12486         if (!len) break;
12487         if (*str == '"') {
12488             for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
12489                 if (*str == '\\') {
12490                     --len;
12491                     ++str;
12492                 }
12493             }
12494             vend = str;
12495             if (len) {
12496                 --len;
12497                 ++str;
12498             }
12499         }
12500         else {
12501             for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
12502             vend = str;
12503         }
12504         while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
12505 
12506         n = end - beg;
12507         str_copy(name, beg, n);
12508         s = RSTRING_PTR(name);
12509         for (i = 0; i < n; ++i) {
12510             if (s[i] == '-') s[i] = '_';
12511         }
12512 #ifndef RIPPER
12513         do {
12514             if (STRNCASECMP(p->name, s, n) == 0) {
12515                 n = vend - vbeg;
12516                 if (p->length) {
12517                     n = (*p->length)(parser, vbeg, n);
12518                 }
12519                 str_copy(val, vbeg, n);
12520                 (*p->func)(parser, s, RSTRING_PTR(val));
12521                 break;
12522             }
12523         } while (++p < magic_comments + numberof(magic_comments));
12524 #else
12525         dispatch2(magic_comment, name, val);
12526 #endif
12527     }
12528 
12529     return TRUE;
12530 }
12531 
12532 static void
12533 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
12534 {
12535     int sep = 0;
12536     const char *beg = str;
12537     VALUE s;
12538 
12539     for (;;) {
12540         if (send - str <= 6) return;
12541         switch (str[6]) {
12542           case 'C': case 'c': str += 6; continue;
12543           case 'O': case 'o': str += 5; continue;
12544           case 'D': case 'd': str += 4; continue;
12545           case 'I': case 'i': str += 3; continue;
12546           case 'N': case 'n': str += 2; continue;
12547           case 'G': case 'g': str += 1; continue;
12548           case '=': case ':':
12549             sep = 1;
12550             str += 6;
12551             break;
12552           default:
12553             str += 6;
12554             if (ISSPACE(*str)) break;
12555             continue;
12556         }
12557         if (STRNCASECMP(str-6, "coding", 6) == 0) break;
12558     }
12559     for (;;) {
12560         do {
12561             if (++str >= send) return;
12562         } while (ISSPACE(*str));
12563         if (sep) break;
12564         if (*str != '=' && *str != ':') return;
12565         sep = 1;
12566         str++;
12567     }
12568     beg = str;
12569     while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
12570     s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
12571     parser_set_encode(parser, RSTRING_PTR(s));
12572     rb_str_resize(s, 0);
12573 }
12574 
12575 static void
12576 parser_prepare(struct parser_params *parser)
12577 {
12578     int c = nextc();
12579     switch (c) {
12580       case '#':
12581         if (peek('!')) parser->has_shebang = 1;
12582         break;
12583       case 0xef:                /* UTF-8 BOM marker */
12584         if (lex_pend - lex_p >= 2 &&
12585             (unsigned char)lex_p[0] == 0xbb &&
12586             (unsigned char)lex_p[1] == 0xbf) {
12587             parser->enc = rb_utf8_encoding();
12588             lex_p += 2;
12589             lex_pbeg = lex_p;
12590             return;
12591         }
12592         break;
12593       case EOF:
12594         return;
12595     }
12596     pushback(c);
12597     parser->enc = rb_enc_get(lex_lastline);
12598 }
12599 
12600 #define IS_ARG() (lex_state == EXPR_ARG || lex_state == EXPR_CMDARG)
12601 #define IS_END() (lex_state == EXPR_END || lex_state == EXPR_ENDARG || lex_state == EXPR_ENDFN)
12602 #define IS_BEG() (lex_state == EXPR_BEG || lex_state == EXPR_MID || lex_state == EXPR_VALUE || lex_state == EXPR_CLASS)
12603 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
12604 
12605 #ifndef RIPPER
12606 #define ambiguous_operator(op, syn) ( \
12607     rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
12608     rb_warning0("even though it seems like "syn""))
12609 #else
12610 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
12611 #endif
12612 #define warn_balanced(op, syn) \
12613     (last_state != EXPR_CLASS && last_state != EXPR_DOT && \
12614      last_state != EXPR_FNAME && last_state != EXPR_ENDFN && \
12615      last_state != EXPR_ENDARG && \
12616      space_seen && !ISSPACE(c) && \
12617      (ambiguous_operator(op, syn), 0))
12618 
12619 static int
12620 parser_yylex(struct parser_params *parser)
12621 {
12622     register int c;
12623     int space_seen = 0;
12624     int cmd_state;
12625     enum lex_state_e last_state;
12626     rb_encoding *enc;
12627     int mb;
12628 #ifdef RIPPER
12629     int fallthru = FALSE;
12630 #endif
12631 
12632     if (lex_strterm) {
12633         int token;
12634         if (nd_type(lex_strterm) == NODE_HEREDOC) {
12635             token = here_document(lex_strterm);
12636             if (token == tSTRING_END) {
12637                 lex_strterm = 0;
12638                 lex_state = EXPR_END;
12639             }
12640         }
12641         else {
12642             token = parse_string(lex_strterm);
12643             if (token == tSTRING_END || token == tREGEXP_END) {
12644                 rb_gc_force_recycle((VALUE)lex_strterm);
12645                 lex_strterm = 0;
12646                 lex_state = EXPR_END;
12647             }
12648         }
12649         return token;
12650     }
12651     cmd_state = command_start;
12652     command_start = FALSE;
12653   retry:
12654     last_state = lex_state;
12655     switch (c = nextc()) {
12656       case '\0':                /* NUL */
12657       case '\004':              /* ^D */
12658       case '\032':              /* ^Z */
12659       case -1:                  /* end of script. */
12660         return 0;
12661 
12662         /* white spaces */
12663       case ' ': case '\t': case '\f': case '\r':
12664       case '\13': /* '\v' */
12665         space_seen = 1;
12666 #ifdef RIPPER
12667         while ((c = nextc())) {
12668             switch (c) {
12669               case ' ': case '\t': case '\f': case '\r':
12670               case '\13': /* '\v' */
12671                 break;
12672               default:
12673                 goto outofloop;
12674             }
12675         }
12676       outofloop:
12677         pushback(c);
12678         ripper_dispatch_scan_event(parser, tSP);
12679 #endif
12680         goto retry;
12681 
12682       case '#':         /* it's a comment */
12683         /* no magic_comment in shebang line */
12684         if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
12685             if (comment_at_top(parser)) {
12686                 set_file_encoding(parser, lex_p, lex_pend);
12687             }
12688         }
12689         lex_p = lex_pend;
12690 #ifdef RIPPER
12691         ripper_dispatch_scan_event(parser, tCOMMENT);
12692         fallthru = TRUE;
12693 #endif
12694         /* fall through */
12695       case '\n':
12696         switch (lex_state) {
12697           case EXPR_BEG:
12698           case EXPR_FNAME:
12699           case EXPR_DOT:
12700           case EXPR_CLASS:
12701           case EXPR_VALUE:
12702 #ifdef RIPPER
12703             if (!fallthru) {
12704                 ripper_dispatch_scan_event(parser, tIGNORED_NL);
12705             }
12706             fallthru = FALSE;
12707 #endif
12708             goto retry;
12709           default:
12710             break;
12711         }
12712         while ((c = nextc())) {
12713             switch (c) {
12714               case ' ': case '\t': case '\f': case '\r':
12715               case '\13': /* '\v' */
12716                 space_seen = 1;
12717                 break;
12718               case '.': {
12719                   if ((c = nextc()) != '.') {
12720                       pushback(c);
12721                       pushback('.');
12722                       goto retry;
12723                   }
12724               }
12725               default:
12726                 --ruby_sourceline;
12727                 lex_nextline = lex_lastline;
12728               case -1:          /* EOF no decrement*/
12729                 lex_goto_eol(parser);
12730 #ifdef RIPPER
12731                 if (c != -1) {
12732                     parser->tokp = lex_p;
12733                 }
12734 #endif
12735                 goto normal_newline;
12736             }
12737         }
12738       normal_newline:
12739         command_start = TRUE;
12740         lex_state = EXPR_BEG;
12741         return '\n';
12742 
12743       case '*':
12744         if ((c = nextc()) == '*') {
12745             if ((c = nextc()) == '=') {
12746                 set_yylval_id(tPOW);
12747                 lex_state = EXPR_BEG;
12748                 return tOP_ASGN;
12749             }
12750             pushback(c);
12751             c = tPOW;
12752         }
12753         else {
12754             if (c == '=') {
12755                 set_yylval_id('*');
12756                 lex_state = EXPR_BEG;
12757                 return tOP_ASGN;
12758             }
12759             pushback(c);
12760             if (IS_SPCARG(c)) {
12761                 rb_warning0("`*' interpreted as argument prefix");
12762                 c = tSTAR;
12763             }
12764             else if (IS_BEG()) {
12765                 c = tSTAR;
12766             }
12767             else {
12768                 warn_balanced("*", "argument prefix");
12769                 c = '*';
12770             }
12771         }
12772         switch (lex_state) {
12773           case EXPR_FNAME: case EXPR_DOT:
12774             lex_state = EXPR_ARG; break;
12775           default:
12776             lex_state = EXPR_BEG; break;
12777         }
12778         return c;
12779 
12780       case '!':
12781         c = nextc();
12782         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
12783             lex_state = EXPR_ARG;
12784             if (c == '@') {
12785                 return '!';
12786             }
12787         }
12788         else {
12789             lex_state = EXPR_BEG;
12790         }
12791         if (c == '=') {
12792             return tNEQ;
12793         }
12794         if (c == '~') {
12795             return tNMATCH;
12796         }
12797         pushback(c);
12798         return '!';
12799 
12800       case '=':
12801         if (was_bol()) {
12802             /* skip embedded rd document */
12803             if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
12804 #ifdef RIPPER
12805                 int first_p = TRUE;
12806 
12807                 lex_goto_eol(parser);
12808                 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
12809 #endif
12810                 for (;;) {
12811                     lex_goto_eol(parser);
12812 #ifdef RIPPER
12813                     if (!first_p) {
12814                         ripper_dispatch_scan_event(parser, tEMBDOC);
12815                     }
12816                     first_p = FALSE;
12817 #endif
12818                     c = nextc();
12819                     if (c == -1) {
12820                         compile_error(PARSER_ARG "embedded document meets end of file");
12821                         return 0;
12822                     }
12823                     if (c != '=') continue;
12824                     if (strncmp(lex_p, "end", 3) == 0 &&
12825                         (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
12826                         break;
12827                     }
12828                 }
12829                 lex_goto_eol(parser);
12830 #ifdef RIPPER
12831                 ripper_dispatch_scan_event(parser, tEMBDOC_END);
12832 #endif
12833                 goto retry;
12834             }
12835         }
12836 
12837         switch (lex_state) {
12838           case EXPR_FNAME: case EXPR_DOT:
12839             lex_state = EXPR_ARG; break;
12840           default:
12841             lex_state = EXPR_BEG; break;
12842         }
12843         if ((c = nextc()) == '=') {
12844             if ((c = nextc()) == '=') {
12845                 return tEQQ;
12846             }
12847             pushback(c);
12848             return tEQ;
12849         }
12850         if (c == '~') {
12851             return tMATCH;
12852         }
12853         else if (c == '>') {
12854             return tASSOC;
12855         }
12856         pushback(c);
12857         return '=';
12858 
12859       case '<':
12860         last_state = lex_state;
12861         c = nextc();
12862         if (c == '<' &&
12863             lex_state != EXPR_DOT &&
12864             lex_state != EXPR_CLASS &&
12865             !IS_END() &&
12866             (!IS_ARG() || space_seen)) {
12867             int token = heredoc_identifier();
12868             if (token) return token;
12869         }
12870         switch (lex_state) {
12871           case EXPR_FNAME: case EXPR_DOT:
12872             lex_state = EXPR_ARG; break;
12873           default:
12874             lex_state = EXPR_BEG; break;
12875         }
12876         if (c == '=') {
12877             if ((c = nextc()) == '>') {
12878                 return tCMP;
12879             }
12880             pushback(c);
12881             return tLEQ;
12882         }
12883         if (c == '<') {
12884             if ((c = nextc()) == '=') {
12885                 set_yylval_id(tLSHFT);
12886                 lex_state = EXPR_BEG;
12887                 return tOP_ASGN;
12888             }
12889             pushback(c);
12890             warn_balanced("<<", "here document");
12891             return tLSHFT;
12892         }
12893         pushback(c);
12894         return '<';
12895 
12896       case '>':
12897         switch (lex_state) {
12898           case EXPR_FNAME: case EXPR_DOT:
12899             lex_state = EXPR_ARG; break;
12900           default:
12901             lex_state = EXPR_BEG; break;
12902         }
12903         if ((c = nextc()) == '=') {
12904             return tGEQ;
12905         }
12906         if (c == '>') {
12907             if ((c = nextc()) == '=') {
12908                 set_yylval_id(tRSHFT);
12909                 lex_state = EXPR_BEG;
12910                 return tOP_ASGN;
12911             }
12912             pushback(c);
12913             return tRSHFT;
12914         }
12915         pushback(c);
12916         return '>';
12917 
12918       case '"':
12919         lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
12920         return tSTRING_BEG;
12921 
12922       case '`':
12923         if (lex_state == EXPR_FNAME) {
12924             lex_state = EXPR_ENDFN;
12925             return c;
12926         }
12927         if (lex_state == EXPR_DOT) {
12928             if (cmd_state)
12929                 lex_state = EXPR_CMDARG;
12930             else
12931                 lex_state = EXPR_ARG;
12932             return c;
12933         }
12934         lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
12935         return tXSTRING_BEG;
12936 
12937       case '\'':
12938         lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
12939         return tSTRING_BEG;
12940 
12941       case '?':
12942         if (IS_END()) {
12943             lex_state = EXPR_VALUE;
12944             return '?';
12945         }
12946         c = nextc();
12947         if (c == -1) {
12948             compile_error(PARSER_ARG "incomplete character syntax");
12949             return 0;
12950         }
12951         if (rb_enc_isspace(c, parser->enc)) {
12952             if (!IS_ARG()) {
12953                 int c2 = 0;
12954                 switch (c) {
12955                   case ' ':
12956                     c2 = 's';
12957                     break;
12958                   case '\n':
12959                     c2 = 'n';
12960                     break;
12961                   case '\t':
12962                     c2 = 't';
12963                     break;
12964                   case '\v':
12965                     c2 = 'v';
12966                     break;
12967                   case '\r':
12968                     c2 = 'r';
12969                     break;
12970                   case '\f':
12971                     c2 = 'f';
12972                     break;
12973                 }
12974                 if (c2) {
12975                     rb_warnI("invalid character syntax; use ?\\%c", c2);
12976                 }
12977             }
12978           ternary:
12979             pushback(c);
12980             lex_state = EXPR_VALUE;
12981             return '?';
12982         }
12983         newtok();
12984         enc = parser->enc;
12985         if (!parser_isascii()) {
12986             if (tokadd_mbchar(c) == -1) return 0;
12987         }
12988         else if ((rb_enc_isalnum(c, parser->enc) || c == '_') &&
12989                  lex_p < lex_pend && is_identchar(lex_p, lex_pend, parser->enc)) {
12990             goto ternary;
12991         }
12992         else if (c == '\\') {
12993             if (peek('u')) {
12994                 nextc();
12995                 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
12996                 if (0x80 <= c) {
12997                     tokaddmbc(c, enc);
12998                 }
12999                 else {
13000                     tokadd(c);
13001                 }
13002             }
13003             else {
13004                 c = read_escape(0, &enc);
13005                 tokadd(c);
13006             }
13007         }
13008         else {
13009             tokadd(c);
13010         }
13011         tokfix();
13012         set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13013         lex_state = EXPR_END;
13014         return tCHAR;
13015 
13016       case '&':
13017         if ((c = nextc()) == '&') {
13018             lex_state = EXPR_BEG;
13019             if ((c = nextc()) == '=') {
13020                 set_yylval_id(tANDOP);
13021                 lex_state = EXPR_BEG;
13022                 return tOP_ASGN;
13023             }
13024             pushback(c);
13025             return tANDOP;
13026         }
13027         else if (c == '=') {
13028             set_yylval_id('&');
13029             lex_state = EXPR_BEG;
13030             return tOP_ASGN;
13031         }
13032         pushback(c);
13033         if (IS_SPCARG(c)) {
13034             rb_warning0("`&' interpreted as argument prefix");
13035             c = tAMPER;
13036         }
13037         else if (IS_BEG()) {
13038             c = tAMPER;
13039         }
13040         else {
13041             warn_balanced("&", "argument prefix");
13042             c = '&';
13043         }
13044         switch (lex_state) {
13045           case EXPR_FNAME: case EXPR_DOT:
13046             lex_state = EXPR_ARG; break;
13047           default:
13048             lex_state = EXPR_BEG;
13049         }
13050         return c;
13051 
13052       case '|':
13053         if ((c = nextc()) == '|') {
13054             lex_state = EXPR_BEG;
13055             if ((c = nextc()) == '=') {
13056                 set_yylval_id(tOROP);
13057                 lex_state = EXPR_BEG;
13058                 return tOP_ASGN;
13059             }
13060             pushback(c);
13061             return tOROP;
13062         }
13063         if (c == '=') {
13064             set_yylval_id('|');
13065             lex_state = EXPR_BEG;
13066             return tOP_ASGN;
13067         }
13068         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13069             lex_state = EXPR_ARG;
13070         }
13071         else {
13072             lex_state = EXPR_BEG;
13073         }
13074         pushback(c);
13075         return '|';
13076 
13077       case '+':
13078         c = nextc();
13079         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13080             lex_state = EXPR_ARG;
13081             if (c == '@') {
13082                 return tUPLUS;
13083             }
13084             pushback(c);
13085             return '+';
13086         }
13087         if (c == '=') {
13088             set_yylval_id('+');
13089             lex_state = EXPR_BEG;
13090             return tOP_ASGN;
13091         }
13092         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13093             lex_state = EXPR_BEG;
13094             pushback(c);
13095             if (c != -1 && ISDIGIT(c)) {
13096                 c = '+';
13097                 goto start_num;
13098             }
13099             return tUPLUS;
13100         }
13101         lex_state = EXPR_BEG;
13102         pushback(c);
13103         warn_balanced("+", "unary operator");
13104         return '+';
13105 
13106       case '-':
13107         c = nextc();
13108         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13109             lex_state = EXPR_ARG;
13110             if (c == '@') {
13111                 return tUMINUS;
13112             }
13113             pushback(c);
13114             return '-';
13115         }
13116         if (c == '=') {
13117             set_yylval_id('-');
13118             lex_state = EXPR_BEG;
13119             return tOP_ASGN;
13120         }
13121         if (c == '>') {
13122             lex_state = EXPR_ARG;
13123             return tLAMBDA;
13124         }
13125         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13126             lex_state = EXPR_BEG;
13127             pushback(c);
13128             if (c != -1 && ISDIGIT(c)) {
13129                 return tUMINUS_NUM;
13130             }
13131             return tUMINUS;
13132         }
13133         lex_state = EXPR_BEG;
13134         pushback(c);
13135         warn_balanced("-", "unary operator");
13136         return '-';
13137 
13138       case '.':
13139         lex_state = EXPR_BEG;
13140         if ((c = nextc()) == '.') {
13141             if ((c = nextc()) == '.') {
13142                 return tDOT3;
13143             }
13144             pushback(c);
13145             return tDOT2;
13146         }
13147         pushback(c);
13148         if (c != -1 && ISDIGIT(c)) {
13149             yyerror("no .<digit> floating literal anymore; put 0 before dot");
13150         }
13151         lex_state = EXPR_DOT;
13152         return '.';
13153 
13154       start_num:
13155       case '0': case '1': case '2': case '3': case '4':
13156       case '5': case '6': case '7': case '8': case '9':
13157         {
13158             int is_float, seen_point, seen_e, nondigit;
13159 
13160             is_float = seen_point = seen_e = nondigit = 0;
13161             lex_state = EXPR_END;
13162             newtok();
13163             if (c == '-' || c == '+') {
13164                 tokadd(c);
13165                 c = nextc();
13166             }
13167             if (c == '0') {
13168 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13169                 int start = toklen();
13170                 c = nextc();
13171                 if (c == 'x' || c == 'X') {
13172                     /* hexadecimal */
13173                     c = nextc();
13174                     if (c != -1 && ISXDIGIT(c)) {
13175                         do {
13176                             if (c == '_') {
13177                                 if (nondigit) break;
13178                                 nondigit = c;
13179                                 continue;
13180                             }
13181                             if (!ISXDIGIT(c)) break;
13182                             nondigit = 0;
13183                             tokadd(c);
13184                         } while ((c = nextc()) != -1);
13185                     }
13186                     pushback(c);
13187                     tokfix();
13188                     if (toklen() == start) {
13189                         no_digits();
13190                     }
13191                     else if (nondigit) goto trailing_uc;
13192                     set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13193                     return tINTEGER;
13194                 }
13195                 if (c == 'b' || c == 'B') {
13196                     /* binary */
13197                     c = nextc();
13198                     if (c == '0' || c == '1') {
13199                         do {
13200                             if (c == '_') {
13201                                 if (nondigit) break;
13202                                 nondigit = c;
13203                                 continue;
13204                             }
13205                             if (c != '0' && c != '1') break;
13206                             nondigit = 0;
13207                             tokadd(c);
13208                         } while ((c = nextc()) != -1);
13209                     }
13210                     pushback(c);
13211                     tokfix();
13212                     if (toklen() == start) {
13213                         no_digits();
13214                     }
13215                     else if (nondigit) goto trailing_uc;
13216                     set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13217                     return tINTEGER;
13218                 }
13219                 if (c == 'd' || c == 'D') {
13220                     /* decimal */
13221                     c = nextc();
13222                     if (c != -1 && ISDIGIT(c)) {
13223                         do {
13224                             if (c == '_') {
13225                                 if (nondigit) break;
13226                                 nondigit = c;
13227                                 continue;
13228                             }
13229                             if (!ISDIGIT(c)) break;
13230                             nondigit = 0;
13231                             tokadd(c);
13232                         } while ((c = nextc()) != -1);
13233                     }
13234                     pushback(c);
13235                     tokfix();
13236                     if (toklen() == start) {
13237                         no_digits();
13238                     }
13239                     else if (nondigit) goto trailing_uc;
13240                     set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13241                     return tINTEGER;
13242                 }
13243                 if (c == '_') {
13244                     /* 0_0 */
13245                     goto octal_number;
13246                 }
13247                 if (c == 'o' || c == 'O') {
13248                     /* prefixed octal */
13249                     c = nextc();
13250                     if (c == -1 || c == '_' || !ISDIGIT(c)) {
13251                         no_digits();
13252                     }
13253                 }
13254                 if (c >= '0' && c <= '7') {
13255                     /* octal */
13256                   octal_number:
13257                     do {
13258                         if (c == '_') {
13259                             if (nondigit) break;
13260                             nondigit = c;
13261                             continue;
13262                         }
13263                         if (c < '0' || c > '9') break;
13264                         if (c > '7') goto invalid_octal;
13265                         nondigit = 0;
13266                         tokadd(c);
13267                     } while ((c = nextc()) != -1);
13268                     if (toklen() > start) {
13269                         pushback(c);
13270                         tokfix();
13271                         if (nondigit) goto trailing_uc;
13272                         set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13273                         return tINTEGER;
13274                     }
13275                     if (nondigit) {
13276                         pushback(c);
13277                         goto trailing_uc;
13278                     }
13279                 }
13280                 if (c > '7' && c <= '9') {
13281                   invalid_octal:
13282                     yyerror("Invalid octal digit");
13283                 }
13284                 else if (c == '.' || c == 'e' || c == 'E') {
13285                     tokadd('0');
13286                 }
13287                 else {
13288                     pushback(c);
13289                     set_yylval_literal(INT2FIX(0));
13290                     return tINTEGER;
13291                 }
13292             }
13293 
13294             for (;;) {
13295                 switch (c) {
13296                   case '0': case '1': case '2': case '3': case '4':
13297                   case '5': case '6': case '7': case '8': case '9':
13298                     nondigit = 0;
13299                     tokadd(c);
13300                     break;
13301 
13302                   case '.':
13303                     if (nondigit) goto trailing_uc;
13304                     if (seen_point || seen_e) {
13305                         goto decode_num;
13306                     }
13307                     else {
13308                         int c0 = nextc();
13309                         if (c0 == -1 || !ISDIGIT(c0)) {
13310                             pushback(c0);
13311                             goto decode_num;
13312                         }
13313                         c = c0;
13314                     }
13315                     tokadd('.');
13316                     tokadd(c);
13317                     is_float++;
13318                     seen_point++;
13319                     nondigit = 0;
13320                     break;
13321 
13322                   case 'e':
13323                   case 'E':
13324                     if (nondigit) {
13325                         pushback(c);
13326                         c = nondigit;
13327                         goto decode_num;
13328                     }
13329                     if (seen_e) {
13330                         goto decode_num;
13331                     }
13332                     tokadd(c);
13333                     seen_e++;
13334                     is_float++;
13335                     nondigit = c;
13336                     c = nextc();
13337                     if (c != '-' && c != '+') continue;
13338                     tokadd(c);
13339                     nondigit = c;
13340                     break;
13341 
13342                   case '_':     /* `_' in number just ignored */
13343                     if (nondigit) goto decode_num;
13344                     nondigit = c;
13345                     break;
13346 
13347                   default:
13348                     goto decode_num;
13349                 }
13350                 c = nextc();
13351             }
13352 
13353           decode_num:
13354             pushback(c);
13355             if (nondigit) {
13356                 char tmp[30];
13357               trailing_uc:
13358                 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
13359                 yyerror(tmp);
13360             }
13361             tokfix();
13362             if (is_float) {
13363                 double d = strtod(tok(), 0);
13364                 if (errno == ERANGE) {
13365                     rb_warningS("Float %s out of range", tok());
13366                     errno = 0;
13367                 }
13368                 set_yylval_literal(DBL2NUM(d));
13369                 return tFLOAT;
13370             }
13371             set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13372             return tINTEGER;
13373         }
13374 
13375       case ')':
13376       case ']':
13377         paren_nest--;
13378       case '}':
13379         COND_LEXPOP();
13380         CMDARG_LEXPOP();
13381         if (c == ')')
13382             lex_state = EXPR_ENDFN;
13383         else
13384             lex_state = EXPR_ENDARG;
13385         return c;
13386 
13387       case ':':
13388         c = nextc();
13389         if (c == ':') {
13390             if (IS_BEG() || lex_state == EXPR_CLASS || IS_SPCARG(-1)) {
13391                 lex_state = EXPR_BEG;
13392                 return tCOLON3;
13393             }
13394             lex_state = EXPR_DOT;
13395             return tCOLON2;
13396         }
13397         if (IS_END() || ISSPACE(c)) {
13398             pushback(c);
13399             warn_balanced(":", "symbol literal");
13400             lex_state = EXPR_BEG;
13401             return ':';
13402         }
13403         switch (c) {
13404           case '\'':
13405             lex_strterm = NEW_STRTERM(str_ssym, c, 0);
13406             break;
13407           case '"':
13408             lex_strterm = NEW_STRTERM(str_dsym, c, 0);
13409             break;
13410           default:
13411             pushback(c);
13412             break;
13413         }
13414         lex_state = EXPR_FNAME;
13415         return tSYMBEG;
13416 
13417       case '/':
13418         if (IS_BEG()) {
13419             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13420             return tREGEXP_BEG;
13421         }
13422         if ((c = nextc()) == '=') {
13423             set_yylval_id('/');
13424             lex_state = EXPR_BEG;
13425             return tOP_ASGN;
13426         }
13427         pushback(c);
13428         if (IS_SPCARG(c)) {
13429             arg_ambiguous();
13430             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
13431             return tREGEXP_BEG;
13432         }
13433         switch (lex_state) {
13434           case EXPR_FNAME: case EXPR_DOT:
13435             lex_state = EXPR_ARG; break;
13436           default:
13437             lex_state = EXPR_BEG; break;
13438         }
13439         warn_balanced("/", "regexp literal");
13440         return '/';
13441 
13442       case '^':
13443         if ((c = nextc()) == '=') {
13444             set_yylval_id('^');
13445             lex_state = EXPR_BEG;
13446             return tOP_ASGN;
13447         }
13448         switch (lex_state) {
13449           case EXPR_FNAME: case EXPR_DOT:
13450             lex_state = EXPR_ARG; break;
13451           default:
13452             lex_state = EXPR_BEG; break;
13453         }
13454         pushback(c);
13455         return '^';
13456 
13457       case ';':
13458         lex_state = EXPR_BEG;
13459         command_start = TRUE;
13460         return ';';
13461 
13462       case ',':
13463         lex_state = EXPR_BEG;
13464         return ',';
13465 
13466       case '~':
13467         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13468             if ((c = nextc()) != '@') {
13469                 pushback(c);
13470             }
13471             lex_state = EXPR_ARG;
13472         }
13473         else {
13474             lex_state = EXPR_BEG;
13475         }
13476         return '~';
13477 
13478       case '(':
13479         if (IS_BEG()) {
13480             c = tLPAREN;
13481         }
13482         else if (IS_SPCARG(-1)) {
13483             c = tLPAREN_ARG;
13484         }
13485         paren_nest++;
13486         COND_PUSH(0);
13487         CMDARG_PUSH(0);
13488         lex_state = EXPR_BEG;
13489         return c;
13490 
13491       case '[':
13492         paren_nest++;
13493         if (lex_state == EXPR_FNAME || lex_state == EXPR_DOT) {
13494             lex_state = EXPR_ARG;
13495             if ((c = nextc()) == ']') {
13496                 if ((c = nextc()) == '=') {
13497                     return tASET;
13498                 }
13499                 pushback(c);
13500                 return tAREF;
13501             }
13502             pushback(c);
13503             return '[';
13504         }
13505         else if (IS_BEG()) {
13506             c = tLBRACK;
13507         }
13508         else if (IS_ARG() && space_seen) {
13509             c = tLBRACK;
13510         }
13511         lex_state = EXPR_BEG;
13512         COND_PUSH(0);
13513         CMDARG_PUSH(0);
13514         return c;
13515 
13516       case '{':
13517         if (lpar_beg && lpar_beg == paren_nest) {
13518             lex_state = EXPR_BEG;
13519             lpar_beg = 0;
13520             --paren_nest;
13521             COND_PUSH(0);
13522             CMDARG_PUSH(0);
13523             return tLAMBEG;
13524         }
13525         if (IS_ARG() || lex_state == EXPR_END || lex_state == EXPR_ENDFN)
13526             c = '{';          /* block (primary) */
13527         else if (lex_state == EXPR_ENDARG)
13528             c = tLBRACE_ARG;  /* block (expr) */
13529         else
13530             c = tLBRACE;      /* hash */
13531         COND_PUSH(0);
13532         CMDARG_PUSH(0);
13533         lex_state = EXPR_BEG;
13534         if (c != tLBRACE) command_start = TRUE;
13535         return c;
13536 
13537       case '\\':
13538         c = nextc();
13539         if (c == '\n') {
13540             space_seen = 1;
13541 #ifdef RIPPER
13542             ripper_dispatch_scan_event(parser, tSP);
13543 #endif
13544             goto retry; /* skip \\n */
13545         }
13546         pushback(c);
13547         return '\\';
13548 
13549       case '%':
13550         if (IS_BEG()) {
13551             int term;
13552             int paren;
13553 
13554             c = nextc();
13555           quotation:
13556             if (c == -1 || !ISALNUM(c)) {
13557                 term = c;
13558                 c = 'Q';
13559             }
13560             else {
13561                 term = nextc();
13562                 if (rb_enc_isalnum(term, parser->enc) || !parser_isascii()) {
13563                     yyerror("unknown type of %string");
13564                     return 0;
13565                 }
13566             }
13567             if (c == -1 || term == -1) {
13568                 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
13569                 return 0;
13570             }
13571             paren = term;
13572             if (term == '(') term = ')';
13573             else if (term == '[') term = ']';
13574             else if (term == '{') term = '}';
13575             else if (term == '<') term = '>';
13576             else paren = 0;
13577 
13578             switch (c) {
13579               case 'Q':
13580                 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
13581                 return tSTRING_BEG;
13582 
13583               case 'q':
13584                 lex_strterm = NEW_STRTERM(str_squote, term, paren);
13585                 return tSTRING_BEG;
13586 
13587               case 'W':
13588                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
13589                 do {c = nextc();} while (ISSPACE(c));
13590                 pushback(c);
13591                 return tWORDS_BEG;
13592 
13593               case 'w':
13594                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
13595                 do {c = nextc();} while (ISSPACE(c));
13596                 pushback(c);
13597                 return tQWORDS_BEG;
13598 
13599               case 'x':
13600                 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
13601                 return tXSTRING_BEG;
13602 
13603               case 'r':
13604                 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
13605                 return tREGEXP_BEG;
13606 
13607               case 's':
13608                 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
13609                 lex_state = EXPR_FNAME;
13610                 return tSYMBEG;
13611 
13612               default:
13613                 yyerror("unknown type of %string");
13614                 return 0;
13615             }
13616         }
13617         if ((c = nextc()) == '=') {
13618             set_yylval_id('%');
13619             lex_state = EXPR_BEG;
13620             return tOP_ASGN;
13621         }
13622         if (IS_SPCARG(c)) {
13623             goto quotation;
13624         }
13625         switch (lex_state) {
13626           case EXPR_FNAME: case EXPR_DOT:
13627             lex_state = EXPR_ARG; break;
13628           default:
13629             lex_state = EXPR_BEG; break;
13630         }
13631         pushback(c);
13632         warn_balanced("%%", "string literal");
13633         return '%';
13634 
13635       case '$':
13636         lex_state = EXPR_END;
13637         newtok();
13638         c = nextc();
13639         switch (c) {
13640           case '_':             /* $_: last read line string */
13641             c = nextc();
13642             if (parser_is_identchar()) {
13643                 tokadd('$');
13644                 tokadd('_');
13645                 break;
13646             }
13647             pushback(c);
13648             c = '_';
13649             /* fall through */
13650           case '~':             /* $~: match-data */
13651           case '*':             /* $*: argv */
13652           case '$':             /* $$: pid */
13653           case '?':             /* $?: last status */
13654           case '!':             /* $!: error string */
13655           case '@':             /* $@: error position */
13656           case '/':             /* $/: input record separator */
13657           case '\\':            /* $\: output record separator */
13658           case ';':             /* $;: field separator */
13659           case ',':             /* $,: output field separator */
13660           case '.':             /* $.: last read line number */
13661           case '=':             /* $=: ignorecase */
13662           case ':':             /* $:: load path */
13663           case '<':             /* $<: reading filename */
13664           case '>':             /* $>: default output handle */
13665           case '\"':            /* $": already loaded files */
13666             tokadd('$');
13667             tokadd(c);
13668             tokfix();
13669             set_yylval_name(rb_intern(tok()));
13670             return tGVAR;
13671 
13672           case '-':
13673             tokadd('$');
13674             tokadd(c);
13675             c = nextc();
13676             if (parser_is_identchar()) {
13677                 if (tokadd_mbchar(c) == -1) return 0;
13678             }
13679             else {
13680                 pushback(c);
13681             }
13682           gvar:
13683             tokfix();
13684             set_yylval_name(rb_intern(tok()));
13685             return tGVAR;
13686 
13687           case '&':             /* $&: last match */
13688           case '`':             /* $`: string before last match */
13689           case '\'':            /* $': string after last match */
13690           case '+':             /* $+: string matches last paren. */
13691             if (last_state == EXPR_FNAME) {
13692                 tokadd('$');
13693                 tokadd(c);
13694                 goto gvar;
13695             }
13696             set_yylval_node(NEW_BACK_REF(c));
13697             return tBACK_REF;
13698 
13699           case '1': case '2': case '3':
13700           case '4': case '5': case '6':
13701           case '7': case '8': case '9':
13702             tokadd('$');
13703             do {
13704                 tokadd(c);
13705                 c = nextc();
13706             } while (c != -1 && ISDIGIT(c));
13707             pushback(c);
13708             if (last_state == EXPR_FNAME) goto gvar;
13709             tokfix();
13710             set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
13711             return tNTH_REF;
13712 
13713           default:
13714             if (!parser_is_identchar()) {
13715                 pushback(c);
13716                 return '$';
13717             }
13718           case '0':
13719             tokadd('$');
13720         }
13721         break;
13722 
13723       case '@':
13724         c = nextc();
13725         newtok();
13726         tokadd('@');
13727         if (c == '@') {
13728             tokadd('@');
13729             c = nextc();
13730         }
13731         if (c != -1 && ISDIGIT(c)) {
13732             if (tokidx == 1) {
13733                 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
13734             }
13735             else {
13736                 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
13737             }
13738             return 0;
13739         }
13740         if (!parser_is_identchar()) {
13741             pushback(c);
13742             return '@';
13743         }
13744         break;
13745 
13746       case '_':
13747         if (was_bol() && whole_match_p("__END__", 7, 0)) {
13748             ruby__end__seen = 1;
13749             parser->eofp = Qtrue;
13750 #ifndef RIPPER
13751             return -1;
13752 #else
13753             lex_goto_eol(parser);
13754             ripper_dispatch_scan_event(parser, k__END__);
13755             return 0;
13756 #endif
13757         }
13758         newtok();
13759         break;
13760 
13761       default:
13762         if (!parser_is_identchar()) {
13763             rb_compile_error(PARSER_ARG  "Invalid char `\\x%02X' in expression", c);
13764             goto retry;
13765         }
13766 
13767         newtok();
13768         break;
13769     }
13770 
13771     mb = ENC_CODERANGE_7BIT;
13772     do {
13773         if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
13774         if (tokadd_mbchar(c) == -1) return 0;
13775         c = nextc();
13776     } while (parser_is_identchar());
13777     switch (tok()[0]) {
13778       case '@': case '$':
13779         pushback(c);
13780         break;
13781       default:
13782         if ((c == '!' || c == '?') && !peek('=')) {
13783             tokadd(c);
13784         }
13785         else {
13786             pushback(c);
13787         }
13788     }
13789     tokfix();
13790 
13791     {
13792         int result = 0;
13793 
13794         last_state = lex_state;
13795         switch (tok()[0]) {
13796           case '$':
13797             lex_state = EXPR_END;
13798             result = tGVAR;
13799             break;
13800           case '@':
13801             lex_state = EXPR_END;
13802             if (tok()[1] == '@')
13803                 result = tCVAR;
13804             else
13805                 result = tIVAR;
13806             break;
13807 
13808           default:
13809             if (toklast() == '!' || toklast() == '?') {
13810                 result = tFID;
13811             }
13812             else {
13813                 if (lex_state == EXPR_FNAME) {
13814                     if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
13815                         (!peek('=') || (lex_p + 1 < lex_pend && lex_p[1] == '>'))) {
13816                         result = tIDENTIFIER;
13817                         tokadd(c);
13818                         tokfix();
13819                     }
13820                     else {
13821                         pushback(c);
13822                     }
13823                 }
13824                 if (result == 0 && ISUPPER(tok()[0])) {
13825                     result = tCONSTANT;
13826                 }
13827                 else {
13828                     result = tIDENTIFIER;
13829                 }
13830             }
13831 
13832             if ((lex_state == EXPR_BEG && !cmd_state) ||
13833                 IS_ARG()) {
13834                 if (peek(':') && !(lex_p + 1 < lex_pend && lex_p[1] == ':')) {
13835                     lex_state = EXPR_BEG;
13836                     nextc();
13837                     set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
13838                     return tLABEL;
13839                 }
13840             }
13841             if (mb == ENC_CODERANGE_7BIT && lex_state != EXPR_DOT) {
13842                 const struct kwtable *kw;
13843 
13844                 /* See if it is a reserved word.  */
13845                 kw = rb_reserved_word(tok(), toklen());
13846                 if (kw) {
13847                     enum lex_state_e state = lex_state;
13848                     lex_state = kw->state;
13849                     if (state == EXPR_FNAME) {
13850                         set_yylval_name(rb_intern(kw->name));
13851                         return kw->id[0];
13852                     }
13853                     if (kw->id[0] == keyword_do) {
13854                         command_start = TRUE;
13855                         if (lpar_beg && lpar_beg == paren_nest) {
13856                             lpar_beg = 0;
13857                             --paren_nest;
13858                             return keyword_do_LAMBDA;
13859                         }
13860                         if (COND_P()) return keyword_do_cond;
13861                         if (CMDARG_P() && state != EXPR_CMDARG)
13862                             return keyword_do_block;
13863                         if (state == EXPR_ENDARG || state == EXPR_BEG)
13864                             return keyword_do_block;
13865                         return keyword_do;
13866                     }
13867                     if (state == EXPR_BEG || state == EXPR_VALUE)
13868                         return kw->id[0];
13869                     else {
13870                         if (kw->id[0] != kw->id[1])
13871                             lex_state = EXPR_BEG;
13872                         return kw->id[1];
13873                     }
13874                 }
13875             }
13876 
13877             if (IS_BEG() ||
13878                 lex_state == EXPR_DOT ||
13879                 IS_ARG()) {
13880                 if (cmd_state) {
13881                     lex_state = EXPR_CMDARG;
13882                 }
13883                 else {
13884                     lex_state = EXPR_ARG;
13885                 }
13886             }
13887             else if (lex_state == EXPR_FNAME) {
13888                 lex_state = EXPR_ENDFN;
13889             }
13890             else {
13891                 lex_state = EXPR_END;
13892             }
13893         }
13894         {
13895             ID ident = TOK_INTERN(!ENC_SINGLE(mb));
13896 
13897             set_yylval_name(ident);
13898             if (last_state != EXPR_DOT && is_local_id(ident) && lvar_defined(ident)) {
13899                 lex_state = EXPR_END;
13900             }
13901         }
13902         return result;
13903     }
13904 }
13905 
13906 #if YYPURE
13907 static int
13908 yylex(void *lval, void *p)
13909 #else
13910 yylex(void *p)
13911 #endif
13912 {
13913     struct parser_params *parser = (struct parser_params*)p;
13914     int t;
13915 
13916 #if YYPURE
13917     parser->parser_yylval = lval;
13918     parser->parser_yylval->val = Qundef;
13919 #endif
13920     t = parser_yylex(parser);
13921 #ifdef RIPPER
13922     if (!NIL_P(parser->delayed)) {
13923         ripper_dispatch_delayed_token(parser, t);
13924         return t;
13925     }
13926     if (t != 0)
13927         ripper_dispatch_scan_event(parser, t);
13928 #endif
13929 
13930     return t;
13931 }
13932 
13933 #ifndef RIPPER
13934 static NODE*
13935 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
13936 {
13937     NODE *n = (rb_node_newnode)(type, a0, a1, a2);
13938     nd_set_line(n, ruby_sourceline);
13939     return n;
13940 }
13941 
13942 enum node_type
13943 nodetype(NODE *node)                    /* for debug */
13944 {
13945     return (enum node_type)nd_type(node);
13946 }
13947 
13948 int
13949 nodeline(NODE *node)
13950 {
13951     return nd_line(node);
13952 }
13953 
13954 static NODE*
13955 newline_node(NODE *node)
13956 {
13957     if (node) {
13958         node = remove_begin(node);
13959         node->flags |= NODE_FL_NEWLINE;
13960     }
13961     return node;
13962 }
13963 
13964 static void
13965 fixpos(NODE *node, NODE *orig)
13966 {
13967     if (!node) return;
13968     if (!orig) return;
13969     if (orig == (NODE*)1) return;
13970     nd_set_line(node, nd_line(orig));
13971 }
13972 
13973 static void
13974 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
13975 {
13976     rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
13977 }
13978 #define parser_warning(node, mesg) parser_warning(parser, node, mesg)
13979 
13980 static void
13981 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
13982 {
13983     rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
13984 }
13985 #define parser_warn(node, mesg) parser_warn(parser, node, mesg)
13986 
13987 static NODE*
13988 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
13989 {
13990     NODE *end, *h = head, *nd;
13991 
13992     if (tail == 0) return head;
13993 
13994     if (h == 0) return tail;
13995     switch (nd_type(h)) {
13996       case NODE_LIT:
13997       case NODE_STR:
13998       case NODE_SELF:
13999       case NODE_TRUE:
14000       case NODE_FALSE:
14001       case NODE_NIL:
14002         parser_warning(h, "unused literal ignored");
14003         return tail;
14004       default:
14005         h = end = NEW_BLOCK(head);
14006         end->nd_end = end;
14007         fixpos(end, head);
14008         head = end;
14009         break;
14010       case NODE_BLOCK:
14011         end = h->nd_end;
14012         break;
14013     }
14014 
14015     nd = end->nd_head;
14016     switch (nd_type(nd)) {
14017       case NODE_RETURN:
14018       case NODE_BREAK:
14019       case NODE_NEXT:
14020       case NODE_REDO:
14021       case NODE_RETRY:
14022         if (RTEST(ruby_verbose)) {
14023             parser_warning(nd, "statement not reached");
14024         }
14025         break;
14026 
14027       default:
14028         break;
14029     }
14030 
14031     if (nd_type(tail) != NODE_BLOCK) {
14032         tail = NEW_BLOCK(tail);
14033         tail->nd_end = tail;
14034     }
14035     end->nd_next = tail;
14036     h->nd_end = tail->nd_end;
14037     return head;
14038 }
14039 
14040 /* append item to the list */
14041 static NODE*
14042 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14043 {
14044     NODE *last;
14045 
14046     if (list == 0) return NEW_LIST(item);
14047     if (list->nd_next) {
14048         last = list->nd_next->nd_end;
14049     }
14050     else {
14051         last = list;
14052     }
14053 
14054     list->nd_alen += 1;
14055     last->nd_next = NEW_LIST(item);
14056     list->nd_next->nd_end = last->nd_next;
14057     return list;
14058 }
14059 
14060 /* concat two lists */
14061 static NODE*
14062 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14063 {
14064     NODE *last;
14065 
14066     if (head->nd_next) {
14067         last = head->nd_next->nd_end;
14068     }
14069     else {
14070         last = head;
14071     }
14072 
14073     head->nd_alen += tail->nd_alen;
14074     last->nd_next = tail;
14075     if (tail->nd_next) {
14076         head->nd_next->nd_end = tail->nd_next->nd_end;
14077     }
14078     else {
14079         head->nd_next->nd_end = tail;
14080     }
14081 
14082     return head;
14083 }
14084 
14085 static int
14086 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14087 {
14088     if (NIL_P(tail)) return 1;
14089     if (!rb_enc_compatible(head, tail)) {
14090         compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14091                       rb_enc_name(rb_enc_get(head)),
14092                       rb_enc_name(rb_enc_get(tail)));
14093         rb_str_resize(head, 0);
14094         rb_str_resize(tail, 0);
14095         return 0;
14096     }
14097     rb_str_buf_append(head, tail);
14098     return 1;
14099 }
14100 
14101 /* concat two string literals */
14102 static NODE *
14103 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14104 {
14105     enum node_type htype;
14106 
14107     if (!head) return tail;
14108     if (!tail) return head;
14109 
14110     htype = nd_type(head);
14111     if (htype == NODE_EVSTR) {
14112         NODE *node = NEW_DSTR(Qnil);
14113         head = list_append(node, head);
14114     }
14115     switch (nd_type(tail)) {
14116       case NODE_STR:
14117         if (htype == NODE_STR) {
14118             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit)) {
14119               error:
14120                 rb_gc_force_recycle((VALUE)head);
14121                 rb_gc_force_recycle((VALUE)tail);
14122                 return 0;
14123             }
14124             rb_gc_force_recycle((VALUE)tail);
14125         }
14126         else {
14127             list_append(head, tail);
14128         }
14129         break;
14130 
14131       case NODE_DSTR:
14132         if (htype == NODE_STR) {
14133             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14134                 goto error;
14135             tail->nd_lit = head->nd_lit;
14136             rb_gc_force_recycle((VALUE)head);
14137             head = tail;
14138         }
14139         else if (NIL_P(tail->nd_lit)) {
14140             head->nd_alen += tail->nd_alen - 1;
14141             head->nd_next->nd_end->nd_next = tail->nd_next;
14142             head->nd_next->nd_end = tail->nd_next->nd_end;
14143             rb_gc_force_recycle((VALUE)tail);
14144         }
14145         else {
14146             nd_set_type(tail, NODE_ARRAY);
14147             tail->nd_head = NEW_STR(tail->nd_lit);
14148             list_concat(head, tail);
14149         }
14150         break;
14151 
14152       case NODE_EVSTR:
14153         if (htype == NODE_STR) {
14154             nd_set_type(head, NODE_DSTR);
14155             head->nd_alen = 1;
14156         }
14157         list_append(head, tail);
14158         break;
14159     }
14160     return head;
14161 }
14162 
14163 static NODE *
14164 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14165 {
14166     if (nd_type(node) == NODE_EVSTR) {
14167         node = list_append(NEW_DSTR(Qnil), node);
14168     }
14169     return node;
14170 }
14171 
14172 static NODE *
14173 new_evstr_gen(struct parser_params *parser, NODE *node)
14174 {
14175     NODE *head = node;
14176 
14177     if (node) {
14178         switch (nd_type(node)) {
14179           case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14180             return node;
14181         }
14182     }
14183     return NEW_EVSTR(head);
14184 }
14185 
14186 static NODE *
14187 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14188 {
14189     value_expr(recv);
14190     value_expr(arg1);
14191     return NEW_CALL(recv, id, NEW_LIST(arg1));
14192 }
14193 
14194 static NODE *
14195 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14196 {
14197     value_expr(recv);
14198     return NEW_CALL(recv, id, 0);
14199 }
14200 
14201 static NODE*
14202 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14203 {
14204     value_expr(node1);
14205     value_expr(node2);
14206     if (node1) {
14207         switch (nd_type(node1)) {
14208           case NODE_DREGX:
14209           case NODE_DREGX_ONCE:
14210             return NEW_MATCH2(node1, node2);
14211 
14212           case NODE_LIT:
14213             if (TYPE(node1->nd_lit) == T_REGEXP) {
14214                 return NEW_MATCH2(node1, node2);
14215             }
14216         }
14217     }
14218 
14219     if (node2) {
14220         switch (nd_type(node2)) {
14221           case NODE_DREGX:
14222           case NODE_DREGX_ONCE:
14223             return NEW_MATCH3(node2, node1);
14224 
14225           case NODE_LIT:
14226             if (TYPE(node2->nd_lit) == T_REGEXP) {
14227                 return NEW_MATCH3(node2, node1);
14228             }
14229         }
14230     }
14231 
14232     return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14233 }
14234 
14235 static NODE*
14236 gettable_gen(struct parser_params *parser, ID id)
14237 {
14238     if (id == keyword_self) {
14239         return NEW_SELF();
14240     }
14241     else if (id == keyword_nil) {
14242         return NEW_NIL();
14243     }
14244     else if (id == keyword_true) {
14245         return NEW_TRUE();
14246     }
14247     else if (id == keyword_false) {
14248         return NEW_FALSE();
14249     }
14250     else if (id == keyword__FILE__) {
14251         return NEW_STR(rb_external_str_new_with_enc(ruby_sourcefile, strlen(ruby_sourcefile),
14252                                                     rb_filesystem_encoding()));
14253     }
14254     else if (id == keyword__LINE__) {
14255         return NEW_LIT(INT2FIX(ruby_sourceline));
14256     }
14257     else if (id == keyword__ENCODING__) {
14258         return NEW_LIT(rb_enc_from_encoding(parser->enc));
14259     }
14260     else if (is_local_id(id)) {
14261         if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14262         if (local_id(id)) return NEW_LVAR(id);
14263         /* method call without arguments */
14264         return NEW_VCALL(id);
14265     }
14266     else if (is_global_id(id)) {
14267         return NEW_GVAR(id);
14268     }
14269     else if (is_instance_id(id)) {
14270         return NEW_IVAR(id);
14271     }
14272     else if (is_const_id(id)) {
14273         return NEW_CONST(id);
14274     }
14275     else if (is_class_id(id)) {
14276         return NEW_CVAR(id);
14277     }
14278     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14279     return 0;
14280 }
14281 #endif /* !RIPPER */
14282 
14283 #ifdef RIPPER
14284 static VALUE
14285 assignable_gen(struct parser_params *parser, VALUE lhs)
14286 #else
14287 static NODE*
14288 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14289 #endif
14290 {
14291 #ifdef RIPPER
14292     ID id = get_id(lhs);
14293 # define assignable_result(x) get_value(lhs)
14294 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14295 #else
14296 # define assignable_result(x) x
14297 #endif
14298     if (!id) return assignable_result(0);
14299     if (id == keyword_self) {
14300         yyerror("Can't change the value of self");
14301     }
14302     else if (id == keyword_nil) {
14303         yyerror("Can't assign to nil");
14304     }
14305     else if (id == keyword_true) {
14306         yyerror("Can't assign to true");
14307     }
14308     else if (id == keyword_false) {
14309         yyerror("Can't assign to false");
14310     }
14311     else if (id == keyword__FILE__) {
14312         yyerror("Can't assign to __FILE__");
14313     }
14314     else if (id == keyword__LINE__) {
14315         yyerror("Can't assign to __LINE__");
14316     }
14317     else if (id == keyword__ENCODING__) {
14318         yyerror("Can't assign to __ENCODING__");
14319     }
14320     else if (is_local_id(id)) {
14321         if (dyna_in_block()) {
14322             if (dvar_curr(id)) {
14323                 return assignable_result(NEW_DASGN_CURR(id, val));
14324             }
14325             else if (dvar_defined(id)) {
14326                 return assignable_result(NEW_DASGN(id, val));
14327             }
14328             else if (local_id(id)) {
14329                 return assignable_result(NEW_LASGN(id, val));
14330             }
14331             else {
14332                 dyna_var(id);
14333                 return assignable_result(NEW_DASGN_CURR(id, val));
14334             }
14335         }
14336         else {
14337             if (!local_id(id)) {
14338                 local_var(id);
14339             }
14340             return assignable_result(NEW_LASGN(id, val));
14341         }
14342     }
14343     else if (is_global_id(id)) {
14344         return assignable_result(NEW_GASGN(id, val));
14345     }
14346     else if (is_instance_id(id)) {
14347         return assignable_result(NEW_IASGN(id, val));
14348     }
14349     else if (is_const_id(id)) {
14350         if (!in_def && !in_single)
14351             return assignable_result(NEW_CDECL(id, val, 0));
14352         yyerror("dynamic constant assignment");
14353     }
14354     else if (is_class_id(id)) {
14355         return assignable_result(NEW_CVASGN(id, val));
14356     }
14357     else {
14358         compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
14359     }
14360     return assignable_result(0);
14361 #undef assignable_result
14362 #undef parser_yyerror
14363 }
14364 
14365 static ID
14366 shadowing_lvar_gen(struct parser_params *parser, ID name)
14367 {
14368     ID uscore;
14369 
14370     CONST_ID(uscore, "_");
14371     if (uscore == name) return name;
14372     if (dyna_in_block()) {
14373         if (dvar_curr(name)) {
14374             yyerror("duplicated argument name");
14375         }
14376         else if (dvar_defined(name) || local_id(name)) {
14377             rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
14378             vtable_add(lvtbl->vars, name);
14379         }
14380     }
14381     else {
14382         if (local_id(name)) {
14383             yyerror("duplicated argument name");
14384         }
14385     }
14386     return name;
14387 }
14388 
14389 static void
14390 new_bv_gen(struct parser_params *parser, ID name)
14391 {
14392     if (!name) return;
14393     if (!is_local_id(name)) {
14394         compile_error(PARSER_ARG "invalid local variable - %s",
14395                       rb_id2name(name));
14396         return;
14397     }
14398     shadowing_lvar(name);
14399     dyna_var(name);
14400 }
14401 
14402 #ifndef RIPPER
14403 static NODE *
14404 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
14405 {
14406     if (recv && nd_type(recv) == NODE_SELF)
14407         recv = (NODE *)1;
14408     return NEW_ATTRASGN(recv, tASET, idx);
14409 }
14410 
14411 static void
14412 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14413 {
14414     if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
14415         compile_error(PARSER_ARG "both block arg and actual block given");
14416     }
14417 }
14418 
14419 ID
14420 rb_id_attrset(ID id)
14421 {
14422     id &= ~ID_SCOPE_MASK;
14423     id |= ID_ATTRSET;
14424     return id;
14425 }
14426 
14427 static NODE *
14428 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
14429 {
14430     if (recv && nd_type(recv) == NODE_SELF)
14431         recv = (NODE *)1;
14432     return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
14433 }
14434 
14435 static void
14436 rb_backref_error_gen(struct parser_params *parser, NODE *node)
14437 {
14438     switch (nd_type(node)) {
14439       case NODE_NTH_REF:
14440         compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
14441         break;
14442       case NODE_BACK_REF:
14443         compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
14444         break;
14445     }
14446 }
14447 
14448 static NODE *
14449 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14450 {
14451     if (!node2) return node1;
14452     switch (nd_type(node1)) {
14453       case NODE_BLOCK_PASS:
14454         if (node1->nd_head)
14455             node1->nd_head = arg_concat(node1->nd_head, node2);
14456         else
14457             node1->nd_head = NEW_LIST(node2);
14458         return node1;
14459       case NODE_ARGSPUSH:
14460         if (nd_type(node2) != NODE_ARRAY) break;
14461         node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
14462         nd_set_type(node1, NODE_ARGSCAT);
14463         return node1;
14464       case NODE_ARGSCAT:
14465         if (nd_type(node2) != NODE_ARRAY ||
14466             nd_type(node1->nd_body) != NODE_ARRAY) break;
14467         node1->nd_body = list_concat(node1->nd_body, node2);
14468         return node1;
14469     }
14470     return NEW_ARGSCAT(node1, node2);
14471 }
14472 
14473 static NODE *
14474 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14475 {
14476     if (!node1) return NEW_LIST(node2);
14477     switch (nd_type(node1))  {
14478       case NODE_ARRAY:
14479         return list_append(node1, node2);
14480       case NODE_BLOCK_PASS:
14481         node1->nd_head = arg_append(node1->nd_head, node2);
14482         return node1;
14483       case NODE_ARGSPUSH:
14484         node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
14485         nd_set_type(node1, NODE_ARGSCAT);
14486         return node1;
14487     }
14488     return NEW_ARGSPUSH(node1, node2);
14489 }
14490 
14491 static NODE *
14492 splat_array(NODE* node)
14493 {
14494     if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
14495     if (nd_type(node) == NODE_ARRAY) return node;
14496     return 0;
14497 }
14498 
14499 static NODE *
14500 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
14501 {
14502     if (!lhs) return 0;
14503 
14504     switch (nd_type(lhs)) {
14505       case NODE_GASGN:
14506       case NODE_IASGN:
14507       case NODE_IASGN2:
14508       case NODE_LASGN:
14509       case NODE_DASGN:
14510       case NODE_DASGN_CURR:
14511       case NODE_MASGN:
14512       case NODE_CDECL:
14513       case NODE_CVASGN:
14514         lhs->nd_value = rhs;
14515         break;
14516 
14517       case NODE_ATTRASGN:
14518       case NODE_CALL:
14519         lhs->nd_args = arg_append(lhs->nd_args, rhs);
14520         break;
14521 
14522       default:
14523         /* should not happen */
14524         break;
14525     }
14526 
14527     return lhs;
14528 }
14529 
14530 static int
14531 value_expr_gen(struct parser_params *parser, NODE *node)
14532 {
14533     int cond = 0;
14534 
14535     if (!node) {
14536         rb_warning0("empty expression");
14537     }
14538     while (node) {
14539         switch (nd_type(node)) {
14540           case NODE_DEFN:
14541           case NODE_DEFS:
14542             parser_warning(node, "void value expression");
14543             return FALSE;
14544 
14545           case NODE_RETURN:
14546           case NODE_BREAK:
14547           case NODE_NEXT:
14548           case NODE_REDO:
14549           case NODE_RETRY:
14550             if (!cond) yyerror("void value expression");
14551             /* or "control never reach"? */
14552             return FALSE;
14553 
14554           case NODE_BLOCK:
14555             while (node->nd_next) {
14556                 node = node->nd_next;
14557             }
14558             node = node->nd_head;
14559             break;
14560 
14561           case NODE_BEGIN:
14562             node = node->nd_body;
14563             break;
14564 
14565           case NODE_IF:
14566             if (!node->nd_body) {
14567                 node = node->nd_else;
14568                 break;
14569             }
14570             else if (!node->nd_else) {
14571                 node = node->nd_body;
14572                 break;
14573             }
14574             if (!value_expr(node->nd_body)) return FALSE;
14575             node = node->nd_else;
14576             break;
14577 
14578           case NODE_AND:
14579           case NODE_OR:
14580             cond = 1;
14581             node = node->nd_2nd;
14582             break;
14583 
14584           default:
14585             return TRUE;
14586         }
14587     }
14588 
14589     return TRUE;
14590 }
14591 
14592 static void
14593 void_expr_gen(struct parser_params *parser, NODE *node)
14594 {
14595     const char *useless = 0;
14596 
14597     if (!RTEST(ruby_verbose)) return;
14598 
14599     if (!node) return;
14600     switch (nd_type(node)) {
14601       case NODE_CALL:
14602         switch (node->nd_mid) {
14603           case '+':
14604           case '-':
14605           case '*':
14606           case '/':
14607           case '%':
14608           case tPOW:
14609           case tUPLUS:
14610           case tUMINUS:
14611           case '|':
14612           case '^':
14613           case '&':
14614           case tCMP:
14615           case '>':
14616           case tGEQ:
14617           case '<':
14618           case tLEQ:
14619           case tEQ:
14620           case tNEQ:
14621             useless = rb_id2name(node->nd_mid);
14622             break;
14623         }
14624         break;
14625 
14626       case NODE_LVAR:
14627       case NODE_DVAR:
14628       case NODE_GVAR:
14629       case NODE_IVAR:
14630       case NODE_CVAR:
14631       case NODE_NTH_REF:
14632       case NODE_BACK_REF:
14633         useless = "a variable";
14634         break;
14635       case NODE_CONST:
14636         useless = "a constant";
14637         break;
14638       case NODE_LIT:
14639       case NODE_STR:
14640       case NODE_DSTR:
14641       case NODE_DREGX:
14642       case NODE_DREGX_ONCE:
14643         useless = "a literal";
14644         break;
14645       case NODE_COLON2:
14646       case NODE_COLON3:
14647         useless = "::";
14648         break;
14649       case NODE_DOT2:
14650         useless = "..";
14651         break;
14652       case NODE_DOT3:
14653         useless = "...";
14654         break;
14655       case NODE_SELF:
14656         useless = "self";
14657         break;
14658       case NODE_NIL:
14659         useless = "nil";
14660         break;
14661       case NODE_TRUE:
14662         useless = "true";
14663         break;
14664       case NODE_FALSE:
14665         useless = "false";
14666         break;
14667       case NODE_DEFINED:
14668         useless = "defined?";
14669         break;
14670     }
14671 
14672     if (useless) {
14673         int line = ruby_sourceline;
14674 
14675         ruby_sourceline = nd_line(node);
14676         rb_warnS("useless use of %s in void context", useless);
14677         ruby_sourceline = line;
14678     }
14679 }
14680 
14681 static void
14682 void_stmts_gen(struct parser_params *parser, NODE *node)
14683 {
14684     if (!RTEST(ruby_verbose)) return;
14685     if (!node) return;
14686     if (nd_type(node) != NODE_BLOCK) return;
14687 
14688     for (;;) {
14689         if (!node->nd_next) return;
14690         void_expr0(node->nd_head);
14691         node = node->nd_next;
14692     }
14693 }
14694 
14695 static NODE *
14696 remove_begin(NODE *node)
14697 {
14698     NODE **n = &node, *n1 = node;
14699     while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
14700         *n = n1 = n1->nd_body;
14701     }
14702     return node;
14703 }
14704 
14705 static void
14706 reduce_nodes_gen(struct parser_params *parser, NODE **body)
14707 {
14708     NODE *node = *body;
14709 
14710     if (!node) {
14711         *body = NEW_NIL();
14712         return;
14713     }
14714 #define subnodes(n1, n2) \
14715     ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
14716      (!node->n2) ? (body = &node->n1, 1) : \
14717      (reduce_nodes(&node->n1), body = &node->n2, 1))
14718 
14719     while (node) {
14720         int newline = (int)(node->flags & NODE_FL_NEWLINE);
14721         switch (nd_type(node)) {
14722           end:
14723           case NODE_NIL:
14724             *body = 0;
14725             return;
14726           case NODE_RETURN:
14727             *body = node = node->nd_stts;
14728             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14729             continue;
14730           case NODE_BEGIN:
14731             *body = node = node->nd_body;
14732             if (newline && node) node->flags |= NODE_FL_NEWLINE;
14733             continue;
14734           case NODE_BLOCK:
14735             body = &node->nd_end->nd_head;
14736             break;
14737           case NODE_IF:
14738             if (subnodes(nd_body, nd_else)) break;
14739             return;
14740           case NODE_CASE:
14741             body = &node->nd_body;
14742             break;
14743           case NODE_WHEN:
14744             if (!subnodes(nd_body, nd_next)) goto end;
14745             break;
14746           case NODE_ENSURE:
14747             if (!subnodes(nd_head, nd_resq)) goto end;
14748             break;
14749           case NODE_RESCUE:
14750             if (!subnodes(nd_head, nd_resq)) goto end;
14751             break;
14752           default:
14753             return;
14754         }
14755         node = *body;
14756         if (newline && node) node->flags |= NODE_FL_NEWLINE;
14757     }
14758 
14759 #undef subnodes
14760 }
14761 
14762 static int
14763 assign_in_cond(struct parser_params *parser, NODE *node)
14764 {
14765     switch (nd_type(node)) {
14766       case NODE_MASGN:
14767         yyerror("multiple assignment in conditional");
14768         return 1;
14769 
14770       case NODE_LASGN:
14771       case NODE_DASGN:
14772       case NODE_DASGN_CURR:
14773       case NODE_GASGN:
14774       case NODE_IASGN:
14775         break;
14776 
14777       default:
14778         return 0;
14779     }
14780 
14781     if (!node->nd_value) return 1;
14782     switch (nd_type(node->nd_value)) {
14783       case NODE_LIT:
14784       case NODE_STR:
14785       case NODE_NIL:
14786       case NODE_TRUE:
14787       case NODE_FALSE:
14788         /* reports always */
14789         parser_warn(node->nd_value, "found = in conditional, should be ==");
14790         return 1;
14791 
14792       case NODE_DSTR:
14793       case NODE_XSTR:
14794       case NODE_DXSTR:
14795       case NODE_EVSTR:
14796       case NODE_DREGX:
14797       default:
14798         break;
14799     }
14800     return 1;
14801 }
14802 
14803 static void
14804 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14805 {
14806     if (!e_option_supplied(parser)) parser_warn(node, str);
14807 }
14808 
14809 static void
14810 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
14811 {
14812     if (!e_option_supplied(parser)) parser_warning(node, str);
14813 }
14814 
14815 static void
14816 fixup_nodes(NODE **rootnode)
14817 {
14818     NODE *node, *next, *head;
14819 
14820     for (node = *rootnode; node; node = next) {
14821         enum node_type type;
14822         VALUE val;
14823 
14824         next = node->nd_next;
14825         head = node->nd_head;
14826         rb_gc_force_recycle((VALUE)node);
14827         *rootnode = next;
14828         switch (type = nd_type(head)) {
14829           case NODE_DOT2:
14830           case NODE_DOT3:
14831             val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
14832                                type == NODE_DOT3);
14833             rb_gc_force_recycle((VALUE)head->nd_beg);
14834             rb_gc_force_recycle((VALUE)head->nd_end);
14835             nd_set_type(head, NODE_LIT);
14836             head->nd_lit = val;
14837             break;
14838           default:
14839             break;
14840         }
14841     }
14842 }
14843 
14844 static NODE *cond0(struct parser_params*,NODE*);
14845 
14846 static NODE*
14847 range_op(struct parser_params *parser, NODE *node)
14848 {
14849     enum node_type type;
14850 
14851     if (node == 0) return 0;
14852 
14853     type = nd_type(node);
14854     value_expr(node);
14855     if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
14856         warn_unless_e_option(parser, node, "integer literal in conditional range");
14857         return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
14858     }
14859     return cond0(parser, node);
14860 }
14861 
14862 static int
14863 literal_node(NODE *node)
14864 {
14865     if (!node) return 1;        /* same as NODE_NIL */
14866     switch (nd_type(node)) {
14867       case NODE_LIT:
14868       case NODE_STR:
14869       case NODE_DSTR:
14870       case NODE_EVSTR:
14871       case NODE_DREGX:
14872       case NODE_DREGX_ONCE:
14873       case NODE_DSYM:
14874         return 2;
14875       case NODE_TRUE:
14876       case NODE_FALSE:
14877       case NODE_NIL:
14878         return 1;
14879     }
14880     return 0;
14881 }
14882 
14883 static NODE*
14884 cond0(struct parser_params *parser, NODE *node)
14885 {
14886     if (node == 0) return 0;
14887     assign_in_cond(parser, node);
14888 
14889     switch (nd_type(node)) {
14890       case NODE_DSTR:
14891       case NODE_EVSTR:
14892       case NODE_STR:
14893         rb_warn0("string literal in condition");
14894         break;
14895 
14896       case NODE_DREGX:
14897       case NODE_DREGX_ONCE:
14898         warning_unless_e_option(parser, node, "regex literal in condition");
14899         return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
14900 
14901       case NODE_AND:
14902       case NODE_OR:
14903         node->nd_1st = cond0(parser, node->nd_1st);
14904         node->nd_2nd = cond0(parser, node->nd_2nd);
14905         break;
14906 
14907       case NODE_DOT2:
14908       case NODE_DOT3:
14909         node->nd_beg = range_op(parser, node->nd_beg);
14910         node->nd_end = range_op(parser, node->nd_end);
14911         if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
14912         else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
14913         if (!e_option_supplied(parser)) {
14914             int b = literal_node(node->nd_beg);
14915             int e = literal_node(node->nd_end);
14916             if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
14917                 parser_warn(node, "range literal in condition");
14918             }
14919         }
14920         break;
14921 
14922       case NODE_DSYM:
14923         parser_warning(node, "literal in condition");
14924         break;
14925 
14926       case NODE_LIT:
14927         if (TYPE(node->nd_lit) == T_REGEXP) {
14928             warn_unless_e_option(parser, node, "regex literal in condition");
14929             nd_set_type(node, NODE_MATCH);
14930         }
14931         else {
14932             parser_warning(node, "literal in condition");
14933         }
14934       default:
14935         break;
14936     }
14937     return node;
14938 }
14939 
14940 static NODE*
14941 cond_gen(struct parser_params *parser, NODE *node)
14942 {
14943     if (node == 0) return 0;
14944     return cond0(parser, node);
14945 }
14946 
14947 static NODE*
14948 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
14949 {
14950     value_expr(left);
14951     if (left && (enum node_type)nd_type(left) == type) {
14952         NODE *node = left, *second;
14953         while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
14954             node = second;
14955         }
14956         node->nd_2nd = NEW_NODE(type, second, right, 0);
14957         return left;
14958     }
14959     return NEW_NODE(type, left, right, 0);
14960 }
14961 
14962 static void
14963 no_blockarg(struct parser_params *parser, NODE *node)
14964 {
14965     if (node && nd_type(node) == NODE_BLOCK_PASS) {
14966         compile_error(PARSER_ARG "block argument should not be given");
14967     }
14968 }
14969 
14970 static NODE *
14971 ret_args_gen(struct parser_params *parser, NODE *node)
14972 {
14973     if (node) {
14974         no_blockarg(parser, node);
14975         if (nd_type(node) == NODE_ARRAY) {
14976             if (node->nd_next == 0) {
14977                 node = node->nd_head;
14978             }
14979             else {
14980                 nd_set_type(node, NODE_VALUES);
14981             }
14982         }
14983     }
14984     return node;
14985 }
14986 
14987 static NODE *
14988 new_yield_gen(struct parser_params *parser, NODE *node)
14989 {
14990     long state = Qtrue;
14991 
14992     if (node) {
14993         no_blockarg(parser, node);
14994         if (node && nd_type(node) == NODE_SPLAT) {
14995             state = Qtrue;
14996         }
14997     }
14998     else {
14999         state = Qfalse;
15000     }
15001     return NEW_YIELD(node, state);
15002 }
15003 
15004 static NODE*
15005 negate_lit(NODE *node)
15006 {
15007     switch (TYPE(node->nd_lit)) {
15008       case T_FIXNUM:
15009         node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15010         break;
15011       case T_BIGNUM:
15012         node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15013         break;
15014       case T_FLOAT:
15015         RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15016         break;
15017       default:
15018         break;
15019     }
15020     return node;
15021 }
15022 
15023 static NODE *
15024 arg_blk_pass(NODE *node1, NODE *node2)
15025 {
15026     if (node2) {
15027         node2->nd_head = node1;
15028         return node2;
15029     }
15030     return node1;
15031 }
15032 
15033 static NODE*
15034 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, ID b)
15035 {
15036     int saved_line = ruby_sourceline;
15037     NODE *node;
15038     NODE *i1, *i2 = 0;
15039 
15040     node = NEW_ARGS(m ? m->nd_plen : 0, o);
15041     i1 = m ? m->nd_next : 0;
15042     node->nd_next = NEW_ARGS_AUX(r, b);
15043 
15044     if (p) {
15045         i2 = p->nd_next;
15046         node->nd_next->nd_next = NEW_ARGS_AUX(p->nd_pid, p->nd_plen);
15047     }
15048     else if (i1) {
15049         node->nd_next->nd_next = NEW_ARGS_AUX(0, 0);
15050     }
15051     if (i1 || i2) {
15052         node->nd_next->nd_next->nd_next = NEW_NODE(NODE_AND, i1, i2, 0);
15053     }
15054     ruby_sourceline = saved_line;
15055     return node;
15056 }
15057 #endif /* !RIPPER */
15058 
15059 static void
15060 local_push_gen(struct parser_params *parser, int inherit_dvars)
15061 {
15062     struct local_vars *local;
15063 
15064     local = ALLOC(struct local_vars);
15065     local->prev = lvtbl;
15066     local->args = vtable_alloc(0);
15067     local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15068     lvtbl = local;
15069 }
15070 
15071 static void
15072 local_pop_gen(struct parser_params *parser)
15073 {
15074     struct local_vars *local = lvtbl->prev;
15075     vtable_free(lvtbl->args);
15076     vtable_free(lvtbl->vars);
15077     xfree(lvtbl);
15078     lvtbl = local;
15079 }
15080 
15081 #ifndef RIPPER
15082 static ID*
15083 vtable_tblcpy(ID *buf, const struct vtable *src)
15084 {
15085     int i, cnt = vtable_size(src);
15086 
15087     if (cnt > 0) {
15088         buf[0] = cnt;
15089         for (i = 0; i < cnt; i++) {
15090             buf[i] = src->tbl[i];
15091         }
15092         return buf;
15093     }
15094     return 0;
15095 }
15096 
15097 static ID*
15098 local_tbl_gen(struct parser_params *parser)
15099 {
15100     int cnt = vtable_size(lvtbl->args) + vtable_size(lvtbl->vars);
15101     ID *buf;
15102 
15103     if (cnt <= 0) return 0;
15104     buf = ALLOC_N(ID, cnt + 1);
15105     vtable_tblcpy(buf+1, lvtbl->args);
15106     vtable_tblcpy(buf+vtable_size(lvtbl->args)+1, lvtbl->vars);
15107     buf[0] = cnt;
15108     return buf;
15109 }
15110 #endif
15111 
15112 static int
15113 arg_var_gen(struct parser_params *parser, ID id)
15114 {
15115     vtable_add(lvtbl->args, id);
15116     return vtable_size(lvtbl->args) - 1;
15117 }
15118 
15119 static int
15120 local_var_gen(struct parser_params *parser, ID id)
15121 {
15122     vtable_add(lvtbl->vars, id);
15123     return vtable_size(lvtbl->vars) - 1;
15124 }
15125 
15126 static int
15127 local_id_gen(struct parser_params *parser, ID id)
15128 {
15129     struct vtable *vars, *args;
15130 
15131     vars = lvtbl->vars;
15132     args = lvtbl->args;
15133 
15134     while (vars && POINTER_P(vars->prev)) {
15135         vars = vars->prev;
15136         args = args->prev;
15137     }
15138 
15139     if (vars && vars->prev == DVARS_INHERIT) {
15140         return rb_local_defined(id);
15141     }
15142     else {
15143         return (vtable_included(args, id) ||
15144                 vtable_included(vars, id));
15145     }
15146 }
15147 
15148 static const struct vtable *
15149 dyna_push_gen(struct parser_params *parser)
15150 {
15151     lvtbl->args = vtable_alloc(lvtbl->args);
15152     lvtbl->vars = vtable_alloc(lvtbl->vars);
15153     return lvtbl->args;
15154 }
15155 
15156 static void
15157 dyna_pop_1(struct parser_params *parser)
15158 {
15159     struct vtable *tmp;
15160 
15161     tmp = lvtbl->args;
15162     lvtbl->args = lvtbl->args->prev;
15163     vtable_free(tmp);
15164     tmp = lvtbl->vars;
15165     lvtbl->vars = lvtbl->vars->prev;
15166     vtable_free(tmp);
15167 }
15168 
15169 static void
15170 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
15171 {
15172     while (lvtbl->args != lvargs) {
15173         dyna_pop_1(parser);
15174         if (!lvtbl->args) {
15175             struct local_vars *local = lvtbl->prev;
15176             xfree(lvtbl);
15177             lvtbl = local;
15178         }
15179     }
15180     dyna_pop_1(parser);
15181 }
15182 
15183 static int
15184 dyna_in_block_gen(struct parser_params *parser)
15185 {
15186     return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
15187 }
15188 
15189 static int
15190 dvar_defined_gen(struct parser_params *parser, ID id)
15191 {
15192     struct vtable *vars, *args;
15193 
15194     args = lvtbl->args;
15195     vars = lvtbl->vars;
15196 
15197     while (POINTER_P(vars)) {
15198         if (vtable_included(args, id)) {
15199             return 1;
15200         }
15201         if (vtable_included(vars, id)) {
15202             return 1;
15203         }
15204         args = args->prev;
15205         vars = vars->prev;
15206     }
15207 
15208     if (vars == DVARS_INHERIT) {
15209         return rb_dvar_defined(id);
15210     }
15211 
15212     return 0;
15213 }
15214 
15215 static int
15216 dvar_curr_gen(struct parser_params *parser, ID id)
15217 {
15218     return (vtable_included(lvtbl->args, id) ||
15219             vtable_included(lvtbl->vars, id));
15220 }
15221 
15222 #ifndef RIPPER
15223 VALUE rb_reg_compile(VALUE str, int options, const char *sourcefile, int sourceline);
15224 VALUE rb_reg_check_preprocess(VALUE);
15225 
15226 static void
15227 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
15228 {
15229     int c = RE_OPTION_ENCODING_IDX(options);
15230 
15231     if (c) {
15232         int opt, idx;
15233         rb_char_to_option_kcode(c, &opt, &idx);
15234         if (idx != ENCODING_GET(str) &&
15235             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15236             goto error;
15237         }
15238         ENCODING_SET(str, idx);
15239     }
15240     else if (RE_OPTION_ENCODING_NONE(options)) {
15241         if (!ENCODING_IS_ASCII8BIT(str) &&
15242             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15243             c = 'n';
15244             goto error;
15245         }
15246         rb_enc_associate(str, rb_ascii8bit_encoding());
15247     }
15248     else if (parser->enc == rb_usascii_encoding()) {
15249         if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
15250             /* raise in re.c */
15251             rb_enc_associate(str, rb_usascii_encoding());
15252         }
15253         else {
15254             rb_enc_associate(str, rb_ascii8bit_encoding());
15255         }
15256     }
15257     return;
15258 
15259   error:
15260     compile_error(PARSER_ARG
15261         "regexp encoding option '%c' differs from source encoding '%s'",
15262         c, rb_enc_name(rb_enc_get(str)));
15263 }
15264 
15265 static int
15266 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
15267 {
15268     VALUE err;
15269     reg_fragment_setenc(str, options);
15270     err = rb_reg_check_preprocess(str);
15271     if (err != Qnil) {
15272         err = rb_obj_as_string(err);
15273         compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
15274         RB_GC_GUARD(err);
15275         return 0;
15276     }
15277     return 1;
15278 }
15279 
15280 typedef struct {
15281     struct parser_params* parser;
15282     rb_encoding *enc;
15283     NODE *succ_block;
15284     NODE *fail_block;
15285     int num;
15286 } reg_named_capture_assign_t;
15287 
15288 static int
15289 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
15290           int back_num, int *back_refs, OnigRegex regex, void *arg0)
15291 {
15292     reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
15293     struct parser_params* parser = arg->parser;
15294     rb_encoding *enc = arg->enc;
15295     long len = name_end - name;
15296     const char *s = (const char *)name;
15297     ID var;
15298 
15299     arg->num++;
15300 
15301     if (arg->succ_block == 0) {
15302         arg->succ_block = NEW_BEGIN(0);
15303         arg->fail_block = NEW_BEGIN(0);
15304     }
15305 
15306     if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
15307         (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
15308         !rb_enc_symname2_p(s, len, enc)) {
15309         return ST_CONTINUE;
15310     }
15311     var = rb_intern3(s, len, enc);
15312     if (dvar_defined(var) || local_id(var)) {
15313         rb_warningS("named capture conflicts a local variable - %s",
15314                     rb_id2name(var));
15315     }
15316     arg->succ_block = block_append(arg->succ_block,
15317         newline_node(node_assign(assignable(var,0),
15318             NEW_CALL(
15319               gettable(rb_intern("$~")),
15320               idAREF,
15321               NEW_LIST(NEW_LIT(ID2SYM(var))))
15322             )));
15323     arg->fail_block = block_append(arg->fail_block,
15324         newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
15325     return ST_CONTINUE;
15326 }
15327 
15328 static NODE *
15329 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
15330 {
15331     reg_named_capture_assign_t arg;
15332 
15333     arg.parser = parser;
15334     arg.enc = rb_enc_get(regexp);
15335     arg.succ_block = 0;
15336     arg.fail_block = 0;
15337     arg.num = 0;
15338     onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
15339 
15340     if (arg.num == 0)
15341         return match;
15342 
15343     return
15344         block_append(
15345             newline_node(match),
15346             NEW_IF(gettable(rb_intern("$~")),
15347                 block_append(
15348                     newline_node(arg.succ_block),
15349                     newline_node(
15350                         NEW_CALL(
15351                           gettable(rb_intern("$~")),
15352                           rb_intern("begin"),
15353                           NEW_LIST(NEW_LIT(INT2FIX(0)))))),
15354                 block_append(
15355                     newline_node(arg.fail_block),
15356                     newline_node(
15357                         NEW_LIT(Qnil)))));
15358 }
15359 
15360 static VALUE
15361 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
15362 {
15363     VALUE re;
15364     VALUE err;
15365 
15366     reg_fragment_setenc(str, options);
15367     err = rb_errinfo();
15368     re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
15369     if (NIL_P(re)) {
15370         ID mesg = rb_intern("mesg");
15371         VALUE m = rb_attr_get(rb_errinfo(), mesg);
15372         rb_set_errinfo(err);
15373         if (!NIL_P(err)) {
15374             rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
15375         }
15376         else {
15377             compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
15378         }
15379         return Qnil;
15380     }
15381     return re;
15382 }
15383 
15384 void
15385 rb_gc_mark_parser(void)
15386 {
15387 }
15388 
15389 NODE*
15390 rb_parser_append_print(VALUE vparser, NODE *node)
15391 {
15392     NODE *prelude = 0;
15393     NODE *scope = node;
15394     struct parser_params *parser;
15395 
15396     if (!node) return node;
15397 
15398     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15399 
15400     node = node->nd_body;
15401 
15402     if (nd_type(node) == NODE_PRELUDE) {
15403         prelude = node;
15404         node = node->nd_body;
15405     }
15406 
15407     node = block_append(node,
15408                         NEW_FCALL(rb_intern("print"),
15409                                   NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
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 NODE *
15422 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
15423 {
15424     NODE *prelude = 0;
15425     NODE *scope = node;
15426     struct parser_params *parser;
15427 
15428     if (!node) return node;
15429 
15430     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
15431 
15432     node = node->nd_body;
15433 
15434     if (nd_type(node) == NODE_PRELUDE) {
15435         prelude = node;
15436         node = node->nd_body;
15437     }
15438     if (split) {
15439         node = block_append(NEW_GASGN(rb_intern("$F"),
15440                                       NEW_CALL(NEW_GVAR(rb_intern("$_")),
15441                                                rb_intern("split"), 0)),
15442                             node);
15443     }
15444     if (chop) {
15445         node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
15446                                      rb_intern("chop!"), 0), node);
15447     }
15448 
15449     node = NEW_OPT_N(node);
15450 
15451     if (prelude) {
15452         prelude->nd_body = node;
15453         scope->nd_body = prelude;
15454     }
15455     else {
15456         scope->nd_body = node;
15457     }
15458 
15459     return scope;
15460 }
15461 
15462 static const struct {
15463     ID token;
15464     const char *name;
15465 } op_tbl[] = {
15466     {tDOT2,     ".."},
15467     {tDOT3,     "..."},
15468     {'+',       "+(binary)"},
15469     {'-',       "-(binary)"},
15470     {tPOW,      "**"},
15471     {tUPLUS,    "+@"},
15472     {tUMINUS,   "-@"},
15473     {tCMP,      "<=>"},
15474     {tGEQ,      ">="},
15475     {tLEQ,      "<="},
15476     {tEQ,       "=="},
15477     {tEQQ,      "==="},
15478     {tNEQ,      "!="},
15479     {tMATCH,    "=~"},
15480     {tNMATCH,   "!~"},
15481     {tAREF,     "[]"},
15482     {tASET,     "[]="},
15483     {tLSHFT,    "<<"},
15484     {tRSHFT,    ">>"},
15485     {tCOLON2,   "::"},
15486 };
15487 
15488 #define op_tbl_count numberof(op_tbl)
15489 
15490 #ifndef ENABLE_SELECTOR_NAMESPACE
15491 #define ENABLE_SELECTOR_NAMESPACE 0
15492 #endif
15493 
15494 static struct symbols {
15495     ID last_id;
15496     st_table *sym_id;
15497     st_table *id_str;
15498 #if ENABLE_SELECTOR_NAMESPACE
15499     st_table *ivar2_id;
15500     st_table *id_ivar2;
15501 #endif
15502     VALUE op_sym[tLAST_TOKEN];
15503 } global_symbols = {tLAST_ID};
15504 
15505 static const struct st_hash_type symhash = {
15506     rb_str_hash_cmp,
15507     rb_str_hash,
15508 };
15509 
15510 #if ENABLE_SELECTOR_NAMESPACE
15511 struct ivar2_key {
15512     ID id;
15513     VALUE klass;
15514 };
15515 
15516 static int
15517 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
15518 {
15519     if (key1->id == key2->id && key1->klass == key2->klass) {
15520         return 0;
15521     }
15522     return 1;
15523 }
15524 
15525 static int
15526 ivar2_hash(struct ivar2_key *key)
15527 {
15528     return (key->id << 8) ^ (key->klass >> 2);
15529 }
15530 
15531 static const struct st_hash_type ivar2_hash_type = {
15532     ivar2_cmp,
15533     ivar2_hash,
15534 };
15535 #endif
15536 
15537 void
15538 Init_sym(void)
15539 {
15540     global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
15541     global_symbols.id_str = st_init_numtable_with_size(1000);
15542 #if ENABLE_SELECTOR_NAMESPACE
15543     global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
15544     global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
15545 #endif
15546 
15547     Init_id();
15548 }
15549 
15550 void
15551 rb_gc_mark_symbols(void)
15552 {
15553     rb_mark_tbl(global_symbols.id_str);
15554     rb_gc_mark_locations(global_symbols.op_sym,
15555                          global_symbols.op_sym + tLAST_TOKEN);
15556 }
15557 #endif /* !RIPPER */
15558 
15559 static ID
15560 internal_id_gen(struct parser_params *parser)
15561 {
15562     ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
15563     id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
15564     return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
15565 }
15566 
15567 #ifndef RIPPER
15568 static int
15569 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
15570 {
15571     int mb = 0;
15572 
15573     if (m >= e) return 0;
15574     switch (*m) {
15575       case '~': case '*': case '$': case '?': case '!': case '@':
15576       case '/': case '\\': case ';': case ',': case '.': case '=':
15577       case ':': case '<': case '>': case '\"':
15578       case '&': case '`': case '\'': case '+':
15579       case '0':
15580         ++m;
15581         break;
15582       case '-':
15583         ++m;
15584         if (m < e && is_identchar(m, e, enc)) {
15585             if (!ISASCII(*m)) mb = 1;
15586             m += rb_enc_mbclen(m, e, enc);
15587         }
15588         break;
15589       default:
15590         if (!rb_enc_isdigit(*m, enc)) return 0;
15591         do {
15592             if (!ISASCII(*m)) mb = 1;
15593             ++m;
15594         } while (m < e && rb_enc_isdigit(*m, enc));
15595     }
15596     return m == e ? mb + 1 : 0;
15597 }
15598 
15599 int
15600 rb_symname_p(const char *name)
15601 {
15602     return rb_enc_symname_p(name, rb_ascii8bit_encoding());
15603 }
15604 
15605 int
15606 rb_enc_symname_p(const char *name, rb_encoding *enc)
15607 {
15608     return rb_enc_symname2_p(name, strlen(name), enc);
15609 }
15610 
15611 int
15612 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
15613 {
15614     const char *m = name;
15615     const char *e = m + len;
15616     int localid = FALSE;
15617 
15618     if (!m) return FALSE;
15619     switch (*m) {
15620       case '\0':
15621         return FALSE;
15622 
15623       case '$':
15624         if (is_special_global_name(++m, e, enc)) return TRUE;
15625         goto id;
15626 
15627       case '@':
15628         if (*++m == '@') ++m;
15629         goto id;
15630 
15631       case '<':
15632         switch (*++m) {
15633           case '<': ++m; break;
15634           case '=': if (*++m == '>') ++m; break;
15635           default: break;
15636         }
15637         break;
15638 
15639       case '>':
15640         switch (*++m) {
15641           case '>': case '=': ++m; break;
15642         }
15643         break;
15644 
15645       case '=':
15646         switch (*++m) {
15647           case '~': ++m; break;
15648           case '=': if (*++m == '=') ++m; break;
15649           default: return FALSE;
15650         }
15651         break;
15652 
15653       case '*':
15654         if (*++m == '*') ++m;
15655         break;
15656 
15657       case '+': case '-':
15658         if (*++m == '@') ++m;
15659         break;
15660 
15661       case '|': case '^': case '&': case '/': case '%': case '~': case '`':
15662         ++m;
15663         break;
15664 
15665       case '[':
15666         if (*++m != ']') return FALSE;
15667         if (*++m == '=') ++m;
15668         break;
15669 
15670       case '!':
15671         switch (*++m) {
15672           case '\0': return TRUE;
15673           case '=': case '~': ++m; break;
15674           default: return FALSE;
15675         }
15676         break;
15677 
15678       default:
15679         localid = !rb_enc_isupper(*m, enc);
15680       id:
15681         if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
15682             return FALSE;
15683         while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
15684         if (localid) {
15685             switch (*m) {
15686               case '!': case '?': case '=': ++m;
15687             }
15688         }
15689         break;
15690     }
15691     return m == e;
15692 }
15693 
15694 static ID
15695 register_symid(ID id, const char *name, long len, rb_encoding *enc)
15696 {
15697     VALUE str = rb_enc_str_new(name, len, enc);
15698     OBJ_FREEZE(str);
15699     st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
15700     st_add_direct(global_symbols.id_str, id, (st_data_t)str);
15701     return id;
15702 }
15703 
15704 ID
15705 rb_intern3(const char *name, long len, rb_encoding *enc)
15706 {
15707     const char *m = name;
15708     const char *e = m + len;
15709     unsigned char c;
15710     VALUE str;
15711     ID id;
15712     long last;
15713     int mb;
15714     st_data_t data;
15715     struct RString fake_str;
15716     fake_str.basic.flags = T_STRING|RSTRING_NOEMBED|FL_FREEZE;
15717     fake_str.basic.klass = rb_cString;
15718     fake_str.as.heap.len = len;
15719     fake_str.as.heap.ptr = (char *)name;
15720     fake_str.as.heap.aux.capa = len;
15721     str = (VALUE)&fake_str;
15722     rb_enc_associate(str, enc);
15723 
15724     if (rb_enc_str_coderange(str) == ENC_CODERANGE_BROKEN) {
15725         rb_raise(rb_eEncodingError, "invalid encoding symbol");
15726     }
15727 
15728     if (st_lookup(global_symbols.sym_id, str, &data))
15729         return (ID)data;
15730 
15731     if (rb_cString && !rb_enc_asciicompat(enc)) {
15732         id = ID_JUNK;
15733         goto new_id;
15734     }
15735     last = len-1;
15736     id = 0;
15737     switch (*m) {
15738       case '$':
15739         id |= ID_GLOBAL;
15740         if ((mb = is_special_global_name(++m, e, enc)) != 0) {
15741             if (!--mb) enc = rb_ascii8bit_encoding();
15742             goto new_id;
15743         }
15744         break;
15745       case '@':
15746         if (m[1] == '@') {
15747             m++;
15748             id |= ID_CLASS;
15749         }
15750         else {
15751             id |= ID_INSTANCE;
15752         }
15753         m++;
15754         break;
15755       default:
15756         c = m[0];
15757         if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
15758             /* operators */
15759             int i;
15760 
15761             if (len == 1) {
15762                 id = c;
15763                 goto id_register;
15764             }
15765             for (i = 0; i < op_tbl_count; i++) {
15766                 if (*op_tbl[i].name == *m &&
15767                     strcmp(op_tbl[i].name, m) == 0) {
15768                     id = op_tbl[i].token;
15769                     goto id_register;
15770                 }
15771             }
15772         }
15773 
15774         if (m[last] == '=') {
15775             /* attribute assignment */
15776             id = rb_intern3(name, last, enc);
15777             if (id > tLAST_TOKEN && !is_attrset_id(id)) {
15778                 enc = rb_enc_get(rb_id2str(id));
15779                 id = rb_id_attrset(id);
15780                 goto id_register;
15781             }
15782             id = ID_ATTRSET;
15783         }
15784         else if (rb_enc_isupper(m[0], enc)) {
15785             id = ID_CONST;
15786         }
15787         else {
15788             id = ID_LOCAL;
15789         }
15790         break;
15791     }
15792     mb = 0;
15793     if (!rb_enc_isdigit(*m, enc)) {
15794         while (m <= name + last && is_identchar(m, e, enc)) {
15795             if (ISASCII(*m)) {
15796                 m++;
15797             }
15798             else {
15799                 mb = 1;
15800                 m += rb_enc_mbclen(m, e, enc);
15801             }
15802         }
15803     }
15804     if (m - name < len) id = ID_JUNK;
15805     if (enc != rb_usascii_encoding()) {
15806         /*
15807          * this clause makes sense only when called from other than
15808          * rb_intern_str() taking care of code-range.
15809          */
15810         if (!mb) {
15811             for (; m <= name + len; ++m) {
15812                 if (!ISASCII(*m)) goto mbstr;
15813             }
15814             enc = rb_usascii_encoding();
15815         }
15816       mbstr:;
15817     }
15818   new_id:
15819     if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
15820         if (len > 20) {
15821             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
15822                      name);
15823         }
15824         else {
15825             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
15826                      (int)len, name);
15827         }
15828     }
15829     id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
15830   id_register:
15831     return register_symid(id, name, len, enc);
15832 }
15833 
15834 ID
15835 rb_intern2(const char *name, long len)
15836 {
15837     return rb_intern3(name, len, rb_usascii_encoding());
15838 }
15839 
15840 #undef rb_intern
15841 ID
15842 rb_intern(const char *name)
15843 {
15844     return rb_intern2(name, strlen(name));
15845 }
15846 
15847 ID
15848 rb_intern_str(VALUE str)
15849 {
15850     rb_encoding *enc;
15851     ID id;
15852 
15853     if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
15854         enc = rb_usascii_encoding();
15855     }
15856     else {
15857         enc = rb_enc_get(str);
15858     }
15859     id = rb_intern3(RSTRING_PTR(str), RSTRING_LEN(str), enc);
15860     RB_GC_GUARD(str);
15861     return id;
15862 }
15863 
15864 VALUE
15865 rb_id2str(ID id)
15866 {
15867     st_data_t data;
15868 
15869     if (id < tLAST_TOKEN) {
15870         int i = 0;
15871 
15872         if (id < INT_MAX && rb_ispunct((int)id)) {
15873             VALUE str = global_symbols.op_sym[i = (int)id];
15874             if (!str) {
15875                 char name[2];
15876                 name[0] = (char)id;
15877                 name[1] = 0;
15878                 str = rb_usascii_str_new(name, 1);
15879                 OBJ_FREEZE(str);
15880                 global_symbols.op_sym[i] = str;
15881             }
15882             return str;
15883         }
15884         for (i = 0; i < op_tbl_count; i++) {
15885             if (op_tbl[i].token == id) {
15886                 VALUE str = global_symbols.op_sym[i];
15887                 if (!str) {
15888                     str = rb_usascii_str_new2(op_tbl[i].name);
15889                     OBJ_FREEZE(str);
15890                     global_symbols.op_sym[i] = str;
15891                 }
15892                 return str;
15893             }
15894         }
15895     }
15896 
15897     if (st_lookup(global_symbols.id_str, id, &data)) {
15898         VALUE str = (VALUE)data;
15899         if (RBASIC(str)->klass == 0)
15900             RBASIC(str)->klass = rb_cString;
15901         return str;
15902     }
15903 
15904     if (is_attrset_id(id)) {
15905         ID id2 = (id & ~ID_SCOPE_MASK) | ID_LOCAL;
15906         VALUE str;
15907 
15908         while (!(str = rb_id2str(id2))) {
15909             if (!is_local_id(id2)) return 0;
15910             id2 = (id & ~ID_SCOPE_MASK) | ID_CONST;
15911         }
15912         str = rb_str_dup(str);
15913         rb_str_cat(str, "=", 1);
15914         rb_intern_str(str);
15915         if (st_lookup(global_symbols.id_str, id, &data)) {
15916             VALUE str = (VALUE)data;
15917             if (RBASIC(str)->klass == 0)
15918                 RBASIC(str)->klass = rb_cString;
15919             return str;
15920         }
15921     }
15922     return 0;
15923 }
15924 
15925 const char *
15926 rb_id2name(ID id)
15927 {
15928     VALUE str = rb_id2str(id);
15929 
15930     if (!str) return 0;
15931     return RSTRING_PTR(str);
15932 }
15933 
15934 static int
15935 symbols_i(VALUE sym, ID value, VALUE ary)
15936 {
15937     rb_ary_push(ary, ID2SYM(value));
15938     return ST_CONTINUE;
15939 }
15940 
15941 /*
15942  *  call-seq:
15943  *     Symbol.all_symbols    => array
15944  *
15945  *  Returns an array of all the symbols currently in Ruby's symbol
15946  *  table.
15947  *
15948  *     Symbol.all_symbols.size    #=> 903
15949  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
15950  *                                     :chown, :EOFError, :$;, :String,
15951  *                                     :LOCK_SH, :"setuid?", :$<,
15952  *                                     :default_proc, :compact, :extend,
15953  *                                     :Tms, :getwd, :$=, :ThreadGroup,
15954  *                                     :wait2, :$>]
15955  */
15956 
15957 VALUE
15958 rb_sym_all_symbols(void)
15959 {
15960     VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
15961 
15962     st_foreach(global_symbols.sym_id, symbols_i, ary);
15963     return ary;
15964 }
15965 
15966 int
15967 rb_is_const_id(ID id)
15968 {
15969     return is_const_id(id);
15970 }
15971 
15972 int
15973 rb_is_class_id(ID id)
15974 {
15975     return is_class_id(id);
15976 }
15977 
15978 int
15979 rb_is_instance_id(ID id)
15980 {
15981     return is_instance_id(id);
15982 }
15983 
15984 int
15985 rb_is_local_id(ID id)
15986 {
15987     return is_local_id(id);
15988 }
15989 
15990 int
15991 rb_is_junk_id(ID id)
15992 {
15993     return is_junk_id(id);
15994 }
15995 
15996 #endif /* !RIPPER */
15997 
15998 static void
15999 parser_initialize(struct parser_params *parser)
16000 {
16001     parser->eofp = Qfalse;
16002 
16003     parser->parser_lex_strterm = 0;
16004     parser->parser_cond_stack = 0;
16005     parser->parser_cmdarg_stack = 0;
16006     parser->parser_class_nest = 0;
16007     parser->parser_paren_nest = 0;
16008     parser->parser_lpar_beg = 0;
16009     parser->parser_in_single = 0;
16010     parser->parser_in_def = 0;
16011     parser->parser_in_defined = 0;
16012     parser->parser_compile_for_eval = 0;
16013     parser->parser_cur_mid = 0;
16014     parser->parser_tokenbuf = NULL;
16015     parser->parser_tokidx = 0;
16016     parser->parser_toksiz = 0;
16017     parser->parser_heredoc_end = 0;
16018     parser->parser_command_start = TRUE;
16019     parser->parser_deferred_nodes = 0;
16020     parser->parser_lex_pbeg = 0;
16021     parser->parser_lex_p = 0;
16022     parser->parser_lex_pend = 0;
16023     parser->parser_lvtbl = 0;
16024     parser->parser_ruby__end__seen = 0;
16025     parser->parser_ruby_sourcefile = 0;
16026 #ifndef RIPPER
16027     parser->is_ripper = 0;
16028     parser->parser_eval_tree_begin = 0;
16029     parser->parser_eval_tree = 0;
16030 #else
16031     parser->is_ripper = 1;
16032     parser->parser_ruby_sourcefile_string = Qnil;
16033     parser->delayed = Qnil;
16034 
16035     parser->result = Qnil;
16036     parser->parsing_thread = Qnil;
16037     parser->toplevel_p = TRUE;
16038 #endif
16039 #ifdef YYMALLOC
16040     parser->heap = NULL;
16041 #endif
16042     parser->enc = rb_usascii_encoding();
16043 }
16044 
16045 #ifdef RIPPER
16046 #define parser_mark ripper_parser_mark
16047 #define parser_free ripper_parser_free
16048 #endif
16049 
16050 static void
16051 parser_mark(void *ptr)
16052 {
16053     struct parser_params *p = (struct parser_params*)ptr;
16054 
16055     rb_gc_mark((VALUE)p->parser_lex_strterm);
16056     rb_gc_mark((VALUE)p->parser_deferred_nodes);
16057     rb_gc_mark(p->parser_lex_input);
16058     rb_gc_mark(p->parser_lex_lastline);
16059     rb_gc_mark(p->parser_lex_nextline);
16060 #ifndef RIPPER
16061     rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
16062     rb_gc_mark((VALUE)p->parser_eval_tree) ;
16063     rb_gc_mark(p->debug_lines);
16064 #else
16065     rb_gc_mark(p->parser_ruby_sourcefile_string);
16066     rb_gc_mark(p->delayed);
16067     rb_gc_mark(p->value);
16068     rb_gc_mark(p->result);
16069     rb_gc_mark(p->parsing_thread);
16070 #endif
16071 #ifdef YYMALLOC
16072     rb_gc_mark((VALUE)p->heap);
16073 #endif
16074 }
16075 
16076 static void
16077 parser_free(void *ptr)
16078 {
16079     struct parser_params *p = (struct parser_params*)ptr;
16080     struct local_vars *local, *prev;
16081 
16082     if (p->parser_tokenbuf) {
16083         xfree(p->parser_tokenbuf);
16084     }
16085     for (local = p->parser_lvtbl; local; local = prev) {
16086         if (local->vars) xfree(local->vars);
16087         prev = local->prev;
16088         xfree(local);
16089     }
16090 #ifndef RIPPER
16091     xfree(p->parser_ruby_sourcefile);
16092 #endif
16093     xfree(p);
16094 }
16095 
16096 static size_t
16097 parser_memsize(const void *ptr)
16098 {
16099     struct parser_params *p = (struct parser_params*)ptr;
16100     struct local_vars *local;
16101     size_t size = sizeof(*p);
16102 
16103     if (!ptr) return 0;
16104     size += p->parser_toksiz;
16105     for (local = p->parser_lvtbl; local; local = local->prev) {
16106         size += sizeof(*local);
16107         if (local->vars) size += local->vars->capa * sizeof(ID);
16108     }
16109 #ifndef RIPPER
16110     if (p->parser_ruby_sourcefile) {
16111         size += strlen(p->parser_ruby_sourcefile) + 1;
16112     }
16113 #endif
16114     return size;
16115 }
16116 
16117 static const rb_data_type_t parser_data_type = {
16118     "parser",
16119     parser_mark,
16120     parser_free,
16121     parser_memsize,
16122 };
16123 
16124 VALUE rb_parser_get_yydebug(VALUE);
16125 VALUE rb_parser_set_yydebug(VALUE, VALUE);
16126 
16127 #ifndef RIPPER
16128 #undef rb_reserved_word
16129 
16130 const struct kwtable *
16131 rb_reserved_word(const char *str, unsigned int len)
16132 {
16133     return reserved_word(str, len);
16134 }
16135 
16136 static struct parser_params *
16137 parser_new(void)
16138 {
16139     struct parser_params *p;
16140 
16141     p = ALLOC_N(struct parser_params, 1);
16142     MEMZERO(p, struct parser_params, 1);
16143     parser_initialize(p);
16144     return p;
16145 }
16146 
16147 VALUE
16148 rb_parser_new(void)
16149 {
16150     struct parser_params *p = parser_new();
16151 
16152     return TypedData_Wrap_Struct(0, &parser_data_type, p);
16153 }
16154 
16155 /*
16156  *  call-seq:
16157  *    ripper#end_seen?   -> Boolean
16158  *
16159  *  Return true if parsed source ended by +\_\_END\_\_+.
16160  */
16161 VALUE
16162 rb_parser_end_seen_p(VALUE vparser)
16163 {
16164     struct parser_params *parser;
16165 
16166     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16167     return ruby__end__seen ? Qtrue : Qfalse;
16168 }
16169 
16170 /*
16171  *  call-seq:
16172  *    ripper#encoding   -> encoding
16173  *
16174  *  Return encoding of the source.
16175  */
16176 VALUE
16177 rb_parser_encoding(VALUE vparser)
16178 {
16179     struct parser_params *parser;
16180 
16181     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16182     return rb_enc_from_encoding(parser->enc);
16183 }
16184 
16185 /*
16186  *  call-seq:
16187  *    ripper.yydebug   -> true or false
16188  *
16189  *  Get yydebug.
16190  */
16191 VALUE
16192 rb_parser_get_yydebug(VALUE self)
16193 {
16194     struct parser_params *parser;
16195 
16196     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16197     return yydebug ? Qtrue : Qfalse;
16198 }
16199 
16200 /*
16201  *  call-seq:
16202  *    ripper.yydebug = flag
16203  *
16204  *  Set yydebug.
16205  */
16206 VALUE
16207 rb_parser_set_yydebug(VALUE self, VALUE flag)
16208 {
16209     struct parser_params *parser;
16210 
16211     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16212     yydebug = RTEST(flag);
16213     return flag;
16214 }
16215 
16216 #ifdef YYMALLOC
16217 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
16218 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
16219 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
16220                            (n)->u3.cnt = (c), (p))
16221 
16222 void *
16223 rb_parser_malloc(struct parser_params *parser, size_t size)
16224 {
16225     size_t cnt = HEAPCNT(1, size);
16226     NODE *n = NEWHEAP();
16227     void *ptr = xmalloc(size);
16228 
16229     return ADD2HEAP(n, cnt, ptr);
16230 }
16231 
16232 void *
16233 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
16234 {
16235     size_t cnt = HEAPCNT(nelem, size);
16236     NODE *n = NEWHEAP();
16237     void *ptr = xcalloc(nelem, size);
16238 
16239     return ADD2HEAP(n, cnt, ptr);
16240 }
16241 
16242 void *
16243 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
16244 {
16245     NODE *n;
16246     size_t cnt = HEAPCNT(1, size);
16247 
16248     if (ptr && (n = parser->heap) != NULL) {
16249         do {
16250             if (n->u1.node == ptr) {
16251                 n->u1.node = ptr = xrealloc(ptr, size);
16252                 if (n->u3.cnt) n->u3.cnt = cnt;
16253                 return ptr;
16254             }
16255         } while ((n = n->u2.node) != NULL);
16256     }
16257     n = NEWHEAP();
16258     ptr = xrealloc(ptr, size);
16259     return ADD2HEAP(n, cnt, ptr);
16260 }
16261 
16262 void
16263 rb_parser_free(struct parser_params *parser, void *ptr)
16264 {
16265     NODE **prev = &parser->heap, *n;
16266 
16267     while ((n = *prev) != NULL) {
16268         if (n->u1.node == ptr) {
16269             *prev = n->u2.node;
16270             rb_gc_force_recycle((VALUE)n);
16271             break;
16272         }
16273         prev = &n->u2.node;
16274     }
16275     xfree(ptr);
16276 }
16277 #endif
16278 #endif
16279 
16280 #ifdef RIPPER
16281 #ifdef RIPPER_DEBUG
16282 extern int rb_is_pointer_to_heap(VALUE);
16283 
16284 /* :nodoc: */
16285 static VALUE
16286 ripper_validate_object(VALUE self, VALUE x)
16287 {
16288     if (x == Qfalse) return x;
16289     if (x == Qtrue) return x;
16290     if (x == Qnil) return x;
16291     if (x == Qundef)
16292         rb_raise(rb_eArgError, "Qundef given");
16293     if (FIXNUM_P(x)) return x;
16294     if (SYMBOL_P(x)) return x;
16295     if (!rb_is_pointer_to_heap(x))
16296         rb_raise(rb_eArgError, "invalid pointer: %p", x);
16297     switch (TYPE(x)) {
16298       case T_STRING:
16299       case T_OBJECT:
16300       case T_ARRAY:
16301       case T_BIGNUM:
16302       case T_FLOAT:
16303         return x;
16304       case T_NODE:
16305         if (nd_type(x) != NODE_LASGN) {
16306             rb_raise(rb_eArgError, "NODE given: %p", x);
16307         }
16308         return ((NODE *)x)->nd_rval;
16309       default:
16310         rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
16311                  x, rb_obj_classname(x));
16312     }
16313     return x;
16314 }
16315 #endif
16316 
16317 #define validate(x) (x = get_value(x))
16318 
16319 static VALUE
16320 ripper_dispatch0(struct parser_params *parser, ID mid)
16321 {
16322     return rb_funcall(parser->value, mid, 0);
16323 }
16324 
16325 static VALUE
16326 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
16327 {
16328     validate(a);
16329     return rb_funcall(parser->value, mid, 1, a);
16330 }
16331 
16332 static VALUE
16333 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
16334 {
16335     validate(a);
16336     validate(b);
16337     return rb_funcall(parser->value, mid, 2, a, b);
16338 }
16339 
16340 static VALUE
16341 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
16342 {
16343     validate(a);
16344     validate(b);
16345     validate(c);
16346     return rb_funcall(parser->value, mid, 3, a, b, c);
16347 }
16348 
16349 static VALUE
16350 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
16351 {
16352     validate(a);
16353     validate(b);
16354     validate(c);
16355     validate(d);
16356     return rb_funcall(parser->value, mid, 4, a, b, c, d);
16357 }
16358 
16359 static VALUE
16360 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
16361 {
16362     validate(a);
16363     validate(b);
16364     validate(c);
16365     validate(d);
16366     validate(e);
16367     return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
16368 }
16369 
16370 static const struct kw_assoc {
16371     ID id;
16372     const char *name;
16373 } keyword_to_name[] = {
16374     {keyword_class,     "class"},
16375     {keyword_module,    "module"},
16376     {keyword_def,       "def"},
16377     {keyword_undef,     "undef"},
16378     {keyword_begin,     "begin"},
16379     {keyword_rescue,    "rescue"},
16380     {keyword_ensure,    "ensure"},
16381     {keyword_end,       "end"},
16382     {keyword_if,        "if"},
16383     {keyword_unless,    "unless"},
16384     {keyword_then,      "then"},
16385     {keyword_elsif,     "elsif"},
16386     {keyword_else,      "else"},
16387     {keyword_case,      "case"},
16388     {keyword_when,      "when"},
16389     {keyword_while,     "while"},
16390     {keyword_until,     "until"},
16391     {keyword_for,       "for"},
16392     {keyword_break,     "break"},
16393     {keyword_next,      "next"},
16394     {keyword_redo,      "redo"},
16395     {keyword_retry,     "retry"},
16396     {keyword_in,        "in"},
16397     {keyword_do,        "do"},
16398     {keyword_do_cond,   "do"},
16399     {keyword_do_block,  "do"},
16400     {keyword_return,    "return"},
16401     {keyword_yield,     "yield"},
16402     {keyword_super,     "super"},
16403     {keyword_self,      "self"},
16404     {keyword_nil,       "nil"},
16405     {keyword_true,      "true"},
16406     {keyword_false,     "false"},
16407     {keyword_and,       "and"},
16408     {keyword_or,        "or"},
16409     {keyword_not,       "not"},
16410     {modifier_if,       "if"},
16411     {modifier_unless,   "unless"},
16412     {modifier_while,    "while"},
16413     {modifier_until,    "until"},
16414     {modifier_rescue,   "rescue"},
16415     {keyword_alias,     "alias"},
16416     {keyword_defined,   "defined?"},
16417     {keyword_BEGIN,     "BEGIN"},
16418     {keyword_END,       "END"},
16419     {keyword__LINE__,   "__LINE__"},
16420     {keyword__FILE__,   "__FILE__"},
16421     {keyword__ENCODING__, "__ENCODING__"},
16422     {0, NULL}
16423 };
16424 
16425 static const char*
16426 keyword_id_to_str(ID id)
16427 {
16428     const struct kw_assoc *a;
16429 
16430     for (a = keyword_to_name; a->id; a++) {
16431         if (a->id == id)
16432             return a->name;
16433     }
16434     return NULL;
16435 }
16436 
16437 #undef ripper_id2sym
16438 static VALUE
16439 ripper_id2sym(ID id)
16440 {
16441     const char *name;
16442     char buf[8];
16443 
16444     if (id <= 256) {
16445         buf[0] = (char)id;
16446         buf[1] = '\0';
16447         return ID2SYM(rb_intern2(buf, 1));
16448     }
16449     if ((name = keyword_id_to_str(id))) {
16450         return ID2SYM(rb_intern(name));
16451     }
16452     switch (id) {
16453       case tOROP:
16454         name = "||";
16455         break;
16456       case tANDOP:
16457         name = "&&";
16458         break;
16459       default:
16460         name = rb_id2name(id);
16461         if (!name) {
16462             rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
16463         }
16464         return ID2SYM(id);
16465     }
16466     return ID2SYM(rb_intern(name));
16467 }
16468 
16469 static ID
16470 ripper_get_id(VALUE v)
16471 {
16472     NODE *nd;
16473     if (!RB_TYPE_P(v, T_NODE)) return 0;
16474     nd = (NODE *)v;
16475     if (nd_type(nd) != NODE_LASGN) return 0;
16476     return nd->nd_vid;
16477 }
16478 
16479 static VALUE
16480 ripper_get_value(VALUE v)
16481 {
16482     NODE *nd;
16483     if (v == Qundef) return Qnil;
16484     if (!RB_TYPE_P(v, T_NODE)) return v;
16485     nd = (NODE *)v;
16486     if (nd_type(nd) != NODE_LASGN) return Qnil;
16487     return nd->nd_rval;
16488 }
16489 
16490 static void
16491 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
16492 {
16493     VALUE str;
16494     va_list args;
16495 
16496     va_start(args, fmt);
16497     str = rb_vsprintf(fmt, args);
16498     va_end(args);
16499     rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
16500 }
16501 
16502 static void
16503 ripper_warn0(struct parser_params *parser, const char *fmt)
16504 {
16505     rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
16506 }
16507 
16508 static void
16509 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
16510 {
16511     rb_funcall(parser->value, rb_intern("warn"), 2,
16512                STR_NEW2(fmt), INT2NUM(a));
16513 }
16514 
16515 #if 0
16516 static void
16517 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
16518 {
16519     rb_funcall(parser->value, rb_intern("warn"), 2,
16520                STR_NEW2(fmt), STR_NEW2(str));
16521 }
16522 #endif
16523 
16524 static void
16525 ripper_warning0(struct parser_params *parser, const char *fmt)
16526 {
16527     rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
16528 }
16529 
16530 static void
16531 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
16532 {
16533     rb_funcall(parser->value, rb_intern("warning"), 2,
16534                STR_NEW2(fmt), STR_NEW2(str));
16535 }
16536 
16537 static VALUE
16538 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
16539 {
16540     return rb_funcall(src, ripper_id_gets, 0);
16541 }
16542 
16543 static VALUE
16544 ripper_s_allocate(VALUE klass)
16545 {
16546     struct parser_params *p;
16547     VALUE self;
16548 
16549     p = ALLOC_N(struct parser_params, 1);
16550     MEMZERO(p, struct parser_params, 1);
16551     self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
16552     p->value = self;
16553     return self;
16554 }
16555 
16556 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
16557 
16558 /*
16559  *  call-seq:
16560  *    Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
16561  *
16562  *  Create a new Ripper object.
16563  *  _src_ must be a String, an IO, or an Object which has #gets method.
16564  *
16565  *  This method does not starts parsing.
16566  *  See also Ripper#parse and Ripper.parse.
16567  */
16568 static VALUE
16569 ripper_initialize(int argc, VALUE *argv, VALUE self)
16570 {
16571     struct parser_params *parser;
16572     VALUE src, fname, lineno;
16573 
16574     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16575     rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
16576     if (rb_obj_respond_to(src, ripper_id_gets, 0)) {
16577         parser->parser_lex_gets = ripper_lex_get_generic;
16578     }
16579     else {
16580         StringValue(src);
16581         parser->parser_lex_gets = lex_get_str;
16582     }
16583     parser->parser_lex_input = src;
16584     parser->eofp = Qfalse;
16585     if (NIL_P(fname)) {
16586         fname = STR_NEW2("(ripper)");
16587     }
16588     else {
16589         StringValue(fname);
16590     }
16591     parser_initialize(parser);
16592 
16593     parser->parser_ruby_sourcefile_string = fname;
16594     parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
16595     parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
16596 
16597     return Qnil;
16598 }
16599 
16600 extern VALUE rb_thread_pass(void);
16601 
16602 struct ripper_args {
16603     struct parser_params *parser;
16604     int argc;
16605     VALUE *argv;
16606 };
16607 
16608 static VALUE
16609 ripper_parse0(VALUE parser_v)
16610 {
16611     struct parser_params *parser;
16612 
16613     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16614     parser_prepare(parser);
16615     ripper_yyparse((void*)parser);
16616     return parser->result;
16617 }
16618 
16619 static VALUE
16620 ripper_ensure(VALUE parser_v)
16621 {
16622     struct parser_params *parser;
16623 
16624     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
16625     parser->parsing_thread = Qnil;
16626     return Qnil;
16627 }
16628 
16629 /*
16630  *  call-seq:
16631  *    ripper#parse
16632  *
16633  *  Start parsing and returns the value of the root action.
16634  */
16635 static VALUE
16636 ripper_parse(VALUE self)
16637 {
16638     struct parser_params *parser;
16639 
16640     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16641     if (!ripper_initialized_p(parser)) {
16642         rb_raise(rb_eArgError, "method called for uninitialized object");
16643     }
16644     if (!NIL_P(parser->parsing_thread)) {
16645         if (parser->parsing_thread == rb_thread_current())
16646             rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
16647         else
16648             rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
16649     }
16650     parser->parsing_thread = rb_thread_current();
16651     rb_ensure(ripper_parse0, self, ripper_ensure, self);
16652 
16653     return parser->result;
16654 }
16655 
16656 /*
16657  *  call-seq:
16658  *    ripper#column   -> Integer
16659  *
16660  *  Return column number of current parsing line.
16661  *  This number starts from 0.
16662  */
16663 static VALUE
16664 ripper_column(VALUE self)
16665 {
16666     struct parser_params *parser;
16667     long col;
16668 
16669     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16670     if (!ripper_initialized_p(parser)) {
16671         rb_raise(rb_eArgError, "method called for uninitialized object");
16672     }
16673     if (NIL_P(parser->parsing_thread)) return Qnil;
16674     col = parser->tokp - parser->parser_lex_pbeg;
16675     return LONG2NUM(col);
16676 }
16677 
16678 /*
16679  *  call-seq:
16680  *    ripper#filename   -> String
16681  *
16682  *  Return current parsing filename.
16683  */
16684 static VALUE
16685 ripper_filename(VALUE self)
16686 {
16687     struct parser_params *parser;
16688 
16689     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16690     if (!ripper_initialized_p(parser)) {
16691         rb_raise(rb_eArgError, "method called for uninitialized object");
16692     }
16693     return parser->parser_ruby_sourcefile_string;
16694 }
16695 
16696 /*
16697  *  call-seq:
16698  *    ripper#lineno   -> Integer
16699  *
16700  *  Return line number of current parsing line.
16701  *  This number starts from 1.
16702  */
16703 static VALUE
16704 ripper_lineno(VALUE self)
16705 {
16706     struct parser_params *parser;
16707 
16708     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
16709     if (!ripper_initialized_p(parser)) {
16710         rb_raise(rb_eArgError, "method called for uninitialized object");
16711     }
16712     if (NIL_P(parser->parsing_thread)) return Qnil;
16713     return INT2NUM(parser->parser_ruby_sourceline);
16714 }
16715 
16716 #ifdef RIPPER_DEBUG
16717 /* :nodoc: */
16718 static VALUE
16719 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
16720 {
16721     StringValue(msg);
16722     if (obj == Qundef) {
16723         rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
16724     }
16725     return Qnil;
16726 }
16727 
16728 /* :nodoc: */
16729 static VALUE
16730 ripper_value(VALUE self, VALUE obj)
16731 {
16732     return ULONG2NUM(obj);
16733 }
16734 #endif
16735 
16736 void
16737 Init_ripper(void)
16738 {
16739     VALUE Ripper;
16740 
16741     Ripper = rb_define_class("Ripper", rb_cObject);
16742     rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
16743     rb_define_alloc_func(Ripper, ripper_s_allocate);
16744     rb_define_method(Ripper, "initialize", ripper_initialize, -1);
16745     rb_define_method(Ripper, "parse", ripper_parse, 0);
16746     rb_define_method(Ripper, "column", ripper_column, 0);
16747     rb_define_method(Ripper, "filename", ripper_filename, 0);
16748     rb_define_method(Ripper, "lineno", ripper_lineno, 0);
16749     rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
16750     rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
16751     rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
16752     rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
16753 #ifdef RIPPER_DEBUG
16754     rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
16755     rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
16756     rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
16757 #endif
16758 
16759     ripper_id_gets = rb_intern("gets");
16760     ripper_init_eventids1(Ripper);
16761     ripper_init_eventids2(Ripper);
16762     /* ensure existing in symbol table */
16763     rb_intern("||");
16764     rb_intern("&&");
16765 }
16766 #endif /* RIPPER */
16767 
16768 

Generated on Sat Jul 7 2012 15:29:21 for Ruby by  doxygen 1.7.1