Ruby  2.0.0p594(2014-10-27revision48167)
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 #ifndef PARSER_DEBUG
00073 #define PARSER_DEBUG 0
00074 #endif
00075 #define YYDEBUG 1
00076 #define YYERROR_VERBOSE 1
00077 #define YYSTACK_USE_ALLOCA 0
00078 
00079 #include "ruby/ruby.h"
00080 #include "ruby/st.h"
00081 #include "ruby/encoding.h"
00082 #include "internal.h"
00083 #include "node.h"
00084 #include "parse.h"
00085 #include "id.h"
00086 #include "regenc.h"
00087 #include <stdio.h>
00088 #include <errno.h>
00089 #include <ctype.h>
00090 #include "probes.h"
00091 
00092 #define numberof(array) (int)(sizeof(array) / sizeof((array)[0]))
00093 
00094 #define YYMALLOC(size)          rb_parser_malloc(parser, (size))
00095 #define YYREALLOC(ptr, size)    rb_parser_realloc(parser, (ptr), (size))
00096 #define YYCALLOC(nelem, size)   rb_parser_calloc(parser, (nelem), (size))
00097 #define YYFREE(ptr)             rb_parser_free(parser, (ptr))
00098 #define malloc  YYMALLOC
00099 #define realloc YYREALLOC
00100 #define calloc  YYCALLOC
00101 #define free    YYFREE
00102 
00103 #ifndef RIPPER
00104 static ID register_symid(ID, const char *, long, rb_encoding *);
00105 static ID register_symid_str(ID, VALUE);
00106 #define REGISTER_SYMID(id, name) register_symid((id), (name), strlen(name), enc)
00107 #include "id.c"
00108 #endif
00109 
00110 #define is_notop_id(id) ((id)>tLAST_OP_ID)
00111 #define is_local_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_LOCAL)
00112 #define is_global_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_GLOBAL)
00113 #define is_instance_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_INSTANCE)
00114 #define is_attrset_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_ATTRSET)
00115 #define is_const_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CONST)
00116 #define is_class_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_CLASS)
00117 #define is_junk_id(id) (is_notop_id(id)&&((id)&ID_SCOPE_MASK)==ID_JUNK)
00118 #define id_type(id) (is_notop_id(id) ? (int)((id)&ID_SCOPE_MASK) : -1)
00119 
00120 #define is_asgn_or_id(id) ((is_notop_id(id)) && \
00121         (((id)&ID_SCOPE_MASK) == ID_GLOBAL || \
00122          ((id)&ID_SCOPE_MASK) == ID_INSTANCE || \
00123          ((id)&ID_SCOPE_MASK) == ID_CLASS))
00124 
00125 enum lex_state_bits {
00126     EXPR_BEG_bit,               /* ignore newline, +/- is a sign. */
00127     EXPR_END_bit,               /* newline significant, +/- is an operator. */
00128     EXPR_ENDARG_bit,            /* ditto, and unbound braces. */
00129     EXPR_ENDFN_bit,             /* ditto, and unbound braces. */
00130     EXPR_ARG_bit,               /* newline significant, +/- is an operator. */
00131     EXPR_CMDARG_bit,            /* newline significant, +/- is an operator. */
00132     EXPR_MID_bit,               /* newline significant, +/- is an operator. */
00133     EXPR_FNAME_bit,             /* ignore newline, no reserved words. */
00134     EXPR_DOT_bit,               /* right after `.' or `::', no reserved words. */
00135     EXPR_CLASS_bit,             /* immediate after `class', no here document. */
00136     EXPR_VALUE_bit,             /* alike EXPR_BEG but label is disallowed. */
00137     EXPR_MAX_STATE
00138 };
00139 /* examine combinations */
00140 enum lex_state_e {
00141 #define DEF_EXPR(n) EXPR_##n = (1 << EXPR_##n##_bit)
00142     DEF_EXPR(BEG),
00143     DEF_EXPR(END),
00144     DEF_EXPR(ENDARG),
00145     DEF_EXPR(ENDFN),
00146     DEF_EXPR(ARG),
00147     DEF_EXPR(CMDARG),
00148     DEF_EXPR(MID),
00149     DEF_EXPR(FNAME),
00150     DEF_EXPR(DOT),
00151     DEF_EXPR(CLASS),
00152     DEF_EXPR(VALUE),
00153     EXPR_BEG_ANY  =  (EXPR_BEG | EXPR_VALUE | EXPR_MID | EXPR_CLASS),
00154     EXPR_ARG_ANY  =  (EXPR_ARG | EXPR_CMDARG),
00155     EXPR_END_ANY  =  (EXPR_END | EXPR_ENDARG | EXPR_ENDFN)
00156 };
00157 #define IS_lex_state_for(x, ls) ((x) & (ls))
00158 #define IS_lex_state(ls)        IS_lex_state_for(lex_state, (ls))
00159 
00160 #if PARSER_DEBUG
00161 static const char *lex_state_name(enum lex_state_e state);
00162 #endif
00163 
00164 typedef VALUE stack_type;
00165 
00166 # define BITSTACK_PUSH(stack, n)        ((stack) = ((stack)<<1)|((n)&1))
00167 # define BITSTACK_POP(stack)    ((stack) = (stack) >> 1)
00168 # define BITSTACK_LEXPOP(stack) ((stack) = ((stack) >> 1) | ((stack) & 1))
00169 # define BITSTACK_SET_P(stack)  ((stack)&1)
00170 
00171 #define COND_PUSH(n)    BITSTACK_PUSH(cond_stack, (n))
00172 #define COND_POP()      BITSTACK_POP(cond_stack)
00173 #define COND_LEXPOP()   BITSTACK_LEXPOP(cond_stack)
00174 #define COND_P()        BITSTACK_SET_P(cond_stack)
00175 
00176 #define CMDARG_PUSH(n)  BITSTACK_PUSH(cmdarg_stack, (n))
00177 #define CMDARG_POP()    BITSTACK_POP(cmdarg_stack)
00178 #define CMDARG_LEXPOP() BITSTACK_LEXPOP(cmdarg_stack)
00179 #define CMDARG_P()      BITSTACK_SET_P(cmdarg_stack)
00180 
00181 struct vtable {
00182     ID *tbl;
00183     int pos;
00184     int capa;
00185     struct vtable *prev;
00186 };
00187 
00188 struct local_vars {
00189     struct vtable *args;
00190     struct vtable *vars;
00191     struct vtable *used;
00192     struct local_vars *prev;
00193     stack_type cmdargs;
00194 };
00195 
00196 #define DVARS_INHERIT ((void*)1)
00197 #define DVARS_TOPSCOPE NULL
00198 #define DVARS_SPECIAL_P(tbl) (!POINTER_P(tbl))
00199 #define POINTER_P(val) ((VALUE)(val) & ~(VALUE)3)
00200 
00201 static int
00202 vtable_size(const struct vtable *tbl)
00203 {
00204     if (POINTER_P(tbl)) {
00205         return tbl->pos;
00206     }
00207     else {
00208         return 0;
00209     }
00210 }
00211 
00212 #define VTBL_DEBUG 0
00213 
00214 static struct vtable *
00215 vtable_alloc(struct vtable *prev)
00216 {
00217     struct vtable *tbl = ALLOC(struct vtable);
00218     tbl->pos = 0;
00219     tbl->capa = 8;
00220     tbl->tbl = ALLOC_N(ID, tbl->capa);
00221     tbl->prev = prev;
00222     if (VTBL_DEBUG) printf("vtable_alloc: %p\n", (void *)tbl);
00223     return tbl;
00224 }
00225 
00226 static void
00227 vtable_free(struct vtable *tbl)
00228 {
00229     if (VTBL_DEBUG)printf("vtable_free: %p\n", (void *)tbl);
00230     if (POINTER_P(tbl)) {
00231         if (tbl->tbl) {
00232             xfree(tbl->tbl);
00233         }
00234         xfree(tbl);
00235     }
00236 }
00237 
00238 static void
00239 vtable_add(struct vtable *tbl, ID id)
00240 {
00241     if (!POINTER_P(tbl)) {
00242         rb_bug("vtable_add: vtable is not allocated (%p)", (void *)tbl);
00243     }
00244     if (VTBL_DEBUG) printf("vtable_add: %p, %s\n", (void *)tbl, rb_id2name(id));
00245 
00246     if (tbl->pos == tbl->capa) {
00247         tbl->capa = tbl->capa * 2;
00248         REALLOC_N(tbl->tbl, ID, tbl->capa);
00249     }
00250     tbl->tbl[tbl->pos++] = id;
00251 }
00252 
00253 static int
00254 vtable_included(const struct vtable * tbl, ID id)
00255 {
00256     int i;
00257 
00258     if (POINTER_P(tbl)) {
00259         for (i = 0; i < tbl->pos; i++) {
00260             if (tbl->tbl[i] == id) {
00261                 return i+1;
00262             }
00263         }
00264     }
00265     return 0;
00266 }
00267 
00268 
00269 #ifndef RIPPER
00270 typedef struct token_info {
00271     const char *token;
00272     int linenum;
00273     int column;
00274     int nonspc;
00275     struct token_info *next;
00276 } token_info;
00277 #endif
00278 
00279 /*
00280     Structure of Lexer Buffer:
00281 
00282  lex_pbeg      tokp         lex_p        lex_pend
00283     |           |              |            |
00284     |-----------+--------------+------------|
00285                 |<------------>|
00286                      token
00287 */
00288 struct parser_params {
00289     int is_ripper;
00290     NODE *heap;
00291 
00292     YYSTYPE *parser_yylval;
00293     VALUE eofp;
00294 
00295     NODE *parser_lex_strterm;
00296     enum lex_state_e parser_lex_state;
00297     stack_type parser_cond_stack;
00298     stack_type parser_cmdarg_stack;
00299     int parser_class_nest;
00300     int parser_paren_nest;
00301     int parser_lpar_beg;
00302     int parser_in_single;
00303     int parser_in_def;
00304     int parser_brace_nest;
00305     int parser_compile_for_eval;
00306     VALUE parser_cur_mid;
00307     int parser_in_defined;
00308     char *parser_tokenbuf;
00309     int parser_tokidx;
00310     int parser_toksiz;
00311     int parser_tokline;
00312     VALUE parser_lex_input;
00313     VALUE parser_lex_lastline;
00314     VALUE parser_lex_nextline;
00315     const char *parser_lex_pbeg;
00316     const char *parser_lex_p;
00317     const char *parser_lex_pend;
00318     int parser_heredoc_end;
00319     int parser_command_start;
00320     NODE *parser_deferred_nodes;
00321     long parser_lex_gets_ptr;
00322     VALUE (*parser_lex_gets)(struct parser_params*,VALUE);
00323     struct local_vars *parser_lvtbl;
00324     int parser_ruby__end__seen;
00325     int line_count;
00326     int has_shebang;
00327     char *parser_ruby_sourcefile; /* current source file */
00328     int parser_ruby_sourceline; /* current line no. */
00329     VALUE parser_ruby_sourcefile_string;
00330     rb_encoding *enc;
00331 
00332     int parser_yydebug;
00333 
00334 #ifndef RIPPER
00335     /* Ruby core only */
00336     NODE *parser_eval_tree_begin;
00337     NODE *parser_eval_tree;
00338     VALUE debug_lines;
00339     VALUE coverage;
00340     int nerr;
00341 
00342     int parser_token_info_enabled;
00343     token_info *parser_token_info;
00344 #else
00345     /* Ripper only */
00346     const char *tokp;
00347     VALUE delayed;
00348     int delayed_line;
00349     int delayed_col;
00350 
00351     VALUE value;
00352     VALUE result;
00353     VALUE parsing_thread;
00354     int toplevel_p;
00355 #endif
00356 };
00357 
00358 #define STR_NEW(p,n) rb_enc_str_new((p),(n),current_enc)
00359 #define STR_NEW0() rb_enc_str_new(0,0,current_enc)
00360 #define STR_NEW2(p) rb_enc_str_new((p),strlen(p),current_enc)
00361 #define STR_NEW3(p,n,e,func) parser_str_new((p),(n),(e),(func),current_enc)
00362 #define ENC_SINGLE(cr) ((cr)==ENC_CODERANGE_7BIT)
00363 #define TOK_INTERN(mb) rb_intern3(tok(), toklen(), current_enc)
00364 
00365 static int parser_yyerror(struct parser_params*, const char*);
00366 #define yyerror(msg) parser_yyerror(parser, (msg))
00367 
00368 #define lex_strterm             (parser->parser_lex_strterm)
00369 #define lex_state               (parser->parser_lex_state)
00370 #define cond_stack              (parser->parser_cond_stack)
00371 #define cmdarg_stack            (parser->parser_cmdarg_stack)
00372 #define class_nest              (parser->parser_class_nest)
00373 #define paren_nest              (parser->parser_paren_nest)
00374 #define lpar_beg                (parser->parser_lpar_beg)
00375 #define brace_nest              (parser->parser_brace_nest)
00376 #define in_single               (parser->parser_in_single)
00377 #define in_def                  (parser->parser_in_def)
00378 #define compile_for_eval        (parser->parser_compile_for_eval)
00379 #define cur_mid                 (parser->parser_cur_mid)
00380 #define in_defined              (parser->parser_in_defined)
00381 #define tokenbuf                (parser->parser_tokenbuf)
00382 #define tokidx                  (parser->parser_tokidx)
00383 #define toksiz                  (parser->parser_toksiz)
00384 #define tokline                 (parser->parser_tokline)
00385 #define lex_input               (parser->parser_lex_input)
00386 #define lex_lastline            (parser->parser_lex_lastline)
00387 #define lex_nextline            (parser->parser_lex_nextline)
00388 #define lex_pbeg                (parser->parser_lex_pbeg)
00389 #define lex_p                   (parser->parser_lex_p)
00390 #define lex_pend                (parser->parser_lex_pend)
00391 #define heredoc_end             (parser->parser_heredoc_end)
00392 #define command_start           (parser->parser_command_start)
00393 #define deferred_nodes          (parser->parser_deferred_nodes)
00394 #define lex_gets_ptr            (parser->parser_lex_gets_ptr)
00395 #define lex_gets                (parser->parser_lex_gets)
00396 #define lvtbl                   (parser->parser_lvtbl)
00397 #define ruby__end__seen         (parser->parser_ruby__end__seen)
00398 #define ruby_sourceline         (parser->parser_ruby_sourceline)
00399 #define ruby_sourcefile         (parser->parser_ruby_sourcefile)
00400 #define ruby_sourcefile_string  (parser->parser_ruby_sourcefile_string)
00401 #define current_enc             (parser->enc)
00402 #define yydebug                 (parser->parser_yydebug)
00403 #ifdef RIPPER
00404 #else
00405 #define ruby_eval_tree          (parser->parser_eval_tree)
00406 #define ruby_eval_tree_begin    (parser->parser_eval_tree_begin)
00407 #define ruby_debug_lines        (parser->debug_lines)
00408 #define ruby_coverage           (parser->coverage)
00409 #endif
00410 
00411 #if YYPURE
00412 static int yylex(void*, void*);
00413 #else
00414 static int yylex(void*);
00415 #endif
00416 
00417 #ifndef RIPPER
00418 #define yyparse ruby_yyparse
00419 
00420 static NODE* node_newnode(struct parser_params *, enum node_type, VALUE, VALUE, VALUE);
00421 #define rb_node_newnode(type, a1, a2, a3) node_newnode(parser, (type), (a1), (a2), (a3))
00422 
00423 static NODE *cond_gen(struct parser_params*,NODE*);
00424 #define cond(node) cond_gen(parser, (node))
00425 static NODE *logop_gen(struct parser_params*,enum node_type,NODE*,NODE*);
00426 #define logop(type,node1,node2) logop_gen(parser, (type), (node1), (node2))
00427 
00428 static NODE *newline_node(NODE*);
00429 static void fixpos(NODE*,NODE*);
00430 
00431 static int value_expr_gen(struct parser_params*,NODE*);
00432 static void void_expr_gen(struct parser_params*,NODE*);
00433 static NODE *remove_begin(NODE*);
00434 #define value_expr(node) value_expr_gen(parser, (node) = remove_begin(node))
00435 #define void_expr0(node) void_expr_gen(parser, (node))
00436 #define void_expr(node) void_expr0((node) = remove_begin(node))
00437 static void void_stmts_gen(struct parser_params*,NODE*);
00438 #define void_stmts(node) void_stmts_gen(parser, (node))
00439 static void reduce_nodes_gen(struct parser_params*,NODE**);
00440 #define reduce_nodes(n) reduce_nodes_gen(parser,(n))
00441 static void block_dup_check_gen(struct parser_params*,NODE*,NODE*);
00442 #define block_dup_check(n1,n2) block_dup_check_gen(parser,(n1),(n2))
00443 
00444 static NODE *block_append_gen(struct parser_params*,NODE*,NODE*);
00445 #define block_append(h,t) block_append_gen(parser,(h),(t))
00446 static NODE *list_append_gen(struct parser_params*,NODE*,NODE*);
00447 #define list_append(l,i) list_append_gen(parser,(l),(i))
00448 static NODE *list_concat_gen(struct parser_params*,NODE*,NODE*);
00449 #define list_concat(h,t) list_concat_gen(parser,(h),(t))
00450 static NODE *arg_append_gen(struct parser_params*,NODE*,NODE*);
00451 #define arg_append(h,t) arg_append_gen(parser,(h),(t))
00452 static NODE *arg_concat_gen(struct parser_params*,NODE*,NODE*);
00453 #define arg_concat(h,t) arg_concat_gen(parser,(h),(t))
00454 static NODE *literal_concat_gen(struct parser_params*,NODE*,NODE*);
00455 #define literal_concat(h,t) literal_concat_gen(parser,(h),(t))
00456 static int literal_concat0(struct parser_params *, VALUE, VALUE);
00457 static NODE *new_evstr_gen(struct parser_params*,NODE*);
00458 #define new_evstr(n) new_evstr_gen(parser,(n))
00459 static NODE *evstr2dstr_gen(struct parser_params*,NODE*);
00460 #define evstr2dstr(n) evstr2dstr_gen(parser,(n))
00461 static NODE *splat_array(NODE*);
00462 
00463 static NODE *call_bin_op_gen(struct parser_params*,NODE*,ID,NODE*);
00464 #define call_bin_op(recv,id,arg1) call_bin_op_gen(parser, (recv),(id),(arg1))
00465 static NODE *call_uni_op_gen(struct parser_params*,NODE*,ID);
00466 #define call_uni_op(recv,id) call_uni_op_gen(parser, (recv),(id))
00467 
00468 static NODE *new_args_gen(struct parser_params*,NODE*,NODE*,ID,NODE*,NODE*);
00469 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
00470 static NODE *new_args_tail_gen(struct parser_params*,NODE*,ID,ID);
00471 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
00472 
00473 static NODE *negate_lit(NODE*);
00474 static NODE *ret_args_gen(struct parser_params*,NODE*);
00475 #define ret_args(node) ret_args_gen(parser, (node))
00476 static NODE *arg_blk_pass(NODE*,NODE*);
00477 static NODE *new_yield_gen(struct parser_params*,NODE*);
00478 #define new_yield(node) new_yield_gen(parser, (node))
00479 static NODE *dsym_node_gen(struct parser_params*,NODE*);
00480 #define dsym_node(node) dsym_node_gen(parser, (node))
00481 
00482 static NODE *gettable_gen(struct parser_params*,ID);
00483 #define gettable(id) gettable_gen(parser,(id))
00484 static NODE *assignable_gen(struct parser_params*,ID,NODE*);
00485 #define assignable(id,node) assignable_gen(parser, (id), (node))
00486 
00487 static NODE *aryset_gen(struct parser_params*,NODE*,NODE*);
00488 #define aryset(node1,node2) aryset_gen(parser, (node1), (node2))
00489 static NODE *attrset_gen(struct parser_params*,NODE*,ID);
00490 #define attrset(node,id) attrset_gen(parser, (node), (id))
00491 
00492 static void rb_backref_error_gen(struct parser_params*,NODE*);
00493 #define rb_backref_error(n) rb_backref_error_gen(parser,(n))
00494 static NODE *node_assign_gen(struct parser_params*,NODE*,NODE*);
00495 #define node_assign(node1, node2) node_assign_gen(parser, (node1), (node2))
00496 
00497 static NODE *new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
00498 static NODE *new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs);
00499 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (attr), (op), (rhs))
00500 static NODE *new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs);
00501 #define new_const_op_assign(lhs, op, rhs) new_const_op_assign_gen(parser, (lhs), (op), (rhs))
00502 
00503 static NODE *match_op_gen(struct parser_params*,NODE*,NODE*);
00504 #define match_op(node1,node2) match_op_gen(parser, (node1), (node2))
00505 
00506 static ID  *local_tbl_gen(struct parser_params*);
00507 #define local_tbl() local_tbl_gen(parser)
00508 
00509 static void fixup_nodes(NODE **);
00510 
00511 static VALUE reg_compile_gen(struct parser_params*, VALUE, int);
00512 #define reg_compile(str,options) reg_compile_gen(parser, (str), (options))
00513 static void reg_fragment_setenc_gen(struct parser_params*, VALUE, int);
00514 #define reg_fragment_setenc(str,options) reg_fragment_setenc_gen(parser, (str), (options))
00515 static int reg_fragment_check_gen(struct parser_params*, VALUE, int);
00516 #define reg_fragment_check(str,options) reg_fragment_check_gen(parser, (str), (options))
00517 static NODE *reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match);
00518 #define reg_named_capture_assign(regexp,match) reg_named_capture_assign_gen(parser,(regexp),(match))
00519 
00520 #define get_id(id) (id)
00521 #define get_value(val) (val)
00522 #else
00523 #define value_expr(node) ((void)(node))
00524 #define remove_begin(node) (node)
00525 #define rb_dvar_defined(id) 0
00526 #define rb_local_defined(id) 0
00527 static ID ripper_get_id(VALUE);
00528 #define get_id(id) ripper_get_id(id)
00529 static VALUE ripper_get_value(VALUE);
00530 #define get_value(val) ripper_get_value(val)
00531 static VALUE assignable_gen(struct parser_params*,VALUE);
00532 #define assignable(lhs,node) assignable_gen(parser, (lhs))
00533 static int id_is_var_gen(struct parser_params *parser, ID id);
00534 #define id_is_var(id) id_is_var_gen(parser, (id))
00535 
00536 #define node_assign(node1, node2) dispatch2(assign, (node1), (node2))
00537 
00538 static VALUE new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs);
00539 static VALUE new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs);
00540 #define new_attr_op_assign(lhs, type, attr, op, rhs) new_attr_op_assign_gen(parser, (lhs), (type), (attr), (op), (rhs))
00541 
00542 #endif /* !RIPPER */
00543 
00544 #define new_op_assign(lhs, op, rhs) new_op_assign_gen(parser, (lhs), (op), (rhs))
00545 
00546 static ID formal_argument_gen(struct parser_params*, ID);
00547 #define formal_argument(id) formal_argument_gen(parser, (id))
00548 static ID shadowing_lvar_gen(struct parser_params*,ID);
00549 #define shadowing_lvar(name) shadowing_lvar_gen(parser, (name))
00550 static void new_bv_gen(struct parser_params*,ID);
00551 #define new_bv(id) new_bv_gen(parser, (id))
00552 
00553 static void local_push_gen(struct parser_params*,int);
00554 #define local_push(top) local_push_gen(parser,(top))
00555 static void local_pop_gen(struct parser_params*);
00556 #define local_pop() local_pop_gen(parser)
00557 static int local_var_gen(struct parser_params*, ID);
00558 #define local_var(id) local_var_gen(parser, (id))
00559 static int arg_var_gen(struct parser_params*, ID);
00560 #define arg_var(id) arg_var_gen(parser, (id))
00561 static int  local_id_gen(struct parser_params*, ID);
00562 #define local_id(id) local_id_gen(parser, (id))
00563 static ID   internal_id_gen(struct parser_params*);
00564 #define internal_id() internal_id_gen(parser)
00565 
00566 static const struct vtable *dyna_push_gen(struct parser_params *);
00567 #define dyna_push() dyna_push_gen(parser)
00568 static void dyna_pop_gen(struct parser_params*, const struct vtable *);
00569 #define dyna_pop(node) dyna_pop_gen(parser, (node))
00570 static int dyna_in_block_gen(struct parser_params*);
00571 #define dyna_in_block() dyna_in_block_gen(parser)
00572 #define dyna_var(id) local_var(id)
00573 static int dvar_defined_gen(struct parser_params*,ID,int);
00574 #define dvar_defined(id) dvar_defined_gen(parser, (id), 0)
00575 #define dvar_defined_get(id) dvar_defined_gen(parser, (id), 1)
00576 static int dvar_curr_gen(struct parser_params*,ID);
00577 #define dvar_curr(id) dvar_curr_gen(parser, (id))
00578 
00579 static int lvar_defined_gen(struct parser_params*, ID);
00580 #define lvar_defined(id) lvar_defined_gen(parser, (id))
00581 
00582 #define RE_OPTION_ONCE (1<<16)
00583 #define RE_OPTION_ENCODING_SHIFT 8
00584 #define RE_OPTION_ENCODING(e) (((e)&0xff)<<RE_OPTION_ENCODING_SHIFT)
00585 #define RE_OPTION_ENCODING_IDX(o) (((o)>>RE_OPTION_ENCODING_SHIFT)&0xff)
00586 #define RE_OPTION_ENCODING_NONE(o) ((o)&RE_OPTION_ARG_ENCODING_NONE)
00587 #define RE_OPTION_MASK  0xff
00588 #define RE_OPTION_ARG_ENCODING_NONE 32
00589 
00590 #define NODE_STRTERM NODE_ZARRAY        /* nothing to gc */
00591 #define NODE_HEREDOC NODE_ARRAY         /* 1, 3 to gc */
00592 #define SIGN_EXTEND(x,n) (((1<<(n)-1)^((x)&~(~0<<(n))))-(1<<(n)-1))
00593 #define nd_func u1.id
00594 #if SIZEOF_SHORT == 2
00595 #define nd_term(node) ((signed short)(node)->u2.id)
00596 #else
00597 #define nd_term(node) SIGN_EXTEND((node)->u2.id, CHAR_BIT*2)
00598 #endif
00599 #define nd_paren(node) (char)((node)->u2.id >> CHAR_BIT*2)
00600 #define nd_nest u3.cnt
00601 
00602 /****** Ripper *******/
00603 
00604 #ifdef RIPPER
00605 #define RIPPER_VERSION "0.1.0"
00606 
00607 #include "eventids1.c"
00608 #include "eventids2.c"
00609 
00610 static VALUE ripper_dispatch0(struct parser_params*,ID);
00611 static VALUE ripper_dispatch1(struct parser_params*,ID,VALUE);
00612 static VALUE ripper_dispatch2(struct parser_params*,ID,VALUE,VALUE);
00613 static VALUE ripper_dispatch3(struct parser_params*,ID,VALUE,VALUE,VALUE);
00614 static VALUE ripper_dispatch4(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE);
00615 static VALUE ripper_dispatch5(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE);
00616 static VALUE ripper_dispatch7(struct parser_params*,ID,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE,VALUE);
00617 
00618 #define dispatch0(n)            ripper_dispatch0(parser, TOKEN_PASTE(ripper_id_, n))
00619 #define dispatch1(n,a)          ripper_dispatch1(parser, TOKEN_PASTE(ripper_id_, n), (a))
00620 #define dispatch2(n,a,b)        ripper_dispatch2(parser, TOKEN_PASTE(ripper_id_, n), (a), (b))
00621 #define dispatch3(n,a,b,c)      ripper_dispatch3(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c))
00622 #define dispatch4(n,a,b,c,d)    ripper_dispatch4(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d))
00623 #define dispatch5(n,a,b,c,d,e)  ripper_dispatch5(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e))
00624 #define dispatch7(n,a,b,c,d,e,f,g) ripper_dispatch7(parser, TOKEN_PASTE(ripper_id_, n), (a), (b), (c), (d), (e), (f), (g))
00625 
00626 #define yyparse ripper_yyparse
00627 
00628 #define ripper_intern(s) ID2SYM(rb_intern(s))
00629 static VALUE ripper_id2sym(ID);
00630 #ifdef __GNUC__
00631 #define ripper_id2sym(id) ((id) < 256 && rb_ispunct(id) ? \
00632                            ID2SYM(id) : ripper_id2sym(id))
00633 #endif
00634 
00635 #define arg_new() dispatch0(args_new)
00636 #define arg_add(l,a) dispatch2(args_add, (l), (a))
00637 #define arg_add_star(l,a) dispatch2(args_add_star, (l), (a))
00638 #define arg_add_block(l,b) dispatch2(args_add_block, (l), (b))
00639 #define arg_add_optblock(l,b) ((b)==Qundef? (l) : dispatch2(args_add_block, (l), (b)))
00640 #define bare_assoc(v) dispatch1(bare_assoc_hash, (v))
00641 #define arg_add_assocs(l,b) arg_add((l), bare_assoc(b))
00642 
00643 #define args2mrhs(a) dispatch1(mrhs_new_from_args, (a))
00644 #define mrhs_new() dispatch0(mrhs_new)
00645 #define mrhs_add(l,a) dispatch2(mrhs_add, (l), (a))
00646 #define mrhs_add_star(l,a) dispatch2(mrhs_add_star, (l), (a))
00647 
00648 #define mlhs_new() dispatch0(mlhs_new)
00649 #define mlhs_add(l,a) dispatch2(mlhs_add, (l), (a))
00650 #define mlhs_add_star(l,a) dispatch2(mlhs_add_star, (l), (a))
00651 
00652 #define params_new(pars, opts, rest, pars2, kws, kwrest, blk) \
00653         dispatch7(params, (pars), (opts), (rest), (pars2), (kws), (kwrest), (blk))
00654 
00655 #define blockvar_new(p,v) dispatch2(block_var, (p), (v))
00656 #define blockvar_add_star(l,a) dispatch2(block_var_add_star, (l), (a))
00657 #define blockvar_add_block(l,a) dispatch2(block_var_add_block, (l), (a))
00658 
00659 #define method_optarg(m,a) ((a)==Qundef ? (m) : dispatch2(method_add_arg,(m),(a)))
00660 #define method_arg(m,a) dispatch2(method_add_arg,(m),(a))
00661 #define method_add_block(m,b) dispatch2(method_add_block, (m), (b))
00662 
00663 #define escape_Qundef(x) ((x)==Qundef ? Qnil : (x))
00664 
00665 static inline VALUE
00666 new_args_gen(struct parser_params *parser, VALUE f, VALUE o, VALUE r, VALUE p, VALUE tail)
00667 {
00668     NODE *t = (NODE *)tail;
00669     VALUE k = t->u1.value, kr = t->u2.value, b = t->u3.value;
00670     return params_new(f, o, r, p, k, kr, escape_Qundef(b));
00671 }
00672 #define new_args(f,o,r,p,t) new_args_gen(parser, (f),(o),(r),(p),(t))
00673 
00674 static inline VALUE
00675 new_args_tail_gen(struct parser_params *parser, VALUE k, VALUE kr, VALUE b)
00676 {
00677     return (VALUE)rb_node_newnode(NODE_MEMO, k, kr, b);
00678 }
00679 #define new_args_tail(k,kr,b) new_args_tail_gen(parser, (k),(kr),(b))
00680 
00681 #define FIXME 0
00682 
00683 #endif /* RIPPER */
00684 
00685 #ifndef RIPPER
00686 # define Qnone 0
00687 # define ifndef_ripper(x) (x)
00688 #else
00689 # define Qnone Qnil
00690 # define ifndef_ripper(x)
00691 #endif
00692 
00693 #ifndef RIPPER
00694 # define rb_warn0(fmt)    rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt))
00695 # define rb_warnI(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00696 # define rb_warnS(fmt,a)  rb_compile_warn(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00697 # define rb_warn4S(file,line,fmt,a)  rb_compile_warn((file), (line), (fmt), (a))
00698 # define rb_warning0(fmt) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt))
00699 # define rb_warningS(fmt,a) rb_compile_warning(ruby_sourcefile, ruby_sourceline, (fmt), (a))
00700 #else
00701 # define rb_warn0(fmt)    ripper_warn0(parser, (fmt))
00702 # define rb_warnI(fmt,a)  ripper_warnI(parser, (fmt), (a))
00703 # define rb_warnS(fmt,a)  ripper_warnS(parser, (fmt), (a))
00704 # define rb_warn4S(file,line,fmt,a)  ripper_warnS(parser, (fmt), (a))
00705 # define rb_warning0(fmt) ripper_warning0(parser, (fmt))
00706 # define rb_warningS(fmt,a) ripper_warningS(parser, (fmt), (a))
00707 static void ripper_warn0(struct parser_params*, const char*);
00708 static void ripper_warnI(struct parser_params*, const char*, int);
00709 static void ripper_warnS(struct parser_params*, const char*, const char*);
00710 static void ripper_warning0(struct parser_params*, const char*);
00711 static void ripper_warningS(struct parser_params*, const char*, const char*);
00712 #endif
00713 
00714 #ifdef RIPPER
00715 static void ripper_compile_error(struct parser_params*, const char *fmt, ...);
00716 # define rb_compile_error ripper_compile_error
00717 # define compile_error ripper_compile_error
00718 # define PARSER_ARG parser,
00719 #else
00720 # define rb_compile_error rb_compile_error_with_enc
00721 # define compile_error parser->nerr++,rb_compile_error_with_enc
00722 # define PARSER_ARG ruby_sourcefile, ruby_sourceline, current_enc,
00723 #endif
00724 
00725 /* Older versions of Yacc set YYMAXDEPTH to a very low value by default (150,
00726    for instance).  This is too low for Ruby to parse some files, such as
00727    date/format.rb, therefore bump the value up to at least Bison's default. */
00728 #ifdef OLD_YACC
00729 #ifndef YYMAXDEPTH
00730 #define YYMAXDEPTH 10000
00731 #endif
00732 #endif
00733 
00734 #ifndef RIPPER
00735 static void token_info_push(struct parser_params*, const char *token);
00736 static void token_info_pop(struct parser_params*, const char *token);
00737 #define token_info_push(token) (RTEST(ruby_verbose) ? token_info_push(parser, (token)) : (void)0)
00738 #define token_info_pop(token) (RTEST(ruby_verbose) ? token_info_pop(parser, (token)) : (void)0)
00739 #else
00740 #define token_info_push(token) /* nothing */
00741 #define token_info_pop(token) /* nothing */
00742 #endif
00743 
00744 
00745 /* Line 268 of yacc.c  */
00746 #line 747 "parse.c"
00747 
00748 /* Enabling traces.  */
00749 #ifndef YYDEBUG
00750 # define YYDEBUG 0
00751 #endif
00752 
00753 /* Enabling verbose error messages.  */
00754 #ifdef YYERROR_VERBOSE
00755 # undef YYERROR_VERBOSE
00756 # define YYERROR_VERBOSE 1
00757 #else
00758 # define YYERROR_VERBOSE 0
00759 #endif
00760 
00761 /* Enabling the token table.  */
00762 #ifndef YYTOKEN_TABLE
00763 # define YYTOKEN_TABLE 0
00764 #endif
00765 
00766 
00767 /* Tokens.  */
00768 #ifndef YYTOKENTYPE
00769 # define YYTOKENTYPE
00770    /* Put the tokens into the symbol table, so that GDB and other debuggers
00771       know about them.  */
00772    enum yytokentype {
00773      END_OF_INPUT = 0,
00774      keyword_class = 258,
00775      keyword_module = 259,
00776      keyword_def = 260,
00777      keyword_undef = 261,
00778      keyword_begin = 262,
00779      keyword_rescue = 263,
00780      keyword_ensure = 264,
00781      keyword_end = 265,
00782      keyword_if = 266,
00783      keyword_unless = 267,
00784      keyword_then = 268,
00785      keyword_elsif = 269,
00786      keyword_else = 270,
00787      keyword_case = 271,
00788      keyword_when = 272,
00789      keyword_while = 273,
00790      keyword_until = 274,
00791      keyword_for = 275,
00792      keyword_break = 276,
00793      keyword_next = 277,
00794      keyword_redo = 278,
00795      keyword_retry = 279,
00796      keyword_in = 280,
00797      keyword_do = 281,
00798      keyword_do_cond = 282,
00799      keyword_do_block = 283,
00800      keyword_do_LAMBDA = 284,
00801      keyword_return = 285,
00802      keyword_yield = 286,
00803      keyword_super = 287,
00804      keyword_self = 288,
00805      keyword_nil = 289,
00806      keyword_true = 290,
00807      keyword_false = 291,
00808      keyword_and = 292,
00809      keyword_or = 293,
00810      keyword_not = 294,
00811      modifier_if = 295,
00812      modifier_unless = 296,
00813      modifier_while = 297,
00814      modifier_until = 298,
00815      modifier_rescue = 299,
00816      keyword_alias = 300,
00817      keyword_defined = 301,
00818      keyword_BEGIN = 302,
00819      keyword_END = 303,
00820      keyword__LINE__ = 304,
00821      keyword__FILE__ = 305,
00822      keyword__ENCODING__ = 306,
00823      tIDENTIFIER = 307,
00824      tFID = 308,
00825      tGVAR = 309,
00826      tIVAR = 310,
00827      tCONSTANT = 311,
00828      tCVAR = 312,
00829      tLABEL = 313,
00830      tINTEGER = 314,
00831      tFLOAT = 315,
00832      tSTRING_CONTENT = 316,
00833      tCHAR = 317,
00834      tNTH_REF = 318,
00835      tBACK_REF = 319,
00836      tREGEXP_END = 320,
00837      tUPLUS = 130,
00838      tUMINUS = 131,
00839      tPOW = 132,
00840      tCMP = 134,
00841      tEQ = 139,
00842      tEQQ = 140,
00843      tNEQ = 141,
00844      tGEQ = 138,
00845      tLEQ = 137,
00846      tANDOP = 321,
00847      tOROP = 322,
00848      tMATCH = 142,
00849      tNMATCH = 143,
00850      tDOT2 = 128,
00851      tDOT3 = 129,
00852      tAREF = 144,
00853      tASET = 145,
00854      tLSHFT = 135,
00855      tRSHFT = 136,
00856      tCOLON2 = 323,
00857      tCOLON3 = 324,
00858      tOP_ASGN = 325,
00859      tASSOC = 326,
00860      tLPAREN = 327,
00861      tLPAREN_ARG = 328,
00862      tRPAREN = 329,
00863      tLBRACK = 330,
00864      tLBRACE = 331,
00865      tLBRACE_ARG = 332,
00866      tSTAR = 333,
00867      tDSTAR = 334,
00868      tAMPER = 335,
00869      tLAMBDA = 336,
00870      tSYMBEG = 337,
00871      tSTRING_BEG = 338,
00872      tXSTRING_BEG = 339,
00873      tREGEXP_BEG = 340,
00874      tWORDS_BEG = 341,
00875      tQWORDS_BEG = 342,
00876      tSYMBOLS_BEG = 343,
00877      tQSYMBOLS_BEG = 344,
00878      tSTRING_DBEG = 345,
00879      tSTRING_DEND = 346,
00880      tSTRING_DVAR = 347,
00881      tSTRING_END = 348,
00882      tLAMBEG = 349,
00883      tLOWEST = 350,
00884      tUMINUS_NUM = 351,
00885      tLAST_TOKEN = 352
00886    };
00887 #endif
00888 
00889 
00890 
00891 #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
00892 typedef union YYSTYPE
00893 {
00894 
00895 /* Line 293 of yacc.c  */
00896 #line 691 "parse.y"
00897 
00898     VALUE val;
00899     NODE *node;
00900     ID id;
00901     int num;
00902     const struct vtable *vars;
00903 
00904 
00905 
00906 /* Line 293 of yacc.c  */
00907 #line 908 "parse.c"
00908 } YYSTYPE;
00909 # define YYSTYPE_IS_TRIVIAL 1
00910 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
00911 # define YYSTYPE_IS_DECLARED 1
00912 #endif
00913 
00914 
00915 /* Copy the second part of user declarations.  */
00916 
00917 
00918 /* Line 343 of yacc.c  */
00919 #line 920 "parse.c"
00920 
00921 #ifdef short
00922 # undef short
00923 #endif
00924 
00925 #ifdef YYTYPE_UINT8
00926 typedef YYTYPE_UINT8 yytype_uint8;
00927 #else
00928 typedef unsigned char yytype_uint8;
00929 #endif
00930 
00931 #ifdef YYTYPE_INT8
00932 typedef YYTYPE_INT8 yytype_int8;
00933 #elif (defined __STDC__ || defined __C99__FUNC__ \
00934      || defined __cplusplus || defined _MSC_VER)
00935 typedef signed char yytype_int8;
00936 #else
00937 typedef short int yytype_int8;
00938 #endif
00939 
00940 #ifdef YYTYPE_UINT16
00941 typedef YYTYPE_UINT16 yytype_uint16;
00942 #else
00943 typedef unsigned short int yytype_uint16;
00944 #endif
00945 
00946 #ifdef YYTYPE_INT16
00947 typedef YYTYPE_INT16 yytype_int16;
00948 #else
00949 typedef short int yytype_int16;
00950 #endif
00951 
00952 #ifndef YYSIZE_T
00953 # ifdef __SIZE_TYPE__
00954 #  define YYSIZE_T __SIZE_TYPE__
00955 # elif defined size_t
00956 #  define YYSIZE_T size_t
00957 # elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
00958      || defined __cplusplus || defined _MSC_VER)
00959 #  include <stddef.h> /* INFRINGES ON USER NAME SPACE */
00960 #  define YYSIZE_T size_t
00961 # else
00962 #  define YYSIZE_T unsigned int
00963 # endif
00964 #endif
00965 
00966 #define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
00967 
00968 #ifndef YY_
00969 # if defined YYENABLE_NLS && YYENABLE_NLS
00970 #  if ENABLE_NLS
00971 #   include <libintl.h> /* INFRINGES ON USER NAME SPACE */
00972 #   define YY_(msgid) dgettext ("bison-runtime", msgid)
00973 #  endif
00974 # endif
00975 # ifndef YY_
00976 #  define YY_(msgid) msgid
00977 # endif
00978 #endif
00979 
00980 /* Suppress unused-variable warnings by "using" E.  */
00981 #if ! defined lint || defined __GNUC__
00982 # define YYUSE(e) ((void) (e))
00983 #else
00984 # define YYUSE(e) /* empty */
00985 #endif
00986 
00987 /* Identity function, used to suppress warnings about constant conditions.  */
00988 #ifndef lint
00989 # define YYID(n) (n)
00990 #else
00991 #if (defined __STDC__ || defined __C99__FUNC__ \
00992      || defined __cplusplus || defined _MSC_VER)
00993 static int
00994 YYID (int yyi)
00995 #else
00996 static int
00997 YYID (yyi)
00998     int yyi;
00999 #endif
01000 {
01001   return yyi;
01002 }
01003 #endif
01004 
01005 #if ! defined yyoverflow || YYERROR_VERBOSE
01006 
01007 /* The parser invokes alloca or malloc; define the necessary symbols.  */
01008 
01009 # ifdef YYSTACK_USE_ALLOCA
01010 #  if YYSTACK_USE_ALLOCA
01011 #   ifdef __GNUC__
01012 #    define YYSTACK_ALLOC __builtin_alloca
01013 #   elif defined __BUILTIN_VA_ARG_INCR
01014 #    include <alloca.h> /* INFRINGES ON USER NAME SPACE */
01015 #   elif defined _AIX
01016 #    define YYSTACK_ALLOC __alloca
01017 #   elif defined _MSC_VER
01018 #    include <malloc.h> /* INFRINGES ON USER NAME SPACE */
01019 #    define alloca _alloca
01020 #   else
01021 #    define YYSTACK_ALLOC alloca
01022 #    if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01023      || defined __cplusplus || defined _MSC_VER)
01024 #     include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
01025 #     ifndef EXIT_SUCCESS
01026 #      define EXIT_SUCCESS 0
01027 #     endif
01028 #    endif
01029 #   endif
01030 #  endif
01031 # endif
01032 
01033 # ifdef YYSTACK_ALLOC
01034    /* Pacify GCC's `empty if-body' warning.  */
01035 #  define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
01036 #  ifndef YYSTACK_ALLOC_MAXIMUM
01037     /* The OS might guarantee only one guard page at the bottom of the stack,
01038        and a page size can be as small as 4096 bytes.  So we cannot safely
01039        invoke alloca (N) if N exceeds 4096.  Use a slightly smaller number
01040        to allow for a few compiler-allocated temporary stack slots.  */
01041 #   define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
01042 #  endif
01043 # else
01044 #  define YYSTACK_ALLOC YYMALLOC
01045 #  define YYSTACK_FREE YYFREE
01046 #  ifndef YYSTACK_ALLOC_MAXIMUM
01047 #   define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
01048 #  endif
01049 #  if (defined __cplusplus && ! defined EXIT_SUCCESS \
01050        && ! ((defined YYMALLOC || defined malloc) \
01051              && (defined YYFREE || defined free)))
01052 #   include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
01053 #   ifndef EXIT_SUCCESS
01054 #    define EXIT_SUCCESS 0
01055 #   endif
01056 #  endif
01057 #  ifndef YYMALLOC
01058 #   define YYMALLOC malloc
01059 #   if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01060      || defined __cplusplus || defined _MSC_VER)
01061 void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
01062 #   endif
01063 #  endif
01064 #  ifndef YYFREE
01065 #   define YYFREE free
01066 #   if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
01067      || defined __cplusplus || defined _MSC_VER)
01068 void free (void *); /* INFRINGES ON USER NAME SPACE */
01069 #   endif
01070 #  endif
01071 # endif
01072 #endif /* ! defined yyoverflow || YYERROR_VERBOSE */
01073 
01074 
01075 #if (! defined yyoverflow \
01076      && (! defined __cplusplus \
01077          || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
01078 
01079 /* A type that is properly aligned for any stack member.  */
01080 union yyalloc
01081 {
01082   yytype_int16 yyss_alloc;
01083   YYSTYPE yyvs_alloc;
01084 };
01085 
01086 /* The size of the maximum gap between one aligned stack and the next.  */
01087 # define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
01088 
01089 /* The size of an array large to enough to hold all stacks, each with
01090    N elements.  */
01091 # define YYSTACK_BYTES(N) \
01092      ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
01093       + YYSTACK_GAP_MAXIMUM)
01094 
01095 # define YYCOPY_NEEDED 1
01096 
01097 /* Relocate STACK from its old location to the new one.  The
01098    local variables YYSIZE and YYSTACKSIZE give the old and new number of
01099    elements in the stack, and YYPTR gives the new location of the
01100    stack.  Advance YYPTR to a properly aligned location for the next
01101    stack.  */
01102 # define YYSTACK_RELOCATE(Stack_alloc, Stack)                           \
01103     do                                                                  \
01104       {                                                                 \
01105         YYSIZE_T yynewbytes;                                            \
01106         YYCOPY (&yyptr->Stack_alloc, Stack, yysize);                    \
01107         Stack = &yyptr->Stack_alloc;                                    \
01108         yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
01109         yyptr += yynewbytes / sizeof (*yyptr);                          \
01110       }                                                                 \
01111     while (YYID (0))
01112 
01113 #endif
01114 
01115 #if defined YYCOPY_NEEDED && YYCOPY_NEEDED
01116 /* Copy COUNT objects from FROM to TO.  The source and destination do
01117    not overlap.  */
01118 # ifndef YYCOPY
01119 #  if defined __GNUC__ && 1 < __GNUC__
01120 #   define YYCOPY(To, From, Count) \
01121       __builtin_memcpy (To, From, (Count) * sizeof (*(From)))
01122 #  else
01123 #   define YYCOPY(To, From, Count)              \
01124       do                                        \
01125         {                                       \
01126           YYSIZE_T yyi;                         \
01127           for (yyi = 0; yyi < (Count); yyi++)   \
01128             (To)[yyi] = (From)[yyi];            \
01129         }                                       \
01130       while (YYID (0))
01131 #  endif
01132 # endif
01133 #endif /* !YYCOPY_NEEDED */
01134 
01135 /* YYFINAL -- State number of the termination state.  */
01136 #define YYFINAL  3
01137 /* YYLAST -- Last index in YYTABLE.  */
01138 #define YYLAST   10700
01139 
01140 /* YYNTOKENS -- Number of terminals.  */
01141 #define YYNTOKENS  142
01142 /* YYNNTS -- Number of nonterminals.  */
01143 #define YYNNTS  199
01144 /* YYNRULES -- Number of rules.  */
01145 #define YYNRULES  620
01146 /* YYNRULES -- Number of states.  */
01147 #define YYNSTATES  1057
01148 
01149 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
01150 #define YYUNDEFTOK  2
01151 #define YYMAXUTOK   352
01152 
01153 #define YYTRANSLATE(YYX)                                                \
01154   ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
01155 
01156 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
01157 static const yytype_uint8 yytranslate[] =
01158 {
01159        0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01160      141,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01161        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01162        2,     2,   140,   127,     2,     2,     2,   125,   120,     2,
01163      136,   137,   123,   121,   134,   122,   133,   124,     2,     2,
01164        2,     2,     2,     2,     2,     2,     2,     2,   115,   139,
01165      117,   113,   116,   114,     2,     2,     2,     2,     2,     2,
01166        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01167        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01168        2,   132,     2,   138,   119,     2,   135,     2,     2,     2,
01169        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01170        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01171        2,     2,     2,   130,   118,   131,   128,     2,    79,    80,
01172       66,    67,    68,     2,    69,    83,    84,    74,    73,    70,
01173       71,    72,    77,    78,    81,    82,     2,     2,     2,     2,
01174        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01175        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01176        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01177        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01178        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01179        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01180        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01181        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01182        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01183        2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
01184        2,     2,     2,     2,     2,     2,     1,     2,     3,     4,
01185        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
01186       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
01187       25,    26,    27,    28,    29,    30,    31,    32,    33,    34,
01188       35,    36,    37,    38,    39,    40,    41,    42,    43,    44,
01189       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
01190       55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
01191       65,    75,    76,    85,    86,    87,    88,    89,    90,    91,
01192       92,    93,    94,    95,    96,    97,    98,    99,   100,   101,
01193      102,   103,   104,   105,   106,   107,   108,   109,   110,   111,
01194      112,   126,   129
01195 };
01196 
01197 #if YYDEBUG
01198 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
01199    YYRHS.  */
01200 static const yytype_uint16 yyprhs[] =
01201 {
01202        0,     0,     3,     4,     7,    10,    12,    14,    18,    21,
01203       23,    24,    30,    35,    38,    40,    42,    46,    49,    51,
01204       52,    58,    59,    64,    68,    72,    76,    79,    83,    87,
01205       91,    95,    99,   104,   106,   110,   114,   121,   127,   133,
01206      139,   145,   149,   153,   157,   161,   163,   167,   171,   173,
01207      177,   181,   185,   188,   190,   192,   194,   196,   198,   203,
01208      204,   210,   212,   215,   219,   224,   230,   235,   241,   244,
01209      247,   250,   253,   256,   258,   262,   264,   268,   270,   273,
01210      277,   283,   286,   291,   294,   299,   301,   305,   307,   311,
01211      314,   318,   320,   324,   326,   328,   333,   337,   341,   345,
01212      349,   352,   354,   356,   358,   363,   367,   371,   375,   379,
01213      382,   384,   386,   388,   391,   393,   397,   399,   401,   403,
01214      405,   407,   409,   411,   413,   415,   417,   418,   423,   425,
01215      427,   429,   431,   433,   435,   437,   439,   441,   443,   445,
01216      447,   449,   451,   453,   455,   457,   459,   461,   463,   465,
01217      467,   469,   471,   473,   475,   477,   479,   481,   483,   485,
01218      487,   489,   491,   493,   495,   497,   499,   501,   503,   505,
01219      507,   509,   511,   513,   515,   517,   519,   521,   523,   525,
01220      527,   529,   531,   533,   535,   537,   539,   541,   543,   545,
01221      547,   549,   551,   553,   555,   557,   559,   561,   563,   565,
01222      569,   575,   579,   585,   592,   598,   604,   610,   616,   621,
01223      625,   629,   633,   637,   641,   645,   649,   653,   657,   662,
01224      667,   670,   673,   677,   681,   685,   689,   693,   697,   701,
01225      705,   709,   713,   717,   721,   725,   728,   731,   735,   739,
01226      743,   747,   748,   753,   760,   762,   764,   766,   769,   774,
01227      777,   781,   783,   785,   787,   789,   792,   797,   800,   802,
01228      805,   808,   813,   815,   816,   819,   822,   825,   827,   829,
01229      832,   836,   841,   845,   850,   853,   855,   857,   859,   861,
01230      863,   865,   867,   869,   871,   873,   875,   876,   881,   882,
01231      886,   887,   888,   894,   898,   902,   905,   909,   913,   915,
01232      920,   924,   926,   927,   934,   939,   943,   946,   948,   951,
01233      954,   961,   968,   969,   970,   978,   979,   980,   988,   994,
01234      999,  1000,  1001,  1011,  1012,  1019,  1020,  1021,  1030,  1031,
01235     1037,  1038,  1045,  1046,  1047,  1057,  1059,  1061,  1063,  1065,
01236     1067,  1069,  1071,  1073,  1075,  1077,  1079,  1081,  1083,  1085,
01237     1087,  1089,  1091,  1093,  1096,  1098,  1100,  1102,  1108,  1110,
01238     1113,  1115,  1117,  1119,  1123,  1125,  1129,  1131,  1136,  1143,
01239     1147,  1153,  1156,  1161,  1163,  1167,  1172,  1175,  1178,  1180,
01240     1183,  1184,  1191,  1200,  1205,  1212,  1217,  1220,  1227,  1230,
01241     1235,  1242,  1245,  1250,  1253,  1258,  1260,  1262,  1264,  1268,
01242     1270,  1275,  1277,  1282,  1284,  1288,  1290,  1292,  1293,  1294,
01243     1295,  1301,  1306,  1308,  1312,  1316,  1317,  1323,  1326,  1331,
01244     1337,  1343,  1346,  1347,  1353,  1354,  1360,  1364,  1365,  1370,
01245     1371,  1376,  1379,  1381,  1386,  1387,  1393,  1394,  1400,  1406,
01246     1408,  1410,  1417,  1419,  1421,  1423,  1425,  1428,  1430,  1433,
01247     1435,  1437,  1439,  1441,  1443,  1445,  1447,  1450,  1454,  1458,
01248     1462,  1466,  1470,  1471,  1475,  1477,  1480,  1484,  1488,  1489,
01249     1493,  1497,  1501,  1505,  1509,  1510,  1514,  1515,  1519,  1520,
01250     1523,  1524,  1527,  1528,  1531,  1533,  1534,  1538,  1539,  1540,
01251     1541,  1548,  1550,  1552,  1554,  1556,  1559,  1561,  1563,  1565,
01252     1567,  1571,  1573,  1575,  1578,  1581,  1583,  1585,  1587,  1589,
01253     1591,  1593,  1595,  1597,  1599,  1601,  1603,  1605,  1607,  1609,
01254     1611,  1613,  1615,  1617,  1619,  1620,  1625,  1628,  1632,  1635,
01255     1640,  1643,  1646,  1648,  1651,  1652,  1659,  1668,  1673,  1680,
01256     1685,  1692,  1695,  1700,  1707,  1710,  1715,  1718,  1723,  1725,
01257     1726,  1728,  1730,  1732,  1734,  1736,  1738,  1740,  1744,  1746,
01258     1750,  1753,  1756,  1758,  1762,  1764,  1768,  1770,  1772,  1775,
01259     1777,  1781,  1785,  1787,  1791,  1793,  1797,  1799,  1801,  1804,
01260     1806,  1808,  1810,  1813,  1816,  1818,  1820,  1821,  1826,  1828,
01261     1831,  1833,  1837,  1841,  1844,  1847,  1849,  1851,  1853,  1855,
01262     1857,  1859,  1861,  1863,  1865,  1867,  1869,  1871,  1872,  1874,
01263     1875,  1877,  1880,  1883,  1884,  1886,  1888,  1890,  1892,  1894,
01264     1897
01265 };
01266 
01267 /* YYRHS -- A `-1'-separated list of the rules' RHS.  */
01268 static const yytype_int16 yyrhs[] =
01269 {
01270      143,     0,    -1,    -1,   144,   145,    -1,   146,   333,    -1,
01271      340,    -1,   147,    -1,   146,   339,   147,    -1,     1,   147,
01272       -1,   154,    -1,    -1,    47,   148,   130,   145,   131,    -1,
01273      150,   262,   230,   265,    -1,   151,   333,    -1,   340,    -1,
01274      152,    -1,   151,   339,   152,    -1,     1,   154,    -1,   154,
01275       -1,    -1,    47,   153,   130,   145,   131,    -1,    -1,    45,
01276      177,   155,   177,    -1,    45,    54,    54,    -1,    45,    54,
01277       64,    -1,    45,    54,    63,    -1,     6,   178,    -1,   154,
01278       40,   158,    -1,   154,    41,   158,    -1,   154,    42,   158,
01279       -1,   154,    43,   158,    -1,   154,    44,   154,    -1,    48,
01280      130,   150,   131,    -1,   156,    -1,   165,   113,   159,    -1,
01281      297,    87,   159,    -1,   215,   132,   188,   336,    87,   159,
01282       -1,   215,   133,    52,    87,   159,    -1,   215,   133,    56,
01283       87,   159,    -1,   215,    85,    56,    87,   159,    -1,   215,
01284       85,    52,    87,   159,    -1,   298,    87,   159,    -1,   172,
01285      113,   195,    -1,   165,   113,   184,    -1,   165,   113,   195,
01286       -1,   157,    -1,   172,   113,   159,    -1,   172,   113,   156,
01287       -1,   159,    -1,   157,    37,   157,    -1,   157,    38,   157,
01288       -1,    39,   334,   157,    -1,   127,   159,    -1,   182,    -1,
01289      157,    -1,   164,    -1,   160,    -1,   251,    -1,   251,   332,
01290      330,   190,    -1,    -1,    94,   162,   238,   150,   131,    -1,
01291      329,    -1,   163,   190,    -1,   163,   190,   161,    -1,   215,
01292      133,   330,   190,    -1,   215,   133,   330,   190,   161,    -1,
01293      215,    85,   330,   190,    -1,   215,    85,   330,   190,   161,
01294       -1,    32,   190,    -1,    31,   190,    -1,    30,   189,    -1,
01295       21,   189,    -1,    22,   189,    -1,   167,    -1,    89,   166,
01296      335,    -1,   167,    -1,    89,   166,   335,    -1,   169,    -1,
01297      169,   168,    -1,   169,    95,   171,    -1,   169,    95,   171,
01298      134,   170,    -1,   169,    95,    -1,   169,    95,   134,   170,
01299       -1,    95,   171,    -1,    95,   171,   134,   170,    -1,    95,
01300       -1,    95,   134,   170,    -1,   171,    -1,    89,   166,   335,
01301       -1,   168,   134,    -1,   169,   168,   134,    -1,   168,    -1,
01302      170,   134,   168,    -1,   294,    -1,   295,    -1,   215,   132,
01303      188,   336,    -1,   215,   133,    52,    -1,   215,    85,    52,
01304       -1,   215,   133,    56,    -1,   215,    85,    56,    -1,    86,
01305       56,    -1,   298,    -1,   294,    -1,   295,    -1,   215,   132,
01306      188,   336,    -1,   215,   133,    52,    -1,   215,    85,    52,
01307       -1,   215,   133,    56,    -1,   215,    85,    56,    -1,    86,
01308       56,    -1,   298,    -1,    52,    -1,    56,    -1,    86,   173,
01309       -1,   173,    -1,   215,    85,   173,    -1,    52,    -1,    56,
01310       -1,    53,    -1,   180,    -1,   181,    -1,   175,    -1,   290,
01311       -1,   176,    -1,   292,    -1,   177,    -1,    -1,   178,   134,
01312      179,   177,    -1,   118,    -1,   119,    -1,   120,    -1,    69,
01313       -1,    70,    -1,    71,    -1,    77,    -1,    78,    -1,   116,
01314       -1,    73,    -1,   117,    -1,    74,    -1,    72,    -1,    83,
01315       -1,    84,    -1,   121,    -1,   122,    -1,   123,    -1,    95,
01316       -1,   124,    -1,   125,    -1,    68,    -1,    96,    -1,   127,
01317       -1,   128,    -1,    66,    -1,    67,    -1,    81,    -1,    82,
01318       -1,   135,    -1,    49,    -1,    50,    -1,    51,    -1,    47,
01319       -1,    48,    -1,    45,    -1,    37,    -1,     7,    -1,    21,
01320       -1,    16,    -1,     3,    -1,     5,    -1,    46,    -1,    26,
01321       -1,    15,    -1,    14,    -1,    10,    -1,     9,    -1,    36,
01322       -1,    20,    -1,    25,    -1,     4,    -1,    22,    -1,    34,
01323       -1,    39,    -1,    38,    -1,    23,    -1,     8,    -1,    24,
01324       -1,    30,    -1,    33,    -1,    32,    -1,    13,    -1,    35,
01325       -1,     6,    -1,    17,    -1,    31,    -1,    11,    -1,    12,
01326       -1,    18,    -1,    19,    -1,   172,   113,   182,    -1,   172,
01327      113,   182,    44,   182,    -1,   297,    87,   182,    -1,   297,
01328       87,   182,    44,   182,    -1,   215,   132,   188,   336,    87,
01329      182,    -1,   215,   133,    52,    87,   182,    -1,   215,   133,
01330       56,    87,   182,    -1,   215,    85,    52,    87,   182,    -1,
01331      215,    85,    56,    87,   182,    -1,    86,    56,    87,   182,
01332       -1,   298,    87,   182,    -1,   182,    79,   182,    -1,   182,
01333       80,   182,    -1,   182,   121,   182,    -1,   182,   122,   182,
01334       -1,   182,   123,   182,    -1,   182,   124,   182,    -1,   182,
01335      125,   182,    -1,   182,    68,   182,    -1,   126,    59,    68,
01336      182,    -1,   126,    60,    68,   182,    -1,    66,   182,    -1,
01337       67,   182,    -1,   182,   118,   182,    -1,   182,   119,   182,
01338       -1,   182,   120,   182,    -1,   182,    69,   182,    -1,   182,
01339      116,   182,    -1,   182,    73,   182,    -1,   182,   117,   182,
01340       -1,   182,    74,   182,    -1,   182,    70,   182,    -1,   182,
01341       71,   182,    -1,   182,    72,   182,    -1,   182,    77,   182,
01342       -1,   182,    78,   182,    -1,   127,   182,    -1,   128,   182,
01343       -1,   182,    83,   182,    -1,   182,    84,   182,    -1,   182,
01344       75,   182,    -1,   182,    76,   182,    -1,    -1,    46,   334,
01345      183,   182,    -1,   182,   114,   182,   334,   115,   182,    -1,
01346      196,    -1,   182,    -1,   340,    -1,   194,   337,    -1,   194,
01347      134,   327,   337,    -1,   327,   337,    -1,   136,   188,   335,
01348       -1,   340,    -1,   186,    -1,   340,    -1,   189,    -1,   194,
01349      134,    -1,   194,   134,   327,   134,    -1,   327,   134,    -1,
01350      164,    -1,   194,   193,    -1,   327,   193,    -1,   194,   134,
01351      327,   193,    -1,   192,    -1,    -1,   191,   189,    -1,    97,
01352      184,    -1,   134,   192,    -1,   340,    -1,   184,    -1,    95,
01353      184,    -1,   194,   134,   184,    -1,   194,   134,    95,   184,
01354       -1,   194,   134,   184,    -1,   194,   134,    95,   184,    -1,
01355       95,   184,    -1,   266,    -1,   267,    -1,   270,    -1,   271,
01356       -1,   272,    -1,   277,    -1,   275,    -1,   278,    -1,   296,
01357       -1,   298,    -1,    53,    -1,    -1,   216,   197,   149,   226,
01358       -1,    -1,    90,   198,   335,    -1,    -1,    -1,    90,   199,
01359      157,   200,   335,    -1,    89,   150,   137,    -1,   215,    85,
01360       56,    -1,    86,    56,    -1,    92,   185,   138,    -1,    93,
01361      326,   131,    -1,    30,    -1,    31,   136,   189,   335,    -1,
01362       31,   136,   335,    -1,    31,    -1,    -1,    46,   334,   136,
01363      201,   157,   335,    -1,    39,   136,   157,   335,    -1,    39,
01364      136,   335,    -1,   163,   257,    -1,   252,    -1,   252,   257,
01365       -1,    98,   243,    -1,   217,   158,   227,   150,   229,   226,
01366       -1,   218,   158,   227,   150,   230,   226,    -1,    -1,    -1,
01367      219,   202,   158,   228,   203,   150,   226,    -1,    -1,    -1,
01368      220,   204,   158,   228,   205,   150,   226,    -1,   221,   158,
01369      333,   260,   226,    -1,   221,   333,   260,   226,    -1,    -1,
01370       -1,   222,   231,    25,   206,   158,   228,   207,   150,   226,
01371       -1,    -1,   223,   174,   299,   208,   149,   226,    -1,    -1,
01372       -1,   223,    83,   157,   209,   338,   210,   149,   226,    -1,
01373       -1,   224,   174,   211,   149,   226,    -1,    -1,   225,   175,
01374      212,   301,   149,   226,    -1,    -1,    -1,   225,   324,   332,
01375      213,   175,   214,   301,   149,   226,    -1,    21,    -1,    22,
01376       -1,    23,    -1,    24,    -1,   196,    -1,     7,    -1,    11,
01377       -1,    12,    -1,    18,    -1,    19,    -1,    16,    -1,    20,
01378       -1,     3,    -1,     4,    -1,     5,    -1,    10,    -1,   338,
01379       -1,    13,    -1,   338,    13,    -1,   338,    -1,    27,    -1,
01380      230,    -1,    14,   158,   227,   150,   229,    -1,   340,    -1,
01381       15,   150,    -1,   172,    -1,   165,    -1,   306,    -1,    89,
01382      234,   335,    -1,   232,    -1,   233,   134,   232,    -1,   233,
01383       -1,   233,   134,    95,   306,    -1,   233,   134,    95,   306,
01384      134,   233,    -1,   233,   134,    95,    -1,   233,   134,    95,
01385      134,   233,    -1,    95,   306,    -1,    95,   306,   134,   233,
01386       -1,    95,    -1,    95,   134,   233,    -1,   311,   134,   314,
01387      323,    -1,   311,   323,    -1,   314,   323,    -1,   322,    -1,
01388      134,   235,    -1,    -1,   308,   134,   317,   134,   320,   236,
01389       -1,   308,   134,   317,   134,   320,   134,   308,   236,    -1,
01390      308,   134,   317,   236,    -1,   308,   134,   317,   134,   308,
01391      236,    -1,   308,   134,   320,   236,    -1,   308,   134,    -1,
01392      308,   134,   320,   134,   308,   236,    -1,   308,   236,    -1,
01393      317,   134,   320,   236,    -1,   317,   134,   320,   134,   308,
01394      236,    -1,   317,   236,    -1,   317,   134,   308,   236,    -1,
01395      320,   236,    -1,   320,   134,   308,   236,    -1,   235,    -1,
01396      340,    -1,   239,    -1,   118,   240,   118,    -1,    76,    -1,
01397      118,   237,   240,   118,    -1,   334,    -1,   334,   139,   241,
01398      334,    -1,   242,    -1,   241,   134,   242,    -1,    52,    -1,
01399      305,    -1,    -1,    -1,    -1,   244,   245,   247,   246,   248,
01400       -1,   136,   304,   240,   137,    -1,   304,    -1,   111,   150,
01401      131,    -1,    29,   150,    10,    -1,    -1,    28,   250,   238,
01402      150,    10,    -1,   164,   249,    -1,   251,   332,   330,   187,
01403       -1,   251,   332,   330,   187,   257,    -1,   251,   332,   330,
01404      190,   249,    -1,   163,   186,    -1,    -1,   215,   133,   330,
01405      253,   187,    -1,    -1,   215,    85,   330,   254,   186,    -1,
01406      215,    85,   331,    -1,    -1,   215,   133,   255,   186,    -1,
01407       -1,   215,    85,   256,   186,    -1,    32,   186,    -1,    32,
01408       -1,   215,   132,   188,   336,    -1,    -1,   130,   258,   238,
01409      150,   131,    -1,    -1,    26,   259,   238,   150,    10,    -1,
01410       17,   194,   227,   150,   261,    -1,   230,    -1,   260,    -1,
01411        8,   263,   264,   227,   150,   262,    -1,   340,    -1,   184,
01412       -1,   195,    -1,   340,    -1,    88,   172,    -1,   340,    -1,
01413        9,   150,    -1,   340,    -1,   293,    -1,   290,    -1,   292,
01414       -1,   268,    -1,    62,    -1,   269,    -1,   268,   269,    -1,
01415      100,   281,   110,    -1,   101,   282,   110,    -1,   102,   283,
01416       65,    -1,   103,   140,   110,    -1,   103,   273,   110,    -1,
01417       -1,   273,   274,   140,    -1,   284,    -1,   274,   284,    -1,
01418      105,   140,   110,    -1,   105,   276,   110,    -1,    -1,   276,
01419      274,   140,    -1,   104,   140,   110,    -1,   104,   279,   110,
01420       -1,   106,   140,   110,    -1,   106,   280,   110,    -1,    -1,
01421      279,    61,   140,    -1,    -1,   280,    61,   140,    -1,    -1,
01422      281,   284,    -1,    -1,   282,   284,    -1,    -1,   283,   284,
01423       -1,    61,    -1,    -1,   109,   285,   289,    -1,    -1,    -1,
01424       -1,   107,   286,   287,   288,   150,   108,    -1,    54,    -1,
01425       55,    -1,    57,    -1,   298,    -1,    99,   291,    -1,   175,
01426       -1,    55,    -1,    54,    -1,    57,    -1,    99,   282,   110,
01427       -1,    59,    -1,    60,    -1,   126,    59,    -1,   126,    60,
01428       -1,    52,    -1,    55,    -1,    54,    -1,    56,    -1,    57,
01429       -1,    34,    -1,    33,    -1,    35,    -1,    36,    -1,    50,
01430       -1,    49,    -1,    51,    -1,   294,    -1,   295,    -1,   294,
01431       -1,   295,    -1,    63,    -1,    64,    -1,   338,    -1,    -1,
01432      117,   300,   158,   338,    -1,     1,   338,    -1,   136,   304,
01433      335,    -1,   304,   338,    -1,   312,   134,   314,   323,    -1,
01434      312,   323,    -1,   314,   323,    -1,   322,    -1,   134,   302,
01435       -1,    -1,   308,   134,   318,   134,   320,   303,    -1,   308,
01436      134,   318,   134,   320,   134,   308,   303,    -1,   308,   134,
01437      318,   303,    -1,   308,   134,   318,   134,   308,   303,    -1,
01438      308,   134,   320,   303,    -1,   308,   134,   320,   134,   308,
01439      303,    -1,   308,   303,    -1,   318,   134,   320,   303,    -1,
01440      318,   134,   320,   134,   308,   303,    -1,   318,   303,    -1,
01441      318,   134,   308,   303,    -1,   320,   303,    -1,   320,   134,
01442      308,   303,    -1,   302,    -1,    -1,    56,    -1,    55,    -1,
01443       54,    -1,    57,    -1,   305,    -1,    52,    -1,   306,    -1,
01444       89,   234,   335,    -1,   307,    -1,   308,   134,   307,    -1,
01445       58,   184,    -1,    58,   215,    -1,   310,    -1,   311,   134,
01446      310,    -1,   309,    -1,   312,   134,   309,    -1,    68,    -1,
01447       96,    -1,   313,    52,    -1,   313,    -1,    52,   113,   184,
01448       -1,    52,   113,   215,    -1,   316,    -1,   317,   134,   316,
01449       -1,   315,    -1,   318,   134,   315,    -1,   123,    -1,    95,
01450       -1,   319,    52,    -1,   319,    -1,   120,    -1,    97,    -1,
01451      321,    52,    -1,   134,   322,    -1,   340,    -1,   296,    -1,
01452       -1,   136,   325,   157,   335,    -1,   340,    -1,   327,   337,
01453       -1,   328,    -1,   327,   134,   328,    -1,   184,    88,   184,
01454       -1,    58,   184,    -1,    96,   184,    -1,    52,    -1,    56,
01455       -1,    53,    -1,    52,    -1,    56,    -1,    53,    -1,   180,
01456       -1,    52,    -1,    53,    -1,   180,    -1,   133,    -1,    85,
01457       -1,    -1,   339,    -1,    -1,   141,    -1,   334,   137,    -1,
01458      334,   138,    -1,    -1,   141,    -1,   134,    -1,   139,    -1,
01459      141,    -1,   338,    -1,   339,   139,    -1,    -1
01460 };
01461 
01462 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
01463 static const yytype_uint16 yyrline[] =
01464 {
01465        0,   855,   855,   855,   886,   897,   906,   914,   922,   928,
01466      930,   929,   950,   983,   994,  1003,  1011,  1019,  1025,  1030,
01467     1029,  1050,  1050,  1058,  1066,  1077,  1087,  1095,  1104,  1113,
01468     1126,  1139,  1148,  1160,  1161,  1171,  1176,  1197,  1202,  1207,
01469     1217,  1222,  1232,  1241,  1250,  1259,  1262,  1271,  1283,  1284,
01470     1292,  1300,  1308,  1316,  1319,  1331,  1332,  1335,  1336,  1348,
01471     1347,  1369,  1379,  1388,  1401,  1410,  1422,  1431,  1443,  1452,
01472     1461,  1469,  1477,  1487,  1488,  1498,  1499,  1509,  1517,  1525,
01473     1533,  1542,  1550,  1559,  1567,  1576,  1584,  1595,  1596,  1606,
01474     1614,  1624,  1632,  1642,  1646,  1650,  1658,  1666,  1674,  1682,
01475     1694,  1704,  1716,  1725,  1734,  1742,  1750,  1758,  1766,  1779,
01476     1792,  1803,  1811,  1814,  1822,  1830,  1840,  1841,  1842,  1843,
01477     1848,  1859,  1860,  1863,  1871,  1874,  1882,  1882,  1892,  1893,
01478     1894,  1895,  1896,  1897,  1898,  1899,  1900,  1901,  1902,  1903,
01479     1904,  1905,  1906,  1907,  1908,  1909,  1910,  1911,  1912,  1913,
01480     1914,  1915,  1916,  1917,  1918,  1919,  1920,  1921,  1924,  1924,
01481     1924,  1925,  1925,  1926,  1926,  1926,  1927,  1927,  1927,  1927,
01482     1928,  1928,  1928,  1928,  1929,  1929,  1929,  1930,  1930,  1930,
01483     1930,  1931,  1931,  1931,  1931,  1932,  1932,  1932,  1932,  1933,
01484     1933,  1933,  1933,  1934,  1934,  1934,  1934,  1935,  1935,  1938,
01485     1947,  1957,  1962,  1972,  1998,  2003,  2008,  2013,  2023,  2033,
01486     2044,  2058,  2072,  2080,  2088,  2096,  2104,  2112,  2120,  2129,
01487     2138,  2146,  2154,  2162,  2170,  2178,  2186,  2194,  2202,  2210,
01488     2218,  2226,  2234,  2242,  2253,  2261,  2269,  2277,  2285,  2293,
01489     2301,  2309,  2309,  2319,  2329,  2335,  2347,  2348,  2352,  2360,
01490     2370,  2380,  2381,  2384,  2385,  2386,  2390,  2398,  2408,  2417,
01491     2425,  2435,  2444,  2453,  2453,  2465,  2475,  2479,  2485,  2493,
01492     2501,  2515,  2531,  2545,  2560,  2570,  2571,  2572,  2573,  2574,
01493     2575,  2576,  2577,  2578,  2579,  2580,  2589,  2588,  2616,  2616,
01494     2625,  2629,  2624,  2638,  2646,  2654,  2662,  2675,  2683,  2691,
01495     2699,  2707,  2715,  2715,  2725,  2733,  2741,  2751,  2752,  2762,
01496     2766,  2778,  2790,  2790,  2790,  2801,  2801,  2801,  2812,  2823,
01497     2832,  2834,  2831,  2898,  2897,  2919,  2924,  2918,  2943,  2942,
01498     2964,  2963,  2986,  2987,  2986,  3007,  3015,  3023,  3031,  3041,
01499     3053,  3059,  3065,  3071,  3077,  3083,  3089,  3095,  3101,  3107,
01500     3117,  3123,  3128,  3129,  3136,  3141,  3144,  3145,  3158,  3159,
01501     3169,  3170,  3173,  3181,  3191,  3199,  3209,  3217,  3226,  3235,
01502     3243,  3251,  3260,  3272,  3280,  3291,  3295,  3299,  3303,  3309,
01503     3314,  3319,  3323,  3327,  3331,  3335,  3339,  3347,  3351,  3355,
01504     3359,  3363,  3367,  3371,  3375,  3379,  3385,  3386,  3392,  3401,
01505     3410,  3421,  3425,  3435,  3442,  3451,  3459,  3465,  3468,  3473,
01506     3465,  3489,  3497,  3507,  3511,  3518,  3517,  3538,  3554,  3563,
01507     3575,  3589,  3599,  3598,  3615,  3614,  3630,  3639,  3638,  3656,
01508     3655,  3672,  3680,  3688,  3703,  3702,  3722,  3721,  3742,  3754,
01509     3755,  3758,  3777,  3780,  3788,  3796,  3799,  3803,  3806,  3814,
01510     3817,  3818,  3826,  3829,  3846,  3847,  3848,  3858,  3868,  3895,
01511     3960,  3969,  3980,  3987,  3997,  4005,  4015,  4024,  4035,  4042,
01512     4054,  4063,  4073,  4082,  4093,  4100,  4111,  4118,  4133,  4140,
01513     4151,  4158,  4169,  4176,  4205,  4207,  4206,  4223,  4229,  4234,
01514     4222,  4253,  4261,  4269,  4277,  4280,  4291,  4292,  4293,  4294,
01515     4297,  4308,  4309,  4310,  4318,  4328,  4329,  4330,  4331,  4332,
01516     4335,  4336,  4337,  4338,  4339,  4340,  4341,  4344,  4357,  4367,
01517     4375,  4385,  4386,  4389,  4398,  4397,  4406,  4418,  4428,  4436,
01518     4440,  4444,  4448,  4454,  4459,  4464,  4468,  4472,  4476,  4480,
01519     4484,  4488,  4492,  4496,  4500,  4504,  4508,  4512,  4516,  4521,
01520     4527,  4536,  4545,  4554,  4565,  4566,  4573,  4582,  4601,  4608,
01521     4621,  4633,  4645,  4653,  4670,  4678,  4694,  4695,  4698,  4703,
01522     4709,  4721,  4733,  4741,  4757,  4765,  4781,  4782,  4785,  4798,
01523     4809,  4810,  4813,  4830,  4834,  4844,  4854,  4854,  4883,  4884,
01524     4894,  4901,  4911,  4919,  4927,  4939,  4940,  4941,  4944,  4945,
01525     4946,  4947,  4950,  4951,  4952,  4955,  4960,  4967,  4968,  4971,
01526     4972,  4975,  4978,  4981,  4982,  4983,  4986,  4987,  4990,  4991,
01527     4995
01528 };
01529 #endif
01530 
01531 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
01532 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
01533    First, the terminals, then, starting at YYNTOKENS, nonterminals.  */
01534 static const char *const yytname[] =
01535 {
01536   "\"end-of-input\"", "error", "$undefined", "keyword_class",
01537   "keyword_module", "keyword_def", "keyword_undef", "keyword_begin",
01538   "keyword_rescue", "keyword_ensure", "keyword_end", "keyword_if",
01539   "keyword_unless", "keyword_then", "keyword_elsif", "keyword_else",
01540   "keyword_case", "keyword_when", "keyword_while", "keyword_until",
01541   "keyword_for", "keyword_break", "keyword_next", "keyword_redo",
01542   "keyword_retry", "keyword_in", "keyword_do", "keyword_do_cond",
01543   "keyword_do_block", "keyword_do_LAMBDA", "keyword_return",
01544   "keyword_yield", "keyword_super", "keyword_self", "keyword_nil",
01545   "keyword_true", "keyword_false", "keyword_and", "keyword_or",
01546   "keyword_not", "modifier_if", "modifier_unless", "modifier_while",
01547   "modifier_until", "modifier_rescue", "keyword_alias", "keyword_defined",
01548   "keyword_BEGIN", "keyword_END", "keyword__LINE__", "keyword__FILE__",
01549   "keyword__ENCODING__", "tIDENTIFIER", "tFID", "tGVAR", "tIVAR",
01550   "tCONSTANT", "tCVAR", "tLABEL", "tINTEGER", "tFLOAT", "tSTRING_CONTENT",
01551   "tCHAR", "tNTH_REF", "tBACK_REF", "tREGEXP_END", "\"unary+\"",
01552   "\"unary-\"", "\"**\"", "\"<=>\"", "\"==\"", "\"===\"", "\"!=\"",
01553   "\">=\"", "\"<=\"", "\"&&\"", "\"||\"", "\"=~\"", "\"!~\"", "\"..\"",
01554   "\"...\"", "\"[]\"", "\"[]=\"", "\"<<\"", "\">>\"", "\"::\"",
01555   "\":: at EXPR_BEG\"", "tOP_ASGN", "\"=>\"", "\"(\"", "\"( arg\"",
01556   "\")\"", "\"[\"", "\"{\"", "\"{ arg\"", "\"*\"", "\"**arg\"", "\"&\"",
01557   "\"->\"", "tSYMBEG", "tSTRING_BEG", "tXSTRING_BEG", "tREGEXP_BEG",
01558   "tWORDS_BEG", "tQWORDS_BEG", "tSYMBOLS_BEG", "tQSYMBOLS_BEG",
01559   "tSTRING_DBEG", "tSTRING_DEND", "tSTRING_DVAR", "tSTRING_END", "tLAMBEG",
01560   "tLOWEST", "'='", "'?'", "':'", "'>'", "'<'", "'|'", "'^'", "'&'", "'+'",
01561   "'-'", "'*'", "'/'", "'%'", "tUMINUS_NUM", "'!'", "'~'", "tLAST_TOKEN",
01562   "'{'", "'}'", "'['", "'.'", "','", "'`'", "'('", "')'", "']'", "';'",
01563   "' '", "'\\n'", "$accept", "program", "$@1", "top_compstmt", "top_stmts",
01564   "top_stmt", "$@2", "bodystmt", "compstmt", "stmts", "stmt_or_begin",
01565   "$@3", "stmt", "$@4", "command_asgn", "expr", "expr_value",
01566   "command_call", "block_command", "cmd_brace_block", "@5", "fcall",
01567   "command", "mlhs", "mlhs_inner", "mlhs_basic", "mlhs_item", "mlhs_head",
01568   "mlhs_post", "mlhs_node", "lhs", "cname", "cpath", "fname", "fsym",
01569   "fitem", "undef_list", "$@6", "op", "reswords", "arg", "$@7",
01570   "arg_value", "aref_args", "paren_args", "opt_paren_args",
01571   "opt_call_args", "call_args", "command_args", "@8", "block_arg",
01572   "opt_block_arg", "args", "mrhs", "primary", "@9", "$@10", "$@11", "$@12",
01573   "$@13", "$@14", "$@15", "$@16", "$@17", "$@18", "$@19", "@20", "@21",
01574   "@22", "@23", "@24", "$@25", "$@26", "primary_value", "k_begin", "k_if",
01575   "k_unless", "k_while", "k_until", "k_case", "k_for", "k_class",
01576   "k_module", "k_def", "k_end", "then", "do", "if_tail", "opt_else",
01577   "for_var", "f_marg", "f_marg_list", "f_margs", "block_args_tail",
01578   "opt_block_args_tail", "block_param", "opt_block_param",
01579   "block_param_def", "opt_bv_decl", "bv_decls", "bvar", "lambda", "@27",
01580   "@28", "@29", "f_larglist", "lambda_body", "do_block", "@30",
01581   "block_call", "method_call", "@31", "@32", "@33", "@34", "brace_block",
01582   "@35", "@36", "case_body", "cases", "opt_rescue", "exc_list", "exc_var",
01583   "opt_ensure", "literal", "strings", "string", "string1", "xstring",
01584   "regexp", "words", "word_list", "word", "symbols", "symbol_list",
01585   "qwords", "qsymbols", "qword_list", "qsym_list", "string_contents",
01586   "xstring_contents", "regexp_contents", "string_content", "@37", "@38",
01587   "@39", "@40", "string_dvar", "symbol", "sym", "dsym", "numeric",
01588   "user_variable", "keyword_variable", "var_ref", "var_lhs", "backref",
01589   "superclass", "$@41", "f_arglist", "args_tail", "opt_args_tail",
01590   "f_args", "f_bad_arg", "f_norm_arg", "f_arg_item", "f_arg", "f_kw",
01591   "f_block_kw", "f_block_kwarg", "f_kwarg", "kwrest_mark", "f_kwrest",
01592   "f_opt", "f_block_opt", "f_block_optarg", "f_optarg", "restarg_mark",
01593   "f_rest_arg", "blkarg_mark", "f_block_arg", "opt_f_block_arg",
01594   "singleton", "$@42", "assoc_list", "assocs", "assoc", "operation",
01595   "operation2", "operation3", "dot_or_colon", "opt_terms", "opt_nl",
01596   "rparen", "rbracket", "trailer", "term", "terms", "none", 0
01597 };
01598 #endif
01599 
01600 # ifdef YYPRINT
01601 /* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
01602    token YYLEX-NUM.  */
01603 static const yytype_uint16 yytoknum[] =
01604 {
01605        0,   256,   257,   258,   259,   260,   261,   262,   263,   264,
01606      265,   266,   267,   268,   269,   270,   271,   272,   273,   274,
01607      275,   276,   277,   278,   279,   280,   281,   282,   283,   284,
01608      285,   286,   287,   288,   289,   290,   291,   292,   293,   294,
01609      295,   296,   297,   298,   299,   300,   301,   302,   303,   304,
01610      305,   306,   307,   308,   309,   310,   311,   312,   313,   314,
01611      315,   316,   317,   318,   319,   320,   130,   131,   132,   134,
01612      139,   140,   141,   138,   137,   321,   322,   142,   143,   128,
01613      129,   144,   145,   135,   136,   323,   324,   325,   326,   327,
01614      328,   329,   330,   331,   332,   333,   334,   335,   336,   337,
01615      338,   339,   340,   341,   342,   343,   344,   345,   346,   347,
01616      348,   349,   350,    61,    63,    58,    62,    60,   124,    94,
01617       38,    43,    45,    42,    47,    37,   351,    33,   126,   352,
01618      123,   125,    91,    46,    44,    96,    40,    41,    93,    59,
01619       32,    10
01620 };
01621 # endif
01622 
01623 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
01624 static const yytype_uint16 yyr1[] =
01625 {
01626        0,   142,   144,   143,   145,   146,   146,   146,   146,   147,
01627      148,   147,   149,   150,   151,   151,   151,   151,   152,   153,
01628      152,   155,   154,   154,   154,   154,   154,   154,   154,   154,
01629      154,   154,   154,   154,   154,   154,   154,   154,   154,   154,
01630      154,   154,   154,   154,   154,   154,   156,   156,   157,   157,
01631      157,   157,   157,   157,   158,   159,   159,   160,   160,   162,
01632      161,   163,   164,   164,   164,   164,   164,   164,   164,   164,
01633      164,   164,   164,   165,   165,   166,   166,   167,   167,   167,
01634      167,   167,   167,   167,   167,   167,   167,   168,   168,   169,
01635      169,   170,   170,   171,   171,   171,   171,   171,   171,   171,
01636      171,   171,   172,   172,   172,   172,   172,   172,   172,   172,
01637      172,   173,   173,   174,   174,   174,   175,   175,   175,   175,
01638      175,   176,   176,   177,   177,   178,   179,   178,   180,   180,
01639      180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
01640      180,   180,   180,   180,   180,   180,   180,   180,   180,   180,
01641      180,   180,   180,   180,   180,   180,   180,   180,   181,   181,
01642      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
01643      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
01644      181,   181,   181,   181,   181,   181,   181,   181,   181,   181,
01645      181,   181,   181,   181,   181,   181,   181,   181,   181,   182,
01646      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01647      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01648      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01649      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
01650      182,   183,   182,   182,   182,   184,   185,   185,   185,   185,
01651      186,   187,   187,   188,   188,   188,   188,   188,   189,   189,
01652      189,   189,   189,   191,   190,   192,   193,   193,   194,   194,
01653      194,   194,   195,   195,   195,   196,   196,   196,   196,   196,
01654      196,   196,   196,   196,   196,   196,   197,   196,   198,   196,
01655      199,   200,   196,   196,   196,   196,   196,   196,   196,   196,
01656      196,   196,   201,   196,   196,   196,   196,   196,   196,   196,
01657      196,   196,   202,   203,   196,   204,   205,   196,   196,   196,
01658      206,   207,   196,   208,   196,   209,   210,   196,   211,   196,
01659      212,   196,   213,   214,   196,   196,   196,   196,   196,   215,
01660      216,   217,   218,   219,   220,   221,   222,   223,   224,   225,
01661      226,   227,   227,   227,   228,   228,   229,   229,   230,   230,
01662      231,   231,   232,   232,   233,   233,   234,   234,   234,   234,
01663      234,   234,   234,   234,   234,   235,   235,   235,   235,   236,
01664      236,   237,   237,   237,   237,   237,   237,   237,   237,   237,
01665      237,   237,   237,   237,   237,   237,   238,   238,   239,   239,
01666      239,   240,   240,   241,   241,   242,   242,   244,   245,   246,
01667      243,   247,   247,   248,   248,   250,   249,   251,   251,   251,
01668      251,   252,   253,   252,   254,   252,   252,   255,   252,   256,
01669      252,   252,   252,   252,   258,   257,   259,   257,   260,   261,
01670      261,   262,   262,   263,   263,   263,   264,   264,   265,   265,
01671      266,   266,   266,   267,   268,   268,   268,   269,   270,   271,
01672      272,   272,   273,   273,   274,   274,   275,   275,   276,   276,
01673      277,   277,   278,   278,   279,   279,   280,   280,   281,   281,
01674      282,   282,   283,   283,   284,   285,   284,   286,   287,   288,
01675      284,   289,   289,   289,   289,   290,   291,   291,   291,   291,
01676      292,   293,   293,   293,   293,   294,   294,   294,   294,   294,
01677      295,   295,   295,   295,   295,   295,   295,   296,   296,   297,
01678      297,   298,   298,   299,   300,   299,   299,   301,   301,   302,
01679      302,   302,   302,   303,   303,   304,   304,   304,   304,   304,
01680      304,   304,   304,   304,   304,   304,   304,   304,   304,   304,
01681      305,   305,   305,   305,   306,   306,   307,   307,   308,   308,
01682      309,   310,   311,   311,   312,   312,   313,   313,   314,   314,
01683      315,   316,   317,   317,   318,   318,   319,   319,   320,   320,
01684      321,   321,   322,   323,   323,   324,   325,   324,   326,   326,
01685      327,   327,   328,   328,   328,   329,   329,   329,   330,   330,
01686      330,   330,   331,   331,   331,   332,   332,   333,   333,   334,
01687      334,   335,   336,   337,   337,   337,   338,   338,   339,   339,
01688      340
01689 };
01690 
01691 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
01692 static const yytype_uint8 yyr2[] =
01693 {
01694        0,     2,     0,     2,     2,     1,     1,     3,     2,     1,
01695        0,     5,     4,     2,     1,     1,     3,     2,     1,     0,
01696        5,     0,     4,     3,     3,     3,     2,     3,     3,     3,
01697        3,     3,     4,     1,     3,     3,     6,     5,     5,     5,
01698        5,     3,     3,     3,     3,     1,     3,     3,     1,     3,
01699        3,     3,     2,     1,     1,     1,     1,     1,     4,     0,
01700        5,     1,     2,     3,     4,     5,     4,     5,     2,     2,
01701        2,     2,     2,     1,     3,     1,     3,     1,     2,     3,
01702        5,     2,     4,     2,     4,     1,     3,     1,     3,     2,
01703        3,     1,     3,     1,     1,     4,     3,     3,     3,     3,
01704        2,     1,     1,     1,     4,     3,     3,     3,     3,     2,
01705        1,     1,     1,     2,     1,     3,     1,     1,     1,     1,
01706        1,     1,     1,     1,     1,     1,     0,     4,     1,     1,
01707        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01708        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01709        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01710        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01711        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01712        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01713        1,     1,     1,     1,     1,     1,     1,     1,     1,     3,
01714        5,     3,     5,     6,     5,     5,     5,     5,     4,     3,
01715        3,     3,     3,     3,     3,     3,     3,     3,     4,     4,
01716        2,     2,     3,     3,     3,     3,     3,     3,     3,     3,
01717        3,     3,     3,     3,     3,     2,     2,     3,     3,     3,
01718        3,     0,     4,     6,     1,     1,     1,     2,     4,     2,
01719        3,     1,     1,     1,     1,     2,     4,     2,     1,     2,
01720        2,     4,     1,     0,     2,     2,     2,     1,     1,     2,
01721        3,     4,     3,     4,     2,     1,     1,     1,     1,     1,
01722        1,     1,     1,     1,     1,     1,     0,     4,     0,     3,
01723        0,     0,     5,     3,     3,     2,     3,     3,     1,     4,
01724        3,     1,     0,     6,     4,     3,     2,     1,     2,     2,
01725        6,     6,     0,     0,     7,     0,     0,     7,     5,     4,
01726        0,     0,     9,     0,     6,     0,     0,     8,     0,     5,
01727        0,     6,     0,     0,     9,     1,     1,     1,     1,     1,
01728        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01729        1,     1,     1,     2,     1,     1,     1,     5,     1,     2,
01730        1,     1,     1,     3,     1,     3,     1,     4,     6,     3,
01731        5,     2,     4,     1,     3,     4,     2,     2,     1,     2,
01732        0,     6,     8,     4,     6,     4,     2,     6,     2,     4,
01733        6,     2,     4,     2,     4,     1,     1,     1,     3,     1,
01734        4,     1,     4,     1,     3,     1,     1,     0,     0,     0,
01735        5,     4,     1,     3,     3,     0,     5,     2,     4,     5,
01736        5,     2,     0,     5,     0,     5,     3,     0,     4,     0,
01737        4,     2,     1,     4,     0,     5,     0,     5,     5,     1,
01738        1,     6,     1,     1,     1,     1,     2,     1,     2,     1,
01739        1,     1,     1,     1,     1,     1,     2,     3,     3,     3,
01740        3,     3,     0,     3,     1,     2,     3,     3,     0,     3,
01741        3,     3,     3,     3,     0,     3,     0,     3,     0,     2,
01742        0,     2,     0,     2,     1,     0,     3,     0,     0,     0,
01743        6,     1,     1,     1,     1,     2,     1,     1,     1,     1,
01744        3,     1,     1,     2,     2,     1,     1,     1,     1,     1,
01745        1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
01746        1,     1,     1,     1,     0,     4,     2,     3,     2,     4,
01747        2,     2,     1,     2,     0,     6,     8,     4,     6,     4,
01748        6,     2,     4,     6,     2,     4,     2,     4,     1,     0,
01749        1,     1,     1,     1,     1,     1,     1,     3,     1,     3,
01750        2,     2,     1,     3,     1,     3,     1,     1,     2,     1,
01751        3,     3,     1,     3,     1,     3,     1,     1,     2,     1,
01752        1,     1,     2,     2,     1,     1,     0,     4,     1,     2,
01753        1,     3,     3,     2,     2,     1,     1,     1,     1,     1,
01754        1,     1,     1,     1,     1,     1,     1,     0,     1,     0,
01755        1,     2,     2,     0,     1,     1,     1,     1,     1,     2,
01756        0
01757 };
01758 
01759 /* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
01760    Performed when YYTABLE doesn't specify something else to do.  Zero
01761    means the default is an error.  */
01762 static const yytype_uint16 yydefact[] =
01763 {
01764        2,     0,     0,     1,     0,   347,   348,   349,     0,   340,
01765      341,   342,   345,   343,   344,   346,   335,   336,   337,   338,
01766      298,   263,   263,   511,   510,   512,   513,   609,     0,   609,
01767       10,     0,   515,   514,   516,   595,   597,   507,   506,   596,
01768      509,   501,   502,   454,   521,   522,     0,     0,     0,     0,
01769      290,   620,   620,    85,   407,   480,   478,   480,   482,   462,
01770      474,   468,   476,     0,     0,     0,     3,   607,     6,     9,
01771       33,    45,    48,    56,   263,    55,     0,    73,     0,    77,
01772       87,     0,    53,   244,     0,   286,     0,     0,   312,   315,
01773      607,     0,     0,     0,     0,    57,   307,   275,   276,   453,
01774      455,   277,   278,   279,   281,   280,   282,   451,   452,   450,
01775      517,   518,   283,     0,   284,    61,     5,     8,   168,   179,
01776      169,   192,   165,   185,   175,   174,   195,   196,   190,   173,
01777      172,   167,   193,   197,   198,   177,   166,   180,   184,   186,
01778      178,   171,   187,   194,   189,   188,   181,   191,   176,   164,
01779      183,   182,   163,   170,   161,   162,   158,   159,   160,   116,
01780      118,   117,   153,   154,   149,   131,   132,   133,   140,   137,
01781      139,   134,   135,   155,   156,   141,   142,   146,   150,   136,
01782      138,   128,   129,   130,   143,   144,   145,   147,   148,   151,
01783      152,   157,   121,   123,   125,    26,   119,   120,   122,   124,
01784        0,     0,     0,     0,     0,     0,     0,     0,   258,     0,
01785      245,   268,    71,   262,   620,     0,   517,   518,     0,   284,
01786      620,   590,    72,    70,   609,    69,     0,   620,   431,    68,
01787      609,   610,     0,     0,    21,   241,     0,     0,   335,   336,
01788      298,   301,   432,     0,   220,     0,   221,   295,     0,    19,
01789        0,     0,   607,    15,    18,   609,    75,    14,   609,     0,
01790        0,   613,   613,   246,     0,     0,   613,   588,   609,     0,
01791        0,     0,    83,   339,     0,    93,    94,   101,   309,   408,
01792      498,   497,   499,   496,     0,   495,     0,     0,     0,     0,
01793        0,     0,     0,     0,     0,     0,     0,   503,   504,    52,
01794      235,   236,   616,   617,     4,   618,   608,     0,     0,     0,
01795        0,     0,     0,     0,   436,   434,   421,    62,   306,   415,
01796      417,     0,    89,     0,    81,    78,     0,     0,     0,     0,
01797        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01798        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
01799        0,     0,     0,   429,   620,   427,     0,    54,     0,     0,
01800        0,     0,   607,     0,   608,     0,   361,   360,     0,     0,
01801      517,   518,   284,   111,   112,     0,     0,   114,     0,     0,
01802      517,   518,   284,   328,   188,   181,   191,   176,   158,   159,
01803      160,   116,   117,   586,   330,   585,     0,   606,   605,     0,
01804      308,   456,     0,     0,   126,   593,   295,   269,   594,   265,
01805        0,     0,     0,   259,   267,   429,   620,   427,     0,     0,
01806        0,   260,   609,     0,   300,   264,   609,   254,   620,   620,
01807      253,   609,   305,    51,    23,    25,    24,     0,   302,     0,
01808        0,     0,   429,   427,     0,    17,     0,   609,   293,    13,
01809      608,    74,   289,   291,   296,   615,   614,   247,   615,   249,
01810      297,   589,     0,   100,   503,   504,    91,    86,     0,   429,
01811      620,   427,   549,   484,   487,   485,   500,   481,   457,   479,
01812      458,   459,   483,   460,   461,     0,   464,   470,     0,   471,
01813      466,   467,     0,   472,     0,   473,     0,     0,   619,     7,
01814       27,    28,    29,    30,    31,    49,    50,   620,   620,    59,
01815       63,   620,     0,    34,    43,     0,    44,   609,     0,    79,
01816       90,    47,    46,     0,   199,   268,    42,   217,   225,   230,
01817      231,   232,   227,   229,   239,   240,   233,   234,   210,   211,
01818      237,   238,   609,   226,   228,   222,   223,   224,   212,   213,
01819      214,   215,   216,   598,   600,   599,   601,     0,   263,   426,
01820      609,   598,   600,   599,   601,     0,   263,     0,   620,   352,
01821        0,   351,     0,     0,     0,     0,     0,     0,   295,   429,
01822      620,   427,   320,   325,   111,   112,   113,     0,   524,   323,
01823      523,   429,   620,   427,     0,     0,   549,   332,   598,   599,
01824      263,    35,   201,    41,   209,     0,   199,   592,     0,   270,
01825      266,   620,   598,   599,   609,   598,   599,   591,   299,   611,
01826      250,   255,   257,   304,    22,     0,   242,     0,    32,   424,
01827      422,   208,     0,    76,    16,   609,   613,     0,    84,    97,
01828       99,   609,   598,   599,   555,   552,   551,   550,   553,     0,
01829      566,     0,   577,   567,   581,   580,   576,   549,   409,   548,
01830      412,   554,   556,   558,   534,   564,   620,   569,   620,   574,
01831      534,   579,   534,     0,   532,   488,     0,   463,   465,   475,
01832      469,   477,   218,   219,   399,   609,     0,   397,   396,     0,
01833      620,     0,   274,     0,    88,    82,     0,     0,     0,     0,
01834        0,     0,   430,    66,     0,     0,   433,     0,     0,   428,
01835       64,   620,   350,   287,   620,   620,   442,   620,   353,   620,
01836      355,   313,   354,   316,     0,     0,   319,   602,   294,   609,
01837      598,   599,     0,     0,   526,     0,     0,   111,   112,   115,
01838      609,     0,   609,   549,     0,     0,     0,   252,   418,    58,
01839      251,     0,   127,   271,   261,     0,     0,   433,     0,     0,
01840      620,   609,    11,     0,   292,   248,    92,    95,     0,   560,
01841      555,     0,   373,   364,   366,   609,   362,   609,     0,     0,
01842      541,     0,   530,   584,   568,     0,   531,     0,   544,   578,
01843        0,   546,   582,   489,   491,   492,   493,   486,   494,   555,
01844        0,   395,   609,     0,   380,   562,   620,   620,   572,   380,
01845      380,   378,   401,     0,     0,     0,     0,     0,   272,    80,
01846      200,     0,    40,   206,    39,   207,    67,   425,   612,     0,
01847       37,   204,    38,   205,    65,   423,   443,   444,   620,   445,
01848        0,   620,   358,     0,     0,   356,     0,     0,     0,   318,
01849        0,     0,   433,     0,   326,     0,     0,   433,   329,   587,
01850      609,     0,   528,   333,   419,   420,   202,     0,   256,   303,
01851       20,   570,   609,     0,   371,     0,   557,     0,     0,     0,
01852      410,   533,   559,   534,   534,   565,   620,   583,   534,   575,
01853      534,   534,     0,     0,     0,   561,     0,   398,   386,   388,
01854        0,   376,   377,     0,   391,     0,   393,     0,   437,   435,
01855        0,   416,   273,   243,    36,   203,     0,     0,   447,   359,
01856        0,    12,   449,     0,   310,   311,     0,     0,   270,   620,
01857      321,     0,   525,   324,   527,   331,   549,   363,   374,     0,
01858      369,   365,   411,     0,     0,     0,   537,     0,   539,   529,
01859        0,   545,     0,   542,   547,     0,   571,   295,   429,   400,
01860      379,   380,   380,   563,   620,   380,   573,   380,   380,   405,
01861      609,   403,   406,    60,     0,   446,     0,   102,   103,   110,
01862        0,   448,     0,   314,   317,   439,   440,   438,     0,     0,
01863        0,     0,   372,     0,   367,   414,   413,   534,   534,   534,
01864      534,   490,   602,   294,     0,   383,     0,   385,   375,     0,
01865      392,     0,   389,   394,     0,   402,   109,   429,   620,   427,
01866      620,   620,     0,   327,     0,   370,     0,   538,     0,   535,
01867      540,   543,   380,   380,   380,   380,   404,   602,   108,   609,
01868      598,   599,   441,   357,   322,   334,   368,   534,   384,     0,
01869      381,   387,   390,   433,   536,   380,   382
01870 };
01871 
01872 /* YYDEFGOTO[NTERM-NUM].  */
01873 static const yytype_int16 yydefgoto[] =
01874 {
01875       -1,     1,     2,    66,    67,    68,   236,   567,   568,   252,
01876      253,   446,   254,   437,    70,    71,   358,    72,    73,   510,
01877      690,   243,    75,    76,   255,    77,    78,    79,   467,    80,
01878      209,   377,   378,   192,   193,   194,   195,   605,   556,   197,
01879       82,   439,   211,   260,   228,   748,   426,   427,   225,   226,
01880      213,   413,   428,   516,    83,   356,   258,   259,   635,   625,
01881      360,   847,   361,   848,   732,   988,   736,   733,   931,   594,
01882      596,   746,   936,   245,    85,    86,    87,    88,    89,    90,
01883       91,    92,    93,    94,   713,   570,   721,   844,   845,   369,
01884      773,   774,   775,   960,   899,   802,   686,   687,   803,   970,
01885      971,   278,   279,   472,   778,   658,   880,   320,   511,    95,
01886       96,   711,   704,   565,   557,   318,   508,   507,   577,   987,
01887      715,   838,   917,   921,    97,    98,    99,   100,   101,   102,
01888      103,   290,   485,   104,   294,   105,   106,   292,   296,   286,
01889      284,   288,   477,   676,   675,   793,   892,   797,   107,   285,
01890      108,   109,   216,   217,   112,   218,   219,   589,   735,   744,
01891      881,   780,   745,   661,   662,   663,   664,   665,   805,   806,
01892      666,   667,   668,   669,   808,   809,   670,   671,   672,   673,
01893      674,   782,   396,   595,   265,   429,   221,   115,   629,   559,
01894      399,   304,   423,   424,   706,   457,   571,   364,   257
01895 };
01896 
01897 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
01898    STATE-NUM.  */
01899 #define YYPACT_NINF -808
01900 static const yytype_int16 yypact[] =
01901 {
01902     -808,   134,  2562,  -808,  7195,  -808,  -808,  -808,  6718,  -808,
01903     -808,  -808,  -808,  -808,  -808,  -808,  7308,  7308,  -808,  -808,
01904     7308,  3884,  3479,  -808,  -808,  -808,  -808,   455,  6585,    17,
01905     -808,    60,  -808,  -808,  -808,  2804,  3614,  -808,  -808,  2939,
01906     -808,  -808,  -808,  -808,  -808,  -808,  8664,  8664,   140,  4955,
01907      462,  7647,  7986,  6977,  -808,  6452,  -808,  -808,  -808,   103,
01908      115,   126,   206,   117,  8777,  8664,  -808,   -25,  -808,  1007,
01909     -808,   322,  -808,  -808,   141,   372,   352,  -808,   337,  9003,
01910     -808,   379,  2918,   247,   278,  -808,  8890,  8890,  -808,  -808,
01911     5842,  9112,  9221,  9330,  6318,    33,    65,  -808,  -808,   410,
01912     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01913      205,   409,  -808,   441,   433,  -808,  -808,  -808,  -808,  -808,
01914     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01915     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01916     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01917     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01918     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01919     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01920     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01921     -808,  -808,  -808,  -808,  -808,   396,  -808,  -808,  -808,  -808,
01922      427,  8664,   519,  5094,  8664,  8664,  8664,  8664,  -808,   468,
01923     2918,   500,  -808,  -808,   463,   304,    22,   344,   517,   363,
01924      479,  -808,  -808,  -808,  5729,  -808,  7308,  7308,  -808,  -808,
01925     5955,  -808,  8890,   498,  -808,   482,   491,  5233,  -808,  -808,
01926     -808,   497,   499,   141,  -808,   361,   570,   458,  7421,  -808,
01927     4955,   505,   -25,  -808,  1007,    17,   538,  -808,    17,  8890,
01928      515,   188,   318,  -808,   500,   523,   318,  -808,    17,   617,
01929      338,  9439,   540,  -808,   474,   572,   613,   674,  -808,  -808,
01930     -808,  -808,  -808,  -808,   522,  -808,   601,   669,   284,   576,
01931      752,   577,    58,   582,   759,   584,    68,   609,   612,  -808,
01932     -808,  -808,  -808,  -808,  -808,  -808,  6068,  8890,  8890,  8890,
01933     8890,  7421,  8890,  8890,  -808,  -808,  -808,   588,  -808,  -808,
01934     -808,  8099,  -808,  4955,  7086,   561,  8099,  8664,  8664,  8664,
01935     8664,  8664,  8664,  8664,  8664,  8664,  8664,  8664,  8664,  8664,
01936     8664,  8664,  8664,  8664,  8664,  8664,  8664,  8664,  8664,  8664,
01937     8664,  8664,  8664,  2012,  7308,  9718,  4312,   322,   109,   109,
01938     8890,  8890,   -25,   689,   563,   651,  -808,  -808,   685,   691,
01939       53,    57,   100,   328,   393,  8890,   568,  -808,   199,   708,
01940     -808,  -808,  -808,  -808,    55,   223,   249,   279,   283,   301,
01941      316,   384,   417,  -808,  -808,  -808,    33,  -808,  -808,  9795,
01942     -808,  -808,  8777,  8777,  -808,  -808,   414,  -808,  -808,  -808,
01943     8664,  8664,  7534,  -808,  -808,  9872,  7308,  9949,  8664,  8664,
01944     7760,  -808,    17,   595,  -808,  -808,    17,  -808,   580,   599,
01945     -808,    61,  -808,  -808,  -808,  -808,  -808,  6718,  -808,  8664,
01946     5364,   604,  9872,  9949,  8664,  1007,   607,    17,  -808,  -808,
01947     6181,   618,  -808,   322,  -808,  7873,  -808,  -808,  7986,  -808,
01948     -808,  -808,   482,   769,  -808,  -808,  -808,   622,  9439, 10026,
01949     7308, 10103,  1417,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
01950     -808,  -808,  -808,  -808,  -808,   244,  -808,  -808,   611,  -808,
01951     -808,  -808,   347,  -808,   623,  -808,  8664,  8664,  -808,  -808,
01952     -808,  -808,  -808,  -808,  -808,  -808,  -808,    51,    51,  -808,
01953     -808,    51,  8664,  -808,   628,   634,  -808,    17,  9439,   655,
01954     -808,  -808,  -808,   678,  1866,  -808,  -808,   570,  2240,  2240,
01955     2240,  2240,   727,   727,  3323,  3188,  2240,  2240,  3053,  3053,
01956      415,   415,  1674,   727,   727,   907,   907,   660,    40,    40,
01957      570,   570,   570,  4019,  3074,  4154,  3209,   499,   661,  -808,
01958       17,   535,  -808,   688,  -808,   499,  3749,   737,   790,  -808,
01959     4451,   799,  4729,    66,    66,   689,  8212,   737,   147, 10180,
01960     7308, 10257,  -808,   322,  -808,   769,  -808,   -25,  -808,  -808,
01961     -808, 10334,  7308,  9795,  4312,  8890,  1538,  -808,  -808,  -808,
01962     4173,  -808,  2648,  -808,  2918,  6718,  2783,  -808,  8664,   500,
01963     -808,   479,  2669,  3344,    17,   420,   444,  -808,  -808,  -808,
01964     -808,  7534,  7760,  -808,  -808,  8890,  2918,   672,  -808,  -808,
01965     -808,  2918,  5364,     2,  -808,    17,   318,  9439,   622,   701,
01966      469,    17,   207,   224,   711,  -808,  -808,  -808,  -808,  8664,
01967     -808,   947,  -808,  -808,  -808,  -808,  -808,  1789,  -808,  -808,
01968     -808,  -808,  -808,  -808,   680,  -808,   687,   773,   694,  -808,
01969      698,   783,   704,   791,  -808,  -808,   834,  -808,  -808,  -808,
01970     -808,  -808,   570,   570,  -808,  1322,  5503,  -808,  -808,  5233,
01971       51,  5503,   721,  8325,  -808,   622,  9439,  8777,  8664,   741,
01972     8777,  8777,  -808,   588,   499,   722,   818,  8777,  8777,  -808,
01973      588,   499,  -808,  -808,  8438,   827,  -808,   597,  -808,   827,
01974     -808,  -808,  -808,  -808,   737,    70,  -808,    67,   136,    17,
01975      148,   149,  8890,   -25,  -808,  8890,  4312,   701,   469,  -808,
01976       17,   737,    61,  1789,  4312,   -25,  6851,  -808,    65,   372,
01977     -808,  8664,  -808,  -808,  -808,  8664,  8664,   466,  8664,  8664,
01978      731,    61,  -808,   736,  -808,  -808,  -808,   567,  8664,  -808,
01979     -808,   947,   350,  -808,   738,    17,  -808,    17,    72,  1789,
01980     -808,    42,  -808,  -808,  -808,   272,  -808,  1789,  -808,  -808,
01981      892,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,   762,
01982     9548,  -808,    17,   764,   746,  -808,   751,   694,  -808,   758,
01983      760,  -808,   761,   893,   775,  5233,   899,  8664,   776,   622,
01984     2918,  8664,  -808,  2918,  -808,  2918,  -808,  -808,  -808,  8777,
01985     -808,  2918,  -808,  2918,  -808,  -808,   628,  -808,   826,  -808,
01986     4842,   909,  -808,  8890,   737,  -808,   737,  5503,  5503,  -808,
01987     8551,  4590,   155,    66,  -808,   -25,   737,  -808,  -808,  -808,
01988       17,   737,  -808,  -808,  -808,  -808,  2918,  8664,  7760,  -808,
01989     -808,  -808,    17,  1011,   789,  1003,  -808,   793,  5503,  5233,
01990     -808,  -808,  -808,   798,   803,  -808,   694,  -808,   804,  -808,
01991      811,   804,  5616,  9548,   877,   792,   808,  -808,  1910,  -808,
01992      490,  -808,  -808,  1910,  -808,  1368,  -808,  1032,  -808,  -808,
01993      820,  -808,   819,  2918,  -808,  2918,  9657,   109,  -808,  -808,
01994     5503,  -808,  -808,   109,  -808,  -808,   737,   737,  -808,   130,
01995     -808,  4312,  -808,  -808,  -808,  -808,  1538,  -808,   821,  1011,
01996      434,  -808,  -808,   944,   832,  1789,  -808,   892,  -808,  -808,
01997      892,  -808,   892,  -808,  -808,   850,   792,  -808, 10411,  -808,
01998     -808,   830,   831,  -808,   694,   835,  -808,   837,   835,  -808,
01999      443,  -808,  -808,  -808,   910,  -808,   796,   572,   613,   674,
02000     4312,  -808,  4451,  -808,  -808,  -808,  -808,  -808,  5503,   737,
02001     4312,  1011,   821,  1011,   838,  -808,  -808,   804,   839,   804,
02002      804,  -808,   840,   841,  1910,  -808,  1368,  -808,  -808,  1368,
02003     -808,  1368,  -808,  -808,  1032,  -808,   769, 10488,  7308, 10565,
02004      790,   597,   737,  -808,   737,   821,  1011,  -808,   892,  -808,
02005     -808,  -808,   835,   844,   835,   835,  -808,    74,   469,    17,
02006      146,   158,  -808,  -808,  -808,  -808,   821,   804,  -808,  1368,
02007     -808,  -808,  -808,   176,  -808,   835,  -808
02008 };
02009 
02010 /* YYPGOTO[NTERM-NUM].  */
02011 static const yytype_int16 yypgoto[] =
02012 {
02013     -808,  -808,  -808,  -363,  -808,    27,  -808,  -550,   -21,  -808,
02014      518,  -808,    15,  -808,  -301,   -51,   -86,    41,  -808,  -268,
02015     -808,   413,    -7,   888,  -153,    -4,   -73,  -808,  -416,     7,
02016     1571,  -315,   889,   -53,  -808,    -5,  -808,  -808,    98,  -808,
02017      870,  -808,   735,  -808,   -44,   275,  -340,    87,   -11,  -808,
02018     -386,  -188,     4,  -311,   -20,  -808,  -808,  -808,  -808,  -808,
02019     -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
02020     -808,  -808,  -808,    64,  -808,  -808,  -808,  -808,  -808,  -808,
02021     -808,  -808,  -808,  -808,   154,  -347,  -526,   -34,  -645,  -808,
02022     -785,  -779,   221,   309,   374,  -808,  -446,  -808,  -665,  -808,
02023      -18,  -808,  -808,  -808,  -808,  -808,  -808,   248,  -808,  -808,
02024     -808,  -808,  -808,  -808,  -808,   -93,  -808,  -808,  -535,  -808,
02025       -6,  -808,  -808,  -808,  -808,  -808,  -808,   918,  -808,  -808,
02026     -808,  -808,   712,  -808,  -808,  -808,  -808,  -808,  -808,  -808,
02027      963,  -808,  -142,  -808,  -808,  -808,  -808,  -808,    10,  -808,
02028       14,  -808,  1081,  1361,   928,  1531,  1552,  -808,  -808,    89,
02029     -464,  -372,  -415,  -783,  -518,  -723,   234,   242,   133,  -808,
02030     -808,  -808,   289,  -708,  -807,   128,   255,  -808,  -638,  -808,
02031      228,  -622,  -808,  -808,  -808,    69,  -383,  -808,  -348,  -808,
02032      639,   -26,     0,    48,  -598,  -208,    21,   -14,    -2
02033 };
02034 
02035 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
02036    positive, shift that token.  If negative, reduce the rule which
02037    number is the opposite.  If YYTABLE_NINF, syntax error.  */
02038 #define YYTABLE_NINF -621
02039 static const yytype_int16 yytable[] =
02040 {
02041      116,   359,   283,   400,   362,   558,   325,   566,   659,   208,
02042      208,   229,   572,   208,   560,   526,   757,    69,   198,    69,
02043      214,   214,   199,   234,   214,   521,   610,   232,   251,   235,
02044      316,   117,   421,   273,   610,   357,   357,   617,   198,   357,
02045      724,   394,   199,   767,   741,   256,   786,   810,   723,   263,
02046      267,   600,   638,   306,   459,   261,   882,   660,   461,   273,
02047      272,   586,   689,   317,   363,   691,    84,   558,    84,   566,
02048      841,   273,   273,   273,   846,   617,   614,   627,  -102,   889,
02049      215,   215,  -103,   569,   215,   220,   220,  -106,   305,   220,
02050      941,   314,  -106,   720,   938,   630,   966,   447,   312,   313,
02051      649,   878,   695,   212,   222,   299,   196,   223,   327,  -519,
02052      650,   305,   877,    84,   302,   -74,   303,   274,   397,   488,
02053      262,   266,   569,   630,   972,  -110,   196,   684,   215,   494,
02054      641,   852,   659,   776,     3,  -102,   -88,   896,   653,   654,
02055     -511,   884,   857,   274,   479,   840,   482,   576,   486,   890,
02056      215,   215,   486,   196,   215,   368,   379,   379,   231,  -105,
02057      992,  -108,   655,   350,   351,   352,   398,   314,   489,   685,
02058      517,  -107,  -109,  -105,  -107,   882,   297,   298,   495,   431,
02059     -104,   433,   251,   879,   901,   902,   856,   -93,  -511,  -104,
02060      237,   -94,   196,   659,   861,   315,   247,   966,   466,   316,
02061      587,   -97,   231,  -598,   850,   302,   941,   303,   453,   302,
02062     -598,   303,   414,  -106,  1025,  -106,   441,   208,   414,   208,
02063      208,   500,   501,   502,   503,   430,   449,   882,   214,   251,
02064      214,   972,   -96,   630,  -101,   610,   610,   889,   450,   617,
02065      729,   421,   777,   289,   815,   630,   256,  1046,   302,   -98,
02066      303,   273,   740,   776,   874,   291,   357,   357,   357,   357,
02067      962,   505,   506,   445,   949,   967,   293,    84,   462,   763,
02068      -99,   315,  -599,   305,   573,   574,   739,   227,   432,   659,
02069      819,  -100,   -96,   -98,   985,  -105,   882,  -105,   215,   -95,
02070      215,   215,  -519,   220,   215,   220,   215,  -107,   788,  -107,
02071      791,    84,   251,   451,   273,   473,   452,   998,  -510,   357,
02072      357,   422,    84,   425,    84,  -104,   588,  -104,  -102,   256,
02073      -96,    69,   455,   215,   583,   515,   504,   930,   860,   456,
02074      515,   519,  -339,   499,  -512,   274,   575,   -98,   302,   -93,
02075      303,   -96,  1008,   678,   -96,   473,   295,   208,   -96,   481,
02076      678,   474,   430,   475,  -595,   776,  -510,   776,   -98,   312,
02077      313,   -98,   513,   353,  -513,   -98,  1033,   522,  -515,   654,
02078       84,   215,   215,   215,   215,    84,   215,   215,   851,  -339,
02079     -339,   989,  -512,   305,   677,   215,  -514,    84,   274,   415,
02080      215,   474,   655,   475,   986,   466,   521,   464,   465,   590,
02081      319,  -516,   770,   837,   645,   646,   647,   648,   473,   208,
02082      354,   355,  -513,  -505,   430,    74,  -515,    74,   215,  -596,
02083       84,   776,   994,   754,   215,   215,   414,   414,   765,    74,
02084       74,  -520,   624,    74,  -514,   826,   416,   417,   116,   215,
02085     1024,  1053,   834,   601,   603,   466,   442,   198,   273,  -516,
02086      419,   199,   458,   564,   474,    69,   475,  -103,  -595,   456,
02087     -505,  -505,    74,   208,  -595,   321,   215,   215,   430,  -505,
02088      618,   322,   659,   776,   620,   776,  -110,    74,  -508,   623,
02089      215,   611,   610,   327,   873,   617,   770,   680,   645,   646,
02090      647,   648,   326,   416,   443,   633,  -520,   564,   273,    74,
02091       74,   444,  -508,    74,    84,   688,   688,   758,   776,   688,
02092       56,   946,   948,   702,    84,   564,   951,  -505,   953,   954,
02093      403,   709,  -103,  -596,   636,  -508,  -508,  -109,   402,  -596,
02094      404,   759,   274,  -105,   215,   196,   348,   349,   350,   351,
02095      352,   564,   699,   -94,   742,   444,  -110,   703,   800,   717,
02096     -508,   719,   434,   867,  -294,   710,   747,  -107,   650,   469,
02097      705,   435,   436,   230,   766,   694,   716,  -101,   993,   564,
02098      980,  -109,   754,   208,   761,   406,   982,  1014,   430,  -104,
02099      725,   410,   274,   473,   231,   208,   653,   654,   411,   749,
02100      430,   230,  -100,  -433,   722,   722,   231,   412,   750,  -288,
02101      752,  -294,  -294,  -288,   418,  -599,   470,   471,   734,   414,
02102      655,   843,   840,   420,   705,   198,    74,   273,   438,   199,
02103      584,   440,   707,   466,   585,  1027,  1029,  1030,  1031,   474,
02104      116,   475,   476,   224,    84,   227,    84,    74,   327,    74,
02105       74,   705,   448,    74,   215,    74,   853,    69,  -105,   855,
02106       74,   -73,  -433,   454,   460,   864,   215,  -517,    84,   215,
02107      827,    74,   473,    74,   783,   813,   783,   747,   814,   -96,
02108      816,   630,    74,   463,   468,  1054,   273,   496,  1039,   564,
02109      497,   357,   509,   764,   357,   812,   483,   487,   688,   215,
02110      760,   564,   490,   863,   493,   520,    84,  -433,  -518,  -433,
02111     -433,   274,   498,   196,  -517,  -517,   576,   578,   474,   750,
02112      475,   478,   839,   842,   621,   842,   582,   842,   515,    74,
02113       74,    74,    74,    74,    74,    74,    74,  -602,   327,   705,
02114      473,   726,   619,   622,    74,   628,    74,   632,   522,    74,
02115      705,   822,   824,   340,   341,  -518,  -518,   712,   830,   832,
02116       84,   679,   -88,    84,   854,    84,   637,   923,   414,  -284,
02117      274,   215,  -268,   681,   215,   215,   862,    74,   693,    74,
02118      579,   215,   215,    74,    74,   708,   474,   812,   475,   480,
02119      273,   348,   349,   350,   351,   352,  -602,   264,    74,   696,
02120      859,   697,   357,   591,   910,   327,   215,  -424,   714,   215,
02121       84,  -107,   812,   762,   783,   783,  -284,  -284,    84,   869,
02122      340,   341,   718,   473,   779,    74,    74,   580,   581,   919,
02123      473,   781,   -98,   876,   768,   784,   926,   927,   785,    74,
02124      929,  -602,   787,  -602,  -602,   789,   918,  -598,   790,   922,
02125      592,   593,   840,   792,   196,   345,   346,   347,   348,   349,
02126      350,   351,   352,    74,  -295,  -269,   821,   943,   944,   474,
02127      828,   475,   484,    74,   895,   868,   474,   870,   475,   491,
02128      914,   955,   875,   273,   722,   893,   932,   958,   849,    84,
02129      898,  1017,   897,    74,   783,   900,   210,   210,   794,   795,
02130      210,   796,   903,   215,   905,   858,   273,    44,    45,   981,
02131      907,  -295,  -295,   908,    84,   829,   909,   215,   934,   911,
02132     -270,    84,    84,   811,   916,    84,   244,   246,   920,   804,
02133      937,   210,   210,   939,   592,   593,   959,   842,  1018,  1019,
02134      942,  -104,   945,   957,   300,   301,   405,   947,   950,   407,
02135      408,   409,    84,    84,   770,   952,   645,   646,   647,   648,
02136      649,   973,   -95,  -271,   995,   991,    84,   956,  1001,  1020,
02137      650,  1021,   783,   996,  1004,  1006,  1016,  1022,   634,  1009,
02138     1015,  1011,  1026,  1028,   807,   327,  -598,  -599,  1049,   366,
02139      976,   651,   383,    74,    84,    74,   835,  1043,   653,   654,
02140      340,   341,   872,    74,   801,    84,  1036,   865,   924,   770,
02141      925,   645,   646,   647,   648,    74,   492,    74,    74,   887,
02142      933,   208,   655,   887,  1042,   935,   430,   401,   716,   842,
02143      287,   888,   395,   885,   891,   990,   961,   347,   348,   349,
02144      350,   351,   352,   963,   883,   597,   771,     0,    74,   705,
02145        0,     0,   772,     0,    84,    74,    84,   307,   308,   309,
02146      310,   311,    84,     0,    84,   770,   514,   645,   646,   647,
02147      648,   525,     0,   770,     0,   645,   646,   647,   648,     0,
02148      886,   210,     0,     0,   210,   210,   210,   300,     0,     0,
02149      983,   984,   215,   110,   969,   110,   645,   646,   647,   648,
02150        0,     0,   771,     0,   210,     0,   210,   210,   940,    74,
02151      771,     0,    74,     0,    74,     0,     0,     0,     0,     0,
02152       74,     0,     0,    74,    74,     0,     0,   564,     0,     0,
02153       74,    74,     0,     0,     0,     0,   811,     0,   887,     0,
02154      110,   811,     0,   811,   275,     0,     0,   965,     0,   968,
02155        0,     0,     0,  1023,     0,    74,   607,   609,    74,    74,
02156        0,     0,     0,     0,     0,   264,     0,    74,     0,     0,
02157      275,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02158        0,     0,   370,   380,   380,   380,  1044,     0,  1045,   997,
02159        0,   999,     0,   904,   906,     0,  1000,   807,     0,   964,
02160      609,   210,   807,   264,   807,     0,   524,   527,   528,   529,
02161      530,   531,   532,   533,   534,   535,   536,   537,   538,   539,
02162      540,   541,   542,   543,   544,   545,   546,   547,   548,   549,
02163      550,   551,   552,     0,   210,     0,     0,     0,    74,     0,
02164        0,     0,   811,     0,   811,     0,     0,   811,  1032,   811,
02165     1034,     0,    74,     0,     0,  1035,     0,   692,     0,     0,
02166        0,     0,     0,    74,     0,     0,    74,     0,     0,     0,
02167       74,    74,  1047,     0,    74,     0,     0,     0,     0,     0,
02168        0,     0,   602,   604,     0,     0,     0,   811,     0,     0,
02169      606,   210,   210,  1055,   110,     0,   210,     0,   602,   604,
02170      210,    74,    74,   807,     0,   807,     0,     0,   807,     0,
02171      807,     0,     0,     0,     0,    74,     0,     0,     0,   626,
02172        0,   525,     0,     0,   631,     0,     0,     0,   110,     0,
02173        0,     0,     0,     0,     0,   210,     0,     0,   210,   110,
02174        0,   110,     0,    74,     0,  1005,  1007,     0,   807,  1010,
02175      210,  1012,  1013,   753,    74,     0,     0,     0,     0,     0,
02176        0,     0,   275,     0,     0,     0,   609,   264,     0,     0,
02177        0,     0,     0,   111,     0,   111,   682,   683,     0,     0,
02178        0,     0,     0,     0,   799,     0,   645,   646,   647,   648,
02179      800,     0,   210,     0,   769,     0,     0,   110,     0,     0,
02180      650,     0,   110,    74,     0,    74,     0,     0,     0,     0,
02181        0,    74,     0,    74,   110,   275,  1048,  1050,  1051,  1052,
02182      111,   651,     0,     0,   276,     0,     0,   652,   653,   654,
02183      770,     0,   645,   646,   647,   648,   800,     0,   818,  1056,
02184        0,    74,     0,     0,     0,     0,   650,   110,     0,     0,
02185      276,     0,   655,     0,     0,   656,   210,     0,     0,   836,
02186      210,     0,   371,   381,   381,   381,     0,   651,     0,     0,
02187        0,     0,   210,   231,   653,   654,     0,     0,     0,   644,
02188        0,   645,   646,   647,   648,   649,     0,     0,   210,     0,
02189        0,     0,     0,     0,     0,   650,     0,     0,   655,     0,
02190        0,   210,   210,     0,     0,     0,     0,     0,     0,     0,
02191        0,     0,     0,   871,     0,     0,   651,     0,     0,     0,
02192        0,     0,   652,   653,   654,     0,     0,     0,     0,   210,
02193        0,   110,     0,     0,     0,     0,     0,     0,     0,     0,
02194        0,   110,     0,   113,     0,   113,     0,   655,     0,     0,
02195      656,     0,     0,     0,     0,     0,     0,     0,     0,   275,
02196        0,     0,   912,   657,   114,     0,   114,     0,     0,     0,
02197        0,     0,     0,   210,   111,     0,     0,   606,   820,     0,
02198      823,   825,     0,    81,     0,    81,     0,   831,   833,     0,
02199      113,     0,     0,     0,   210,   928,     0,     0,     0,     0,
02200      644,     0,   645,   646,   647,   648,   649,     0,   111,   275,
02201        0,   114,     0,   264,     0,   277,   650,     0,     0,   111,
02202        0,   111,     0,     0,     0,     0,     0,     0,     0,     0,
02203       81,   866,     0,     0,     0,   823,   825,   651,   831,   833,
02204        0,   277,   276,   652,   653,   654,     0,     0,   210,     0,
02205        0,     0,     0,   372,   382,   382,     0,     0,     0,     0,
02206        0,   110,     0,   110,     0,     0,     0,     0,   655,     0,
02207        0,   656,   367,     0,     0,     0,     0,   111,     0,     0,
02208        0,     0,   111,     0,   743,   110,     0,     0,     0,     0,
02209        0,     0,     0,     0,   111,   276,     0,   210,     0,     0,
02210        0,   913,     0,     0,     0,     0,     0,     0,     0,   915,
02211        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02212        0,     0,     0,   110,     0,     0,     0,   111,   275,     0,
02213      210,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02214        0,     0,     0,     0,   113,     0,     0,   915,   210,     0,
02215        0,     0,   327,   328,   329,   330,   331,   332,   333,   334,
02216      335,   336,   337,   338,   339,   114,     0,   340,   341,     0,
02217        0,     0,     0,     0,     0,     0,     0,   110,   113,     0,
02218      110,     0,   110,     0,    81,     0,     0,   275,     0,   113,
02219        0,   113,     0,     0,     0,     0,     0,     0,   342,   114,
02220      343,   344,   345,   346,   347,   348,   349,   350,   351,   352,
02221      114,   111,   114,     0,     0,     0,     0,     0,    81,     0,
02222        0,   111,     0,     0,     0,   231,     0,   110,     0,    81,
02223        0,    81,     0,   277,     0,   110,     0,     0,     0,   276,
02224        0,     0,     0,     0,     0,     0,     0,   113,     0,     0,
02225        0,   644,   113,   645,   646,   647,   648,   649,     0,     0,
02226        0,     0,     0,     0,   113,     0,     0,   650,   114,     0,
02227        0,     0,     0,   114,     0,     0,     0,     0,     0,     0,
02228        0,     0,     0,     0,     0,   114,   277,    81,   651,   276,
02229        0,   380,    81,     0,   652,   653,   654,   113,   210,     0,
02230        0,     0,     0,     0,    81,     0,   110,   523,     0,     0,
02231        0,     0,     0,     0,     0,     0,     0,     0,   114,   655,
02232      698,     0,   656,     0,     0,     0,     0,     0,     0,     0,
02233        0,   110,     0,     0,     0,     0,     0,    81,   110,   110,
02234        0,   111,   110,   111,   327,   328,   329,   330,   331,   332,
02235      333,   334,   335,   336,   337,   338,   339,     0,     0,   340,
02236      341,     0,     0,     0,     0,   111,     0,     0,     0,   110,
02237      110,     0,   799,     0,   645,   646,   647,   648,   800,     0,
02238        0,   113,     0,   110,   380,     0,     0,     0,   650,     0,
02239      342,   113,   343,   344,   345,   346,   347,   348,   349,   350,
02240      351,   352,   114,   111,     0,     0,     0,   977,   276,   651,
02241     -245,   110,   114,     0,     0,   652,   653,   654,     0,     0,
02242        0,    81,   110,     0,     0,     0,     0,     0,     0,     0,
02243      277,    81,     0,     0,     0,     0,     0,     0,     0,     0,
02244      655,     0,     0,   656,     0,     0,     0,     0,     0,     0,
02245        0,     0,     0,     0,     0,     0,     0,   111,     0,     0,
02246      111,     0,   111,     0,     0,     0,     0,   276,     0,     0,
02247        0,   110,     0,   110,   553,   554,     0,     0,   555,   110,
02248      277,   110,     0,     0,     0,     0,     0,     0,   162,   163,
02249      164,   165,   166,   167,   168,   169,   170,     0,     0,   171,
02250      172,     0,     0,   173,   174,   175,   176,   111,     0,     0,
02251        0,   113,     0,   113,     0,   111,     0,   177,   178,     0,
02252        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02253        0,     0,   114,     0,   114,   113,     0,     0,   179,   180,
02254      181,   182,   183,   184,   185,   186,   187,   188,     0,   189,
02255      190,    81,     0,    81,     0,     0,   114,   191,     0,     0,
02256        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02257        0,   381,     0,   113,     0,    81,     0,     0,     0,     0,
02258        0,     0,     0,     0,     0,     0,   111,     0,     0,     0,
02259        0,     0,     0,     0,   114,     0,     0,     0,     0,   277,
02260        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02261        0,   111,     0,    81,     0,     0,     0,     0,   111,   111,
02262        0,     0,   111,     0,     0,     0,     0,   113,     0,     0,
02263      113,     0,   113,     0,     0,     0,     0,     0,   798,     0,
02264        0,     0,     0,     0,     0,     0,     0,     0,   114,   111,
02265      111,   114,     0,   114,     0,     0,     0,     0,   277,     0,
02266        0,     0,     0,   111,   381,     0,     0,    81,     0,     0,
02267       81,     0,    81,     0,     0,     0,     0,   113,   523,     0,
02268        0,     0,     0,     0,     0,   113,     0,   978,     0,     0,
02269        0,   111,     0,     0,     0,     0,     0,     0,   114,     0,
02270        0,     0,   111,     0,     0,     0,   114,     0,     0,     0,
02271        0,     0,     0,     0,     0,     0,     0,    81,   327,  -621,
02272     -621,  -621,  -621,   332,   333,    81,     0,  -621,  -621,     0,
02273        0,     0,     0,   340,   341,     0,     0,     0,     0,     0,
02274        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02275        0,   111,     0,   111,     0,     0,   113,     0,     0,   111,
02276        0,   111,   382,     0,     0,     0,   343,   344,   345,   346,
02277      347,   348,   349,   350,   351,   352,     0,   114,     0,     0,
02278        0,   113,     0,     0,     0,     0,     0,     0,   113,   113,
02279        0,     0,   113,     0,     0,     0,    81,     0,     0,     0,
02280        0,     0,   114,     0,     0,     0,     0,     0,     0,   114,
02281      114,     0,     0,   114,     0,     0,     0,     0,     0,   113,
02282      113,    81,     0,     0,     0,     0,     0,     0,    81,    81,
02283        0,     0,    81,   113,     0,     0,     0,     0,     0,     0,
02284      114,   114,     0,     0,     0,     0,     0,     0,     0,     0,
02285        0,     0,     0,     0,   114,   382,     0,     0,     0,    81,
02286       81,   113,     0,     0,     0,     0,     0,     0,     0,     0,
02287        0,     0,   113,    81,     0,     0,     0,     0,   979,     0,
02288        0,     0,   114,     0,     0,     0,     0,     0,     0,     0,
02289        0,     0,     0,   114,     0,     0,     0,   975,     0,     0,
02290        0,    81,     0,     0,     0,     0,     0,     0,     0,     0,
02291        0,     0,    81,     0,     0,     0,     0,     0,     0,     0,
02292        0,   113,     0,   113,     0,     0,     0,     0,     0,   113,
02293        0,   113,     0,     0,     0,     0,     0,     0,     0,     0,
02294        0,     0,   114,     0,   114,     0,     0,     0,     0,     0,
02295      114,     0,   114,     0,     0,     0,     0,     0,     0,     0,
02296        0,    81,     0,    81,     0,     0,     0,     0,     0,    81,
02297        0,    81,  -620,     4,     0,     5,     6,     7,     8,     9,
02298        0,     0,     0,    10,    11,     0,     0,     0,    12,     0,
02299       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02300        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02301        0,    27,     0,     0,     0,     0,     0,    28,    29,    30,
02302       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02303        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02304        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02305        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02306        0,    49,    50,     0,    51,    52,     0,    53,     0,     0,
02307       54,    55,    56,    57,    58,    59,    60,    61,    62,  -602,
02308        0,     0,     0,     0,     0,     0,     0,  -602,  -602,  -602,
02309        0,     0,  -602,  -602,  -602,     0,  -602,     0,    63,    64,
02310       65,     0,   751,     0,     0,  -602,  -602,  -602,  -602,     0,
02311        0,  -620,     0,  -620,     0,     0,  -602,  -602,     0,  -602,
02312     -602,  -602,  -602,  -602,     0,     0,   327,   328,   329,   330,
02313      331,   332,   333,   334,   335,   336,   337,   338,   339,     0,
02314        0,   340,   341,     0,     0,     0,     0,  -602,  -602,  -602,
02315     -602,  -602,  -602,  -602,  -602,  -602,  -602,  -602,  -602,  -602,
02316        0,     0,  -602,  -602,  -602,     0,   755,  -602,     0,     0,
02317        0,     0,   342,  -602,   343,   344,   345,   346,   347,   348,
02318      349,   350,   351,   352,     0,     0,     0,  -602,     0,     0,
02319     -602,     0,  -106,  -602,  -602,  -602,  -602,  -602,  -602,  -602,
02320     -602,  -602,  -602,  -602,  -602,     0,     0,     0,     0,  -602,
02321     -602,  -602,  -602,  -602,  -505,     0,  -602,  -602,  -602,     0,
02322     -602,     0,  -505,  -505,  -505,     0,     0,  -505,  -505,  -505,
02323        0,  -505,     0,     0,     0,     0,     0,   698,     0,  -505,
02324        0,  -505,  -505,  -505,     0,     0,     0,     0,     0,     0,
02325        0,  -505,  -505,     0,  -505,  -505,  -505,  -505,  -505,     0,
02326        0,   327,   328,   329,   330,   331,   332,   333,   334,   335,
02327      336,   337,   338,   339,     0,     0,   340,   341,     0,     0,
02328        0,     0,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,
02329     -505,  -505,  -505,  -505,  -505,     0,     0,  -505,  -505,  -505,
02330        0,  -505,  -505,     0,     0,     0,     0,   342,  -505,   343,
02331      344,   345,   346,   347,   348,   349,   350,   351,   352,     0,
02332        0,     0,  -505,     0,     0,  -505,     0,  -505,  -505,  -505,
02333     -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,  -505,
02334        0,     0,     0,     0,     0,  -505,  -505,  -505,  -505,  -508,
02335        0,  -505,  -505,  -505,     0,  -505,     0,  -508,  -508,  -508,
02336        0,     0,  -508,  -508,  -508,     0,  -508,     0,     0,     0,
02337        0,     0,     0,     0,  -508,     0,  -508,  -508,  -508,     0,
02338        0,     0,     0,     0,     0,     0,  -508,  -508,     0,  -508,
02339     -508,  -508,  -508,  -508,     0,     0,   327,   328,   329,   330,
02340      331,   332,   333,   334,   335,   336,   337,   338,   339,     0,
02341        0,   340,   341,     0,     0,     0,     0,  -508,  -508,  -508,
02342     -508,  -508,  -508,  -508,  -508,  -508,  -508,  -508,  -508,  -508,
02343        0,     0,  -508,  -508,  -508,     0,  -508,  -508,     0,     0,
02344        0,     0,   342,  -508,   343,   344,   345,   346,   347,   348,
02345      349,   350,   351,   352,     0,     0,     0,  -508,     0,     0,
02346     -508,     0,  -508,  -508,  -508,  -508,  -508,  -508,  -508,  -508,
02347     -508,  -508,  -508,  -508,  -508,     0,     0,     0,     0,     0,
02348     -508,  -508,  -508,  -508,  -603,     0,  -508,  -508,  -508,     0,
02349     -508,     0,  -603,  -603,  -603,     0,     0,  -603,  -603,  -603,
02350        0,  -603,     0,     0,     0,     0,     0,     0,     0,     0,
02351     -603,  -603,  -603,  -603,     0,     0,     0,     0,     0,     0,
02352        0,  -603,  -603,     0,  -603,  -603,  -603,  -603,  -603,     0,
02353        0,   327,   328,   329,   330,   331,   332,   333,   334,   335,
02354      336,   337,  -621,  -621,     0,     0,   340,   341,     0,     0,
02355        0,     0,  -603,  -603,  -603,  -603,  -603,  -603,  -603,  -603,
02356     -603,  -603,  -603,  -603,  -603,     0,     0,  -603,  -603,  -603,
02357        0,     0,  -603,     0,     0,     0,     0,     0,  -603,   343,
02358      344,   345,   346,   347,   348,   349,   350,   351,   352,     0,
02359        0,     0,  -603,     0,     0,  -603,     0,     0,  -603,  -603,
02360     -603,  -603,  -603,  -603,  -603,  -603,  -603,  -603,  -603,  -603,
02361        0,     0,     0,     0,  -603,  -603,  -603,  -603,  -603,  -604,
02362        0,  -603,  -603,  -603,     0,  -603,     0,  -604,  -604,  -604,
02363        0,     0,  -604,  -604,  -604,     0,  -604,     0,     0,     0,
02364        0,     0,     0,     0,     0,  -604,  -604,  -604,  -604,     0,
02365        0,     0,     0,     0,     0,     0,  -604,  -604,     0,  -604,
02366     -604,  -604,  -604,  -604,     0,     0,   327,   328,   329,   330,
02367      331,   332,   333,   334,     0,   336,   337,     0,     0,     0,
02368        0,   340,   341,     0,     0,     0,     0,  -604,  -604,  -604,
02369     -604,  -604,  -604,  -604,  -604,  -604,  -604,  -604,  -604,  -604,
02370        0,     0,  -604,  -604,  -604,     0,     0,  -604,     0,     0,
02371        0,     0,     0,  -604,   343,   344,   345,   346,   347,   348,
02372      349,   350,   351,   352,     0,     0,     0,  -604,     0,     0,
02373     -604,     0,     0,  -604,  -604,  -604,  -604,  -604,  -604,  -604,
02374     -604,  -604,  -604,  -604,  -604,     0,     0,     0,     0,  -604,
02375     -604,  -604,  -604,  -604,  -294,     0,  -604,  -604,  -604,     0,
02376     -604,     0,  -294,  -294,  -294,     0,     0,  -294,  -294,  -294,
02377        0,  -294,     0,     0,     0,     0,     0,     0,     0,     0,
02378        0,  -294,  -294,  -294,     0,     0,     0,     0,     0,     0,
02379        0,  -294,  -294,     0,  -294,  -294,  -294,  -294,  -294,     0,
02380        0,   327,   328,   329,   330,   331,   332,   333,     0,     0,
02381      336,   337,     0,     0,     0,     0,   340,   341,     0,     0,
02382        0,     0,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,
02383     -294,  -294,  -294,  -294,  -294,     0,     0,  -294,  -294,  -294,
02384        0,   756,  -294,     0,     0,     0,     0,     0,  -294,   343,
02385      344,   345,   346,   347,   348,   349,   350,   351,   352,     0,
02386        0,     0,  -294,     0,     0,  -294,     0,  -108,  -294,  -294,
02387     -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,
02388        0,     0,     0,     0,     0,  -294,  -294,  -294,  -294,  -432,
02389        0,  -294,  -294,  -294,     0,  -294,     0,  -432,  -432,  -432,
02390        0,     0,  -432,  -432,  -432,     0,  -432,     0,     0,     0,
02391        0,     0,     0,     0,     0,  -432,  -432,  -432,     0,     0,
02392        0,     0,     0,     0,     0,     0,  -432,  -432,     0,  -432,
02393     -432,  -432,  -432,  -432,     0,     0,     0,     0,     0,     0,
02394        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02395        0,     0,     0,     0,     0,     0,     0,  -432,  -432,  -432,
02396     -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,  -432,
02397        0,     0,  -432,  -432,  -432,     0,     0,  -432,     0,     0,
02398        0,     0,     0,  -432,     0,     0,     0,     0,     0,     0,
02399        0,     0,     0,     0,     0,     0,     0,  -432,     0,     0,
02400        0,     0,     0,  -432,     0,  -432,  -432,  -432,  -432,  -432,
02401     -432,  -432,  -432,  -432,  -432,     0,     0,     0,     0,  -432,
02402     -432,  -432,  -432,  -432,  -285,   227,  -432,  -432,  -432,     0,
02403     -432,     0,  -285,  -285,  -285,     0,     0,  -285,  -285,  -285,
02404        0,  -285,     0,     0,     0,     0,     0,     0,     0,     0,
02405        0,  -285,  -285,  -285,     0,     0,     0,     0,     0,     0,
02406        0,  -285,  -285,     0,  -285,  -285,  -285,  -285,  -285,     0,
02407        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02408        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02409        0,     0,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02410     -285,  -285,  -285,  -285,  -285,     0,     0,  -285,  -285,  -285,
02411        0,     0,  -285,     0,     0,     0,     0,     0,  -285,     0,
02412        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02413        0,     0,  -285,     0,     0,  -285,     0,     0,  -285,  -285,
02414     -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,  -285,
02415        0,     0,     0,     0,     0,  -285,  -285,  -285,  -285,  -422,
02416        0,  -285,  -285,  -285,     0,  -285,     0,  -422,  -422,  -422,
02417        0,     0,  -422,  -422,  -422,     0,  -422,     0,     0,     0,
02418        0,     0,     0,     0,     0,  -422,  -422,  -422,     0,     0,
02419        0,     0,     0,     0,     0,     0,  -422,  -422,     0,  -422,
02420     -422,  -422,  -422,  -422,     0,     0,     0,     0,     0,     0,
02421        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02422        0,     0,     0,     0,     0,     0,     0,  -422,  -422,  -422,
02423     -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,  -422,
02424        0,     0,  -422,  -422,  -422,     0,     0,  -422,     0,     0,
02425        0,     0,     0,  -422,     0,     0,     0,     0,     0,     0,
02426        0,     0,     0,     0,     0,     0,     0,  -422,     0,     0,
02427        0,     0,     0,  -422,     0,  -422,  -422,  -422,  -422,  -422,
02428     -422,  -422,  -422,  -422,  -422,     0,     0,     0,     0,  -422,
02429     -422,  -422,  -422,  -422,  -301,  -422,  -422,  -422,  -422,     0,
02430     -422,     0,  -301,  -301,  -301,     0,     0,  -301,  -301,  -301,
02431        0,  -301,     0,     0,     0,     0,     0,     0,     0,     0,
02432        0,  -301,  -301,     0,     0,     0,     0,     0,     0,     0,
02433        0,  -301,  -301,     0,  -301,  -301,  -301,  -301,  -301,     0,
02434        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02435        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02436        0,     0,  -301,  -301,  -301,  -301,  -301,  -301,  -301,  -301,
02437     -301,  -301,  -301,  -301,  -301,     0,     0,  -301,  -301,  -301,
02438        0,     0,  -301,     0,     0,     0,     0,     0,  -301,     0,
02439        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02440        0,     0,  -301,     0,     0,     0,     0,     0,  -301,     0,
02441     -301,  -301,  -301,  -301,  -301,  -301,  -301,  -301,  -301,  -301,
02442        0,     0,     0,     0,     0,  -301,  -301,  -301,  -301,  -602,
02443      224,  -301,  -301,  -301,     0,  -301,     0,  -602,  -602,  -602,
02444        0,     0,     0,  -602,  -602,     0,  -602,     0,     0,     0,
02445        0,     0,     0,     0,     0,  -602,     0,     0,     0,     0,
02446        0,     0,     0,     0,     0,     0,  -602,  -602,     0,  -602,
02447     -602,  -602,  -602,  -602,     0,     0,     0,     0,     0,     0,
02448        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02449        0,     0,     0,     0,     0,     0,     0,  -602,  -602,  -602,
02450     -602,  -602,  -602,  -602,  -602,  -602,  -602,  -602,  -602,  -602,
02451        0,     0,  -602,  -602,  -602,     0,   700,     0,     0,     0,
02452        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02453        0,     0,     0,     0,     0,     0,     0,  -602,     0,     0,
02454        0,     0,  -106,  -602,     0,  -602,  -602,  -602,  -602,  -602,
02455     -602,  -602,  -602,  -602,  -602,     0,     0,     0,     0,  -602,
02456     -602,  -602,  -602,   -97,  -294,     0,  -602,     0,  -602,     0,
02457     -602,     0,  -294,  -294,  -294,     0,     0,     0,  -294,  -294,
02458        0,  -294,     0,  -620,     0,     0,     0,     0,     0,     0,
02459        0,  -620,  -620,  -620,     0,     0,  -620,  -620,  -620,     0,
02460     -620,  -294,  -294,     0,  -294,  -294,  -294,  -294,  -294,  -620,
02461     -620,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02462     -620,  -620,     0,  -620,  -620,  -620,  -620,  -620,     0,     0,
02463        0,     0,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,
02464     -294,  -294,  -294,  -294,  -294,     0,     0,  -294,  -294,  -294,
02465        0,   701,     0,     0,     0,     0,     0,     0,     0,     0,
02466        0,     0,     0,     0,     0,     0,     0,     0,  -620,     0,
02467        0,     0,  -294,     0,     0,     0,     0,  -108,  -294,     0,
02468     -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,  -294,
02469        0,  -620,     0,     0,     0,  -294,  -294,  -294,   -99,     0,
02470        0,  -294,     0,  -294,     0,  -294,     0,     0,     0,     0,
02471        0,     0,     0,  -620,  -620,     0,  -620,     0,     0,   227,
02472     -620,     0,  -620,   248,  -620,     5,     6,     7,     8,     9,
02473     -620,  -620,  -620,    10,    11,     0,     0,  -620,    12,     0,
02474       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02475        0,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02476        0,    27,     0,     0,     0,     0,     0,    28,    29,   249,
02477       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02478        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02479        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02480        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02481        0,    49,    50,     0,    51,    52,     0,    53,     0,     0,
02482       54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
02483        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02484        0,     0,     0,     0,     0,     0,     0,     0,    63,    64,
02485       65,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02486        0,  -620,   248,  -620,     5,     6,     7,     8,     9,     0,
02487        0,  -620,    10,    11,     0,  -620,  -620,    12,     0,    13,
02488       14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
02489        0,    20,    21,    22,    23,    24,    25,    26,     0,     0,
02490       27,     0,     0,     0,     0,     0,    28,    29,   249,    31,
02491       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02492       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02493        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02494        0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
02495       49,    50,     0,    51,    52,     0,    53,     0,     0,    54,
02496       55,    56,    57,    58,    59,    60,    61,    62,     0,     0,
02497        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02498        0,     0,     0,     0,     0,     0,     0,    63,    64,    65,
02499        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02500     -620,   248,  -620,     5,     6,     7,     8,     9,     0,     0,
02501     -620,    10,    11,     0,     0,  -620,    12,  -620,    13,    14,
02502       15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
02503       20,    21,    22,    23,    24,    25,    26,     0,     0,    27,
02504        0,     0,     0,     0,     0,    28,    29,   249,    31,    32,
02505       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02506       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02507        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02508        0,     0,     0,     0,     0,     0,    48,     0,     0,    49,
02509       50,     0,    51,    52,     0,    53,     0,     0,    54,    55,
02510       56,    57,    58,    59,    60,    61,    62,     0,     0,     0,
02511        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02512        0,     0,     0,     0,     0,     0,    63,    64,    65,     0,
02513        0,     0,     0,     0,     0,     0,     0,     0,     0,  -620,
02514      248,  -620,     5,     6,     7,     8,     9,     0,     0,  -620,
02515       10,    11,     0,     0,  -620,    12,     0,    13,    14,    15,
02516       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02517       21,    22,    23,    24,    25,    26,     0,     0,    27,     0,
02518        0,     0,     0,     0,    28,    29,   249,    31,    32,    33,
02519       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02520        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02521        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02522        0,     0,     0,     0,     0,    48,     0,     0,    49,    50,
02523        0,    51,    52,     0,    53,     0,     0,    54,    55,    56,
02524       57,    58,    59,    60,    61,    62,     0,     0,     0,     0,
02525        0,     0,     0,   248,     0,     5,     6,     7,     8,     9,
02526        0,  -620,  -620,    10,    11,    63,    64,    65,    12,     0,
02527       13,    14,    15,    16,    17,    18,    19,     0,  -620,     0,
02528     -620,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02529        0,    27,     0,     0,     0,     0,     0,    28,    29,   249,
02530       31,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02531        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02532        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02533        0,     0,     0,     0,     0,     0,     0,     0,    48,     0,
02534        0,    49,    50,     0,    51,    52,     0,    53,     0,     0,
02535       54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
02536        0,     0,     0,     0,     0,     0,   248,     0,     5,     6,
02537        7,     8,     9,     0,     0,     0,    10,    11,    63,    64,
02538       65,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02539        0,  -620,     0,  -620,     0,    20,    21,    22,    23,    24,
02540       25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
02541       28,    29,   249,    31,    32,    33,    34,    35,    36,    37,
02542       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02543        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02544        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02545        0,    48,     0,     0,   250,    50,     0,    51,    52,     0,
02546       53,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02547       61,    62,     0,     0,     0,     0,     0,     0,     0,     0,
02548        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02549        0,    63,    64,    65,     0,     0,     0,     0,     0,     0,
02550        0,     0,  -620,     0,  -620,   248,  -620,     5,     6,     7,
02551        8,     9,     0,     0,     0,    10,    11,     0,     0,     0,
02552       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02553        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02554       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02555       29,   249,    31,    32,    33,    34,    35,    36,    37,    38,
02556       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02557       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02558        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02559       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02560        0,     0,    54,    55,    56,    57,    58,    59,    60,    61,
02561       62,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02562        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02563       63,    64,    65,     0,     0,     0,     0,     0,     0,     0,
02564        0,  -620,     0,  -620,   248,  -620,     5,     6,     7,     8,
02565        9,     0,     0,     0,    10,    11,     0,     0,     0,    12,
02566        0,    13,    14,    15,    16,    17,    18,    19,     0,     0,
02567        0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
02568        0,     0,    27,     0,     0,     0,     0,     0,    28,    29,
02569      249,    31,    32,    33,    34,    35,    36,    37,    38,    39,
02570       40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
02571       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02572        0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
02573        0,     0,    49,    50,     0,    51,    52,     0,    53,     0,
02574        0,    54,    55,    56,    57,    58,    59,    60,    61,    62,
02575        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02576        0,     0,     0,     0,     0,     0,     0,     0,     0,    63,
02577       64,    65,     0,     0,  -620,     4,     0,     5,     6,     7,
02578        8,     9,  -620,     0,  -620,    10,    11,     0,     0,     0,
02579       12,     0,    13,    14,    15,    16,    17,    18,    19,     0,
02580        0,     0,     0,     0,    20,    21,    22,    23,    24,    25,
02581       26,     0,     0,    27,     0,     0,     0,     0,     0,    28,
02582       29,    30,    31,    32,    33,    34,    35,    36,    37,    38,
02583       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02584       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02585        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02586       48,     0,     0,    49,    50,     0,    51,    52,     0,    53,
02587        0,     0,    54,    55,    56,    57,    58,    59,    60,    61,
02588       62,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02589        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02590       63,    64,    65,     0,     0,  -620,     0,     0,     0,     0,
02591        0,     0,     0,  -620,   248,  -620,     5,     6,     7,     8,
02592        9,     0,     0,  -620,    10,    11,     0,     0,     0,    12,
02593        0,    13,    14,    15,    16,    17,    18,    19,     0,     0,
02594        0,     0,     0,    20,    21,    22,    23,    24,    25,    26,
02595        0,     0,    27,     0,     0,     0,     0,     0,    28,    29,
02596      249,    31,    32,    33,    34,    35,    36,    37,    38,    39,
02597       40,     0,    41,    42,     0,    43,    44,    45,     0,    46,
02598       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02599        0,     0,     0,     0,     0,     0,     0,     0,     0,    48,
02600        0,     0,    49,    50,     0,    51,    52,     0,    53,     0,
02601        0,    54,    55,    56,    57,    58,    59,    60,    61,    62,
02602        0,     0,     0,     0,     0,     0,     0,   248,     0,     5,
02603        6,     7,     8,     9,     0,     0,     0,    10,    11,    63,
02604       64,    65,    12,     0,    13,    14,    15,    16,    17,    18,
02605       19,     0,  -620,     0,  -620,     0,    20,    21,    22,    23,
02606       24,    25,    26,     0,     0,    27,     0,     0,     0,     0,
02607        0,    28,    29,   249,    31,    32,    33,    34,    35,    36,
02608       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02609       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02610        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02611        0,     0,    48,     0,     0,    49,    50,     0,    51,    52,
02612        0,    53,     0,     0,    54,    55,    56,    57,    58,    59,
02613       60,    61,    62,     0,  -620,     0,     0,     0,     0,     0,
02614        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02615       10,    11,    63,    64,    65,    12,     0,    13,    14,    15,
02616       16,    17,    18,    19,     0,  -620,     0,  -620,     0,    20,
02617       21,    22,    23,    24,    25,    26,     0,     0,   200,     0,
02618        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02619       34,    35,    36,    37,    38,    39,    40,   201,    41,    42,
02620        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02621        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02622        0,     0,     0,     0,     0,   202,     0,     0,   203,    50,
02623        0,    51,    52,     0,   204,   205,   206,    54,    55,    56,
02624       57,    58,    59,    60,    61,    62,     0,     0,     0,     0,
02625        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02626        0,     0,     0,    10,    11,    63,   207,    65,    12,     0,
02627       13,    14,    15,    16,    17,    18,    19,     0,     0,     0,
02628      231,     0,    20,    21,    22,    23,    24,    25,    26,     0,
02629        0,    27,     0,     0,     0,     0,     0,     0,    29,     0,
02630        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02631        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02632        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02633        0,     0,     0,     0,     0,     0,     0,     0,   202,     0,
02634        0,   203,    50,     0,    51,    52,     0,     0,     0,     0,
02635       54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
02636        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02637        7,     0,     9,     0,     0,     0,    10,    11,    63,    64,
02638       65,    12,     0,    13,    14,    15,    16,    17,    18,    19,
02639        0,   302,     0,   303,     0,    20,    21,    22,    23,    24,
02640       25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
02641        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02642       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02643        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02644        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02645        0,   202,     0,     0,   203,    50,     0,    51,    52,     0,
02646        0,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02647       61,    62,     0,     0,     0,     0,     0,     0,     0,     0,
02648        0,     5,     6,     7,     8,     9,     0,     0,     0,    10,
02649       11,    63,    64,    65,    12,     0,    13,    14,    15,    16,
02650       17,    18,    19,     0,     0,     0,   231,     0,    20,    21,
02651       22,    23,    24,    25,    26,     0,     0,    27,     0,     0,
02652        0,     0,     0,    28,    29,    30,    31,    32,    33,    34,
02653       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02654       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02655        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02656        0,     0,     0,     0,    48,     0,     0,    49,    50,     0,
02657       51,    52,     0,    53,     0,     0,    54,    55,    56,    57,
02658       58,    59,    60,    61,    62,     0,     0,     0,     0,     0,
02659        0,     0,     0,     0,     5,     6,     7,     8,     9,     0,
02660        0,     0,    10,    11,    63,    64,    65,    12,     0,    13,
02661       14,    15,    16,    17,    18,    19,     0,   498,     0,     0,
02662        0,    20,    21,    22,    23,    24,    25,    26,     0,     0,
02663       27,     0,     0,     0,     0,     0,    28,    29,   249,    31,
02664       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02665       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02666        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02667        0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
02668       49,    50,     0,    51,    52,     0,    53,     0,     0,    54,
02669       55,    56,    57,    58,    59,    60,    61,    62,     0,     0,
02670        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02671        0,     0,     0,     0,     0,     0,     0,    63,    64,    65,
02672        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02673      498,   118,   119,   120,   121,   122,   123,   124,   125,   126,
02674      127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
02675      137,   138,   139,   140,   141,     0,     0,     0,   142,   143,
02676      144,   384,   385,   386,   387,   149,   150,   151,     0,     0,
02677        0,     0,     0,   152,   153,   154,   155,   388,   389,   390,
02678      391,   160,    37,    38,   392,    40,     0,     0,     0,     0,
02679        0,     0,     0,     0,   162,   163,   164,   165,   166,   167,
02680      168,   169,   170,     0,     0,   171,   172,     0,     0,   173,
02681      174,   175,   176,     0,     0,     0,     0,     0,     0,     0,
02682        0,     0,     0,   177,   178,     0,     0,     0,     0,     0,
02683        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02684        0,     0,     0,     0,   179,   180,   181,   182,   183,   184,
02685      185,   186,   187,   188,     0,   189,   190,     0,     0,     0,
02686        0,     0,     0,   191,   393,   118,   119,   120,   121,   122,
02687      123,   124,   125,   126,   127,   128,   129,   130,   131,   132,
02688      133,   134,   135,   136,   137,   138,   139,   140,   141,     0,
02689        0,     0,   142,   143,   144,   145,   146,   147,   148,   149,
02690      150,   151,     0,     0,     0,     0,     0,   152,   153,   154,
02691      155,   156,   157,   158,   159,   160,   280,   281,   161,   282,
02692        0,     0,     0,     0,     0,     0,     0,     0,   162,   163,
02693      164,   165,   166,   167,   168,   169,   170,     0,     0,   171,
02694      172,     0,     0,   173,   174,   175,   176,     0,     0,     0,
02695        0,     0,     0,     0,     0,     0,     0,   177,   178,     0,
02696        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02697        0,     0,     0,     0,     0,     0,     0,     0,   179,   180,
02698      181,   182,   183,   184,   185,   186,   187,   188,     0,   189,
02699      190,     0,     0,     0,     0,     0,     0,   191,   118,   119,
02700      120,   121,   122,   123,   124,   125,   126,   127,   128,   129,
02701      130,   131,   132,   133,   134,   135,   136,   137,   138,   139,
02702      140,   141,     0,     0,     0,   142,   143,   144,   145,   146,
02703      147,   148,   149,   150,   151,     0,     0,     0,     0,     0,
02704      152,   153,   154,   155,   156,   157,   158,   159,   160,   233,
02705        0,   161,     0,     0,     0,     0,     0,     0,     0,     0,
02706        0,   162,   163,   164,   165,   166,   167,   168,   169,   170,
02707        0,     0,   171,   172,     0,     0,   173,   174,   175,   176,
02708        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02709      177,   178,     0,     0,    55,     0,     0,     0,     0,     0,
02710        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02711        0,   179,   180,   181,   182,   183,   184,   185,   186,   187,
02712      188,     0,   189,   190,     0,     0,     0,     0,     0,     0,
02713      191,   118,   119,   120,   121,   122,   123,   124,   125,   126,
02714      127,   128,   129,   130,   131,   132,   133,   134,   135,   136,
02715      137,   138,   139,   140,   141,     0,     0,     0,   142,   143,
02716      144,   145,   146,   147,   148,   149,   150,   151,     0,     0,
02717        0,     0,     0,   152,   153,   154,   155,   156,   157,   158,
02718      159,   160,     0,     0,   161,     0,     0,     0,     0,     0,
02719        0,     0,     0,     0,   162,   163,   164,   165,   166,   167,
02720      168,   169,   170,     0,     0,   171,   172,     0,     0,   173,
02721      174,   175,   176,     0,     0,     0,     0,     0,     0,     0,
02722        0,     0,     0,   177,   178,     0,     0,    55,     0,     0,
02723        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02724        0,     0,     0,     0,   179,   180,   181,   182,   183,   184,
02725      185,   186,   187,   188,     0,   189,   190,     0,     0,     0,
02726        0,     0,     0,   191,   118,   119,   120,   121,   122,   123,
02727      124,   125,   126,   127,   128,   129,   130,   131,   132,   133,
02728      134,   135,   136,   137,   138,   139,   140,   141,     0,     0,
02729        0,   142,   143,   144,   145,   146,   147,   148,   149,   150,
02730      151,     0,     0,     0,     0,     0,   152,   153,   154,   155,
02731      156,   157,   158,   159,   160,     0,     0,   161,     0,     0,
02732        0,     0,     0,     0,     0,     0,     0,   162,   163,   164,
02733      165,   166,   167,   168,   169,   170,     0,     0,   171,   172,
02734        0,     0,   173,   174,   175,   176,     0,     0,     0,     0,
02735        0,     0,     0,     0,     0,     0,   177,   178,     0,     0,
02736        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02737        0,     0,     0,     0,     0,     0,     0,   179,   180,   181,
02738      182,   183,   184,   185,   186,   187,   188,     0,   189,   190,
02739        5,     6,     7,     0,     9,     0,   191,     0,    10,    11,
02740        0,     0,     0,    12,     0,    13,    14,    15,   238,   239,
02741       18,    19,     0,     0,     0,     0,     0,   240,   241,   242,
02742       23,    24,    25,    26,     0,     0,   200,     0,     0,     0,
02743        0,     0,     0,   268,     0,     0,    32,    33,    34,    35,
02744       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02745       44,    45,     0,     0,     0,     0,     0,     0,     0,     0,
02746        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02747        0,     0,     0,   269,     0,     0,   203,    50,     0,    51,
02748       52,     0,     0,     0,     0,    54,    55,    56,    57,    58,
02749       59,    60,    61,    62,     0,     0,     0,     0,     0,     5,
02750        6,     7,     0,     9,     0,     0,     0,    10,    11,     0,
02751        0,     0,    12,   270,    13,    14,    15,   238,   239,    18,
02752       19,   271,     0,     0,     0,     0,   240,   241,   242,    23,
02753       24,    25,    26,     0,     0,   200,     0,     0,     0,     0,
02754        0,     0,   268,     0,     0,    32,    33,    34,    35,    36,
02755       37,    38,    39,    40,     0,    41,    42,     0,    43,    44,
02756       45,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02757        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02758        0,     0,   269,     0,     0,   203,    50,     0,    51,    52,
02759        0,     0,     0,     0,    54,    55,    56,    57,    58,    59,
02760       60,    61,    62,     0,     0,     0,     0,     0,     5,     6,
02761        7,     8,     9,     0,     0,     0,    10,    11,     0,     0,
02762        0,    12,   270,    13,    14,    15,    16,    17,    18,    19,
02763      518,     0,     0,     0,     0,    20,    21,    22,    23,    24,
02764       25,    26,     0,     0,    27,     0,     0,     0,     0,     0,
02765       28,    29,    30,    31,    32,    33,    34,    35,    36,    37,
02766       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02767        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02768        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02769        0,    48,     0,     0,    49,    50,     0,    51,    52,     0,
02770       53,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02771       61,    62,     0,     0,     0,     0,     0,     0,     0,     0,
02772        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02773       11,    63,    64,    65,    12,     0,    13,    14,    15,    16,
02774       17,    18,    19,     0,     0,     0,     0,     0,    20,    21,
02775       22,    23,    24,    25,    26,     0,     0,   200,     0,     0,
02776        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02777       35,    36,    37,    38,    39,    40,   201,    41,    42,     0,
02778       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02779        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02780        0,     0,     0,     0,   202,     0,     0,   203,    50,     0,
02781       51,    52,     0,   204,   205,   206,    54,    55,    56,    57,
02782       58,    59,    60,    61,    62,     0,     0,     0,     0,     0,
02783        0,     0,     0,     0,     5,     6,     7,     8,     9,     0,
02784        0,     0,    10,    11,    63,   207,    65,    12,     0,    13,
02785       14,    15,    16,    17,    18,    19,     0,     0,     0,     0,
02786        0,    20,    21,    22,    23,    24,    25,    26,     0,     0,
02787       27,     0,     0,     0,     0,     0,    28,    29,     0,    31,
02788       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02789       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02790        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02791        0,     0,     0,     0,     0,     0,     0,    48,     0,     0,
02792       49,    50,     0,    51,    52,     0,    53,     0,     0,    54,
02793       55,    56,    57,    58,    59,    60,    61,    62,     0,     0,
02794        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02795        0,     9,     0,     0,     0,    10,    11,    63,    64,    65,
02796       12,     0,    13,    14,    15,   238,   239,    18,    19,     0,
02797        0,     0,     0,     0,   240,   241,   242,    23,    24,    25,
02798       26,     0,     0,   200,     0,     0,     0,     0,     0,     0,
02799       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02800       39,    40,   201,    41,    42,     0,    43,    44,    45,     0,
02801       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02802        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02803      202,     0,     0,   203,    50,     0,    51,    52,     0,   608,
02804      205,   206,    54,    55,    56,    57,    58,    59,    60,    61,
02805       62,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02806        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02807       63,   207,    65,    12,     0,    13,    14,    15,   238,   239,
02808       18,    19,     0,     0,     0,     0,     0,   240,   241,   242,
02809       23,    24,    25,    26,     0,     0,   200,     0,     0,     0,
02810        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02811       36,    37,    38,    39,    40,   201,    41,    42,     0,    43,
02812       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02813        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02814        0,     0,     0,   202,     0,     0,   203,    50,     0,    51,
02815       52,     0,   204,   205,     0,    54,    55,    56,    57,    58,
02816       59,    60,    61,    62,     0,     0,     0,     0,     0,     0,
02817        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02818        0,    10,    11,    63,   207,    65,    12,     0,    13,    14,
02819       15,   238,   239,    18,    19,     0,     0,     0,     0,     0,
02820      240,   241,   242,    23,    24,    25,    26,     0,     0,   200,
02821        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02822       33,    34,    35,    36,    37,    38,    39,    40,   201,    41,
02823       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02824        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02825        0,     0,     0,     0,     0,     0,   202,     0,     0,   203,
02826       50,     0,    51,    52,     0,     0,   205,   206,    54,    55,
02827       56,    57,    58,    59,    60,    61,    62,     0,     0,     0,
02828        0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02829        9,     0,     0,     0,    10,    11,    63,   207,    65,    12,
02830        0,    13,    14,    15,   238,   239,    18,    19,     0,     0,
02831        0,     0,     0,   240,   241,   242,    23,    24,    25,    26,
02832        0,     0,   200,     0,     0,     0,     0,     0,     0,    29,
02833        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02834       40,   201,    41,    42,     0,    43,    44,    45,     0,    46,
02835       47,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02836        0,     0,     0,     0,     0,     0,     0,     0,     0,   202,
02837        0,     0,   203,    50,     0,    51,    52,     0,   608,   205,
02838        0,    54,    55,    56,    57,    58,    59,    60,    61,    62,
02839        0,     0,     0,     0,     0,     0,     0,     0,     0,     5,
02840        6,     7,     0,     9,     0,     0,     0,    10,    11,    63,
02841      207,    65,    12,     0,    13,    14,    15,   238,   239,    18,
02842       19,     0,     0,     0,     0,     0,   240,   241,   242,    23,
02843       24,    25,    26,     0,     0,   200,     0,     0,     0,     0,
02844        0,     0,    29,     0,     0,    32,    33,    34,    35,    36,
02845       37,    38,    39,    40,   201,    41,    42,     0,    43,    44,
02846       45,     0,    46,    47,     0,     0,     0,     0,     0,     0,
02847        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02848        0,     0,   202,     0,     0,   203,    50,     0,    51,    52,
02849        0,     0,   205,     0,    54,    55,    56,    57,    58,    59,
02850       60,    61,    62,     0,     0,     0,     0,     0,     0,     0,
02851        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02852       10,    11,    63,   207,    65,    12,     0,    13,    14,    15,
02853       16,    17,    18,    19,     0,     0,     0,     0,     0,    20,
02854       21,    22,    23,    24,    25,    26,     0,     0,   200,     0,
02855        0,     0,     0,     0,     0,    29,     0,     0,    32,    33,
02856       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02857        0,    43,    44,    45,     0,    46,    47,     0,     0,     0,
02858        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02859        0,     0,     0,     0,     0,   202,     0,     0,   203,    50,
02860        0,    51,    52,     0,   512,     0,     0,    54,    55,    56,
02861       57,    58,    59,    60,    61,    62,     0,     0,     0,     0,
02862        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02863        0,     0,     0,    10,    11,    63,   207,    65,    12,     0,
02864       13,    14,    15,   238,   239,    18,    19,     0,     0,     0,
02865        0,     0,   240,   241,   242,    23,    24,    25,    26,     0,
02866        0,   200,     0,     0,     0,     0,     0,     0,    29,     0,
02867        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02868        0,    41,    42,     0,    43,    44,    45,     0,    46,    47,
02869        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02870        0,     0,     0,     0,     0,     0,     0,     0,   202,     0,
02871        0,   203,    50,     0,    51,    52,     0,   204,     0,     0,
02872       54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
02873        0,     0,     0,     0,     0,     0,     0,     0,     5,     6,
02874        7,     0,     9,     0,     0,     0,    10,    11,    63,   207,
02875       65,    12,     0,    13,    14,    15,   238,   239,    18,    19,
02876        0,     0,     0,     0,     0,   240,   241,   242,    23,    24,
02877       25,    26,     0,     0,   200,     0,     0,     0,     0,     0,
02878        0,    29,     0,     0,    32,    33,    34,    35,    36,    37,
02879       38,    39,    40,     0,    41,    42,     0,    43,    44,    45,
02880        0,    46,    47,     0,     0,     0,     0,     0,     0,     0,
02881        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02882        0,   202,     0,     0,   203,    50,     0,    51,    52,     0,
02883      817,     0,     0,    54,    55,    56,    57,    58,    59,    60,
02884       61,    62,     0,     0,     0,     0,     0,     0,     0,     0,
02885        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02886       11,    63,   207,    65,    12,     0,    13,    14,    15,   238,
02887      239,    18,    19,     0,     0,     0,     0,     0,   240,   241,
02888      242,    23,    24,    25,    26,     0,     0,   200,     0,     0,
02889        0,     0,     0,     0,    29,     0,     0,    32,    33,    34,
02890       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
02891       43,    44,    45,     0,    46,    47,     0,     0,     0,     0,
02892        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02893        0,     0,     0,     0,   202,     0,     0,   203,    50,     0,
02894       51,    52,     0,   512,     0,     0,    54,    55,    56,    57,
02895       58,    59,    60,    61,    62,     0,     0,     0,     0,     0,
02896        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02897        0,     0,    10,    11,    63,   207,    65,    12,     0,    13,
02898       14,    15,   238,   239,    18,    19,     0,     0,     0,     0,
02899        0,   240,   241,   242,    23,    24,    25,    26,     0,     0,
02900      200,     0,     0,     0,     0,     0,     0,    29,     0,     0,
02901       32,    33,    34,    35,    36,    37,    38,    39,    40,     0,
02902       41,    42,     0,    43,    44,    45,     0,    46,    47,     0,
02903        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02904        0,     0,     0,     0,     0,     0,     0,   202,     0,     0,
02905      203,    50,     0,    51,    52,     0,   608,     0,     0,    54,
02906       55,    56,    57,    58,    59,    60,    61,    62,     0,     0,
02907        0,     0,     0,     0,     0,     0,     0,     5,     6,     7,
02908        0,     9,     0,     0,     0,    10,    11,    63,   207,    65,
02909       12,     0,    13,    14,    15,   238,   239,    18,    19,     0,
02910        0,     0,     0,     0,   240,   241,   242,    23,    24,    25,
02911       26,     0,     0,   200,     0,     0,     0,     0,     0,     0,
02912       29,     0,     0,    32,    33,    34,    35,    36,    37,    38,
02913       39,    40,     0,    41,    42,     0,    43,    44,    45,     0,
02914       46,    47,     0,     0,     0,     0,     0,     0,     0,     0,
02915        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02916      202,     0,     0,   203,    50,     0,    51,    52,     0,     0,
02917        0,     0,    54,    55,    56,    57,    58,    59,    60,    61,
02918       62,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02919        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
02920       63,   207,    65,    12,     0,    13,    14,    15,    16,    17,
02921       18,    19,     0,     0,     0,     0,     0,    20,    21,    22,
02922       23,    24,    25,    26,     0,     0,   200,     0,     0,     0,
02923        0,     0,     0,    29,     0,     0,    32,    33,    34,    35,
02924       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
02925       44,    45,     0,    46,    47,     0,     0,     0,     0,     0,
02926        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02927        0,     0,     0,   202,     0,     0,   203,    50,     0,    51,
02928       52,     0,     0,     0,     0,    54,    55,    56,    57,    58,
02929       59,    60,    61,    62,     0,     0,     0,     0,     0,     0,
02930        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02931        0,    10,    11,    63,   207,    65,    12,     0,    13,    14,
02932       15,    16,    17,    18,    19,     0,     0,     0,     0,     0,
02933       20,    21,    22,    23,    24,    25,    26,     0,     0,    27,
02934        0,     0,     0,     0,     0,     0,    29,     0,     0,    32,
02935       33,    34,    35,    36,    37,    38,    39,    40,     0,    41,
02936       42,     0,    43,    44,    45,     0,    46,    47,     0,     0,
02937        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02938        0,     0,     0,     0,     0,     0,   202,     0,     0,   203,
02939       50,     0,    51,    52,     0,     0,     0,     0,    54,    55,
02940       56,    57,    58,    59,    60,    61,    62,     0,     0,     0,
02941        0,     0,     0,     0,     0,     0,     5,     6,     7,     0,
02942        9,     0,     0,     0,    10,    11,    63,    64,    65,    12,
02943        0,    13,    14,    15,   238,   239,    18,    19,     0,     0,
02944        0,     0,     0,   240,   241,   242,    23,    24,    25,    26,
02945        0,     0,   200,     0,     0,     0,     0,     0,     0,   268,
02946        0,     0,    32,    33,    34,    35,    36,    37,    38,    39,
02947       40,     0,    41,    42,     0,    43,    44,    45,     0,     0,
02948        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02949        0,     0,     0,     0,     0,     0,     0,     0,     0,   269,
02950        0,     0,   323,    50,     0,    51,    52,     0,   324,     0,
02951        0,    54,    55,    56,    57,    58,    59,    60,    61,    62,
02952        0,     0,     0,     0,     0,     5,     6,     7,     0,     9,
02953        0,     0,     0,    10,    11,     0,     0,     0,    12,   270,
02954       13,    14,    15,   238,   239,    18,    19,     0,     0,     0,
02955        0,     0,   240,   241,   242,    23,    24,    25,    26,     0,
02956        0,   200,     0,     0,     0,     0,     0,     0,   268,     0,
02957        0,    32,    33,    34,    35,    36,    37,    38,    39,    40,
02958        0,    41,    42,     0,    43,    44,    45,     0,     0,     0,
02959        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02960        0,     0,     0,     0,     0,     0,     0,     0,   365,     0,
02961        0,    49,    50,     0,    51,    52,     0,    53,     0,     0,
02962       54,    55,    56,    57,    58,    59,    60,    61,    62,     0,
02963        0,     0,     0,     0,     5,     6,     7,     0,     9,     0,
02964        0,     0,    10,    11,     0,     0,     0,    12,   270,    13,
02965       14,    15,   238,   239,    18,    19,     0,     0,     0,     0,
02966        0,   240,   241,   242,    23,    24,    25,    26,     0,     0,
02967      200,     0,     0,     0,     0,     0,     0,   268,     0,     0,
02968       32,    33,    34,   373,    36,    37,    38,   374,    40,     0,
02969       41,    42,     0,    43,    44,    45,     0,     0,     0,     0,
02970        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02971        0,     0,     0,     0,   375,     0,     0,   376,     0,     0,
02972      203,    50,     0,    51,    52,     0,     0,     0,     0,    54,
02973       55,    56,    57,    58,    59,    60,    61,    62,     0,     0,
02974        0,     0,     0,     5,     6,     7,     0,     9,     0,     0,
02975        0,    10,    11,     0,     0,     0,    12,   270,    13,    14,
02976       15,   238,   239,    18,    19,     0,     0,     0,     0,     0,
02977      240,   241,   242,    23,    24,    25,    26,     0,     0,   200,
02978        0,     0,     0,     0,     0,     0,   268,     0,     0,    32,
02979       33,    34,   373,    36,    37,    38,   374,    40,     0,    41,
02980       42,     0,    43,    44,    45,     0,     0,     0,     0,     0,
02981        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02982        0,     0,     0,     0,     0,     0,   376,     0,     0,   203,
02983       50,     0,    51,    52,     0,     0,     0,     0,    54,    55,
02984       56,    57,    58,    59,    60,    61,    62,     0,     0,     0,
02985        0,     0,     5,     6,     7,     0,     9,     0,     0,     0,
02986       10,    11,     0,     0,     0,    12,   270,    13,    14,    15,
02987      238,   239,    18,    19,     0,     0,     0,     0,     0,   240,
02988      241,   242,    23,    24,    25,    26,     0,     0,   200,     0,
02989        0,     0,     0,     0,     0,   268,     0,     0,    32,    33,
02990       34,    35,    36,    37,    38,    39,    40,     0,    41,    42,
02991        0,    43,    44,    45,     0,     0,     0,     0,     0,     0,
02992        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
02993        0,     0,     0,     0,     0,   269,     0,     0,   323,    50,
02994        0,    51,    52,     0,     0,     0,     0,    54,    55,    56,
02995       57,    58,    59,    60,    61,    62,     0,     0,     0,     0,
02996        0,     5,     6,     7,     0,     9,     0,     0,     0,    10,
02997       11,     0,     0,     0,    12,   270,    13,    14,    15,   238,
02998      239,    18,    19,     0,     0,     0,     0,     0,   240,   241,
02999      242,    23,    24,    25,    26,     0,     0,   200,     0,     0,
03000        0,     0,     0,     0,   268,     0,     0,    32,    33,    34,
03001       35,    36,    37,    38,    39,    40,     0,    41,    42,     0,
03002       43,    44,    45,     0,     0,     0,     0,     0,     0,     0,
03003        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03004        0,     0,     0,     0,   894,     0,     0,   203,    50,     0,
03005       51,    52,     0,     0,     0,     0,    54,    55,    56,    57,
03006       58,    59,    60,    61,    62,     0,     0,     0,     0,     0,
03007        5,     6,     7,     0,     9,     0,     0,     0,    10,    11,
03008        0,     0,     0,    12,   270,    13,    14,    15,   238,   239,
03009       18,    19,     0,     0,     0,     0,     0,   240,   241,   242,
03010       23,    24,    25,    26,     0,     0,   200,     0,     0,     0,
03011        0,     0,     0,   268,     0,     0,    32,    33,    34,    35,
03012       36,    37,    38,    39,    40,     0,    41,    42,     0,    43,
03013       44,    45,     0,     0,     0,     0,     0,     0,     0,     0,
03014        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03015        0,     0,     0,   974,     0,     0,   203,    50,     0,    51,
03016       52,     0,     0,     0,     0,    54,    55,    56,    57,    58,
03017       59,    60,    61,    62,     0,     0,     0,     0,     0,     0,
03018      561,   562,     0,     0,   563,     0,     0,     0,     0,     0,
03019        0,     0,     0,   270,   162,   163,   164,   165,   166,   167,
03020      168,   169,   170,     0,     0,   171,   172,     0,     0,   173,
03021      174,   175,   176,     0,     0,     0,     0,     0,     0,     0,
03022        0,     0,     0,   177,   178,     0,     0,     0,     0,     0,
03023        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03024        0,     0,     0,     0,   179,   180,   181,   182,   183,   184,
03025      185,   186,   187,   188,     0,   189,   190,   598,   562,     0,
03026        0,   599,     0,   191,     0,     0,     0,     0,     0,     0,
03027        0,   162,   163,   164,   165,   166,   167,   168,   169,   170,
03028        0,     0,   171,   172,     0,     0,   173,   174,   175,   176,
03029        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03030      177,   178,     0,     0,     0,     0,     0,     0,     0,     0,
03031        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03032        0,   179,   180,   181,   182,   183,   184,   185,   186,   187,
03033      188,     0,   189,   190,   612,   554,     0,     0,   613,     0,
03034      191,     0,     0,     0,     0,     0,     0,     0,   162,   163,
03035      164,   165,   166,   167,   168,   169,   170,     0,     0,   171,
03036      172,     0,     0,   173,   174,   175,   176,     0,     0,     0,
03037        0,     0,     0,     0,     0,     0,     0,   177,   178,     0,
03038        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03039        0,     0,     0,     0,     0,     0,     0,     0,   179,   180,
03040      181,   182,   183,   184,   185,   186,   187,   188,     0,   189,
03041      190,   615,   562,     0,     0,   616,     0,   191,     0,     0,
03042        0,     0,     0,     0,     0,   162,   163,   164,   165,   166,
03043      167,   168,   169,   170,     0,     0,   171,   172,     0,     0,
03044      173,   174,   175,   176,     0,     0,     0,     0,     0,     0,
03045        0,     0,     0,     0,   177,   178,     0,     0,     0,     0,
03046        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03047        0,     0,     0,     0,     0,   179,   180,   181,   182,   183,
03048      184,   185,   186,   187,   188,     0,   189,   190,   639,   554,
03049        0,     0,   640,     0,   191,     0,     0,     0,     0,     0,
03050        0,     0,   162,   163,   164,   165,   166,   167,   168,   169,
03051      170,     0,     0,   171,   172,     0,     0,   173,   174,   175,
03052      176,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03053        0,   177,   178,     0,     0,     0,     0,     0,     0,     0,
03054        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03055        0,     0,   179,   180,   181,   182,   183,   184,   185,   186,
03056      187,   188,     0,   189,   190,   642,   562,     0,     0,   643,
03057        0,   191,     0,     0,     0,     0,     0,     0,     0,   162,
03058      163,   164,   165,   166,   167,   168,   169,   170,     0,     0,
03059      171,   172,     0,     0,   173,   174,   175,   176,     0,     0,
03060        0,     0,     0,     0,     0,     0,     0,     0,   177,   178,
03061        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03062        0,     0,     0,     0,     0,     0,     0,     0,     0,   179,
03063      180,   181,   182,   183,   184,   185,   186,   187,   188,     0,
03064      189,   190,   727,   554,     0,     0,   728,     0,   191,     0,
03065        0,     0,     0,     0,     0,     0,   162,   163,   164,   165,
03066      166,   167,   168,   169,   170,     0,     0,   171,   172,     0,
03067        0,   173,   174,   175,   176,     0,     0,     0,     0,     0,
03068        0,     0,     0,     0,     0,   177,   178,     0,     0,     0,
03069        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03070        0,     0,     0,     0,     0,     0,   179,   180,   181,   182,
03071      183,   184,   185,   186,   187,   188,     0,   189,   190,   730,
03072      562,     0,     0,   731,     0,   191,     0,     0,     0,     0,
03073        0,     0,     0,   162,   163,   164,   165,   166,   167,   168,
03074      169,   170,     0,     0,   171,   172,     0,     0,   173,   174,
03075      175,   176,     0,     0,     0,     0,     0,     0,     0,     0,
03076        0,     0,   177,   178,     0,     0,     0,     0,     0,     0,
03077        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03078        0,     0,     0,   179,   180,   181,   182,   183,   184,   185,
03079      186,   187,   188,     0,   189,   190,   737,   554,     0,     0,
03080      738,     0,   191,     0,     0,     0,     0,     0,     0,     0,
03081      162,   163,   164,   165,   166,   167,   168,   169,   170,     0,
03082        0,   171,   172,     0,     0,   173,   174,   175,   176,     0,
03083        0,     0,     0,     0,     0,     0,     0,     0,     0,   177,
03084      178,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03085        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03086      179,   180,   181,   182,   183,   184,   185,   186,   187,   188,
03087        0,   189,   190,  1002,   554,     0,     0,  1003,     0,   191,
03088        0,     0,     0,     0,     0,     0,     0,   162,   163,   164,
03089      165,   166,   167,   168,   169,   170,     0,     0,   171,   172,
03090        0,     0,   173,   174,   175,   176,     0,     0,     0,     0,
03091        0,     0,     0,     0,     0,     0,   177,   178,     0,     0,
03092        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03093        0,     0,     0,     0,     0,     0,     0,   179,   180,   181,
03094      182,   183,   184,   185,   186,   187,   188,     0,   189,   190,
03095     1037,   554,     0,     0,  1038,     0,   191,     0,     0,     0,
03096        0,     0,     0,     0,   162,   163,   164,   165,   166,   167,
03097      168,   169,   170,     0,     0,   171,   172,     0,     0,   173,
03098      174,   175,   176,     0,     0,     0,     0,     0,     0,     0,
03099        0,     0,     0,   177,   178,     0,     0,     0,     0,     0,
03100        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03101        0,     0,     0,     0,   179,   180,   181,   182,   183,   184,
03102      185,   186,   187,   188,     0,   189,   190,  1040,   562,     0,
03103        0,  1041,     0,   191,     0,     0,     0,     0,     0,     0,
03104        0,   162,   163,   164,   165,   166,   167,   168,   169,   170,
03105        0,     0,   171,   172,     0,     0,   173,   174,   175,   176,
03106        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03107      177,   178,     0,     0,     0,     0,     0,     0,     0,     0,
03108        0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
03109        0,   179,   180,   181,   182,   183,   184,   185,   186,   187,
03110      188,     0,   189,   190,     0,     0,     0,     0,     0,     0,
03111      191
03112 };
03113 
03114 #define yypact_value_is_default(yystate) \
03115   ((yystate) == (-808))
03116 
03117 #define yytable_value_is_error(yytable_value) \
03118   ((yytable_value) == (-621))
03119 
03120 static const yytype_int16 yycheck[] =
03121 {
03122        2,    87,    55,    96,    90,   353,    79,   355,   472,    16,
03123       17,    22,   359,    20,   354,   326,   614,     2,     8,     4,
03124       16,    17,     8,    28,    20,   326,   412,    27,    49,    29,
03125       74,     4,   220,    53,   420,    86,    87,   420,    28,    90,
03126      575,    94,    28,   641,   594,    49,   668,   685,   574,    51,
03127       52,   399,   468,    67,   262,    51,   779,   472,   266,    79,
03128       53,   376,   508,    74,    90,   511,     2,   415,     4,   417,
03129      715,    91,    92,    93,   719,   458,   416,   440,    25,   787,
03130       16,    17,    25,    13,    20,    16,    17,    13,    67,    20,
03131      875,    26,    25,    27,   873,   443,   903,   250,    37,    38,
03132       58,    29,   518,    16,    17,    64,     8,    20,    68,    87,
03133       68,    90,   777,    49,   139,   113,   141,    53,    85,    61,
03134       51,    52,    13,   471,   907,    25,    28,    76,    64,    61,
03135      470,   729,   596,   651,     0,   113,   134,   802,    96,    97,
03136       85,   779,   740,    79,   286,    15,   288,    17,   290,   787,
03137       86,    87,   294,    55,    90,    91,    92,    93,   141,    13,
03138      939,    25,   120,   123,   124,   125,   133,    26,   110,   118,
03139      323,    13,    25,    25,    25,   898,    59,    60,   110,   230,
03140       25,   232,   203,   111,   806,   807,   736,   134,   133,    13,
03141      130,   134,    94,   657,   744,   130,    56,  1004,   271,   243,
03142        1,   134,   141,   136,   134,   139,   991,   141,   259,   139,
03143      136,   141,   214,   139,   993,   141,   237,   224,   220,   226,
03144      227,   307,   308,   309,   310,   227,   252,   950,   224,   250,
03145      226,  1014,    25,   581,   134,   621,   622,   945,   252,   622,
03146      580,   429,   657,   140,   690,   593,   250,  1026,   139,    25,
03147      141,   271,   592,   771,   772,   140,   307,   308,   309,   310,
03148      898,   312,   313,   248,   886,   903,   140,   203,   268,   632,
03149      134,   130,   136,   252,   360,   361,   591,   136,   230,   743,
03150      696,   134,   134,   134,   929,   139,  1009,   141,   224,   134,
03151      226,   227,    87,   224,   230,   226,   232,   139,   670,   141,
03152      672,   237,   323,   255,   324,    61,   258,   945,    85,   360,
03153      361,   224,   248,   226,   250,   139,   117,   141,   113,   323,
03154      113,   306,   134,   259,   375,   321,   311,   853,   743,   141,
03155      326,   324,    85,   306,    85,   271,   362,   113,   139,   134,
03156      141,   134,   964,   485,   137,    61,   140,   354,   141,    65,
03157      492,   107,   354,   109,    26,   873,   133,   875,   134,    37,
03158       38,   137,   321,    85,    85,   141,  1004,   326,    85,    97,
03159      306,   307,   308,   309,   310,   311,   312,   313,   725,   132,
03160      133,   931,   133,   362,   140,   321,    85,   323,   324,    85,
03161      326,   107,   120,   109,   929,   468,   697,    59,    60,   378,
03162       28,    85,    52,   714,    54,    55,    56,    57,    61,   416,
03163      132,   133,   133,    85,   416,     2,   133,     4,   354,    26,
03164      356,   939,   940,   611,   360,   361,   428,   429,   636,    16,
03165       17,    87,   437,    20,   133,   703,   132,   133,   440,   375,
03166      990,  1039,   710,   402,   403,   518,    85,   437,   468,   133,
03167       87,   437,   134,   355,   107,   440,   109,   113,   130,   141,
03168      132,   133,    49,   470,   136,   113,   402,   403,   470,    85,
03169      422,   134,   936,   991,   426,   993,   113,    64,    85,   431,
03170      416,   412,   868,    68,   134,   868,    52,   140,    54,    55,
03171       56,    57,   113,   132,   133,   447,    87,   399,   518,    86,
03172       87,    87,    85,    90,   440,   507,   508,    87,  1026,   511,
03173      100,   883,   884,   557,   450,   417,   888,   133,   890,   891,
03174       87,   565,   113,   130,   455,   132,   133,   113,    87,   136,
03175      134,    87,   468,   113,   470,   437,   121,   122,   123,   124,
03176      125,   443,   542,   134,   595,    87,   113,   558,    58,   570,
03177      133,   572,    54,    87,    85,   566,   600,   113,    68,    85,
03178      560,    63,    64,   136,   637,   517,   568,   134,   134,   471,
03179      917,   113,   760,   580,   625,    56,   923,   134,   580,   113,
03180      576,   113,   518,    61,   141,   592,    96,    97,    88,   600,
03181      592,   136,   134,    26,   573,   574,   141,   134,   600,   137,
03182      605,   132,   133,   141,    87,   136,   132,   133,   587,   611,
03183      120,    14,    15,   134,   614,   605,   203,   637,   136,   605,
03184       52,   130,    87,   696,    56,   997,   998,   999,  1000,   107,
03185      632,   109,   110,   136,   570,   136,   572,   224,    68,   226,
03186      227,   641,   137,   230,   580,   232,   732,   632,   113,   735,
03187      237,   113,    85,   138,   131,   748,   592,    85,   594,   595,
03188      704,   248,    61,   250,   666,   686,   668,   711,   689,   134,
03189      691,  1019,   259,    56,   134,  1047,   696,    68,  1018,   581,
03190       68,   732,    94,   635,   735,   685,   110,   110,   690,   625,
03191      621,   593,   110,   746,   110,   134,   632,   130,    85,   132,
03192      133,   637,   139,   605,   132,   133,    17,    56,   107,   711,
03193      109,   110,   714,   715,   134,   717,    25,   719,   714,   306,
03194      307,   308,   309,   310,   311,   312,   313,    26,    68,   729,
03195       61,   577,   137,   134,   321,   131,   323,   130,   697,   326,
03196      740,   700,   701,    83,    84,   132,   133,    10,   707,   708,
03197      686,   140,   134,   689,   733,   691,   134,   843,   760,    85,
03198      696,   697,   134,   140,   700,   701,   745,   354,   134,   356,
03199       85,   707,   708,   360,   361,    87,   107,   777,   109,   110,
03200      800,   121,   122,   123,   124,   125,    85,    52,   375,   134,
03201      742,   113,   843,    85,   815,    68,   732,   136,     8,   735,
03202      736,   113,   802,   131,   806,   807,   132,   133,   744,   761,
03203       83,    84,    13,    61,   134,   402,   403,   132,   133,   840,
03204       61,   134,   134,   775,   113,    52,   847,   848,   134,   416,
03205      851,   130,   134,   132,   133,    52,   838,   136,   134,   841,
03206      132,   133,    15,    52,   746,   118,   119,   120,   121,   122,
03207      123,   124,   125,   440,    85,   134,   115,   878,   879,   107,
03208      138,   109,   110,   450,   800,   134,   107,   131,   109,   110,
03209      829,   892,   134,   893,   853,   113,   855,    85,   724,   815,
03210      134,    85,   118,   470,   886,   134,    16,    17,    54,    55,
03211       20,    57,   134,   829,   134,   741,   916,    63,    64,   920,
03212      139,   132,   133,    10,   840,    87,   131,   843,   860,    10,
03213      134,   847,   848,   685,    88,   851,    46,    47,     9,   685,
03214      872,    51,    52,   134,   132,   133,   118,   929,   132,   133,
03215      137,   113,   134,    56,    64,    65,   201,   134,   134,   204,
03216      205,   206,   878,   879,    52,   134,    54,    55,    56,    57,
03217       58,   131,   134,   134,    10,   134,   892,   893,   108,   980,
03218       68,   982,   964,   131,   134,   134,    56,   988,   450,   134,
03219      970,   134,   134,   134,   685,    68,   136,   136,   134,    91,
03220      916,    89,    93,   570,   920,   572,   711,  1021,    96,    97,
03221       83,    84,   771,   580,   685,   931,  1014,   749,   844,    52,
03222      846,    54,    55,    56,    57,   592,   294,   594,   595,   781,
03223      856,  1018,   120,   785,  1020,   861,  1018,    99,  1020,  1021,
03224       57,   787,    94,   781,   790,   936,   898,   120,   121,   122,
03225      123,   124,   125,   900,   779,   396,    89,    -1,   625,  1039,
03226       -1,    -1,    95,    -1,   980,   632,   982,    40,    41,    42,
03227       43,    44,   988,    -1,   990,    52,   321,    54,    55,    56,
03228       57,   326,    -1,    52,    -1,    54,    55,    56,    57,    -1,
03229      781,   201,    -1,    -1,   204,   205,   206,   207,    -1,    -1,
03230      926,   927,  1018,     2,    52,     4,    54,    55,    56,    57,
03231       -1,    -1,    89,    -1,   224,    -1,   226,   227,    95,   686,
03232       89,    -1,   689,    -1,   691,    -1,    -1,    -1,    -1,    -1,
03233      697,    -1,    -1,   700,   701,    -1,    -1,  1019,    -1,    -1,
03234      707,   708,    -1,    -1,    -1,    -1,   898,    -1,   900,    -1,
03235       49,   903,    -1,   905,    53,    -1,    -1,   903,    -1,   905,
03236       -1,    -1,    -1,   989,    -1,   732,   411,   412,   735,   736,
03237       -1,    -1,    -1,    -1,    -1,   420,    -1,   744,    -1,    -1,
03238       79,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03239       -1,    -1,    91,    92,    93,    94,  1022,    -1,  1024,   945,
03240       -1,   947,    -1,   809,   810,    -1,   952,   898,    -1,   900,
03241      455,   321,   903,   458,   905,    -1,   326,   327,   328,   329,
03242      330,   331,   332,   333,   334,   335,   336,   337,   338,   339,
03243      340,   341,   342,   343,   344,   345,   346,   347,   348,   349,
03244      350,   351,   352,    -1,   354,    -1,    -1,    -1,   815,    -1,
03245       -1,    -1,  1004,    -1,  1006,    -1,    -1,  1009,  1004,  1011,
03246     1006,    -1,   829,    -1,    -1,  1011,    -1,   512,    -1,    -1,
03247       -1,    -1,    -1,   840,    -1,    -1,   843,    -1,    -1,    -1,
03248      847,   848,  1028,    -1,   851,    -1,    -1,    -1,    -1,    -1,
03249       -1,    -1,   402,   403,    -1,    -1,    -1,  1049,    -1,    -1,
03250      410,   411,   412,  1049,   203,    -1,   416,    -1,   418,   419,
03251      420,   878,   879,  1004,    -1,  1006,    -1,    -1,  1009,    -1,
03252     1011,    -1,    -1,    -1,    -1,   892,    -1,    -1,    -1,   439,
03253       -1,   576,    -1,    -1,   444,    -1,    -1,    -1,   237,    -1,
03254       -1,    -1,    -1,    -1,    -1,   455,    -1,    -1,   458,   248,
03255       -1,   250,    -1,   920,    -1,   961,   962,    -1,  1049,   965,
03256      470,   967,   968,   608,   931,    -1,    -1,    -1,    -1,    -1,
03257       -1,    -1,   271,    -1,    -1,    -1,   621,   622,    -1,    -1,
03258       -1,    -1,    -1,     2,    -1,     4,   496,   497,    -1,    -1,
03259       -1,    -1,    -1,    -1,    52,    -1,    54,    55,    56,    57,
03260       58,    -1,   512,    -1,   649,    -1,    -1,   306,    -1,    -1,
03261       68,    -1,   311,   980,    -1,   982,    -1,    -1,    -1,    -1,
03262       -1,   988,    -1,   990,   323,   324,  1032,  1033,  1034,  1035,
03263       49,    89,    -1,    -1,    53,    -1,    -1,    95,    96,    97,
03264       52,    -1,    54,    55,    56,    57,    58,    -1,   693,  1055,
03265       -1,  1018,    -1,    -1,    -1,    -1,    68,   356,    -1,    -1,
03266       79,    -1,   120,    -1,    -1,   123,   576,    -1,    -1,   714,
03267      580,    -1,    91,    92,    93,    94,    -1,    89,    -1,    -1,
03268       -1,    -1,   592,   141,    96,    97,    -1,    -1,    -1,    52,
03269       -1,    54,    55,    56,    57,    58,    -1,    -1,   608,    -1,
03270       -1,    -1,    -1,    -1,    -1,    68,    -1,    -1,   120,    -1,
03271       -1,   621,   622,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03272       -1,    -1,    -1,   768,    -1,    -1,    89,    -1,    -1,    -1,
03273       -1,    -1,    95,    96,    97,    -1,    -1,    -1,    -1,   649,
03274       -1,   440,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03275       -1,   450,    -1,     2,    -1,     4,    -1,   120,    -1,    -1,
03276      123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   468,
03277       -1,    -1,   817,   136,     2,    -1,     4,    -1,    -1,    -1,
03278       -1,    -1,    -1,   693,   203,    -1,    -1,   697,   698,    -1,
03279      700,   701,    -1,     2,    -1,     4,    -1,   707,   708,    -1,
03280       49,    -1,    -1,    -1,   714,   850,    -1,    -1,    -1,    -1,
03281       52,    -1,    54,    55,    56,    57,    58,    -1,   237,   518,
03282       -1,    49,    -1,   868,    -1,    53,    68,    -1,    -1,   248,
03283       -1,   250,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03284       49,   751,    -1,    -1,    -1,   755,   756,    89,   758,   759,
03285       -1,    79,   271,    95,    96,    97,    -1,    -1,   768,    -1,
03286       -1,    -1,    -1,    91,    92,    93,    -1,    -1,    -1,    -1,
03287       -1,   570,    -1,   572,    -1,    -1,    -1,    -1,   120,    -1,
03288       -1,   123,    91,    -1,    -1,    -1,    -1,   306,    -1,    -1,
03289       -1,    -1,   311,    -1,   136,   594,    -1,    -1,    -1,    -1,
03290       -1,    -1,    -1,    -1,   323,   324,    -1,   817,    -1,    -1,
03291       -1,   821,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   829,
03292       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03293       -1,    -1,    -1,   632,    -1,    -1,    -1,   356,   637,    -1,
03294      850,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03295       -1,    -1,    -1,    -1,   203,    -1,    -1,   867,   868,    -1,
03296       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03297       76,    77,    78,    79,    80,   203,    -1,    83,    84,    -1,
03298       -1,    -1,    -1,    -1,    -1,    -1,    -1,   686,   237,    -1,
03299      689,    -1,   691,    -1,   203,    -1,    -1,   696,    -1,   248,
03300       -1,   250,    -1,    -1,    -1,    -1,    -1,    -1,   114,   237,
03301      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
03302      248,   440,   250,    -1,    -1,    -1,    -1,    -1,   237,    -1,
03303       -1,   450,    -1,    -1,    -1,   141,    -1,   736,    -1,   248,
03304       -1,   250,    -1,   271,    -1,   744,    -1,    -1,    -1,   468,
03305       -1,    -1,    -1,    -1,    -1,    -1,    -1,   306,    -1,    -1,
03306       -1,    52,   311,    54,    55,    56,    57,    58,    -1,    -1,
03307       -1,    -1,    -1,    -1,   323,    -1,    -1,    68,   306,    -1,
03308       -1,    -1,    -1,   311,    -1,    -1,    -1,    -1,    -1,    -1,
03309       -1,    -1,    -1,    -1,    -1,   323,   324,   306,    89,   518,
03310       -1,   800,   311,    -1,    95,    96,    97,   356,  1018,    -1,
03311       -1,    -1,    -1,    -1,   323,    -1,   815,   326,    -1,    -1,
03312       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   356,   120,
03313       44,    -1,   123,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03314       -1,   840,    -1,    -1,    -1,    -1,    -1,   356,   847,   848,
03315       -1,   570,   851,   572,    68,    69,    70,    71,    72,    73,
03316       74,    75,    76,    77,    78,    79,    80,    -1,    -1,    83,
03317       84,    -1,    -1,    -1,    -1,   594,    -1,    -1,    -1,   878,
03318      879,    -1,    52,    -1,    54,    55,    56,    57,    58,    -1,
03319       -1,   440,    -1,   892,   893,    -1,    -1,    -1,    68,    -1,
03320      114,   450,   116,   117,   118,   119,   120,   121,   122,   123,
03321      124,   125,   440,   632,    -1,    -1,    -1,   916,   637,    89,
03322      134,   920,   450,    -1,    -1,    95,    96,    97,    -1,    -1,
03323       -1,   440,   931,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03324      468,   450,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03325      120,    -1,    -1,   123,    -1,    -1,    -1,    -1,    -1,    -1,
03326       -1,    -1,    -1,    -1,    -1,    -1,    -1,   686,    -1,    -1,
03327      689,    -1,   691,    -1,    -1,    -1,    -1,   696,    -1,    -1,
03328       -1,   980,    -1,   982,    52,    53,    -1,    -1,    56,   988,
03329      518,   990,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
03330       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03331       78,    -1,    -1,    81,    82,    83,    84,   736,    -1,    -1,
03332       -1,   570,    -1,   572,    -1,   744,    -1,    95,    96,    -1,
03333       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03334       -1,    -1,   570,    -1,   572,   594,    -1,    -1,   116,   117,
03335      118,   119,   120,   121,   122,   123,   124,   125,    -1,   127,
03336      128,   570,    -1,   572,    -1,    -1,   594,   135,    -1,    -1,
03337       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03338       -1,   800,    -1,   632,    -1,   594,    -1,    -1,    -1,    -1,
03339       -1,    -1,    -1,    -1,    -1,    -1,   815,    -1,    -1,    -1,
03340       -1,    -1,    -1,    -1,   632,    -1,    -1,    -1,    -1,   637,
03341       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03342       -1,   840,    -1,   632,    -1,    -1,    -1,    -1,   847,   848,
03343       -1,    -1,   851,    -1,    -1,    -1,    -1,   686,    -1,    -1,
03344      689,    -1,   691,    -1,    -1,    -1,    -1,    -1,   676,    -1,
03345       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   686,   878,
03346      879,   689,    -1,   691,    -1,    -1,    -1,    -1,   696,    -1,
03347       -1,    -1,    -1,   892,   893,    -1,    -1,   686,    -1,    -1,
03348      689,    -1,   691,    -1,    -1,    -1,    -1,   736,   697,    -1,
03349       -1,    -1,    -1,    -1,    -1,   744,    -1,   916,    -1,    -1,
03350       -1,   920,    -1,    -1,    -1,    -1,    -1,    -1,   736,    -1,
03351       -1,    -1,   931,    -1,    -1,    -1,   744,    -1,    -1,    -1,
03352       -1,    -1,    -1,    -1,    -1,    -1,    -1,   736,    68,    69,
03353       70,    71,    72,    73,    74,   744,    -1,    77,    78,    -1,
03354       -1,    -1,    -1,    83,    84,    -1,    -1,    -1,    -1,    -1,
03355       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03356       -1,   980,    -1,   982,    -1,    -1,   815,    -1,    -1,   988,
03357       -1,   990,   800,    -1,    -1,    -1,   116,   117,   118,   119,
03358      120,   121,   122,   123,   124,   125,    -1,   815,    -1,    -1,
03359       -1,   840,    -1,    -1,    -1,    -1,    -1,    -1,   847,   848,
03360       -1,    -1,   851,    -1,    -1,    -1,   815,    -1,    -1,    -1,
03361       -1,    -1,   840,    -1,    -1,    -1,    -1,    -1,    -1,   847,
03362      848,    -1,    -1,   851,    -1,    -1,    -1,    -1,    -1,   878,
03363      879,   840,    -1,    -1,    -1,    -1,    -1,    -1,   847,   848,
03364       -1,    -1,   851,   892,    -1,    -1,    -1,    -1,    -1,    -1,
03365      878,   879,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03366       -1,    -1,    -1,    -1,   892,   893,    -1,    -1,    -1,   878,
03367      879,   920,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03368       -1,    -1,   931,   892,    -1,    -1,    -1,    -1,   916,    -1,
03369       -1,    -1,   920,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03370       -1,    -1,    -1,   931,    -1,    -1,    -1,   916,    -1,    -1,
03371       -1,   920,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03372       -1,    -1,   931,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03373       -1,   980,    -1,   982,    -1,    -1,    -1,    -1,    -1,   988,
03374       -1,   990,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03375       -1,    -1,   980,    -1,   982,    -1,    -1,    -1,    -1,    -1,
03376      988,    -1,   990,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03377       -1,   980,    -1,   982,    -1,    -1,    -1,    -1,    -1,   988,
03378       -1,   990,     0,     1,    -1,     3,     4,     5,     6,     7,
03379       -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,    -1,
03380       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03381       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03382       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03383       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03384       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03385       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03386       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03387       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,
03388       98,    99,   100,   101,   102,   103,   104,   105,   106,     0,
03389       -1,    -1,    -1,    -1,    -1,    -1,    -1,     8,     9,    10,
03390       -1,    -1,    13,    14,    15,    -1,    17,    -1,   126,   127,
03391      128,    -1,    44,    -1,    -1,    26,    27,    28,    29,    -1,
03392       -1,   139,    -1,   141,    -1,    -1,    37,    38,    -1,    40,
03393       41,    42,    43,    44,    -1,    -1,    68,    69,    70,    71,
03394       72,    73,    74,    75,    76,    77,    78,    79,    80,    -1,
03395       -1,    83,    84,    -1,    -1,    -1,    -1,    68,    69,    70,
03396       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03397       -1,    -1,    83,    84,    85,    -1,    87,    88,    -1,    -1,
03398       -1,    -1,   114,    94,   116,   117,   118,   119,   120,   121,
03399      122,   123,   124,   125,    -1,    -1,    -1,   108,    -1,    -1,
03400      111,    -1,   113,   114,   115,   116,   117,   118,   119,   120,
03401      121,   122,   123,   124,   125,    -1,    -1,    -1,    -1,   130,
03402      131,   132,   133,   134,     0,    -1,   137,   138,   139,    -1,
03403      141,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03404       -1,    17,    -1,    -1,    -1,    -1,    -1,    44,    -1,    25,
03405       -1,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,
03406       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03407       -1,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03408       77,    78,    79,    80,    -1,    -1,    83,    84,    -1,    -1,
03409       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03410       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03411       -1,    87,    88,    -1,    -1,    -1,    -1,   114,    94,   116,
03412      117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
03413       -1,    -1,   108,    -1,    -1,   111,    -1,   113,   114,   115,
03414      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
03415       -1,    -1,    -1,    -1,    -1,   131,   132,   133,   134,     0,
03416       -1,   137,   138,   139,    -1,   141,    -1,     8,     9,    10,
03417       -1,    -1,    13,    14,    15,    -1,    17,    -1,    -1,    -1,
03418       -1,    -1,    -1,    -1,    25,    -1,    27,    28,    29,    -1,
03419       -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
03420       41,    42,    43,    44,    -1,    -1,    68,    69,    70,    71,
03421       72,    73,    74,    75,    76,    77,    78,    79,    80,    -1,
03422       -1,    83,    84,    -1,    -1,    -1,    -1,    68,    69,    70,
03423       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03424       -1,    -1,    83,    84,    85,    -1,    87,    88,    -1,    -1,
03425       -1,    -1,   114,    94,   116,   117,   118,   119,   120,   121,
03426      122,   123,   124,   125,    -1,    -1,    -1,   108,    -1,    -1,
03427      111,    -1,   113,   114,   115,   116,   117,   118,   119,   120,
03428      121,   122,   123,   124,   125,    -1,    -1,    -1,    -1,    -1,
03429      131,   132,   133,   134,     0,    -1,   137,   138,   139,    -1,
03430      141,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03431       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03432       26,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,
03433       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03434       -1,    68,    69,    70,    71,    72,    73,    74,    75,    76,
03435       77,    78,    79,    80,    -1,    -1,    83,    84,    -1,    -1,
03436       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03437       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03438       -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,   116,
03439      117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
03440       -1,    -1,   108,    -1,    -1,   111,    -1,    -1,   114,   115,
03441      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
03442       -1,    -1,    -1,    -1,   130,   131,   132,   133,   134,     0,
03443       -1,   137,   138,   139,    -1,   141,    -1,     8,     9,    10,
03444       -1,    -1,    13,    14,    15,    -1,    17,    -1,    -1,    -1,
03445       -1,    -1,    -1,    -1,    -1,    26,    27,    28,    29,    -1,
03446       -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
03447       41,    42,    43,    44,    -1,    -1,    68,    69,    70,    71,
03448       72,    73,    74,    75,    -1,    77,    78,    -1,    -1,    -1,
03449       -1,    83,    84,    -1,    -1,    -1,    -1,    68,    69,    70,
03450       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03451       -1,    -1,    83,    84,    85,    -1,    -1,    88,    -1,    -1,
03452       -1,    -1,    -1,    94,   116,   117,   118,   119,   120,   121,
03453      122,   123,   124,   125,    -1,    -1,    -1,   108,    -1,    -1,
03454      111,    -1,    -1,   114,   115,   116,   117,   118,   119,   120,
03455      121,   122,   123,   124,   125,    -1,    -1,    -1,    -1,   130,
03456      131,   132,   133,   134,     0,    -1,   137,   138,   139,    -1,
03457      141,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03458       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03459       -1,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,
03460       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03461       -1,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
03462       77,    78,    -1,    -1,    -1,    -1,    83,    84,    -1,    -1,
03463       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03464       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03465       -1,    87,    88,    -1,    -1,    -1,    -1,    -1,    94,   116,
03466      117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
03467       -1,    -1,   108,    -1,    -1,   111,    -1,   113,   114,   115,
03468      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
03469       -1,    -1,    -1,    -1,    -1,   131,   132,   133,   134,     0,
03470       -1,   137,   138,   139,    -1,   141,    -1,     8,     9,    10,
03471       -1,    -1,    13,    14,    15,    -1,    17,    -1,    -1,    -1,
03472       -1,    -1,    -1,    -1,    -1,    26,    27,    28,    -1,    -1,
03473       -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
03474       41,    42,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,
03475       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03476       -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
03477       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03478       -1,    -1,    83,    84,    85,    -1,    -1,    88,    -1,    -1,
03479       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
03480       -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,
03481       -1,    -1,    -1,   114,    -1,   116,   117,   118,   119,   120,
03482      121,   122,   123,   124,   125,    -1,    -1,    -1,    -1,   130,
03483      131,   132,   133,   134,     0,   136,   137,   138,   139,    -1,
03484      141,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03485       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03486       -1,    27,    28,    29,    -1,    -1,    -1,    -1,    -1,    -1,
03487       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03488       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03489       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03490       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03491       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03492       -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,    -1,
03493       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03494       -1,    -1,   108,    -1,    -1,   111,    -1,    -1,   114,   115,
03495      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
03496       -1,    -1,    -1,    -1,    -1,   131,   132,   133,   134,     0,
03497       -1,   137,   138,   139,    -1,   141,    -1,     8,     9,    10,
03498       -1,    -1,    13,    14,    15,    -1,    17,    -1,    -1,    -1,
03499       -1,    -1,    -1,    -1,    -1,    26,    27,    28,    -1,    -1,
03500       -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
03501       41,    42,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,
03502       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03503       -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
03504       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03505       -1,    -1,    83,    84,    85,    -1,    -1,    88,    -1,    -1,
03506       -1,    -1,    -1,    94,    -1,    -1,    -1,    -1,    -1,    -1,
03507       -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,
03508       -1,    -1,    -1,   114,    -1,   116,   117,   118,   119,   120,
03509      121,   122,   123,   124,   125,    -1,    -1,    -1,    -1,   130,
03510      131,   132,   133,   134,     0,   136,   137,   138,   139,    -1,
03511      141,    -1,     8,     9,    10,    -1,    -1,    13,    14,    15,
03512       -1,    17,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03513       -1,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03514       -1,    37,    38,    -1,    40,    41,    42,    43,    44,    -1,
03515       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03516       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03517       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03518       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03519       -1,    -1,    88,    -1,    -1,    -1,    -1,    -1,    94,    -1,
03520       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03521       -1,    -1,   108,    -1,    -1,    -1,    -1,    -1,   114,    -1,
03522      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
03523       -1,    -1,    -1,    -1,    -1,   131,   132,   133,   134,     0,
03524      136,   137,   138,   139,    -1,   141,    -1,     8,     9,    10,
03525       -1,    -1,    -1,    14,    15,    -1,    17,    -1,    -1,    -1,
03526       -1,    -1,    -1,    -1,    -1,    26,    -1,    -1,    -1,    -1,
03527       -1,    -1,    -1,    -1,    -1,    -1,    37,    38,    -1,    40,
03528       41,    42,    43,    44,    -1,    -1,    -1,    -1,    -1,    -1,
03529       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03530       -1,    -1,    -1,    -1,    -1,    -1,    -1,    68,    69,    70,
03531       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
03532       -1,    -1,    83,    84,    85,    -1,    87,    -1,    -1,    -1,
03533       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03534       -1,    -1,    -1,    -1,    -1,    -1,    -1,   108,    -1,    -1,
03535       -1,    -1,   113,   114,    -1,   116,   117,   118,   119,   120,
03536      121,   122,   123,   124,   125,    -1,    -1,    -1,    -1,   130,
03537      131,   132,   133,   134,     0,    -1,   137,    -1,   139,    -1,
03538      141,    -1,     8,     9,    10,    -1,    -1,    -1,    14,    15,
03539       -1,    17,    -1,     0,    -1,    -1,    -1,    -1,    -1,    -1,
03540       -1,     8,     9,    10,    -1,    -1,    13,    14,    15,    -1,
03541       17,    37,    38,    -1,    40,    41,    42,    43,    44,    26,
03542       27,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03543       37,    38,    -1,    40,    41,    42,    43,    44,    -1,    -1,
03544       -1,    -1,    68,    69,    70,    71,    72,    73,    74,    75,
03545       76,    77,    78,    79,    80,    -1,    -1,    83,    84,    85,
03546       -1,    87,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03547       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    85,    -1,
03548       -1,    -1,   108,    -1,    -1,    -1,    -1,   113,   114,    -1,
03549      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
03550       -1,   108,    -1,    -1,    -1,   131,   132,   133,   134,    -1,
03551       -1,   137,    -1,   139,    -1,   141,    -1,    -1,    -1,    -1,
03552       -1,    -1,    -1,   130,   131,    -1,   133,    -1,    -1,   136,
03553      137,    -1,   139,     1,   141,     3,     4,     5,     6,     7,
03554        8,     9,    10,    11,    12,    -1,    -1,    15,    16,    -1,
03555       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03556       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03557       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03558       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03559       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03560       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03561       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03562       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,
03563       98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
03564       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03565       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,
03566      128,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03567       -1,   139,     1,   141,     3,     4,     5,     6,     7,    -1,
03568       -1,    10,    11,    12,    -1,    14,    15,    16,    -1,    18,
03569       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03570       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03571       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
03572       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03573       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03574       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03575       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03576       89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,    98,
03577       99,   100,   101,   102,   103,   104,   105,   106,    -1,    -1,
03578       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03579       -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,   128,
03580       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03581      139,     1,   141,     3,     4,     5,     6,     7,    -1,    -1,
03582       10,    11,    12,    -1,    -1,    15,    16,    17,    18,    19,
03583       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03584       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03585       -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,
03586       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
03587       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03588       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03589       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03590       90,    -1,    92,    93,    -1,    95,    -1,    -1,    98,    99,
03591      100,   101,   102,   103,   104,   105,   106,    -1,    -1,    -1,
03592       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03593       -1,    -1,    -1,    -1,    -1,    -1,   126,   127,   128,    -1,
03594       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   139,
03595        1,   141,     3,     4,     5,     6,     7,    -1,    -1,    10,
03596       11,    12,    -1,    -1,    15,    16,    -1,    18,    19,    20,
03597       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03598       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03599       -1,    -1,    -1,    -1,    45,    46,    47,    48,    49,    50,
03600       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03601       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03602       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03603       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03604       -1,    92,    93,    -1,    95,    -1,    -1,    98,    99,   100,
03605      101,   102,   103,   104,   105,   106,    -1,    -1,    -1,    -1,
03606       -1,    -1,    -1,     1,    -1,     3,     4,     5,     6,     7,
03607       -1,     9,    10,    11,    12,   126,   127,   128,    16,    -1,
03608       18,    19,    20,    21,    22,    23,    24,    -1,   139,    -1,
03609      141,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03610       -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03611       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03612       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03613       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03614       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03615       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,
03616       98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
03617       -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,     4,
03618        5,     6,     7,    -1,    -1,    -1,    11,    12,   126,   127,
03619      128,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03620       -1,   139,    -1,   141,    -1,    30,    31,    32,    33,    34,
03621       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03622       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03623       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03624       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03625       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03626       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03627       95,    -1,    -1,    98,    99,   100,   101,   102,   103,   104,
03628      105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03629       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03630       -1,   126,   127,   128,    -1,    -1,    -1,    -1,    -1,    -1,
03631       -1,    -1,   137,    -1,   139,     1,   141,     3,     4,     5,
03632        6,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,
03633       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03634       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03635       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03636       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03637       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03638       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03639       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03640       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03641       -1,    -1,    98,    99,   100,   101,   102,   103,   104,   105,
03642      106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03643       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03644      126,   127,   128,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03645       -1,   137,    -1,   139,     1,   141,     3,     4,     5,     6,
03646        7,    -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,
03647       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03648       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03649       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03650       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03651       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
03652       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03653       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03654       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
03655       -1,    98,    99,   100,   101,   102,   103,   104,   105,   106,
03656       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03657       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,
03658      127,   128,    -1,    -1,   131,     1,    -1,     3,     4,     5,
03659        6,     7,   139,    -1,   141,    11,    12,    -1,    -1,    -1,
03660       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03661       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03662       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,
03663       46,    47,    48,    49,    50,    51,    52,    53,    54,    55,
03664       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03665       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03666       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03667       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03668       -1,    -1,    98,    99,   100,   101,   102,   103,   104,   105,
03669      106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03670       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03671      126,   127,   128,    -1,    -1,   131,    -1,    -1,    -1,    -1,
03672       -1,    -1,    -1,   139,     1,   141,     3,     4,     5,     6,
03673        7,    -1,    -1,    10,    11,    12,    -1,    -1,    -1,    16,
03674       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03675       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03676       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,
03677       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
03678       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    66,
03679       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03680       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03681       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
03682       -1,    98,    99,   100,   101,   102,   103,   104,   105,   106,
03683       -1,    -1,    -1,    -1,    -1,    -1,    -1,     1,    -1,     3,
03684        4,     5,     6,     7,    -1,    -1,    -1,    11,    12,   126,
03685      127,   128,    16,    -1,    18,    19,    20,    21,    22,    23,
03686       24,    -1,   139,    -1,   141,    -1,    30,    31,    32,    33,
03687       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03688       -1,    45,    46,    47,    48,    49,    50,    51,    52,    53,
03689       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03690       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03691       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03692       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03693       -1,    95,    -1,    -1,    98,    99,   100,   101,   102,   103,
03694      104,   105,   106,    -1,   108,    -1,    -1,    -1,    -1,    -1,
03695       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03696       11,    12,   126,   127,   128,    16,    -1,    18,    19,    20,
03697       21,    22,    23,    24,    -1,   139,    -1,   141,    -1,    30,
03698       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03699       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03700       51,    52,    53,    54,    55,    56,    57,    58,    59,    60,
03701       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03702       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03703       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03704       -1,    92,    93,    -1,    95,    96,    97,    98,    99,   100,
03705      101,   102,   103,   104,   105,   106,    -1,    -1,    -1,    -1,
03706       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03707       -1,    -1,    -1,    11,    12,   126,   127,   128,    16,    -1,
03708       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03709      141,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03710       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03711       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03712       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03713       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03714       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03715       -1,    89,    90,    -1,    92,    93,    -1,    -1,    -1,    -1,
03716       98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
03717       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03718        5,    -1,     7,    -1,    -1,    -1,    11,    12,   126,   127,
03719      128,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03720       -1,   139,    -1,   141,    -1,    30,    31,    32,    33,    34,
03721       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03722       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03723       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03724       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03725       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03726       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03727       -1,    -1,    -1,    98,    99,   100,   101,   102,   103,   104,
03728      105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03729       -1,     3,     4,     5,     6,     7,    -1,    -1,    -1,    11,
03730       12,   126,   127,   128,    16,    -1,    18,    19,    20,    21,
03731       22,    23,    24,    -1,    -1,    -1,   141,    -1,    30,    31,
03732       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03733       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
03734       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03735       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03736       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03737       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03738       92,    93,    -1,    95,    -1,    -1,    98,    99,   100,   101,
03739      102,   103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
03740       -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,
03741       -1,    -1,    11,    12,   126,   127,   128,    16,    -1,    18,
03742       19,    20,    21,    22,    23,    24,    -1,   139,    -1,    -1,
03743       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03744       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
03745       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03746       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03747       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03748       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03749       89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,    98,
03750       99,   100,   101,   102,   103,   104,   105,   106,    -1,    -1,
03751       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03752       -1,    -1,    -1,    -1,    -1,    -1,    -1,   126,   127,   128,
03753       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03754      139,     3,     4,     5,     6,     7,     8,     9,    10,    11,
03755       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
03756       22,    23,    24,    25,    26,    -1,    -1,    -1,    30,    31,
03757       32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
03758       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
03759       52,    53,    54,    55,    56,    57,    -1,    -1,    -1,    -1,
03760       -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    71,
03761       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
03762       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03763       -1,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,
03764       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03765       -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,   121,
03766      122,   123,   124,   125,    -1,   127,   128,    -1,    -1,    -1,
03767       -1,    -1,    -1,   135,   136,     3,     4,     5,     6,     7,
03768        8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
03769       18,    19,    20,    21,    22,    23,    24,    25,    26,    -1,
03770       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    37,
03771       38,    39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,
03772       48,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03773       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
03774       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
03775       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
03776       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,
03777       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03778       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,   117,
03779      118,   119,   120,   121,   122,   123,   124,   125,    -1,   127,
03780      128,    -1,    -1,    -1,    -1,    -1,    -1,   135,     3,     4,
03781        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
03782       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
03783       25,    26,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03784       35,    36,    37,    38,    39,    -1,    -1,    -1,    -1,    -1,
03785       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03786       -1,    56,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03787       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
03788       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
03789       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03790       95,    96,    -1,    -1,    99,    -1,    -1,    -1,    -1,    -1,
03791       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03792       -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
03793      125,    -1,   127,   128,    -1,    -1,    -1,    -1,    -1,    -1,
03794      135,     3,     4,     5,     6,     7,     8,     9,    10,    11,
03795       12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
03796       22,    23,    24,    25,    26,    -1,    -1,    -1,    30,    31,
03797       32,    33,    34,    35,    36,    37,    38,    39,    -1,    -1,
03798       -1,    -1,    -1,    45,    46,    47,    48,    49,    50,    51,
03799       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
03800       -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    71,
03801       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
03802       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03803       -1,    -1,    -1,    95,    96,    -1,    -1,    99,    -1,    -1,
03804       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03805       -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,   121,
03806      122,   123,   124,   125,    -1,   127,   128,    -1,    -1,    -1,
03807       -1,    -1,    -1,   135,     3,     4,     5,     6,     7,     8,
03808        9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
03809       19,    20,    21,    22,    23,    24,    25,    26,    -1,    -1,
03810       -1,    30,    31,    32,    33,    34,    35,    36,    37,    38,
03811       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    47,    48,
03812       49,    50,    51,    52,    53,    -1,    -1,    56,    -1,    -1,
03813       -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,
03814       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
03815       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
03816       -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
03817       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03818       -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,
03819      119,   120,   121,   122,   123,   124,   125,    -1,   127,   128,
03820        3,     4,     5,    -1,     7,    -1,   135,    -1,    11,    12,
03821       -1,    -1,    -1,    16,    -1,    18,    19,    20,    21,    22,
03822       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03823       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03824       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03825       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
03826       63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03827       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03828       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03829       93,    -1,    -1,    -1,    -1,    98,    99,   100,   101,   102,
03830      103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,     3,
03831        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,    -1,
03832       -1,    -1,    16,   126,    18,    19,    20,    21,    22,    23,
03833       24,   134,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03834       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03835       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03836       54,    55,    56,    57,    -1,    59,    60,    -1,    62,    63,
03837       64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03838       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03839       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03840       -1,    -1,    -1,    -1,    98,    99,   100,   101,   102,   103,
03841      104,   105,   106,    -1,    -1,    -1,    -1,    -1,     3,     4,
03842        5,     6,     7,    -1,    -1,    -1,    11,    12,    -1,    -1,
03843       -1,    16,   126,    18,    19,    20,    21,    22,    23,    24,
03844      134,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03845       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03846       45,    46,    47,    48,    49,    50,    51,    52,    53,    54,
03847       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03848       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03849       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03850       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03851       95,    -1,    -1,    98,    99,   100,   101,   102,   103,   104,
03852      105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03853       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03854       12,   126,   127,   128,    16,    -1,    18,    19,    20,    21,
03855       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03856       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03857       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03858       52,    53,    54,    55,    56,    57,    58,    59,    60,    -1,
03859       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03860       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03861       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03862       92,    93,    -1,    95,    96,    97,    98,    99,   100,   101,
03863      102,   103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
03864       -1,    -1,    -1,    -1,     3,     4,     5,     6,     7,    -1,
03865       -1,    -1,    11,    12,   126,   127,   128,    16,    -1,    18,
03866       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03867       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03868       39,    -1,    -1,    -1,    -1,    -1,    45,    46,    -1,    48,
03869       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03870       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03871       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03872       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03873       89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,    98,
03874       99,   100,   101,   102,   103,   104,   105,   106,    -1,    -1,
03875       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03876       -1,     7,    -1,    -1,    -1,    11,    12,   126,   127,   128,
03877       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03878       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03879       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03880       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03881       56,    57,    58,    59,    60,    -1,    62,    63,    64,    -1,
03882       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03883       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03884       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,
03885       96,    97,    98,    99,   100,   101,   102,   103,   104,   105,
03886      106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03887        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
03888      126,   127,   128,    16,    -1,    18,    19,    20,    21,    22,
03889       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
03890       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
03891       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
03892       53,    54,    55,    56,    57,    58,    59,    60,    -1,    62,
03893       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
03894       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03895       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
03896       93,    -1,    95,    96,    -1,    98,    99,   100,   101,   102,
03897      103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,
03898       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
03899       -1,    11,    12,   126,   127,   128,    16,    -1,    18,    19,
03900       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
03901       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
03902       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
03903       50,    51,    52,    53,    54,    55,    56,    57,    58,    59,
03904       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
03905       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03906       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
03907       90,    -1,    92,    93,    -1,    -1,    96,    97,    98,    99,
03908      100,   101,   102,   103,   104,   105,   106,    -1,    -1,    -1,
03909       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
03910        7,    -1,    -1,    -1,    11,    12,   126,   127,   128,    16,
03911       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
03912       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
03913       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
03914       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
03915       57,    58,    59,    60,    -1,    62,    63,    64,    -1,    66,
03916       67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03917       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
03918       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    96,
03919       -1,    98,    99,   100,   101,   102,   103,   104,   105,   106,
03920       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,
03921        4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,   126,
03922      127,   128,    16,    -1,    18,    19,    20,    21,    22,    23,
03923       24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,
03924       34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,
03925       -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,    53,
03926       54,    55,    56,    57,    58,    59,    60,    -1,    62,    63,
03927       64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,
03928       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03929       -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,
03930       -1,    -1,    96,    -1,    98,    99,   100,   101,   102,   103,
03931      104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03932       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
03933       11,    12,   126,   127,   128,    16,    -1,    18,    19,    20,
03934       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
03935       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
03936       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
03937       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
03938       -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,
03939       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03940       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
03941       -1,    92,    93,    -1,    95,    -1,    -1,    98,    99,   100,
03942      101,   102,   103,   104,   105,   106,    -1,    -1,    -1,    -1,
03943       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
03944       -1,    -1,    -1,    11,    12,   126,   127,   128,    16,    -1,
03945       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
03946       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
03947       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
03948       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
03949       -1,    59,    60,    -1,    62,    63,    64,    -1,    66,    67,
03950       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03951       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
03952       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,
03953       98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
03954       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,
03955        5,    -1,     7,    -1,    -1,    -1,    11,    12,   126,   127,
03956      128,    16,    -1,    18,    19,    20,    21,    22,    23,    24,
03957       -1,    -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,
03958       35,    36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,
03959       -1,    46,    -1,    -1,    49,    50,    51,    52,    53,    54,
03960       55,    56,    57,    -1,    59,    60,    -1,    62,    63,    64,
03961       -1,    66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03962       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03963       -1,    86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,
03964       95,    -1,    -1,    98,    99,   100,   101,   102,   103,   104,
03965      105,   106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03966       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
03967       12,   126,   127,   128,    16,    -1,    18,    19,    20,    21,
03968       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
03969       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
03970       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
03971       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
03972       62,    63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,
03973       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03974       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
03975       92,    93,    -1,    95,    -1,    -1,    98,    99,   100,   101,
03976      102,   103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
03977       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
03978       -1,    -1,    11,    12,   126,   127,   128,    16,    -1,    18,
03979       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
03980       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
03981       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
03982       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
03983       59,    60,    -1,    62,    63,    64,    -1,    66,    67,    -1,
03984       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03985       -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,
03986       89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,    98,
03987       99,   100,   101,   102,   103,   104,   105,   106,    -1,    -1,
03988       -1,    -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,
03989       -1,     7,    -1,    -1,    -1,    11,    12,   126,   127,   128,
03990       16,    -1,    18,    19,    20,    21,    22,    23,    24,    -1,
03991       -1,    -1,    -1,    -1,    30,    31,    32,    33,    34,    35,
03992       36,    -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,
03993       46,    -1,    -1,    49,    50,    51,    52,    53,    54,    55,
03994       56,    57,    -1,    59,    60,    -1,    62,    63,    64,    -1,
03995       66,    67,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03996       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
03997       86,    -1,    -1,    89,    90,    -1,    92,    93,    -1,    -1,
03998       -1,    -1,    98,    99,   100,   101,   102,   103,   104,   105,
03999      106,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04000        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
04001      126,   127,   128,    16,    -1,    18,    19,    20,    21,    22,
04002       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
04003       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
04004       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
04005       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
04006       63,    64,    -1,    66,    67,    -1,    -1,    -1,    -1,    -1,
04007       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04008       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
04009       93,    -1,    -1,    -1,    -1,    98,    99,   100,   101,   102,
04010      103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,
04011       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
04012       -1,    11,    12,   126,   127,   128,    16,    -1,    18,    19,
04013       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
04014       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
04015       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
04016       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
04017       60,    -1,    62,    63,    64,    -1,    66,    67,    -1,    -1,
04018       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04019       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
04020       90,    -1,    92,    93,    -1,    -1,    -1,    -1,    98,    99,
04021      100,   101,   102,   103,   104,   105,   106,    -1,    -1,    -1,
04022       -1,    -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,
04023        7,    -1,    -1,    -1,    11,    12,   126,   127,   128,    16,
04024       -1,    18,    19,    20,    21,    22,    23,    24,    -1,    -1,
04025       -1,    -1,    -1,    30,    31,    32,    33,    34,    35,    36,
04026       -1,    -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,
04027       -1,    -1,    49,    50,    51,    52,    53,    54,    55,    56,
04028       57,    -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,
04029       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04030       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,
04031       -1,    -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,
04032       -1,    98,    99,   100,   101,   102,   103,   104,   105,   106,
04033       -1,    -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,
04034       -1,    -1,    -1,    11,    12,    -1,    -1,    -1,    16,   126,
04035       18,    19,    20,    21,    22,    23,    24,    -1,    -1,    -1,
04036       -1,    -1,    30,    31,    32,    33,    34,    35,    36,    -1,
04037       -1,    39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,
04038       -1,    49,    50,    51,    52,    53,    54,    55,    56,    57,
04039       -1,    59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,
04040       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04041       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,
04042       -1,    89,    90,    -1,    92,    93,    -1,    95,    -1,    -1,
04043       98,    99,   100,   101,   102,   103,   104,   105,   106,    -1,
04044       -1,    -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,
04045       -1,    -1,    11,    12,    -1,    -1,    -1,    16,   126,    18,
04046       19,    20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,
04047       -1,    30,    31,    32,    33,    34,    35,    36,    -1,    -1,
04048       39,    -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,
04049       49,    50,    51,    52,    53,    54,    55,    56,    57,    -1,
04050       59,    60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,
04051       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04052       -1,    -1,    -1,    -1,    83,    -1,    -1,    86,    -1,    -1,
04053       89,    90,    -1,    92,    93,    -1,    -1,    -1,    -1,    98,
04054       99,   100,   101,   102,   103,   104,   105,   106,    -1,    -1,
04055       -1,    -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,
04056       -1,    11,    12,    -1,    -1,    -1,    16,   126,    18,    19,
04057       20,    21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,
04058       30,    31,    32,    33,    34,    35,    36,    -1,    -1,    39,
04059       -1,    -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,
04060       50,    51,    52,    53,    54,    55,    56,    57,    -1,    59,
04061       60,    -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,
04062       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04063       -1,    -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,
04064       90,    -1,    92,    93,    -1,    -1,    -1,    -1,    98,    99,
04065      100,   101,   102,   103,   104,   105,   106,    -1,    -1,    -1,
04066       -1,    -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,
04067       11,    12,    -1,    -1,    -1,    16,   126,    18,    19,    20,
04068       21,    22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,
04069       31,    32,    33,    34,    35,    36,    -1,    -1,    39,    -1,
04070       -1,    -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,
04071       51,    52,    53,    54,    55,    56,    57,    -1,    59,    60,
04072       -1,    62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,
04073       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04074       -1,    -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,
04075       -1,    92,    93,    -1,    -1,    -1,    -1,    98,    99,   100,
04076      101,   102,   103,   104,   105,   106,    -1,    -1,    -1,    -1,
04077       -1,     3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,
04078       12,    -1,    -1,    -1,    16,   126,    18,    19,    20,    21,
04079       22,    23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,
04080       32,    33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,
04081       -1,    -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,
04082       52,    53,    54,    55,    56,    57,    -1,    59,    60,    -1,
04083       62,    63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04084       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04085       -1,    -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,
04086       92,    93,    -1,    -1,    -1,    -1,    98,    99,   100,   101,
04087      102,   103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,
04088        3,     4,     5,    -1,     7,    -1,    -1,    -1,    11,    12,
04089       -1,    -1,    -1,    16,   126,    18,    19,    20,    21,    22,
04090       23,    24,    -1,    -1,    -1,    -1,    -1,    30,    31,    32,
04091       33,    34,    35,    36,    -1,    -1,    39,    -1,    -1,    -1,
04092       -1,    -1,    -1,    46,    -1,    -1,    49,    50,    51,    52,
04093       53,    54,    55,    56,    57,    -1,    59,    60,    -1,    62,
04094       63,    64,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04095       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04096       -1,    -1,    -1,    86,    -1,    -1,    89,    90,    -1,    92,
04097       93,    -1,    -1,    -1,    -1,    98,    99,   100,   101,   102,
04098      103,   104,   105,   106,    -1,    -1,    -1,    -1,    -1,    -1,
04099       52,    53,    -1,    -1,    56,    -1,    -1,    -1,    -1,    -1,
04100       -1,    -1,    -1,   126,    66,    67,    68,    69,    70,    71,
04101       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
04102       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04103       -1,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,
04104       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04105       -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,   121,
04106      122,   123,   124,   125,    -1,   127,   128,    52,    53,    -1,
04107       -1,    56,    -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,
04108       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
04109       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
04110       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04111       95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04112       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04113       -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
04114      125,    -1,   127,   128,    52,    53,    -1,    -1,    56,    -1,
04115      135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,
04116       68,    69,    70,    71,    72,    73,    74,    -1,    -1,    77,
04117       78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,
04118       -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,
04119       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04120       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,   117,
04121      118,   119,   120,   121,   122,   123,   124,   125,    -1,   127,
04122      128,    52,    53,    -1,    -1,    56,    -1,   135,    -1,    -1,
04123       -1,    -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,
04124       71,    72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,
04125       81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,
04126       -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,
04127       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04128       -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,
04129      121,   122,   123,   124,   125,    -1,   127,   128,    52,    53,
04130       -1,    -1,    56,    -1,   135,    -1,    -1,    -1,    -1,    -1,
04131       -1,    -1,    66,    67,    68,    69,    70,    71,    72,    73,
04132       74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,
04133       84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04134       -1,    95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04135       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04136       -1,    -1,   116,   117,   118,   119,   120,   121,   122,   123,
04137      124,   125,    -1,   127,   128,    52,    53,    -1,    -1,    56,
04138       -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,
04139       67,    68,    69,    70,    71,    72,    73,    74,    -1,    -1,
04140       77,    78,    -1,    -1,    81,    82,    83,    84,    -1,    -1,
04141       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,    96,
04142       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04143       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,
04144      117,   118,   119,   120,   121,   122,   123,   124,   125,    -1,
04145      127,   128,    52,    53,    -1,    -1,    56,    -1,   135,    -1,
04146       -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,    69,
04147       70,    71,    72,    73,    74,    -1,    -1,    77,    78,    -1,
04148       -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,    -1,
04149       -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,    -1,
04150       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04151       -1,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,   119,
04152      120,   121,   122,   123,   124,   125,    -1,   127,   128,    52,
04153       53,    -1,    -1,    56,    -1,   135,    -1,    -1,    -1,    -1,
04154       -1,    -1,    -1,    66,    67,    68,    69,    70,    71,    72,
04155       73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,    82,
04156       83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04157       -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,    -1,
04158       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04159       -1,    -1,    -1,   116,   117,   118,   119,   120,   121,   122,
04160      123,   124,   125,    -1,   127,   128,    52,    53,    -1,    -1,
04161       56,    -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04162       66,    67,    68,    69,    70,    71,    72,    73,    74,    -1,
04163       -1,    77,    78,    -1,    -1,    81,    82,    83,    84,    -1,
04164       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    95,
04165       96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04166       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04167      116,   117,   118,   119,   120,   121,   122,   123,   124,   125,
04168       -1,   127,   128,    52,    53,    -1,    -1,    56,    -1,   135,
04169       -1,    -1,    -1,    -1,    -1,    -1,    -1,    66,    67,    68,
04170       69,    70,    71,    72,    73,    74,    -1,    -1,    77,    78,
04171       -1,    -1,    81,    82,    83,    84,    -1,    -1,    -1,    -1,
04172       -1,    -1,    -1,    -1,    -1,    -1,    95,    96,    -1,    -1,
04173       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04174       -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,   117,   118,
04175      119,   120,   121,   122,   123,   124,   125,    -1,   127,   128,
04176       52,    53,    -1,    -1,    56,    -1,   135,    -1,    -1,    -1,
04177       -1,    -1,    -1,    -1,    66,    67,    68,    69,    70,    71,
04178       72,    73,    74,    -1,    -1,    77,    78,    -1,    -1,    81,
04179       82,    83,    84,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04180       -1,    -1,    -1,    95,    96,    -1,    -1,    -1,    -1,    -1,
04181       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04182       -1,    -1,    -1,    -1,   116,   117,   118,   119,   120,   121,
04183      122,   123,   124,   125,    -1,   127,   128,    52,    53,    -1,
04184       -1,    56,    -1,   135,    -1,    -1,    -1,    -1,    -1,    -1,
04185       -1,    66,    67,    68,    69,    70,    71,    72,    73,    74,
04186       -1,    -1,    77,    78,    -1,    -1,    81,    82,    83,    84,
04187       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04188       95,    96,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04189       -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
04190       -1,   116,   117,   118,   119,   120,   121,   122,   123,   124,
04191      125,    -1,   127,   128,    -1,    -1,    -1,    -1,    -1,    -1,
04192      135
04193 };
04194 
04195 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
04196    symbol of state STATE-NUM.  */
04197 static const yytype_uint16 yystos[] =
04198 {
04199        0,   143,   144,     0,     1,     3,     4,     5,     6,     7,
04200       11,    12,    16,    18,    19,    20,    21,    22,    23,    24,
04201       30,    31,    32,    33,    34,    35,    36,    39,    45,    46,
04202       47,    48,    49,    50,    51,    52,    53,    54,    55,    56,
04203       57,    59,    60,    62,    63,    64,    66,    67,    86,    89,
04204       90,    92,    93,    95,    98,    99,   100,   101,   102,   103,
04205      104,   105,   106,   126,   127,   128,   145,   146,   147,   154,
04206      156,   157,   159,   160,   163,   164,   165,   167,   168,   169,
04207      171,   172,   182,   196,   215,   216,   217,   218,   219,   220,
04208      221,   222,   223,   224,   225,   251,   252,   266,   267,   268,
04209      269,   270,   271,   272,   275,   277,   278,   290,   292,   293,
04210      294,   295,   296,   297,   298,   329,   340,   147,     3,     4,
04211        5,     6,     7,     8,     9,    10,    11,    12,    13,    14,
04212       15,    16,    17,    18,    19,    20,    21,    22,    23,    24,
04213       25,    26,    30,    31,    32,    33,    34,    35,    36,    37,
04214       38,    39,    45,    46,    47,    48,    49,    50,    51,    52,
04215       53,    56,    66,    67,    68,    69,    70,    71,    72,    73,
04216       74,    77,    78,    81,    82,    83,    84,    95,    96,   116,
04217      117,   118,   119,   120,   121,   122,   123,   124,   125,   127,
04218      128,   135,   175,   176,   177,   178,   180,   181,   290,   292,
04219       39,    58,    86,    89,    95,    96,    97,   127,   164,   172,
04220      182,   184,   189,   192,   194,   215,   294,   295,   297,   298,
04221      327,   328,   189,   189,   136,   190,   191,   136,   186,   190,
04222      136,   141,   334,    54,   177,   334,   148,   130,    21,    22,
04223       30,    31,    32,   163,   182,   215,   182,    56,     1,    47,
04224       89,   150,   151,   152,   154,   166,   167,   340,   198,   199,
04225      185,   194,   327,   340,   184,   326,   327,   340,    46,    86,
04226      126,   134,   171,   196,   215,   294,   295,   298,   243,   244,
04227       54,    55,    57,   175,   282,   291,   281,   282,   283,   140,
04228      273,   140,   279,   140,   276,   140,   280,    59,    60,   159,
04229      182,   182,   139,   141,   333,   338,   339,    40,    41,    42,
04230       43,    44,    37,    38,    26,   130,   186,   190,   257,    28,
04231      249,   113,   134,    89,    95,   168,   113,    68,    69,    70,
04232       71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
04233       83,    84,   114,   116,   117,   118,   119,   120,   121,   122,
04234      123,   124,   125,    85,   132,   133,   197,   157,   158,   158,
04235      202,   204,   158,   333,   339,    86,   165,   172,   215,   231,
04236      294,   295,   298,    52,    56,    83,    86,   173,   174,   215,
04237      294,   295,   298,   174,    33,    34,    35,    36,    49,    50,
04238       51,    52,    56,   136,   175,   296,   324,    85,   133,   332,
04239      257,   269,    87,    87,   134,   184,    56,   184,   184,   184,
04240      113,    88,   134,   193,   340,    85,   132,   133,    87,    87,
04241      134,   193,   189,   334,   335,   189,   188,   189,   194,   327,
04242      340,   157,   335,   157,    54,    63,    64,   155,   136,   183,
04243      130,   150,    85,   133,    87,   154,   153,   166,   137,   333,
04244      339,   335,   335,   157,   138,   134,   141,   337,   134,   337,
04245      131,   337,   334,    56,    59,    60,   168,   170,   134,    85,
04246      132,   133,   245,    61,   107,   109,   110,   284,   110,   284,
04247      110,    65,   284,   110,   110,   274,   284,   110,    61,   110,
04248      110,   110,   274,   110,    61,   110,    68,    68,   139,   147,
04249      158,   158,   158,   158,   154,   157,   157,   259,   258,    94,
04250      161,   250,    95,   159,   184,   194,   195,   166,   134,   171,
04251      134,   156,   159,   172,   182,   184,   195,   182,   182,   182,
04252      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
04253      182,   182,   182,   182,   182,   182,   182,   182,   182,   182,
04254      182,   182,   182,    52,    53,    56,   180,   256,   330,   331,
04255      188,    52,    53,    56,   180,   255,   330,   149,   150,    13,
04256      227,   338,   227,   158,   158,   333,    17,   260,    56,    85,
04257      132,   133,    25,   157,    52,    56,   173,     1,   117,   299,
04258      338,    85,   132,   133,   211,   325,   212,   332,    52,    56,
04259      330,   159,   182,   159,   182,   179,   182,   184,    95,   184,
04260      192,   327,    52,    56,   188,    52,    56,   328,   335,   137,
04261      335,   134,   134,   335,   177,   201,   182,   145,   131,   330,
04262      330,   182,   130,   335,   152,   200,   327,   134,   170,    52,
04263       56,   188,    52,    56,    52,    54,    55,    56,    57,    58,
04264       68,    89,    95,    96,    97,   120,   123,   136,   247,   302,
04265      304,   305,   306,   307,   308,   309,   312,   313,   314,   315,
04266      318,   319,   320,   321,   322,   286,   285,   140,   284,   140,
04267      140,   140,   182,   182,    76,   118,   238,   239,   340,   238,
04268      162,   238,   184,   134,   335,   170,   134,   113,    44,   334,
04269       87,    87,   186,   190,   254,   334,   336,    87,    87,   186,
04270      190,   253,    10,   226,     8,   262,   340,   150,    13,   150,
04271       27,   228,   338,   228,   260,   194,   226,    52,    56,   188,
04272       52,    56,   206,   209,   338,   300,   208,    52,    56,   173,
04273      188,   149,   157,   136,   301,   304,   213,   186,   187,   190,
04274      340,    44,   177,   184,   193,    87,    87,   336,    87,    87,
04275      327,   157,   131,   145,   335,   337,   168,   336,   113,   184,
04276       52,    89,    95,   232,   233,   234,   306,   304,   246,   134,
04277      303,   134,   323,   340,    52,   134,   323,   134,   303,    52,
04278      134,   303,    52,   287,    54,    55,    57,   289,   298,    52,
04279       58,   235,   237,   240,   308,   310,   311,   314,   316,   317,
04280      320,   322,   334,   150,   150,   238,   150,    95,   184,   170,
04281      182,   115,   159,   182,   159,   182,   161,   186,   138,    87,
04282      159,   182,   159,   182,   161,   187,   184,   195,   263,   340,
04283       15,   230,   340,    14,   229,   230,   230,   203,   205,   226,
04284      134,   227,   336,   158,   338,   158,   149,   336,   226,   335,
04285      304,   149,   338,   175,   257,   249,   182,    87,   134,   335,
04286      131,   184,   234,   134,   306,   134,   335,   240,    29,   111,
04287      248,   302,   307,   318,   320,   309,   314,   322,   308,   315,
04288      320,   308,   288,   113,    86,   215,   240,   118,   134,   236,
04289      134,   323,   323,   134,   236,   134,   236,   139,    10,   131,
04290      150,    10,   184,   182,   159,   182,    88,   264,   340,   150,
04291        9,   265,   340,   158,   226,   226,   150,   150,   184,   150,
04292      228,   210,   338,   226,   335,   226,   214,   335,   233,   134,
04293       95,   232,   137,   150,   150,   134,   303,   134,   303,   323,
04294      134,   303,   134,   303,   303,   150,   215,    56,    85,   118,
04295      235,   317,   320,   310,   314,   308,   316,   320,   308,    52,
04296      241,   242,   305,   131,    86,   172,   215,   294,   295,   298,
04297      227,   150,   227,   226,   226,   230,   260,   261,   207,   149,
04298      301,   134,   233,   134,   306,    10,   131,   308,   320,   308,
04299      308,   108,    52,    56,   134,   236,   134,   236,   323,   134,
04300      236,   134,   236,   236,   134,   334,    56,    85,   132,   133,
04301      150,   150,   150,   226,   149,   233,   134,   303,   134,   303,
04302      303,   303,   308,   320,   308,   308,   242,    52,    56,   188,
04303       52,    56,   262,   229,   226,   226,   233,   308,   236,   134,
04304      236,   236,   236,   336,   303,   308,   236
04305 };
04306 
04307 #define yyerrok         (yyerrstatus = 0)
04308 #define yyclearin       (yychar = YYEMPTY)
04309 #define YYEMPTY         (-2)
04310 #define YYEOF           0
04311 
04312 #define YYACCEPT        goto yyacceptlab
04313 #define YYABORT         goto yyabortlab
04314 #define YYERROR         goto yyerrorlab
04315 
04316 
04317 /* Like YYERROR except do call yyerror.  This remains here temporarily
04318    to ease the transition to the new meaning of YYERROR, for GCC.
04319    Once GCC version 2 has supplanted version 1, this can go.  However,
04320    YYFAIL appears to be in use.  Nevertheless, it is formally deprecated
04321    in Bison 2.4.2's NEWS entry, where a plan to phase it out is
04322    discussed.  */
04323 
04324 #define YYFAIL          goto yyerrlab
04325 #if defined YYFAIL
04326   /* This is here to suppress warnings from the GCC cpp's
04327      -Wunused-macros.  Normally we don't worry about that warning, but
04328      some users do, and we want to make it easy for users to remove
04329      YYFAIL uses, which will produce warnings from Bison 2.5.  */
04330 #endif
04331 
04332 #define YYRECOVERING()  (!!yyerrstatus)
04333 
04334 #define YYBACKUP(Token, Value)                                  \
04335 do                                                              \
04336   if (yychar == YYEMPTY && yylen == 1)                          \
04337     {                                                           \
04338       yychar = (Token);                                         \
04339       yylval = (Value);                                         \
04340       YYPOPSTACK (1);                                           \
04341       goto yybackup;                                            \
04342     }                                                           \
04343   else                                                          \
04344     {                                                           \
04345       parser_yyerror (parser, YY_("syntax error: cannot back up")); \
04346       YYERROR;                                                  \
04347     }                                                           \
04348 while (YYID (0))
04349 
04350 
04351 #define YYTERROR        1
04352 #define YYERRCODE       256
04353 
04354 
04355 /* YYLLOC_DEFAULT -- Set CURRENT to span from RHS[1] to RHS[N].
04356    If N is 0, then set CURRENT to the empty location which ends
04357    the previous symbol: RHS[0] (always defined).  */
04358 
04359 #define YYRHSLOC(Rhs, K) ((Rhs)[K])
04360 #ifndef YYLLOC_DEFAULT
04361 # define YYLLOC_DEFAULT(Current, Rhs, N)                                \
04362     do                                                                  \
04363       if (YYID (N))                                                    \
04364         {                                                               \
04365           (Current).first_line   = YYRHSLOC (Rhs, 1).first_line;        \
04366           (Current).first_column = YYRHSLOC (Rhs, 1).first_column;      \
04367           (Current).last_line    = YYRHSLOC (Rhs, N).last_line;         \
04368           (Current).last_column  = YYRHSLOC (Rhs, N).last_column;       \
04369         }                                                               \
04370       else                                                              \
04371         {                                                               \
04372           (Current).first_line   = (Current).last_line   =              \
04373             YYRHSLOC (Rhs, 0).last_line;                                \
04374           (Current).first_column = (Current).last_column =              \
04375             YYRHSLOC (Rhs, 0).last_column;                              \
04376         }                                                               \
04377     while (YYID (0))
04378 #endif
04379 
04380 
04381 /* This macro is provided for backward compatibility. */
04382 
04383 #ifndef YY_LOCATION_PRINT
04384 # define YY_LOCATION_PRINT(File, Loc) ((void) 0)
04385 #endif
04386 
04387 
04388 /* YYLEX -- calling `yylex' with the right arguments.  */
04389 
04390 #ifdef YYLEX_PARAM
04391 # define YYLEX yylex (&yylval, YYLEX_PARAM)
04392 #else
04393 # define YYLEX yylex (&yylval, parser)
04394 #endif
04395 
04396 /* Enable debugging if requested.  */
04397 #if YYDEBUG
04398 
04399 # ifndef YYFPRINTF
04400 #  include <stdio.h> /* INFRINGES ON USER NAME SPACE */
04401 #  define YYFPRINTF fprintf
04402 # endif
04403 
04404 # define YYDPRINTF(Args)                        \
04405 do {                                            \
04406   if (yydebug)                                  \
04407     YYFPRINTF Args;                             \
04408 } while (YYID (0))
04409 
04410 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)                    \
04411 do {                                                                      \
04412   if (yydebug)                                                            \
04413     {                                                                     \
04414       YYFPRINTF (stderr, "%s ", Title);                                   \
04415       yy_symbol_print (stderr,                                            \
04416                   Type, Value, parser); \
04417       YYFPRINTF (stderr, "\n");                                           \
04418     }                                                                     \
04419 } while (YYID (0))
04420 
04421 
04422 /*--------------------------------.
04423 | Print this symbol on YYOUTPUT.  |
04424 `--------------------------------*/
04425 
04426 /*ARGSUSED*/
04427 #if (defined __STDC__ || defined __C99__FUNC__ \
04428      || defined __cplusplus || defined _MSC_VER)
04429 static void
04430 yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04431 #else
04432 static void
04433 yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser)
04434     FILE *yyoutput;
04435     int yytype;
04436     YYSTYPE const * const yyvaluep;
04437     struct parser_params *parser;
04438 #endif
04439 {
04440   if (!yyvaluep)
04441     return;
04442   YYUSE (parser);
04443 # ifdef YYPRINT
04444   if (yytype < YYNTOKENS)
04445     YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
04446 # else
04447   YYUSE (yyoutput);
04448 # endif
04449   switch (yytype)
04450     {
04451       default:
04452         break;
04453     }
04454 }
04455 
04456 
04457 /*--------------------------------.
04458 | Print this symbol on YYOUTPUT.  |
04459 `--------------------------------*/
04460 
04461 #if (defined __STDC__ || defined __C99__FUNC__ \
04462      || defined __cplusplus || defined _MSC_VER)
04463 static void
04464 yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep, struct parser_params *parser)
04465 #else
04466 static void
04467 yy_symbol_print (yyoutput, yytype, yyvaluep, parser)
04468     FILE *yyoutput;
04469     int yytype;
04470     YYSTYPE const * const yyvaluep;
04471     struct parser_params *parser;
04472 #endif
04473 {
04474   if (yytype < YYNTOKENS)
04475     YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
04476   else
04477     YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
04478 
04479   yy_symbol_value_print (yyoutput, yytype, yyvaluep, parser);
04480   YYFPRINTF (yyoutput, ")");
04481 }
04482 
04483 /*------------------------------------------------------------------.
04484 | yy_stack_print -- Print the state stack from its BOTTOM up to its |
04485 | TOP (included).                                                   |
04486 `------------------------------------------------------------------*/
04487 
04488 #if (defined __STDC__ || defined __C99__FUNC__ \
04489      || defined __cplusplus || defined _MSC_VER)
04490 static void
04491 yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
04492 #else
04493 static void
04494 yy_stack_print (yybottom, yytop)
04495     yytype_int16 *yybottom;
04496     yytype_int16 *yytop;
04497 #endif
04498 {
04499   YYFPRINTF (stderr, "Stack now");
04500   for (; yybottom <= yytop; yybottom++)
04501     {
04502       int yybot = *yybottom;
04503       YYFPRINTF (stderr, " %d", yybot);
04504     }
04505   YYFPRINTF (stderr, "\n");
04506 }
04507 
04508 # define YY_STACK_PRINT(Bottom, Top)                            \
04509 do {                                                            \
04510   if (yydebug)                                                  \
04511     yy_stack_print ((Bottom), (Top));                           \
04512 } while (YYID (0))
04513 
04514 
04515 /*------------------------------------------------.
04516 | Report that the YYRULE is going to be reduced.  |
04517 `------------------------------------------------*/
04518 
04519 #if (defined __STDC__ || defined __C99__FUNC__ \
04520      || defined __cplusplus || defined _MSC_VER)
04521 static void
04522 yy_reduce_print (YYSTYPE *yyvsp, int yyrule, struct parser_params *parser)
04523 #else
04524 static void
04525 yy_reduce_print (yyvsp, yyrule, parser)
04526     YYSTYPE *yyvsp;
04527     int yyrule;
04528     struct parser_params *parser;
04529 #endif
04530 {
04531   int yynrhs = yyr2[yyrule];
04532   int yyi;
04533   unsigned long int yylno = yyrline[yyrule];
04534   YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
04535              yyrule - 1, yylno);
04536   /* The symbols being reduced.  */
04537   for (yyi = 0; yyi < yynrhs; yyi++)
04538     {
04539       YYFPRINTF (stderr, "   $%d = ", yyi + 1);
04540       yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
04541                        &(yyvsp[(yyi + 1) - (yynrhs)])
04542                                        , parser);
04543       YYFPRINTF (stderr, "\n");
04544     }
04545 }
04546 
04547 # define YY_REDUCE_PRINT(Rule)          \
04548 do {                                    \
04549   if (yydebug)                          \
04550     yy_reduce_print (yyvsp, Rule, parser); \
04551 } while (YYID (0))
04552 
04553 /* Nonzero means print parse trace.  It is left uninitialized so that
04554    multiple parsers can coexist.  */
04555 #ifndef yydebug
04556 int yydebug;
04557 #endif
04558 #else /* !YYDEBUG */
04559 # define YYDPRINTF(Args)
04560 # define YY_SYMBOL_PRINT(Title, Type, Value, Location)
04561 # define YY_STACK_PRINT(Bottom, Top)
04562 # define YY_REDUCE_PRINT(Rule)
04563 #endif /* !YYDEBUG */
04564 
04565 
04566 /* YYINITDEPTH -- initial size of the parser's stacks.  */
04567 #ifndef YYINITDEPTH
04568 # define YYINITDEPTH 200
04569 #endif
04570 
04571 /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
04572    if the built-in stack extension method is used).
04573 
04574    Do not make this value too large; the results are undefined if
04575    YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
04576    evaluated with infinite-precision integer arithmetic.  */
04577 
04578 #ifndef YYMAXDEPTH
04579 # define YYMAXDEPTH 10000
04580 #endif
04581 
04582 
04583 #if YYERROR_VERBOSE
04584 
04585 # ifndef yystrlen
04586 #  if defined __GLIBC__ && defined _STRING_H
04587 #   define yystrlen strlen
04588 #  else
04589 /* Return the length of YYSTR.  */
04590 #if (defined __STDC__ || defined __C99__FUNC__ \
04591      || defined __cplusplus || defined _MSC_VER)
04592 static YYSIZE_T
04593 yystrlen (const char *yystr)
04594 #else
04595 static YYSIZE_T
04596 yystrlen (yystr)
04597     const char *yystr;
04598 #endif
04599 {
04600   YYSIZE_T yylen;
04601   for (yylen = 0; yystr[yylen]; yylen++)
04602     continue;
04603   return yylen;
04604 }
04605 #  endif
04606 # endif
04607 
04608 # ifndef yystpcpy
04609 #  if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
04610 #   define yystpcpy stpcpy
04611 #  else
04612 /* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
04613    YYDEST.  */
04614 #if (defined __STDC__ || defined __C99__FUNC__ \
04615      || defined __cplusplus || defined _MSC_VER)
04616 static char *
04617 yystpcpy (char *yydest, const char *yysrc)
04618 #else
04619 static char *
04620 yystpcpy (yydest, yysrc)
04621     char *yydest;
04622     const char *yysrc;
04623 #endif
04624 {
04625   char *yyd = yydest;
04626   const char *yys = yysrc;
04627 
04628   while ((*yyd++ = *yys++) != '\0')
04629     continue;
04630 
04631   return yyd - 1;
04632 }
04633 #  endif
04634 # endif
04635 
04636 # ifndef yytnamerr
04637 /* Copy to YYRES the contents of YYSTR after stripping away unnecessary
04638    quotes and backslashes, so that it's suitable for yyerror.  The
04639    heuristic is that double-quoting is unnecessary unless the string
04640    contains an apostrophe, a comma, or backslash (other than
04641    backslash-backslash).  YYSTR is taken from yytname.  If YYRES is
04642    null, do not copy; instead, return the length of what the result
04643    would have been.  */
04644 static YYSIZE_T
04645 yytnamerr (char *yyres, const char *yystr)
04646 {
04647   if (*yystr == '"')
04648     {
04649       YYSIZE_T yyn = 0;
04650       char const *yyp = yystr;
04651 
04652       for (;;)
04653         switch (*++yyp)
04654           {
04655           case '\'':
04656           case ',':
04657             goto do_not_strip_quotes;
04658 
04659           case '\\':
04660             if (*++yyp != '\\')
04661               goto do_not_strip_quotes;
04662             /* Fall through.  */
04663           default:
04664             if (yyres)
04665               yyres[yyn] = *yyp;
04666             yyn++;
04667             break;
04668 
04669           case '"':
04670             if (yyres)
04671               yyres[yyn] = '\0';
04672             return yyn;
04673           }
04674     do_not_strip_quotes: ;
04675     }
04676 
04677   if (! yyres)
04678     return yystrlen (yystr);
04679 
04680   return yystpcpy (yyres, yystr) - yyres;
04681 }
04682 # endif
04683 
04684 /* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
04685    about the unexpected token YYTOKEN for the state stack whose top is
04686    YYSSP.
04687 
04688    Return 0 if *YYMSG was successfully written.  Return 1 if *YYMSG is
04689    not large enough to hold the message.  In that case, also set
04690    *YYMSG_ALLOC to the required number of bytes.  Return 2 if the
04691    required number of bytes is too large to store.  */
04692 static int
04693 yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
04694                 yytype_int16 *yyssp, int yytoken)
04695 {
04696   YYSIZE_T yysize0 = yytnamerr (0, yytname[yytoken]);
04697   YYSIZE_T yysize = yysize0;
04698   YYSIZE_T yysize1;
04699   enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
04700   /* Internationalized format string. */
04701   const char *yyformat = 0;
04702   /* Arguments of yyformat. */
04703   char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
04704   /* Number of reported tokens (one for the "unexpected", one per
04705      "expected"). */
04706   int yycount = 0;
04707 
04708   /* There are many possibilities here to consider:
04709      - Assume YYFAIL is not used.  It's too flawed to consider.  See
04710        <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
04711        for details.  YYERROR is fine as it does not invoke this
04712        function.
04713      - If this state is a consistent state with a default action, then
04714        the only way this function was invoked is if the default action
04715        is an error action.  In that case, don't check for expected
04716        tokens because there are none.
04717      - The only way there can be no lookahead present (in yychar) is if
04718        this state is a consistent state with a default action.  Thus,
04719        detecting the absence of a lookahead is sufficient to determine
04720        that there is no unexpected or expected token to report.  In that
04721        case, just report a simple "syntax error".
04722      - Don't assume there isn't a lookahead just because this state is a
04723        consistent state with a default action.  There might have been a
04724        previous inconsistent state, consistent state with a non-default
04725        action, or user semantic action that manipulated yychar.
04726      - Of course, the expected token list depends on states to have
04727        correct lookahead information, and it depends on the parser not
04728        to perform extra reductions after fetching a lookahead from the
04729        scanner and before detecting a syntax error.  Thus, state merging
04730        (from LALR or IELR) and default reductions corrupt the expected
04731        token list.  However, the list is correct for canonical LR with
04732        one exception: it will still contain any token that will not be
04733        accepted due to an error action in a later state.
04734   */
04735   if (yytoken != YYEMPTY)
04736     {
04737       int yyn = yypact[*yyssp];
04738       yyarg[yycount++] = yytname[yytoken];
04739       if (!yypact_value_is_default (yyn))
04740         {
04741           /* Start YYX at -YYN if negative to avoid negative indexes in
04742              YYCHECK.  In other words, skip the first -YYN actions for
04743              this state because they are default actions.  */
04744           int yyxbegin = yyn < 0 ? -yyn : 0;
04745           /* Stay within bounds of both yycheck and yytname.  */
04746           int yychecklim = YYLAST - yyn + 1;
04747           int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
04748           int yyx;
04749 
04750           for (yyx = yyxbegin; yyx < yyxend; ++yyx)
04751             if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
04752                 && !yytable_value_is_error (yytable[yyx + yyn]))
04753               {
04754                 if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
04755                   {
04756                     yycount = 1;
04757                     yysize = yysize0;
04758                     break;
04759                   }
04760                 yyarg[yycount++] = yytname[yyx];
04761                 yysize1 = yysize + yytnamerr (0, yytname[yyx]);
04762                 if (! (yysize <= yysize1
04763                        && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04764                   return 2;
04765                 yysize = yysize1;
04766               }
04767         }
04768     }
04769 
04770   switch (yycount)
04771     {
04772 # define YYCASE_(N, S)                      \
04773       case N:                               \
04774         yyformat = S;                       \
04775       break
04776       YYCASE_(0, YY_("syntax error"));
04777       YYCASE_(1, YY_("syntax error, unexpected %s"));
04778       YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
04779       YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
04780       YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
04781       YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
04782 # undef YYCASE_
04783     }
04784 
04785   yysize1 = yysize + yystrlen (yyformat);
04786   if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
04787     return 2;
04788   yysize = yysize1;
04789 
04790   if (*yymsg_alloc < yysize)
04791     {
04792       *yymsg_alloc = 2 * yysize;
04793       if (! (yysize <= *yymsg_alloc
04794              && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
04795         *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
04796       return 1;
04797     }
04798 
04799   /* Avoid sprintf, as that infringes on the user's name space.
04800      Don't have undefined behavior even if the translation
04801      produced a string with the wrong number of "%s"s.  */
04802   {
04803     char *yyp = *yymsg;
04804     int yyi = 0;
04805     while ((*yyp = *yyformat) != '\0')
04806       if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
04807         {
04808           yyp += yytnamerr (yyp, yyarg[yyi++]);
04809           yyformat += 2;
04810         }
04811       else
04812         {
04813           yyp++;
04814           yyformat++;
04815         }
04816   }
04817   return 0;
04818 }
04819 #endif /* YYERROR_VERBOSE */
04820 
04821 /*-----------------------------------------------.
04822 | Release the memory associated to this symbol.  |
04823 `-----------------------------------------------*/
04824 
04825 /*ARGSUSED*/
04826 #if (defined __STDC__ || defined __C99__FUNC__ \
04827      || defined __cplusplus || defined _MSC_VER)
04828 static void
04829 yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep, struct parser_params *parser)
04830 #else
04831 static void
04832 yydestruct (yymsg, yytype, yyvaluep, parser)
04833     const char *yymsg;
04834     int yytype;
04835     YYSTYPE *yyvaluep;
04836     struct parser_params *parser;
04837 #endif
04838 {
04839   YYUSE (yyvaluep);
04840   YYUSE (parser);
04841 
04842   if (!yymsg)
04843     yymsg = "Deleting";
04844   YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
04845 
04846   switch (yytype)
04847     {
04848 
04849       default:
04850         break;
04851     }
04852 }
04853 
04854 
04855 /* Prevent warnings from -Wmissing-prototypes.  */
04856 #ifdef YYPARSE_PARAM
04857 #if defined __STDC__ || defined __cplusplus
04858 int yyparse (void *YYPARSE_PARAM);
04859 #else
04860 int yyparse ();
04861 #endif
04862 #else /* ! YYPARSE_PARAM */
04863 #if defined __STDC__ || defined __cplusplus
04864 int yyparse (struct parser_params *parser);
04865 #else
04866 int yyparse ();
04867 #endif
04868 #endif /* ! YYPARSE_PARAM */
04869 
04870 
04871 /*----------.
04872 | yyparse.  |
04873 `----------*/
04874 
04875 #ifdef YYPARSE_PARAM
04876 #if (defined __STDC__ || defined __C99__FUNC__ \
04877      || defined __cplusplus || defined _MSC_VER)
04878 int
04879 yyparse (void *YYPARSE_PARAM)
04880 #else
04881 int
04882 yyparse (YYPARSE_PARAM)
04883     void *YYPARSE_PARAM;
04884 #endif
04885 #else /* ! YYPARSE_PARAM */
04886 #if (defined __STDC__ || defined __C99__FUNC__ \
04887      || defined __cplusplus || defined _MSC_VER)
04888 int
04889 yyparse (struct parser_params *parser)
04890 #else
04891 int
04892 yyparse (parser)
04893     struct parser_params *parser;
04894 #endif
04895 #endif
04896 {
04897 /* The lookahead symbol.  */
04898 int yychar;
04899 
04900 /* The semantic value of the lookahead symbol.  */
04901 YYSTYPE yylval;
04902 
04903     /* Number of syntax errors so far.  */
04904     int yynerrs;
04905 
04906     int yystate;
04907     /* Number of tokens to shift before error messages enabled.  */
04908     int yyerrstatus;
04909 
04910     /* The stacks and their tools:
04911        `yyss': related to states.
04912        `yyvs': related to semantic values.
04913 
04914        Refer to the stacks thru separate pointers, to allow yyoverflow
04915        to reallocate them elsewhere.  */
04916 
04917     /* The state stack.  */
04918     yytype_int16 yyssa[YYINITDEPTH];
04919     yytype_int16 *yyss;
04920     yytype_int16 *yyssp;
04921 
04922     /* The semantic value stack.  */
04923     YYSTYPE yyvsa[YYINITDEPTH];
04924     YYSTYPE *yyvs;
04925     YYSTYPE *yyvsp;
04926 
04927     YYSIZE_T yystacksize;
04928 
04929   int yyn;
04930   int yyresult;
04931   /* Lookahead token as an internal (translated) token number.  */
04932   int yytoken;
04933   /* The variables used to return semantic value and location from the
04934      action routines.  */
04935   YYSTYPE yyval;
04936 
04937 #if YYERROR_VERBOSE
04938   /* Buffer for error messages, and its allocated size.  */
04939   char yymsgbuf[128];
04940   char *yymsg = yymsgbuf;
04941   YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
04942 #endif
04943 
04944 #define YYPOPSTACK(N)   (yyvsp -= (N), yyssp -= (N))
04945 
04946   /* The number of symbols on the RHS of the reduced rule.
04947      Keep to zero when no symbol should be popped.  */
04948   int yylen = 0;
04949 
04950   yytoken = 0;
04951   yyss = yyssa;
04952   yyvs = yyvsa;
04953   yystacksize = YYINITDEPTH;
04954 
04955   YYDPRINTF ((stderr, "Starting parse\n"));
04956 
04957   yystate = 0;
04958   yyerrstatus = 0;
04959   yynerrs = 0;
04960   yychar = YYEMPTY; /* Cause a token to be read.  */
04961 
04962   /* Initialize stack pointers.
04963      Waste one element of value and location stack
04964      so that they stay on the same level as the state stack.
04965      The wasted elements are never initialized.  */
04966   yyssp = yyss;
04967   yyvsp = yyvs;
04968 
04969   goto yysetstate;
04970 
04971 /*------------------------------------------------------------.
04972 | yynewstate -- Push a new state, which is found in yystate.  |
04973 `------------------------------------------------------------*/
04974  yynewstate:
04975   /* In all cases, when you get here, the value and location stacks
04976      have just been pushed.  So pushing a state here evens the stacks.  */
04977   yyssp++;
04978 
04979  yysetstate:
04980   *yyssp = yystate;
04981 
04982   if (yyss + yystacksize - 1 <= yyssp)
04983     {
04984       /* Get the current used size of the three stacks, in elements.  */
04985       YYSIZE_T yysize = yyssp - yyss + 1;
04986 
04987 #ifdef yyoverflow
04988       {
04989         /* Give user a chance to reallocate the stack.  Use copies of
04990            these so that the &'s don't force the real ones into
04991            memory.  */
04992         YYSTYPE *yyvs1 = yyvs;
04993         yytype_int16 *yyss1 = yyss;
04994 
04995         /* Each stack pointer address is followed by the size of the
04996            data in use in that stack, in bytes.  This used to be a
04997            conditional around just the two extra args, but that might
04998            be undefined if yyoverflow is a macro.  */
04999         yyoverflow (YY_("memory exhausted"),
05000                     &yyss1, yysize * sizeof (*yyssp),
05001                     &yyvs1, yysize * sizeof (*yyvsp),
05002                     &yystacksize);
05003 
05004         yyss = yyss1;
05005         yyvs = yyvs1;
05006       }
05007 #else /* no yyoverflow */
05008 # ifndef YYSTACK_RELOCATE
05009       goto yyexhaustedlab;
05010 # else
05011       /* Extend the stack our own way.  */
05012       if (YYMAXDEPTH <= yystacksize)
05013         goto yyexhaustedlab;
05014       yystacksize *= 2;
05015       if (YYMAXDEPTH < yystacksize)
05016         yystacksize = YYMAXDEPTH;
05017 
05018       {
05019         yytype_int16 *yyss1 = yyss;
05020         union yyalloc *yyptr =
05021           (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
05022         if (! yyptr)
05023           goto yyexhaustedlab;
05024         YYSTACK_RELOCATE (yyss_alloc, yyss);
05025         YYSTACK_RELOCATE (yyvs_alloc, yyvs);
05026 #  undef YYSTACK_RELOCATE
05027         if (yyss1 != yyssa)
05028           YYSTACK_FREE (yyss1);
05029       }
05030 # endif
05031 #endif /* no yyoverflow */
05032 
05033       yyssp = yyss + yysize - 1;
05034       yyvsp = yyvs + yysize - 1;
05035 
05036       YYDPRINTF ((stderr, "Stack size increased to %lu\n",
05037                   (unsigned long int) yystacksize));
05038 
05039       if (yyss + yystacksize - 1 <= yyssp)
05040         YYABORT;
05041     }
05042 
05043   YYDPRINTF ((stderr, "Entering state %d\n", yystate));
05044 
05045   if (yystate == YYFINAL)
05046     YYACCEPT;
05047 
05048   goto yybackup;
05049 
05050 /*-----------.
05051 | yybackup.  |
05052 `-----------*/
05053 yybackup:
05054 
05055   /* Do appropriate processing given the current state.  Read a
05056      lookahead token if we need one and don't already have one.  */
05057 
05058   /* First try to decide what to do without reference to lookahead token.  */
05059   yyn = yypact[yystate];
05060   if (yypact_value_is_default (yyn))
05061     goto yydefault;
05062 
05063   /* Not known => get a lookahead token if don't already have one.  */
05064 
05065   /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol.  */
05066   if (yychar == YYEMPTY)
05067     {
05068       YYDPRINTF ((stderr, "Reading a token: "));
05069       yychar = YYLEX;
05070     }
05071 
05072   if (yychar <= YYEOF)
05073     {
05074       yychar = yytoken = YYEOF;
05075       YYDPRINTF ((stderr, "Now at end of input.\n"));
05076     }
05077   else
05078     {
05079       yytoken = YYTRANSLATE (yychar);
05080       YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
05081     }
05082 
05083   /* If the proper action on seeing token YYTOKEN is to reduce or to
05084      detect an error, take that action.  */
05085   yyn += yytoken;
05086   if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
05087     goto yydefault;
05088   yyn = yytable[yyn];
05089   if (yyn <= 0)
05090     {
05091       if (yytable_value_is_error (yyn))
05092         goto yyerrlab;
05093       yyn = -yyn;
05094       goto yyreduce;
05095     }
05096 
05097   /* Count tokens shifted since error; after three, turn off error
05098      status.  */
05099   if (yyerrstatus)
05100     yyerrstatus--;
05101 
05102   /* Shift the lookahead token.  */
05103   YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
05104 
05105   /* Discard the shifted token.  */
05106   yychar = YYEMPTY;
05107 
05108   yystate = yyn;
05109   *++yyvsp = yylval;
05110 
05111   goto yynewstate;
05112 
05113 
05114 /*-----------------------------------------------------------.
05115 | yydefault -- do the default action for the current state.  |
05116 `-----------------------------------------------------------*/
05117 yydefault:
05118   yyn = yydefact[yystate];
05119   if (yyn == 0)
05120     goto yyerrlab;
05121   goto yyreduce;
05122 
05123 
05124 /*-----------------------------.
05125 | yyreduce -- Do a reduction.  |
05126 `-----------------------------*/
05127 yyreduce:
05128   /* yyn is the number of a rule to reduce with.  */
05129   yylen = yyr2[yyn];
05130 
05131   /* If YYLEN is nonzero, implement the default value of the action:
05132      `$$ = $1'.
05133 
05134      Otherwise, the following line sets YYVAL to garbage.
05135      This behavior is undocumented and Bison
05136      users should not rely upon it.  Assigning to YYVAL
05137      unconditionally makes the parser a bit smaller, and it avoids a
05138      GCC warning that YYVAL may be used uninitialized.  */
05139   yyval = yyvsp[1-yylen];
05140 
05141 
05142   YY_REDUCE_PRINT (yyn);
05143   switch (yyn)
05144     {
05145         case 2:
05146 
05147 /* Line 1806 of yacc.c  */
05148 #line 855 "parse.y"
05149     {
05150                         lex_state = EXPR_BEG;
05151                     /*%%%*/
05152                         local_push(compile_for_eval || rb_parse_in_main());
05153                     /*%
05154                         local_push(0);
05155                     %*/
05156                     }
05157     break;
05158 
05159   case 3:
05160 
05161 /* Line 1806 of yacc.c  */
05162 #line 864 "parse.y"
05163     {
05164                     /*%%%*/
05165                         if ((yyvsp[(2) - (2)].node) && !compile_for_eval) {
05166                             /* last expression should not be void */
05167                             if (nd_type((yyvsp[(2) - (2)].node)) != NODE_BLOCK) void_expr((yyvsp[(2) - (2)].node));
05168                             else {
05169                                 NODE *node = (yyvsp[(2) - (2)].node);
05170                                 while (node->nd_next) {
05171                                     node = node->nd_next;
05172                                 }
05173                                 void_expr(node->nd_head);
05174                             }
05175                         }
05176                         ruby_eval_tree = NEW_SCOPE(0, block_append(ruby_eval_tree, (yyvsp[(2) - (2)].node)));
05177                     /*%
05178                         $$ = $2;
05179                         parser->result = dispatch1(program, $$);
05180                     %*/
05181                         local_pop();
05182                     }
05183     break;
05184 
05185   case 4:
05186 
05187 /* Line 1806 of yacc.c  */
05188 #line 887 "parse.y"
05189     {
05190                     /*%%%*/
05191                         void_stmts((yyvsp[(1) - (2)].node));
05192                         fixup_nodes(&deferred_nodes);
05193                     /*%
05194                     %*/
05195                         (yyval.node) = (yyvsp[(1) - (2)].node);
05196                     }
05197     break;
05198 
05199   case 5:
05200 
05201 /* Line 1806 of yacc.c  */
05202 #line 898 "parse.y"
05203     {
05204                     /*%%%*/
05205                         (yyval.node) = NEW_BEGIN(0);
05206                     /*%
05207                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05208                                                   dispatch0(void_stmt));
05209                     %*/
05210                     }
05211     break;
05212 
05213   case 6:
05214 
05215 /* Line 1806 of yacc.c  */
05216 #line 907 "parse.y"
05217     {
05218                     /*%%%*/
05219                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05220                     /*%
05221                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05222                     %*/
05223                     }
05224     break;
05225 
05226   case 7:
05227 
05228 /* Line 1806 of yacc.c  */
05229 #line 915 "parse.y"
05230     {
05231                     /*%%%*/
05232                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05233                     /*%
05234                         $$ = dispatch2(stmts_add, $1, $3);
05235                     %*/
05236                     }
05237     break;
05238 
05239   case 8:
05240 
05241 /* Line 1806 of yacc.c  */
05242 #line 923 "parse.y"
05243     {
05244                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05245                     }
05246     break;
05247 
05248   case 10:
05249 
05250 /* Line 1806 of yacc.c  */
05251 #line 930 "parse.y"
05252     {
05253                     /*%%%*/
05254                         /* local_push(0); */
05255                     /*%
05256                     %*/
05257                     }
05258     break;
05259 
05260   case 11:
05261 
05262 /* Line 1806 of yacc.c  */
05263 #line 937 "parse.y"
05264     {
05265                     /*%%%*/
05266                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05267                                                             (yyvsp[(4) - (5)].node));
05268                         /* NEW_PREEXE($4)); */
05269                         /* local_pop(); */
05270                         (yyval.node) = NEW_BEGIN(0);
05271                     /*%
05272                         $$ = dispatch1(BEGIN, $4);
05273                     %*/
05274                     }
05275     break;
05276 
05277   case 12:
05278 
05279 /* Line 1806 of yacc.c  */
05280 #line 954 "parse.y"
05281     {
05282                     /*%%%*/
05283                         (yyval.node) = (yyvsp[(1) - (4)].node);
05284                         if ((yyvsp[(2) - (4)].node)) {
05285                             (yyval.node) = NEW_RESCUE((yyvsp[(1) - (4)].node), (yyvsp[(2) - (4)].node), (yyvsp[(3) - (4)].node));
05286                         }
05287                         else if ((yyvsp[(3) - (4)].node)) {
05288                             rb_warn0("else without rescue is useless");
05289                             (yyval.node) = block_append((yyval.node), (yyvsp[(3) - (4)].node));
05290                         }
05291                         if ((yyvsp[(4) - (4)].node)) {
05292                             if ((yyval.node)) {
05293                                 (yyval.node) = NEW_ENSURE((yyval.node), (yyvsp[(4) - (4)].node));
05294                             }
05295                             else {
05296                                 (yyval.node) = block_append((yyvsp[(4) - (4)].node), NEW_NIL());
05297                             }
05298                         }
05299                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05300                     /*%
05301                         $$ = dispatch4(bodystmt,
05302                                        escape_Qundef($1),
05303                                        escape_Qundef($2),
05304                                        escape_Qundef($3),
05305                                        escape_Qundef($4));
05306                     %*/
05307                     }
05308     break;
05309 
05310   case 13:
05311 
05312 /* Line 1806 of yacc.c  */
05313 #line 984 "parse.y"
05314     {
05315                     /*%%%*/
05316                         void_stmts((yyvsp[(1) - (2)].node));
05317                         fixup_nodes(&deferred_nodes);
05318                     /*%
05319                     %*/
05320                         (yyval.node) = (yyvsp[(1) - (2)].node);
05321                     }
05322     break;
05323 
05324   case 14:
05325 
05326 /* Line 1806 of yacc.c  */
05327 #line 995 "parse.y"
05328     {
05329                     /*%%%*/
05330                         (yyval.node) = NEW_BEGIN(0);
05331                     /*%
05332                         $$ = dispatch2(stmts_add, dispatch0(stmts_new),
05333                                                   dispatch0(void_stmt));
05334                     %*/
05335                     }
05336     break;
05337 
05338   case 15:
05339 
05340 /* Line 1806 of yacc.c  */
05341 #line 1004 "parse.y"
05342     {
05343                     /*%%%*/
05344                         (yyval.node) = newline_node((yyvsp[(1) - (1)].node));
05345                     /*%
05346                         $$ = dispatch2(stmts_add, dispatch0(stmts_new), $1);
05347                     %*/
05348                     }
05349     break;
05350 
05351   case 16:
05352 
05353 /* Line 1806 of yacc.c  */
05354 #line 1012 "parse.y"
05355     {
05356                     /*%%%*/
05357                         (yyval.node) = block_append((yyvsp[(1) - (3)].node), newline_node((yyvsp[(3) - (3)].node)));
05358                     /*%
05359                         $$ = dispatch2(stmts_add, $1, $3);
05360                     %*/
05361                     }
05362     break;
05363 
05364   case 17:
05365 
05366 /* Line 1806 of yacc.c  */
05367 #line 1020 "parse.y"
05368     {
05369                         (yyval.node) = remove_begin((yyvsp[(2) - (2)].node));
05370                     }
05371     break;
05372 
05373   case 18:
05374 
05375 /* Line 1806 of yacc.c  */
05376 #line 1026 "parse.y"
05377     {
05378                         (yyval.node) = (yyvsp[(1) - (1)].node);
05379                     }
05380     break;
05381 
05382   case 19:
05383 
05384 /* Line 1806 of yacc.c  */
05385 #line 1030 "parse.y"
05386     {
05387                         yyerror("BEGIN is permitted only at toplevel");
05388                     /*%%%*/
05389                         /* local_push(0); */
05390                     /*%
05391                     %*/
05392                     }
05393     break;
05394 
05395   case 20:
05396 
05397 /* Line 1806 of yacc.c  */
05398 #line 1038 "parse.y"
05399     {
05400                     /*%%%*/
05401                         ruby_eval_tree_begin = block_append(ruby_eval_tree_begin,
05402                                                             (yyvsp[(4) - (5)].node));
05403                         /* NEW_PREEXE($4)); */
05404                         /* local_pop(); */
05405                         (yyval.node) = NEW_BEGIN(0);
05406                     /*%
05407                         $$ = dispatch1(BEGIN, $4);
05408                     %*/
05409                     }
05410     break;
05411 
05412   case 21:
05413 
05414 /* Line 1806 of yacc.c  */
05415 #line 1050 "parse.y"
05416     {lex_state = EXPR_FNAME;}
05417     break;
05418 
05419   case 22:
05420 
05421 /* Line 1806 of yacc.c  */
05422 #line 1051 "parse.y"
05423     {
05424                     /*%%%*/
05425                         (yyval.node) = NEW_ALIAS((yyvsp[(2) - (4)].node), (yyvsp[(4) - (4)].node));
05426                     /*%
05427                         $$ = dispatch2(alias, $2, $4);
05428                     %*/
05429                     }
05430     break;
05431 
05432   case 23:
05433 
05434 /* Line 1806 of yacc.c  */
05435 #line 1059 "parse.y"
05436     {
05437                     /*%%%*/
05438                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].id));
05439                     /*%
05440                         $$ = dispatch2(var_alias, $2, $3);
05441                     %*/
05442                     }
05443     break;
05444 
05445   case 24:
05446 
05447 /* Line 1806 of yacc.c  */
05448 #line 1067 "parse.y"
05449     {
05450                     /*%%%*/
05451                         char buf[2];
05452                         buf[0] = '$';
05453                         buf[1] = (char)(yyvsp[(3) - (3)].node)->nd_nth;
05454                         (yyval.node) = NEW_VALIAS((yyvsp[(2) - (3)].id), rb_intern2(buf, 2));
05455                     /*%
05456                         $$ = dispatch2(var_alias, $2, $3);
05457                     %*/
05458                     }
05459     break;
05460 
05461   case 25:
05462 
05463 /* Line 1806 of yacc.c  */
05464 #line 1078 "parse.y"
05465     {
05466                     /*%%%*/
05467                         yyerror("can't make alias for the number variables");
05468                         (yyval.node) = NEW_BEGIN(0);
05469                     /*%
05470                         $$ = dispatch2(var_alias, $2, $3);
05471                         $$ = dispatch1(alias_error, $$);
05472                     %*/
05473                     }
05474     break;
05475 
05476   case 26:
05477 
05478 /* Line 1806 of yacc.c  */
05479 #line 1088 "parse.y"
05480     {
05481                     /*%%%*/
05482                         (yyval.node) = (yyvsp[(2) - (2)].node);
05483                     /*%
05484                         $$ = dispatch1(undef, $2);
05485                     %*/
05486                     }
05487     break;
05488 
05489   case 27:
05490 
05491 /* Line 1806 of yacc.c  */
05492 #line 1096 "parse.y"
05493     {
05494                     /*%%%*/
05495                         (yyval.node) = NEW_IF(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05496                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05497                     /*%
05498                         $$ = dispatch2(if_mod, $3, $1);
05499                     %*/
05500                     }
05501     break;
05502 
05503   case 28:
05504 
05505 /* Line 1806 of yacc.c  */
05506 #line 1105 "parse.y"
05507     {
05508                     /*%%%*/
05509                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(3) - (3)].node)), remove_begin((yyvsp[(1) - (3)].node)), 0);
05510                         fixpos((yyval.node), (yyvsp[(3) - (3)].node));
05511                     /*%
05512                         $$ = dispatch2(unless_mod, $3, $1);
05513                     %*/
05514                     }
05515     break;
05516 
05517   case 29:
05518 
05519 /* Line 1806 of yacc.c  */
05520 #line 1114 "parse.y"
05521     {
05522                     /*%%%*/
05523                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05524                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05525                         }
05526                         else {
05527                             (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05528                         }
05529                     /*%
05530                         $$ = dispatch2(while_mod, $3, $1);
05531                     %*/
05532                     }
05533     break;
05534 
05535   case 30:
05536 
05537 /* Line 1806 of yacc.c  */
05538 #line 1127 "parse.y"
05539     {
05540                     /*%%%*/
05541                         if ((yyvsp[(1) - (3)].node) && nd_type((yyvsp[(1) - (3)].node)) == NODE_BEGIN) {
05542                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node)->nd_body, 0);
05543                         }
05544                         else {
05545                             (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (3)].node)), (yyvsp[(1) - (3)].node), 1);
05546                         }
05547                     /*%
05548                         $$ = dispatch2(until_mod, $3, $1);
05549                     %*/
05550                     }
05551     break;
05552 
05553   case 31:
05554 
05555 /* Line 1806 of yacc.c  */
05556 #line 1140 "parse.y"
05557     {
05558                     /*%%%*/
05559                         NODE *resq = NEW_RESBODY(0, remove_begin((yyvsp[(3) - (3)].node)), 0);
05560                         (yyval.node) = NEW_RESCUE(remove_begin((yyvsp[(1) - (3)].node)), resq, 0);
05561                     /*%
05562                         $$ = dispatch2(rescue_mod, $1, $3);
05563                     %*/
05564                     }
05565     break;
05566 
05567   case 32:
05568 
05569 /* Line 1806 of yacc.c  */
05570 #line 1149 "parse.y"
05571     {
05572                         if (in_def || in_single) {
05573                             rb_warn0("END in method; use at_exit");
05574                         }
05575                     /*%%%*/
05576                         (yyval.node) = NEW_POSTEXE(NEW_NODE(
05577                             NODE_SCOPE, 0 /* tbl */, (yyvsp[(3) - (4)].node) /* body */, 0 /* args */));
05578                     /*%
05579                         $$ = dispatch1(END, $3);
05580                     %*/
05581                     }
05582     break;
05583 
05584   case 34:
05585 
05586 /* Line 1806 of yacc.c  */
05587 #line 1162 "parse.y"
05588     {
05589                     /*%%%*/
05590                         value_expr((yyvsp[(3) - (3)].node));
05591                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05592                         (yyval.node) = (yyvsp[(1) - (3)].node);
05593                     /*%
05594                         $$ = dispatch2(massign, $1, $3);
05595                     %*/
05596                     }
05597     break;
05598 
05599   case 35:
05600 
05601 /* Line 1806 of yacc.c  */
05602 #line 1172 "parse.y"
05603     {
05604                         value_expr((yyvsp[(3) - (3)].node));
05605                         (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
05606                     }
05607     break;
05608 
05609   case 36:
05610 
05611 /* Line 1806 of yacc.c  */
05612 #line 1177 "parse.y"
05613     {
05614                     /*%%%*/
05615                         NODE *args;
05616 
05617                         value_expr((yyvsp[(6) - (6)].node));
05618                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
05619                         args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
05620                         if ((yyvsp[(5) - (6)].id) == tOROP) {
05621                             (yyvsp[(5) - (6)].id) = 0;
05622                         }
05623                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
05624                             (yyvsp[(5) - (6)].id) = 1;
05625                         }
05626                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
05627                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
05628                     /*%
05629                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
05630                         $$ = dispatch3(opassign, $$, $5, $6);
05631                     %*/
05632                     }
05633     break;
05634 
05635   case 37:
05636 
05637 /* Line 1806 of yacc.c  */
05638 #line 1198 "parse.y"
05639     {
05640                         value_expr((yyvsp[(5) - (5)].node));
05641                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05642                     }
05643     break;
05644 
05645   case 38:
05646 
05647 /* Line 1806 of yacc.c  */
05648 #line 1203 "parse.y"
05649     {
05650                         value_expr((yyvsp[(5) - (5)].node));
05651                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05652                     }
05653     break;
05654 
05655   case 39:
05656 
05657 /* Line 1806 of yacc.c  */
05658 #line 1208 "parse.y"
05659     {
05660                     /*%%%*/
05661                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
05662                         (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05663                     /*%
05664                         $$ = dispatch2(const_path_field, $1, $3);
05665                         $$ = dispatch3(opassign, $$, $4, $5);
05666                     %*/
05667                     }
05668     break;
05669 
05670   case 40:
05671 
05672 /* Line 1806 of yacc.c  */
05673 #line 1218 "parse.y"
05674     {
05675                         value_expr((yyvsp[(5) - (5)].node));
05676                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
05677                     }
05678     break;
05679 
05680   case 41:
05681 
05682 /* Line 1806 of yacc.c  */
05683 #line 1223 "parse.y"
05684     {
05685                     /*%%%*/
05686                         rb_backref_error((yyvsp[(1) - (3)].node));
05687                         (yyval.node) = NEW_BEGIN(0);
05688                     /*%
05689                         $$ = dispatch2(assign, dispatch1(var_field, $1), $3);
05690                         $$ = dispatch1(assign_error, $$);
05691                     %*/
05692                     }
05693     break;
05694 
05695   case 42:
05696 
05697 /* Line 1806 of yacc.c  */
05698 #line 1233 "parse.y"
05699     {
05700                     /*%%%*/
05701                         value_expr((yyvsp[(3) - (3)].node));
05702                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05703                     /*%
05704                         $$ = dispatch2(assign, $1, $3);
05705                     %*/
05706                     }
05707     break;
05708 
05709   case 43:
05710 
05711 /* Line 1806 of yacc.c  */
05712 #line 1242 "parse.y"
05713     {
05714                     /*%%%*/
05715                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05716                         (yyval.node) = (yyvsp[(1) - (3)].node);
05717                     /*%
05718                         $$ = dispatch2(massign, $1, $3);
05719                     %*/
05720                     }
05721     break;
05722 
05723   case 44:
05724 
05725 /* Line 1806 of yacc.c  */
05726 #line 1251 "parse.y"
05727     {
05728                     /*%%%*/
05729                         (yyvsp[(1) - (3)].node)->nd_value = (yyvsp[(3) - (3)].node);
05730                         (yyval.node) = (yyvsp[(1) - (3)].node);
05731                     /*%
05732                         $$ = dispatch2(massign, $1, $3);
05733                     %*/
05734                     }
05735     break;
05736 
05737   case 46:
05738 
05739 /* Line 1806 of yacc.c  */
05740 #line 1263 "parse.y"
05741     {
05742                     /*%%%*/
05743                         value_expr((yyvsp[(3) - (3)].node));
05744                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05745                     /*%
05746                         $$ = dispatch2(assign, $1, $3);
05747                     %*/
05748                     }
05749     break;
05750 
05751   case 47:
05752 
05753 /* Line 1806 of yacc.c  */
05754 #line 1272 "parse.y"
05755     {
05756                     /*%%%*/
05757                         value_expr((yyvsp[(3) - (3)].node));
05758                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05759                     /*%
05760                         $$ = dispatch2(assign, $1, $3);
05761                     %*/
05762                     }
05763     break;
05764 
05765   case 49:
05766 
05767 /* Line 1806 of yacc.c  */
05768 #line 1285 "parse.y"
05769     {
05770                     /*%%%*/
05771                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05772                     /*%
05773                         $$ = dispatch3(binary, $1, ripper_intern("and"), $3);
05774                     %*/
05775                     }
05776     break;
05777 
05778   case 50:
05779 
05780 /* Line 1806 of yacc.c  */
05781 #line 1293 "parse.y"
05782     {
05783                     /*%%%*/
05784                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
05785                     /*%
05786                         $$ = dispatch3(binary, $1, ripper_intern("or"), $3);
05787                     %*/
05788                     }
05789     break;
05790 
05791   case 51:
05792 
05793 /* Line 1806 of yacc.c  */
05794 #line 1301 "parse.y"
05795     {
05796                     /*%%%*/
05797                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (3)].node)), '!');
05798                     /*%
05799                         $$ = dispatch2(unary, ripper_intern("not"), $3);
05800                     %*/
05801                     }
05802     break;
05803 
05804   case 52:
05805 
05806 /* Line 1806 of yacc.c  */
05807 #line 1309 "parse.y"
05808     {
05809                     /*%%%*/
05810                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
05811                     /*%
05812                         $$ = dispatch2(unary, ripper_id2sym('!'), $2);
05813                     %*/
05814                     }
05815     break;
05816 
05817   case 54:
05818 
05819 /* Line 1806 of yacc.c  */
05820 #line 1320 "parse.y"
05821     {
05822                     /*%%%*/
05823                         value_expr((yyvsp[(1) - (1)].node));
05824                         (yyval.node) = (yyvsp[(1) - (1)].node);
05825                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
05826                     /*%
05827                         $$ = $1;
05828                     %*/
05829                     }
05830     break;
05831 
05832   case 58:
05833 
05834 /* Line 1806 of yacc.c  */
05835 #line 1337 "parse.y"
05836     {
05837                     /*%%%*/
05838                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05839                     /*%
05840                         $$ = dispatch3(call, $1, $2, $3);
05841                         $$ = method_arg($$, $4);
05842                     %*/
05843                     }
05844     break;
05845 
05846   case 59:
05847 
05848 /* Line 1806 of yacc.c  */
05849 #line 1348 "parse.y"
05850     {
05851                         (yyvsp[(1) - (1)].vars) = dyna_push();
05852                     /*%%%*/
05853                         (yyval.num) = ruby_sourceline;
05854                     /*%
05855                     %*/
05856                     }
05857     break;
05858 
05859   case 60:
05860 
05861 /* Line 1806 of yacc.c  */
05862 #line 1358 "parse.y"
05863     {
05864                     /*%%%*/
05865                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
05866                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
05867                     /*%
05868                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
05869                     %*/
05870                         dyna_pop((yyvsp[(1) - (5)].vars));
05871                     }
05872     break;
05873 
05874   case 61:
05875 
05876 /* Line 1806 of yacc.c  */
05877 #line 1370 "parse.y"
05878     {
05879                     /*%%%*/
05880                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
05881                         nd_set_line((yyval.node), tokline);
05882                     /*%
05883                     %*/
05884                     }
05885     break;
05886 
05887   case 62:
05888 
05889 /* Line 1806 of yacc.c  */
05890 #line 1380 "parse.y"
05891     {
05892                     /*%%%*/
05893                         (yyval.node) = (yyvsp[(1) - (2)].node);
05894                         (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
05895                     /*%
05896                         $$ = dispatch2(command, $1, $2);
05897                     %*/
05898                     }
05899     break;
05900 
05901   case 63:
05902 
05903 /* Line 1806 of yacc.c  */
05904 #line 1389 "parse.y"
05905     {
05906                     /*%%%*/
05907                         block_dup_check((yyvsp[(2) - (3)].node),(yyvsp[(3) - (3)].node));
05908                         (yyvsp[(1) - (3)].node)->nd_args = (yyvsp[(2) - (3)].node);
05909                         (yyvsp[(3) - (3)].node)->nd_iter = (yyvsp[(1) - (3)].node);
05910                         (yyval.node) = (yyvsp[(3) - (3)].node);
05911                         fixpos((yyval.node), (yyvsp[(1) - (3)].node));
05912                     /*%
05913                         $$ = dispatch2(command, $1, $2);
05914                         $$ = method_add_block($$, $3);
05915                     %*/
05916                     }
05917     break;
05918 
05919   case 64:
05920 
05921 /* Line 1806 of yacc.c  */
05922 #line 1402 "parse.y"
05923     {
05924                     /*%%%*/
05925                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05926                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05927                     /*%
05928                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05929                     %*/
05930                     }
05931     break;
05932 
05933   case 65:
05934 
05935 /* Line 1806 of yacc.c  */
05936 #line 1411 "parse.y"
05937     {
05938                     /*%%%*/
05939                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05940                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05941                         (yyval.node) = (yyvsp[(5) - (5)].node);
05942                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05943                     /*%
05944                         $$ = dispatch4(command_call, $1, ripper_id2sym('.'), $3, $4);
05945                         $$ = method_add_block($$, $5);
05946                     %*/
05947                    }
05948     break;
05949 
05950   case 66:
05951 
05952 /* Line 1806 of yacc.c  */
05953 #line 1423 "parse.y"
05954     {
05955                     /*%%%*/
05956                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
05957                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
05958                     /*%
05959                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05960                     %*/
05961                     }
05962     break;
05963 
05964   case 67:
05965 
05966 /* Line 1806 of yacc.c  */
05967 #line 1432 "parse.y"
05968     {
05969                     /*%%%*/
05970                         block_dup_check((yyvsp[(4) - (5)].node),(yyvsp[(5) - (5)].node));
05971                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
05972                         (yyval.node) = (yyvsp[(5) - (5)].node);
05973                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
05974                     /*%
05975                         $$ = dispatch4(command_call, $1, ripper_intern("::"), $3, $4);
05976                         $$ = method_add_block($$, $5);
05977                     %*/
05978                    }
05979     break;
05980 
05981   case 68:
05982 
05983 /* Line 1806 of yacc.c  */
05984 #line 1444 "parse.y"
05985     {
05986                     /*%%%*/
05987                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
05988                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
05989                     /*%
05990                         $$ = dispatch1(super, $2);
05991                     %*/
05992                     }
05993     break;
05994 
05995   case 69:
05996 
05997 /* Line 1806 of yacc.c  */
05998 #line 1453 "parse.y"
05999     {
06000                     /*%%%*/
06001                         (yyval.node) = new_yield((yyvsp[(2) - (2)].node));
06002                         fixpos((yyval.node), (yyvsp[(2) - (2)].node));
06003                     /*%
06004                         $$ = dispatch1(yield, $2);
06005                     %*/
06006                     }
06007     break;
06008 
06009   case 70:
06010 
06011 /* Line 1806 of yacc.c  */
06012 #line 1462 "parse.y"
06013     {
06014                     /*%%%*/
06015                         (yyval.node) = NEW_RETURN(ret_args((yyvsp[(2) - (2)].node)));
06016                     /*%
06017                         $$ = dispatch1(return, $2);
06018                     %*/
06019                     }
06020     break;
06021 
06022   case 71:
06023 
06024 /* Line 1806 of yacc.c  */
06025 #line 1470 "parse.y"
06026     {
06027                     /*%%%*/
06028                         (yyval.node) = NEW_BREAK(ret_args((yyvsp[(2) - (2)].node)));
06029                     /*%
06030                         $$ = dispatch1(break, $2);
06031                     %*/
06032                     }
06033     break;
06034 
06035   case 72:
06036 
06037 /* Line 1806 of yacc.c  */
06038 #line 1478 "parse.y"
06039     {
06040                     /*%%%*/
06041                         (yyval.node) = NEW_NEXT(ret_args((yyvsp[(2) - (2)].node)));
06042                     /*%
06043                         $$ = dispatch1(next, $2);
06044                     %*/
06045                     }
06046     break;
06047 
06048   case 74:
06049 
06050 /* Line 1806 of yacc.c  */
06051 #line 1489 "parse.y"
06052     {
06053                     /*%%%*/
06054                         (yyval.node) = (yyvsp[(2) - (3)].node);
06055                     /*%
06056                         $$ = dispatch1(mlhs_paren, $2);
06057                     %*/
06058                     }
06059     break;
06060 
06061   case 76:
06062 
06063 /* Line 1806 of yacc.c  */
06064 #line 1500 "parse.y"
06065     {
06066                     /*%%%*/
06067                         (yyval.node) = NEW_MASGN(NEW_LIST((yyvsp[(2) - (3)].node)), 0);
06068                     /*%
06069                         $$ = dispatch1(mlhs_paren, $2);
06070                     %*/
06071                     }
06072     break;
06073 
06074   case 77:
06075 
06076 /* Line 1806 of yacc.c  */
06077 #line 1510 "parse.y"
06078     {
06079                     /*%%%*/
06080                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
06081                     /*%
06082                         $$ = $1;
06083                     %*/
06084                     }
06085     break;
06086 
06087   case 78:
06088 
06089 /* Line 1806 of yacc.c  */
06090 #line 1518 "parse.y"
06091     {
06092                     /*%%%*/
06093                         (yyval.node) = NEW_MASGN(list_append((yyvsp[(1) - (2)].node),(yyvsp[(2) - (2)].node)), 0);
06094                     /*%
06095                         $$ = mlhs_add($1, $2);
06096                     %*/
06097                     }
06098     break;
06099 
06100   case 79:
06101 
06102 /* Line 1806 of yacc.c  */
06103 #line 1526 "parse.y"
06104     {
06105                     /*%%%*/
06106                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06107                     /*%
06108                         $$ = mlhs_add_star($1, $3);
06109                     %*/
06110                     }
06111     break;
06112 
06113   case 80:
06114 
06115 /* Line 1806 of yacc.c  */
06116 #line 1534 "parse.y"
06117     {
06118                     /*%%%*/
06119                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG((yyvsp[(3) - (5)].node),(yyvsp[(5) - (5)].node)));
06120                     /*%
06121                         $1 = mlhs_add_star($1, $3);
06122                         $$ = mlhs_add($1, $5);
06123                     %*/
06124                     }
06125     break;
06126 
06127   case 81:
06128 
06129 /* Line 1806 of yacc.c  */
06130 #line 1543 "parse.y"
06131     {
06132                     /*%%%*/
06133                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (2)].node), -1);
06134                     /*%
06135                         $$ = mlhs_add_star($1, Qnil);
06136                     %*/
06137                     }
06138     break;
06139 
06140   case 82:
06141 
06142 /* Line 1806 of yacc.c  */
06143 #line 1551 "parse.y"
06144     {
06145                     /*%%%*/
06146                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), NEW_POSTARG(-1, (yyvsp[(4) - (4)].node)));
06147                     /*%
06148                         $1 = mlhs_add_star($1, Qnil);
06149                         $$ = mlhs_add($1, $4);
06150                     %*/
06151                     }
06152     break;
06153 
06154   case 83:
06155 
06156 /* Line 1806 of yacc.c  */
06157 #line 1560 "parse.y"
06158     {
06159                     /*%%%*/
06160                         (yyval.node) = NEW_MASGN(0, (yyvsp[(2) - (2)].node));
06161                     /*%
06162                         $$ = mlhs_add_star(mlhs_new(), $2);
06163                     %*/
06164                     }
06165     break;
06166 
06167   case 84:
06168 
06169 /* Line 1806 of yacc.c  */
06170 #line 1568 "parse.y"
06171     {
06172                     /*%%%*/
06173                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyvsp[(2) - (4)].node),(yyvsp[(4) - (4)].node)));
06174                     /*%
06175                         $2 = mlhs_add_star(mlhs_new(), $2);
06176                         $$ = mlhs_add($2, $4);
06177                     %*/
06178                     }
06179     break;
06180 
06181   case 85:
06182 
06183 /* Line 1806 of yacc.c  */
06184 #line 1577 "parse.y"
06185     {
06186                     /*%%%*/
06187                         (yyval.node) = NEW_MASGN(0, -1);
06188                     /*%
06189                         $$ = mlhs_add_star(mlhs_new(), Qnil);
06190                     %*/
06191                     }
06192     break;
06193 
06194   case 86:
06195 
06196 /* Line 1806 of yacc.c  */
06197 #line 1585 "parse.y"
06198     {
06199                     /*%%%*/
06200                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
06201                     /*%
06202                         $$ = mlhs_add_star(mlhs_new(), Qnil);
06203                         $$ = mlhs_add($$, $3);
06204                     %*/
06205                     }
06206     break;
06207 
06208   case 88:
06209 
06210 /* Line 1806 of yacc.c  */
06211 #line 1597 "parse.y"
06212     {
06213                     /*%%%*/
06214                         (yyval.node) = (yyvsp[(2) - (3)].node);
06215                     /*%
06216                         $$ = dispatch1(mlhs_paren, $2);
06217                     %*/
06218                     }
06219     break;
06220 
06221   case 89:
06222 
06223 /* Line 1806 of yacc.c  */
06224 #line 1607 "parse.y"
06225     {
06226                     /*%%%*/
06227                         (yyval.node) = NEW_LIST((yyvsp[(1) - (2)].node));
06228                     /*%
06229                         $$ = mlhs_add(mlhs_new(), $1);
06230                     %*/
06231                     }
06232     break;
06233 
06234   case 90:
06235 
06236 /* Line 1806 of yacc.c  */
06237 #line 1615 "parse.y"
06238     {
06239                     /*%%%*/
06240                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
06241                     /*%
06242                         $$ = mlhs_add($1, $2);
06243                     %*/
06244                     }
06245     break;
06246 
06247   case 91:
06248 
06249 /* Line 1806 of yacc.c  */
06250 #line 1625 "parse.y"
06251     {
06252                     /*%%%*/
06253                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
06254                     /*%
06255                         $$ = mlhs_add(mlhs_new(), $1);
06256                     %*/
06257                     }
06258     break;
06259 
06260   case 92:
06261 
06262 /* Line 1806 of yacc.c  */
06263 #line 1633 "parse.y"
06264     {
06265                     /*%%%*/
06266                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06267                     /*%
06268                         $$ = mlhs_add($1, $3);
06269                     %*/
06270                     }
06271     break;
06272 
06273   case 93:
06274 
06275 /* Line 1806 of yacc.c  */
06276 #line 1643 "parse.y"
06277     {
06278                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06279                     }
06280     break;
06281 
06282   case 94:
06283 
06284 /* Line 1806 of yacc.c  */
06285 #line 1647 "parse.y"
06286     {
06287                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06288                     }
06289     break;
06290 
06291   case 95:
06292 
06293 /* Line 1806 of yacc.c  */
06294 #line 1651 "parse.y"
06295     {
06296                     /*%%%*/
06297                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06298                     /*%
06299                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06300                     %*/
06301                     }
06302     break;
06303 
06304   case 96:
06305 
06306 /* Line 1806 of yacc.c  */
06307 #line 1659 "parse.y"
06308     {
06309                     /*%%%*/
06310                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06311                     /*%
06312                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06313                     %*/
06314                     }
06315     break;
06316 
06317   case 97:
06318 
06319 /* Line 1806 of yacc.c  */
06320 #line 1667 "parse.y"
06321     {
06322                     /*%%%*/
06323                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06324                     /*%
06325                         $$ = dispatch2(const_path_field, $1, $3);
06326                     %*/
06327                     }
06328     break;
06329 
06330   case 98:
06331 
06332 /* Line 1806 of yacc.c  */
06333 #line 1675 "parse.y"
06334     {
06335                     /*%%%*/
06336                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06337                     /*%
06338                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06339                     %*/
06340                     }
06341     break;
06342 
06343   case 99:
06344 
06345 /* Line 1806 of yacc.c  */
06346 #line 1683 "parse.y"
06347     {
06348                     /*%%%*/
06349                         if (in_def || in_single)
06350                             yyerror("dynamic constant assignment");
06351                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06352                     /*%
06353                         if (in_def || in_single)
06354                             yyerror("dynamic constant assignment");
06355                         $$ = dispatch2(const_path_field, $1, $3);
06356                     %*/
06357                     }
06358     break;
06359 
06360   case 100:
06361 
06362 /* Line 1806 of yacc.c  */
06363 #line 1695 "parse.y"
06364     {
06365                     /*%%%*/
06366                         if (in_def || in_single)
06367                             yyerror("dynamic constant assignment");
06368                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06369                     /*%
06370                         $$ = dispatch1(top_const_field, $2);
06371                     %*/
06372                     }
06373     break;
06374 
06375   case 101:
06376 
06377 /* Line 1806 of yacc.c  */
06378 #line 1705 "parse.y"
06379     {
06380                     /*%%%*/
06381                         rb_backref_error((yyvsp[(1) - (1)].node));
06382                         (yyval.node) = NEW_BEGIN(0);
06383                     /*%
06384                         $$ = dispatch1(var_field, $1);
06385                         $$ = dispatch1(assign_error, $$);
06386                     %*/
06387                     }
06388     break;
06389 
06390   case 102:
06391 
06392 /* Line 1806 of yacc.c  */
06393 #line 1717 "parse.y"
06394     {
06395                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06396                     /*%%%*/
06397                         if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06398                     /*%
06399                         $$ = dispatch1(var_field, $$);
06400                     %*/
06401                     }
06402     break;
06403 
06404   case 103:
06405 
06406 /* Line 1806 of yacc.c  */
06407 #line 1726 "parse.y"
06408     {
06409                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
06410                     /*%%%*/
06411                         if (!(yyval.node)) (yyval.node) = NEW_BEGIN(0);
06412                     /*%
06413                         $$ = dispatch1(var_field, $$);
06414                     %*/
06415                     }
06416     break;
06417 
06418   case 104:
06419 
06420 /* Line 1806 of yacc.c  */
06421 #line 1735 "parse.y"
06422     {
06423                     /*%%%*/
06424                         (yyval.node) = aryset((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node));
06425                     /*%
06426                         $$ = dispatch2(aref_field, $1, escape_Qundef($3));
06427                     %*/
06428                     }
06429     break;
06430 
06431   case 105:
06432 
06433 /* Line 1806 of yacc.c  */
06434 #line 1743 "parse.y"
06435     {
06436                     /*%%%*/
06437                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06438                     /*%
06439                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06440                     %*/
06441                     }
06442     break;
06443 
06444   case 106:
06445 
06446 /* Line 1806 of yacc.c  */
06447 #line 1751 "parse.y"
06448     {
06449                     /*%%%*/
06450                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06451                     /*%
06452                         $$ = dispatch3(field, $1, ripper_intern("::"), $3);
06453                     %*/
06454                     }
06455     break;
06456 
06457   case 107:
06458 
06459 /* Line 1806 of yacc.c  */
06460 #line 1759 "parse.y"
06461     {
06462                     /*%%%*/
06463                         (yyval.node) = attrset((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06464                     /*%
06465                         $$ = dispatch3(field, $1, ripper_id2sym('.'), $3);
06466                     %*/
06467                     }
06468     break;
06469 
06470   case 108:
06471 
06472 /* Line 1806 of yacc.c  */
06473 #line 1767 "parse.y"
06474     {
06475                     /*%%%*/
06476                         if (in_def || in_single)
06477                             yyerror("dynamic constant assignment");
06478                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id)));
06479                     /*%
06480                         $$ = dispatch2(const_path_field, $1, $3);
06481                         if (in_def || in_single) {
06482                             $$ = dispatch1(assign_error, $$);
06483                         }
06484                     %*/
06485                     }
06486     break;
06487 
06488   case 109:
06489 
06490 /* Line 1806 of yacc.c  */
06491 #line 1780 "parse.y"
06492     {
06493                     /*%%%*/
06494                         if (in_def || in_single)
06495                             yyerror("dynamic constant assignment");
06496                         (yyval.node) = NEW_CDECL(0, 0, NEW_COLON3((yyvsp[(2) - (2)].id)));
06497                     /*%
06498                         $$ = dispatch1(top_const_field, $2);
06499                         if (in_def || in_single) {
06500                             $$ = dispatch1(assign_error, $$);
06501                         }
06502                     %*/
06503                     }
06504     break;
06505 
06506   case 110:
06507 
06508 /* Line 1806 of yacc.c  */
06509 #line 1793 "parse.y"
06510     {
06511                     /*%%%*/
06512                         rb_backref_error((yyvsp[(1) - (1)].node));
06513                         (yyval.node) = NEW_BEGIN(0);
06514                     /*%
06515                         $$ = dispatch1(assign_error, $1);
06516                     %*/
06517                     }
06518     break;
06519 
06520   case 111:
06521 
06522 /* Line 1806 of yacc.c  */
06523 #line 1804 "parse.y"
06524     {
06525                     /*%%%*/
06526                         yyerror("class/module name must be CONSTANT");
06527                     /*%
06528                         $$ = dispatch1(class_name_error, $1);
06529                     %*/
06530                     }
06531     break;
06532 
06533   case 113:
06534 
06535 /* Line 1806 of yacc.c  */
06536 #line 1815 "parse.y"
06537     {
06538                     /*%%%*/
06539                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
06540                     /*%
06541                         $$ = dispatch1(top_const_ref, $2);
06542                     %*/
06543                     }
06544     break;
06545 
06546   case 114:
06547 
06548 /* Line 1806 of yacc.c  */
06549 #line 1823 "parse.y"
06550     {
06551                     /*%%%*/
06552                         (yyval.node) = NEW_COLON2(0, (yyval.node));
06553                     /*%
06554                         $$ = dispatch1(const_ref, $1);
06555                     %*/
06556                     }
06557     break;
06558 
06559   case 115:
06560 
06561 /* Line 1806 of yacc.c  */
06562 #line 1831 "parse.y"
06563     {
06564                     /*%%%*/
06565                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
06566                     /*%
06567                         $$ = dispatch2(const_path_ref, $1, $3);
06568                     %*/
06569                     }
06570     break;
06571 
06572   case 119:
06573 
06574 /* Line 1806 of yacc.c  */
06575 #line 1844 "parse.y"
06576     {
06577                         lex_state = EXPR_ENDFN;
06578                         (yyval.id) = (yyvsp[(1) - (1)].id);
06579                     }
06580     break;
06581 
06582   case 120:
06583 
06584 /* Line 1806 of yacc.c  */
06585 #line 1849 "parse.y"
06586     {
06587                         lex_state = EXPR_ENDFN;
06588                     /*%%%*/
06589                         (yyval.id) = (yyvsp[(1) - (1)].id);
06590                     /*%
06591                         $$ = $1;
06592                     %*/
06593                     }
06594     break;
06595 
06596   case 123:
06597 
06598 /* Line 1806 of yacc.c  */
06599 #line 1864 "parse.y"
06600     {
06601                     /*%%%*/
06602                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
06603                     /*%
06604                         $$ = dispatch1(symbol_literal, $1);
06605                     %*/
06606                     }
06607     break;
06608 
06609   case 125:
06610 
06611 /* Line 1806 of yacc.c  */
06612 #line 1875 "parse.y"
06613     {
06614                     /*%%%*/
06615                         (yyval.node) = NEW_UNDEF((yyvsp[(1) - (1)].node));
06616                     /*%
06617                         $$ = rb_ary_new3(1, $1);
06618                     %*/
06619                     }
06620     break;
06621 
06622   case 126:
06623 
06624 /* Line 1806 of yacc.c  */
06625 #line 1882 "parse.y"
06626     {lex_state = EXPR_FNAME;}
06627     break;
06628 
06629   case 127:
06630 
06631 /* Line 1806 of yacc.c  */
06632 #line 1883 "parse.y"
06633     {
06634                     /*%%%*/
06635                         (yyval.node) = block_append((yyvsp[(1) - (4)].node), NEW_UNDEF((yyvsp[(4) - (4)].node)));
06636                     /*%
06637                         rb_ary_push($1, $4);
06638                     %*/
06639                     }
06640     break;
06641 
06642   case 128:
06643 
06644 /* Line 1806 of yacc.c  */
06645 #line 1892 "parse.y"
06646     { ifndef_ripper((yyval.id) = '|'); }
06647     break;
06648 
06649   case 129:
06650 
06651 /* Line 1806 of yacc.c  */
06652 #line 1893 "parse.y"
06653     { ifndef_ripper((yyval.id) = '^'); }
06654     break;
06655 
06656   case 130:
06657 
06658 /* Line 1806 of yacc.c  */
06659 #line 1894 "parse.y"
06660     { ifndef_ripper((yyval.id) = '&'); }
06661     break;
06662 
06663   case 131:
06664 
06665 /* Line 1806 of yacc.c  */
06666 #line 1895 "parse.y"
06667     { ifndef_ripper((yyval.id) = tCMP); }
06668     break;
06669 
06670   case 132:
06671 
06672 /* Line 1806 of yacc.c  */
06673 #line 1896 "parse.y"
06674     { ifndef_ripper((yyval.id) = tEQ); }
06675     break;
06676 
06677   case 133:
06678 
06679 /* Line 1806 of yacc.c  */
06680 #line 1897 "parse.y"
06681     { ifndef_ripper((yyval.id) = tEQQ); }
06682     break;
06683 
06684   case 134:
06685 
06686 /* Line 1806 of yacc.c  */
06687 #line 1898 "parse.y"
06688     { ifndef_ripper((yyval.id) = tMATCH); }
06689     break;
06690 
06691   case 135:
06692 
06693 /* Line 1806 of yacc.c  */
06694 #line 1899 "parse.y"
06695     { ifndef_ripper((yyval.id) = tNMATCH); }
06696     break;
06697 
06698   case 136:
06699 
06700 /* Line 1806 of yacc.c  */
06701 #line 1900 "parse.y"
06702     { ifndef_ripper((yyval.id) = '>'); }
06703     break;
06704 
06705   case 137:
06706 
06707 /* Line 1806 of yacc.c  */
06708 #line 1901 "parse.y"
06709     { ifndef_ripper((yyval.id) = tGEQ); }
06710     break;
06711 
06712   case 138:
06713 
06714 /* Line 1806 of yacc.c  */
06715 #line 1902 "parse.y"
06716     { ifndef_ripper((yyval.id) = '<'); }
06717     break;
06718 
06719   case 139:
06720 
06721 /* Line 1806 of yacc.c  */
06722 #line 1903 "parse.y"
06723     { ifndef_ripper((yyval.id) = tLEQ); }
06724     break;
06725 
06726   case 140:
06727 
06728 /* Line 1806 of yacc.c  */
06729 #line 1904 "parse.y"
06730     { ifndef_ripper((yyval.id) = tNEQ); }
06731     break;
06732 
06733   case 141:
06734 
06735 /* Line 1806 of yacc.c  */
06736 #line 1905 "parse.y"
06737     { ifndef_ripper((yyval.id) = tLSHFT); }
06738     break;
06739 
06740   case 142:
06741 
06742 /* Line 1806 of yacc.c  */
06743 #line 1906 "parse.y"
06744     { ifndef_ripper((yyval.id) = tRSHFT); }
06745     break;
06746 
06747   case 143:
06748 
06749 /* Line 1806 of yacc.c  */
06750 #line 1907 "parse.y"
06751     { ifndef_ripper((yyval.id) = '+'); }
06752     break;
06753 
06754   case 144:
06755 
06756 /* Line 1806 of yacc.c  */
06757 #line 1908 "parse.y"
06758     { ifndef_ripper((yyval.id) = '-'); }
06759     break;
06760 
06761   case 145:
06762 
06763 /* Line 1806 of yacc.c  */
06764 #line 1909 "parse.y"
06765     { ifndef_ripper((yyval.id) = '*'); }
06766     break;
06767 
06768   case 146:
06769 
06770 /* Line 1806 of yacc.c  */
06771 #line 1910 "parse.y"
06772     { ifndef_ripper((yyval.id) = '*'); }
06773     break;
06774 
06775   case 147:
06776 
06777 /* Line 1806 of yacc.c  */
06778 #line 1911 "parse.y"
06779     { ifndef_ripper((yyval.id) = '/'); }
06780     break;
06781 
06782   case 148:
06783 
06784 /* Line 1806 of yacc.c  */
06785 #line 1912 "parse.y"
06786     { ifndef_ripper((yyval.id) = '%'); }
06787     break;
06788 
06789   case 149:
06790 
06791 /* Line 1806 of yacc.c  */
06792 #line 1913 "parse.y"
06793     { ifndef_ripper((yyval.id) = tPOW); }
06794     break;
06795 
06796   case 150:
06797 
06798 /* Line 1806 of yacc.c  */
06799 #line 1914 "parse.y"
06800     { ifndef_ripper((yyval.id) = tDSTAR); }
06801     break;
06802 
06803   case 151:
06804 
06805 /* Line 1806 of yacc.c  */
06806 #line 1915 "parse.y"
06807     { ifndef_ripper((yyval.id) = '!'); }
06808     break;
06809 
06810   case 152:
06811 
06812 /* Line 1806 of yacc.c  */
06813 #line 1916 "parse.y"
06814     { ifndef_ripper((yyval.id) = '~'); }
06815     break;
06816 
06817   case 153:
06818 
06819 /* Line 1806 of yacc.c  */
06820 #line 1917 "parse.y"
06821     { ifndef_ripper((yyval.id) = tUPLUS); }
06822     break;
06823 
06824   case 154:
06825 
06826 /* Line 1806 of yacc.c  */
06827 #line 1918 "parse.y"
06828     { ifndef_ripper((yyval.id) = tUMINUS); }
06829     break;
06830 
06831   case 155:
06832 
06833 /* Line 1806 of yacc.c  */
06834 #line 1919 "parse.y"
06835     { ifndef_ripper((yyval.id) = tAREF); }
06836     break;
06837 
06838   case 156:
06839 
06840 /* Line 1806 of yacc.c  */
06841 #line 1920 "parse.y"
06842     { ifndef_ripper((yyval.id) = tASET); }
06843     break;
06844 
06845   case 157:
06846 
06847 /* Line 1806 of yacc.c  */
06848 #line 1921 "parse.y"
06849     { ifndef_ripper((yyval.id) = '`'); }
06850     break;
06851 
06852   case 199:
06853 
06854 /* Line 1806 of yacc.c  */
06855 #line 1939 "parse.y"
06856     {
06857                     /*%%%*/
06858                         value_expr((yyvsp[(3) - (3)].node));
06859                         (yyval.node) = node_assign((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
06860                     /*%
06861                         $$ = dispatch2(assign, $1, $3);
06862                     %*/
06863                     }
06864     break;
06865 
06866   case 200:
06867 
06868 /* Line 1806 of yacc.c  */
06869 #line 1948 "parse.y"
06870     {
06871                     /*%%%*/
06872                         value_expr((yyvsp[(3) - (5)].node));
06873                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06874                         (yyval.node) = node_assign((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].node));
06875                     /*%
06876                         $$ = dispatch2(assign, $1, dispatch2(rescue_mod, $3, $5));
06877                     %*/
06878                     }
06879     break;
06880 
06881   case 201:
06882 
06883 /* Line 1806 of yacc.c  */
06884 #line 1958 "parse.y"
06885     {
06886                         value_expr((yyvsp[(3) - (3)].node));
06887                         (yyval.node) = new_op_assign((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].id), (yyvsp[(3) - (3)].node));
06888                     }
06889     break;
06890 
06891   case 202:
06892 
06893 /* Line 1806 of yacc.c  */
06894 #line 1963 "parse.y"
06895     {
06896                     /*%%%*/
06897                         value_expr((yyvsp[(3) - (5)].node));
06898                         (yyvsp[(3) - (5)].node) = NEW_RESCUE((yyvsp[(3) - (5)].node), NEW_RESBODY(0,(yyvsp[(5) - (5)].node),0), 0);
06899                     /*%
06900                         $3 = dispatch2(rescue_mod, $3, $5);
06901                     %*/
06902                         (yyval.node) = new_op_assign((yyvsp[(1) - (5)].node), (yyvsp[(2) - (5)].id), (yyvsp[(3) - (5)].node));
06903                     }
06904     break;
06905 
06906   case 203:
06907 
06908 /* Line 1806 of yacc.c  */
06909 #line 1973 "parse.y"
06910     {
06911                     /*%%%*/
06912                         NODE *args;
06913 
06914                         value_expr((yyvsp[(6) - (6)].node));
06915                         if (!(yyvsp[(3) - (6)].node)) (yyvsp[(3) - (6)].node) = NEW_ZARRAY();
06916                         if (nd_type((yyvsp[(3) - (6)].node)) == NODE_BLOCK_PASS) {
06917                             args = NEW_ARGSCAT((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06918                         }
06919                         else {
06920                             args = arg_concat((yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
06921                         }
06922                         if ((yyvsp[(5) - (6)].id) == tOROP) {
06923                             (yyvsp[(5) - (6)].id) = 0;
06924                         }
06925                         else if ((yyvsp[(5) - (6)].id) == tANDOP) {
06926                             (yyvsp[(5) - (6)].id) = 1;
06927                         }
06928                         (yyval.node) = NEW_OP_ASGN1((yyvsp[(1) - (6)].node), (yyvsp[(5) - (6)].id), args);
06929                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
06930                     /*%
06931                         $1 = dispatch2(aref_field, $1, escape_Qundef($3));
06932                         $$ = dispatch3(opassign, $1, $5, $6);
06933                     %*/
06934                     }
06935     break;
06936 
06937   case 204:
06938 
06939 /* Line 1806 of yacc.c  */
06940 #line 1999 "parse.y"
06941     {
06942                         value_expr((yyvsp[(5) - (5)].node));
06943                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06944                     }
06945     break;
06946 
06947   case 205:
06948 
06949 /* Line 1806 of yacc.c  */
06950 #line 2004 "parse.y"
06951     {
06952                         value_expr((yyvsp[(5) - (5)].node));
06953                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_id2sym('.'), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06954                     }
06955     break;
06956 
06957   case 206:
06958 
06959 /* Line 1806 of yacc.c  */
06960 #line 2009 "parse.y"
06961     {
06962                         value_expr((yyvsp[(5) - (5)].node));
06963                         (yyval.node) = new_attr_op_assign((yyvsp[(1) - (5)].node), ripper_intern("::"), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06964                     }
06965     break;
06966 
06967   case 207:
06968 
06969 /* Line 1806 of yacc.c  */
06970 #line 2014 "parse.y"
06971     {
06972                     /*%%%*/
06973                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id));
06974                         (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(4) - (5)].id), (yyvsp[(5) - (5)].node));
06975                     /*%
06976                         $$ = dispatch2(const_path_field, $1, $3);
06977                         $$ = dispatch3(opassign, $$, $4, $5);
06978                     %*/
06979                     }
06980     break;
06981 
06982   case 208:
06983 
06984 /* Line 1806 of yacc.c  */
06985 #line 2024 "parse.y"
06986     {
06987                     /*%%%*/
06988                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (4)].id));
06989                         (yyval.node) = new_const_op_assign((yyval.node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
06990                     /*%
06991                         $$ = dispatch1(top_const_field, $2);
06992                         $$ = dispatch3(opassign, $$, $3, $4);
06993                     %*/
06994                     }
06995     break;
06996 
06997   case 209:
06998 
06999 /* Line 1806 of yacc.c  */
07000 #line 2034 "parse.y"
07001     {
07002                     /*%%%*/
07003                         rb_backref_error((yyvsp[(1) - (3)].node));
07004                         (yyval.node) = NEW_BEGIN(0);
07005                     /*%
07006                         $$ = dispatch1(var_field, $1);
07007                         $$ = dispatch3(opassign, $$, $2, $3);
07008                         $$ = dispatch1(assign_error, $$);
07009                     %*/
07010                     }
07011     break;
07012 
07013   case 210:
07014 
07015 /* Line 1806 of yacc.c  */
07016 #line 2045 "parse.y"
07017     {
07018                     /*%%%*/
07019                         value_expr((yyvsp[(1) - (3)].node));
07020                         value_expr((yyvsp[(3) - (3)].node));
07021                         (yyval.node) = NEW_DOT2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07022                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07023                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07024                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
07025                         }
07026                     /*%
07027                         $$ = dispatch2(dot2, $1, $3);
07028                     %*/
07029                     }
07030     break;
07031 
07032   case 211:
07033 
07034 /* Line 1806 of yacc.c  */
07035 #line 2059 "parse.y"
07036     {
07037                     /*%%%*/
07038                         value_expr((yyvsp[(1) - (3)].node));
07039                         value_expr((yyvsp[(3) - (3)].node));
07040                         (yyval.node) = NEW_DOT3((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07041                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(1) - (3)].node)->nd_lit) &&
07042                             nd_type((yyvsp[(3) - (3)].node)) == NODE_LIT && FIXNUM_P((yyvsp[(3) - (3)].node)->nd_lit)) {
07043                             deferred_nodes = list_append(deferred_nodes, (yyval.node));
07044                         }
07045                     /*%
07046                         $$ = dispatch2(dot3, $1, $3);
07047                     %*/
07048                     }
07049     break;
07050 
07051   case 212:
07052 
07053 /* Line 1806 of yacc.c  */
07054 #line 2073 "parse.y"
07055     {
07056                     /*%%%*/
07057                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '+', (yyvsp[(3) - (3)].node));
07058                     /*%
07059                         $$ = dispatch3(binary, $1, ID2SYM('+'), $3);
07060                     %*/
07061                     }
07062     break;
07063 
07064   case 213:
07065 
07066 /* Line 1806 of yacc.c  */
07067 #line 2081 "parse.y"
07068     {
07069                     /*%%%*/
07070                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '-', (yyvsp[(3) - (3)].node));
07071                     /*%
07072                         $$ = dispatch3(binary, $1, ID2SYM('-'), $3);
07073                     %*/
07074                     }
07075     break;
07076 
07077   case 214:
07078 
07079 /* Line 1806 of yacc.c  */
07080 #line 2089 "parse.y"
07081     {
07082                     /*%%%*/
07083                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '*', (yyvsp[(3) - (3)].node));
07084                     /*%
07085                         $$ = dispatch3(binary, $1, ID2SYM('*'), $3);
07086                     %*/
07087                     }
07088     break;
07089 
07090   case 215:
07091 
07092 /* Line 1806 of yacc.c  */
07093 #line 2097 "parse.y"
07094     {
07095                     /*%%%*/
07096                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '/', (yyvsp[(3) - (3)].node));
07097                     /*%
07098                         $$ = dispatch3(binary, $1, ID2SYM('/'), $3);
07099                     %*/
07100                     }
07101     break;
07102 
07103   case 216:
07104 
07105 /* Line 1806 of yacc.c  */
07106 #line 2105 "parse.y"
07107     {
07108                     /*%%%*/
07109                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '%', (yyvsp[(3) - (3)].node));
07110                     /*%
07111                         $$ = dispatch3(binary, $1, ID2SYM('%'), $3);
07112                     %*/
07113                     }
07114     break;
07115 
07116   case 217:
07117 
07118 /* Line 1806 of yacc.c  */
07119 #line 2113 "parse.y"
07120     {
07121                     /*%%%*/
07122                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tPOW, (yyvsp[(3) - (3)].node));
07123                     /*%
07124                         $$ = dispatch3(binary, $1, ripper_intern("**"), $3);
07125                     %*/
07126                     }
07127     break;
07128 
07129   case 218:
07130 
07131 /* Line 1806 of yacc.c  */
07132 #line 2121 "parse.y"
07133     {
07134                     /*%%%*/
07135                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07136                     /*%
07137                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
07138                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
07139                     %*/
07140                     }
07141     break;
07142 
07143   case 219:
07144 
07145 /* Line 1806 of yacc.c  */
07146 #line 2130 "parse.y"
07147     {
07148                     /*%%%*/
07149                         (yyval.node) = NEW_CALL(call_bin_op((yyvsp[(2) - (4)].node), tPOW, (yyvsp[(4) - (4)].node)), tUMINUS, 0);
07150                     /*%
07151                         $$ = dispatch3(binary, $2, ripper_intern("**"), $4);
07152                         $$ = dispatch2(unary, ripper_intern("-@"), $$);
07153                     %*/
07154                     }
07155     break;
07156 
07157   case 220:
07158 
07159 /* Line 1806 of yacc.c  */
07160 #line 2139 "parse.y"
07161     {
07162                     /*%%%*/
07163                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUPLUS);
07164                     /*%
07165                         $$ = dispatch2(unary, ripper_intern("+@"), $2);
07166                     %*/
07167                     }
07168     break;
07169 
07170   case 221:
07171 
07172 /* Line 1806 of yacc.c  */
07173 #line 2147 "parse.y"
07174     {
07175                     /*%%%*/
07176                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), tUMINUS);
07177                     /*%
07178                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
07179                     %*/
07180                     }
07181     break;
07182 
07183   case 222:
07184 
07185 /* Line 1806 of yacc.c  */
07186 #line 2155 "parse.y"
07187     {
07188                     /*%%%*/
07189                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '|', (yyvsp[(3) - (3)].node));
07190                     /*%
07191                         $$ = dispatch3(binary, $1, ID2SYM('|'), $3);
07192                     %*/
07193                     }
07194     break;
07195 
07196   case 223:
07197 
07198 /* Line 1806 of yacc.c  */
07199 #line 2163 "parse.y"
07200     {
07201                     /*%%%*/
07202                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '^', (yyvsp[(3) - (3)].node));
07203                     /*%
07204                         $$ = dispatch3(binary, $1, ID2SYM('^'), $3);
07205                     %*/
07206                     }
07207     break;
07208 
07209   case 224:
07210 
07211 /* Line 1806 of yacc.c  */
07212 #line 2171 "parse.y"
07213     {
07214                     /*%%%*/
07215                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '&', (yyvsp[(3) - (3)].node));
07216                     /*%
07217                         $$ = dispatch3(binary, $1, ID2SYM('&'), $3);
07218                     %*/
07219                     }
07220     break;
07221 
07222   case 225:
07223 
07224 /* Line 1806 of yacc.c  */
07225 #line 2179 "parse.y"
07226     {
07227                     /*%%%*/
07228                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tCMP, (yyvsp[(3) - (3)].node));
07229                     /*%
07230                         $$ = dispatch3(binary, $1, ripper_intern("<=>"), $3);
07231                     %*/
07232                     }
07233     break;
07234 
07235   case 226:
07236 
07237 /* Line 1806 of yacc.c  */
07238 #line 2187 "parse.y"
07239     {
07240                     /*%%%*/
07241                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '>', (yyvsp[(3) - (3)].node));
07242                     /*%
07243                         $$ = dispatch3(binary, $1, ID2SYM('>'), $3);
07244                     %*/
07245                     }
07246     break;
07247 
07248   case 227:
07249 
07250 /* Line 1806 of yacc.c  */
07251 #line 2195 "parse.y"
07252     {
07253                     /*%%%*/
07254                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tGEQ, (yyvsp[(3) - (3)].node));
07255                     /*%
07256                         $$ = dispatch3(binary, $1, ripper_intern(">="), $3);
07257                     %*/
07258                     }
07259     break;
07260 
07261   case 228:
07262 
07263 /* Line 1806 of yacc.c  */
07264 #line 2203 "parse.y"
07265     {
07266                     /*%%%*/
07267                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), '<', (yyvsp[(3) - (3)].node));
07268                     /*%
07269                         $$ = dispatch3(binary, $1, ID2SYM('<'), $3);
07270                     %*/
07271                     }
07272     break;
07273 
07274   case 229:
07275 
07276 /* Line 1806 of yacc.c  */
07277 #line 2211 "parse.y"
07278     {
07279                     /*%%%*/
07280                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLEQ, (yyvsp[(3) - (3)].node));
07281                     /*%
07282                         $$ = dispatch3(binary, $1, ripper_intern("<="), $3);
07283                     %*/
07284                     }
07285     break;
07286 
07287   case 230:
07288 
07289 /* Line 1806 of yacc.c  */
07290 #line 2219 "parse.y"
07291     {
07292                     /*%%%*/
07293                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQ, (yyvsp[(3) - (3)].node));
07294                     /*%
07295                         $$ = dispatch3(binary, $1, ripper_intern("=="), $3);
07296                     %*/
07297                     }
07298     break;
07299 
07300   case 231:
07301 
07302 /* Line 1806 of yacc.c  */
07303 #line 2227 "parse.y"
07304     {
07305                     /*%%%*/
07306                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tEQQ, (yyvsp[(3) - (3)].node));
07307                     /*%
07308                         $$ = dispatch3(binary, $1, ripper_intern("==="), $3);
07309                     %*/
07310                     }
07311     break;
07312 
07313   case 232:
07314 
07315 /* Line 1806 of yacc.c  */
07316 #line 2235 "parse.y"
07317     {
07318                     /*%%%*/
07319                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNEQ, (yyvsp[(3) - (3)].node));
07320                     /*%
07321                         $$ = dispatch3(binary, $1, ripper_intern("!="), $3);
07322                     %*/
07323                     }
07324     break;
07325 
07326   case 233:
07327 
07328 /* Line 1806 of yacc.c  */
07329 #line 2243 "parse.y"
07330     {
07331                     /*%%%*/
07332                         (yyval.node) = match_op((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07333                         if (nd_type((yyvsp[(1) - (3)].node)) == NODE_LIT && RB_TYPE_P((yyvsp[(1) - (3)].node)->nd_lit, T_REGEXP)) {
07334                             (yyval.node) = reg_named_capture_assign((yyvsp[(1) - (3)].node)->nd_lit, (yyval.node));
07335                         }
07336                     /*%
07337                         $$ = dispatch3(binary, $1, ripper_intern("=~"), $3);
07338                     %*/
07339                     }
07340     break;
07341 
07342   case 234:
07343 
07344 /* Line 1806 of yacc.c  */
07345 #line 2254 "parse.y"
07346     {
07347                     /*%%%*/
07348                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tNMATCH, (yyvsp[(3) - (3)].node));
07349                     /*%
07350                         $$ = dispatch3(binary, $1, ripper_intern("!~"), $3);
07351                     %*/
07352                     }
07353     break;
07354 
07355   case 235:
07356 
07357 /* Line 1806 of yacc.c  */
07358 #line 2262 "parse.y"
07359     {
07360                     /*%%%*/
07361                         (yyval.node) = call_uni_op(cond((yyvsp[(2) - (2)].node)), '!');
07362                     /*%
07363                         $$ = dispatch2(unary, ID2SYM('!'), $2);
07364                     %*/
07365                     }
07366     break;
07367 
07368   case 236:
07369 
07370 /* Line 1806 of yacc.c  */
07371 #line 2270 "parse.y"
07372     {
07373                     /*%%%*/
07374                         (yyval.node) = call_uni_op((yyvsp[(2) - (2)].node), '~');
07375                     /*%
07376                         $$ = dispatch2(unary, ID2SYM('~'), $2);
07377                     %*/
07378                     }
07379     break;
07380 
07381   case 237:
07382 
07383 /* Line 1806 of yacc.c  */
07384 #line 2278 "parse.y"
07385     {
07386                     /*%%%*/
07387                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tLSHFT, (yyvsp[(3) - (3)].node));
07388                     /*%
07389                         $$ = dispatch3(binary, $1, ripper_intern("<<"), $3);
07390                     %*/
07391                     }
07392     break;
07393 
07394   case 238:
07395 
07396 /* Line 1806 of yacc.c  */
07397 #line 2286 "parse.y"
07398     {
07399                     /*%%%*/
07400                         (yyval.node) = call_bin_op((yyvsp[(1) - (3)].node), tRSHFT, (yyvsp[(3) - (3)].node));
07401                     /*%
07402                         $$ = dispatch3(binary, $1, ripper_intern(">>"), $3);
07403                     %*/
07404                     }
07405     break;
07406 
07407   case 239:
07408 
07409 /* Line 1806 of yacc.c  */
07410 #line 2294 "parse.y"
07411     {
07412                     /*%%%*/
07413                         (yyval.node) = logop(NODE_AND, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07414                     /*%
07415                         $$ = dispatch3(binary, $1, ripper_intern("&&"), $3);
07416                     %*/
07417                     }
07418     break;
07419 
07420   case 240:
07421 
07422 /* Line 1806 of yacc.c  */
07423 #line 2302 "parse.y"
07424     {
07425                     /*%%%*/
07426                         (yyval.node) = logop(NODE_OR, (yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07427                     /*%
07428                         $$ = dispatch3(binary, $1, ripper_intern("||"), $3);
07429                     %*/
07430                     }
07431     break;
07432 
07433   case 241:
07434 
07435 /* Line 1806 of yacc.c  */
07436 #line 2309 "parse.y"
07437     {in_defined = 1;}
07438     break;
07439 
07440   case 242:
07441 
07442 /* Line 1806 of yacc.c  */
07443 #line 2310 "parse.y"
07444     {
07445                     /*%%%*/
07446                         in_defined = 0;
07447                         (yyval.node) = NEW_DEFINED((yyvsp[(4) - (4)].node));
07448                     /*%
07449                         in_defined = 0;
07450                         $$ = dispatch1(defined, $4);
07451                     %*/
07452                     }
07453     break;
07454 
07455   case 243:
07456 
07457 /* Line 1806 of yacc.c  */
07458 #line 2320 "parse.y"
07459     {
07460                     /*%%%*/
07461                         value_expr((yyvsp[(1) - (6)].node));
07462                         (yyval.node) = NEW_IF(cond((yyvsp[(1) - (6)].node)), (yyvsp[(3) - (6)].node), (yyvsp[(6) - (6)].node));
07463                         fixpos((yyval.node), (yyvsp[(1) - (6)].node));
07464                     /*%
07465                         $$ = dispatch3(ifop, $1, $3, $6);
07466                     %*/
07467                     }
07468     break;
07469 
07470   case 244:
07471 
07472 /* Line 1806 of yacc.c  */
07473 #line 2330 "parse.y"
07474     {
07475                         (yyval.node) = (yyvsp[(1) - (1)].node);
07476                     }
07477     break;
07478 
07479   case 245:
07480 
07481 /* Line 1806 of yacc.c  */
07482 #line 2336 "parse.y"
07483     {
07484                     /*%%%*/
07485                         value_expr((yyvsp[(1) - (1)].node));
07486                         (yyval.node) = (yyvsp[(1) - (1)].node);
07487                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
07488                     /*%
07489                         $$ = $1;
07490                     %*/
07491                     }
07492     break;
07493 
07494   case 247:
07495 
07496 /* Line 1806 of yacc.c  */
07497 #line 2349 "parse.y"
07498     {
07499                         (yyval.node) = (yyvsp[(1) - (2)].node);
07500                     }
07501     break;
07502 
07503   case 248:
07504 
07505 /* Line 1806 of yacc.c  */
07506 #line 2353 "parse.y"
07507     {
07508                     /*%%%*/
07509                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07510                     /*%
07511                         $$ = arg_add_assocs($1, $3);
07512                     %*/
07513                     }
07514     break;
07515 
07516   case 249:
07517 
07518 /* Line 1806 of yacc.c  */
07519 #line 2361 "parse.y"
07520     {
07521                     /*%%%*/
07522                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07523                     /*%
07524                         $$ = arg_add_assocs(arg_new(), $1);
07525                     %*/
07526                     }
07527     break;
07528 
07529   case 250:
07530 
07531 /* Line 1806 of yacc.c  */
07532 #line 2371 "parse.y"
07533     {
07534                     /*%%%*/
07535                         (yyval.node) = (yyvsp[(2) - (3)].node);
07536                     /*%
07537                         $$ = dispatch1(arg_paren, escape_Qundef($2));
07538                     %*/
07539                     }
07540     break;
07541 
07542   case 255:
07543 
07544 /* Line 1806 of yacc.c  */
07545 #line 2387 "parse.y"
07546     {
07547                       (yyval.node) = (yyvsp[(1) - (2)].node);
07548                     }
07549     break;
07550 
07551   case 256:
07552 
07553 /* Line 1806 of yacc.c  */
07554 #line 2391 "parse.y"
07555     {
07556                     /*%%%*/
07557                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07558                     /*%
07559                         $$ = arg_add_assocs($1, $3);
07560                     %*/
07561                     }
07562     break;
07563 
07564   case 257:
07565 
07566 /* Line 1806 of yacc.c  */
07567 #line 2399 "parse.y"
07568     {
07569                     /*%%%*/
07570                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07571                     /*%
07572                         $$ = arg_add_assocs(arg_new(), $1);
07573                     %*/
07574                     }
07575     break;
07576 
07577   case 258:
07578 
07579 /* Line 1806 of yacc.c  */
07580 #line 2409 "parse.y"
07581     {
07582                     /*%%%*/
07583                         value_expr((yyvsp[(1) - (1)].node));
07584                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07585                     /*%
07586                         $$ = arg_add(arg_new(), $1);
07587                     %*/
07588                     }
07589     break;
07590 
07591   case 259:
07592 
07593 /* Line 1806 of yacc.c  */
07594 #line 2418 "parse.y"
07595     {
07596                     /*%%%*/
07597                         (yyval.node) = arg_blk_pass((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
07598                     /*%
07599                         $$ = arg_add_optblock($1, $2);
07600                     %*/
07601                     }
07602     break;
07603 
07604   case 260:
07605 
07606 /* Line 1806 of yacc.c  */
07607 #line 2426 "parse.y"
07608     {
07609                     /*%%%*/
07610                         (yyval.node) = NEW_LIST(NEW_HASH((yyvsp[(1) - (2)].node)));
07611                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(2) - (2)].node));
07612                     /*%
07613                         $$ = arg_add_assocs(arg_new(), $1);
07614                         $$ = arg_add_optblock($$, $2);
07615                     %*/
07616                     }
07617     break;
07618 
07619   case 261:
07620 
07621 /* Line 1806 of yacc.c  */
07622 #line 2436 "parse.y"
07623     {
07624                     /*%%%*/
07625                         (yyval.node) = arg_append((yyvsp[(1) - (4)].node), NEW_HASH((yyvsp[(3) - (4)].node)));
07626                         (yyval.node) = arg_blk_pass((yyval.node), (yyvsp[(4) - (4)].node));
07627                     /*%
07628                         $$ = arg_add_optblock(arg_add_assocs($1, $3), $4);
07629                     %*/
07630                     }
07631     break;
07632 
07633   case 263:
07634 
07635 /* Line 1806 of yacc.c  */
07636 #line 2453 "parse.y"
07637     {
07638                         (yyval.val) = cmdarg_stack;
07639                         CMDARG_PUSH(1);
07640                     }
07641     break;
07642 
07643   case 264:
07644 
07645 /* Line 1806 of yacc.c  */
07646 #line 2458 "parse.y"
07647     {
07648                         /* CMDARG_POP() */
07649                         cmdarg_stack = (yyvsp[(1) - (2)].val);
07650                         (yyval.node) = (yyvsp[(2) - (2)].node);
07651                     }
07652     break;
07653 
07654   case 265:
07655 
07656 /* Line 1806 of yacc.c  */
07657 #line 2466 "parse.y"
07658     {
07659                     /*%%%*/
07660                         (yyval.node) = NEW_BLOCK_PASS((yyvsp[(2) - (2)].node));
07661                     /*%
07662                         $$ = $2;
07663                     %*/
07664                     }
07665     break;
07666 
07667   case 266:
07668 
07669 /* Line 1806 of yacc.c  */
07670 #line 2476 "parse.y"
07671     {
07672                         (yyval.node) = (yyvsp[(2) - (2)].node);
07673                     }
07674     break;
07675 
07676   case 267:
07677 
07678 /* Line 1806 of yacc.c  */
07679 #line 2480 "parse.y"
07680     {
07681                         (yyval.node) = 0;
07682                     }
07683     break;
07684 
07685   case 268:
07686 
07687 /* Line 1806 of yacc.c  */
07688 #line 2486 "parse.y"
07689     {
07690                     /*%%%*/
07691                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
07692                     /*%
07693                         $$ = arg_add(arg_new(), $1);
07694                     %*/
07695                     }
07696     break;
07697 
07698   case 269:
07699 
07700 /* Line 1806 of yacc.c  */
07701 #line 2494 "parse.y"
07702     {
07703                     /*%%%*/
07704                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07705                     /*%
07706                         $$ = arg_add_star(arg_new(), $2);
07707                     %*/
07708                     }
07709     break;
07710 
07711   case 270:
07712 
07713 /* Line 1806 of yacc.c  */
07714 #line 2502 "parse.y"
07715     {
07716                     /*%%%*/
07717                         NODE *n1;
07718                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07719                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07720                         }
07721                         else {
07722                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07723                         }
07724                     /*%
07725                         $$ = arg_add($1, $3);
07726                     %*/
07727                     }
07728     break;
07729 
07730   case 271:
07731 
07732 /* Line 1806 of yacc.c  */
07733 #line 2516 "parse.y"
07734     {
07735                     /*%%%*/
07736                         NODE *n1;
07737                         if ((nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY) && (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07738                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07739                         }
07740                         else {
07741                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07742                         }
07743                     /*%
07744                         $$ = arg_add_star($1, $4);
07745                     %*/
07746                     }
07747     break;
07748 
07749   case 272:
07750 
07751 /* Line 1806 of yacc.c  */
07752 #line 2532 "parse.y"
07753     {
07754                     /*%%%*/
07755                         NODE *n1;
07756                         if ((n1 = splat_array((yyvsp[(1) - (3)].node))) != 0) {
07757                             (yyval.node) = list_append(n1, (yyvsp[(3) - (3)].node));
07758                         }
07759                         else {
07760                             (yyval.node) = arg_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
07761                         }
07762                     /*%
07763                         $$ = mrhs_add(args2mrhs($1), $3);
07764                     %*/
07765                     }
07766     break;
07767 
07768   case 273:
07769 
07770 /* Line 1806 of yacc.c  */
07771 #line 2546 "parse.y"
07772     {
07773                     /*%%%*/
07774                         NODE *n1;
07775                         if (nd_type((yyvsp[(4) - (4)].node)) == NODE_ARRAY &&
07776                             (n1 = splat_array((yyvsp[(1) - (4)].node))) != 0) {
07777                             (yyval.node) = list_concat(n1, (yyvsp[(4) - (4)].node));
07778                         }
07779                         else {
07780                             (yyval.node) = arg_concat((yyvsp[(1) - (4)].node), (yyvsp[(4) - (4)].node));
07781                         }
07782                     /*%
07783                         $$ = mrhs_add_star(args2mrhs($1), $4);
07784                     %*/
07785                     }
07786     break;
07787 
07788   case 274:
07789 
07790 /* Line 1806 of yacc.c  */
07791 #line 2561 "parse.y"
07792     {
07793                     /*%%%*/
07794                         (yyval.node) = NEW_SPLAT((yyvsp[(2) - (2)].node));
07795                     /*%
07796                         $$ = mrhs_add_star(mrhs_new(), $2);
07797                     %*/
07798                     }
07799     break;
07800 
07801   case 285:
07802 
07803 /* Line 1806 of yacc.c  */
07804 #line 2581 "parse.y"
07805     {
07806                     /*%%%*/
07807                         (yyval.node) = NEW_FCALL((yyvsp[(1) - (1)].id), 0);
07808                     /*%
07809                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
07810                     %*/
07811                     }
07812     break;
07813 
07814   case 286:
07815 
07816 /* Line 1806 of yacc.c  */
07817 #line 2589 "parse.y"
07818     {
07819                         (yyvsp[(1) - (1)].val) = cmdarg_stack;
07820                         cmdarg_stack = 0;
07821                     /*%%%*/
07822                         (yyval.num) = ruby_sourceline;
07823                     /*%
07824                     %*/
07825                     }
07826     break;
07827 
07828   case 287:
07829 
07830 /* Line 1806 of yacc.c  */
07831 #line 2599 "parse.y"
07832     {
07833                         cmdarg_stack = (yyvsp[(1) - (4)].val);
07834                     /*%%%*/
07835                         if ((yyvsp[(3) - (4)].node) == NULL) {
07836                             (yyval.node) = NEW_NIL();
07837                         }
07838                         else {
07839                             if (nd_type((yyvsp[(3) - (4)].node)) == NODE_RESCUE ||
07840                                 nd_type((yyvsp[(3) - (4)].node)) == NODE_ENSURE)
07841                                 nd_set_line((yyvsp[(3) - (4)].node), (yyvsp[(2) - (4)].num));
07842                             (yyval.node) = NEW_BEGIN((yyvsp[(3) - (4)].node));
07843                         }
07844                         nd_set_line((yyval.node), (yyvsp[(2) - (4)].num));
07845                     /*%
07846                         $$ = dispatch1(begin, $3);
07847                     %*/
07848                     }
07849     break;
07850 
07851   case 288:
07852 
07853 /* Line 1806 of yacc.c  */
07854 #line 2616 "parse.y"
07855     {lex_state = EXPR_ENDARG;}
07856     break;
07857 
07858   case 289:
07859 
07860 /* Line 1806 of yacc.c  */
07861 #line 2617 "parse.y"
07862     {
07863                     /*%%%*/
07864                         (yyval.node) = 0;
07865                     /*%
07866                         $$ = dispatch1(paren, 0);
07867                     %*/
07868                     }
07869     break;
07870 
07871   case 290:
07872 
07873 /* Line 1806 of yacc.c  */
07874 #line 2625 "parse.y"
07875     {
07876                         (yyvsp[(1) - (1)].val) = cmdarg_stack;
07877                         cmdarg_stack = 0;
07878                     }
07879     break;
07880 
07881   case 291:
07882 
07883 /* Line 1806 of yacc.c  */
07884 #line 2629 "parse.y"
07885     {lex_state = EXPR_ENDARG;}
07886     break;
07887 
07888   case 292:
07889 
07890 /* Line 1806 of yacc.c  */
07891 #line 2630 "parse.y"
07892     {
07893                         cmdarg_stack = (yyvsp[(1) - (5)].val);
07894                     /*%%%*/
07895                         (yyval.node) = (yyvsp[(3) - (5)].node);
07896                     /*%
07897                         $$ = dispatch1(paren, $3);
07898                     %*/
07899                     }
07900     break;
07901 
07902   case 293:
07903 
07904 /* Line 1806 of yacc.c  */
07905 #line 2639 "parse.y"
07906     {
07907                     /*%%%*/
07908                         (yyval.node) = (yyvsp[(2) - (3)].node);
07909                     /*%
07910                         $$ = dispatch1(paren, $2);
07911                     %*/
07912                     }
07913     break;
07914 
07915   case 294:
07916 
07917 /* Line 1806 of yacc.c  */
07918 #line 2647 "parse.y"
07919     {
07920                     /*%%%*/
07921                         (yyval.node) = NEW_COLON2((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id));
07922                     /*%
07923                         $$ = dispatch2(const_path_ref, $1, $3);
07924                     %*/
07925                     }
07926     break;
07927 
07928   case 295:
07929 
07930 /* Line 1806 of yacc.c  */
07931 #line 2655 "parse.y"
07932     {
07933                     /*%%%*/
07934                         (yyval.node) = NEW_COLON3((yyvsp[(2) - (2)].id));
07935                     /*%
07936                         $$ = dispatch1(top_const_ref, $2);
07937                     %*/
07938                     }
07939     break;
07940 
07941   case 296:
07942 
07943 /* Line 1806 of yacc.c  */
07944 #line 2663 "parse.y"
07945     {
07946                     /*%%%*/
07947                         if ((yyvsp[(2) - (3)].node) == 0) {
07948                             (yyval.node) = NEW_ZARRAY(); /* zero length array*/
07949                         }
07950                         else {
07951                             (yyval.node) = (yyvsp[(2) - (3)].node);
07952                         }
07953                     /*%
07954                         $$ = dispatch1(array, escape_Qundef($2));
07955                     %*/
07956                     }
07957     break;
07958 
07959   case 297:
07960 
07961 /* Line 1806 of yacc.c  */
07962 #line 2676 "parse.y"
07963     {
07964                     /*%%%*/
07965                         (yyval.node) = NEW_HASH((yyvsp[(2) - (3)].node));
07966                     /*%
07967                         $$ = dispatch1(hash, escape_Qundef($2));
07968                     %*/
07969                     }
07970     break;
07971 
07972   case 298:
07973 
07974 /* Line 1806 of yacc.c  */
07975 #line 2684 "parse.y"
07976     {
07977                     /*%%%*/
07978                         (yyval.node) = NEW_RETURN(0);
07979                     /*%
07980                         $$ = dispatch0(return0);
07981                     %*/
07982                     }
07983     break;
07984 
07985   case 299:
07986 
07987 /* Line 1806 of yacc.c  */
07988 #line 2692 "parse.y"
07989     {
07990                     /*%%%*/
07991                         (yyval.node) = new_yield((yyvsp[(3) - (4)].node));
07992                     /*%
07993                         $$ = dispatch1(yield, dispatch1(paren, $3));
07994                     %*/
07995                     }
07996     break;
07997 
07998   case 300:
07999 
08000 /* Line 1806 of yacc.c  */
08001 #line 2700 "parse.y"
08002     {
08003                     /*%%%*/
08004                         (yyval.node) = NEW_YIELD(0);
08005                     /*%
08006                         $$ = dispatch1(yield, dispatch1(paren, arg_new()));
08007                     %*/
08008                     }
08009     break;
08010 
08011   case 301:
08012 
08013 /* Line 1806 of yacc.c  */
08014 #line 2708 "parse.y"
08015     {
08016                     /*%%%*/
08017                         (yyval.node) = NEW_YIELD(0);
08018                     /*%
08019                         $$ = dispatch0(yield0);
08020                     %*/
08021                     }
08022     break;
08023 
08024   case 302:
08025 
08026 /* Line 1806 of yacc.c  */
08027 #line 2715 "parse.y"
08028     {in_defined = 1;}
08029     break;
08030 
08031   case 303:
08032 
08033 /* Line 1806 of yacc.c  */
08034 #line 2716 "parse.y"
08035     {
08036                     /*%%%*/
08037                         in_defined = 0;
08038                         (yyval.node) = NEW_DEFINED((yyvsp[(5) - (6)].node));
08039                     /*%
08040                         in_defined = 0;
08041                         $$ = dispatch1(defined, $5);
08042                     %*/
08043                     }
08044     break;
08045 
08046   case 304:
08047 
08048 /* Line 1806 of yacc.c  */
08049 #line 2726 "parse.y"
08050     {
08051                     /*%%%*/
08052                         (yyval.node) = call_uni_op(cond((yyvsp[(3) - (4)].node)), '!');
08053                     /*%
08054                         $$ = dispatch2(unary, ripper_intern("not"), $3);
08055                     %*/
08056                     }
08057     break;
08058 
08059   case 305:
08060 
08061 /* Line 1806 of yacc.c  */
08062 #line 2734 "parse.y"
08063     {
08064                     /*%%%*/
08065                         (yyval.node) = call_uni_op(cond(NEW_NIL()), '!');
08066                     /*%
08067                         $$ = dispatch2(unary, ripper_intern("not"), Qnil);
08068                     %*/
08069                     }
08070     break;
08071 
08072   case 306:
08073 
08074 /* Line 1806 of yacc.c  */
08075 #line 2742 "parse.y"
08076     {
08077                     /*%%%*/
08078                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
08079                         (yyval.node) = (yyvsp[(2) - (2)].node);
08080                     /*%
08081                         $$ = method_arg(dispatch1(fcall, $1), arg_new());
08082                         $$ = method_add_block($$, $2);
08083                     %*/
08084                     }
08085     break;
08086 
08087   case 308:
08088 
08089 /* Line 1806 of yacc.c  */
08090 #line 2753 "parse.y"
08091     {
08092                     /*%%%*/
08093                         block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
08094                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
08095                         (yyval.node) = (yyvsp[(2) - (2)].node);
08096                     /*%
08097                         $$ = method_add_block($1, $2);
08098                     %*/
08099                     }
08100     break;
08101 
08102   case 309:
08103 
08104 /* Line 1806 of yacc.c  */
08105 #line 2763 "parse.y"
08106     {
08107                         (yyval.node) = (yyvsp[(2) - (2)].node);
08108                     }
08109     break;
08110 
08111   case 310:
08112 
08113 /* Line 1806 of yacc.c  */
08114 #line 2770 "parse.y"
08115     {
08116                     /*%%%*/
08117                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08118                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08119                     /*%
08120                         $$ = dispatch3(if, $2, $4, escape_Qundef($5));
08121                     %*/
08122                     }
08123     break;
08124 
08125   case 311:
08126 
08127 /* Line 1806 of yacc.c  */
08128 #line 2782 "parse.y"
08129     {
08130                     /*%%%*/
08131                         (yyval.node) = NEW_UNLESS(cond((yyvsp[(2) - (6)].node)), (yyvsp[(4) - (6)].node), (yyvsp[(5) - (6)].node));
08132                         fixpos((yyval.node), (yyvsp[(2) - (6)].node));
08133                     /*%
08134                         $$ = dispatch3(unless, $2, $4, escape_Qundef($5));
08135                     %*/
08136                     }
08137     break;
08138 
08139   case 312:
08140 
08141 /* Line 1806 of yacc.c  */
08142 #line 2790 "parse.y"
08143     {COND_PUSH(1);}
08144     break;
08145 
08146   case 313:
08147 
08148 /* Line 1806 of yacc.c  */
08149 #line 2790 "parse.y"
08150     {COND_POP();}
08151     break;
08152 
08153   case 314:
08154 
08155 /* Line 1806 of yacc.c  */
08156 #line 2793 "parse.y"
08157     {
08158                     /*%%%*/
08159                         (yyval.node) = NEW_WHILE(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08160                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08161                     /*%
08162                         $$ = dispatch2(while, $3, $6);
08163                     %*/
08164                     }
08165     break;
08166 
08167   case 315:
08168 
08169 /* Line 1806 of yacc.c  */
08170 #line 2801 "parse.y"
08171     {COND_PUSH(1);}
08172     break;
08173 
08174   case 316:
08175 
08176 /* Line 1806 of yacc.c  */
08177 #line 2801 "parse.y"
08178     {COND_POP();}
08179     break;
08180 
08181   case 317:
08182 
08183 /* Line 1806 of yacc.c  */
08184 #line 2804 "parse.y"
08185     {
08186                     /*%%%*/
08187                         (yyval.node) = NEW_UNTIL(cond((yyvsp[(3) - (7)].node)), (yyvsp[(6) - (7)].node), 1);
08188                         fixpos((yyval.node), (yyvsp[(3) - (7)].node));
08189                     /*%
08190                         $$ = dispatch2(until, $3, $6);
08191                     %*/
08192                     }
08193     break;
08194 
08195   case 318:
08196 
08197 /* Line 1806 of yacc.c  */
08198 #line 2815 "parse.y"
08199     {
08200                     /*%%%*/
08201                         (yyval.node) = NEW_CASE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08202                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08203                     /*%
08204                         $$ = dispatch2(case, $2, $4);
08205                     %*/
08206                     }
08207     break;
08208 
08209   case 319:
08210 
08211 /* Line 1806 of yacc.c  */
08212 #line 2824 "parse.y"
08213     {
08214                     /*%%%*/
08215                         (yyval.node) = NEW_CASE(0, (yyvsp[(3) - (4)].node));
08216                     /*%
08217                         $$ = dispatch2(case, Qnil, $3);
08218                     %*/
08219                     }
08220     break;
08221 
08222   case 320:
08223 
08224 /* Line 1806 of yacc.c  */
08225 #line 2832 "parse.y"
08226     {COND_PUSH(1);}
08227     break;
08228 
08229   case 321:
08230 
08231 /* Line 1806 of yacc.c  */
08232 #line 2834 "parse.y"
08233     {COND_POP();}
08234     break;
08235 
08236   case 322:
08237 
08238 /* Line 1806 of yacc.c  */
08239 #line 2837 "parse.y"
08240     {
08241                     /*%%%*/
08242                         /*
08243                          *  for a, b, c in e
08244                          *  #=>
08245                          *  e.each{|*x| a, b, c = x
08246                          *
08247                          *  for a in e
08248                          *  #=>
08249                          *  e.each{|x| a, = x}
08250                          */
08251                         ID id = internal_id();
08252                         ID *tbl = ALLOC_N(ID, 2);
08253                         NODE *m = NEW_ARGS_AUX(0, 0);
08254                         NODE *args, *scope;
08255 
08256                         if (nd_type((yyvsp[(2) - (9)].node)) == NODE_MASGN) {
08257                             /* if args.length == 1 && args[0].kind_of?(Array)
08258                              *   args = args[0]
08259                              * end
08260                              */
08261                             NODE *one = NEW_LIST(NEW_LIT(INT2FIX(1)));
08262                             NODE *zero = NEW_LIST(NEW_LIT(INT2FIX(0)));
08263                             m->nd_next = block_append(
08264                                 NEW_IF(
08265                                     NEW_NODE(NODE_AND,
08266                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), idLength, 0),
08267                                                       idEq, one),
08268                                              NEW_CALL(NEW_CALL(NEW_DVAR(id), idAREF, zero),
08269                                                       rb_intern("kind_of?"), NEW_LIST(NEW_LIT(rb_cArray))),
08270                                              0),
08271                                     NEW_DASGN_CURR(id,
08272                                                    NEW_CALL(NEW_DVAR(id), idAREF, zero)),
08273                                     0),
08274                                 node_assign((yyvsp[(2) - (9)].node), NEW_DVAR(id)));
08275 
08276                             args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
08277                         }
08278                         else {
08279                             if (nd_type((yyvsp[(2) - (9)].node)) == NODE_LASGN ||
08280                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN ||
08281                                 nd_type((yyvsp[(2) - (9)].node)) == NODE_DASGN_CURR) {
08282                                 (yyvsp[(2) - (9)].node)->nd_value = NEW_DVAR(id);
08283                                 m->nd_plen = 1;
08284                                 m->nd_next = (yyvsp[(2) - (9)].node);
08285                                 args = new_args(m, 0, 0, 0, new_args_tail(0, 0, 0));
08286                             }
08287                             else {
08288                                 m->nd_next = node_assign(NEW_MASGN(NEW_LIST((yyvsp[(2) - (9)].node)), 0), NEW_DVAR(id));
08289                                 args = new_args(m, 0, id, 0, new_args_tail(0, 0, 0));
08290                             }
08291                         }
08292                         scope = NEW_NODE(NODE_SCOPE, tbl, (yyvsp[(8) - (9)].node), args);
08293                         tbl[0] = 1; tbl[1] = id;
08294                         (yyval.node) = NEW_FOR(0, (yyvsp[(5) - (9)].node), scope);
08295                         fixpos((yyval.node), (yyvsp[(2) - (9)].node));
08296                     /*%
08297                         $$ = dispatch3(for, $2, $5, $8);
08298                     %*/
08299                     }
08300     break;
08301 
08302   case 323:
08303 
08304 /* Line 1806 of yacc.c  */
08305 #line 2898 "parse.y"
08306     {
08307                         if (in_def || in_single)
08308                             yyerror("class definition in method body");
08309                         local_push(0);
08310                     /*%%%*/
08311                         (yyval.num) = ruby_sourceline;
08312                     /*%
08313                     %*/
08314                     }
08315     break;
08316 
08317   case 324:
08318 
08319 /* Line 1806 of yacc.c  */
08320 #line 2909 "parse.y"
08321     {
08322                     /*%%%*/
08323                         (yyval.node) = NEW_CLASS((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(3) - (6)].node));
08324                         nd_set_line((yyval.node), (yyvsp[(4) - (6)].num));
08325                     /*%
08326                         $$ = dispatch3(class, $2, $3, $5);
08327                     %*/
08328                         local_pop();
08329                     }
08330     break;
08331 
08332   case 325:
08333 
08334 /* Line 1806 of yacc.c  */
08335 #line 2919 "parse.y"
08336     {
08337                         (yyval.num) = in_def;
08338                         in_def = 0;
08339                     }
08340     break;
08341 
08342   case 326:
08343 
08344 /* Line 1806 of yacc.c  */
08345 #line 2924 "parse.y"
08346     {
08347                         (yyval.num) = in_single;
08348                         in_single = 0;
08349                         local_push(0);
08350                     }
08351     break;
08352 
08353   case 327:
08354 
08355 /* Line 1806 of yacc.c  */
08356 #line 2931 "parse.y"
08357     {
08358                     /*%%%*/
08359                         (yyval.node) = NEW_SCLASS((yyvsp[(3) - (8)].node), (yyvsp[(7) - (8)].node));
08360                         fixpos((yyval.node), (yyvsp[(3) - (8)].node));
08361                     /*%
08362                         $$ = dispatch2(sclass, $3, $7);
08363                     %*/
08364                         local_pop();
08365                         in_def = (yyvsp[(4) - (8)].num);
08366                         in_single = (yyvsp[(6) - (8)].num);
08367                     }
08368     break;
08369 
08370   case 328:
08371 
08372 /* Line 1806 of yacc.c  */
08373 #line 2943 "parse.y"
08374     {
08375                         if (in_def || in_single)
08376                             yyerror("module definition in method body");
08377                         local_push(0);
08378                     /*%%%*/
08379                         (yyval.num) = ruby_sourceline;
08380                     /*%
08381                     %*/
08382                     }
08383     break;
08384 
08385   case 329:
08386 
08387 /* Line 1806 of yacc.c  */
08388 #line 2954 "parse.y"
08389     {
08390                     /*%%%*/
08391                         (yyval.node) = NEW_MODULE((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node));
08392                         nd_set_line((yyval.node), (yyvsp[(3) - (5)].num));
08393                     /*%
08394                         $$ = dispatch2(module, $2, $4);
08395                     %*/
08396                         local_pop();
08397                     }
08398     break;
08399 
08400   case 330:
08401 
08402 /* Line 1806 of yacc.c  */
08403 #line 2964 "parse.y"
08404     {
08405                         (yyval.id) = cur_mid;
08406                         cur_mid = (yyvsp[(2) - (2)].id);
08407                         in_def++;
08408                         local_push(0);
08409                     }
08410     break;
08411 
08412   case 331:
08413 
08414 /* Line 1806 of yacc.c  */
08415 #line 2973 "parse.y"
08416     {
08417                     /*%%%*/
08418                         NODE *body = remove_begin((yyvsp[(5) - (6)].node));
08419                         reduce_nodes(&body);
08420                         (yyval.node) = NEW_DEFN((yyvsp[(2) - (6)].id), (yyvsp[(4) - (6)].node), body, NOEX_PRIVATE);
08421                         nd_set_line((yyval.node), (yyvsp[(1) - (6)].num));
08422                     /*%
08423                         $$ = dispatch3(def, $2, $4, $5);
08424                     %*/
08425                         local_pop();
08426                         in_def--;
08427                         cur_mid = (yyvsp[(3) - (6)].id);
08428                     }
08429     break;
08430 
08431   case 332:
08432 
08433 /* Line 1806 of yacc.c  */
08434 #line 2986 "parse.y"
08435     {lex_state = EXPR_FNAME;}
08436     break;
08437 
08438   case 333:
08439 
08440 /* Line 1806 of yacc.c  */
08441 #line 2987 "parse.y"
08442     {
08443                         in_single++;
08444                         lex_state = EXPR_ENDFN; /* force for args */
08445                         local_push(0);
08446                     }
08447     break;
08448 
08449   case 334:
08450 
08451 /* Line 1806 of yacc.c  */
08452 #line 2995 "parse.y"
08453     {
08454                     /*%%%*/
08455                         NODE *body = remove_begin((yyvsp[(8) - (9)].node));
08456                         reduce_nodes(&body);
08457                         (yyval.node) = NEW_DEFS((yyvsp[(2) - (9)].node), (yyvsp[(5) - (9)].id), (yyvsp[(7) - (9)].node), body);
08458                         nd_set_line((yyval.node), (yyvsp[(1) - (9)].num));
08459                     /*%
08460                         $$ = dispatch5(defs, $2, $3, $5, $7, $8);
08461                     %*/
08462                         local_pop();
08463                         in_single--;
08464                     }
08465     break;
08466 
08467   case 335:
08468 
08469 /* Line 1806 of yacc.c  */
08470 #line 3008 "parse.y"
08471     {
08472                     /*%%%*/
08473                         (yyval.node) = NEW_BREAK(0);
08474                     /*%
08475                         $$ = dispatch1(break, arg_new());
08476                     %*/
08477                     }
08478     break;
08479 
08480   case 336:
08481 
08482 /* Line 1806 of yacc.c  */
08483 #line 3016 "parse.y"
08484     {
08485                     /*%%%*/
08486                         (yyval.node) = NEW_NEXT(0);
08487                     /*%
08488                         $$ = dispatch1(next, arg_new());
08489                     %*/
08490                     }
08491     break;
08492 
08493   case 337:
08494 
08495 /* Line 1806 of yacc.c  */
08496 #line 3024 "parse.y"
08497     {
08498                     /*%%%*/
08499                         (yyval.node) = NEW_REDO();
08500                     /*%
08501                         $$ = dispatch0(redo);
08502                     %*/
08503                     }
08504     break;
08505 
08506   case 338:
08507 
08508 /* Line 1806 of yacc.c  */
08509 #line 3032 "parse.y"
08510     {
08511                     /*%%%*/
08512                         (yyval.node) = NEW_RETRY();
08513                     /*%
08514                         $$ = dispatch0(retry);
08515                     %*/
08516                     }
08517     break;
08518 
08519   case 339:
08520 
08521 /* Line 1806 of yacc.c  */
08522 #line 3042 "parse.y"
08523     {
08524                     /*%%%*/
08525                         value_expr((yyvsp[(1) - (1)].node));
08526                         (yyval.node) = (yyvsp[(1) - (1)].node);
08527                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
08528                     /*%
08529                         $$ = $1;
08530                     %*/
08531                     }
08532     break;
08533 
08534   case 340:
08535 
08536 /* Line 1806 of yacc.c  */
08537 #line 3054 "parse.y"
08538     {
08539                         token_info_push("begin");
08540                     }
08541     break;
08542 
08543   case 341:
08544 
08545 /* Line 1806 of yacc.c  */
08546 #line 3060 "parse.y"
08547     {
08548                         token_info_push("if");
08549                     }
08550     break;
08551 
08552   case 342:
08553 
08554 /* Line 1806 of yacc.c  */
08555 #line 3066 "parse.y"
08556     {
08557                         token_info_push("unless");
08558                     }
08559     break;
08560 
08561   case 343:
08562 
08563 /* Line 1806 of yacc.c  */
08564 #line 3072 "parse.y"
08565     {
08566                         token_info_push("while");
08567                     }
08568     break;
08569 
08570   case 344:
08571 
08572 /* Line 1806 of yacc.c  */
08573 #line 3078 "parse.y"
08574     {
08575                         token_info_push("until");
08576                     }
08577     break;
08578 
08579   case 345:
08580 
08581 /* Line 1806 of yacc.c  */
08582 #line 3084 "parse.y"
08583     {
08584                         token_info_push("case");
08585                     }
08586     break;
08587 
08588   case 346:
08589 
08590 /* Line 1806 of yacc.c  */
08591 #line 3090 "parse.y"
08592     {
08593                         token_info_push("for");
08594                     }
08595     break;
08596 
08597   case 347:
08598 
08599 /* Line 1806 of yacc.c  */
08600 #line 3096 "parse.y"
08601     {
08602                         token_info_push("class");
08603                     }
08604     break;
08605 
08606   case 348:
08607 
08608 /* Line 1806 of yacc.c  */
08609 #line 3102 "parse.y"
08610     {
08611                         token_info_push("module");
08612                     }
08613     break;
08614 
08615   case 349:
08616 
08617 /* Line 1806 of yacc.c  */
08618 #line 3108 "parse.y"
08619     {
08620                         token_info_push("def");
08621                     /*%%%*/
08622                         (yyval.num) = ruby_sourceline;
08623                     /*%
08624                     %*/
08625                     }
08626     break;
08627 
08628   case 350:
08629 
08630 /* Line 1806 of yacc.c  */
08631 #line 3118 "parse.y"
08632     {
08633                         token_info_pop("end");
08634                     }
08635     break;
08636 
08637   case 357:
08638 
08639 /* Line 1806 of yacc.c  */
08640 #line 3148 "parse.y"
08641     {
08642                     /*%%%*/
08643                         (yyval.node) = NEW_IF(cond((yyvsp[(2) - (5)].node)), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
08644                         fixpos((yyval.node), (yyvsp[(2) - (5)].node));
08645                     /*%
08646                         $$ = dispatch3(elsif, $2, $4, escape_Qundef($5));
08647                     %*/
08648                     }
08649     break;
08650 
08651   case 359:
08652 
08653 /* Line 1806 of yacc.c  */
08654 #line 3160 "parse.y"
08655     {
08656                     /*%%%*/
08657                         (yyval.node) = (yyvsp[(2) - (2)].node);
08658                     /*%
08659                         $$ = dispatch1(else, $2);
08660                     %*/
08661                     }
08662     break;
08663 
08664   case 362:
08665 
08666 /* Line 1806 of yacc.c  */
08667 #line 3174 "parse.y"
08668     {
08669                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
08670                     /*%%%*/
08671                     /*%
08672                         $$ = dispatch1(mlhs_paren, $$);
08673                     %*/
08674                     }
08675     break;
08676 
08677   case 363:
08678 
08679 /* Line 1806 of yacc.c  */
08680 #line 3182 "parse.y"
08681     {
08682                     /*%%%*/
08683                         (yyval.node) = (yyvsp[(2) - (3)].node);
08684                     /*%
08685                         $$ = dispatch1(mlhs_paren, $2);
08686                     %*/
08687                     }
08688     break;
08689 
08690   case 364:
08691 
08692 /* Line 1806 of yacc.c  */
08693 #line 3192 "parse.y"
08694     {
08695                     /*%%%*/
08696                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
08697                     /*%
08698                         $$ = mlhs_add(mlhs_new(), $1);
08699                     %*/
08700                     }
08701     break;
08702 
08703   case 365:
08704 
08705 /* Line 1806 of yacc.c  */
08706 #line 3200 "parse.y"
08707     {
08708                     /*%%%*/
08709                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
08710                     /*%
08711                         $$ = mlhs_add($1, $3);
08712                     %*/
08713                     }
08714     break;
08715 
08716   case 366:
08717 
08718 /* Line 1806 of yacc.c  */
08719 #line 3210 "parse.y"
08720     {
08721                     /*%%%*/
08722                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (1)].node), 0);
08723                     /*%
08724                         $$ = $1;
08725                     %*/
08726                     }
08727     break;
08728 
08729   case 367:
08730 
08731 /* Line 1806 of yacc.c  */
08732 #line 3218 "parse.y"
08733     {
08734                         (yyval.node) = assignable((yyvsp[(4) - (4)].id), 0);
08735                     /*%%%*/
08736                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (4)].node), (yyval.node));
08737                     /*%
08738                         $$ = mlhs_add_star($1, $$);
08739                     %*/
08740                     }
08741     break;
08742 
08743   case 368:
08744 
08745 /* Line 1806 of yacc.c  */
08746 #line 3227 "parse.y"
08747     {
08748                         (yyval.node) = assignable((yyvsp[(4) - (6)].id), 0);
08749                     /*%%%*/
08750                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (6)].node), NEW_POSTARG((yyval.node), (yyvsp[(6) - (6)].node)));
08751                     /*%
08752                         $$ = mlhs_add_star($1, $$);
08753                     %*/
08754                     }
08755     break;
08756 
08757   case 369:
08758 
08759 /* Line 1806 of yacc.c  */
08760 #line 3236 "parse.y"
08761     {
08762                     /*%%%*/
08763                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (3)].node), -1);
08764                     /*%
08765                         $$ = mlhs_add_star($1, Qnil);
08766                     %*/
08767                     }
08768     break;
08769 
08770   case 370:
08771 
08772 /* Line 1806 of yacc.c  */
08773 #line 3244 "parse.y"
08774     {
08775                     /*%%%*/
08776                         (yyval.node) = NEW_MASGN((yyvsp[(1) - (5)].node), NEW_POSTARG(-1, (yyvsp[(5) - (5)].node)));
08777                     /*%
08778                         $$ = mlhs_add_star($1, $5);
08779                     %*/
08780                     }
08781     break;
08782 
08783   case 371:
08784 
08785 /* Line 1806 of yacc.c  */
08786 #line 3252 "parse.y"
08787     {
08788                         (yyval.node) = assignable((yyvsp[(2) - (2)].id), 0);
08789                     /*%%%*/
08790                         (yyval.node) = NEW_MASGN(0, (yyval.node));
08791                     /*%
08792                         $$ = mlhs_add_star(mlhs_new(), $$);
08793                     %*/
08794                     }
08795     break;
08796 
08797   case 372:
08798 
08799 /* Line 1806 of yacc.c  */
08800 #line 3261 "parse.y"
08801     {
08802                         (yyval.node) = assignable((yyvsp[(2) - (4)].id), 0);
08803                     /*%%%*/
08804                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG((yyval.node), (yyvsp[(4) - (4)].node)));
08805                     /*%
08806                       #if 0
08807                       TODO: Check me
08808                       #endif
08809                         $$ = mlhs_add_star($$, $4);
08810                     %*/
08811                     }
08812     break;
08813 
08814   case 373:
08815 
08816 /* Line 1806 of yacc.c  */
08817 #line 3273 "parse.y"
08818     {
08819                     /*%%%*/
08820                         (yyval.node) = NEW_MASGN(0, -1);
08821                     /*%
08822                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08823                     %*/
08824                     }
08825     break;
08826 
08827   case 374:
08828 
08829 /* Line 1806 of yacc.c  */
08830 #line 3281 "parse.y"
08831     {
08832                     /*%%%*/
08833                         (yyval.node) = NEW_MASGN(0, NEW_POSTARG(-1, (yyvsp[(3) - (3)].node)));
08834                     /*%
08835                         $$ = mlhs_add_star(mlhs_new(), Qnil);
08836                     %*/
08837                     }
08838     break;
08839 
08840   case 375:
08841 
08842 /* Line 1806 of yacc.c  */
08843 #line 3292 "parse.y"
08844     {
08845                         (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
08846                     }
08847     break;
08848 
08849   case 376:
08850 
08851 /* Line 1806 of yacc.c  */
08852 #line 3296 "parse.y"
08853     {
08854                         (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
08855                     }
08856     break;
08857 
08858   case 377:
08859 
08860 /* Line 1806 of yacc.c  */
08861 #line 3300 "parse.y"
08862     {
08863                         (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
08864                     }
08865     break;
08866 
08867   case 378:
08868 
08869 /* Line 1806 of yacc.c  */
08870 #line 3304 "parse.y"
08871     {
08872                         (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
08873                     }
08874     break;
08875 
08876   case 379:
08877 
08878 /* Line 1806 of yacc.c  */
08879 #line 3310 "parse.y"
08880     {
08881                         (yyval.node) = (yyvsp[(2) - (2)].node);
08882                     }
08883     break;
08884 
08885   case 380:
08886 
08887 /* Line 1806 of yacc.c  */
08888 #line 3314 "parse.y"
08889     {
08890                         (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
08891                     }
08892     break;
08893 
08894   case 381:
08895 
08896 /* Line 1806 of yacc.c  */
08897 #line 3320 "parse.y"
08898     {
08899                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
08900                     }
08901     break;
08902 
08903   case 382:
08904 
08905 /* Line 1806 of yacc.c  */
08906 #line 3324 "parse.y"
08907     {
08908                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
08909                     }
08910     break;
08911 
08912   case 383:
08913 
08914 /* Line 1806 of yacc.c  */
08915 #line 3328 "parse.y"
08916     {
08917                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
08918                     }
08919     break;
08920 
08921   case 384:
08922 
08923 /* Line 1806 of yacc.c  */
08924 #line 3332 "parse.y"
08925     {
08926                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
08927                     }
08928     break;
08929 
08930   case 385:
08931 
08932 /* Line 1806 of yacc.c  */
08933 #line 3336 "parse.y"
08934     {
08935                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
08936                     }
08937     break;
08938 
08939   case 386:
08940 
08941 /* Line 1806 of yacc.c  */
08942 #line 3340 "parse.y"
08943     {
08944                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, 1, Qnone, new_args_tail(Qnone, Qnone, Qnone));
08945                     /*%%%*/
08946                     /*%
08947                         dispatch1(excessed_comma, $$);
08948                     %*/
08949                     }
08950     break;
08951 
08952   case 387:
08953 
08954 /* Line 1806 of yacc.c  */
08955 #line 3348 "parse.y"
08956     {
08957                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
08958                     }
08959     break;
08960 
08961   case 388:
08962 
08963 /* Line 1806 of yacc.c  */
08964 #line 3352 "parse.y"
08965     {
08966                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
08967                     }
08968     break;
08969 
08970   case 389:
08971 
08972 /* Line 1806 of yacc.c  */
08973 #line 3356 "parse.y"
08974     {
08975                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
08976                     }
08977     break;
08978 
08979   case 390:
08980 
08981 /* Line 1806 of yacc.c  */
08982 #line 3360 "parse.y"
08983     {
08984                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
08985                     }
08986     break;
08987 
08988   case 391:
08989 
08990 /* Line 1806 of yacc.c  */
08991 #line 3364 "parse.y"
08992     {
08993                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
08994                     }
08995     break;
08996 
08997   case 392:
08998 
08999 /* Line 1806 of yacc.c  */
09000 #line 3368 "parse.y"
09001     {
09002                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
09003                     }
09004     break;
09005 
09006   case 393:
09007 
09008 /* Line 1806 of yacc.c  */
09009 #line 3372 "parse.y"
09010     {
09011                         (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
09012                     }
09013     break;
09014 
09015   case 394:
09016 
09017 /* Line 1806 of yacc.c  */
09018 #line 3376 "parse.y"
09019     {
09020                         (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
09021                     }
09022     break;
09023 
09024   case 395:
09025 
09026 /* Line 1806 of yacc.c  */
09027 #line 3380 "parse.y"
09028     {
09029                         (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
09030                     }
09031     break;
09032 
09033   case 397:
09034 
09035 /* Line 1806 of yacc.c  */
09036 #line 3387 "parse.y"
09037     {
09038                         command_start = TRUE;
09039                     }
09040     break;
09041 
09042   case 398:
09043 
09044 /* Line 1806 of yacc.c  */
09045 #line 3393 "parse.y"
09046     {
09047                     /*%%%*/
09048                         (yyval.node) = 0;
09049                     /*%
09050                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
09051                                           escape_Qundef($2));
09052                     %*/
09053                     }
09054     break;
09055 
09056   case 399:
09057 
09058 /* Line 1806 of yacc.c  */
09059 #line 3402 "parse.y"
09060     {
09061                     /*%%%*/
09062                         (yyval.node) = 0;
09063                     /*%
09064                         $$ = blockvar_new(params_new(Qnil,Qnil,Qnil,Qnil,Qnil,Qnil,Qnil),
09065                                           Qnil);
09066                     %*/
09067                     }
09068     break;
09069 
09070   case 400:
09071 
09072 /* Line 1806 of yacc.c  */
09073 #line 3411 "parse.y"
09074     {
09075                     /*%%%*/
09076                         (yyval.node) = (yyvsp[(2) - (4)].node);
09077                     /*%
09078                         $$ = blockvar_new(escape_Qundef($2), escape_Qundef($3));
09079                     %*/
09080                     }
09081     break;
09082 
09083   case 401:
09084 
09085 /* Line 1806 of yacc.c  */
09086 #line 3422 "parse.y"
09087     {
09088                       (yyval.node) = 0;
09089                     }
09090     break;
09091 
09092   case 402:
09093 
09094 /* Line 1806 of yacc.c  */
09095 #line 3426 "parse.y"
09096     {
09097                     /*%%%*/
09098                         (yyval.node) = 0;
09099                     /*%
09100                         $$ = $3;
09101                     %*/
09102                     }
09103     break;
09104 
09105   case 405:
09106 
09107 /* Line 1806 of yacc.c  */
09108 #line 3452 "parse.y"
09109     {
09110                         new_bv(get_id((yyvsp[(1) - (1)].id)));
09111                     /*%%%*/
09112                     /*%
09113                         $$ = get_value($1);
09114                     %*/
09115                     }
09116     break;
09117 
09118   case 406:
09119 
09120 /* Line 1806 of yacc.c  */
09121 #line 3460 "parse.y"
09122     {
09123                         (yyval.node) = 0;
09124                     }
09125     break;
09126 
09127   case 407:
09128 
09129 /* Line 1806 of yacc.c  */
09130 #line 3465 "parse.y"
09131     {
09132                         (yyval.vars) = dyna_push();
09133                     }
09134     break;
09135 
09136   case 408:
09137 
09138 /* Line 1806 of yacc.c  */
09139 #line 3468 "parse.y"
09140     {
09141                         (yyval.num) = lpar_beg;
09142                         lpar_beg = ++paren_nest;
09143                     }
09144     break;
09145 
09146   case 409:
09147 
09148 /* Line 1806 of yacc.c  */
09149 #line 3473 "parse.y"
09150     {
09151                         (yyval.num) = ruby_sourceline;
09152                     }
09153     break;
09154 
09155   case 410:
09156 
09157 /* Line 1806 of yacc.c  */
09158 #line 3477 "parse.y"
09159     {
09160                         lpar_beg = (yyvsp[(2) - (5)].num);
09161                     /*%%%*/
09162                         (yyval.node) = NEW_LAMBDA((yyvsp[(3) - (5)].node), (yyvsp[(5) - (5)].node));
09163                         nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09164                     /*%
09165                         $$ = dispatch2(lambda, $3, $5);
09166                     %*/
09167                         dyna_pop((yyvsp[(1) - (5)].vars));
09168                     }
09169     break;
09170 
09171   case 411:
09172 
09173 /* Line 1806 of yacc.c  */
09174 #line 3490 "parse.y"
09175     {
09176                     /*%%%*/
09177                         (yyval.node) = (yyvsp[(2) - (4)].node);
09178                     /*%
09179                         $$ = dispatch1(paren, $2);
09180                     %*/
09181                     }
09182     break;
09183 
09184   case 412:
09185 
09186 /* Line 1806 of yacc.c  */
09187 #line 3498 "parse.y"
09188     {
09189                     /*%%%*/
09190                         (yyval.node) = (yyvsp[(1) - (1)].node);
09191                     /*%
09192                         $$ = $1;
09193                     %*/
09194                     }
09195     break;
09196 
09197   case 413:
09198 
09199 /* Line 1806 of yacc.c  */
09200 #line 3508 "parse.y"
09201     {
09202                         (yyval.node) = (yyvsp[(2) - (3)].node);
09203                     }
09204     break;
09205 
09206   case 414:
09207 
09208 /* Line 1806 of yacc.c  */
09209 #line 3512 "parse.y"
09210     {
09211                         (yyval.node) = (yyvsp[(2) - (3)].node);
09212                     }
09213     break;
09214 
09215   case 415:
09216 
09217 /* Line 1806 of yacc.c  */
09218 #line 3518 "parse.y"
09219     {
09220                         (yyvsp[(1) - (1)].vars) = dyna_push();
09221                     /*%%%*/
09222                         (yyval.num) = ruby_sourceline;
09223                     /*% %*/
09224                     }
09225     break;
09226 
09227   case 416:
09228 
09229 /* Line 1806 of yacc.c  */
09230 #line 3527 "parse.y"
09231     {
09232                     /*%%%*/
09233                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09234                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09235                     /*%
09236                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09237                     %*/
09238                         dyna_pop((yyvsp[(1) - (5)].vars));
09239                     }
09240     break;
09241 
09242   case 417:
09243 
09244 /* Line 1806 of yacc.c  */
09245 #line 3539 "parse.y"
09246     {
09247                     /*%%%*/
09248                         if (nd_type((yyvsp[(1) - (2)].node)) == NODE_YIELD) {
09249                             compile_error(PARSER_ARG "block given to yield");
09250                         }
09251                         else {
09252                             block_dup_check((yyvsp[(1) - (2)].node)->nd_args, (yyvsp[(2) - (2)].node));
09253                         }
09254                         (yyvsp[(2) - (2)].node)->nd_iter = (yyvsp[(1) - (2)].node);
09255                         (yyval.node) = (yyvsp[(2) - (2)].node);
09256                         fixpos((yyval.node), (yyvsp[(1) - (2)].node));
09257                     /*%
09258                         $$ = method_add_block($1, $2);
09259                     %*/
09260                     }
09261     break;
09262 
09263   case 418:
09264 
09265 /* Line 1806 of yacc.c  */
09266 #line 3555 "parse.y"
09267     {
09268                     /*%%%*/
09269                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].node));
09270                     /*%
09271                         $$ = dispatch3(call, $1, $2, $3);
09272                         $$ = method_optarg($$, $4);
09273                     %*/
09274                     }
09275     break;
09276 
09277   case 419:
09278 
09279 /* Line 1806 of yacc.c  */
09280 #line 3564 "parse.y"
09281     {
09282                     /*%%%*/
09283                         block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09284                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
09285                         (yyval.node) = (yyvsp[(5) - (5)].node);
09286                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
09287                     /*%
09288                         $$ = dispatch4(command_call, $1, $2, $3, $4);
09289                         $$ = method_add_block($$, $5);
09290                     %*/
09291                     }
09292     break;
09293 
09294   case 420:
09295 
09296 /* Line 1806 of yacc.c  */
09297 #line 3576 "parse.y"
09298     {
09299                     /*%%%*/
09300                         block_dup_check((yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09301                         (yyvsp[(5) - (5)].node)->nd_iter = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(4) - (5)].node));
09302                         (yyval.node) = (yyvsp[(5) - (5)].node);
09303                         fixpos((yyval.node), (yyvsp[(1) - (5)].node));
09304                     /*%
09305                         $$ = dispatch4(command_call, $1, $2, $3, $4);
09306                         $$ = method_add_block($$, $5);
09307                     %*/
09308                     }
09309     break;
09310 
09311   case 421:
09312 
09313 /* Line 1806 of yacc.c  */
09314 #line 3590 "parse.y"
09315     {
09316                     /*%%%*/
09317                         (yyval.node) = (yyvsp[(1) - (2)].node);
09318                         (yyval.node)->nd_args = (yyvsp[(2) - (2)].node);
09319                     /*%
09320                         $$ = method_arg(dispatch1(fcall, $1), $2);
09321                     %*/
09322                     }
09323     break;
09324 
09325   case 422:
09326 
09327 /* Line 1806 of yacc.c  */
09328 #line 3599 "parse.y"
09329     {
09330                     /*%%%*/
09331                         (yyval.num) = ruby_sourceline;
09332                     /*% %*/
09333                     }
09334     break;
09335 
09336   case 423:
09337 
09338 /* Line 1806 of yacc.c  */
09339 #line 3605 "parse.y"
09340     {
09341                     /*%%%*/
09342                         (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
09343                         nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09344                     /*%
09345                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09346                         $$ = method_optarg($$, $5);
09347                     %*/
09348                     }
09349     break;
09350 
09351   case 424:
09352 
09353 /* Line 1806 of yacc.c  */
09354 #line 3615 "parse.y"
09355     {
09356                     /*%%%*/
09357                         (yyval.num) = ruby_sourceline;
09358                     /*% %*/
09359                     }
09360     break;
09361 
09362   case 425:
09363 
09364 /* Line 1806 of yacc.c  */
09365 #line 3621 "parse.y"
09366     {
09367                     /*%%%*/
09368                         (yyval.node) = NEW_CALL((yyvsp[(1) - (5)].node), (yyvsp[(3) - (5)].id), (yyvsp[(5) - (5)].node));
09369                         nd_set_line((yyval.node), (yyvsp[(4) - (5)].num));
09370                     /*%
09371                         $$ = dispatch3(call, $1, ripper_id2sym('.'), $3);
09372                         $$ = method_optarg($$, $5);
09373                     %*/
09374                     }
09375     break;
09376 
09377   case 426:
09378 
09379 /* Line 1806 of yacc.c  */
09380 #line 3631 "parse.y"
09381     {
09382                     /*%%%*/
09383                         (yyval.node) = NEW_CALL((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].id), 0);
09384                     /*%
09385                         $$ = dispatch3(call, $1, ripper_intern("::"), $3);
09386                     %*/
09387                     }
09388     break;
09389 
09390   case 427:
09391 
09392 /* Line 1806 of yacc.c  */
09393 #line 3639 "parse.y"
09394     {
09395                     /*%%%*/
09396                         (yyval.num) = ruby_sourceline;
09397                     /*% %*/
09398                     }
09399     break;
09400 
09401   case 428:
09402 
09403 /* Line 1806 of yacc.c  */
09404 #line 3645 "parse.y"
09405     {
09406                     /*%%%*/
09407                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
09408                         nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
09409                     /*%
09410                         $$ = dispatch3(call, $1, ripper_id2sym('.'),
09411                                        ripper_intern("call"));
09412                         $$ = method_optarg($$, $4);
09413                     %*/
09414                     }
09415     break;
09416 
09417   case 429:
09418 
09419 /* Line 1806 of yacc.c  */
09420 #line 3656 "parse.y"
09421     {
09422                     /*%%%*/
09423                         (yyval.num) = ruby_sourceline;
09424                     /*% %*/
09425                     }
09426     break;
09427 
09428   case 430:
09429 
09430 /* Line 1806 of yacc.c  */
09431 #line 3662 "parse.y"
09432     {
09433                     /*%%%*/
09434                         (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), rb_intern("call"), (yyvsp[(4) - (4)].node));
09435                         nd_set_line((yyval.node), (yyvsp[(3) - (4)].num));
09436                     /*%
09437                         $$ = dispatch3(call, $1, ripper_intern("::"),
09438                                        ripper_intern("call"));
09439                         $$ = method_optarg($$, $4);
09440                     %*/
09441                     }
09442     break;
09443 
09444   case 431:
09445 
09446 /* Line 1806 of yacc.c  */
09447 #line 3673 "parse.y"
09448     {
09449                     /*%%%*/
09450                         (yyval.node) = NEW_SUPER((yyvsp[(2) - (2)].node));
09451                     /*%
09452                         $$ = dispatch1(super, $2);
09453                     %*/
09454                     }
09455     break;
09456 
09457   case 432:
09458 
09459 /* Line 1806 of yacc.c  */
09460 #line 3681 "parse.y"
09461     {
09462                     /*%%%*/
09463                         (yyval.node) = NEW_ZSUPER();
09464                     /*%
09465                         $$ = dispatch0(zsuper);
09466                     %*/
09467                     }
09468     break;
09469 
09470   case 433:
09471 
09472 /* Line 1806 of yacc.c  */
09473 #line 3689 "parse.y"
09474     {
09475                     /*%%%*/
09476                         if ((yyvsp[(1) - (4)].node) && nd_type((yyvsp[(1) - (4)].node)) == NODE_SELF)
09477                             (yyval.node) = NEW_FCALL(tAREF, (yyvsp[(3) - (4)].node));
09478                         else
09479                             (yyval.node) = NEW_CALL((yyvsp[(1) - (4)].node), tAREF, (yyvsp[(3) - (4)].node));
09480                         fixpos((yyval.node), (yyvsp[(1) - (4)].node));
09481                     /*%
09482                         $$ = dispatch2(aref, $1, escape_Qundef($3));
09483                     %*/
09484                     }
09485     break;
09486 
09487   case 434:
09488 
09489 /* Line 1806 of yacc.c  */
09490 #line 3703 "parse.y"
09491     {
09492                         (yyvsp[(1) - (1)].vars) = dyna_push();
09493                     /*%%%*/
09494                         (yyval.num) = ruby_sourceline;
09495                     /*%
09496                     %*/
09497                     }
09498     break;
09499 
09500   case 435:
09501 
09502 /* Line 1806 of yacc.c  */
09503 #line 3712 "parse.y"
09504     {
09505                     /*%%%*/
09506                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09507                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09508                     /*%
09509                         $$ = dispatch2(brace_block, escape_Qundef($3), $4);
09510                     %*/
09511                         dyna_pop((yyvsp[(1) - (5)].vars));
09512                     }
09513     break;
09514 
09515   case 436:
09516 
09517 /* Line 1806 of yacc.c  */
09518 #line 3722 "parse.y"
09519     {
09520                         (yyvsp[(1) - (1)].vars) = dyna_push();
09521                     /*%%%*/
09522                         (yyval.num) = ruby_sourceline;
09523                     /*%
09524                     %*/
09525                     }
09526     break;
09527 
09528   case 437:
09529 
09530 /* Line 1806 of yacc.c  */
09531 #line 3731 "parse.y"
09532     {
09533                     /*%%%*/
09534                         (yyval.node) = NEW_ITER((yyvsp[(3) - (5)].node),(yyvsp[(4) - (5)].node));
09535                         nd_set_line((yyval.node), (yyvsp[(2) - (5)].num));
09536                     /*%
09537                         $$ = dispatch2(do_block, escape_Qundef($3), $4);
09538                     %*/
09539                         dyna_pop((yyvsp[(1) - (5)].vars));
09540                     }
09541     break;
09542 
09543   case 438:
09544 
09545 /* Line 1806 of yacc.c  */
09546 #line 3745 "parse.y"
09547     {
09548                     /*%%%*/
09549                         (yyval.node) = NEW_WHEN((yyvsp[(2) - (5)].node), (yyvsp[(4) - (5)].node), (yyvsp[(5) - (5)].node));
09550                     /*%
09551                         $$ = dispatch3(when, $2, $4, escape_Qundef($5));
09552                     %*/
09553                     }
09554     break;
09555 
09556   case 441:
09557 
09558 /* Line 1806 of yacc.c  */
09559 #line 3761 "parse.y"
09560     {
09561                     /*%%%*/
09562                         if ((yyvsp[(3) - (6)].node)) {
09563                             (yyvsp[(3) - (6)].node) = node_assign((yyvsp[(3) - (6)].node), NEW_ERRINFO());
09564                             (yyvsp[(5) - (6)].node) = block_append((yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].node));
09565                         }
09566                         (yyval.node) = NEW_RESBODY((yyvsp[(2) - (6)].node), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
09567                         fixpos((yyval.node), (yyvsp[(2) - (6)].node)?(yyvsp[(2) - (6)].node):(yyvsp[(5) - (6)].node));
09568                     /*%
09569                         $$ = dispatch4(rescue,
09570                                        escape_Qundef($2),
09571                                        escape_Qundef($3),
09572                                        escape_Qundef($5),
09573                                        escape_Qundef($6));
09574                     %*/
09575                     }
09576     break;
09577 
09578   case 443:
09579 
09580 /* Line 1806 of yacc.c  */
09581 #line 3781 "parse.y"
09582     {
09583                     /*%%%*/
09584                         (yyval.node) = NEW_LIST((yyvsp[(1) - (1)].node));
09585                     /*%
09586                         $$ = rb_ary_new3(1, $1);
09587                     %*/
09588                     }
09589     break;
09590 
09591   case 444:
09592 
09593 /* Line 1806 of yacc.c  */
09594 #line 3789 "parse.y"
09595     {
09596                     /*%%%*/
09597                         if (!((yyval.node) = splat_array((yyvsp[(1) - (1)].node)))) (yyval.node) = (yyvsp[(1) - (1)].node);
09598                     /*%
09599                         $$ = $1;
09600                     %*/
09601                     }
09602     break;
09603 
09604   case 446:
09605 
09606 /* Line 1806 of yacc.c  */
09607 #line 3800 "parse.y"
09608     {
09609                         (yyval.node) = (yyvsp[(2) - (2)].node);
09610                     }
09611     break;
09612 
09613   case 448:
09614 
09615 /* Line 1806 of yacc.c  */
09616 #line 3807 "parse.y"
09617     {
09618                     /*%%%*/
09619                         (yyval.node) = (yyvsp[(2) - (2)].node);
09620                     /*%
09621                         $$ = dispatch1(ensure, $2);
09622                     %*/
09623                     }
09624     break;
09625 
09626   case 451:
09627 
09628 /* Line 1806 of yacc.c  */
09629 #line 3819 "parse.y"
09630     {
09631                     /*%%%*/
09632                         (yyval.node) = NEW_LIT(ID2SYM((yyvsp[(1) - (1)].id)));
09633                     /*%
09634                         $$ = dispatch1(symbol_literal, $1);
09635                     %*/
09636                     }
09637     break;
09638 
09639   case 453:
09640 
09641 /* Line 1806 of yacc.c  */
09642 #line 3830 "parse.y"
09643     {
09644                     /*%%%*/
09645                         NODE *node = (yyvsp[(1) - (1)].node);
09646                         if (!node) {
09647                             node = NEW_STR(STR_NEW0());
09648                         }
09649                         else {
09650                             node = evstr2dstr(node);
09651                         }
09652                         (yyval.node) = node;
09653                     /*%
09654                         $$ = $1;
09655                     %*/
09656                     }
09657     break;
09658 
09659   case 456:
09660 
09661 /* Line 1806 of yacc.c  */
09662 #line 3849 "parse.y"
09663     {
09664                     /*%%%*/
09665                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09666                     /*%
09667                         $$ = dispatch2(string_concat, $1, $2);
09668                     %*/
09669                     }
09670     break;
09671 
09672   case 457:
09673 
09674 /* Line 1806 of yacc.c  */
09675 #line 3859 "parse.y"
09676     {
09677                     /*%%%*/
09678                         (yyval.node) = (yyvsp[(2) - (3)].node);
09679                     /*%
09680                         $$ = dispatch1(string_literal, $2);
09681                     %*/
09682                     }
09683     break;
09684 
09685   case 458:
09686 
09687 /* Line 1806 of yacc.c  */
09688 #line 3869 "parse.y"
09689     {
09690                     /*%%%*/
09691                         NODE *node = (yyvsp[(2) - (3)].node);
09692                         if (!node) {
09693                             node = NEW_XSTR(STR_NEW0());
09694                         }
09695                         else {
09696                             switch (nd_type(node)) {
09697                               case NODE_STR:
09698                                 nd_set_type(node, NODE_XSTR);
09699                                 break;
09700                               case NODE_DSTR:
09701                                 nd_set_type(node, NODE_DXSTR);
09702                                 break;
09703                               default:
09704                                 node = NEW_NODE(NODE_DXSTR, Qnil, 1, NEW_LIST(node));
09705                                 break;
09706                             }
09707                         }
09708                         (yyval.node) = node;
09709                     /*%
09710                         $$ = dispatch1(xstring_literal, $2);
09711                     %*/
09712                     }
09713     break;
09714 
09715   case 459:
09716 
09717 /* Line 1806 of yacc.c  */
09718 #line 3896 "parse.y"
09719     {
09720                     /*%%%*/
09721                         int options = (yyvsp[(3) - (3)].num);
09722                         NODE *node = (yyvsp[(2) - (3)].node);
09723                         NODE *list, *prev;
09724                         if (!node) {
09725                             node = NEW_LIT(reg_compile(STR_NEW0(), options));
09726                         }
09727                         else switch (nd_type(node)) {
09728                           case NODE_STR:
09729                             {
09730                                 VALUE src = node->nd_lit;
09731                                 nd_set_type(node, NODE_LIT);
09732                                 node->nd_lit = reg_compile(src, options);
09733                             }
09734                             break;
09735                           default:
09736                             node = NEW_NODE(NODE_DSTR, STR_NEW0(), 1, NEW_LIST(node));
09737                           case NODE_DSTR:
09738                             if (options & RE_OPTION_ONCE) {
09739                                 nd_set_type(node, NODE_DREGX_ONCE);
09740                             }
09741                             else {
09742                                 nd_set_type(node, NODE_DREGX);
09743                             }
09744                             node->nd_cflag = options & RE_OPTION_MASK;
09745                             if (!NIL_P(node->nd_lit)) reg_fragment_check(node->nd_lit, options);
09746                             for (list = (prev = node)->nd_next; list; list = list->nd_next) {
09747                                 if (nd_type(list->nd_head) == NODE_STR) {
09748                                     VALUE tail = list->nd_head->nd_lit;
09749                                     if (reg_fragment_check(tail, options) && prev && !NIL_P(prev->nd_lit)) {
09750                                         VALUE lit = prev == node ? prev->nd_lit : prev->nd_head->nd_lit;
09751                                         if (!literal_concat0(parser, lit, tail)) {
09752                                             node = 0;
09753                                             break;
09754                                         }
09755                                         rb_str_resize(tail, 0);
09756                                         prev->nd_next = list->nd_next;
09757                                         rb_gc_force_recycle((VALUE)list->nd_head);
09758                                         rb_gc_force_recycle((VALUE)list);
09759                                         list = prev;
09760                                     }
09761                                     else {
09762                                         prev = list;
09763                                     }
09764                                 }
09765                                 else {
09766                                     prev = 0;
09767                                 }
09768                             }
09769                             if (!node->nd_next) {
09770                                 VALUE src = node->nd_lit;
09771                                 nd_set_type(node, NODE_LIT);
09772                                 node->nd_lit = reg_compile(src, options);
09773                             }
09774                             break;
09775                         }
09776                         (yyval.node) = node;
09777                     /*%
09778                         $$ = dispatch2(regexp_literal, $2, $3);
09779                     %*/
09780                     }
09781     break;
09782 
09783   case 460:
09784 
09785 /* Line 1806 of yacc.c  */
09786 #line 3961 "parse.y"
09787     {
09788                     /*%%%*/
09789                         (yyval.node) = NEW_ZARRAY();
09790                     /*%
09791                         $$ = dispatch0(words_new);
09792                         $$ = dispatch1(array, $$);
09793                     %*/
09794                     }
09795     break;
09796 
09797   case 461:
09798 
09799 /* Line 1806 of yacc.c  */
09800 #line 3970 "parse.y"
09801     {
09802                     /*%%%*/
09803                         (yyval.node) = (yyvsp[(2) - (3)].node);
09804                     /*%
09805                         $$ = dispatch1(array, $2);
09806                     %*/
09807                     }
09808     break;
09809 
09810   case 462:
09811 
09812 /* Line 1806 of yacc.c  */
09813 #line 3980 "parse.y"
09814     {
09815                     /*%%%*/
09816                         (yyval.node) = 0;
09817                     /*%
09818                         $$ = dispatch0(words_new);
09819                     %*/
09820                     }
09821     break;
09822 
09823   case 463:
09824 
09825 /* Line 1806 of yacc.c  */
09826 #line 3988 "parse.y"
09827     {
09828                     /*%%%*/
09829                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), evstr2dstr((yyvsp[(2) - (3)].node)));
09830                     /*%
09831                         $$ = dispatch2(words_add, $1, $2);
09832                     %*/
09833                     }
09834     break;
09835 
09836   case 465:
09837 
09838 /* Line 1806 of yacc.c  */
09839 #line 4006 "parse.y"
09840     {
09841                     /*%%%*/
09842                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
09843                     /*%
09844                         $$ = dispatch2(word_add, $1, $2);
09845                     %*/
09846                     }
09847     break;
09848 
09849   case 466:
09850 
09851 /* Line 1806 of yacc.c  */
09852 #line 4016 "parse.y"
09853     {
09854                     /*%%%*/
09855                         (yyval.node) = NEW_ZARRAY();
09856                     /*%
09857                         $$ = dispatch0(symbols_new);
09858                         $$ = dispatch1(array, $$);
09859                     %*/
09860                     }
09861     break;
09862 
09863   case 467:
09864 
09865 /* Line 1806 of yacc.c  */
09866 #line 4025 "parse.y"
09867     {
09868                     /*%%%*/
09869                         (yyval.node) = (yyvsp[(2) - (3)].node);
09870                     /*%
09871                         $$ = dispatch1(array, $2);
09872                     %*/
09873                     }
09874     break;
09875 
09876   case 468:
09877 
09878 /* Line 1806 of yacc.c  */
09879 #line 4035 "parse.y"
09880     {
09881                     /*%%%*/
09882                         (yyval.node) = 0;
09883                     /*%
09884                         $$ = dispatch0(symbols_new);
09885                     %*/
09886                     }
09887     break;
09888 
09889   case 469:
09890 
09891 /* Line 1806 of yacc.c  */
09892 #line 4043 "parse.y"
09893     {
09894                     /*%%%*/
09895                         (yyvsp[(2) - (3)].node) = evstr2dstr((yyvsp[(2) - (3)].node));
09896                         nd_set_type((yyvsp[(2) - (3)].node), NODE_DSYM);
09897                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09898                     /*%
09899                         $$ = dispatch2(symbols_add, $1, $2);
09900                     %*/
09901                     }
09902     break;
09903 
09904   case 470:
09905 
09906 /* Line 1806 of yacc.c  */
09907 #line 4055 "parse.y"
09908     {
09909                     /*%%%*/
09910                         (yyval.node) = NEW_ZARRAY();
09911                     /*%
09912                         $$ = dispatch0(qwords_new);
09913                         $$ = dispatch1(array, $$);
09914                     %*/
09915                     }
09916     break;
09917 
09918   case 471:
09919 
09920 /* Line 1806 of yacc.c  */
09921 #line 4064 "parse.y"
09922     {
09923                     /*%%%*/
09924                         (yyval.node) = (yyvsp[(2) - (3)].node);
09925                     /*%
09926                         $$ = dispatch1(array, $2);
09927                     %*/
09928                     }
09929     break;
09930 
09931   case 472:
09932 
09933 /* Line 1806 of yacc.c  */
09934 #line 4074 "parse.y"
09935     {
09936                     /*%%%*/
09937                         (yyval.node) = NEW_ZARRAY();
09938                     /*%
09939                         $$ = dispatch0(qsymbols_new);
09940                         $$ = dispatch1(array, $$);
09941                     %*/
09942                     }
09943     break;
09944 
09945   case 473:
09946 
09947 /* Line 1806 of yacc.c  */
09948 #line 4083 "parse.y"
09949     {
09950                     /*%%%*/
09951                         (yyval.node) = (yyvsp[(2) - (3)].node);
09952                     /*%
09953                         $$ = dispatch1(array, $2);
09954                     %*/
09955                     }
09956     break;
09957 
09958   case 474:
09959 
09960 /* Line 1806 of yacc.c  */
09961 #line 4093 "parse.y"
09962     {
09963                     /*%%%*/
09964                         (yyval.node) = 0;
09965                     /*%
09966                         $$ = dispatch0(qwords_new);
09967                     %*/
09968                     }
09969     break;
09970 
09971   case 475:
09972 
09973 /* Line 1806 of yacc.c  */
09974 #line 4101 "parse.y"
09975     {
09976                     /*%%%*/
09977                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
09978                     /*%
09979                         $$ = dispatch2(qwords_add, $1, $2);
09980                     %*/
09981                     }
09982     break;
09983 
09984   case 476:
09985 
09986 /* Line 1806 of yacc.c  */
09987 #line 4111 "parse.y"
09988     {
09989                     /*%%%*/
09990                         (yyval.node) = 0;
09991                     /*%
09992                         $$ = dispatch0(qsymbols_new);
09993                     %*/
09994                     }
09995     break;
09996 
09997   case 477:
09998 
09999 /* Line 1806 of yacc.c  */
10000 #line 4119 "parse.y"
10001     {
10002                     /*%%%*/
10003                         VALUE lit;
10004                         lit = (yyvsp[(2) - (3)].node)->nd_lit;
10005                         (yyvsp[(2) - (3)].node)->nd_lit = ID2SYM(rb_intern_str(lit));
10006                         nd_set_type((yyvsp[(2) - (3)].node), NODE_LIT);
10007                         (yyval.node) = list_append((yyvsp[(1) - (3)].node), (yyvsp[(2) - (3)].node));
10008                     /*%
10009                         $$ = dispatch2(qsymbols_add, $1, $2);
10010                     %*/
10011                     }
10012     break;
10013 
10014   case 478:
10015 
10016 /* Line 1806 of yacc.c  */
10017 #line 4133 "parse.y"
10018     {
10019                     /*%%%*/
10020                         (yyval.node) = 0;
10021                     /*%
10022                         $$ = dispatch0(string_content);
10023                     %*/
10024                     }
10025     break;
10026 
10027   case 479:
10028 
10029 /* Line 1806 of yacc.c  */
10030 #line 4141 "parse.y"
10031     {
10032                     /*%%%*/
10033                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10034                     /*%
10035                         $$ = dispatch2(string_add, $1, $2);
10036                     %*/
10037                     }
10038     break;
10039 
10040   case 480:
10041 
10042 /* Line 1806 of yacc.c  */
10043 #line 4151 "parse.y"
10044     {
10045                     /*%%%*/
10046                         (yyval.node) = 0;
10047                     /*%
10048                         $$ = dispatch0(xstring_new);
10049                     %*/
10050                     }
10051     break;
10052 
10053   case 481:
10054 
10055 /* Line 1806 of yacc.c  */
10056 #line 4159 "parse.y"
10057     {
10058                     /*%%%*/
10059                         (yyval.node) = literal_concat((yyvsp[(1) - (2)].node), (yyvsp[(2) - (2)].node));
10060                     /*%
10061                         $$ = dispatch2(xstring_add, $1, $2);
10062                     %*/
10063                     }
10064     break;
10065 
10066   case 482:
10067 
10068 /* Line 1806 of yacc.c  */
10069 #line 4169 "parse.y"
10070     {
10071                     /*%%%*/
10072                         (yyval.node) = 0;
10073                     /*%
10074                         $$ = dispatch0(regexp_new);
10075                     %*/
10076                     }
10077     break;
10078 
10079   case 483:
10080 
10081 /* Line 1806 of yacc.c  */
10082 #line 4177 "parse.y"
10083     {
10084                     /*%%%*/
10085                         NODE *head = (yyvsp[(1) - (2)].node), *tail = (yyvsp[(2) - (2)].node);
10086                         if (!head) {
10087                             (yyval.node) = tail;
10088                         }
10089                         else if (!tail) {
10090                             (yyval.node) = head;
10091                         }
10092                         else {
10093                             switch (nd_type(head)) {
10094                               case NODE_STR:
10095                                 nd_set_type(head, NODE_DSTR);
10096                                 break;
10097                               case NODE_DSTR:
10098                                 break;
10099                               default:
10100                                 head = list_append(NEW_DSTR(Qnil), head);
10101                                 break;
10102                             }
10103                             (yyval.node) = list_append(head, tail);
10104                         }
10105                     /*%
10106                         $$ = dispatch2(regexp_add, $1, $2);
10107                     %*/
10108                     }
10109     break;
10110 
10111   case 485:
10112 
10113 /* Line 1806 of yacc.c  */
10114 #line 4207 "parse.y"
10115     {
10116                         (yyval.node) = lex_strterm;
10117                         lex_strterm = 0;
10118                         lex_state = EXPR_BEG;
10119                     }
10120     break;
10121 
10122   case 486:
10123 
10124 /* Line 1806 of yacc.c  */
10125 #line 4213 "parse.y"
10126     {
10127                     /*%%%*/
10128                         lex_strterm = (yyvsp[(2) - (3)].node);
10129                         (yyval.node) = NEW_EVSTR((yyvsp[(3) - (3)].node));
10130                     /*%
10131                         lex_strterm = $<node>2;
10132                         $$ = dispatch1(string_dvar, $3);
10133                     %*/
10134                     }
10135     break;
10136 
10137   case 487:
10138 
10139 /* Line 1806 of yacc.c  */
10140 #line 4223 "parse.y"
10141     {
10142                         (yyvsp[(1) - (1)].val) = cond_stack;
10143                         (yyval.val) = cmdarg_stack;
10144                         cond_stack = 0;
10145                         cmdarg_stack = 0;
10146                     }
10147     break;
10148 
10149   case 488:
10150 
10151 /* Line 1806 of yacc.c  */
10152 #line 4229 "parse.y"
10153     {
10154                         (yyval.node) = lex_strterm;
10155                         lex_strterm = 0;
10156                         lex_state = EXPR_BEG;
10157                     }
10158     break;
10159 
10160   case 489:
10161 
10162 /* Line 1806 of yacc.c  */
10163 #line 4234 "parse.y"
10164     {
10165                         (yyval.num) = brace_nest;
10166                         brace_nest = 0;
10167                     }
10168     break;
10169 
10170   case 490:
10171 
10172 /* Line 1806 of yacc.c  */
10173 #line 4239 "parse.y"
10174     {
10175                         cond_stack = (yyvsp[(1) - (6)].val);
10176                         cmdarg_stack = (yyvsp[(2) - (6)].val);
10177                         lex_strterm = (yyvsp[(3) - (6)].node);
10178                         brace_nest = (yyvsp[(4) - (6)].num);
10179                     /*%%%*/
10180                         if ((yyvsp[(5) - (6)].node)) (yyvsp[(5) - (6)].node)->flags &= ~NODE_FL_NEWLINE;
10181                         (yyval.node) = new_evstr((yyvsp[(5) - (6)].node));
10182                     /*%
10183                         $$ = dispatch1(string_embexpr, $5);
10184                     %*/
10185                     }
10186     break;
10187 
10188   case 491:
10189 
10190 /* Line 1806 of yacc.c  */
10191 #line 4254 "parse.y"
10192     {
10193                     /*%%%*/
10194                         (yyval.node) = NEW_GVAR((yyvsp[(1) - (1)].id));
10195                     /*%
10196                         $$ = dispatch1(var_ref, $1);
10197                     %*/
10198                     }
10199     break;
10200 
10201   case 492:
10202 
10203 /* Line 1806 of yacc.c  */
10204 #line 4262 "parse.y"
10205     {
10206                     /*%%%*/
10207                         (yyval.node) = NEW_IVAR((yyvsp[(1) - (1)].id));
10208                     /*%
10209                         $$ = dispatch1(var_ref, $1);
10210                     %*/
10211                     }
10212     break;
10213 
10214   case 493:
10215 
10216 /* Line 1806 of yacc.c  */
10217 #line 4270 "parse.y"
10218     {
10219                     /*%%%*/
10220                         (yyval.node) = NEW_CVAR((yyvsp[(1) - (1)].id));
10221                     /*%
10222                         $$ = dispatch1(var_ref, $1);
10223                     %*/
10224                     }
10225     break;
10226 
10227   case 495:
10228 
10229 /* Line 1806 of yacc.c  */
10230 #line 4281 "parse.y"
10231     {
10232                         lex_state = EXPR_END;
10233                     /*%%%*/
10234                         (yyval.id) = (yyvsp[(2) - (2)].id);
10235                     /*%
10236                         $$ = dispatch1(symbol, $2);
10237                     %*/
10238                     }
10239     break;
10240 
10241   case 500:
10242 
10243 /* Line 1806 of yacc.c  */
10244 #line 4298 "parse.y"
10245     {
10246                         lex_state = EXPR_END;
10247                     /*%%%*/
10248                         (yyval.node) = dsym_node((yyvsp[(2) - (3)].node));
10249                     /*%
10250                         $$ = dispatch1(dyna_symbol, $2);
10251                     %*/
10252                     }
10253     break;
10254 
10255   case 503:
10256 
10257 /* Line 1806 of yacc.c  */
10258 #line 4311 "parse.y"
10259     {
10260                     /*%%%*/
10261                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10262                     /*%
10263                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
10264                     %*/
10265                     }
10266     break;
10267 
10268   case 504:
10269 
10270 /* Line 1806 of yacc.c  */
10271 #line 4319 "parse.y"
10272     {
10273                     /*%%%*/
10274                         (yyval.node) = negate_lit((yyvsp[(2) - (2)].node));
10275                     /*%
10276                         $$ = dispatch2(unary, ripper_intern("-@"), $2);
10277                     %*/
10278                     }
10279     break;
10280 
10281   case 510:
10282 
10283 /* Line 1806 of yacc.c  */
10284 #line 4335 "parse.y"
10285     {ifndef_ripper((yyval.id) = keyword_nil);}
10286     break;
10287 
10288   case 511:
10289 
10290 /* Line 1806 of yacc.c  */
10291 #line 4336 "parse.y"
10292     {ifndef_ripper((yyval.id) = keyword_self);}
10293     break;
10294 
10295   case 512:
10296 
10297 /* Line 1806 of yacc.c  */
10298 #line 4337 "parse.y"
10299     {ifndef_ripper((yyval.id) = keyword_true);}
10300     break;
10301 
10302   case 513:
10303 
10304 /* Line 1806 of yacc.c  */
10305 #line 4338 "parse.y"
10306     {ifndef_ripper((yyval.id) = keyword_false);}
10307     break;
10308 
10309   case 514:
10310 
10311 /* Line 1806 of yacc.c  */
10312 #line 4339 "parse.y"
10313     {ifndef_ripper((yyval.id) = keyword__FILE__);}
10314     break;
10315 
10316   case 515:
10317 
10318 /* Line 1806 of yacc.c  */
10319 #line 4340 "parse.y"
10320     {ifndef_ripper((yyval.id) = keyword__LINE__);}
10321     break;
10322 
10323   case 516:
10324 
10325 /* Line 1806 of yacc.c  */
10326 #line 4341 "parse.y"
10327     {ifndef_ripper((yyval.id) = keyword__ENCODING__);}
10328     break;
10329 
10330   case 517:
10331 
10332 /* Line 1806 of yacc.c  */
10333 #line 4345 "parse.y"
10334     {
10335                     /*%%%*/
10336                         if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10337                     /*%
10338                         if (id_is_var(get_id($1))) {
10339                             $$ = dispatch1(var_ref, $1);
10340                         }
10341                         else {
10342                             $$ = dispatch1(vcall, $1);
10343                         }
10344                     %*/
10345                     }
10346     break;
10347 
10348   case 518:
10349 
10350 /* Line 1806 of yacc.c  */
10351 #line 4358 "parse.y"
10352     {
10353                     /*%%%*/
10354                         if (!((yyval.node) = gettable((yyvsp[(1) - (1)].id)))) (yyval.node) = NEW_BEGIN(0);
10355                     /*%
10356                         $$ = dispatch1(var_ref, $1);
10357                     %*/
10358                     }
10359     break;
10360 
10361   case 519:
10362 
10363 /* Line 1806 of yacc.c  */
10364 #line 4368 "parse.y"
10365     {
10366                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10367                     /*%%%*/
10368                     /*%
10369                         $$ = dispatch1(var_field, $$);
10370                     %*/
10371                     }
10372     break;
10373 
10374   case 520:
10375 
10376 /* Line 1806 of yacc.c  */
10377 #line 4376 "parse.y"
10378     {
10379                         (yyval.node) = assignable((yyvsp[(1) - (1)].id), 0);
10380                     /*%%%*/
10381                     /*%
10382                         $$ = dispatch1(var_field, $$);
10383                     %*/
10384                     }
10385     break;
10386 
10387   case 523:
10388 
10389 /* Line 1806 of yacc.c  */
10390 #line 4390 "parse.y"
10391     {
10392                     /*%%%*/
10393                         (yyval.node) = 0;
10394                     /*%
10395                         $$ = Qnil;
10396                     %*/
10397                     }
10398     break;
10399 
10400   case 524:
10401 
10402 /* Line 1806 of yacc.c  */
10403 #line 4398 "parse.y"
10404     {
10405                         lex_state = EXPR_BEG;
10406                         command_start = TRUE;
10407                     }
10408     break;
10409 
10410   case 525:
10411 
10412 /* Line 1806 of yacc.c  */
10413 #line 4403 "parse.y"
10414     {
10415                         (yyval.node) = (yyvsp[(3) - (4)].node);
10416                     }
10417     break;
10418 
10419   case 526:
10420 
10421 /* Line 1806 of yacc.c  */
10422 #line 4407 "parse.y"
10423     {
10424                     /*%%%*/
10425                         yyerrok;
10426                         (yyval.node) = 0;
10427                     /*%
10428                         yyerrok;
10429                         $$ = Qnil;
10430                     %*/
10431                     }
10432     break;
10433 
10434   case 527:
10435 
10436 /* Line 1806 of yacc.c  */
10437 #line 4419 "parse.y"
10438     {
10439                     /*%%%*/
10440                         (yyval.node) = (yyvsp[(2) - (3)].node);
10441                     /*%
10442                         $$ = dispatch1(paren, $2);
10443                     %*/
10444                         lex_state = EXPR_BEG;
10445                         command_start = TRUE;
10446                     }
10447     break;
10448 
10449   case 528:
10450 
10451 /* Line 1806 of yacc.c  */
10452 #line 4429 "parse.y"
10453     {
10454                         (yyval.node) = (yyvsp[(1) - (2)].node);
10455                         lex_state = EXPR_BEG;
10456                         command_start = TRUE;
10457                     }
10458     break;
10459 
10460   case 529:
10461 
10462 /* Line 1806 of yacc.c  */
10463 #line 4437 "parse.y"
10464     {
10465                         (yyval.node) = new_args_tail((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), (yyvsp[(4) - (4)].id));
10466                     }
10467     break;
10468 
10469   case 530:
10470 
10471 /* Line 1806 of yacc.c  */
10472 #line 4441 "parse.y"
10473     {
10474                         (yyval.node) = new_args_tail((yyvsp[(1) - (2)].node), Qnone, (yyvsp[(2) - (2)].id));
10475                     }
10476     break;
10477 
10478   case 531:
10479 
10480 /* Line 1806 of yacc.c  */
10481 #line 4445 "parse.y"
10482     {
10483                         (yyval.node) = new_args_tail(Qnone, (yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].id));
10484                     }
10485     break;
10486 
10487   case 532:
10488 
10489 /* Line 1806 of yacc.c  */
10490 #line 4449 "parse.y"
10491     {
10492                         (yyval.node) = new_args_tail(Qnone, Qnone, (yyvsp[(1) - (1)].id));
10493                     }
10494     break;
10495 
10496   case 533:
10497 
10498 /* Line 1806 of yacc.c  */
10499 #line 4455 "parse.y"
10500     {
10501                         (yyval.node) = (yyvsp[(2) - (2)].node);
10502                     }
10503     break;
10504 
10505   case 534:
10506 
10507 /* Line 1806 of yacc.c  */
10508 #line 4459 "parse.y"
10509     {
10510                         (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10511                     }
10512     break;
10513 
10514   case 535:
10515 
10516 /* Line 1806 of yacc.c  */
10517 #line 4465 "parse.y"
10518     {
10519                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), (yyvsp[(5) - (6)].id), Qnone, (yyvsp[(6) - (6)].node));
10520                     }
10521     break;
10522 
10523   case 536:
10524 
10525 /* Line 1806 of yacc.c  */
10526 #line 4469 "parse.y"
10527     {
10528                         (yyval.node) = new_args((yyvsp[(1) - (8)].node), (yyvsp[(3) - (8)].node), (yyvsp[(5) - (8)].id), (yyvsp[(7) - (8)].node), (yyvsp[(8) - (8)].node));
10529                     }
10530     break;
10531 
10532   case 537:
10533 
10534 /* Line 1806 of yacc.c  */
10535 #line 4473 "parse.y"
10536     {
10537                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].node), Qnone, Qnone, (yyvsp[(4) - (4)].node));
10538                     }
10539     break;
10540 
10541   case 538:
10542 
10543 /* Line 1806 of yacc.c  */
10544 #line 4477 "parse.y"
10545     {
10546                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].node), Qnone, (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10547                     }
10548     break;
10549 
10550   case 539:
10551 
10552 /* Line 1806 of yacc.c  */
10553 #line 4481 "parse.y"
10554     {
10555                         (yyval.node) = new_args((yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10556                     }
10557     break;
10558 
10559   case 540:
10560 
10561 /* Line 1806 of yacc.c  */
10562 #line 4485 "parse.y"
10563     {
10564                         (yyval.node) = new_args((yyvsp[(1) - (6)].node), Qnone, (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10565                     }
10566     break;
10567 
10568   case 541:
10569 
10570 /* Line 1806 of yacc.c  */
10571 #line 4489 "parse.y"
10572     {
10573                         (yyval.node) = new_args((yyvsp[(1) - (2)].node), Qnone, Qnone, Qnone, (yyvsp[(2) - (2)].node));
10574                     }
10575     break;
10576 
10577   case 542:
10578 
10579 /* Line 1806 of yacc.c  */
10580 #line 4493 "parse.y"
10581     {
10582                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), (yyvsp[(3) - (4)].id), Qnone, (yyvsp[(4) - (4)].node));
10583                     }
10584     break;
10585 
10586   case 543:
10587 
10588 /* Line 1806 of yacc.c  */
10589 #line 4497 "parse.y"
10590     {
10591                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (6)].node), (yyvsp[(3) - (6)].id), (yyvsp[(5) - (6)].node), (yyvsp[(6) - (6)].node));
10592                     }
10593     break;
10594 
10595   case 544:
10596 
10597 /* Line 1806 of yacc.c  */
10598 #line 4501 "parse.y"
10599     {
10600                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (2)].node), Qnone, Qnone, (yyvsp[(2) - (2)].node));
10601                     }
10602     break;
10603 
10604   case 545:
10605 
10606 /* Line 1806 of yacc.c  */
10607 #line 4505 "parse.y"
10608     {
10609                         (yyval.node) = new_args(Qnone, (yyvsp[(1) - (4)].node), Qnone, (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10610                     }
10611     break;
10612 
10613   case 546:
10614 
10615 /* Line 1806 of yacc.c  */
10616 #line 4509 "parse.y"
10617     {
10618                         (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (2)].id), Qnone, (yyvsp[(2) - (2)].node));
10619                     }
10620     break;
10621 
10622   case 547:
10623 
10624 /* Line 1806 of yacc.c  */
10625 #line 4513 "parse.y"
10626     {
10627                         (yyval.node) = new_args(Qnone, Qnone, (yyvsp[(1) - (4)].id), (yyvsp[(3) - (4)].node), (yyvsp[(4) - (4)].node));
10628                     }
10629     break;
10630 
10631   case 548:
10632 
10633 /* Line 1806 of yacc.c  */
10634 #line 4517 "parse.y"
10635     {
10636                         (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyvsp[(1) - (1)].node));
10637                     }
10638     break;
10639 
10640   case 549:
10641 
10642 /* Line 1806 of yacc.c  */
10643 #line 4521 "parse.y"
10644     {
10645                         (yyval.node) = new_args_tail(Qnone, Qnone, Qnone);
10646                         (yyval.node) = new_args(Qnone, Qnone, Qnone, Qnone, (yyval.node));
10647                     }
10648     break;
10649 
10650   case 550:
10651 
10652 /* Line 1806 of yacc.c  */
10653 #line 4528 "parse.y"
10654     {
10655                     /*%%%*/
10656                         yyerror("formal argument cannot be a constant");
10657                         (yyval.id) = 0;
10658                     /*%
10659                         $$ = dispatch1(param_error, $1);
10660                     %*/
10661                     }
10662     break;
10663 
10664   case 551:
10665 
10666 /* Line 1806 of yacc.c  */
10667 #line 4537 "parse.y"
10668     {
10669                     /*%%%*/
10670                         yyerror("formal argument cannot be an instance variable");
10671                         (yyval.id) = 0;
10672                     /*%
10673                         $$ = dispatch1(param_error, $1);
10674                     %*/
10675                     }
10676     break;
10677 
10678   case 552:
10679 
10680 /* Line 1806 of yacc.c  */
10681 #line 4546 "parse.y"
10682     {
10683                     /*%%%*/
10684                         yyerror("formal argument cannot be a global variable");
10685                         (yyval.id) = 0;
10686                     /*%
10687                         $$ = dispatch1(param_error, $1);
10688                     %*/
10689                     }
10690     break;
10691 
10692   case 553:
10693 
10694 /* Line 1806 of yacc.c  */
10695 #line 4555 "parse.y"
10696     {
10697                     /*%%%*/
10698                         yyerror("formal argument cannot be a class variable");
10699                         (yyval.id) = 0;
10700                     /*%
10701                         $$ = dispatch1(param_error, $1);
10702                     %*/
10703                     }
10704     break;
10705 
10706   case 555:
10707 
10708 /* Line 1806 of yacc.c  */
10709 #line 4567 "parse.y"
10710     {
10711                         formal_argument(get_id((yyvsp[(1) - (1)].id)));
10712                         (yyval.id) = (yyvsp[(1) - (1)].id);
10713                     }
10714     break;
10715 
10716   case 556:
10717 
10718 /* Line 1806 of yacc.c  */
10719 #line 4574 "parse.y"
10720     {
10721                         arg_var(get_id((yyvsp[(1) - (1)].id)));
10722                     /*%%%*/
10723                         (yyval.node) = NEW_ARGS_AUX((yyvsp[(1) - (1)].id), 1);
10724                     /*%
10725                         $$ = get_value($1);
10726                     %*/
10727                     }
10728     break;
10729 
10730   case 557:
10731 
10732 /* Line 1806 of yacc.c  */
10733 #line 4583 "parse.y"
10734     {
10735                         ID tid = internal_id();
10736                         arg_var(tid);
10737                     /*%%%*/
10738                         if (dyna_in_block()) {
10739                             (yyvsp[(2) - (3)].node)->nd_value = NEW_DVAR(tid);
10740                         }
10741                         else {
10742                             (yyvsp[(2) - (3)].node)->nd_value = NEW_LVAR(tid);
10743                         }
10744                         (yyval.node) = NEW_ARGS_AUX(tid, 1);
10745                         (yyval.node)->nd_next = (yyvsp[(2) - (3)].node);
10746                     /*%
10747                         $$ = dispatch1(mlhs_paren, $2);
10748                     %*/
10749                     }
10750     break;
10751 
10752   case 559:
10753 
10754 /* Line 1806 of yacc.c  */
10755 #line 4609 "parse.y"
10756     {
10757                     /*%%%*/
10758                         (yyval.node) = (yyvsp[(1) - (3)].node);
10759                         (yyval.node)->nd_plen++;
10760                         (yyval.node)->nd_next = block_append((yyval.node)->nd_next, (yyvsp[(3) - (3)].node)->nd_next);
10761                         rb_gc_force_recycle((VALUE)(yyvsp[(3) - (3)].node));
10762                     /*%
10763                         $$ = rb_ary_push($1, $3);
10764                     %*/
10765                     }
10766     break;
10767 
10768   case 560:
10769 
10770 /* Line 1806 of yacc.c  */
10771 #line 4622 "parse.y"
10772     {
10773                         arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id))));
10774                         (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10775                     /*%%%*/
10776                         (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10777                     /*%
10778                         $$ = rb_assoc_new($$, $2);
10779                     %*/
10780                     }
10781     break;
10782 
10783   case 561:
10784 
10785 /* Line 1806 of yacc.c  */
10786 #line 4634 "parse.y"
10787     {
10788                         arg_var(formal_argument(get_id((yyvsp[(1) - (2)].id))));
10789                         (yyval.node) = assignable((yyvsp[(1) - (2)].id), (yyvsp[(2) - (2)].node));
10790                     /*%%%*/
10791                         (yyval.node) = NEW_KW_ARG(0, (yyval.node));
10792                     /*%
10793                         $$ = rb_assoc_new($$, $2);
10794                     %*/
10795                     }
10796     break;
10797 
10798   case 562:
10799 
10800 /* Line 1806 of yacc.c  */
10801 #line 4646 "parse.y"
10802     {
10803                     /*%%%*/
10804                         (yyval.node) = (yyvsp[(1) - (1)].node);
10805                     /*%
10806                         $$ = rb_ary_new3(1, $1);
10807                     %*/
10808                     }
10809     break;
10810 
10811   case 563:
10812 
10813 /* Line 1806 of yacc.c  */
10814 #line 4654 "parse.y"
10815     {
10816                     /*%%%*/
10817                         NODE *kws = (yyvsp[(1) - (3)].node);
10818 
10819                         while (kws->nd_next) {
10820                             kws = kws->nd_next;
10821                         }
10822                         kws->nd_next = (yyvsp[(3) - (3)].node);
10823                         (yyval.node) = (yyvsp[(1) - (3)].node);
10824                     /*%
10825                         $$ = rb_ary_push($1, $3);
10826                     %*/
10827                     }
10828     break;
10829 
10830   case 564:
10831 
10832 /* Line 1806 of yacc.c  */
10833 #line 4671 "parse.y"
10834     {
10835                     /*%%%*/
10836                         (yyval.node) = (yyvsp[(1) - (1)].node);
10837                     /*%
10838                         $$ = rb_ary_new3(1, $1);
10839                     %*/
10840                     }
10841     break;
10842 
10843   case 565:
10844 
10845 /* Line 1806 of yacc.c  */
10846 #line 4679 "parse.y"
10847     {
10848                     /*%%%*/
10849                         NODE *kws = (yyvsp[(1) - (3)].node);
10850 
10851                         while (kws->nd_next) {
10852                             kws = kws->nd_next;
10853                         }
10854                         kws->nd_next = (yyvsp[(3) - (3)].node);
10855                         (yyval.node) = (yyvsp[(1) - (3)].node);
10856                     /*%
10857                         $$ = rb_ary_push($1, $3);
10858                     %*/
10859                     }
10860     break;
10861 
10862   case 568:
10863 
10864 /* Line 1806 of yacc.c  */
10865 #line 4699 "parse.y"
10866     {
10867                         shadowing_lvar(get_id((yyvsp[(2) - (2)].id)));
10868                         (yyval.id) = (yyvsp[(2) - (2)].id);
10869                     }
10870     break;
10871 
10872   case 569:
10873 
10874 /* Line 1806 of yacc.c  */
10875 #line 4704 "parse.y"
10876     {
10877                         (yyval.id) = internal_id();
10878                     }
10879     break;
10880 
10881   case 570:
10882 
10883 /* Line 1806 of yacc.c  */
10884 #line 4710 "parse.y"
10885     {
10886                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10887                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10888                     /*%%%*/
10889                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10890                     /*%
10891                         $$ = rb_assoc_new($$, $3);
10892                     %*/
10893                     }
10894     break;
10895 
10896   case 571:
10897 
10898 /* Line 1806 of yacc.c  */
10899 #line 4722 "parse.y"
10900     {
10901                         arg_var(formal_argument(get_id((yyvsp[(1) - (3)].id))));
10902                         (yyval.node) = assignable((yyvsp[(1) - (3)].id), (yyvsp[(3) - (3)].node));
10903                     /*%%%*/
10904                         (yyval.node) = NEW_OPT_ARG(0, (yyval.node));
10905                     /*%
10906                         $$ = rb_assoc_new($$, $3);
10907                     %*/
10908                     }
10909     break;
10910 
10911   case 572:
10912 
10913 /* Line 1806 of yacc.c  */
10914 #line 4734 "parse.y"
10915     {
10916                     /*%%%*/
10917                         (yyval.node) = (yyvsp[(1) - (1)].node);
10918                     /*%
10919                         $$ = rb_ary_new3(1, $1);
10920                     %*/
10921                     }
10922     break;
10923 
10924   case 573:
10925 
10926 /* Line 1806 of yacc.c  */
10927 #line 4742 "parse.y"
10928     {
10929                     /*%%%*/
10930                         NODE *opts = (yyvsp[(1) - (3)].node);
10931 
10932                         while (opts->nd_next) {
10933                             opts = opts->nd_next;
10934                         }
10935                         opts->nd_next = (yyvsp[(3) - (3)].node);
10936                         (yyval.node) = (yyvsp[(1) - (3)].node);
10937                     /*%
10938                         $$ = rb_ary_push($1, $3);
10939                     %*/
10940                     }
10941     break;
10942 
10943   case 574:
10944 
10945 /* Line 1806 of yacc.c  */
10946 #line 4758 "parse.y"
10947     {
10948                     /*%%%*/
10949                         (yyval.node) = (yyvsp[(1) - (1)].node);
10950                     /*%
10951                         $$ = rb_ary_new3(1, $1);
10952                     %*/
10953                     }
10954     break;
10955 
10956   case 575:
10957 
10958 /* Line 1806 of yacc.c  */
10959 #line 4766 "parse.y"
10960     {
10961                     /*%%%*/
10962                         NODE *opts = (yyvsp[(1) - (3)].node);
10963 
10964                         while (opts->nd_next) {
10965                             opts = opts->nd_next;
10966                         }
10967                         opts->nd_next = (yyvsp[(3) - (3)].node);
10968                         (yyval.node) = (yyvsp[(1) - (3)].node);
10969                     /*%
10970                         $$ = rb_ary_push($1, $3);
10971                     %*/
10972                     }
10973     break;
10974 
10975   case 578:
10976 
10977 /* Line 1806 of yacc.c  */
10978 #line 4786 "parse.y"
10979     {
10980                     /*%%%*/
10981                         if (!is_local_id((yyvsp[(2) - (2)].id)))
10982                             yyerror("rest argument must be local variable");
10983                     /*% %*/
10984                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
10985                     /*%%%*/
10986                         (yyval.id) = (yyvsp[(2) - (2)].id);
10987                     /*%
10988                         $$ = dispatch1(rest_param, $2);
10989                     %*/
10990                     }
10991     break;
10992 
10993   case 579:
10994 
10995 /* Line 1806 of yacc.c  */
10996 #line 4799 "parse.y"
10997     {
10998                     /*%%%*/
10999                         (yyval.id) = internal_id();
11000                         arg_var((yyval.id));
11001                     /*%
11002                         $$ = dispatch1(rest_param, Qnil);
11003                     %*/
11004                     }
11005     break;
11006 
11007   case 582:
11008 
11009 /* Line 1806 of yacc.c  */
11010 #line 4814 "parse.y"
11011     {
11012                     /*%%%*/
11013                         if (!is_local_id((yyvsp[(2) - (2)].id)))
11014                             yyerror("block argument must be local variable");
11015                         else if (!dyna_in_block() && local_id((yyvsp[(2) - (2)].id)))
11016                             yyerror("duplicated block argument name");
11017                     /*% %*/
11018                         arg_var(shadowing_lvar(get_id((yyvsp[(2) - (2)].id))));
11019                     /*%%%*/
11020                         (yyval.id) = (yyvsp[(2) - (2)].id);
11021                     /*%
11022                         $$ = dispatch1(blockarg, $2);
11023                     %*/
11024                     }
11025     break;
11026 
11027   case 583:
11028 
11029 /* Line 1806 of yacc.c  */
11030 #line 4831 "parse.y"
11031     {
11032                         (yyval.id) = (yyvsp[(2) - (2)].id);
11033                     }
11034     break;
11035 
11036   case 584:
11037 
11038 /* Line 1806 of yacc.c  */
11039 #line 4835 "parse.y"
11040     {
11041                     /*%%%*/
11042                         (yyval.id) = 0;
11043                     /*%
11044                         $$ = Qundef;
11045                     %*/
11046                     }
11047     break;
11048 
11049   case 585:
11050 
11051 /* Line 1806 of yacc.c  */
11052 #line 4845 "parse.y"
11053     {
11054                     /*%%%*/
11055                         value_expr((yyvsp[(1) - (1)].node));
11056                         (yyval.node) = (yyvsp[(1) - (1)].node);
11057                         if (!(yyval.node)) (yyval.node) = NEW_NIL();
11058                     /*%
11059                         $$ = $1;
11060                     %*/
11061                     }
11062     break;
11063 
11064   case 586:
11065 
11066 /* Line 1806 of yacc.c  */
11067 #line 4854 "parse.y"
11068     {lex_state = EXPR_BEG;}
11069     break;
11070 
11071   case 587:
11072 
11073 /* Line 1806 of yacc.c  */
11074 #line 4855 "parse.y"
11075     {
11076                     /*%%%*/
11077                         if ((yyvsp[(3) - (4)].node) == 0) {
11078                             yyerror("can't define singleton method for ().");
11079                         }
11080                         else {
11081                             switch (nd_type((yyvsp[(3) - (4)].node))) {
11082                               case NODE_STR:
11083                               case NODE_DSTR:
11084                               case NODE_XSTR:
11085                               case NODE_DXSTR:
11086                               case NODE_DREGX:
11087                               case NODE_LIT:
11088                               case NODE_ARRAY:
11089                               case NODE_ZARRAY:
11090                                 yyerror("can't define singleton method for literals");
11091                               default:
11092                                 value_expr((yyvsp[(3) - (4)].node));
11093                                 break;
11094                             }
11095                         }
11096                         (yyval.node) = (yyvsp[(3) - (4)].node);
11097                     /*%
11098                         $$ = dispatch1(paren, $3);
11099                     %*/
11100                     }
11101     break;
11102 
11103   case 589:
11104 
11105 /* Line 1806 of yacc.c  */
11106 #line 4885 "parse.y"
11107     {
11108                     /*%%%*/
11109                         (yyval.node) = (yyvsp[(1) - (2)].node);
11110                     /*%
11111                         $$ = dispatch1(assoclist_from_args, $1);
11112                     %*/
11113                     }
11114     break;
11115 
11116   case 591:
11117 
11118 /* Line 1806 of yacc.c  */
11119 #line 4902 "parse.y"
11120     {
11121                     /*%%%*/
11122                         (yyval.node) = list_concat((yyvsp[(1) - (3)].node), (yyvsp[(3) - (3)].node));
11123                     /*%
11124                         $$ = rb_ary_push($1, $3);
11125                     %*/
11126                     }
11127     break;
11128 
11129   case 592:
11130 
11131 /* Line 1806 of yacc.c  */
11132 #line 4912 "parse.y"
11133     {
11134                     /*%%%*/
11135                         (yyval.node) = list_append(NEW_LIST((yyvsp[(1) - (3)].node)), (yyvsp[(3) - (3)].node));
11136                     /*%
11137                         $$ = dispatch2(assoc_new, $1, $3);
11138                     %*/
11139                     }
11140     break;
11141 
11142   case 593:
11143 
11144 /* Line 1806 of yacc.c  */
11145 #line 4920 "parse.y"
11146     {
11147                     /*%%%*/
11148                         (yyval.node) = list_append(NEW_LIST(NEW_LIT(ID2SYM((yyvsp[(1) - (2)].id)))), (yyvsp[(2) - (2)].node));
11149                     /*%
11150                         $$ = dispatch2(assoc_new, $1, $2);
11151                     %*/
11152                     }
11153     break;
11154 
11155   case 594:
11156 
11157 /* Line 1806 of yacc.c  */
11158 #line 4928 "parse.y"
11159     {
11160                     /*%%%*/
11161                         (yyval.node) = list_append(NEW_LIST(0), (yyvsp[(2) - (2)].node));
11162                     /*%
11163                         $$ = dispatch1(assoc_splat, $2);
11164                     %*/
11165                     }
11166     break;
11167 
11168   case 616:
11169 
11170 /* Line 1806 of yacc.c  */
11171 #line 4986 "parse.y"
11172     {yyerrok;}
11173     break;
11174 
11175   case 619:
11176 
11177 /* Line 1806 of yacc.c  */
11178 #line 4991 "parse.y"
11179     {yyerrok;}
11180     break;
11181 
11182   case 620:
11183 
11184 /* Line 1806 of yacc.c  */
11185 #line 4995 "parse.y"
11186     {
11187                     /*%%%*/
11188                         (yyval.node) = 0;
11189                     /*%
11190                         $$ = Qundef;
11191                     %*/
11192                     }
11193     break;
11194 
11195 
11196 
11197 /* Line 1806 of yacc.c  */
11198 #line 11197 "parse.c"
11199       default: break;
11200     }
11201   /* User semantic actions sometimes alter yychar, and that requires
11202      that yytoken be updated with the new translation.  We take the
11203      approach of translating immediately before every use of yytoken.
11204      One alternative is translating here after every semantic action,
11205      but that translation would be missed if the semantic action invokes
11206      YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
11207      if it invokes YYBACKUP.  In the case of YYABORT or YYACCEPT, an
11208      incorrect destructor might then be invoked immediately.  In the
11209      case of YYERROR or YYBACKUP, subsequent parser actions might lead
11210      to an incorrect destructor call or verbose syntax error message
11211      before the lookahead is translated.  */
11212   YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
11213 
11214   YYPOPSTACK (yylen);
11215   yylen = 0;
11216   YY_STACK_PRINT (yyss, yyssp);
11217 
11218   *++yyvsp = yyval;
11219 
11220   /* Now `shift' the result of the reduction.  Determine what state
11221      that goes to, based on the state we popped back to and the rule
11222      number reduced by.  */
11223 
11224   yyn = yyr1[yyn];
11225 
11226   yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
11227   if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
11228     yystate = yytable[yystate];
11229   else
11230     yystate = yydefgoto[yyn - YYNTOKENS];
11231 
11232   goto yynewstate;
11233 
11234 
11235 /*------------------------------------.
11236 | yyerrlab -- here on detecting error |
11237 `------------------------------------*/
11238 yyerrlab:
11239   /* Make sure we have latest lookahead translation.  See comments at
11240      user semantic actions for why this is necessary.  */
11241   yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
11242 
11243   /* If not already recovering from an error, report this error.  */
11244   if (!yyerrstatus)
11245     {
11246       ++yynerrs;
11247 #if ! YYERROR_VERBOSE
11248       parser_yyerror (parser, YY_("syntax error"));
11249 #else
11250 # define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
11251                                         yyssp, yytoken)
11252       {
11253         char const *yymsgp = YY_("syntax error");
11254         int yysyntax_error_status;
11255         yysyntax_error_status = YYSYNTAX_ERROR;
11256         if (yysyntax_error_status == 0)
11257           yymsgp = yymsg;
11258         else if (yysyntax_error_status == 1)
11259           {
11260             if (yymsg != yymsgbuf)
11261               YYSTACK_FREE (yymsg);
11262             yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
11263             if (!yymsg)
11264               {
11265                 yymsg = yymsgbuf;
11266                 yymsg_alloc = sizeof yymsgbuf;
11267                 yysyntax_error_status = 2;
11268               }
11269             else
11270               {
11271                 yysyntax_error_status = YYSYNTAX_ERROR;
11272                 yymsgp = yymsg;
11273               }
11274           }
11275         parser_yyerror (parser, yymsgp);
11276         if (yysyntax_error_status == 2)
11277           goto yyexhaustedlab;
11278       }
11279 # undef YYSYNTAX_ERROR
11280 #endif
11281     }
11282 
11283 
11284 
11285   if (yyerrstatus == 3)
11286     {
11287       /* If just tried and failed to reuse lookahead token after an
11288          error, discard it.  */
11289 
11290       if (yychar <= YYEOF)
11291         {
11292           /* Return failure if at end of input.  */
11293           if (yychar == YYEOF)
11294             YYABORT;
11295         }
11296       else
11297         {
11298           yydestruct ("Error: discarding",
11299                       yytoken, &yylval, parser);
11300           yychar = YYEMPTY;
11301         }
11302     }
11303 
11304   /* Else will try to reuse lookahead token after shifting the error
11305      token.  */
11306   goto yyerrlab1;
11307 
11308 
11309 /*---------------------------------------------------.
11310 | yyerrorlab -- error raised explicitly by YYERROR.  |
11311 `---------------------------------------------------*/
11312 yyerrorlab:
11313 
11314   /* Pacify compilers like GCC when the user code never invokes
11315      YYERROR and the label yyerrorlab therefore never appears in user
11316      code.  */
11317   if (/*CONSTCOND*/ 0)
11318      goto yyerrorlab;
11319 
11320   /* Do not reclaim the symbols of the rule which action triggered
11321      this YYERROR.  */
11322   YYPOPSTACK (yylen);
11323   yylen = 0;
11324   YY_STACK_PRINT (yyss, yyssp);
11325   yystate = *yyssp;
11326   goto yyerrlab1;
11327 
11328 
11329 /*-------------------------------------------------------------.
11330 | yyerrlab1 -- common code for both syntax error and YYERROR.  |
11331 `-------------------------------------------------------------*/
11332 yyerrlab1:
11333   yyerrstatus = 3;      /* Each real token shifted decrements this.  */
11334 
11335   for (;;)
11336     {
11337       yyn = yypact[yystate];
11338       if (!yypact_value_is_default (yyn))
11339         {
11340           yyn += YYTERROR;
11341           if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
11342             {
11343               yyn = yytable[yyn];
11344               if (0 < yyn)
11345                 break;
11346             }
11347         }
11348 
11349       /* Pop the current state because it cannot handle the error token.  */
11350       if (yyssp == yyss)
11351         YYABORT;
11352 
11353 
11354       yydestruct ("Error: popping",
11355                   yystos[yystate], yyvsp, parser);
11356       YYPOPSTACK (1);
11357       yystate = *yyssp;
11358       YY_STACK_PRINT (yyss, yyssp);
11359     }
11360 
11361   *++yyvsp = yylval;
11362 
11363 
11364   /* Shift the error token.  */
11365   YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
11366 
11367   yystate = yyn;
11368   goto yynewstate;
11369 
11370 
11371 /*-------------------------------------.
11372 | yyacceptlab -- YYACCEPT comes here.  |
11373 `-------------------------------------*/
11374 yyacceptlab:
11375   yyresult = 0;
11376   goto yyreturn;
11377 
11378 /*-----------------------------------.
11379 | yyabortlab -- YYABORT comes here.  |
11380 `-----------------------------------*/
11381 yyabortlab:
11382   yyresult = 1;
11383   goto yyreturn;
11384 
11385 #if !defined(yyoverflow) || YYERROR_VERBOSE
11386 /*-------------------------------------------------.
11387 | yyexhaustedlab -- memory exhaustion comes here.  |
11388 `-------------------------------------------------*/
11389 yyexhaustedlab:
11390   parser_yyerror (parser, YY_("memory exhausted"));
11391   yyresult = 2;
11392   /* Fall through.  */
11393 #endif
11394 
11395 yyreturn:
11396   if (yychar != YYEMPTY)
11397     {
11398       /* Make sure we have latest lookahead translation.  See comments at
11399          user semantic actions for why this is necessary.  */
11400       yytoken = YYTRANSLATE (yychar);
11401       yydestruct ("Cleanup: discarding lookahead",
11402                   yytoken, &yylval, parser);
11403     }
11404   /* Do not reclaim the symbols of the rule which action triggered
11405      this YYABORT or YYACCEPT.  */
11406   YYPOPSTACK (yylen);
11407   YY_STACK_PRINT (yyss, yyssp);
11408   while (yyssp != yyss)
11409     {
11410       yydestruct ("Cleanup: popping",
11411                   yystos[*yyssp], yyvsp, parser);
11412       YYPOPSTACK (1);
11413     }
11414 #ifndef yyoverflow
11415   if (yyss != yyssa)
11416     YYSTACK_FREE (yyss);
11417 #endif
11418 #if YYERROR_VERBOSE
11419   if (yymsg != yymsgbuf)
11420     YYSTACK_FREE (yymsg);
11421 #endif
11422   /* Make sure YYID is used.  */
11423   return YYID (yyresult);
11424 }
11425 
11426 
11427 
11428 /* Line 2067 of yacc.c  */
11429 #line 5003 "parse.y"
11430 
11431 # undef parser
11432 # undef yylex
11433 # undef yylval
11434 # define yylval  (*((YYSTYPE*)(parser->parser_yylval)))
11435 
11436 static int parser_regx_options(struct parser_params*);
11437 static int parser_tokadd_string(struct parser_params*,int,int,int,long*,rb_encoding**);
11438 static void parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc);
11439 static int parser_parse_string(struct parser_params*,NODE*);
11440 static int parser_here_document(struct parser_params*,NODE*);
11441 
11442 
11443 # define nextc()                   parser_nextc(parser)
11444 # define pushback(c)               parser_pushback(parser, (c))
11445 # define newtok()                  parser_newtok(parser)
11446 # define tokspace(n)               parser_tokspace(parser, (n))
11447 # define tokadd(c)                 parser_tokadd(parser, (c))
11448 # define tok_hex(numlen)           parser_tok_hex(parser, (numlen))
11449 # define read_escape(flags,e)      parser_read_escape(parser, (flags), (e))
11450 # define tokadd_escape(e)          parser_tokadd_escape(parser, (e))
11451 # define regx_options()            parser_regx_options(parser)
11452 # define tokadd_string(f,t,p,n,e)  parser_tokadd_string(parser,(f),(t),(p),(n),(e))
11453 # define parse_string(n)           parser_parse_string(parser,(n))
11454 # define tokaddmbc(c, enc)         parser_tokaddmbc(parser, (c), (enc))
11455 # define here_document(n)          parser_here_document(parser,(n))
11456 # define heredoc_identifier()      parser_heredoc_identifier(parser)
11457 # define heredoc_restore(n)        parser_heredoc_restore(parser,(n))
11458 # define whole_match_p(e,l,i)      parser_whole_match_p(parser,(e),(l),(i))
11459 
11460 #ifndef RIPPER
11461 # define set_yylval_str(x) (yylval.node = NEW_STR(x))
11462 # define set_yylval_num(x) (yylval.num = (x))
11463 # define set_yylval_id(x)  (yylval.id = (x))
11464 # define set_yylval_name(x)  (yylval.id = (x))
11465 # define set_yylval_literal(x) (yylval.node = NEW_LIT(x))
11466 # define set_yylval_node(x) (yylval.node = (x))
11467 # define yylval_id() (yylval.id)
11468 #else
11469 static inline VALUE
11470 ripper_yylval_id(ID x)
11471 {
11472     return (VALUE)NEW_LASGN(x, ID2SYM(x));
11473 }
11474 # define set_yylval_str(x) (void)(x)
11475 # define set_yylval_num(x) (void)(x)
11476 # define set_yylval_id(x)  (void)(x)
11477 # define set_yylval_name(x) (void)(yylval.val = ripper_yylval_id(x))
11478 # define set_yylval_literal(x) (void)(x)
11479 # define set_yylval_node(x) (void)(x)
11480 # define yylval_id() yylval.id
11481 #endif
11482 
11483 #ifndef RIPPER
11484 #define ripper_flush(p) (void)(p)
11485 #else
11486 #define ripper_flush(p) ((p)->tokp = (p)->parser_lex_p)
11487 
11488 #define yylval_rval (*(RB_TYPE_P(yylval.val, T_NODE) ? &yylval.node->nd_rval : &yylval.val))
11489 
11490 static int
11491 ripper_has_scan_event(struct parser_params *parser)
11492 {
11493 
11494     if (lex_p < parser->tokp) rb_raise(rb_eRuntimeError, "lex_p < tokp");
11495     return lex_p > parser->tokp;
11496 }
11497 
11498 static VALUE
11499 ripper_scan_event_val(struct parser_params *parser, int t)
11500 {
11501     VALUE str = STR_NEW(parser->tokp, lex_p - parser->tokp);
11502     VALUE rval = ripper_dispatch1(parser, ripper_token2eventid(t), str);
11503     ripper_flush(parser);
11504     return rval;
11505 }
11506 
11507 static void
11508 ripper_dispatch_scan_event(struct parser_params *parser, int t)
11509 {
11510     if (!ripper_has_scan_event(parser)) return;
11511     yylval_rval = ripper_scan_event_val(parser, t);
11512 }
11513 
11514 static void
11515 ripper_dispatch_ignored_scan_event(struct parser_params *parser, int t)
11516 {
11517     if (!ripper_has_scan_event(parser)) return;
11518     (void)ripper_scan_event_val(parser, t);
11519 }
11520 
11521 static void
11522 ripper_dispatch_delayed_token(struct parser_params *parser, int t)
11523 {
11524     int saved_line = ruby_sourceline;
11525     const char *saved_tokp = parser->tokp;
11526 
11527     ruby_sourceline = parser->delayed_line;
11528     parser->tokp = lex_pbeg + parser->delayed_col;
11529     yylval_rval = ripper_dispatch1(parser, ripper_token2eventid(t), parser->delayed);
11530     parser->delayed = Qnil;
11531     ruby_sourceline = saved_line;
11532     parser->tokp = saved_tokp;
11533 }
11534 #endif /* RIPPER */
11535 
11536 #include "ruby/regex.h"
11537 #include "ruby/util.h"
11538 
11539 /* We remove any previous definition of `SIGN_EXTEND_CHAR',
11540    since ours (we hope) works properly with all combinations of
11541    machines, compilers, `char' and `unsigned char' argument types.
11542    (Per Bothner suggested the basic approach.)  */
11543 #undef SIGN_EXTEND_CHAR
11544 #if __STDC__
11545 # define SIGN_EXTEND_CHAR(c) ((signed char)(c))
11546 #else  /* not __STDC__ */
11547 /* As in Harbison and Steele.  */
11548 # define SIGN_EXTEND_CHAR(c) ((((unsigned char)(c)) ^ 128) - 128)
11549 #endif
11550 
11551 #define parser_encoding_name()  (current_enc->name)
11552 #define parser_mbclen()  mbclen((lex_p-1),lex_pend,current_enc)
11553 #define parser_precise_mbclen()  rb_enc_precise_mbclen((lex_p-1),lex_pend,current_enc)
11554 #define is_identchar(p,e,enc) (rb_enc_isalnum(*(p),(enc)) || (*(p)) == '_' || !ISASCII(*(p)))
11555 #define parser_is_identchar() (!parser->eofp && is_identchar((lex_p-1),lex_pend,current_enc))
11556 
11557 #define parser_isascii() ISASCII(*(lex_p-1))
11558 
11559 #ifndef RIPPER
11560 static int
11561 token_info_get_column(struct parser_params *parser, const char *token)
11562 {
11563     int column = 1;
11564     const char *p, *pend = lex_p - strlen(token);
11565     for (p = lex_pbeg; p < pend; p++) {
11566         if (*p == '\t') {
11567             column = (((column - 1) / 8) + 1) * 8;
11568         }
11569         column++;
11570     }
11571     return column;
11572 }
11573 
11574 static int
11575 token_info_has_nonspaces(struct parser_params *parser, const char *token)
11576 {
11577     const char *p, *pend = lex_p - strlen(token);
11578     for (p = lex_pbeg; p < pend; p++) {
11579         if (*p != ' ' && *p != '\t') {
11580             return 1;
11581         }
11582     }
11583     return 0;
11584 }
11585 
11586 #undef token_info_push
11587 static void
11588 token_info_push(struct parser_params *parser, const char *token)
11589 {
11590     token_info *ptinfo;
11591 
11592     if (!parser->parser_token_info_enabled) return;
11593     ptinfo = ALLOC(token_info);
11594     ptinfo->token = token;
11595     ptinfo->linenum = ruby_sourceline;
11596     ptinfo->column = token_info_get_column(parser, token);
11597     ptinfo->nonspc = token_info_has_nonspaces(parser, token);
11598     ptinfo->next = parser->parser_token_info;
11599 
11600     parser->parser_token_info = ptinfo;
11601 }
11602 
11603 #undef token_info_pop
11604 static void
11605 token_info_pop(struct parser_params *parser, const char *token)
11606 {
11607     int linenum;
11608     token_info *ptinfo = parser->parser_token_info;
11609 
11610     if (!ptinfo) return;
11611     parser->parser_token_info = ptinfo->next;
11612     if (token_info_get_column(parser, token) == ptinfo->column) { /* OK */
11613         goto finish;
11614     }
11615     linenum = ruby_sourceline;
11616     if (linenum == ptinfo->linenum) { /* SKIP */
11617         goto finish;
11618     }
11619     if (token_info_has_nonspaces(parser, token) || ptinfo->nonspc) { /* SKIP */
11620         goto finish;
11621     }
11622     if (parser->parser_token_info_enabled) {
11623         rb_compile_warn(ruby_sourcefile, linenum,
11624                         "mismatched indentations at '%s' with '%s' at %d",
11625                         token, ptinfo->token, ptinfo->linenum);
11626     }
11627 
11628   finish:
11629     xfree(ptinfo);
11630 }
11631 #endif  /* RIPPER */
11632 
11633 static int
11634 parser_yyerror(struct parser_params *parser, const char *msg)
11635 {
11636 #ifndef RIPPER
11637     const int max_line_margin = 30;
11638     const char *p, *pe;
11639     char *buf;
11640     long len;
11641     int i;
11642 
11643     compile_error(PARSER_ARG "%s", msg);
11644     p = lex_p;
11645     while (lex_pbeg <= p) {
11646         if (*p == '\n') break;
11647         p--;
11648     }
11649     p++;
11650 
11651     pe = lex_p;
11652     while (pe < lex_pend) {
11653         if (*pe == '\n') break;
11654         pe++;
11655     }
11656 
11657     len = pe - p;
11658     if (len > 4) {
11659         char *p2;
11660         const char *pre = "", *post = "";
11661 
11662         if (len > max_line_margin * 2 + 10) {
11663             if (lex_p - p > max_line_margin) {
11664                 p = rb_enc_prev_char(p, lex_p - max_line_margin, pe, rb_enc_get(lex_lastline));
11665                 pre = "...";
11666             }
11667             if (pe - lex_p > max_line_margin) {
11668                 pe = rb_enc_prev_char(lex_p, lex_p + max_line_margin, pe, rb_enc_get(lex_lastline));
11669                 post = "...";
11670             }
11671             len = pe - p;
11672         }
11673         buf = ALLOCA_N(char, len+2);
11674         MEMCPY(buf, p, char, len);
11675         buf[len] = '\0';
11676         rb_compile_error_with_enc(NULL, 0, (void *)current_enc, "%s%s%s", pre, buf, post);
11677 
11678         i = (int)(lex_p - p);
11679         p2 = buf; pe = buf + len;
11680 
11681         while (p2 < pe) {
11682             if (*p2 != '\t') *p2 = ' ';
11683             p2++;
11684         }
11685         buf[i] = '^';
11686         buf[i+1] = '\0';
11687         rb_compile_error_append("%s%s", pre, buf);
11688     }
11689 #else
11690     dispatch1(parse_error, STR_NEW2(msg));
11691 #endif /* !RIPPER */
11692     return 0;
11693 }
11694 
11695 static void parser_prepare(struct parser_params *parser);
11696 
11697 #ifndef RIPPER
11698 static VALUE
11699 debug_lines(VALUE fname)
11700 {
11701     ID script_lines;
11702     CONST_ID(script_lines, "SCRIPT_LINES__");
11703     if (rb_const_defined_at(rb_cObject, script_lines)) {
11704         VALUE hash = rb_const_get_at(rb_cObject, script_lines);
11705         if (RB_TYPE_P(hash, T_HASH)) {
11706             VALUE lines = rb_ary_new();
11707             rb_hash_aset(hash, fname, lines);
11708             return lines;
11709         }
11710     }
11711     return 0;
11712 }
11713 
11714 static VALUE
11715 coverage(VALUE fname, int n)
11716 {
11717     VALUE coverages = rb_get_coverages();
11718     if (RTEST(coverages) && RBASIC(coverages)->klass == 0) {
11719         VALUE lines = rb_ary_new2(n);
11720         int i;
11721         RBASIC(lines)->klass = 0;
11722         for (i = 0; i < n; i++) RARRAY_PTR(lines)[i] = Qnil;
11723         RARRAY(lines)->as.heap.len = n;
11724         rb_hash_aset(coverages, fname, lines);
11725         return lines;
11726     }
11727     return 0;
11728 }
11729 
11730 static int
11731 e_option_supplied(struct parser_params *parser)
11732 {
11733     return strcmp(ruby_sourcefile, "-e") == 0;
11734 }
11735 
11736 static VALUE
11737 yycompile0(VALUE arg)
11738 {
11739     int n;
11740     NODE *tree;
11741     struct parser_params *parser = (struct parser_params *)arg;
11742 
11743     if (!compile_for_eval && rb_safe_level() == 0) {
11744         ruby_debug_lines = debug_lines(ruby_sourcefile_string);
11745         if (ruby_debug_lines && ruby_sourceline > 0) {
11746             VALUE str = STR_NEW0();
11747             n = ruby_sourceline;
11748             do {
11749                 rb_ary_push(ruby_debug_lines, str);
11750             } while (--n);
11751         }
11752 
11753         if (!e_option_supplied(parser)) {
11754             ruby_coverage = coverage(ruby_sourcefile_string, ruby_sourceline);
11755         }
11756     }
11757 
11758     parser_prepare(parser);
11759     deferred_nodes = 0;
11760 #ifndef RIPPER
11761     parser->parser_token_info_enabled = !compile_for_eval && RTEST(ruby_verbose);
11762 #endif
11763 #ifndef RIPPER
11764     if (RUBY_DTRACE_PARSE_BEGIN_ENABLED()) {
11765         RUBY_DTRACE_PARSE_BEGIN(parser->parser_ruby_sourcefile,
11766                                 parser->parser_ruby_sourceline);
11767     }
11768 #endif
11769     n = yyparse((void*)parser);
11770 #ifndef RIPPER
11771     if (RUBY_DTRACE_PARSE_END_ENABLED()) {
11772         RUBY_DTRACE_PARSE_END(parser->parser_ruby_sourcefile,
11773                               parser->parser_ruby_sourceline);
11774     }
11775 #endif
11776     ruby_debug_lines = 0;
11777     ruby_coverage = 0;
11778     compile_for_eval = 0;
11779 
11780     lex_strterm = 0;
11781     lex_p = lex_pbeg = lex_pend = 0;
11782     lex_lastline = lex_nextline = 0;
11783     if (parser->nerr) {
11784         return 0;
11785     }
11786     tree = ruby_eval_tree;
11787     if (!tree) {
11788         tree = NEW_NIL();
11789     }
11790     else if (ruby_eval_tree_begin) {
11791         tree->nd_body = NEW_PRELUDE(ruby_eval_tree_begin, tree->nd_body);
11792     }
11793     return (VALUE)tree;
11794 }
11795 
11796 static NODE*
11797 yycompile(struct parser_params *parser, VALUE fname, int line)
11798 {
11799     ruby_sourcefile_string = rb_str_new_frozen(fname);
11800     ruby_sourcefile = RSTRING_PTR(fname);
11801     ruby_sourceline = line - 1;
11802     return (NODE *)rb_suppress_tracing(yycompile0, (VALUE)parser);
11803 }
11804 #endif /* !RIPPER */
11805 
11806 static rb_encoding *
11807 must_be_ascii_compatible(VALUE s)
11808 {
11809     rb_encoding *enc = rb_enc_get(s);
11810     if (!rb_enc_asciicompat(enc)) {
11811         rb_raise(rb_eArgError, "invalid source encoding");
11812     }
11813     return enc;
11814 }
11815 
11816 static VALUE
11817 lex_get_str(struct parser_params *parser, VALUE s)
11818 {
11819     char *beg, *end, *pend;
11820     rb_encoding *enc = must_be_ascii_compatible(s);
11821 
11822     beg = RSTRING_PTR(s);
11823     if (lex_gets_ptr) {
11824         if (RSTRING_LEN(s) == lex_gets_ptr) return Qnil;
11825         beg += lex_gets_ptr;
11826     }
11827     pend = RSTRING_PTR(s) + RSTRING_LEN(s);
11828     end = beg;
11829     while (end < pend) {
11830         if (*end++ == '\n') break;
11831     }
11832     lex_gets_ptr = end - RSTRING_PTR(s);
11833     return rb_enc_str_new(beg, end - beg, enc);
11834 }
11835 
11836 static VALUE
11837 lex_getline(struct parser_params *parser)
11838 {
11839     VALUE line = (*parser->parser_lex_gets)(parser, parser->parser_lex_input);
11840     if (NIL_P(line)) return line;
11841     must_be_ascii_compatible(line);
11842 #ifndef RIPPER
11843     if (ruby_debug_lines) {
11844         rb_enc_associate(line, current_enc);
11845         rb_ary_push(ruby_debug_lines, line);
11846     }
11847     if (ruby_coverage) {
11848         rb_ary_push(ruby_coverage, Qnil);
11849     }
11850 #endif
11851     return line;
11852 }
11853 
11854 #ifdef RIPPER
11855 static rb_data_type_t parser_data_type;
11856 #else
11857 static const rb_data_type_t parser_data_type;
11858 
11859 static NODE*
11860 parser_compile_string(volatile VALUE vparser, VALUE fname, VALUE s, int line)
11861 {
11862     struct parser_params *parser;
11863     NODE *node;
11864 
11865     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11866     lex_gets = lex_get_str;
11867     lex_gets_ptr = 0;
11868     lex_input = s;
11869     lex_pbeg = lex_p = lex_pend = 0;
11870     compile_for_eval = rb_parse_in_eval();
11871 
11872     node = yycompile(parser, fname, line);
11873     RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11874 
11875     return node;
11876 }
11877 
11878 NODE*
11879 rb_compile_string(const char *f, VALUE s, int line)
11880 {
11881     must_be_ascii_compatible(s);
11882     return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), s, line);
11883 }
11884 
11885 NODE*
11886 rb_parser_compile_string(volatile VALUE vparser, const char *f, VALUE s, int line)
11887 {
11888     return rb_parser_compile_string_path(vparser, rb_filesystem_str_new_cstr(f), s, line);
11889 }
11890 
11891 NODE*
11892 rb_parser_compile_string_path(volatile VALUE vparser, VALUE f, VALUE s, int line)
11893 {
11894     must_be_ascii_compatible(s);
11895     return parser_compile_string(vparser, f, s, line);
11896 }
11897 
11898 NODE*
11899 rb_compile_cstr(const char *f, const char *s, int len, int line)
11900 {
11901     VALUE str = rb_str_new(s, len);
11902     return parser_compile_string(rb_parser_new(), rb_filesystem_str_new_cstr(f), str, line);
11903 }
11904 
11905 NODE*
11906 rb_parser_compile_cstr(volatile VALUE vparser, const char *f, const char *s, int len, int line)
11907 {
11908     VALUE str = rb_str_new(s, len);
11909     return parser_compile_string(vparser, rb_filesystem_str_new_cstr(f), str, line);
11910 }
11911 
11912 static VALUE
11913 lex_io_gets(struct parser_params *parser, VALUE io)
11914 {
11915     return rb_io_gets(io);
11916 }
11917 
11918 NODE*
11919 rb_compile_file(const char *f, VALUE file, int start)
11920 {
11921     VALUE volatile vparser = rb_parser_new();
11922 
11923     return rb_parser_compile_file(vparser, f, file, start);
11924 }
11925 
11926 NODE*
11927 rb_parser_compile_file(volatile VALUE vparser, const char *f, VALUE file, int start)
11928 {
11929     return rb_parser_compile_file_path(vparser, rb_filesystem_str_new_cstr(f), file, start);
11930 }
11931 
11932 NODE*
11933 rb_parser_compile_file_path(volatile VALUE vparser, VALUE fname, VALUE file, int start)
11934 {
11935     struct parser_params *parser;
11936     NODE *node;
11937 
11938     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
11939     lex_gets = lex_io_gets;
11940     lex_input = file;
11941     lex_pbeg = lex_p = lex_pend = 0;
11942     compile_for_eval = rb_parse_in_eval();
11943 
11944     node = yycompile(parser, fname, start);
11945     RB_GC_GUARD(vparser); /* prohibit tail call optimization */
11946 
11947     return node;
11948 }
11949 #endif  /* !RIPPER */
11950 
11951 #define STR_FUNC_ESCAPE 0x01
11952 #define STR_FUNC_EXPAND 0x02
11953 #define STR_FUNC_REGEXP 0x04
11954 #define STR_FUNC_QWORDS 0x08
11955 #define STR_FUNC_SYMBOL 0x10
11956 #define STR_FUNC_INDENT 0x20
11957 
11958 enum string_type {
11959     str_squote = (0),
11960     str_dquote = (STR_FUNC_EXPAND),
11961     str_xquote = (STR_FUNC_EXPAND),
11962     str_regexp = (STR_FUNC_REGEXP|STR_FUNC_ESCAPE|STR_FUNC_EXPAND),
11963     str_sword  = (STR_FUNC_QWORDS),
11964     str_dword  = (STR_FUNC_QWORDS|STR_FUNC_EXPAND),
11965     str_ssym   = (STR_FUNC_SYMBOL),
11966     str_dsym   = (STR_FUNC_SYMBOL|STR_FUNC_EXPAND)
11967 };
11968 
11969 static VALUE
11970 parser_str_new(const char *p, long n, rb_encoding *enc, int func, rb_encoding *enc0)
11971 {
11972     VALUE str;
11973 
11974     str = rb_enc_str_new(p, n, enc);
11975     if (!(func & STR_FUNC_REGEXP) && rb_enc_asciicompat(enc)) {
11976         if (rb_enc_str_coderange(str) == ENC_CODERANGE_7BIT) {
11977         }
11978         else if (enc0 == rb_usascii_encoding() && enc != rb_utf8_encoding()) {
11979             rb_enc_associate(str, rb_ascii8bit_encoding());
11980         }
11981     }
11982 
11983     return str;
11984 }
11985 
11986 #define lex_goto_eol(parser) ((parser)->parser_lex_p = (parser)->parser_lex_pend)
11987 #define lex_eol_p() (lex_p >= lex_pend)
11988 #define peek(c) peek_n((c), 0)
11989 #define peek_n(c,n) (lex_p+(n) < lex_pend && (c) == (unsigned char)lex_p[n])
11990 
11991 static inline int
11992 parser_nextc(struct parser_params *parser)
11993 {
11994     int c;
11995 
11996     if (lex_p == lex_pend) {
11997         VALUE v = lex_nextline;
11998         lex_nextline = 0;
11999         if (!v) {
12000             if (parser->eofp)
12001                 return -1;
12002 
12003             if (!lex_input || NIL_P(v = lex_getline(parser))) {
12004                 parser->eofp = Qtrue;
12005                 lex_goto_eol(parser);
12006                 return -1;
12007             }
12008         }
12009         {
12010 #ifdef RIPPER
12011             if (parser->tokp < lex_pend) {
12012                 if (NIL_P(parser->delayed)) {
12013                     parser->delayed = rb_str_buf_new(1024);
12014                     rb_enc_associate(parser->delayed, current_enc);
12015                     rb_str_buf_cat(parser->delayed,
12016                                    parser->tokp, lex_pend - parser->tokp);
12017                     parser->delayed_line = ruby_sourceline;
12018                     parser->delayed_col = (int)(parser->tokp - lex_pbeg);
12019                 }
12020                 else {
12021                     rb_str_buf_cat(parser->delayed,
12022                                    parser->tokp, lex_pend - parser->tokp);
12023                 }
12024             }
12025 #endif
12026             if (heredoc_end > 0) {
12027                 ruby_sourceline = heredoc_end;
12028                 heredoc_end = 0;
12029             }
12030             ruby_sourceline++;
12031             parser->line_count++;
12032             lex_pbeg = lex_p = RSTRING_PTR(v);
12033             lex_pend = lex_p + RSTRING_LEN(v);
12034             ripper_flush(parser);
12035             lex_lastline = v;
12036         }
12037     }
12038     c = (unsigned char)*lex_p++;
12039     if (c == '\r' && peek('\n')) {
12040         lex_p++;
12041         c = '\n';
12042     }
12043 
12044     return c;
12045 }
12046 
12047 static void
12048 parser_pushback(struct parser_params *parser, int c)
12049 {
12050     if (c == -1) return;
12051     lex_p--;
12052     if (lex_p > lex_pbeg && lex_p[0] == '\n' && lex_p[-1] == '\r') {
12053         lex_p--;
12054     }
12055 }
12056 
12057 #define was_bol() (lex_p == lex_pbeg + 1)
12058 
12059 #define tokfix() (tokenbuf[tokidx]='\0')
12060 #define tok() tokenbuf
12061 #define toklen() tokidx
12062 #define toklast() (tokidx>0?tokenbuf[tokidx-1]:0)
12063 
12064 static char*
12065 parser_newtok(struct parser_params *parser)
12066 {
12067     tokidx = 0;
12068     tokline = ruby_sourceline;
12069     if (!tokenbuf) {
12070         toksiz = 60;
12071         tokenbuf = ALLOC_N(char, 60);
12072     }
12073     if (toksiz > 4096) {
12074         toksiz = 60;
12075         REALLOC_N(tokenbuf, char, 60);
12076     }
12077     return tokenbuf;
12078 }
12079 
12080 static char *
12081 parser_tokspace(struct parser_params *parser, int n)
12082 {
12083     tokidx += n;
12084 
12085     if (tokidx >= toksiz) {
12086         do {toksiz *= 2;} while (toksiz < tokidx);
12087         REALLOC_N(tokenbuf, char, toksiz);
12088     }
12089     return &tokenbuf[tokidx-n];
12090 }
12091 
12092 static void
12093 parser_tokadd(struct parser_params *parser, int c)
12094 {
12095     tokenbuf[tokidx++] = (char)c;
12096     if (tokidx >= toksiz) {
12097         toksiz *= 2;
12098         REALLOC_N(tokenbuf, char, toksiz);
12099     }
12100 }
12101 
12102 static int
12103 parser_tok_hex(struct parser_params *parser, size_t *numlen)
12104 {
12105     int c;
12106 
12107     c = scan_hex(lex_p, 2, numlen);
12108     if (!*numlen) {
12109         yyerror("invalid hex escape");
12110         return 0;
12111     }
12112     lex_p += *numlen;
12113     return c;
12114 }
12115 
12116 #define tokcopy(n) memcpy(tokspace(n), lex_p - (n), (n))
12117 
12118 /* return value is for ?\u3042 */
12119 static int
12120 parser_tokadd_utf8(struct parser_params *parser, rb_encoding **encp,
12121                    int string_literal, int symbol_literal, int regexp_literal)
12122 {
12123     /*
12124      * If string_literal is true, then we allow multiple codepoints
12125      * in \u{}, and add the codepoints to the current token.
12126      * Otherwise we're parsing a character literal and return a single
12127      * codepoint without adding it
12128      */
12129 
12130     int codepoint;
12131     size_t numlen;
12132 
12133     if (regexp_literal) { tokadd('\\'); tokadd('u'); }
12134 
12135     if (peek('{')) {  /* handle \u{...} form */
12136         do {
12137             if (regexp_literal) { tokadd(*lex_p); }
12138             nextc();
12139             codepoint = scan_hex(lex_p, 6, &numlen);
12140             if (numlen == 0)  {
12141                 yyerror("invalid Unicode escape");
12142                 return 0;
12143             }
12144             if (codepoint > 0x10ffff) {
12145                 yyerror("invalid Unicode codepoint (too large)");
12146                 return 0;
12147             }
12148             lex_p += numlen;
12149             if (regexp_literal) {
12150                 tokcopy((int)numlen);
12151             }
12152             else if (codepoint >= 0x80) {
12153                 *encp = rb_utf8_encoding();
12154                 if (string_literal) tokaddmbc(codepoint, *encp);
12155             }
12156             else if (string_literal) {
12157                 tokadd(codepoint);
12158             }
12159         } while (string_literal && (peek(' ') || peek('\t')));
12160 
12161         if (!peek('}')) {
12162             yyerror("unterminated Unicode escape");
12163             return 0;
12164         }
12165 
12166         if (regexp_literal) { tokadd('}'); }
12167         nextc();
12168     }
12169     else {                      /* handle \uxxxx form */
12170         codepoint = scan_hex(lex_p, 4, &numlen);
12171         if (numlen < 4) {
12172             yyerror("invalid Unicode escape");
12173             return 0;
12174         }
12175         lex_p += 4;
12176         if (regexp_literal) {
12177             tokcopy(4);
12178         }
12179         else if (codepoint >= 0x80) {
12180             *encp = rb_utf8_encoding();
12181             if (string_literal) tokaddmbc(codepoint, *encp);
12182         }
12183         else if (string_literal) {
12184             tokadd(codepoint);
12185         }
12186     }
12187 
12188     return codepoint;
12189 }
12190 
12191 #define ESCAPE_CONTROL 1
12192 #define ESCAPE_META    2
12193 
12194 static int
12195 parser_read_escape(struct parser_params *parser, int flags,
12196                    rb_encoding **encp)
12197 {
12198     int c;
12199     size_t numlen;
12200 
12201     switch (c = nextc()) {
12202       case '\\':        /* Backslash */
12203         return c;
12204 
12205       case 'n': /* newline */
12206         return '\n';
12207 
12208       case 't': /* horizontal tab */
12209         return '\t';
12210 
12211       case 'r': /* carriage-return */
12212         return '\r';
12213 
12214       case 'f': /* form-feed */
12215         return '\f';
12216 
12217       case 'v': /* vertical tab */
12218         return '\13';
12219 
12220       case 'a': /* alarm(bell) */
12221         return '\007';
12222 
12223       case 'e': /* escape */
12224         return 033;
12225 
12226       case '0': case '1': case '2': case '3': /* octal constant */
12227       case '4': case '5': case '6': case '7':
12228         pushback(c);
12229         c = scan_oct(lex_p, 3, &numlen);
12230         lex_p += numlen;
12231         return c;
12232 
12233       case 'x': /* hex constant */
12234         c = tok_hex(&numlen);
12235         if (numlen == 0) return 0;
12236         return c;
12237 
12238       case 'b': /* backspace */
12239         return '\010';
12240 
12241       case 's': /* space */
12242         return ' ';
12243 
12244       case 'M':
12245         if (flags & ESCAPE_META) goto eof;
12246         if ((c = nextc()) != '-') {
12247             pushback(c);
12248             goto eof;
12249         }
12250         if ((c = nextc()) == '\\') {
12251             if (peek('u')) goto eof;
12252             return read_escape(flags|ESCAPE_META, encp) | 0x80;
12253         }
12254         else if (c == -1 || !ISASCII(c)) goto eof;
12255         else {
12256             return ((c & 0xff) | 0x80);
12257         }
12258 
12259       case 'C':
12260         if ((c = nextc()) != '-') {
12261             pushback(c);
12262             goto eof;
12263         }
12264       case 'c':
12265         if (flags & ESCAPE_CONTROL) goto eof;
12266         if ((c = nextc())== '\\') {
12267             if (peek('u')) goto eof;
12268             c = read_escape(flags|ESCAPE_CONTROL, encp);
12269         }
12270         else if (c == '?')
12271             return 0177;
12272         else if (c == -1 || !ISASCII(c)) goto eof;
12273         return c & 0x9f;
12274 
12275       eof:
12276       case -1:
12277         yyerror("Invalid escape character syntax");
12278         return '\0';
12279 
12280       default:
12281         return c;
12282     }
12283 }
12284 
12285 static void
12286 parser_tokaddmbc(struct parser_params *parser, int c, rb_encoding *enc)
12287 {
12288     int len = rb_enc_codelen(c, enc);
12289     rb_enc_mbcput(c, tokspace(len), enc);
12290 }
12291 
12292 static int
12293 parser_tokadd_escape(struct parser_params *parser, rb_encoding **encp)
12294 {
12295     int c;
12296     int flags = 0;
12297     size_t numlen;
12298 
12299   first:
12300     switch (c = nextc()) {
12301       case '\n':
12302         return 0;               /* just ignore */
12303 
12304       case '0': case '1': case '2': case '3': /* octal constant */
12305       case '4': case '5': case '6': case '7':
12306         {
12307             ruby_scan_oct(--lex_p, 3, &numlen);
12308             if (numlen == 0) goto eof;
12309             lex_p += numlen;
12310             tokcopy((int)numlen + 1);
12311         }
12312         return 0;
12313 
12314       case 'x': /* hex constant */
12315         {
12316             tok_hex(&numlen);
12317             if (numlen == 0) return -1;
12318             tokcopy((int)numlen + 2);
12319         }
12320         return 0;
12321 
12322       case 'M':
12323         if (flags & ESCAPE_META) goto eof;
12324         if ((c = nextc()) != '-') {
12325             pushback(c);
12326             goto eof;
12327         }
12328         tokcopy(3);
12329         flags |= ESCAPE_META;
12330         goto escaped;
12331 
12332       case 'C':
12333         if (flags & ESCAPE_CONTROL) goto eof;
12334         if ((c = nextc()) != '-') {
12335             pushback(c);
12336             goto eof;
12337         }
12338         tokcopy(3);
12339         goto escaped;
12340 
12341       case 'c':
12342         if (flags & ESCAPE_CONTROL) goto eof;
12343         tokcopy(2);
12344         flags |= ESCAPE_CONTROL;
12345       escaped:
12346         if ((c = nextc()) == '\\') {
12347             goto first;
12348         }
12349         else if (c == -1) goto eof;
12350         tokadd(c);
12351         return 0;
12352 
12353       eof:
12354       case -1:
12355         yyerror("Invalid escape character syntax");
12356         return -1;
12357 
12358       default:
12359         tokadd('\\');
12360         tokadd(c);
12361     }
12362     return 0;
12363 }
12364 
12365 static int
12366 parser_regx_options(struct parser_params *parser)
12367 {
12368     int kcode = 0;
12369     int kopt = 0;
12370     int options = 0;
12371     int c, opt, kc;
12372 
12373     newtok();
12374     while (c = nextc(), ISALPHA(c)) {
12375         if (c == 'o') {
12376             options |= RE_OPTION_ONCE;
12377         }
12378         else if (rb_char_to_option_kcode(c, &opt, &kc)) {
12379             if (kc >= 0) {
12380                 if (kc != rb_ascii8bit_encindex()) kcode = c;
12381                 kopt = opt;
12382             }
12383             else {
12384                 options |= opt;
12385             }
12386         }
12387         else {
12388             tokadd(c);
12389         }
12390     }
12391     options |= kopt;
12392     pushback(c);
12393     if (toklen()) {
12394         tokfix();
12395         compile_error(PARSER_ARG "unknown regexp option%s - %s",
12396                       toklen() > 1 ? "s" : "", tok());
12397     }
12398     return options | RE_OPTION_ENCODING(kcode);
12399 }
12400 
12401 static void
12402 dispose_string(VALUE str)
12403 {
12404     rb_str_free(str);
12405     rb_gc_force_recycle(str);
12406 }
12407 
12408 static int
12409 parser_tokadd_mbchar(struct parser_params *parser, int c)
12410 {
12411     int len = parser_precise_mbclen();
12412     if (!MBCLEN_CHARFOUND_P(len)) {
12413         compile_error(PARSER_ARG "invalid multibyte char (%s)", parser_encoding_name());
12414         return -1;
12415     }
12416     tokadd(c);
12417     lex_p += --len;
12418     if (len > 0) tokcopy(len);
12419     return c;
12420 }
12421 
12422 #define tokadd_mbchar(c) parser_tokadd_mbchar(parser, (c))
12423 
12424 static inline int
12425 simple_re_meta(int c)
12426 {
12427     switch (c) {
12428       case '$': case '*': case '+': case '.':
12429       case '?': case '^': case '|':
12430       case ')': case ']': case '}': case '>':
12431         return TRUE;
12432       default:
12433         return FALSE;
12434     }
12435 }
12436 
12437 static int
12438 parser_tokadd_string(struct parser_params *parser,
12439                      int func, int term, int paren, long *nest,
12440                      rb_encoding **encp)
12441 {
12442     int c;
12443     int has_nonascii = 0;
12444     rb_encoding *enc = *encp;
12445     char *errbuf = 0;
12446     static const char mixed_msg[] = "%s mixed within %s source";
12447 
12448 #define mixed_error(enc1, enc2) if (!errbuf) {  \
12449         size_t len = sizeof(mixed_msg) - 4;     \
12450         len += strlen(rb_enc_name(enc1));       \
12451         len += strlen(rb_enc_name(enc2));       \
12452         errbuf = ALLOCA_N(char, len);           \
12453         snprintf(errbuf, len, mixed_msg,        \
12454                  rb_enc_name(enc1),             \
12455                  rb_enc_name(enc2));            \
12456         yyerror(errbuf);                        \
12457     }
12458 #define mixed_escape(beg, enc1, enc2) do {      \
12459         const char *pos = lex_p;                \
12460         lex_p = (beg);                          \
12461         mixed_error((enc1), (enc2));            \
12462         lex_p = pos;                            \
12463     } while (0)
12464 
12465     while ((c = nextc()) != -1) {
12466         if (paren && c == paren) {
12467             ++*nest;
12468         }
12469         else if (c == term) {
12470             if (!nest || !*nest) {
12471                 pushback(c);
12472                 break;
12473             }
12474             --*nest;
12475         }
12476         else if ((func & STR_FUNC_EXPAND) && c == '#' && lex_p < lex_pend) {
12477             int c2 = *lex_p;
12478             if (c2 == '$' || c2 == '@' || c2 == '{') {
12479                 pushback(c);
12480                 break;
12481             }
12482         }
12483         else if (c == '\\') {
12484             const char *beg = lex_p - 1;
12485             c = nextc();
12486             switch (c) {
12487               case '\n':
12488                 if (func & STR_FUNC_QWORDS) break;
12489                 if (func & STR_FUNC_EXPAND) continue;
12490                 tokadd('\\');
12491                 break;
12492 
12493               case '\\':
12494                 if (func & STR_FUNC_ESCAPE) tokadd(c);
12495                 break;
12496 
12497               case 'u':
12498                 if ((func & STR_FUNC_EXPAND) == 0) {
12499                     tokadd('\\');
12500                     break;
12501                 }
12502                 parser_tokadd_utf8(parser, &enc, 1,
12503                                    func & STR_FUNC_SYMBOL,
12504                                    func & STR_FUNC_REGEXP);
12505                 if (has_nonascii && enc != *encp) {
12506                     mixed_escape(beg, enc, *encp);
12507                 }
12508                 continue;
12509 
12510               default:
12511                 if (c == -1) return -1;
12512                 if (!ISASCII(c)) {
12513                     if ((func & STR_FUNC_EXPAND) == 0) tokadd('\\');
12514                     goto non_ascii;
12515                 }
12516                 if (func & STR_FUNC_REGEXP) {
12517                     if (c == term && !simple_re_meta(c)) {
12518                         tokadd(c);
12519                         continue;
12520                     }
12521                     pushback(c);
12522                     if ((c = tokadd_escape(&enc)) < 0)
12523                         return -1;
12524                     if (has_nonascii && enc != *encp) {
12525                         mixed_escape(beg, enc, *encp);
12526                     }
12527                     continue;
12528                 }
12529                 else if (func & STR_FUNC_EXPAND) {
12530                     pushback(c);
12531                     if (func & STR_FUNC_ESCAPE) tokadd('\\');
12532                     c = read_escape(0, &enc);
12533                 }
12534                 else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12535                     /* ignore backslashed spaces in %w */
12536                 }
12537                 else if (c != term && !(paren && c == paren)) {
12538                     tokadd('\\');
12539                     pushback(c);
12540                     continue;
12541                 }
12542             }
12543         }
12544         else if (!parser_isascii()) {
12545           non_ascii:
12546             has_nonascii = 1;
12547             if (enc != *encp) {
12548                 mixed_error(enc, *encp);
12549                 continue;
12550             }
12551             if (tokadd_mbchar(c) == -1) return -1;
12552             continue;
12553         }
12554         else if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12555             pushback(c);
12556             break;
12557         }
12558         if (c & 0x80) {
12559             has_nonascii = 1;
12560             if (enc != *encp) {
12561                 mixed_error(enc, *encp);
12562                 continue;
12563             }
12564         }
12565         tokadd(c);
12566     }
12567     *encp = enc;
12568     return c;
12569 }
12570 
12571 #define NEW_STRTERM(func, term, paren) \
12572         rb_node_newnode(NODE_STRTERM, (func), (term) | ((paren) << (CHAR_BIT * 2)), 0)
12573 
12574 #ifdef RIPPER
12575 static void
12576 ripper_flush_string_content(struct parser_params *parser, rb_encoding *enc)
12577 {
12578     if (!NIL_P(parser->delayed)) {
12579         ptrdiff_t len = lex_p - parser->tokp;
12580         if (len > 0) {
12581             rb_enc_str_buf_cat(parser->delayed, parser->tokp, len, enc);
12582         }
12583         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12584         parser->tokp = lex_p;
12585     }
12586 }
12587 
12588 #define flush_string_content(enc) ripper_flush_string_content(parser, (enc))
12589 #else
12590 #define flush_string_content(enc) ((void)(enc))
12591 #endif
12592 
12593 RUBY_FUNC_EXPORTED const unsigned int ruby_global_name_punct_bits[(0x7e - 0x20 + 31) / 32];
12594 /* this can be shared with ripper, since it's independent from struct
12595  * parser_params. */
12596 #ifndef RIPPER
12597 #define BIT(c, idx) (((c) / 32 - 1 == idx) ? (1U << ((c) % 32)) : 0)
12598 #define SPECIAL_PUNCT(idx) ( \
12599         BIT('~', idx) | BIT('*', idx) | BIT('$', idx) | BIT('?', idx) | \
12600         BIT('!', idx) | BIT('@', idx) | BIT('/', idx) | BIT('\\', idx) | \
12601         BIT(';', idx) | BIT(',', idx) | BIT('.', idx) | BIT('=', idx) | \
12602         BIT(':', idx) | BIT('<', idx) | BIT('>', idx) | BIT('\"', idx) | \
12603         BIT('&', idx) | BIT('`', idx) | BIT('\'', idx) | BIT('+', idx) | \
12604         BIT('0', idx))
12605 const unsigned int ruby_global_name_punct_bits[] = {
12606     SPECIAL_PUNCT(0),
12607     SPECIAL_PUNCT(1),
12608     SPECIAL_PUNCT(2),
12609 };
12610 #undef BIT
12611 #undef SPECIAL_PUNCT
12612 #endif
12613 
12614 static inline int
12615 is_global_name_punct(const char c)
12616 {
12617     if (c <= 0x20 || 0x7e < c) return 0;
12618     return (ruby_global_name_punct_bits[(c - 0x20) / 32] >> (c % 32)) & 1;
12619 }
12620 
12621 static int
12622 parser_peek_variable_name(struct parser_params *parser)
12623 {
12624     int c;
12625     const char *p = lex_p;
12626 
12627     if (p + 1 >= lex_pend) return 0;
12628     c = *p++;
12629     switch (c) {
12630       case '$':
12631         if ((c = *p) == '-') {
12632             if (++p >= lex_pend) return 0;
12633             c = *p;
12634         }
12635         else if (is_global_name_punct(c) || ISDIGIT(c)) {
12636             return tSTRING_DVAR;
12637         }
12638         break;
12639       case '@':
12640         if ((c = *p) == '@') {
12641             if (++p >= lex_pend) return 0;
12642             c = *p;
12643         }
12644         break;
12645       case '{':
12646         lex_p = p;
12647         command_start = TRUE;
12648         return tSTRING_DBEG;
12649       default:
12650         return 0;
12651     }
12652     if (!ISASCII(c) || c == '_' || ISALPHA(c))
12653         return tSTRING_DVAR;
12654     return 0;
12655 }
12656 
12657 static int
12658 parser_parse_string(struct parser_params *parser, NODE *quote)
12659 {
12660     int func = (int)quote->nd_func;
12661     int term = nd_term(quote);
12662     int paren = nd_paren(quote);
12663     int c, space = 0;
12664     rb_encoding *enc = current_enc;
12665 
12666     if (func == -1) return tSTRING_END;
12667     c = nextc();
12668     if ((func & STR_FUNC_QWORDS) && ISSPACE(c)) {
12669         do {c = nextc();} while (ISSPACE(c));
12670         space = 1;
12671     }
12672     if (c == term && !quote->nd_nest) {
12673         if (func & STR_FUNC_QWORDS) {
12674             quote->nd_func = -1;
12675             return ' ';
12676         }
12677         if (!(func & STR_FUNC_REGEXP)) return tSTRING_END;
12678         set_yylval_num(regx_options());
12679         return tREGEXP_END;
12680     }
12681     if (space) {
12682         pushback(c);
12683         return ' ';
12684     }
12685     newtok();
12686     if ((func & STR_FUNC_EXPAND) && c == '#') {
12687         int t = parser_peek_variable_name(parser);
12688         if (t) return t;
12689         tokadd('#');
12690         c = nextc();
12691     }
12692     pushback(c);
12693     if (tokadd_string(func, term, paren, &quote->nd_nest,
12694                       &enc) == -1) {
12695         ruby_sourceline = nd_line(quote);
12696         if (func & STR_FUNC_REGEXP) {
12697             if (parser->eofp)
12698                 compile_error(PARSER_ARG "unterminated regexp meets end of file");
12699             return tREGEXP_END;
12700         }
12701         else {
12702             if (parser->eofp)
12703                 compile_error(PARSER_ARG "unterminated string meets end of file");
12704             return tSTRING_END;
12705         }
12706     }
12707 
12708     tokfix();
12709     set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12710     flush_string_content(enc);
12711 
12712     return tSTRING_CONTENT;
12713 }
12714 
12715 static int
12716 parser_heredoc_identifier(struct parser_params *parser)
12717 {
12718     int c = nextc(), term, func = 0;
12719     long len;
12720 
12721     if (c == '-') {
12722         c = nextc();
12723         func = STR_FUNC_INDENT;
12724     }
12725     switch (c) {
12726       case '\'':
12727         func |= str_squote; goto quoted;
12728       case '"':
12729         func |= str_dquote; goto quoted;
12730       case '`':
12731         func |= str_xquote;
12732       quoted:
12733         newtok();
12734         tokadd(func);
12735         term = c;
12736         while ((c = nextc()) != -1 && c != term) {
12737             if (tokadd_mbchar(c) == -1) return 0;
12738         }
12739         if (c == -1) {
12740             compile_error(PARSER_ARG "unterminated here document identifier");
12741             return 0;
12742         }
12743         break;
12744 
12745       default:
12746         if (!parser_is_identchar()) {
12747             pushback(c);
12748             if (func & STR_FUNC_INDENT) {
12749                 pushback('-');
12750             }
12751             return 0;
12752         }
12753         newtok();
12754         term = '"';
12755         tokadd(func |= str_dquote);
12756         do {
12757             if (tokadd_mbchar(c) == -1) return 0;
12758         } while ((c = nextc()) != -1 && parser_is_identchar());
12759         pushback(c);
12760         break;
12761     }
12762 
12763     tokfix();
12764 #ifdef RIPPER
12765     ripper_dispatch_scan_event(parser, tHEREDOC_BEG);
12766 #endif
12767     len = lex_p - lex_pbeg;
12768     lex_goto_eol(parser);
12769     lex_strterm = rb_node_newnode(NODE_HEREDOC,
12770                                   STR_NEW(tok(), toklen()),     /* nd_lit */
12771                                   len,                          /* nd_nth */
12772                                   lex_lastline);                /* nd_orig */
12773     nd_set_line(lex_strterm, ruby_sourceline);
12774     ripper_flush(parser);
12775     return term == '`' ? tXSTRING_BEG : tSTRING_BEG;
12776 }
12777 
12778 static void
12779 parser_heredoc_restore(struct parser_params *parser, NODE *here)
12780 {
12781     VALUE line;
12782 
12783     line = here->nd_orig;
12784     lex_lastline = line;
12785     lex_pbeg = RSTRING_PTR(line);
12786     lex_pend = lex_pbeg + RSTRING_LEN(line);
12787     lex_p = lex_pbeg + here->nd_nth;
12788     heredoc_end = ruby_sourceline;
12789     ruby_sourceline = nd_line(here);
12790     dispose_string(here->nd_lit);
12791     rb_gc_force_recycle((VALUE)here);
12792     ripper_flush(parser);
12793 }
12794 
12795 static int
12796 parser_whole_match_p(struct parser_params *parser,
12797     const char *eos, long len, int indent)
12798 {
12799     const char *p = lex_pbeg;
12800     long n;
12801 
12802     if (indent) {
12803         while (*p && ISSPACE(*p)) p++;
12804     }
12805     n = lex_pend - (p + len);
12806     if (n < 0 || (n > 0 && p[len] != '\n' && p[len] != '\r')) return FALSE;
12807     return strncmp(eos, p, len) == 0;
12808 }
12809 
12810 #ifdef RIPPER
12811 static void
12812 ripper_dispatch_heredoc_end(struct parser_params *parser)
12813 {
12814     if (!NIL_P(parser->delayed))
12815         ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12816     lex_goto_eol(parser);
12817     ripper_dispatch_ignored_scan_event(parser, tHEREDOC_END);
12818 }
12819 
12820 #define dispatch_heredoc_end() ripper_dispatch_heredoc_end(parser)
12821 #else
12822 #define dispatch_heredoc_end() ((void)0)
12823 #endif
12824 
12825 static int
12826 parser_here_document(struct parser_params *parser, NODE *here)
12827 {
12828     int c, func, indent = 0;
12829     const char *eos, *p, *pend;
12830     long len;
12831     VALUE str = 0;
12832     rb_encoding *enc = current_enc;
12833 
12834     eos = RSTRING_PTR(here->nd_lit);
12835     len = RSTRING_LEN(here->nd_lit) - 1;
12836     indent = (func = *eos++) & STR_FUNC_INDENT;
12837 
12838     if ((c = nextc()) == -1) {
12839       error:
12840         compile_error(PARSER_ARG "can't find string \"%s\" anywhere before EOF", eos);
12841 #ifdef RIPPER
12842         if (NIL_P(parser->delayed)) {
12843             ripper_dispatch_scan_event(parser, tSTRING_CONTENT);
12844         }
12845         else {
12846             if (str ||
12847                 ((len = lex_p - parser->tokp) > 0 &&
12848                  (str = STR_NEW3(parser->tokp, len, enc, func), 1))) {
12849                 rb_str_append(parser->delayed, str);
12850             }
12851             ripper_dispatch_delayed_token(parser, tSTRING_CONTENT);
12852         }
12853         lex_goto_eol(parser);
12854 #endif
12855       restore:
12856         heredoc_restore(lex_strterm);
12857         lex_strterm = 0;
12858         return 0;
12859     }
12860     if (was_bol() && whole_match_p(eos, len, indent)) {
12861         dispatch_heredoc_end();
12862         heredoc_restore(lex_strterm);
12863         return tSTRING_END;
12864     }
12865 
12866     if (!(func & STR_FUNC_EXPAND)) {
12867         do {
12868             p = RSTRING_PTR(lex_lastline);
12869             pend = lex_pend;
12870             if (pend > p) {
12871                 switch (pend[-1]) {
12872                   case '\n':
12873                     if (--pend == p || pend[-1] != '\r') {
12874                         pend++;
12875                         break;
12876                     }
12877                   case '\r':
12878                     --pend;
12879                 }
12880             }
12881             if (str)
12882                 rb_str_cat(str, p, pend - p);
12883             else
12884                 str = STR_NEW(p, pend - p);
12885             if (pend < lex_pend) rb_str_cat(str, "\n", 1);
12886             lex_goto_eol(parser);
12887             if (nextc() == -1) {
12888                 if (str) {
12889                     dispose_string(str);
12890                     str = 0;
12891                 }
12892                 goto error;
12893             }
12894         } while (!whole_match_p(eos, len, indent));
12895     }
12896     else {
12897         /*      int mb = ENC_CODERANGE_7BIT, *mbp = &mb;*/
12898         newtok();
12899         if (c == '#') {
12900             int t = parser_peek_variable_name(parser);
12901             if (t) return t;
12902             tokadd('#');
12903             c = nextc();
12904         }
12905         do {
12906             pushback(c);
12907             if ((c = tokadd_string(func, '\n', 0, NULL, &enc)) == -1) {
12908                 if (parser->eofp) goto error;
12909                 goto restore;
12910             }
12911             if (c != '\n') {
12912                 set_yylval_str(STR_NEW3(tok(), toklen(), enc, func));
12913                 flush_string_content(enc);
12914                 return tSTRING_CONTENT;
12915             }
12916             tokadd(nextc());
12917             /*      if (mbp && mb == ENC_CODERANGE_UNKNOWN) mbp = 0;*/
12918             if ((c = nextc()) == -1) goto error;
12919         } while (!whole_match_p(eos, len, indent));
12920         str = STR_NEW3(tok(), toklen(), enc, func);
12921     }
12922     dispatch_heredoc_end();
12923     heredoc_restore(lex_strterm);
12924     lex_strterm = NEW_STRTERM(-1, 0, 0);
12925     set_yylval_str(str);
12926     return tSTRING_CONTENT;
12927 }
12928 
12929 #include "lex.c"
12930 
12931 static void
12932 arg_ambiguous_gen(struct parser_params *parser)
12933 {
12934 #ifndef RIPPER
12935     rb_warning0("ambiguous first argument; put parentheses or even spaces");
12936 #else
12937     dispatch0(arg_ambiguous);
12938 #endif
12939 }
12940 #define arg_ambiguous() (arg_ambiguous_gen(parser), 1)
12941 
12942 static ID
12943 formal_argument_gen(struct parser_params *parser, ID lhs)
12944 {
12945 #ifndef RIPPER
12946     if (!is_local_id(lhs))
12947         yyerror("formal argument must be local variable");
12948 #endif
12949     shadowing_lvar(lhs);
12950     return lhs;
12951 }
12952 
12953 static int
12954 lvar_defined_gen(struct parser_params *parser, ID id)
12955 {
12956     return (dyna_in_block() && dvar_defined_get(id)) || local_id(id);
12957 }
12958 
12959 /* emacsen -*- hack */
12960 static long
12961 parser_encode_length(struct parser_params *parser, const char *name, long len)
12962 {
12963     long nlen;
12964 
12965     if (len > 5 && name[nlen = len - 5] == '-') {
12966         if (rb_memcicmp(name + nlen + 1, "unix", 4) == 0)
12967             return nlen;
12968     }
12969     if (len > 4 && name[nlen = len - 4] == '-') {
12970         if (rb_memcicmp(name + nlen + 1, "dos", 3) == 0)
12971             return nlen;
12972         if (rb_memcicmp(name + nlen + 1, "mac", 3) == 0 &&
12973             !(len == 8 && rb_memcicmp(name, "utf8-mac", len) == 0))
12974             /* exclude UTF8-MAC because the encoding named "UTF8" doesn't exist in Ruby */
12975             return nlen;
12976     }
12977     return len;
12978 }
12979 
12980 static void
12981 parser_set_encode(struct parser_params *parser, const char *name)
12982 {
12983     int idx = rb_enc_find_index(name);
12984     rb_encoding *enc;
12985     VALUE excargs[3];
12986 
12987     if (idx < 0) {
12988         excargs[1] = rb_sprintf("unknown encoding name: %s", name);
12989       error:
12990         excargs[0] = rb_eArgError;
12991         excargs[2] = rb_make_backtrace();
12992         rb_ary_unshift(excargs[2], rb_sprintf("%s:%d", ruby_sourcefile, ruby_sourceline));
12993         rb_exc_raise(rb_make_exception(3, excargs));
12994     }
12995     enc = rb_enc_from_index(idx);
12996     if (!rb_enc_asciicompat(enc)) {
12997         excargs[1] = rb_sprintf("%s is not ASCII compatible", rb_enc_name(enc));
12998         goto error;
12999     }
13000     parser->enc = enc;
13001 #ifndef RIPPER
13002     if (ruby_debug_lines) {
13003         long i, n = RARRAY_LEN(ruby_debug_lines);
13004         const VALUE *p = RARRAY_PTR(ruby_debug_lines);
13005         for (i = 0; i < n; ++i) {
13006             rb_enc_associate_index(*p, idx);
13007         }
13008     }
13009 #endif
13010 }
13011 
13012 static int
13013 comment_at_top(struct parser_params *parser)
13014 {
13015     const char *p = lex_pbeg, *pend = lex_p - 1;
13016     if (parser->line_count != (parser->has_shebang ? 2 : 1)) return 0;
13017     while (p < pend) {
13018         if (!ISSPACE(*p)) return 0;
13019         p++;
13020     }
13021     return 1;
13022 }
13023 
13024 #ifndef RIPPER
13025 typedef long (*rb_magic_comment_length_t)(struct parser_params *parser, const char *name, long len);
13026 typedef void (*rb_magic_comment_setter_t)(struct parser_params *parser, const char *name, const char *val);
13027 
13028 static void
13029 magic_comment_encoding(struct parser_params *parser, const char *name, const char *val)
13030 {
13031     if (!comment_at_top(parser)) {
13032         return;
13033     }
13034     parser_set_encode(parser, val);
13035 }
13036 
13037 static void
13038 parser_set_token_info(struct parser_params *parser, const char *name, const char *val)
13039 {
13040     int *p = &parser->parser_token_info_enabled;
13041 
13042     switch (*val) {
13043       case 't': case 'T':
13044         if (strcasecmp(val, "true") == 0) {
13045             *p = TRUE;
13046             return;
13047         }
13048         break;
13049       case 'f': case 'F':
13050         if (strcasecmp(val, "false") == 0) {
13051             *p = FALSE;
13052             return;
13053         }
13054         break;
13055     }
13056     rb_compile_warning(ruby_sourcefile, ruby_sourceline, "invalid value for %s: %s", name, val);
13057 }
13058 
13059 struct magic_comment {
13060     const char *name;
13061     rb_magic_comment_setter_t func;
13062     rb_magic_comment_length_t length;
13063 };
13064 
13065 static const struct magic_comment magic_comments[] = {
13066     {"coding", magic_comment_encoding, parser_encode_length},
13067     {"encoding", magic_comment_encoding, parser_encode_length},
13068     {"warn_indent", parser_set_token_info},
13069 };
13070 #endif
13071 
13072 static const char *
13073 magic_comment_marker(const char *str, long len)
13074 {
13075     long i = 2;
13076 
13077     while (i < len) {
13078         switch (str[i]) {
13079           case '-':
13080             if (str[i-1] == '*' && str[i-2] == '-') {
13081                 return str + i + 1;
13082             }
13083             i += 2;
13084             break;
13085           case '*':
13086             if (i + 1 >= len) return 0;
13087             if (str[i+1] != '-') {
13088                 i += 4;
13089             }
13090             else if (str[i-1] != '-') {
13091                 i += 2;
13092             }
13093             else {
13094                 return str + i + 2;
13095             }
13096             break;
13097           default:
13098             i += 3;
13099             break;
13100         }
13101     }
13102     return 0;
13103 }
13104 
13105 static int
13106 parser_magic_comment(struct parser_params *parser, const char *str, long len)
13107 {
13108     VALUE name = 0, val = 0;
13109     const char *beg, *end, *vbeg, *vend;
13110 #define str_copy(_s, _p, _n) ((_s) \
13111         ? (void)(rb_str_resize((_s), (_n)), \
13112            MEMCPY(RSTRING_PTR(_s), (_p), char, (_n)), (_s)) \
13113         : (void)((_s) = STR_NEW((_p), (_n))))
13114 
13115     if (len <= 7) return FALSE;
13116     if (!(beg = magic_comment_marker(str, len))) return FALSE;
13117     if (!(end = magic_comment_marker(beg, str + len - beg))) return FALSE;
13118     str = beg;
13119     len = end - beg - 3;
13120 
13121     /* %r"([^\\s\'\":;]+)\\s*:\\s*(\"(?:\\\\.|[^\"])*\"|[^\"\\s;]+)[\\s;]*" */
13122     while (len > 0) {
13123 #ifndef RIPPER
13124         const struct magic_comment *p = magic_comments;
13125 #endif
13126         char *s;
13127         int i;
13128         long n = 0;
13129 
13130         for (; len > 0 && *str; str++, --len) {
13131             switch (*str) {
13132               case '\'': case '"': case ':': case ';':
13133                 continue;
13134             }
13135             if (!ISSPACE(*str)) break;
13136         }
13137         for (beg = str; len > 0; str++, --len) {
13138             switch (*str) {
13139               case '\'': case '"': case ':': case ';':
13140                 break;
13141               default:
13142                 if (ISSPACE(*str)) break;
13143                 continue;
13144             }
13145             break;
13146         }
13147         for (end = str; len > 0 && ISSPACE(*str); str++, --len);
13148         if (!len) break;
13149         if (*str != ':') continue;
13150 
13151         do str++; while (--len > 0 && ISSPACE(*str));
13152         if (!len) break;
13153         if (*str == '"') {
13154             for (vbeg = ++str; --len > 0 && *str != '"'; str++) {
13155                 if (*str == '\\') {
13156                     --len;
13157                     ++str;
13158                 }
13159             }
13160             vend = str;
13161             if (len) {
13162                 --len;
13163                 ++str;
13164             }
13165         }
13166         else {
13167             for (vbeg = str; len > 0 && *str != '"' && *str != ';' && !ISSPACE(*str); --len, str++);
13168             vend = str;
13169         }
13170         while (len > 0 && (*str == ';' || ISSPACE(*str))) --len, str++;
13171 
13172         n = end - beg;
13173         str_copy(name, beg, n);
13174         s = RSTRING_PTR(name);
13175         for (i = 0; i < n; ++i) {
13176             if (s[i] == '-') s[i] = '_';
13177         }
13178 #ifndef RIPPER
13179         do {
13180             if (STRNCASECMP(p->name, s, n) == 0) {
13181                 n = vend - vbeg;
13182                 if (p->length) {
13183                     n = (*p->length)(parser, vbeg, n);
13184                 }
13185                 str_copy(val, vbeg, n);
13186                 (*p->func)(parser, s, RSTRING_PTR(val));
13187                 break;
13188             }
13189         } while (++p < magic_comments + numberof(magic_comments));
13190 #else
13191         str_copy(val, vbeg, vend - vbeg);
13192         dispatch2(magic_comment, name, val);
13193 #endif
13194     }
13195 
13196     return TRUE;
13197 }
13198 
13199 static void
13200 set_file_encoding(struct parser_params *parser, const char *str, const char *send)
13201 {
13202     int sep = 0;
13203     const char *beg = str;
13204     VALUE s;
13205 
13206     for (;;) {
13207         if (send - str <= 6) return;
13208         switch (str[6]) {
13209           case 'C': case 'c': str += 6; continue;
13210           case 'O': case 'o': str += 5; continue;
13211           case 'D': case 'd': str += 4; continue;
13212           case 'I': case 'i': str += 3; continue;
13213           case 'N': case 'n': str += 2; continue;
13214           case 'G': case 'g': str += 1; continue;
13215           case '=': case ':':
13216             sep = 1;
13217             str += 6;
13218             break;
13219           default:
13220             str += 6;
13221             if (ISSPACE(*str)) break;
13222             continue;
13223         }
13224         if (STRNCASECMP(str-6, "coding", 6) == 0) break;
13225     }
13226     for (;;) {
13227         do {
13228             if (++str >= send) return;
13229         } while (ISSPACE(*str));
13230         if (sep) break;
13231         if (*str != '=' && *str != ':') return;
13232         sep = 1;
13233         str++;
13234     }
13235     beg = str;
13236     while ((*str == '-' || *str == '_' || ISALNUM(*str)) && ++str < send);
13237     s = rb_str_new(beg, parser_encode_length(parser, beg, str - beg));
13238     parser_set_encode(parser, RSTRING_PTR(s));
13239     rb_str_resize(s, 0);
13240 }
13241 
13242 static void
13243 parser_prepare(struct parser_params *parser)
13244 {
13245     int c = nextc();
13246     switch (c) {
13247       case '#':
13248         if (peek('!')) parser->has_shebang = 1;
13249         break;
13250       case 0xef:                /* UTF-8 BOM marker */
13251         if (lex_pend - lex_p >= 2 &&
13252             (unsigned char)lex_p[0] == 0xbb &&
13253             (unsigned char)lex_p[1] == 0xbf) {
13254             parser->enc = rb_utf8_encoding();
13255             lex_p += 2;
13256             lex_pbeg = lex_p;
13257             return;
13258         }
13259         break;
13260       case EOF:
13261         return;
13262     }
13263     pushback(c);
13264     parser->enc = rb_enc_get(lex_lastline);
13265 }
13266 
13267 #define IS_ARG() IS_lex_state(EXPR_ARG_ANY)
13268 #define IS_END() IS_lex_state(EXPR_END_ANY)
13269 #define IS_BEG() IS_lex_state(EXPR_BEG_ANY)
13270 #define IS_SPCARG(c) (IS_ARG() && space_seen && !ISSPACE(c))
13271 #define IS_LABEL_POSSIBLE() ((IS_lex_state(EXPR_BEG | EXPR_ENDFN) && !cmd_state) || IS_ARG())
13272 #define IS_LABEL_SUFFIX(n) (peek_n(':',(n)) && !peek_n(':', (n)+1))
13273 #define IS_AFTER_OPERATOR() IS_lex_state(EXPR_FNAME | EXPR_DOT)
13274 
13275 #ifndef RIPPER
13276 #define ambiguous_operator(op, syn) ( \
13277     rb_warning0("`"op"' after local variable is interpreted as binary operator"), \
13278     rb_warning0("even though it seems like "syn""))
13279 #else
13280 #define ambiguous_operator(op, syn) dispatch2(operator_ambiguous, ripper_intern(op), rb_str_new_cstr(syn))
13281 #endif
13282 #define warn_balanced(op, syn) ((void) \
13283     (!IS_lex_state_for(last_state, EXPR_CLASS|EXPR_DOT|EXPR_FNAME|EXPR_ENDFN|EXPR_ENDARG) && \
13284      space_seen && !ISSPACE(c) && \
13285      (ambiguous_operator(op, syn), 0)))
13286 
13287 static int
13288 parser_yylex(struct parser_params *parser)
13289 {
13290     register int c;
13291     int space_seen = 0;
13292     int cmd_state;
13293     enum lex_state_e last_state;
13294     rb_encoding *enc;
13295     int mb;
13296 #ifdef RIPPER
13297     int fallthru = FALSE;
13298 #endif
13299 
13300     if (lex_strterm) {
13301         int token;
13302         if (nd_type(lex_strterm) == NODE_HEREDOC) {
13303             token = here_document(lex_strterm);
13304             if (token == tSTRING_END) {
13305                 lex_strterm = 0;
13306                 lex_state = EXPR_END;
13307             }
13308         }
13309         else {
13310             token = parse_string(lex_strterm);
13311             if (token == tSTRING_END || token == tREGEXP_END) {
13312                 rb_gc_force_recycle((VALUE)lex_strterm);
13313                 lex_strterm = 0;
13314                 lex_state = EXPR_END;
13315             }
13316         }
13317         return token;
13318     }
13319     cmd_state = command_start;
13320     command_start = FALSE;
13321   retry:
13322     last_state = lex_state;
13323     switch (c = nextc()) {
13324       case '\0':                /* NUL */
13325       case '\004':              /* ^D */
13326       case '\032':              /* ^Z */
13327       case -1:                  /* end of script. */
13328         return 0;
13329 
13330         /* white spaces */
13331       case ' ': case '\t': case '\f': case '\r':
13332       case '\13': /* '\v' */
13333         space_seen = 1;
13334 #ifdef RIPPER
13335         while ((c = nextc())) {
13336             switch (c) {
13337               case ' ': case '\t': case '\f': case '\r':
13338               case '\13': /* '\v' */
13339                 break;
13340               default:
13341                 goto outofloop;
13342             }
13343         }
13344       outofloop:
13345         pushback(c);
13346         ripper_dispatch_scan_event(parser, tSP);
13347 #endif
13348         goto retry;
13349 
13350       case '#':         /* it's a comment */
13351         /* no magic_comment in shebang line */
13352         if (!parser_magic_comment(parser, lex_p, lex_pend - lex_p)) {
13353             if (comment_at_top(parser)) {
13354                 set_file_encoding(parser, lex_p, lex_pend);
13355             }
13356         }
13357         lex_p = lex_pend;
13358 #ifdef RIPPER
13359         ripper_dispatch_scan_event(parser, tCOMMENT);
13360         fallthru = TRUE;
13361 #endif
13362         /* fall through */
13363       case '\n':
13364         if (IS_lex_state(EXPR_BEG | EXPR_VALUE | EXPR_CLASS | EXPR_FNAME | EXPR_DOT)) {
13365 #ifdef RIPPER
13366             if (!fallthru) {
13367                 ripper_dispatch_scan_event(parser, tIGNORED_NL);
13368             }
13369             fallthru = FALSE;
13370 #endif
13371             goto retry;
13372         }
13373         while ((c = nextc())) {
13374             switch (c) {
13375               case ' ': case '\t': case '\f': case '\r':
13376               case '\13': /* '\v' */
13377                 space_seen = 1;
13378                 break;
13379               case '.': {
13380                   if ((c = nextc()) != '.') {
13381                       pushback(c);
13382                       pushback('.');
13383                       goto retry;
13384                   }
13385               }
13386               default:
13387                 --ruby_sourceline;
13388                 lex_nextline = lex_lastline;
13389               case -1:          /* EOF no decrement*/
13390                 lex_goto_eol(parser);
13391 #ifdef RIPPER
13392                 if (c != -1) {
13393                     parser->tokp = lex_p;
13394                 }
13395 #endif
13396                 goto normal_newline;
13397             }
13398         }
13399       normal_newline:
13400         command_start = TRUE;
13401         lex_state = EXPR_BEG;
13402         return '\n';
13403 
13404       case '*':
13405         if ((c = nextc()) == '*') {
13406             if ((c = nextc()) == '=') {
13407                 set_yylval_id(tPOW);
13408                 lex_state = EXPR_BEG;
13409                 return tOP_ASGN;
13410             }
13411             pushback(c);
13412             if (IS_SPCARG(c)) {
13413                 rb_warning0("`**' interpreted as argument prefix");
13414                 c = tDSTAR;
13415             }
13416             else if (IS_BEG()) {
13417                 c = tDSTAR;
13418             }
13419             else {
13420                 warn_balanced("**", "argument prefix");
13421                 c = tPOW;
13422             }
13423         }
13424         else {
13425             if (c == '=') {
13426                 set_yylval_id('*');
13427                 lex_state = EXPR_BEG;
13428                 return tOP_ASGN;
13429             }
13430             pushback(c);
13431             if (IS_SPCARG(c)) {
13432                 rb_warning0("`*' interpreted as argument prefix");
13433                 c = tSTAR;
13434             }
13435             else if (IS_BEG()) {
13436                 c = tSTAR;
13437             }
13438             else {
13439                 warn_balanced("*", "argument prefix");
13440                 c = '*';
13441             }
13442         }
13443         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13444         return c;
13445 
13446       case '!':
13447         c = nextc();
13448         if (IS_AFTER_OPERATOR()) {
13449             lex_state = EXPR_ARG;
13450             if (c == '@') {
13451                 return '!';
13452             }
13453         }
13454         else {
13455             lex_state = EXPR_BEG;
13456         }
13457         if (c == '=') {
13458             return tNEQ;
13459         }
13460         if (c == '~') {
13461             return tNMATCH;
13462         }
13463         pushback(c);
13464         return '!';
13465 
13466       case '=':
13467         if (was_bol()) {
13468             /* skip embedded rd document */
13469             if (strncmp(lex_p, "begin", 5) == 0 && ISSPACE(lex_p[5])) {
13470 #ifdef RIPPER
13471                 int first_p = TRUE;
13472 
13473                 lex_goto_eol(parser);
13474                 ripper_dispatch_scan_event(parser, tEMBDOC_BEG);
13475 #endif
13476                 for (;;) {
13477                     lex_goto_eol(parser);
13478 #ifdef RIPPER
13479                     if (!first_p) {
13480                         ripper_dispatch_scan_event(parser, tEMBDOC);
13481                     }
13482                     first_p = FALSE;
13483 #endif
13484                     c = nextc();
13485                     if (c == -1) {
13486                         compile_error(PARSER_ARG "embedded document meets end of file");
13487                         return 0;
13488                     }
13489                     if (c != '=') continue;
13490                     if (strncmp(lex_p, "end", 3) == 0 &&
13491                         (lex_p + 3 == lex_pend || ISSPACE(lex_p[3]))) {
13492                         break;
13493                     }
13494                 }
13495                 lex_goto_eol(parser);
13496 #ifdef RIPPER
13497                 ripper_dispatch_scan_event(parser, tEMBDOC_END);
13498 #endif
13499                 goto retry;
13500             }
13501         }
13502 
13503         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13504         if ((c = nextc()) == '=') {
13505             if ((c = nextc()) == '=') {
13506                 return tEQQ;
13507             }
13508             pushback(c);
13509             return tEQ;
13510         }
13511         if (c == '~') {
13512             return tMATCH;
13513         }
13514         else if (c == '>') {
13515             return tASSOC;
13516         }
13517         pushback(c);
13518         return '=';
13519 
13520       case '<':
13521         last_state = lex_state;
13522         c = nextc();
13523         if (c == '<' &&
13524             !IS_lex_state(EXPR_DOT | EXPR_CLASS) &&
13525             !IS_END() &&
13526             (!IS_ARG() || space_seen)) {
13527             int token = heredoc_identifier();
13528             if (token) return token;
13529         }
13530         if (IS_AFTER_OPERATOR()) {
13531             lex_state = EXPR_ARG;
13532         }
13533         else {
13534             if (IS_lex_state(EXPR_CLASS))
13535                 command_start = TRUE;
13536             lex_state = EXPR_BEG;
13537         }
13538         if (c == '=') {
13539             if ((c = nextc()) == '>') {
13540                 return tCMP;
13541             }
13542             pushback(c);
13543             return tLEQ;
13544         }
13545         if (c == '<') {
13546             if ((c = nextc()) == '=') {
13547                 set_yylval_id(tLSHFT);
13548                 lex_state = EXPR_BEG;
13549                 return tOP_ASGN;
13550             }
13551             pushback(c);
13552             warn_balanced("<<", "here document");
13553             return tLSHFT;
13554         }
13555         pushback(c);
13556         return '<';
13557 
13558       case '>':
13559         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13560         if ((c = nextc()) == '=') {
13561             return tGEQ;
13562         }
13563         if (c == '>') {
13564             if ((c = nextc()) == '=') {
13565                 set_yylval_id(tRSHFT);
13566                 lex_state = EXPR_BEG;
13567                 return tOP_ASGN;
13568             }
13569             pushback(c);
13570             return tRSHFT;
13571         }
13572         pushback(c);
13573         return '>';
13574 
13575       case '"':
13576         lex_strterm = NEW_STRTERM(str_dquote, '"', 0);
13577         return tSTRING_BEG;
13578 
13579       case '`':
13580         if (IS_lex_state(EXPR_FNAME)) {
13581             lex_state = EXPR_ENDFN;
13582             return c;
13583         }
13584         if (IS_lex_state(EXPR_DOT)) {
13585             if (cmd_state)
13586                 lex_state = EXPR_CMDARG;
13587             else
13588                 lex_state = EXPR_ARG;
13589             return c;
13590         }
13591         lex_strterm = NEW_STRTERM(str_xquote, '`', 0);
13592         return tXSTRING_BEG;
13593 
13594       case '\'':
13595         lex_strterm = NEW_STRTERM(str_squote, '\'', 0);
13596         return tSTRING_BEG;
13597 
13598       case '?':
13599         if (IS_END()) {
13600             lex_state = EXPR_VALUE;
13601             return '?';
13602         }
13603         c = nextc();
13604         if (c == -1) {
13605             compile_error(PARSER_ARG "incomplete character syntax");
13606             return 0;
13607         }
13608         if (rb_enc_isspace(c, current_enc)) {
13609             if (!IS_ARG()) {
13610                 int c2 = 0;
13611                 switch (c) {
13612                   case ' ':
13613                     c2 = 's';
13614                     break;
13615                   case '\n':
13616                     c2 = 'n';
13617                     break;
13618                   case '\t':
13619                     c2 = 't';
13620                     break;
13621                   case '\v':
13622                     c2 = 'v';
13623                     break;
13624                   case '\r':
13625                     c2 = 'r';
13626                     break;
13627                   case '\f':
13628                     c2 = 'f';
13629                     break;
13630                 }
13631                 if (c2) {
13632                     rb_warnI("invalid character syntax; use ?\\%c", c2);
13633                 }
13634             }
13635           ternary:
13636             pushback(c);
13637             lex_state = EXPR_VALUE;
13638             return '?';
13639         }
13640         newtok();
13641         enc = current_enc;
13642         if (!parser_isascii()) {
13643             if (tokadd_mbchar(c) == -1) return 0;
13644         }
13645         else if ((rb_enc_isalnum(c, current_enc) || c == '_') &&
13646                  lex_p < lex_pend && is_identchar(lex_p, lex_pend, current_enc)) {
13647             goto ternary;
13648         }
13649         else if (c == '\\') {
13650             if (peek('u')) {
13651                 nextc();
13652                 c = parser_tokadd_utf8(parser, &enc, 0, 0, 0);
13653                 if (0x80 <= c) {
13654                     tokaddmbc(c, enc);
13655                 }
13656                 else {
13657                     tokadd(c);
13658                 }
13659             }
13660             else if (!lex_eol_p() && !(c = *lex_p, ISASCII(c))) {
13661                 nextc();
13662                 if (tokadd_mbchar(c) == -1) return 0;
13663             }
13664             else {
13665                 c = read_escape(0, &enc);
13666                 tokadd(c);
13667             }
13668         }
13669         else {
13670             tokadd(c);
13671         }
13672         tokfix();
13673         set_yylval_str(STR_NEW3(tok(), toklen(), enc, 0));
13674         lex_state = EXPR_END;
13675         return tCHAR;
13676 
13677       case '&':
13678         if ((c = nextc()) == '&') {
13679             lex_state = EXPR_BEG;
13680             if ((c = nextc()) == '=') {
13681                 set_yylval_id(tANDOP);
13682                 lex_state = EXPR_BEG;
13683                 return tOP_ASGN;
13684             }
13685             pushback(c);
13686             return tANDOP;
13687         }
13688         else if (c == '=') {
13689             set_yylval_id('&');
13690             lex_state = EXPR_BEG;
13691             return tOP_ASGN;
13692         }
13693         pushback(c);
13694         if (IS_SPCARG(c)) {
13695             rb_warning0("`&' interpreted as argument prefix");
13696             c = tAMPER;
13697         }
13698         else if (IS_BEG()) {
13699             c = tAMPER;
13700         }
13701         else {
13702             warn_balanced("&", "argument prefix");
13703             c = '&';
13704         }
13705         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13706         return c;
13707 
13708       case '|':
13709         if ((c = nextc()) == '|') {
13710             lex_state = EXPR_BEG;
13711             if ((c = nextc()) == '=') {
13712                 set_yylval_id(tOROP);
13713                 lex_state = EXPR_BEG;
13714                 return tOP_ASGN;
13715             }
13716             pushback(c);
13717             return tOROP;
13718         }
13719         if (c == '=') {
13720             set_yylval_id('|');
13721             lex_state = EXPR_BEG;
13722             return tOP_ASGN;
13723         }
13724         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
13725         pushback(c);
13726         return '|';
13727 
13728       case '+':
13729         c = nextc();
13730         if (IS_AFTER_OPERATOR()) {
13731             lex_state = EXPR_ARG;
13732             if (c == '@') {
13733                 return tUPLUS;
13734             }
13735             pushback(c);
13736             return '+';
13737         }
13738         if (c == '=') {
13739             set_yylval_id('+');
13740             lex_state = EXPR_BEG;
13741             return tOP_ASGN;
13742         }
13743         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13744             lex_state = EXPR_BEG;
13745             pushback(c);
13746             if (c != -1 && ISDIGIT(c)) {
13747                 c = '+';
13748                 goto start_num;
13749             }
13750             return tUPLUS;
13751         }
13752         lex_state = EXPR_BEG;
13753         pushback(c);
13754         warn_balanced("+", "unary operator");
13755         return '+';
13756 
13757       case '-':
13758         c = nextc();
13759         if (IS_AFTER_OPERATOR()) {
13760             lex_state = EXPR_ARG;
13761             if (c == '@') {
13762                 return tUMINUS;
13763             }
13764             pushback(c);
13765             return '-';
13766         }
13767         if (c == '=') {
13768             set_yylval_id('-');
13769             lex_state = EXPR_BEG;
13770             return tOP_ASGN;
13771         }
13772         if (c == '>') {
13773             lex_state = EXPR_ENDFN;
13774             return tLAMBDA;
13775         }
13776         if (IS_BEG() || (IS_SPCARG(c) && arg_ambiguous())) {
13777             lex_state = EXPR_BEG;
13778             pushback(c);
13779             if (c != -1 && ISDIGIT(c)) {
13780                 return tUMINUS_NUM;
13781             }
13782             return tUMINUS;
13783         }
13784         lex_state = EXPR_BEG;
13785         pushback(c);
13786         warn_balanced("-", "unary operator");
13787         return '-';
13788 
13789       case '.':
13790         lex_state = EXPR_BEG;
13791         if ((c = nextc()) == '.') {
13792             if ((c = nextc()) == '.') {
13793                 return tDOT3;
13794             }
13795             pushback(c);
13796             return tDOT2;
13797         }
13798         pushback(c);
13799         if (c != -1 && ISDIGIT(c)) {
13800             yyerror("no .<digit> floating literal anymore; put 0 before dot");
13801         }
13802         lex_state = EXPR_DOT;
13803         return '.';
13804 
13805       start_num:
13806       case '0': case '1': case '2': case '3': case '4':
13807       case '5': case '6': case '7': case '8': case '9':
13808         {
13809             int is_float, seen_point, seen_e, nondigit;
13810 
13811             is_float = seen_point = seen_e = nondigit = 0;
13812             lex_state = EXPR_END;
13813             newtok();
13814             if (c == '-' || c == '+') {
13815                 tokadd(c);
13816                 c = nextc();
13817             }
13818             if (c == '0') {
13819 #define no_digits() do {yyerror("numeric literal without digits"); return 0;} while (0)
13820                 int start = toklen();
13821                 c = nextc();
13822                 if (c == 'x' || c == 'X') {
13823                     /* hexadecimal */
13824                     c = nextc();
13825                     if (c != -1 && ISXDIGIT(c)) {
13826                         do {
13827                             if (c == '_') {
13828                                 if (nondigit) break;
13829                                 nondigit = c;
13830                                 continue;
13831                             }
13832                             if (!ISXDIGIT(c)) break;
13833                             nondigit = 0;
13834                             tokadd(c);
13835                         } while ((c = nextc()) != -1);
13836                     }
13837                     pushback(c);
13838                     tokfix();
13839                     if (toklen() == start) {
13840                         no_digits();
13841                     }
13842                     else if (nondigit) goto trailing_uc;
13843                     set_yylval_literal(rb_cstr_to_inum(tok(), 16, FALSE));
13844                     return tINTEGER;
13845                 }
13846                 if (c == 'b' || c == 'B') {
13847                     /* binary */
13848                     c = nextc();
13849                     if (c == '0' || c == '1') {
13850                         do {
13851                             if (c == '_') {
13852                                 if (nondigit) break;
13853                                 nondigit = c;
13854                                 continue;
13855                             }
13856                             if (c != '0' && c != '1') break;
13857                             nondigit = 0;
13858                             tokadd(c);
13859                         } while ((c = nextc()) != -1);
13860                     }
13861                     pushback(c);
13862                     tokfix();
13863                     if (toklen() == start) {
13864                         no_digits();
13865                     }
13866                     else if (nondigit) goto trailing_uc;
13867                     set_yylval_literal(rb_cstr_to_inum(tok(), 2, FALSE));
13868                     return tINTEGER;
13869                 }
13870                 if (c == 'd' || c == 'D') {
13871                     /* decimal */
13872                     c = nextc();
13873                     if (c != -1 && ISDIGIT(c)) {
13874                         do {
13875                             if (c == '_') {
13876                                 if (nondigit) break;
13877                                 nondigit = c;
13878                                 continue;
13879                             }
13880                             if (!ISDIGIT(c)) break;
13881                             nondigit = 0;
13882                             tokadd(c);
13883                         } while ((c = nextc()) != -1);
13884                     }
13885                     pushback(c);
13886                     tokfix();
13887                     if (toklen() == start) {
13888                         no_digits();
13889                     }
13890                     else if (nondigit) goto trailing_uc;
13891                     set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
13892                     return tINTEGER;
13893                 }
13894                 if (c == '_') {
13895                     /* 0_0 */
13896                     goto octal_number;
13897                 }
13898                 if (c == 'o' || c == 'O') {
13899                     /* prefixed octal */
13900                     c = nextc();
13901                     if (c == -1 || c == '_' || !ISDIGIT(c)) {
13902                         no_digits();
13903                     }
13904                 }
13905                 if (c >= '0' && c <= '7') {
13906                     /* octal */
13907                   octal_number:
13908                     do {
13909                         if (c == '_') {
13910                             if (nondigit) break;
13911                             nondigit = c;
13912                             continue;
13913                         }
13914                         if (c < '0' || c > '9') break;
13915                         if (c > '7') goto invalid_octal;
13916                         nondigit = 0;
13917                         tokadd(c);
13918                     } while ((c = nextc()) != -1);
13919                     if (toklen() > start) {
13920                         pushback(c);
13921                         tokfix();
13922                         if (nondigit) goto trailing_uc;
13923                         set_yylval_literal(rb_cstr_to_inum(tok(), 8, FALSE));
13924                         return tINTEGER;
13925                     }
13926                     if (nondigit) {
13927                         pushback(c);
13928                         goto trailing_uc;
13929                     }
13930                 }
13931                 if (c > '7' && c <= '9') {
13932                   invalid_octal:
13933                     yyerror("Invalid octal digit");
13934                 }
13935                 else if (c == '.' || c == 'e' || c == 'E') {
13936                     tokadd('0');
13937                 }
13938                 else {
13939                     pushback(c);
13940                     set_yylval_literal(INT2FIX(0));
13941                     return tINTEGER;
13942                 }
13943             }
13944 
13945             for (;;) {
13946                 switch (c) {
13947                   case '0': case '1': case '2': case '3': case '4':
13948                   case '5': case '6': case '7': case '8': case '9':
13949                     nondigit = 0;
13950                     tokadd(c);
13951                     break;
13952 
13953                   case '.':
13954                     if (nondigit) goto trailing_uc;
13955                     if (seen_point || seen_e) {
13956                         goto decode_num;
13957                     }
13958                     else {
13959                         int c0 = nextc();
13960                         if (c0 == -1 || !ISDIGIT(c0)) {
13961                             pushback(c0);
13962                             goto decode_num;
13963                         }
13964                         c = c0;
13965                     }
13966                     tokadd('.');
13967                     tokadd(c);
13968                     is_float++;
13969                     seen_point++;
13970                     nondigit = 0;
13971                     break;
13972 
13973                   case 'e':
13974                   case 'E':
13975                     if (nondigit) {
13976                         pushback(c);
13977                         c = nondigit;
13978                         goto decode_num;
13979                     }
13980                     if (seen_e) {
13981                         goto decode_num;
13982                     }
13983                     tokadd(c);
13984                     seen_e++;
13985                     is_float++;
13986                     nondigit = c;
13987                     c = nextc();
13988                     if (c != '-' && c != '+') continue;
13989                     tokadd(c);
13990                     nondigit = c;
13991                     break;
13992 
13993                   case '_':     /* `_' in number just ignored */
13994                     if (nondigit) goto decode_num;
13995                     nondigit = c;
13996                     break;
13997 
13998                   default:
13999                     goto decode_num;
14000                 }
14001                 c = nextc();
14002             }
14003 
14004           decode_num:
14005             pushback(c);
14006             if (nondigit) {
14007                 char tmp[30];
14008               trailing_uc:
14009                 snprintf(tmp, sizeof(tmp), "trailing `%c' in number", nondigit);
14010                 yyerror(tmp);
14011             }
14012             tokfix();
14013             if (is_float) {
14014                 double d = strtod(tok(), 0);
14015                 if (errno == ERANGE) {
14016                     rb_warningS("Float %s out of range", tok());
14017                     errno = 0;
14018                 }
14019                 set_yylval_literal(DBL2NUM(d));
14020                 return tFLOAT;
14021             }
14022             set_yylval_literal(rb_cstr_to_inum(tok(), 10, FALSE));
14023             return tINTEGER;
14024         }
14025 
14026       case ')':
14027       case ']':
14028         paren_nest--;
14029       case '}':
14030         COND_LEXPOP();
14031         CMDARG_LEXPOP();
14032         if (c == ')')
14033             lex_state = EXPR_ENDFN;
14034         else
14035             lex_state = EXPR_ENDARG;
14036         if (c == '}') {
14037             if (!brace_nest--) c = tSTRING_DEND;
14038         }
14039         return c;
14040 
14041       case ':':
14042         c = nextc();
14043         if (c == ':') {
14044             if (IS_BEG() || IS_lex_state(EXPR_CLASS) || IS_SPCARG(-1)) {
14045                 lex_state = EXPR_BEG;
14046                 return tCOLON3;
14047             }
14048             lex_state = EXPR_DOT;
14049             return tCOLON2;
14050         }
14051         if (IS_END() || ISSPACE(c)) {
14052             pushback(c);
14053             warn_balanced(":", "symbol literal");
14054             lex_state = EXPR_BEG;
14055             return ':';
14056         }
14057         switch (c) {
14058           case '\'':
14059             lex_strterm = NEW_STRTERM(str_ssym, c, 0);
14060             break;
14061           case '"':
14062             lex_strterm = NEW_STRTERM(str_dsym, c, 0);
14063             break;
14064           default:
14065             pushback(c);
14066             break;
14067         }
14068         lex_state = EXPR_FNAME;
14069         return tSYMBEG;
14070 
14071       case '/':
14072         if (IS_lex_state(EXPR_BEG_ANY)) {
14073             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14074             return tREGEXP_BEG;
14075         }
14076         if ((c = nextc()) == '=') {
14077             set_yylval_id('/');
14078             lex_state = EXPR_BEG;
14079             return tOP_ASGN;
14080         }
14081         pushback(c);
14082         if (IS_SPCARG(c)) {
14083             (void)arg_ambiguous();
14084             lex_strterm = NEW_STRTERM(str_regexp, '/', 0);
14085             return tREGEXP_BEG;
14086         }
14087         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14088         warn_balanced("/", "regexp literal");
14089         return '/';
14090 
14091       case '^':
14092         if ((c = nextc()) == '=') {
14093             set_yylval_id('^');
14094             lex_state = EXPR_BEG;
14095             return tOP_ASGN;
14096         }
14097         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14098         pushback(c);
14099         return '^';
14100 
14101       case ';':
14102         lex_state = EXPR_BEG;
14103         command_start = TRUE;
14104         return ';';
14105 
14106       case ',':
14107         lex_state = EXPR_BEG;
14108         return ',';
14109 
14110       case '~':
14111         if (IS_AFTER_OPERATOR()) {
14112             if ((c = nextc()) != '@') {
14113                 pushback(c);
14114             }
14115             lex_state = EXPR_ARG;
14116         }
14117         else {
14118             lex_state = EXPR_BEG;
14119         }
14120         return '~';
14121 
14122       case '(':
14123         if (IS_BEG()) {
14124             c = tLPAREN;
14125         }
14126         else if (IS_SPCARG(-1)) {
14127             c = tLPAREN_ARG;
14128         }
14129         paren_nest++;
14130         COND_PUSH(0);
14131         CMDARG_PUSH(0);
14132         lex_state = EXPR_BEG;
14133         return c;
14134 
14135       case '[':
14136         paren_nest++;
14137         if (IS_AFTER_OPERATOR()) {
14138             lex_state = EXPR_ARG;
14139             if ((c = nextc()) == ']') {
14140                 if ((c = nextc()) == '=') {
14141                     return tASET;
14142                 }
14143                 pushback(c);
14144                 return tAREF;
14145             }
14146             pushback(c);
14147             return '[';
14148         }
14149         else if (IS_BEG()) {
14150             c = tLBRACK;
14151         }
14152         else if (IS_ARG() && space_seen) {
14153             c = tLBRACK;
14154         }
14155         lex_state = EXPR_BEG;
14156         COND_PUSH(0);
14157         CMDARG_PUSH(0);
14158         return c;
14159 
14160       case '{':
14161         ++brace_nest;
14162         if (lpar_beg && lpar_beg == paren_nest) {
14163             lex_state = EXPR_BEG;
14164             lpar_beg = 0;
14165             --paren_nest;
14166             COND_PUSH(0);
14167             CMDARG_PUSH(0);
14168             return tLAMBEG;
14169         }
14170         if (IS_ARG() || IS_lex_state(EXPR_END | EXPR_ENDFN))
14171             c = '{';          /* block (primary) */
14172         else if (IS_lex_state(EXPR_ENDARG))
14173             c = tLBRACE_ARG;  /* block (expr) */
14174         else
14175             c = tLBRACE;      /* hash */
14176         COND_PUSH(0);
14177         CMDARG_PUSH(0);
14178         lex_state = EXPR_BEG;
14179         if (c != tLBRACE) command_start = TRUE;
14180         return c;
14181 
14182       case '\\':
14183         c = nextc();
14184         if (c == '\n') {
14185             space_seen = 1;
14186 #ifdef RIPPER
14187             ripper_dispatch_scan_event(parser, tSP);
14188 #endif
14189             goto retry; /* skip \\n */
14190         }
14191         pushback(c);
14192         return '\\';
14193 
14194       case '%':
14195         if (IS_lex_state(EXPR_BEG_ANY)) {
14196             int term;
14197             int paren;
14198 
14199             c = nextc();
14200           quotation:
14201             if (c == -1 || !ISALNUM(c)) {
14202                 term = c;
14203                 c = 'Q';
14204             }
14205             else {
14206                 term = nextc();
14207                 if (rb_enc_isalnum(term, current_enc) || !parser_isascii()) {
14208                     yyerror("unknown type of %string");
14209                     return 0;
14210                 }
14211             }
14212             if (c == -1 || term == -1) {
14213                 compile_error(PARSER_ARG "unterminated quoted string meets end of file");
14214                 return 0;
14215             }
14216             paren = term;
14217             if (term == '(') term = ')';
14218             else if (term == '[') term = ']';
14219             else if (term == '{') term = '}';
14220             else if (term == '<') term = '>';
14221             else paren = 0;
14222 
14223             switch (c) {
14224               case 'Q':
14225                 lex_strterm = NEW_STRTERM(str_dquote, term, paren);
14226                 return tSTRING_BEG;
14227 
14228               case 'q':
14229                 lex_strterm = NEW_STRTERM(str_squote, term, paren);
14230                 return tSTRING_BEG;
14231 
14232               case 'W':
14233                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
14234                 do {c = nextc();} while (ISSPACE(c));
14235                 pushback(c);
14236                 return tWORDS_BEG;
14237 
14238               case 'w':
14239                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
14240                 do {c = nextc();} while (ISSPACE(c));
14241                 pushback(c);
14242                 return tQWORDS_BEG;
14243 
14244               case 'I':
14245                 lex_strterm = NEW_STRTERM(str_dword, term, paren);
14246                 do {c = nextc();} while (ISSPACE(c));
14247                 pushback(c);
14248                 return tSYMBOLS_BEG;
14249 
14250               case 'i':
14251                 lex_strterm = NEW_STRTERM(str_sword, term, paren);
14252                 do {c = nextc();} while (ISSPACE(c));
14253                 pushback(c);
14254                 return tQSYMBOLS_BEG;
14255 
14256               case 'x':
14257                 lex_strterm = NEW_STRTERM(str_xquote, term, paren);
14258                 return tXSTRING_BEG;
14259 
14260               case 'r':
14261                 lex_strterm = NEW_STRTERM(str_regexp, term, paren);
14262                 return tREGEXP_BEG;
14263 
14264               case 's':
14265                 lex_strterm = NEW_STRTERM(str_ssym, term, paren);
14266                 lex_state = EXPR_FNAME;
14267                 return tSYMBEG;
14268 
14269               default:
14270                 yyerror("unknown type of %string");
14271                 return 0;
14272             }
14273         }
14274         if ((c = nextc()) == '=') {
14275             set_yylval_id('%');
14276             lex_state = EXPR_BEG;
14277             return tOP_ASGN;
14278         }
14279         if (IS_SPCARG(c)) {
14280             goto quotation;
14281         }
14282         lex_state = IS_AFTER_OPERATOR() ? EXPR_ARG : EXPR_BEG;
14283         pushback(c);
14284         warn_balanced("%%", "string literal");
14285         return '%';
14286 
14287       case '$':
14288         lex_state = EXPR_END;
14289         newtok();
14290         c = nextc();
14291         switch (c) {
14292           case '_':             /* $_: last read line string */
14293             c = nextc();
14294             if (parser_is_identchar()) {
14295                 tokadd('$');
14296                 tokadd('_');
14297                 break;
14298             }
14299             pushback(c);
14300             c = '_';
14301             /* fall through */
14302           case '~':             /* $~: match-data */
14303           case '*':             /* $*: argv */
14304           case '$':             /* $$: pid */
14305           case '?':             /* $?: last status */
14306           case '!':             /* $!: error string */
14307           case '@':             /* $@: error position */
14308           case '/':             /* $/: input record separator */
14309           case '\\':            /* $\: output record separator */
14310           case ';':             /* $;: field separator */
14311           case ',':             /* $,: output field separator */
14312           case '.':             /* $.: last read line number */
14313           case '=':             /* $=: ignorecase */
14314           case ':':             /* $:: load path */
14315           case '<':             /* $<: reading filename */
14316           case '>':             /* $>: default output handle */
14317           case '\"':            /* $": already loaded files */
14318             tokadd('$');
14319             tokadd(c);
14320             tokfix();
14321             set_yylval_name(rb_intern(tok()));
14322             return tGVAR;
14323 
14324           case '-':
14325             tokadd('$');
14326             tokadd(c);
14327             c = nextc();
14328             if (parser_is_identchar()) {
14329                 if (tokadd_mbchar(c) == -1) return 0;
14330             }
14331             else {
14332                 pushback(c);
14333             }
14334           gvar:
14335             tokfix();
14336             set_yylval_name(rb_intern(tok()));
14337             return tGVAR;
14338 
14339           case '&':             /* $&: last match */
14340           case '`':             /* $`: string before last match */
14341           case '\'':            /* $': string after last match */
14342           case '+':             /* $+: string matches last paren. */
14343             if (IS_lex_state_for(last_state, EXPR_FNAME)) {
14344                 tokadd('$');
14345                 tokadd(c);
14346                 goto gvar;
14347             }
14348             set_yylval_node(NEW_BACK_REF(c));
14349             return tBACK_REF;
14350 
14351           case '1': case '2': case '3':
14352           case '4': case '5': case '6':
14353           case '7': case '8': case '9':
14354             tokadd('$');
14355             do {
14356                 tokadd(c);
14357                 c = nextc();
14358             } while (c != -1 && ISDIGIT(c));
14359             pushback(c);
14360             if (IS_lex_state_for(last_state, EXPR_FNAME)) goto gvar;
14361             tokfix();
14362             set_yylval_node(NEW_NTH_REF(atoi(tok()+1)));
14363             return tNTH_REF;
14364 
14365           default:
14366             if (!parser_is_identchar()) {
14367                 pushback(c);
14368                 compile_error(PARSER_ARG "`$%c' is not allowed as a global variable name", c);
14369                 return 0;
14370             }
14371           case '0':
14372             tokadd('$');
14373         }
14374         break;
14375 
14376       case '@':
14377         c = nextc();
14378         newtok();
14379         tokadd('@');
14380         if (c == '@') {
14381             tokadd('@');
14382             c = nextc();
14383         }
14384         if (c != -1 && (ISDIGIT(c) || !parser_is_identchar())) {
14385             pushback(c);
14386             if (tokidx == 1) {
14387                 compile_error(PARSER_ARG "`@%c' is not allowed as an instance variable name", c);
14388             }
14389             else {
14390                 compile_error(PARSER_ARG "`@@%c' is not allowed as a class variable name", c);
14391             }
14392             return 0;
14393         }
14394         break;
14395 
14396       case '_':
14397         if (was_bol() && whole_match_p("__END__", 7, 0)) {
14398             ruby__end__seen = 1;
14399             parser->eofp = Qtrue;
14400 #ifndef RIPPER
14401             return -1;
14402 #else
14403             lex_goto_eol(parser);
14404             ripper_dispatch_scan_event(parser, k__END__);
14405             return 0;
14406 #endif
14407         }
14408         newtok();
14409         break;
14410 
14411       default:
14412         if (!parser_is_identchar()) {
14413             compile_error(PARSER_ARG  "Invalid char `\\x%02X' in expression", c);
14414             goto retry;
14415         }
14416 
14417         newtok();
14418         break;
14419     }
14420 
14421     mb = ENC_CODERANGE_7BIT;
14422     do {
14423         if (!ISASCII(c)) mb = ENC_CODERANGE_UNKNOWN;
14424         if (tokadd_mbchar(c) == -1) return 0;
14425         c = nextc();
14426     } while (parser_is_identchar());
14427     switch (tok()[0]) {
14428       case '@': case '$':
14429         pushback(c);
14430         break;
14431       default:
14432         if ((c == '!' || c == '?') && !peek('=')) {
14433             tokadd(c);
14434         }
14435         else {
14436             pushback(c);
14437         }
14438     }
14439     tokfix();
14440 
14441     {
14442         int result = 0;
14443 
14444         last_state = lex_state;
14445         switch (tok()[0]) {
14446           case '$':
14447             lex_state = EXPR_END;
14448             result = tGVAR;
14449             break;
14450           case '@':
14451             lex_state = EXPR_END;
14452             if (tok()[1] == '@')
14453                 result = tCVAR;
14454             else
14455                 result = tIVAR;
14456             break;
14457 
14458           default:
14459             if (toklast() == '!' || toklast() == '?') {
14460                 result = tFID;
14461             }
14462             else {
14463                 if (IS_lex_state(EXPR_FNAME)) {
14464                     if ((c = nextc()) == '=' && !peek('~') && !peek('>') &&
14465                         (!peek('=') || (peek_n('>', 1)))) {
14466                         result = tIDENTIFIER;
14467                         tokadd(c);
14468                         tokfix();
14469                     }
14470                     else {
14471                         pushback(c);
14472                     }
14473                 }
14474                 if (result == 0 && ISUPPER(tok()[0])) {
14475                     result = tCONSTANT;
14476                 }
14477                 else {
14478                     result = tIDENTIFIER;
14479                 }
14480             }
14481 
14482             if (IS_LABEL_POSSIBLE()) {
14483                 if (IS_LABEL_SUFFIX(0)) {
14484                     lex_state = EXPR_BEG;
14485                     nextc();
14486                     set_yylval_name(TOK_INTERN(!ENC_SINGLE(mb)));
14487                     return tLABEL;
14488                 }
14489             }
14490             if (mb == ENC_CODERANGE_7BIT && !IS_lex_state(EXPR_DOT)) {
14491                 const struct kwtable *kw;
14492 
14493                 /* See if it is a reserved word.  */
14494                 kw = rb_reserved_word(tok(), toklen());
14495                 if (kw) {
14496                     enum lex_state_e state = lex_state;
14497                     lex_state = kw->state;
14498                     if (state == EXPR_FNAME) {
14499                         set_yylval_name(rb_intern(kw->name));
14500                         return kw->id[0];
14501                     }
14502                     if (lex_state == EXPR_BEG) {
14503                         command_start = TRUE;
14504                     }
14505                     if (kw->id[0] == keyword_do) {
14506                         if (lpar_beg && lpar_beg == paren_nest) {
14507                             lpar_beg = 0;
14508                             --paren_nest;
14509                             return keyword_do_LAMBDA;
14510                         }
14511                         if (COND_P()) return keyword_do_cond;
14512                         if (CMDARG_P() && state != EXPR_CMDARG)
14513                             return keyword_do_block;
14514                         if (state & (EXPR_BEG | EXPR_ENDARG))
14515                             return keyword_do_block;
14516                         return keyword_do;
14517                     }
14518                     if (state & (EXPR_BEG | EXPR_VALUE))
14519                         return kw->id[0];
14520                     else {
14521                         if (kw->id[0] != kw->id[1])
14522                             lex_state = EXPR_BEG;
14523                         return kw->id[1];
14524                     }
14525                 }
14526             }
14527 
14528             if (IS_lex_state(EXPR_BEG_ANY | EXPR_ARG_ANY | EXPR_DOT)) {
14529                 if (cmd_state) {
14530                     lex_state = EXPR_CMDARG;
14531                 }
14532                 else {
14533                     lex_state = EXPR_ARG;
14534                 }
14535             }
14536             else if (lex_state == EXPR_FNAME) {
14537                 lex_state = EXPR_ENDFN;
14538             }
14539             else {
14540                 lex_state = EXPR_END;
14541             }
14542         }
14543         {
14544             ID ident = TOK_INTERN(!ENC_SINGLE(mb));
14545 
14546             set_yylval_name(ident);
14547             if (!IS_lex_state_for(last_state, EXPR_DOT|EXPR_FNAME) &&
14548                 is_local_id(ident) && lvar_defined(ident)) {
14549                 lex_state = EXPR_END;
14550             }
14551         }
14552         return result;
14553     }
14554 }
14555 
14556 #if YYPURE
14557 static int
14558 yylex(void *lval, void *p)
14559 #else
14560 yylex(void *p)
14561 #endif
14562 {
14563     struct parser_params *parser = (struct parser_params*)p;
14564     int t;
14565 
14566 #if YYPURE
14567     parser->parser_yylval = lval;
14568     parser->parser_yylval->val = Qundef;
14569 #endif
14570     t = parser_yylex(parser);
14571 #ifdef RIPPER
14572     if (!NIL_P(parser->delayed)) {
14573         ripper_dispatch_delayed_token(parser, t);
14574         return t;
14575     }
14576     if (t != 0)
14577         ripper_dispatch_scan_event(parser, t);
14578 #endif
14579 
14580     return t;
14581 }
14582 
14583 #ifndef RIPPER
14584 static NODE*
14585 node_newnode(struct parser_params *parser, enum node_type type, VALUE a0, VALUE a1, VALUE a2)
14586 {
14587     NODE *n = (rb_node_newnode)(type, a0, a1, a2);
14588     nd_set_line(n, ruby_sourceline);
14589     return n;
14590 }
14591 
14592 static enum node_type
14593 nodetype(NODE *node)                    /* for debug */
14594 {
14595     return (enum node_type)nd_type(node);
14596 }
14597 
14598 static int
14599 nodeline(NODE *node)
14600 {
14601     return nd_line(node);
14602 }
14603 
14604 static NODE*
14605 newline_node(NODE *node)
14606 {
14607     if (node) {
14608         node = remove_begin(node);
14609         node->flags |= NODE_FL_NEWLINE;
14610     }
14611     return node;
14612 }
14613 
14614 static void
14615 fixpos(NODE *node, NODE *orig)
14616 {
14617     if (!node) return;
14618     if (!orig) return;
14619     if (orig == (NODE*)1) return;
14620     nd_set_line(node, nd_line(orig));
14621 }
14622 
14623 static void
14624 parser_warning(struct parser_params *parser, NODE *node, const char *mesg)
14625 {
14626     rb_compile_warning(ruby_sourcefile, nd_line(node), "%s", mesg);
14627 }
14628 #define parser_warning(node, mesg) parser_warning(parser, (node), (mesg))
14629 
14630 static void
14631 parser_warn(struct parser_params *parser, NODE *node, const char *mesg)
14632 {
14633     rb_compile_warn(ruby_sourcefile, nd_line(node), "%s", mesg);
14634 }
14635 #define parser_warn(node, mesg) parser_warn(parser, (node), (mesg))
14636 
14637 static NODE*
14638 block_append_gen(struct parser_params *parser, NODE *head, NODE *tail)
14639 {
14640     NODE *end, *h = head, *nd;
14641 
14642     if (tail == 0) return head;
14643 
14644     if (h == 0) return tail;
14645     switch (nd_type(h)) {
14646       case NODE_LIT:
14647       case NODE_STR:
14648       case NODE_SELF:
14649       case NODE_TRUE:
14650       case NODE_FALSE:
14651       case NODE_NIL:
14652         parser_warning(h, "unused literal ignored");
14653         return tail;
14654       default:
14655         h = end = NEW_BLOCK(head);
14656         end->nd_end = end;
14657         fixpos(end, head);
14658         head = end;
14659         break;
14660       case NODE_BLOCK:
14661         end = h->nd_end;
14662         break;
14663     }
14664 
14665     nd = end->nd_head;
14666     switch (nd_type(nd)) {
14667       case NODE_RETURN:
14668       case NODE_BREAK:
14669       case NODE_NEXT:
14670       case NODE_REDO:
14671       case NODE_RETRY:
14672         if (RTEST(ruby_verbose)) {
14673             parser_warning(tail, "statement not reached");
14674         }
14675         break;
14676 
14677       default:
14678         break;
14679     }
14680 
14681     if (nd_type(tail) != NODE_BLOCK) {
14682         tail = NEW_BLOCK(tail);
14683         tail->nd_end = tail;
14684     }
14685     end->nd_next = tail;
14686     h->nd_end = tail->nd_end;
14687     return head;
14688 }
14689 
14690 /* append item to the list */
14691 static NODE*
14692 list_append_gen(struct parser_params *parser, NODE *list, NODE *item)
14693 {
14694     NODE *last;
14695 
14696     if (list == 0) return NEW_LIST(item);
14697     if (list->nd_next) {
14698         last = list->nd_next->nd_end;
14699     }
14700     else {
14701         last = list;
14702     }
14703 
14704     list->nd_alen += 1;
14705     last->nd_next = NEW_LIST(item);
14706     list->nd_next->nd_end = last->nd_next;
14707     return list;
14708 }
14709 
14710 /* concat two lists */
14711 static NODE*
14712 list_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14713 {
14714     NODE *last;
14715 
14716     if (head->nd_next) {
14717         last = head->nd_next->nd_end;
14718     }
14719     else {
14720         last = head;
14721     }
14722 
14723     head->nd_alen += tail->nd_alen;
14724     last->nd_next = tail;
14725     if (tail->nd_next) {
14726         head->nd_next->nd_end = tail->nd_next->nd_end;
14727     }
14728     else {
14729         head->nd_next->nd_end = tail;
14730     }
14731 
14732     return head;
14733 }
14734 
14735 static int
14736 literal_concat0(struct parser_params *parser, VALUE head, VALUE tail)
14737 {
14738     if (NIL_P(tail)) return 1;
14739     if (!rb_enc_compatible(head, tail)) {
14740         compile_error(PARSER_ARG "string literal encodings differ (%s / %s)",
14741                       rb_enc_name(rb_enc_get(head)),
14742                       rb_enc_name(rb_enc_get(tail)));
14743         rb_str_resize(head, 0);
14744         rb_str_resize(tail, 0);
14745         return 0;
14746     }
14747     rb_str_buf_append(head, tail);
14748     return 1;
14749 }
14750 
14751 /* concat two string literals */
14752 static NODE *
14753 literal_concat_gen(struct parser_params *parser, NODE *head, NODE *tail)
14754 {
14755     enum node_type htype;
14756     NODE *headlast;
14757     VALUE lit;
14758 
14759     if (!head) return tail;
14760     if (!tail) return head;
14761 
14762     htype = nd_type(head);
14763     if (htype == NODE_EVSTR) {
14764         NODE *node = NEW_DSTR(Qnil);
14765         head = list_append(node, head);
14766         htype = NODE_DSTR;
14767     }
14768     switch (nd_type(tail)) {
14769       case NODE_STR:
14770         if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14771             nd_type(headlast) == NODE_STR) {
14772             htype = NODE_STR;
14773             lit = headlast->nd_lit;
14774         }
14775         else {
14776             lit = head->nd_lit;
14777         }
14778         if (htype == NODE_STR) {
14779             if (!literal_concat0(parser, lit, tail->nd_lit)) {
14780               error:
14781                 rb_gc_force_recycle((VALUE)head);
14782                 rb_gc_force_recycle((VALUE)tail);
14783                 return 0;
14784             }
14785             rb_gc_force_recycle((VALUE)tail);
14786         }
14787         else {
14788             list_append(head, tail);
14789         }
14790         break;
14791 
14792       case NODE_DSTR:
14793         if (htype == NODE_STR) {
14794             if (!literal_concat0(parser, head->nd_lit, tail->nd_lit))
14795                 goto error;
14796             tail->nd_lit = head->nd_lit;
14797             rb_gc_force_recycle((VALUE)head);
14798             head = tail;
14799         }
14800         else if (NIL_P(tail->nd_lit)) {
14801           append:
14802             head->nd_alen += tail->nd_alen - 1;
14803             head->nd_next->nd_end->nd_next = tail->nd_next;
14804             head->nd_next->nd_end = tail->nd_next->nd_end;
14805             rb_gc_force_recycle((VALUE)tail);
14806         }
14807         else if (htype == NODE_DSTR && (headlast = head->nd_next->nd_end->nd_head) &&
14808                  nd_type(headlast) == NODE_STR) {
14809             lit = headlast->nd_lit;
14810             if (!literal_concat0(parser, lit, tail->nd_lit))
14811                 goto error;
14812             tail->nd_lit = Qnil;
14813             goto append;
14814         }
14815         else {
14816             nd_set_type(tail, NODE_ARRAY);
14817             tail->nd_head = NEW_STR(tail->nd_lit);
14818             list_concat(head, tail);
14819         }
14820         break;
14821 
14822       case NODE_EVSTR:
14823         if (htype == NODE_STR) {
14824             nd_set_type(head, NODE_DSTR);
14825             head->nd_alen = 1;
14826         }
14827         list_append(head, tail);
14828         break;
14829     }
14830     return head;
14831 }
14832 
14833 static NODE *
14834 evstr2dstr_gen(struct parser_params *parser, NODE *node)
14835 {
14836     if (nd_type(node) == NODE_EVSTR) {
14837         node = list_append(NEW_DSTR(Qnil), node);
14838     }
14839     return node;
14840 }
14841 
14842 static NODE *
14843 new_evstr_gen(struct parser_params *parser, NODE *node)
14844 {
14845     NODE *head = node;
14846 
14847     if (node) {
14848         switch (nd_type(node)) {
14849           case NODE_STR: case NODE_DSTR: case NODE_EVSTR:
14850             return node;
14851         }
14852     }
14853     return NEW_EVSTR(head);
14854 }
14855 
14856 static NODE *
14857 call_bin_op_gen(struct parser_params *parser, NODE *recv, ID id, NODE *arg1)
14858 {
14859     value_expr(recv);
14860     value_expr(arg1);
14861     return NEW_CALL(recv, id, NEW_LIST(arg1));
14862 }
14863 
14864 static NODE *
14865 call_uni_op_gen(struct parser_params *parser, NODE *recv, ID id)
14866 {
14867     value_expr(recv);
14868     return NEW_CALL(recv, id, 0);
14869 }
14870 
14871 static NODE*
14872 match_op_gen(struct parser_params *parser, NODE *node1, NODE *node2)
14873 {
14874     value_expr(node1);
14875     value_expr(node2);
14876     if (node1) {
14877         switch (nd_type(node1)) {
14878           case NODE_DREGX:
14879           case NODE_DREGX_ONCE:
14880             return NEW_MATCH2(node1, node2);
14881 
14882           case NODE_LIT:
14883             if (RB_TYPE_P(node1->nd_lit, T_REGEXP)) {
14884                 return NEW_MATCH2(node1, node2);
14885             }
14886         }
14887     }
14888 
14889     if (node2) {
14890         switch (nd_type(node2)) {
14891           case NODE_DREGX:
14892           case NODE_DREGX_ONCE:
14893             return NEW_MATCH3(node2, node1);
14894 
14895           case NODE_LIT:
14896             if (RB_TYPE_P(node2->nd_lit, T_REGEXP)) {
14897                 return NEW_MATCH3(node2, node1);
14898             }
14899         }
14900     }
14901 
14902     return NEW_CALL(node1, tMATCH, NEW_LIST(node2));
14903 }
14904 
14905 static NODE*
14906 gettable_gen(struct parser_params *parser, ID id)
14907 {
14908     switch (id) {
14909       case keyword_self:
14910         return NEW_SELF();
14911       case keyword_nil:
14912         return NEW_NIL();
14913       case keyword_true:
14914         return NEW_TRUE();
14915       case keyword_false:
14916         return NEW_FALSE();
14917       case keyword__FILE__:
14918         return NEW_STR(rb_str_dup(ruby_sourcefile_string));
14919       case keyword__LINE__:
14920         return NEW_LIT(INT2FIX(tokline));
14921       case keyword__ENCODING__:
14922         return NEW_LIT(rb_enc_from_encoding(current_enc));
14923     }
14924     switch (id_type(id)) {
14925       case ID_LOCAL:
14926         if (dyna_in_block() && dvar_defined(id)) return NEW_DVAR(id);
14927         if (local_id(id)) return NEW_LVAR(id);
14928         /* method call without arguments */
14929         return NEW_VCALL(id);
14930       case ID_GLOBAL:
14931         return NEW_GVAR(id);
14932       case ID_INSTANCE:
14933         return NEW_IVAR(id);
14934       case ID_CONST:
14935         return NEW_CONST(id);
14936       case ID_CLASS:
14937         return NEW_CVAR(id);
14938     }
14939     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14940     return 0;
14941 }
14942 #else  /* !RIPPER */
14943 static int
14944 id_is_var_gen(struct parser_params *parser, ID id)
14945 {
14946     if (is_notop_id(id)) {
14947         switch (id & ID_SCOPE_MASK) {
14948           case ID_GLOBAL: case ID_INSTANCE: case ID_CONST: case ID_CLASS:
14949             return 1;
14950           case ID_LOCAL:
14951             if (dyna_in_block() && dvar_defined(id)) return 1;
14952             if (local_id(id)) return 1;
14953             /* method call without arguments */
14954             return 0;
14955         }
14956     }
14957     compile_error(PARSER_ARG "identifier %s is not valid to get", rb_id2name(id));
14958     return 0;
14959 }
14960 #endif /* !RIPPER */
14961 
14962 #if PARSER_DEBUG
14963 static const char *
14964 lex_state_name(enum lex_state_e state)
14965 {
14966     static const char names[][12] = {
14967         "EXPR_BEG",    "EXPR_END",    "EXPR_ENDARG", "EXPR_ENDFN",  "EXPR_ARG",
14968         "EXPR_CMDARG", "EXPR_MID",    "EXPR_FNAME",  "EXPR_DOT",    "EXPR_CLASS",
14969         "EXPR_VALUE",
14970     };
14971 
14972     if ((unsigned)state & ~(~0u << EXPR_MAX_STATE))
14973         return names[ffs(state)];
14974     return NULL;
14975 }
14976 #endif
14977 
14978 #ifdef RIPPER
14979 static VALUE
14980 assignable_gen(struct parser_params *parser, VALUE lhs)
14981 #else
14982 static NODE*
14983 assignable_gen(struct parser_params *parser, ID id, NODE *val)
14984 #endif
14985 {
14986 #ifdef RIPPER
14987     ID id = get_id(lhs);
14988 # define assignable_result(x) get_value(lhs)
14989 # define parser_yyerror(parser, x) dispatch1(assign_error, lhs)
14990 #else
14991 # define assignable_result(x) (x)
14992 #endif
14993     if (!id) return assignable_result(0);
14994     switch (id) {
14995       case keyword_self:
14996         yyerror("Can't change the value of self");
14997         goto error;
14998       case keyword_nil:
14999         yyerror("Can't assign to nil");
15000         goto error;
15001       case keyword_true:
15002         yyerror("Can't assign to true");
15003         goto error;
15004       case keyword_false:
15005         yyerror("Can't assign to false");
15006         goto error;
15007       case keyword__FILE__:
15008         yyerror("Can't assign to __FILE__");
15009         goto error;
15010       case keyword__LINE__:
15011         yyerror("Can't assign to __LINE__");
15012         goto error;
15013       case keyword__ENCODING__:
15014         yyerror("Can't assign to __ENCODING__");
15015         goto error;
15016     }
15017     switch (id_type(id)) {
15018       case ID_LOCAL:
15019         if (dyna_in_block()) {
15020             if (dvar_curr(id)) {
15021                 return assignable_result(NEW_DASGN_CURR(id, val));
15022             }
15023             else if (dvar_defined(id)) {
15024                 return assignable_result(NEW_DASGN(id, val));
15025             }
15026             else if (local_id(id)) {
15027                 return assignable_result(NEW_LASGN(id, val));
15028             }
15029             else {
15030                 dyna_var(id);
15031                 return assignable_result(NEW_DASGN_CURR(id, val));
15032             }
15033         }
15034         else {
15035             if (!local_id(id)) {
15036                 local_var(id);
15037             }
15038             return assignable_result(NEW_LASGN(id, val));
15039         }
15040         break;
15041       case ID_GLOBAL:
15042         return assignable_result(NEW_GASGN(id, val));
15043       case ID_INSTANCE:
15044         return assignable_result(NEW_IASGN(id, val));
15045       case ID_CONST:
15046         if (!in_def && !in_single)
15047             return assignable_result(NEW_CDECL(id, val, 0));
15048         yyerror("dynamic constant assignment");
15049         break;
15050       case ID_CLASS:
15051         return assignable_result(NEW_CVASGN(id, val));
15052       default:
15053         compile_error(PARSER_ARG "identifier %s is not valid to set", rb_id2name(id));
15054     }
15055   error:
15056     return assignable_result(0);
15057 #undef assignable_result
15058 #undef parser_yyerror
15059 }
15060 
15061 static int
15062 is_private_local_id(ID name)
15063 {
15064     VALUE s;
15065     if (name == idUScore) return 1;
15066     if (!is_local_id(name)) return 0;
15067     s = rb_id2str(name);
15068     if (!s) return 0;
15069     return RSTRING_PTR(s)[0] == '_';
15070 }
15071 
15072 #define LVAR_USED ((ID)1 << (sizeof(ID) * CHAR_BIT - 1))
15073 
15074 static ID
15075 shadowing_lvar_gen(struct parser_params *parser, ID name)
15076 {
15077     if (is_private_local_id(name)) return name;
15078     if (dyna_in_block()) {
15079         if (dvar_curr(name)) {
15080             yyerror("duplicated argument name");
15081         }
15082         else if (dvar_defined_get(name) || local_id(name)) {
15083             rb_warningS("shadowing outer local variable - %s", rb_id2name(name));
15084             vtable_add(lvtbl->vars, name);
15085             if (lvtbl->used) {
15086                 vtable_add(lvtbl->used, (ID)ruby_sourceline | LVAR_USED);
15087             }
15088         }
15089     }
15090     else {
15091         if (local_id(name)) {
15092             yyerror("duplicated argument name");
15093         }
15094     }
15095     return name;
15096 }
15097 
15098 static void
15099 new_bv_gen(struct parser_params *parser, ID name)
15100 {
15101     if (!name) return;
15102     if (!is_local_id(name)) {
15103         compile_error(PARSER_ARG "invalid local variable - %s",
15104                       rb_id2name(name));
15105         return;
15106     }
15107     shadowing_lvar(name);
15108     dyna_var(name);
15109 }
15110 
15111 #ifndef RIPPER
15112 static NODE *
15113 aryset_gen(struct parser_params *parser, NODE *recv, NODE *idx)
15114 {
15115     if (recv && nd_type(recv) == NODE_SELF)
15116         recv = (NODE *)1;
15117     return NEW_ATTRASGN(recv, tASET, idx);
15118 }
15119 
15120 static void
15121 block_dup_check_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15122 {
15123     if (node2 && node1 && nd_type(node1) == NODE_BLOCK_PASS) {
15124         compile_error(PARSER_ARG "both block arg and actual block given");
15125     }
15126 }
15127 
15128 static const char id_type_names[][9] = {
15129     "LOCAL",
15130     "INSTANCE",
15131     "",                         /* INSTANCE2 */
15132     "GLOBAL",
15133     "ATTRSET",
15134     "CONST",
15135     "CLASS",
15136     "JUNK",
15137 };
15138 
15139 ID
15140 rb_id_attrset(ID id)
15141 {
15142     if (!is_notop_id(id)) {
15143         switch (id) {
15144           case tAREF: case tASET:
15145             return tASET;       /* only exception */
15146         }
15147         rb_name_error(id, "cannot make operator ID :%s attrset", rb_id2name(id));
15148     }
15149     else {
15150         int scope = (int)(id & ID_SCOPE_MASK);
15151         switch (scope) {
15152           case ID_LOCAL: case ID_INSTANCE: case ID_GLOBAL:
15153           case ID_CONST: case ID_CLASS: case ID_JUNK:
15154             break;
15155           case ID_ATTRSET:
15156             return id;
15157           default:
15158             rb_name_error(id, "cannot make %s ID %+"PRIsVALUE" attrset",
15159                           id_type_names[scope], ID2SYM(id));
15160 
15161         }
15162     }
15163     id &= ~ID_SCOPE_MASK;
15164     id |= ID_ATTRSET;
15165     return id;
15166 }
15167 
15168 static NODE *
15169 attrset_gen(struct parser_params *parser, NODE *recv, ID id)
15170 {
15171     if (recv && nd_type(recv) == NODE_SELF)
15172         recv = (NODE *)1;
15173     return NEW_ATTRASGN(recv, rb_id_attrset(id), 0);
15174 }
15175 
15176 static void
15177 rb_backref_error_gen(struct parser_params *parser, NODE *node)
15178 {
15179     switch (nd_type(node)) {
15180       case NODE_NTH_REF:
15181         compile_error(PARSER_ARG "Can't set variable $%ld", node->nd_nth);
15182         break;
15183       case NODE_BACK_REF:
15184         compile_error(PARSER_ARG "Can't set variable $%c", (int)node->nd_nth);
15185         break;
15186     }
15187 }
15188 
15189 static NODE *
15190 arg_concat_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15191 {
15192     if (!node2) return node1;
15193     switch (nd_type(node1)) {
15194       case NODE_BLOCK_PASS:
15195         if (node1->nd_head)
15196             node1->nd_head = arg_concat(node1->nd_head, node2);
15197         else
15198             node1->nd_head = NEW_LIST(node2);
15199         return node1;
15200       case NODE_ARGSPUSH:
15201         if (nd_type(node2) != NODE_ARRAY) break;
15202         node1->nd_body = list_concat(NEW_LIST(node1->nd_body), node2);
15203         nd_set_type(node1, NODE_ARGSCAT);
15204         return node1;
15205       case NODE_ARGSCAT:
15206         if (nd_type(node2) != NODE_ARRAY ||
15207             nd_type(node1->nd_body) != NODE_ARRAY) break;
15208         node1->nd_body = list_concat(node1->nd_body, node2);
15209         return node1;
15210     }
15211     return NEW_ARGSCAT(node1, node2);
15212 }
15213 
15214 static NODE *
15215 arg_append_gen(struct parser_params *parser, NODE *node1, NODE *node2)
15216 {
15217     if (!node1) return NEW_LIST(node2);
15218     switch (nd_type(node1))  {
15219       case NODE_ARRAY:
15220         return list_append(node1, node2);
15221       case NODE_BLOCK_PASS:
15222         node1->nd_head = arg_append(node1->nd_head, node2);
15223         return node1;
15224       case NODE_ARGSPUSH:
15225         node1->nd_body = list_append(NEW_LIST(node1->nd_body), node2);
15226         nd_set_type(node1, NODE_ARGSCAT);
15227         return node1;
15228     }
15229     return NEW_ARGSPUSH(node1, node2);
15230 }
15231 
15232 static NODE *
15233 splat_array(NODE* node)
15234 {
15235     if (nd_type(node) == NODE_SPLAT) node = node->nd_head;
15236     if (nd_type(node) == NODE_ARRAY) return node;
15237     return 0;
15238 }
15239 
15240 static NODE *
15241 node_assign_gen(struct parser_params *parser, NODE *lhs, NODE *rhs)
15242 {
15243     if (!lhs) return 0;
15244 
15245     switch (nd_type(lhs)) {
15246       case NODE_GASGN:
15247       case NODE_IASGN:
15248       case NODE_IASGN2:
15249       case NODE_LASGN:
15250       case NODE_DASGN:
15251       case NODE_DASGN_CURR:
15252       case NODE_MASGN:
15253       case NODE_CDECL:
15254       case NODE_CVASGN:
15255         lhs->nd_value = rhs;
15256         break;
15257 
15258       case NODE_ATTRASGN:
15259       case NODE_CALL:
15260         lhs->nd_args = arg_append(lhs->nd_args, rhs);
15261         break;
15262 
15263       default:
15264         /* should not happen */
15265         break;
15266     }
15267 
15268     return lhs;
15269 }
15270 
15271 static int
15272 value_expr_gen(struct parser_params *parser, NODE *node)
15273 {
15274     int cond = 0;
15275 
15276     if (!node) {
15277         rb_warning0("empty expression");
15278     }
15279     while (node) {
15280         switch (nd_type(node)) {
15281           case NODE_DEFN:
15282           case NODE_DEFS:
15283             parser_warning(node, "void value expression");
15284             return FALSE;
15285 
15286           case NODE_RETURN:
15287           case NODE_BREAK:
15288           case NODE_NEXT:
15289           case NODE_REDO:
15290           case NODE_RETRY:
15291             if (!cond) yyerror("void value expression");
15292             /* or "control never reach"? */
15293             return FALSE;
15294 
15295           case NODE_BLOCK:
15296             while (node->nd_next) {
15297                 node = node->nd_next;
15298             }
15299             node = node->nd_head;
15300             break;
15301 
15302           case NODE_BEGIN:
15303             node = node->nd_body;
15304             break;
15305 
15306           case NODE_IF:
15307             if (!node->nd_body) {
15308                 node = node->nd_else;
15309                 break;
15310             }
15311             else if (!node->nd_else) {
15312                 node = node->nd_body;
15313                 break;
15314             }
15315             if (!value_expr(node->nd_body)) return FALSE;
15316             node = node->nd_else;
15317             break;
15318 
15319           case NODE_AND:
15320           case NODE_OR:
15321             cond = 1;
15322             node = node->nd_2nd;
15323             break;
15324 
15325           default:
15326             return TRUE;
15327         }
15328     }
15329 
15330     return TRUE;
15331 }
15332 
15333 static void
15334 void_expr_gen(struct parser_params *parser, NODE *node)
15335 {
15336     const char *useless = 0;
15337 
15338     if (!RTEST(ruby_verbose)) return;
15339 
15340     if (!node) return;
15341     switch (nd_type(node)) {
15342       case NODE_CALL:
15343         switch (node->nd_mid) {
15344           case '+':
15345           case '-':
15346           case '*':
15347           case '/':
15348           case '%':
15349           case tPOW:
15350           case tUPLUS:
15351           case tUMINUS:
15352           case '|':
15353           case '^':
15354           case '&':
15355           case tCMP:
15356           case '>':
15357           case tGEQ:
15358           case '<':
15359           case tLEQ:
15360           case tEQ:
15361           case tNEQ:
15362             useless = rb_id2name(node->nd_mid);
15363             break;
15364         }
15365         break;
15366 
15367       case NODE_LVAR:
15368       case NODE_DVAR:
15369       case NODE_GVAR:
15370       case NODE_IVAR:
15371       case NODE_CVAR:
15372       case NODE_NTH_REF:
15373       case NODE_BACK_REF:
15374         useless = "a variable";
15375         break;
15376       case NODE_CONST:
15377         useless = "a constant";
15378         break;
15379       case NODE_LIT:
15380       case NODE_STR:
15381       case NODE_DSTR:
15382       case NODE_DREGX:
15383       case NODE_DREGX_ONCE:
15384         useless = "a literal";
15385         break;
15386       case NODE_COLON2:
15387       case NODE_COLON3:
15388         useless = "::";
15389         break;
15390       case NODE_DOT2:
15391         useless = "..";
15392         break;
15393       case NODE_DOT3:
15394         useless = "...";
15395         break;
15396       case NODE_SELF:
15397         useless = "self";
15398         break;
15399       case NODE_NIL:
15400         useless = "nil";
15401         break;
15402       case NODE_TRUE:
15403         useless = "true";
15404         break;
15405       case NODE_FALSE:
15406         useless = "false";
15407         break;
15408       case NODE_DEFINED:
15409         useless = "defined?";
15410         break;
15411     }
15412 
15413     if (useless) {
15414         int line = ruby_sourceline;
15415 
15416         ruby_sourceline = nd_line(node);
15417         rb_warnS("possibly useless use of %s in void context", useless);
15418         ruby_sourceline = line;
15419     }
15420 }
15421 
15422 static void
15423 void_stmts_gen(struct parser_params *parser, NODE *node)
15424 {
15425     if (!RTEST(ruby_verbose)) return;
15426     if (!node) return;
15427     if (nd_type(node) != NODE_BLOCK) return;
15428 
15429     for (;;) {
15430         if (!node->nd_next) return;
15431         void_expr0(node->nd_head);
15432         node = node->nd_next;
15433     }
15434 }
15435 
15436 static NODE *
15437 remove_begin(NODE *node)
15438 {
15439     NODE **n = &node, *n1 = node;
15440     while (n1 && nd_type(n1) == NODE_BEGIN && n1->nd_body) {
15441         *n = n1 = n1->nd_body;
15442     }
15443     return node;
15444 }
15445 
15446 static void
15447 reduce_nodes_gen(struct parser_params *parser, NODE **body)
15448 {
15449     NODE *node = *body;
15450 
15451     if (!node) {
15452         *body = NEW_NIL();
15453         return;
15454     }
15455 #define subnodes(n1, n2) \
15456     ((!node->n1) ? (node->n2 ? (body = &node->n2, 1) : 0) : \
15457      (!node->n2) ? (body = &node->n1, 1) : \
15458      (reduce_nodes(&node->n1), body = &node->n2, 1))
15459 
15460     while (node) {
15461         int newline = (int)(node->flags & NODE_FL_NEWLINE);
15462         switch (nd_type(node)) {
15463           end:
15464           case NODE_NIL:
15465             *body = 0;
15466             return;
15467           case NODE_RETURN:
15468             *body = node = node->nd_stts;
15469             if (newline && node) node->flags |= NODE_FL_NEWLINE;
15470             continue;
15471           case NODE_BEGIN:
15472             *body = node = node->nd_body;
15473             if (newline && node) node->flags |= NODE_FL_NEWLINE;
15474             continue;
15475           case NODE_BLOCK:
15476             body = &node->nd_end->nd_head;
15477             break;
15478           case NODE_IF:
15479             if (subnodes(nd_body, nd_else)) break;
15480             return;
15481           case NODE_CASE:
15482             body = &node->nd_body;
15483             break;
15484           case NODE_WHEN:
15485             if (!subnodes(nd_body, nd_next)) goto end;
15486             break;
15487           case NODE_ENSURE:
15488             if (!subnodes(nd_head, nd_resq)) goto end;
15489             break;
15490           case NODE_RESCUE:
15491             if (node->nd_else) {
15492                 body = &node->nd_resq;
15493                 break;
15494             }
15495             if (!subnodes(nd_head, nd_resq)) goto end;
15496             break;
15497           default:
15498             return;
15499         }
15500         node = *body;
15501         if (newline && node) node->flags |= NODE_FL_NEWLINE;
15502     }
15503 
15504 #undef subnodes
15505 }
15506 
15507 static int
15508 is_static_content(NODE *node)
15509 {
15510     if (!node) return 1;
15511     switch (nd_type(node)) {
15512       case NODE_HASH:
15513         if (!(node = node->nd_head)) break;
15514       case NODE_ARRAY:
15515         do {
15516             if (!is_static_content(node->nd_head)) return 0;
15517         } while ((node = node->nd_next) != 0);
15518       case NODE_LIT:
15519       case NODE_STR:
15520       case NODE_NIL:
15521       case NODE_TRUE:
15522       case NODE_FALSE:
15523       case NODE_ZARRAY:
15524         break;
15525       default:
15526         return 0;
15527     }
15528     return 1;
15529 }
15530 
15531 static int
15532 assign_in_cond(struct parser_params *parser, NODE *node)
15533 {
15534     switch (nd_type(node)) {
15535       case NODE_MASGN:
15536         yyerror("multiple assignment in conditional");
15537         return 1;
15538 
15539       case NODE_LASGN:
15540       case NODE_DASGN:
15541       case NODE_DASGN_CURR:
15542       case NODE_GASGN:
15543       case NODE_IASGN:
15544         break;
15545 
15546       default:
15547         return 0;
15548     }
15549 
15550     if (!node->nd_value) return 1;
15551     if (is_static_content(node->nd_value)) {
15552         /* reports always */
15553         parser_warn(node->nd_value, "found = in conditional, should be ==");
15554     }
15555     return 1;
15556 }
15557 
15558 static void
15559 warn_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15560 {
15561     if (!e_option_supplied(parser)) parser_warn(node, str);
15562 }
15563 
15564 static void
15565 warning_unless_e_option(struct parser_params *parser, NODE *node, const char *str)
15566 {
15567     if (!e_option_supplied(parser)) parser_warning(node, str);
15568 }
15569 
15570 static void
15571 fixup_nodes(NODE **rootnode)
15572 {
15573     NODE *node, *next, *head;
15574 
15575     for (node = *rootnode; node; node = next) {
15576         enum node_type type;
15577         VALUE val;
15578 
15579         next = node->nd_next;
15580         head = node->nd_head;
15581         rb_gc_force_recycle((VALUE)node);
15582         *rootnode = next;
15583         switch (type = nd_type(head)) {
15584           case NODE_DOT2:
15585           case NODE_DOT3:
15586             val = rb_range_new(head->nd_beg->nd_lit, head->nd_end->nd_lit,
15587                                type == NODE_DOT3);
15588             rb_gc_force_recycle((VALUE)head->nd_beg);
15589             rb_gc_force_recycle((VALUE)head->nd_end);
15590             nd_set_type(head, NODE_LIT);
15591             head->nd_lit = val;
15592             break;
15593           default:
15594             break;
15595         }
15596     }
15597 }
15598 
15599 static NODE *cond0(struct parser_params*,NODE*);
15600 
15601 static NODE*
15602 range_op(struct parser_params *parser, NODE *node)
15603 {
15604     enum node_type type;
15605 
15606     if (node == 0) return 0;
15607 
15608     type = nd_type(node);
15609     value_expr(node);
15610     if (type == NODE_LIT && FIXNUM_P(node->nd_lit)) {
15611         warn_unless_e_option(parser, node, "integer literal in conditional range");
15612         return NEW_CALL(node, tEQ, NEW_LIST(NEW_GVAR(rb_intern("$."))));
15613     }
15614     return cond0(parser, node);
15615 }
15616 
15617 static int
15618 literal_node(NODE *node)
15619 {
15620     if (!node) return 1;        /* same as NODE_NIL */
15621     switch (nd_type(node)) {
15622       case NODE_LIT:
15623       case NODE_STR:
15624       case NODE_DSTR:
15625       case NODE_EVSTR:
15626       case NODE_DREGX:
15627       case NODE_DREGX_ONCE:
15628       case NODE_DSYM:
15629         return 2;
15630       case NODE_TRUE:
15631       case NODE_FALSE:
15632       case NODE_NIL:
15633         return 1;
15634     }
15635     return 0;
15636 }
15637 
15638 static NODE*
15639 cond0(struct parser_params *parser, NODE *node)
15640 {
15641     if (node == 0) return 0;
15642     assign_in_cond(parser, node);
15643 
15644     switch (nd_type(node)) {
15645       case NODE_DSTR:
15646       case NODE_EVSTR:
15647       case NODE_STR:
15648         rb_warn0("string literal in condition");
15649         break;
15650 
15651       case NODE_DREGX:
15652       case NODE_DREGX_ONCE:
15653         warning_unless_e_option(parser, node, "regex literal in condition");
15654         return NEW_MATCH2(node, NEW_GVAR(rb_intern("$_")));
15655 
15656       case NODE_AND:
15657       case NODE_OR:
15658         node->nd_1st = cond0(parser, node->nd_1st);
15659         node->nd_2nd = cond0(parser, node->nd_2nd);
15660         break;
15661 
15662       case NODE_DOT2:
15663       case NODE_DOT3:
15664         node->nd_beg = range_op(parser, node->nd_beg);
15665         node->nd_end = range_op(parser, node->nd_end);
15666         if (nd_type(node) == NODE_DOT2) nd_set_type(node,NODE_FLIP2);
15667         else if (nd_type(node) == NODE_DOT3) nd_set_type(node, NODE_FLIP3);
15668         if (!e_option_supplied(parser)) {
15669             int b = literal_node(node->nd_beg);
15670             int e = literal_node(node->nd_end);
15671             if ((b == 1 && e == 1) || (b + e >= 2 && RTEST(ruby_verbose))) {
15672                 parser_warn(node, "range literal in condition");
15673             }
15674         }
15675         break;
15676 
15677       case NODE_DSYM:
15678         parser_warning(node, "literal in condition");
15679         break;
15680 
15681       case NODE_LIT:
15682         if (RB_TYPE_P(node->nd_lit, T_REGEXP)) {
15683             warn_unless_e_option(parser, node, "regex literal in condition");
15684             nd_set_type(node, NODE_MATCH);
15685         }
15686         else {
15687             parser_warning(node, "literal in condition");
15688         }
15689       default:
15690         break;
15691     }
15692     return node;
15693 }
15694 
15695 static NODE*
15696 cond_gen(struct parser_params *parser, NODE *node)
15697 {
15698     if (node == 0) return 0;
15699     return cond0(parser, node);
15700 }
15701 
15702 static NODE*
15703 logop_gen(struct parser_params *parser, enum node_type type, NODE *left, NODE *right)
15704 {
15705     value_expr(left);
15706     if (left && (enum node_type)nd_type(left) == type) {
15707         NODE *node = left, *second;
15708         while ((second = node->nd_2nd) != 0 && (enum node_type)nd_type(second) == type) {
15709             node = second;
15710         }
15711         node->nd_2nd = NEW_NODE(type, second, right, 0);
15712         return left;
15713     }
15714     return NEW_NODE(type, left, right, 0);
15715 }
15716 
15717 static void
15718 no_blockarg(struct parser_params *parser, NODE *node)
15719 {
15720     if (node && nd_type(node) == NODE_BLOCK_PASS) {
15721         compile_error(PARSER_ARG "block argument should not be given");
15722     }
15723 }
15724 
15725 static NODE *
15726 ret_args_gen(struct parser_params *parser, NODE *node)
15727 {
15728     if (node) {
15729         no_blockarg(parser, node);
15730         if (nd_type(node) == NODE_ARRAY) {
15731             if (node->nd_next == 0) {
15732                 node = node->nd_head;
15733             }
15734             else {
15735                 nd_set_type(node, NODE_VALUES);
15736             }
15737         }
15738     }
15739     return node;
15740 }
15741 
15742 static NODE *
15743 new_yield_gen(struct parser_params *parser, NODE *node)
15744 {
15745     if (node) no_blockarg(parser, node);
15746 
15747     return NEW_YIELD(node);
15748 }
15749 
15750 static NODE*
15751 negate_lit(NODE *node)
15752 {
15753     switch (TYPE(node->nd_lit)) {
15754       case T_FIXNUM:
15755         node->nd_lit = LONG2FIX(-FIX2LONG(node->nd_lit));
15756         break;
15757       case T_BIGNUM:
15758         node->nd_lit = rb_funcall(node->nd_lit,tUMINUS,0,0);
15759         break;
15760       case T_FLOAT:
15761 #if USE_FLONUM
15762         if (FLONUM_P(node->nd_lit)) {
15763             node->nd_lit = DBL2NUM(-RFLOAT_VALUE(node->nd_lit));
15764         }
15765         else {
15766             RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15767         }
15768 #else
15769         RFLOAT(node->nd_lit)->float_value = -RFLOAT_VALUE(node->nd_lit);
15770 #endif
15771         break;
15772       default:
15773         break;
15774     }
15775     return node;
15776 }
15777 
15778 static NODE *
15779 arg_blk_pass(NODE *node1, NODE *node2)
15780 {
15781     if (node2) {
15782         node2->nd_head = node1;
15783         return node2;
15784     }
15785     return node1;
15786 }
15787 
15788 
15789 static NODE*
15790 new_args_gen(struct parser_params *parser, NODE *m, NODE *o, ID r, NODE *p, NODE *tail)
15791 {
15792     int saved_line = ruby_sourceline;
15793     struct rb_args_info *args = tail->nd_ainfo;
15794 
15795     args->pre_args_num   = m ? rb_long2int(m->nd_plen) : 0;
15796     args->pre_init       = m ? m->nd_next : 0;
15797 
15798     args->post_args_num  = p ? rb_long2int(p->nd_plen) : 0;
15799     args->post_init      = p ? p->nd_next : 0;
15800     args->first_post_arg = p ? p->nd_pid : 0;
15801 
15802     args->rest_arg       = r;
15803 
15804     args->opt_args       = o;
15805 
15806     ruby_sourceline = saved_line;
15807 
15808     return tail;
15809 }
15810 
15811 static NODE*
15812 new_args_tail_gen(struct parser_params *parser, NODE *k, ID kr, ID b)
15813 {
15814     int saved_line = ruby_sourceline;
15815     struct rb_args_info *args;
15816     NODE *kw_rest_arg = 0;
15817     NODE *node;
15818 
15819     args = ALLOC(struct rb_args_info);
15820     MEMZERO(args, struct rb_args_info, 1);
15821     node = NEW_NODE(NODE_ARGS, 0, 0, args);
15822 
15823     args->block_arg      = b;
15824     args->kw_args        = k;
15825     if (k && !kr) kr = internal_id();
15826     if (kr) {
15827         arg_var(kr);
15828         kw_rest_arg  = NEW_DVAR(kr);
15829     }
15830     args->kw_rest_arg    = kw_rest_arg;
15831 
15832     ruby_sourceline = saved_line;
15833     return node;
15834 }
15835 
15836 static NODE*
15837 dsym_node_gen(struct parser_params *parser, NODE *node)
15838 {
15839     VALUE lit;
15840 
15841     if (!node) {
15842         return NEW_LIT(ID2SYM(idNULL));
15843     }
15844 
15845     switch (nd_type(node)) {
15846       case NODE_DSTR:
15847         nd_set_type(node, NODE_DSYM);
15848         break;
15849       case NODE_STR:
15850         lit = node->nd_lit;
15851         node->nd_lit = ID2SYM(rb_intern_str(lit));
15852         nd_set_type(node, NODE_LIT);
15853         break;
15854       default:
15855         node = NEW_NODE(NODE_DSYM, Qnil, 1, NEW_LIST(node));
15856         break;
15857     }
15858     return node;
15859 }
15860 #endif /* !RIPPER */
15861 
15862 #ifndef RIPPER
15863 static NODE *
15864 new_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15865 {
15866     NODE *asgn;
15867 
15868     if (lhs) {
15869         ID vid = lhs->nd_vid;
15870         if (op == tOROP) {
15871             lhs->nd_value = rhs;
15872             asgn = NEW_OP_ASGN_OR(gettable(vid), lhs);
15873             if (is_asgn_or_id(vid)) {
15874                 asgn->nd_aid = vid;
15875             }
15876         }
15877         else if (op == tANDOP) {
15878             lhs->nd_value = rhs;
15879             asgn = NEW_OP_ASGN_AND(gettable(vid), lhs);
15880         }
15881         else {
15882             asgn = lhs;
15883             asgn->nd_value = NEW_CALL(gettable(vid), op, NEW_LIST(rhs));
15884         }
15885     }
15886     else {
15887         asgn = NEW_BEGIN(0);
15888     }
15889     return asgn;
15890 }
15891 
15892 static NODE *
15893 new_attr_op_assign_gen(struct parser_params *parser, NODE *lhs, ID attr, ID op, NODE *rhs)
15894 {
15895     NODE *asgn;
15896 
15897     if (op == tOROP) {
15898         op = 0;
15899     }
15900     else if (op == tANDOP) {
15901         op = 1;
15902     }
15903     asgn = NEW_OP_ASGN2(lhs, attr, op, rhs);
15904     fixpos(asgn, lhs);
15905     return asgn;
15906 }
15907 
15908 static NODE *
15909 new_const_op_assign_gen(struct parser_params *parser, NODE *lhs, ID op, NODE *rhs)
15910 {
15911     NODE *asgn;
15912 
15913     if (op == tOROP) {
15914         op = 0;
15915     }
15916     else if (op == tANDOP) {
15917         op = 1;
15918     }
15919     if (lhs) {
15920         asgn = NEW_OP_CDECL(lhs, op, rhs);
15921     }
15922     else {
15923         asgn = NEW_BEGIN(0);
15924     }
15925     fixpos(asgn, lhs);
15926     return asgn;
15927 }
15928 #else
15929 static VALUE
15930 new_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE op, VALUE rhs)
15931 {
15932     return dispatch3(opassign, lhs, op, rhs);
15933 }
15934 
15935 static VALUE
15936 new_attr_op_assign_gen(struct parser_params *parser, VALUE lhs, VALUE type, VALUE attr, VALUE op, VALUE rhs)
15937 {
15938     VALUE recv = dispatch3(field, lhs, type, attr);
15939     return dispatch3(opassign, recv, op, rhs);
15940 }
15941 #endif
15942 
15943 static void
15944 warn_unused_var(struct parser_params *parser, struct local_vars *local)
15945 {
15946     int i, cnt;
15947     ID *v, *u;
15948 
15949     if (!local->used) return;
15950     v = local->vars->tbl;
15951     u = local->used->tbl;
15952     cnt = local->used->pos;
15953     if (cnt != local->vars->pos) {
15954         rb_bug("local->used->pos != local->vars->pos");
15955     }
15956     for (i = 0; i < cnt; ++i) {
15957         if (!v[i] || (u[i] & LVAR_USED)) continue;
15958         if (is_private_local_id(v[i])) continue;
15959         rb_warn4S(ruby_sourcefile, (int)u[i], "assigned but unused variable - %s", rb_id2name(v[i]));
15960     }
15961 }
15962 
15963 static void
15964 local_push_gen(struct parser_params *parser, int inherit_dvars)
15965 {
15966     struct local_vars *local;
15967 
15968     local = ALLOC(struct local_vars);
15969     local->prev = lvtbl;
15970     local->args = vtable_alloc(0);
15971     local->vars = vtable_alloc(inherit_dvars ? DVARS_INHERIT : DVARS_TOPSCOPE);
15972     local->used = !(inherit_dvars &&
15973                     (ifndef_ripper(compile_for_eval || e_option_supplied(parser))+0)) &&
15974         RTEST(ruby_verbose) ? vtable_alloc(0) : 0;
15975     local->cmdargs = cmdarg_stack;
15976     cmdarg_stack = 0;
15977     lvtbl = local;
15978 }
15979 
15980 static void
15981 local_pop_gen(struct parser_params *parser)
15982 {
15983     struct local_vars *local = lvtbl->prev;
15984     if (lvtbl->used) {
15985         warn_unused_var(parser, lvtbl);
15986         vtable_free(lvtbl->used);
15987     }
15988     vtable_free(lvtbl->args);
15989     vtable_free(lvtbl->vars);
15990     cmdarg_stack = lvtbl->cmdargs;
15991     xfree(lvtbl);
15992     lvtbl = local;
15993 }
15994 
15995 #ifndef RIPPER
15996 static ID*
15997 local_tbl_gen(struct parser_params *parser)
15998 {
15999     int cnt_args = vtable_size(lvtbl->args);
16000     int cnt_vars = vtable_size(lvtbl->vars);
16001     int cnt = cnt_args + cnt_vars;
16002     int i, j;
16003     ID *buf;
16004 
16005     if (cnt <= 0) return 0;
16006     buf = ALLOC_N(ID, cnt + 1);
16007     MEMCPY(buf+1, lvtbl->args->tbl, ID, cnt_args);
16008     /* remove IDs duplicated to warn shadowing */
16009     for (i = 0, j = cnt_args+1; i < cnt_vars; ++i) {
16010         ID id = lvtbl->vars->tbl[i];
16011         if (!vtable_included(lvtbl->args, id)) {
16012             buf[j++] = id;
16013         }
16014     }
16015     if (--j < cnt) REALLOC_N(buf, ID, (cnt = j) + 1);
16016     buf[0] = cnt;
16017     return buf;
16018 }
16019 #endif
16020 
16021 static int
16022 arg_var_gen(struct parser_params *parser, ID id)
16023 {
16024     vtable_add(lvtbl->args, id);
16025     return vtable_size(lvtbl->args) - 1;
16026 }
16027 
16028 static int
16029 local_var_gen(struct parser_params *parser, ID id)
16030 {
16031     vtable_add(lvtbl->vars, id);
16032     if (lvtbl->used) {
16033         vtable_add(lvtbl->used, (ID)ruby_sourceline);
16034     }
16035     return vtable_size(lvtbl->vars) - 1;
16036 }
16037 
16038 static int
16039 local_id_gen(struct parser_params *parser, ID id)
16040 {
16041     struct vtable *vars, *args, *used;
16042 
16043     vars = lvtbl->vars;
16044     args = lvtbl->args;
16045     used = lvtbl->used;
16046 
16047     while (vars && POINTER_P(vars->prev)) {
16048         vars = vars->prev;
16049         args = args->prev;
16050         if (used) used = used->prev;
16051     }
16052 
16053     if (vars && vars->prev == DVARS_INHERIT) {
16054         return rb_local_defined(id);
16055     }
16056     else if (vtable_included(args, id)) {
16057         return 1;
16058     }
16059     else {
16060         int i = vtable_included(vars, id);
16061         if (i && used) used->tbl[i-1] |= LVAR_USED;
16062         return i != 0;
16063     }
16064 }
16065 
16066 static const struct vtable *
16067 dyna_push_gen(struct parser_params *parser)
16068 {
16069     lvtbl->args = vtable_alloc(lvtbl->args);
16070     lvtbl->vars = vtable_alloc(lvtbl->vars);
16071     if (lvtbl->used) {
16072         lvtbl->used = vtable_alloc(lvtbl->used);
16073     }
16074     return lvtbl->args;
16075 }
16076 
16077 static void
16078 dyna_pop_1(struct parser_params *parser)
16079 {
16080     struct vtable *tmp;
16081 
16082     if ((tmp = lvtbl->used) != 0) {
16083         warn_unused_var(parser, lvtbl);
16084         lvtbl->used = lvtbl->used->prev;
16085         vtable_free(tmp);
16086     }
16087     tmp = lvtbl->args;
16088     lvtbl->args = lvtbl->args->prev;
16089     vtable_free(tmp);
16090     tmp = lvtbl->vars;
16091     lvtbl->vars = lvtbl->vars->prev;
16092     vtable_free(tmp);
16093 }
16094 
16095 static void
16096 dyna_pop_gen(struct parser_params *parser, const struct vtable *lvargs)
16097 {
16098     while (lvtbl->args != lvargs) {
16099         dyna_pop_1(parser);
16100         if (!lvtbl->args) {
16101             struct local_vars *local = lvtbl->prev;
16102             xfree(lvtbl);
16103             lvtbl = local;
16104         }
16105     }
16106     dyna_pop_1(parser);
16107 }
16108 
16109 static int
16110 dyna_in_block_gen(struct parser_params *parser)
16111 {
16112     return POINTER_P(lvtbl->vars) && lvtbl->vars->prev != DVARS_TOPSCOPE;
16113 }
16114 
16115 static int
16116 dvar_defined_gen(struct parser_params *parser, ID id, int get)
16117 {
16118     struct vtable *vars, *args, *used;
16119     int i;
16120 
16121     args = lvtbl->args;
16122     vars = lvtbl->vars;
16123     used = lvtbl->used;
16124 
16125     while (POINTER_P(vars)) {
16126         if (vtable_included(args, id)) {
16127             return 1;
16128         }
16129         if ((i = vtable_included(vars, id)) != 0) {
16130             if (used) used->tbl[i-1] |= LVAR_USED;
16131             return 1;
16132         }
16133         args = args->prev;
16134         vars = vars->prev;
16135         if (get) used = 0;
16136         if (used) used = used->prev;
16137     }
16138 
16139     if (vars == DVARS_INHERIT) {
16140         return rb_dvar_defined(id);
16141     }
16142 
16143     return 0;
16144 }
16145 
16146 static int
16147 dvar_curr_gen(struct parser_params *parser, ID id)
16148 {
16149     return (vtable_included(lvtbl->args, id) ||
16150             vtable_included(lvtbl->vars, id));
16151 }
16152 
16153 #ifndef RIPPER
16154 static void
16155 reg_fragment_setenc_gen(struct parser_params* parser, VALUE str, int options)
16156 {
16157     int c = RE_OPTION_ENCODING_IDX(options);
16158 
16159     if (c) {
16160         int opt, idx;
16161         rb_char_to_option_kcode(c, &opt, &idx);
16162         if (idx != ENCODING_GET(str) &&
16163             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16164             goto error;
16165         }
16166         ENCODING_SET(str, idx);
16167     }
16168     else if (RE_OPTION_ENCODING_NONE(options)) {
16169         if (!ENCODING_IS_ASCII8BIT(str) &&
16170             rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16171             c = 'n';
16172             goto error;
16173         }
16174         rb_enc_associate(str, rb_ascii8bit_encoding());
16175     }
16176     else if (current_enc == rb_usascii_encoding()) {
16177         if (rb_enc_str_coderange(str) != ENC_CODERANGE_7BIT) {
16178             /* raise in re.c */
16179             rb_enc_associate(str, rb_usascii_encoding());
16180         }
16181         else {
16182             rb_enc_associate(str, rb_ascii8bit_encoding());
16183         }
16184     }
16185     return;
16186 
16187   error:
16188     compile_error(PARSER_ARG
16189         "regexp encoding option '%c' differs from source encoding '%s'",
16190         c, rb_enc_name(rb_enc_get(str)));
16191 }
16192 
16193 static int
16194 reg_fragment_check_gen(struct parser_params* parser, VALUE str, int options)
16195 {
16196     VALUE err;
16197     reg_fragment_setenc(str, options);
16198     err = rb_reg_check_preprocess(str);
16199     if (err != Qnil) {
16200         err = rb_obj_as_string(err);
16201         compile_error(PARSER_ARG "%s", RSTRING_PTR(err));
16202         RB_GC_GUARD(err);
16203         return 0;
16204     }
16205     return 1;
16206 }
16207 
16208 typedef struct {
16209     struct parser_params* parser;
16210     rb_encoding *enc;
16211     NODE *succ_block;
16212     NODE *fail_block;
16213     int num;
16214 } reg_named_capture_assign_t;
16215 
16216 static int
16217 reg_named_capture_assign_iter(const OnigUChar *name, const OnigUChar *name_end,
16218           int back_num, int *back_refs, OnigRegex regex, void *arg0)
16219 {
16220     reg_named_capture_assign_t *arg = (reg_named_capture_assign_t*)arg0;
16221     struct parser_params* parser = arg->parser;
16222     rb_encoding *enc = arg->enc;
16223     long len = name_end - name;
16224     const char *s = (const char *)name;
16225     ID var;
16226 
16227     arg->num++;
16228 
16229     if (arg->succ_block == 0) {
16230         arg->succ_block = NEW_BEGIN(0);
16231         arg->fail_block = NEW_BEGIN(0);
16232     }
16233 
16234     if (!len || (*name != '_' && ISASCII(*name) && !rb_enc_islower(*name, enc)) ||
16235         (len < MAX_WORD_LENGTH && rb_reserved_word(s, (int)len)) ||
16236         !rb_enc_symname2_p(s, len, enc)) {
16237         return ST_CONTINUE;
16238     }
16239     var = rb_intern3(s, len, enc);
16240     if (dvar_defined(var) || local_id(var)) {
16241         rb_warningS("named capture conflicts a local variable - %s",
16242                     rb_id2name(var));
16243     }
16244     arg->succ_block = block_append(arg->succ_block,
16245         newline_node(node_assign(assignable(var,0),
16246             NEW_CALL(
16247               gettable(rb_intern("$~")),
16248               idAREF,
16249               NEW_LIST(NEW_LIT(ID2SYM(var))))
16250             )));
16251     arg->fail_block = block_append(arg->fail_block,
16252         newline_node(node_assign(assignable(var,0), NEW_LIT(Qnil))));
16253     return ST_CONTINUE;
16254 }
16255 
16256 static NODE *
16257 reg_named_capture_assign_gen(struct parser_params* parser, VALUE regexp, NODE *match)
16258 {
16259     reg_named_capture_assign_t arg;
16260 
16261     arg.parser = parser;
16262     arg.enc = rb_enc_get(regexp);
16263     arg.succ_block = 0;
16264     arg.fail_block = 0;
16265     arg.num = 0;
16266     onig_foreach_name(RREGEXP(regexp)->ptr, reg_named_capture_assign_iter, (void*)&arg);
16267 
16268     if (arg.num == 0)
16269         return match;
16270 
16271     return
16272         block_append(
16273             newline_node(match),
16274             NEW_IF(gettable(rb_intern("$~")),
16275                 block_append(
16276                     newline_node(arg.succ_block),
16277                     newline_node(
16278                         NEW_CALL(
16279                           gettable(rb_intern("$~")),
16280                           rb_intern("begin"),
16281                           NEW_LIST(NEW_LIT(INT2FIX(0)))))),
16282                 block_append(
16283                     newline_node(arg.fail_block),
16284                     newline_node(
16285                         NEW_LIT(Qnil)))));
16286 }
16287 
16288 static VALUE
16289 reg_compile_gen(struct parser_params* parser, VALUE str, int options)
16290 {
16291     VALUE re;
16292     VALUE err;
16293 
16294     reg_fragment_setenc(str, options);
16295     err = rb_errinfo();
16296     re = rb_reg_compile(str, options & RE_OPTION_MASK, ruby_sourcefile, ruby_sourceline);
16297     if (NIL_P(re)) {
16298         ID mesg = rb_intern("mesg");
16299         VALUE m = rb_attr_get(rb_errinfo(), mesg);
16300         rb_set_errinfo(err);
16301         if (!NIL_P(err)) {
16302             rb_str_append(rb_str_cat(rb_attr_get(err, mesg), "\n", 1), m);
16303         }
16304         else {
16305             compile_error(PARSER_ARG "%s", RSTRING_PTR(m));
16306         }
16307         return Qnil;
16308     }
16309     return re;
16310 }
16311 
16312 void
16313 rb_gc_mark_parser(void)
16314 {
16315 }
16316 
16317 NODE*
16318 rb_parser_append_print(VALUE vparser, NODE *node)
16319 {
16320     NODE *prelude = 0;
16321     NODE *scope = node;
16322     struct parser_params *parser;
16323 
16324     if (!node) return node;
16325 
16326     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16327 
16328     node = node->nd_body;
16329 
16330     if (nd_type(node) == NODE_PRELUDE) {
16331         prelude = node;
16332         node = node->nd_body;
16333     }
16334 
16335     node = block_append(node,
16336                         NEW_FCALL(rb_intern("print"),
16337                                   NEW_ARRAY(NEW_GVAR(rb_intern("$_")))));
16338     if (prelude) {
16339         prelude->nd_body = node;
16340         scope->nd_body = prelude;
16341     }
16342     else {
16343         scope->nd_body = node;
16344     }
16345 
16346     return scope;
16347 }
16348 
16349 NODE *
16350 rb_parser_while_loop(VALUE vparser, NODE *node, int chop, int split)
16351 {
16352     NODE *prelude = 0;
16353     NODE *scope = node;
16354     struct parser_params *parser;
16355 
16356     if (!node) return node;
16357 
16358     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
16359 
16360     node = node->nd_body;
16361 
16362     if (nd_type(node) == NODE_PRELUDE) {
16363         prelude = node;
16364         node = node->nd_body;
16365     }
16366     if (split) {
16367         node = block_append(NEW_GASGN(rb_intern("$F"),
16368                                       NEW_CALL(NEW_GVAR(rb_intern("$_")),
16369                                                rb_intern("split"), 0)),
16370                             node);
16371     }
16372     if (chop) {
16373         node = block_append(NEW_CALL(NEW_GVAR(rb_intern("$_")),
16374                                      rb_intern("chop!"), 0), node);
16375     }
16376 
16377     node = NEW_OPT_N(node);
16378 
16379     if (prelude) {
16380         prelude->nd_body = node;
16381         scope->nd_body = prelude;
16382     }
16383     else {
16384         scope->nd_body = node;
16385     }
16386 
16387     return scope;
16388 }
16389 
16390 static const struct {
16391     ID token;
16392     const char *name;
16393 } op_tbl[] = {
16394     {tDOT2,     ".."},
16395     {tDOT3,     "..."},
16396     {tPOW,      "**"},
16397     {tDSTAR,    "**"},
16398     {tUPLUS,    "+@"},
16399     {tUMINUS,   "-@"},
16400     {tCMP,      "<=>"},
16401     {tGEQ,      ">="},
16402     {tLEQ,      "<="},
16403     {tEQ,       "=="},
16404     {tEQQ,      "==="},
16405     {tNEQ,      "!="},
16406     {tMATCH,    "=~"},
16407     {tNMATCH,   "!~"},
16408     {tAREF,     "[]"},
16409     {tASET,     "[]="},
16410     {tLSHFT,    "<<"},
16411     {tRSHFT,    ">>"},
16412     {tCOLON2,   "::"},
16413 };
16414 
16415 #define op_tbl_count numberof(op_tbl)
16416 
16417 #ifndef ENABLE_SELECTOR_NAMESPACE
16418 #define ENABLE_SELECTOR_NAMESPACE 0
16419 #endif
16420 
16421 static struct symbols {
16422     ID last_id;
16423     st_table *sym_id;
16424     st_table *id_str;
16425 #if ENABLE_SELECTOR_NAMESPACE
16426     st_table *ivar2_id;
16427     st_table *id_ivar2;
16428 #endif
16429     VALUE op_sym[tLAST_OP_ID];
16430 } global_symbols = {tLAST_TOKEN};
16431 
16432 static const struct st_hash_type symhash = {
16433     rb_str_hash_cmp,
16434     rb_str_hash,
16435 };
16436 
16437 #if ENABLE_SELECTOR_NAMESPACE
16438 struct ivar2_key {
16439     ID id;
16440     VALUE klass;
16441 };
16442 
16443 static int
16444 ivar2_cmp(struct ivar2_key *key1, struct ivar2_key *key2)
16445 {
16446     if (key1->id == key2->id && key1->klass == key2->klass) {
16447         return 0;
16448     }
16449     return 1;
16450 }
16451 
16452 static int
16453 ivar2_hash(struct ivar2_key *key)
16454 {
16455     return (key->id << 8) ^ (key->klass >> 2);
16456 }
16457 
16458 static const struct st_hash_type ivar2_hash_type = {
16459     ivar2_cmp,
16460     ivar2_hash,
16461 };
16462 #endif
16463 
16464 void
16465 Init_sym(void)
16466 {
16467     global_symbols.sym_id = st_init_table_with_size(&symhash, 1000);
16468     global_symbols.id_str = st_init_numtable_with_size(1000);
16469 #if ENABLE_SELECTOR_NAMESPACE
16470     global_symbols.ivar2_id = st_init_table_with_size(&ivar2_hash_type, 1000);
16471     global_symbols.id_ivar2 = st_init_numtable_with_size(1000);
16472 #endif
16473 
16474     (void)nodetype;
16475     (void)nodeline;
16476 #if PARSER_DEBUG
16477     (void)lex_state_name(-1);
16478 #endif
16479 
16480     Init_id();
16481 }
16482 
16483 void
16484 rb_gc_mark_symbols(void)
16485 {
16486     rb_mark_tbl(global_symbols.id_str);
16487     rb_gc_mark_locations(global_symbols.op_sym,
16488                          global_symbols.op_sym + numberof(global_symbols.op_sym));
16489 }
16490 #endif /* !RIPPER */
16491 
16492 static ID
16493 internal_id_gen(struct parser_params *parser)
16494 {
16495     ID id = (ID)vtable_size(lvtbl->args) + (ID)vtable_size(lvtbl->vars);
16496     id += ((tLAST_TOKEN - ID_INTERNAL) >> ID_SCOPE_SHIFT) + 1;
16497     return ID_INTERNAL | (id << ID_SCOPE_SHIFT);
16498 }
16499 
16500 #ifndef RIPPER
16501 static int
16502 is_special_global_name(const char *m, const char *e, rb_encoding *enc)
16503 {
16504     int mb = 0;
16505 
16506     if (m >= e) return 0;
16507     if (is_global_name_punct(*m)) {
16508         ++m;
16509     }
16510     else if (*m == '-') {
16511         ++m;
16512         if (m < e && is_identchar(m, e, enc)) {
16513             if (!ISASCII(*m)) mb = 1;
16514             m += rb_enc_mbclen(m, e, enc);
16515         }
16516     }
16517     else {
16518         if (!rb_enc_isdigit(*m, enc)) return 0;
16519         do {
16520             if (!ISASCII(*m)) mb = 1;
16521             ++m;
16522         } while (m < e && rb_enc_isdigit(*m, enc));
16523     }
16524     return m == e ? mb + 1 : 0;
16525 }
16526 
16527 int
16528 rb_symname_p(const char *name)
16529 {
16530     return rb_enc_symname_p(name, rb_ascii8bit_encoding());
16531 }
16532 
16533 int
16534 rb_enc_symname_p(const char *name, rb_encoding *enc)
16535 {
16536     return rb_enc_symname2_p(name, strlen(name), enc);
16537 }
16538 
16539 #define IDSET_ATTRSET_FOR_SYNTAX ((1U<<ID_LOCAL)|(1U<<ID_CONST))
16540 #define IDSET_ATTRSET_FOR_INTERN (~(~0U<<(1<<ID_SCOPE_SHIFT)) & ~(1U<<ID_ATTRSET))
16541 
16542 static int
16543 rb_enc_symname_type(const char *name, long len, rb_encoding *enc, unsigned int allowed_atttset)
16544 {
16545     const char *m = name;
16546     const char *e = m + len;
16547     int type = ID_JUNK;
16548 
16549     if (!m || len <= 0) return -1;
16550     switch (*m) {
16551       case '\0':
16552         return -1;
16553 
16554       case '$':
16555         type = ID_GLOBAL;
16556         if (is_special_global_name(++m, e, enc)) return type;
16557         goto id;
16558 
16559       case '@':
16560         type = ID_INSTANCE;
16561         if (*++m == '@') {
16562             ++m;
16563             type = ID_CLASS;
16564         }
16565         goto id;
16566 
16567       case '<':
16568         switch (*++m) {
16569           case '<': ++m; break;
16570           case '=': if (*++m == '>') ++m; break;
16571           default: break;
16572         }
16573         break;
16574 
16575       case '>':
16576         switch (*++m) {
16577           case '>': case '=': ++m; break;
16578         }
16579         break;
16580 
16581       case '=':
16582         switch (*++m) {
16583           case '~': ++m; break;
16584           case '=': if (*++m == '=') ++m; break;
16585           default: return -1;
16586         }
16587         break;
16588 
16589       case '*':
16590         if (*++m == '*') ++m;
16591         break;
16592 
16593       case '+': case '-':
16594         if (*++m == '@') ++m;
16595         break;
16596 
16597       case '|': case '^': case '&': case '/': case '%': case '~': case '`':
16598         ++m;
16599         break;
16600 
16601       case '[':
16602         if (*++m != ']') return -1;
16603         if (*++m == '=') ++m;
16604         break;
16605 
16606       case '!':
16607         if (len == 1) return ID_JUNK;
16608         switch (*++m) {
16609           case '=': case '~': ++m; break;
16610           default: return -1;
16611         }
16612         break;
16613 
16614       default:
16615         type = rb_enc_isupper(*m, enc) ? ID_CONST : ID_LOCAL;
16616       id:
16617         if (m >= e || (*m != '_' && !rb_enc_isalpha(*m, enc) && ISASCII(*m)))
16618             return -1;
16619         while (m < e && is_identchar(m, e, enc)) m += rb_enc_mbclen(m, e, enc);
16620         if (m >= e) break;
16621         switch (*m) {
16622           case '!': case '?':
16623             if (type == ID_GLOBAL || type == ID_CLASS || type == ID_INSTANCE) return -1;
16624             type = ID_JUNK;
16625             ++m;
16626             if (m + 1 < e || *m != '=') break;
16627             /* fall through */
16628           case '=':
16629             if (!(allowed_atttset & (1U << type))) return -1;
16630             type = ID_ATTRSET;
16631             ++m;
16632             break;
16633         }
16634         break;
16635     }
16636     return m == e ? type : -1;
16637 }
16638 
16639 int
16640 rb_enc_symname2_p(const char *name, long len, rb_encoding *enc)
16641 {
16642     return rb_enc_symname_type(name, len, enc, IDSET_ATTRSET_FOR_SYNTAX) != -1;
16643 }
16644 
16645 static int
16646 rb_str_symname_type(VALUE name, unsigned int allowed_atttset)
16647 {
16648     const char *ptr = StringValuePtr(name);
16649     long len = RSTRING_LEN(name);
16650     int type = rb_enc_symname_type(ptr, len, rb_enc_get(name), allowed_atttset);
16651     RB_GC_GUARD(name);
16652     return type;
16653 }
16654 
16655 static ID
16656 register_symid(ID id, const char *name, long len, rb_encoding *enc)
16657 {
16658     VALUE str = rb_enc_str_new(name, len, enc);
16659     return register_symid_str(id, str);
16660 }
16661 
16662 static ID
16663 register_symid_str(ID id, VALUE str)
16664 {
16665     OBJ_FREEZE(str);
16666     st_add_direct(global_symbols.sym_id, (st_data_t)str, id);
16667     st_add_direct(global_symbols.id_str, id, (st_data_t)str);
16668     return id;
16669 }
16670 
16671 static int
16672 sym_check_asciionly(VALUE str)
16673 {
16674     if (!rb_enc_asciicompat(rb_enc_get(str))) return FALSE;
16675     switch (rb_enc_str_coderange(str)) {
16676       case ENC_CODERANGE_BROKEN:
16677         rb_raise(rb_eEncodingError, "invalid encoding symbol");
16678       case ENC_CODERANGE_7BIT:
16679         return TRUE;
16680     }
16681     return FALSE;
16682 }
16683 
16684 /*
16685  * _str_ itself will be registered at the global symbol table.  _str_
16686  * can be modified before the registration, since the encoding will be
16687  * set to ASCII-8BIT if it is a special global name.
16688  */
16689 static ID intern_str(VALUE str);
16690 
16691 ID
16692 rb_intern3(const char *name, long len, rb_encoding *enc)
16693 {
16694     VALUE str;
16695     st_data_t data;
16696     struct RString fake_str;
16697     fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
16698     fake_str.basic.klass = rb_cString;
16699     fake_str.as.heap.len = len;
16700     fake_str.as.heap.ptr = (char *)name;
16701     fake_str.as.heap.aux.capa = len;
16702     str = (VALUE)&fake_str;
16703     rb_enc_associate(str, enc);
16704     OBJ_FREEZE(str);
16705 
16706     if (st_lookup(global_symbols.sym_id, str, &data))
16707         return (ID)data;
16708 
16709     str = rb_enc_str_new(name, len, enc); /* make true string */
16710     return intern_str(str);
16711 }
16712 
16713 static ID
16714 intern_str(VALUE str)
16715 {
16716     const char *name, *m, *e;
16717     long len, last;
16718     rb_encoding *enc, *symenc;
16719     unsigned char c;
16720     ID id;
16721     int mb;
16722 
16723     RSTRING_GETMEM(str, name, len);
16724     m = name;
16725     e = m + len;
16726     enc = rb_enc_get(str);
16727     symenc = enc;
16728 
16729     if (!len || (rb_cString && !rb_enc_asciicompat(enc))) {
16730       junk:
16731         id = ID_JUNK;
16732         goto new_id;
16733     }
16734     last = len-1;
16735     id = 0;
16736     switch (*m) {
16737       case '$':
16738         if (len < 2) goto junk;
16739         id |= ID_GLOBAL;
16740         if ((mb = is_special_global_name(++m, e, enc)) != 0) {
16741             if (!--mb) symenc = rb_usascii_encoding();
16742             goto new_id;
16743         }
16744         break;
16745       case '@':
16746         if (m[1] == '@') {
16747             if (len < 3) goto junk;
16748             m++;
16749             id |= ID_CLASS;
16750         }
16751         else {
16752             if (len < 2) goto junk;
16753             id |= ID_INSTANCE;
16754         }
16755         m++;
16756         break;
16757       default:
16758         c = m[0];
16759         if (c != '_' && rb_enc_isascii(c, enc) && rb_enc_ispunct(c, enc)) {
16760             /* operators */
16761             int i;
16762 
16763             if (len == 1) {
16764                 id = c;
16765                 goto id_register;
16766             }
16767             for (i = 0; i < op_tbl_count; i++) {
16768                 if (*op_tbl[i].name == *m &&
16769                     strcmp(op_tbl[i].name, m) == 0) {
16770                     id = op_tbl[i].token;
16771                     goto id_register;
16772                 }
16773             }
16774         }
16775         break;
16776     }
16777     if (name[last] == '=') {
16778         /* attribute assignment */
16779         if (last > 1 && name[last-1] == '=')
16780             goto junk;
16781         id = rb_intern3(name, last, enc);
16782         if (id > tLAST_OP_ID && !is_attrset_id(id)) {
16783             enc = rb_enc_get(rb_id2str(id));
16784             id = rb_id_attrset(id);
16785             goto id_register;
16786         }
16787         id = ID_ATTRSET;
16788     }
16789     else if (id == 0) {
16790         if (rb_enc_isupper(m[0], enc)) {
16791             id = ID_CONST;
16792         }
16793         else {
16794             id = ID_LOCAL;
16795         }
16796     }
16797     if (!rb_enc_isdigit(*m, enc)) {
16798         while (m <= name + last && is_identchar(m, e, enc)) {
16799             if (ISASCII(*m)) {
16800                 m++;
16801             }
16802             else {
16803                 m += rb_enc_mbclen(m, e, enc);
16804             }
16805         }
16806     }
16807     if (id != ID_ATTRSET && m - name < len) id = ID_JUNK;
16808     if (sym_check_asciionly(str)) symenc = rb_usascii_encoding();
16809   new_id:
16810     if (symenc != enc) rb_enc_associate(str, symenc);
16811     if (global_symbols.last_id >= ~(ID)0 >> (ID_SCOPE_SHIFT+RUBY_SPECIAL_SHIFT)) {
16812         if (len > 20) {
16813             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.20s...)",
16814                      name);
16815         }
16816         else {
16817             rb_raise(rb_eRuntimeError, "symbol table overflow (symbol %.*s)",
16818                      (int)len, name);
16819         }
16820     }
16821     id |= ++global_symbols.last_id << ID_SCOPE_SHIFT;
16822   id_register:
16823     return register_symid_str(id, str);
16824 }
16825 
16826 ID
16827 rb_intern2(const char *name, long len)
16828 {
16829     return rb_intern3(name, len, rb_usascii_encoding());
16830 }
16831 
16832 #undef rb_intern
16833 ID
16834 rb_intern(const char *name)
16835 {
16836     return rb_intern2(name, strlen(name));
16837 }
16838 
16839 ID
16840 rb_intern_str(VALUE str)
16841 {
16842     st_data_t id;
16843 
16844     if (st_lookup(global_symbols.sym_id, str, &id))
16845         return (ID)id;
16846     return intern_str(rb_str_dup(str));
16847 }
16848 
16849 VALUE
16850 rb_id2str(ID id)
16851 {
16852     st_data_t data;
16853 
16854     if (id < tLAST_TOKEN) {
16855         int i = 0;
16856 
16857         if (id < INT_MAX && rb_ispunct((int)id)) {
16858             VALUE str = global_symbols.op_sym[i = (int)id];
16859             if (!str) {
16860                 char name[2];
16861                 name[0] = (char)id;
16862                 name[1] = 0;
16863                 str = rb_usascii_str_new(name, 1);
16864                 OBJ_FREEZE(str);
16865                 global_symbols.op_sym[i] = str;
16866             }
16867             return str;
16868         }
16869         for (i = 0; i < op_tbl_count; i++) {
16870             if (op_tbl[i].token == id) {
16871                 VALUE str = global_symbols.op_sym[i];
16872                 if (!str) {
16873                     str = rb_usascii_str_new2(op_tbl[i].name);
16874                     OBJ_FREEZE(str);
16875                     global_symbols.op_sym[i] = str;
16876                 }
16877                 return str;
16878             }
16879         }
16880     }
16881 
16882     if (st_lookup(global_symbols.id_str, id, &data)) {
16883         VALUE str = (VALUE)data;
16884         if (RBASIC(str)->klass == 0)
16885             RBASIC(str)->klass = rb_cString;
16886         return str;
16887     }
16888 
16889     if (is_attrset_id(id)) {
16890         ID id_stem = (id & ~ID_SCOPE_MASK);
16891         VALUE str;
16892 
16893         do {
16894             if (!!(str = rb_id2str(id_stem | ID_LOCAL))) break;
16895             if (!!(str = rb_id2str(id_stem | ID_CONST))) break;
16896             if (!!(str = rb_id2str(id_stem | ID_INSTANCE))) break;
16897             if (!!(str = rb_id2str(id_stem | ID_GLOBAL))) break;
16898             if (!!(str = rb_id2str(id_stem | ID_CLASS))) break;
16899             if (!!(str = rb_id2str(id_stem | ID_JUNK))) break;
16900             return 0;
16901         } while (0);
16902         str = rb_str_dup(str);
16903         rb_str_cat(str, "=", 1);
16904         register_symid_str(id, str);
16905         if (st_lookup(global_symbols.id_str, id, &data)) {
16906             VALUE str = (VALUE)data;
16907             if (RBASIC(str)->klass == 0)
16908                 RBASIC(str)->klass = rb_cString;
16909             return str;
16910         }
16911     }
16912     return 0;
16913 }
16914 
16915 const char *
16916 rb_id2name(ID id)
16917 {
16918     VALUE str = rb_id2str(id);
16919 
16920     if (!str) return 0;
16921     return RSTRING_PTR(str);
16922 }
16923 
16924 static int
16925 symbols_i(VALUE sym, ID value, VALUE ary)
16926 {
16927     rb_ary_push(ary, ID2SYM(value));
16928     return ST_CONTINUE;
16929 }
16930 
16931 /*
16932  *  call-seq:
16933  *     Symbol.all_symbols    => array
16934  *
16935  *  Returns an array of all the symbols currently in Ruby's symbol
16936  *  table.
16937  *
16938  *     Symbol.all_symbols.size    #=> 903
16939  *     Symbol.all_symbols[1,20]   #=> [:floor, :ARGV, :Binding, :symlink,
16940  *                                     :chown, :EOFError, :$;, :String,
16941  *                                     :LOCK_SH, :"setuid?", :$<,
16942  *                                     :default_proc, :compact, :extend,
16943  *                                     :Tms, :getwd, :$=, :ThreadGroup,
16944  *                                     :wait2, :$>]
16945  */
16946 
16947 VALUE
16948 rb_sym_all_symbols(void)
16949 {
16950     VALUE ary = rb_ary_new2(global_symbols.sym_id->num_entries);
16951 
16952     st_foreach(global_symbols.sym_id, symbols_i, ary);
16953     return ary;
16954 }
16955 
16956 int
16957 rb_is_const_id(ID id)
16958 {
16959     return is_const_id(id);
16960 }
16961 
16962 int
16963 rb_is_class_id(ID id)
16964 {
16965     return is_class_id(id);
16966 }
16967 
16968 int
16969 rb_is_global_id(ID id)
16970 {
16971     return is_global_id(id);
16972 }
16973 
16974 int
16975 rb_is_instance_id(ID id)
16976 {
16977     return is_instance_id(id);
16978 }
16979 
16980 int
16981 rb_is_attrset_id(ID id)
16982 {
16983     return is_attrset_id(id);
16984 }
16985 
16986 int
16987 rb_is_local_id(ID id)
16988 {
16989     return is_local_id(id);
16990 }
16991 
16992 int
16993 rb_is_junk_id(ID id)
16994 {
16995     return is_junk_id(id);
16996 }
16997 
17009 ID
17010 rb_check_id(volatile VALUE *namep)
17011 {
17012     st_data_t id;
17013     VALUE tmp;
17014     VALUE name = *namep;
17015 
17016     if (SYMBOL_P(name)) {
17017         return SYM2ID(name);
17018     }
17019     else if (!RB_TYPE_P(name, T_STRING)) {
17020         tmp = rb_check_string_type(name);
17021         if (NIL_P(tmp)) {
17022             tmp = rb_inspect(name);
17023             rb_raise(rb_eTypeError, "%s is not a symbol",
17024                      RSTRING_PTR(tmp));
17025         }
17026         name = tmp;
17027         *namep = name;
17028     }
17029 
17030     sym_check_asciionly(name);
17031 
17032     if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17033         return (ID)id;
17034 
17035     if (rb_is_attrset_name(name)) {
17036         struct RString fake_str;
17037         const VALUE localname = (VALUE)&fake_str;
17038         /* make local name by chopping '=' */
17039         fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
17040         fake_str.basic.klass = rb_cString;
17041         fake_str.as.heap.len = RSTRING_LEN(name) - 1;
17042         fake_str.as.heap.ptr = RSTRING_PTR(name);
17043         fake_str.as.heap.aux.capa = fake_str.as.heap.len;
17044         rb_enc_copy(localname, name);
17045         OBJ_FREEZE(localname);
17046 
17047         if (st_lookup(global_symbols.sym_id, (st_data_t)localname, &id)) {
17048             return rb_id_attrset((ID)id);
17049         }
17050         RB_GC_GUARD(name);
17051     }
17052 
17053     return (ID)0;
17054 }
17055 
17056 ID
17057 rb_check_id_cstr(const char *ptr, long len, rb_encoding *enc)
17058 {
17059     st_data_t id;
17060     struct RString fake_str;
17061     const VALUE name = (VALUE)&fake_str;
17062     fake_str.basic.flags = T_STRING|RSTRING_NOEMBED;
17063     fake_str.basic.klass = rb_cString;
17064     fake_str.as.heap.len = len;
17065     fake_str.as.heap.ptr = (char *)ptr;
17066     fake_str.as.heap.aux.capa = len;
17067     rb_enc_associate(name, enc);
17068 
17069     sym_check_asciionly(name);
17070 
17071     if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id))
17072         return (ID)id;
17073 
17074     if (rb_is_attrset_name(name)) {
17075         fake_str.as.heap.len = len - 1;
17076         if (st_lookup(global_symbols.sym_id, (st_data_t)name, &id)) {
17077             return rb_id_attrset((ID)id);
17078         }
17079     }
17080 
17081     return (ID)0;
17082 }
17083 
17084 int
17085 rb_is_const_name(VALUE name)
17086 {
17087     return rb_str_symname_type(name, 0) == ID_CONST;
17088 }
17089 
17090 int
17091 rb_is_class_name(VALUE name)
17092 {
17093     return rb_str_symname_type(name, 0) == ID_CLASS;
17094 }
17095 
17096 int
17097 rb_is_global_name(VALUE name)
17098 {
17099     return rb_str_symname_type(name, 0) == ID_GLOBAL;
17100 }
17101 
17102 int
17103 rb_is_instance_name(VALUE name)
17104 {
17105     return rb_str_symname_type(name, 0) == ID_INSTANCE;
17106 }
17107 
17108 int
17109 rb_is_attrset_name(VALUE name)
17110 {
17111     return rb_str_symname_type(name, IDSET_ATTRSET_FOR_INTERN) == ID_ATTRSET;
17112 }
17113 
17114 int
17115 rb_is_local_name(VALUE name)
17116 {
17117     return rb_str_symname_type(name, 0) == ID_LOCAL;
17118 }
17119 
17120 int
17121 rb_is_method_name(VALUE name)
17122 {
17123     switch (rb_str_symname_type(name, 0)) {
17124       case ID_LOCAL: case ID_ATTRSET: case ID_JUNK:
17125         return TRUE;
17126     }
17127     return FALSE;
17128 }
17129 
17130 int
17131 rb_is_junk_name(VALUE name)
17132 {
17133     return rb_str_symname_type(name, IDSET_ATTRSET_FOR_SYNTAX) == -1;
17134 }
17135 
17136 #endif /* !RIPPER */
17137 
17138 static void
17139 parser_initialize(struct parser_params *parser)
17140 {
17141     parser->eofp = Qfalse;
17142 
17143     parser->parser_lex_strterm = 0;
17144     parser->parser_cond_stack = 0;
17145     parser->parser_cmdarg_stack = 0;
17146     parser->parser_class_nest = 0;
17147     parser->parser_paren_nest = 0;
17148     parser->parser_lpar_beg = 0;
17149     parser->parser_brace_nest = 0;
17150     parser->parser_in_single = 0;
17151     parser->parser_in_def = 0;
17152     parser->parser_in_defined = 0;
17153     parser->parser_compile_for_eval = 0;
17154     parser->parser_cur_mid = 0;
17155     parser->parser_tokenbuf = NULL;
17156     parser->parser_tokidx = 0;
17157     parser->parser_toksiz = 0;
17158     parser->parser_heredoc_end = 0;
17159     parser->parser_command_start = TRUE;
17160     parser->parser_deferred_nodes = 0;
17161     parser->parser_lex_pbeg = 0;
17162     parser->parser_lex_p = 0;
17163     parser->parser_lex_pend = 0;
17164     parser->parser_lvtbl = 0;
17165     parser->parser_ruby__end__seen = 0;
17166     parser->parser_ruby_sourcefile = 0;
17167     parser->parser_ruby_sourcefile_string = Qnil;
17168 #ifndef RIPPER
17169     parser->is_ripper = 0;
17170     parser->parser_eval_tree_begin = 0;
17171     parser->parser_eval_tree = 0;
17172 #else
17173     parser->is_ripper = 1;
17174     parser->delayed = Qnil;
17175 
17176     parser->result = Qnil;
17177     parser->parsing_thread = Qnil;
17178     parser->toplevel_p = TRUE;
17179 #endif
17180 #ifdef YYMALLOC
17181     parser->heap = NULL;
17182 #endif
17183     parser->enc = rb_utf8_encoding();
17184 }
17185 
17186 #ifdef RIPPER
17187 #define parser_mark ripper_parser_mark
17188 #define parser_free ripper_parser_free
17189 #endif
17190 
17191 static void
17192 parser_mark(void *ptr)
17193 {
17194     struct parser_params *p = (struct parser_params*)ptr;
17195 
17196     rb_gc_mark((VALUE)p->parser_lex_strterm);
17197     rb_gc_mark((VALUE)p->parser_deferred_nodes);
17198     rb_gc_mark(p->parser_lex_input);
17199     rb_gc_mark(p->parser_lex_lastline);
17200     rb_gc_mark(p->parser_lex_nextline);
17201     rb_gc_mark(p->parser_ruby_sourcefile_string);
17202 #ifndef RIPPER
17203     rb_gc_mark((VALUE)p->parser_eval_tree_begin) ;
17204     rb_gc_mark((VALUE)p->parser_eval_tree) ;
17205     rb_gc_mark(p->debug_lines);
17206 #else
17207     rb_gc_mark(p->delayed);
17208     rb_gc_mark(p->value);
17209     rb_gc_mark(p->result);
17210     rb_gc_mark(p->parsing_thread);
17211 #endif
17212 #ifdef YYMALLOC
17213     rb_gc_mark((VALUE)p->heap);
17214 #endif
17215 }
17216 
17217 static void
17218 parser_free(void *ptr)
17219 {
17220     struct parser_params *p = (struct parser_params*)ptr;
17221     struct local_vars *local, *prev;
17222 
17223     if (p->parser_tokenbuf) {
17224         xfree(p->parser_tokenbuf);
17225     }
17226     for (local = p->parser_lvtbl; local; local = prev) {
17227         if (local->vars) xfree(local->vars);
17228         prev = local->prev;
17229         xfree(local);
17230     }
17231     xfree(p);
17232 }
17233 
17234 static size_t
17235 parser_memsize(const void *ptr)
17236 {
17237     struct parser_params *p = (struct parser_params*)ptr;
17238     struct local_vars *local;
17239     size_t size = sizeof(*p);
17240 
17241     if (!ptr) return 0;
17242     size += p->parser_toksiz;
17243     for (local = p->parser_lvtbl; local; local = local->prev) {
17244         size += sizeof(*local);
17245         if (local->vars) size += local->vars->capa * sizeof(ID);
17246     }
17247     return size;
17248 }
17249 
17250 static
17251 #ifndef RIPPER
17252 const
17253 #endif
17254 rb_data_type_t parser_data_type = {
17255     "parser",
17256     {
17257         parser_mark,
17258         parser_free,
17259         parser_memsize,
17260     },
17261 };
17262 
17263 #ifndef RIPPER
17264 #undef rb_reserved_word
17265 
17266 const struct kwtable *
17267 rb_reserved_word(const char *str, unsigned int len)
17268 {
17269     return reserved_word(str, len);
17270 }
17271 
17272 static struct parser_params *
17273 parser_new(void)
17274 {
17275     struct parser_params *p;
17276 
17277     p = ALLOC_N(struct parser_params, 1);
17278     MEMZERO(p, struct parser_params, 1);
17279     parser_initialize(p);
17280     return p;
17281 }
17282 
17283 VALUE
17284 rb_parser_new(void)
17285 {
17286     struct parser_params *p = parser_new();
17287 
17288     return TypedData_Wrap_Struct(0, &parser_data_type, p);
17289 }
17290 
17291 /*
17292  *  call-seq:
17293  *    ripper#end_seen?   -> Boolean
17294  *
17295  *  Return true if parsed source ended by +\_\_END\_\_+.
17296  */
17297 VALUE
17298 rb_parser_end_seen_p(VALUE vparser)
17299 {
17300     struct parser_params *parser;
17301 
17302     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17303     return ruby__end__seen ? Qtrue : Qfalse;
17304 }
17305 
17306 /*
17307  *  call-seq:
17308  *    ripper#encoding   -> encoding
17309  *
17310  *  Return encoding of the source.
17311  */
17312 VALUE
17313 rb_parser_encoding(VALUE vparser)
17314 {
17315     struct parser_params *parser;
17316 
17317     TypedData_Get_Struct(vparser, struct parser_params, &parser_data_type, parser);
17318     return rb_enc_from_encoding(current_enc);
17319 }
17320 
17321 /*
17322  *  call-seq:
17323  *    ripper.yydebug   -> true or false
17324  *
17325  *  Get yydebug.
17326  */
17327 VALUE
17328 rb_parser_get_yydebug(VALUE self)
17329 {
17330     struct parser_params *parser;
17331 
17332     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17333     return yydebug ? Qtrue : Qfalse;
17334 }
17335 
17336 /*
17337  *  call-seq:
17338  *    ripper.yydebug = flag
17339  *
17340  *  Set yydebug.
17341  */
17342 VALUE
17343 rb_parser_set_yydebug(VALUE self, VALUE flag)
17344 {
17345     struct parser_params *parser;
17346 
17347     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17348     yydebug = RTEST(flag);
17349     return flag;
17350 }
17351 
17352 #ifdef YYMALLOC
17353 #define HEAPCNT(n, size) ((n) * (size) / sizeof(YYSTYPE))
17354 #define NEWHEAP() rb_node_newnode(NODE_ALLOCA, 0, (VALUE)parser->heap, 0)
17355 #define ADD2HEAP(n, c, p) ((parser->heap = (n))->u1.node = (p), \
17356                            (n)->u3.cnt = (c), (p))
17357 
17358 void *
17359 rb_parser_malloc(struct parser_params *parser, size_t size)
17360 {
17361     size_t cnt = HEAPCNT(1, size);
17362     NODE *n = NEWHEAP();
17363     void *ptr = xmalloc(size);
17364 
17365     return ADD2HEAP(n, cnt, ptr);
17366 }
17367 
17368 void *
17369 rb_parser_calloc(struct parser_params *parser, size_t nelem, size_t size)
17370 {
17371     size_t cnt = HEAPCNT(nelem, size);
17372     NODE *n = NEWHEAP();
17373     void *ptr = xcalloc(nelem, size);
17374 
17375     return ADD2HEAP(n, cnt, ptr);
17376 }
17377 
17378 void *
17379 rb_parser_realloc(struct parser_params *parser, void *ptr, size_t size)
17380 {
17381     NODE *n;
17382     size_t cnt = HEAPCNT(1, size);
17383 
17384     if (ptr && (n = parser->heap) != NULL) {
17385         do {
17386             if (n->u1.node == ptr) {
17387                 n->u1.node = ptr = xrealloc(ptr, size);
17388                 if (n->u3.cnt) n->u3.cnt = cnt;
17389                 return ptr;
17390             }
17391         } while ((n = n->u2.node) != NULL);
17392     }
17393     n = NEWHEAP();
17394     ptr = xrealloc(ptr, size);
17395     return ADD2HEAP(n, cnt, ptr);
17396 }
17397 
17398 void
17399 rb_parser_free(struct parser_params *parser, void *ptr)
17400 {
17401     NODE **prev = &parser->heap, *n;
17402 
17403     while ((n = *prev) != NULL) {
17404         if (n->u1.node == ptr) {
17405             *prev = n->u2.node;
17406             rb_gc_force_recycle((VALUE)n);
17407             break;
17408         }
17409         prev = &n->u2.node;
17410     }
17411     xfree(ptr);
17412 }
17413 #endif
17414 #endif
17415 
17416 #ifdef RIPPER
17417 #ifdef RIPPER_DEBUG
17418 extern int rb_is_pointer_to_heap(VALUE);
17419 
17420 /* :nodoc: */
17421 static VALUE
17422 ripper_validate_object(VALUE self, VALUE x)
17423 {
17424     if (x == Qfalse) return x;
17425     if (x == Qtrue) return x;
17426     if (x == Qnil) return x;
17427     if (x == Qundef)
17428         rb_raise(rb_eArgError, "Qundef given");
17429     if (FIXNUM_P(x)) return x;
17430     if (SYMBOL_P(x)) return x;
17431     if (!rb_is_pointer_to_heap(x))
17432         rb_raise(rb_eArgError, "invalid pointer: %p", x);
17433     switch (TYPE(x)) {
17434       case T_STRING:
17435       case T_OBJECT:
17436       case T_ARRAY:
17437       case T_BIGNUM:
17438       case T_FLOAT:
17439         return x;
17440       case T_NODE:
17441         if (nd_type(x) != NODE_LASGN) {
17442             rb_raise(rb_eArgError, "NODE given: %p", x);
17443         }
17444         return ((NODE *)x)->nd_rval;
17445       default:
17446         rb_raise(rb_eArgError, "wrong type of ruby object: %p (%s)",
17447                  x, rb_obj_classname(x));
17448     }
17449     return x;
17450 }
17451 #endif
17452 
17453 #define validate(x) ((x) = get_value(x))
17454 
17455 static VALUE
17456 ripper_dispatch0(struct parser_params *parser, ID mid)
17457 {
17458     return rb_funcall(parser->value, mid, 0);
17459 }
17460 
17461 static VALUE
17462 ripper_dispatch1(struct parser_params *parser, ID mid, VALUE a)
17463 {
17464     validate(a);
17465     return rb_funcall(parser->value, mid, 1, a);
17466 }
17467 
17468 static VALUE
17469 ripper_dispatch2(struct parser_params *parser, ID mid, VALUE a, VALUE b)
17470 {
17471     validate(a);
17472     validate(b);
17473     return rb_funcall(parser->value, mid, 2, a, b);
17474 }
17475 
17476 static VALUE
17477 ripper_dispatch3(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c)
17478 {
17479     validate(a);
17480     validate(b);
17481     validate(c);
17482     return rb_funcall(parser->value, mid, 3, a, b, c);
17483 }
17484 
17485 static VALUE
17486 ripper_dispatch4(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d)
17487 {
17488     validate(a);
17489     validate(b);
17490     validate(c);
17491     validate(d);
17492     return rb_funcall(parser->value, mid, 4, a, b, c, d);
17493 }
17494 
17495 static VALUE
17496 ripper_dispatch5(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e)
17497 {
17498     validate(a);
17499     validate(b);
17500     validate(c);
17501     validate(d);
17502     validate(e);
17503     return rb_funcall(parser->value, mid, 5, a, b, c, d, e);
17504 }
17505 
17506 static VALUE
17507 ripper_dispatch7(struct parser_params *parser, ID mid, VALUE a, VALUE b, VALUE c, VALUE d, VALUE e, VALUE f, VALUE g)
17508 {
17509     validate(a);
17510     validate(b);
17511     validate(c);
17512     validate(d);
17513     validate(e);
17514     validate(f);
17515     validate(g);
17516     return rb_funcall(parser->value, mid, 7, a, b, c, d, e, f, g);
17517 }
17518 
17519 static const struct kw_assoc {
17520     ID id;
17521     const char *name;
17522 } keyword_to_name[] = {
17523     {keyword_class,     "class"},
17524     {keyword_module,    "module"},
17525     {keyword_def,       "def"},
17526     {keyword_undef,     "undef"},
17527     {keyword_begin,     "begin"},
17528     {keyword_rescue,    "rescue"},
17529     {keyword_ensure,    "ensure"},
17530     {keyword_end,       "end"},
17531     {keyword_if,        "if"},
17532     {keyword_unless,    "unless"},
17533     {keyword_then,      "then"},
17534     {keyword_elsif,     "elsif"},
17535     {keyword_else,      "else"},
17536     {keyword_case,      "case"},
17537     {keyword_when,      "when"},
17538     {keyword_while,     "while"},
17539     {keyword_until,     "until"},
17540     {keyword_for,       "for"},
17541     {keyword_break,     "break"},
17542     {keyword_next,      "next"},
17543     {keyword_redo,      "redo"},
17544     {keyword_retry,     "retry"},
17545     {keyword_in,        "in"},
17546     {keyword_do,        "do"},
17547     {keyword_do_cond,   "do"},
17548     {keyword_do_block,  "do"},
17549     {keyword_return,    "return"},
17550     {keyword_yield,     "yield"},
17551     {keyword_super,     "super"},
17552     {keyword_self,      "self"},
17553     {keyword_nil,       "nil"},
17554     {keyword_true,      "true"},
17555     {keyword_false,     "false"},
17556     {keyword_and,       "and"},
17557     {keyword_or,        "or"},
17558     {keyword_not,       "not"},
17559     {modifier_if,       "if"},
17560     {modifier_unless,   "unless"},
17561     {modifier_while,    "while"},
17562     {modifier_until,    "until"},
17563     {modifier_rescue,   "rescue"},
17564     {keyword_alias,     "alias"},
17565     {keyword_defined,   "defined?"},
17566     {keyword_BEGIN,     "BEGIN"},
17567     {keyword_END,       "END"},
17568     {keyword__LINE__,   "__LINE__"},
17569     {keyword__FILE__,   "__FILE__"},
17570     {keyword__ENCODING__, "__ENCODING__"},
17571     {0, NULL}
17572 };
17573 
17574 static const char*
17575 keyword_id_to_str(ID id)
17576 {
17577     const struct kw_assoc *a;
17578 
17579     for (a = keyword_to_name; a->id; a++) {
17580         if (a->id == id)
17581             return a->name;
17582     }
17583     return NULL;
17584 }
17585 
17586 #undef ripper_id2sym
17587 static VALUE
17588 ripper_id2sym(ID id)
17589 {
17590     const char *name;
17591     char buf[8];
17592 
17593     if (id <= 256) {
17594         buf[0] = (char)id;
17595         buf[1] = '\0';
17596         return ID2SYM(rb_intern2(buf, 1));
17597     }
17598     if ((name = keyword_id_to_str(id))) {
17599         return ID2SYM(rb_intern(name));
17600     }
17601     switch (id) {
17602       case tOROP:
17603         name = "||";
17604         break;
17605       case tANDOP:
17606         name = "&&";
17607         break;
17608       default:
17609         name = rb_id2name(id);
17610         if (!name) {
17611             rb_bug("cannot convert ID to string: %ld", (unsigned long)id);
17612         }
17613         return ID2SYM(id);
17614     }
17615     return ID2SYM(rb_intern(name));
17616 }
17617 
17618 static ID
17619 ripper_get_id(VALUE v)
17620 {
17621     NODE *nd;
17622     if (!RB_TYPE_P(v, T_NODE)) return 0;
17623     nd = (NODE *)v;
17624     if (nd_type(nd) != NODE_LASGN) return 0;
17625     return nd->nd_vid;
17626 }
17627 
17628 static VALUE
17629 ripper_get_value(VALUE v)
17630 {
17631     NODE *nd;
17632     if (v == Qundef) return Qnil;
17633     if (!RB_TYPE_P(v, T_NODE)) return v;
17634     nd = (NODE *)v;
17635     if (nd_type(nd) != NODE_LASGN) return Qnil;
17636     return nd->nd_rval;
17637 }
17638 
17639 static void
17640 ripper_compile_error(struct parser_params *parser, const char *fmt, ...)
17641 {
17642     VALUE str;
17643     va_list args;
17644 
17645     va_start(args, fmt);
17646     str = rb_vsprintf(fmt, args);
17647     va_end(args);
17648     rb_funcall(parser->value, rb_intern("compile_error"), 1, str);
17649 }
17650 
17651 static void
17652 ripper_warn0(struct parser_params *parser, const char *fmt)
17653 {
17654     rb_funcall(parser->value, rb_intern("warn"), 1, STR_NEW2(fmt));
17655 }
17656 
17657 static void
17658 ripper_warnI(struct parser_params *parser, const char *fmt, int a)
17659 {
17660     rb_funcall(parser->value, rb_intern("warn"), 2,
17661                STR_NEW2(fmt), INT2NUM(a));
17662 }
17663 
17664 static void
17665 ripper_warnS(struct parser_params *parser, const char *fmt, const char *str)
17666 {
17667     rb_funcall(parser->value, rb_intern("warn"), 2,
17668                STR_NEW2(fmt), STR_NEW2(str));
17669 }
17670 
17671 static void
17672 ripper_warning0(struct parser_params *parser, const char *fmt)
17673 {
17674     rb_funcall(parser->value, rb_intern("warning"), 1, STR_NEW2(fmt));
17675 }
17676 
17677 static void
17678 ripper_warningS(struct parser_params *parser, const char *fmt, const char *str)
17679 {
17680     rb_funcall(parser->value, rb_intern("warning"), 2,
17681                STR_NEW2(fmt), STR_NEW2(str));
17682 }
17683 
17684 static VALUE
17685 ripper_lex_get_generic(struct parser_params *parser, VALUE src)
17686 {
17687     return rb_io_gets(src);
17688 }
17689 
17690 static VALUE
17691 ripper_s_allocate(VALUE klass)
17692 {
17693     struct parser_params *p;
17694     VALUE self;
17695 
17696     p = ALLOC_N(struct parser_params, 1);
17697     MEMZERO(p, struct parser_params, 1);
17698     self = TypedData_Wrap_Struct(klass, &parser_data_type, p);
17699     p->value = self;
17700     return self;
17701 }
17702 
17703 #define ripper_initialized_p(r) ((r)->parser_lex_input != 0)
17704 
17705 /*
17706  *  call-seq:
17707  *    Ripper.new(src, filename="(ripper)", lineno=1) -> ripper
17708  *
17709  *  Create a new Ripper object.
17710  *  _src_ must be a String, an IO, or an Object which has #gets method.
17711  *
17712  *  This method does not starts parsing.
17713  *  See also Ripper#parse and Ripper.parse.
17714  */
17715 static VALUE
17716 ripper_initialize(int argc, VALUE *argv, VALUE self)
17717 {
17718     struct parser_params *parser;
17719     VALUE src, fname, lineno;
17720 
17721     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17722     rb_scan_args(argc, argv, "12", &src, &fname, &lineno);
17723     if (RB_TYPE_P(src, T_FILE)) {
17724         parser->parser_lex_gets = ripper_lex_get_generic;
17725     }
17726     else {
17727         StringValue(src);
17728         parser->parser_lex_gets = lex_get_str;
17729     }
17730     parser->parser_lex_input = src;
17731     parser->eofp = Qfalse;
17732     if (NIL_P(fname)) {
17733         fname = STR_NEW2("(ripper)");
17734     }
17735     else {
17736         StringValue(fname);
17737     }
17738     parser_initialize(parser);
17739 
17740     parser->parser_ruby_sourcefile_string = fname;
17741     parser->parser_ruby_sourcefile = RSTRING_PTR(fname);
17742     parser->parser_ruby_sourceline = NIL_P(lineno) ? 0 : NUM2INT(lineno) - 1;
17743 
17744     return Qnil;
17745 }
17746 
17747 struct ripper_args {
17748     struct parser_params *parser;
17749     int argc;
17750     VALUE *argv;
17751 };
17752 
17753 static VALUE
17754 ripper_parse0(VALUE parser_v)
17755 {
17756     struct parser_params *parser;
17757 
17758     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17759     parser_prepare(parser);
17760     ripper_yyparse((void*)parser);
17761     return parser->result;
17762 }
17763 
17764 static VALUE
17765 ripper_ensure(VALUE parser_v)
17766 {
17767     struct parser_params *parser;
17768 
17769     TypedData_Get_Struct(parser_v, struct parser_params, &parser_data_type, parser);
17770     parser->parsing_thread = Qnil;
17771     return Qnil;
17772 }
17773 
17774 /*
17775  *  call-seq:
17776  *    ripper#parse
17777  *
17778  *  Start parsing and returns the value of the root action.
17779  */
17780 static VALUE
17781 ripper_parse(VALUE self)
17782 {
17783     struct parser_params *parser;
17784 
17785     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17786     if (!ripper_initialized_p(parser)) {
17787         rb_raise(rb_eArgError, "method called for uninitialized object");
17788     }
17789     if (!NIL_P(parser->parsing_thread)) {
17790         if (parser->parsing_thread == rb_thread_current())
17791             rb_raise(rb_eArgError, "Ripper#parse is not reentrant");
17792         else
17793             rb_raise(rb_eArgError, "Ripper#parse is not multithread-safe");
17794     }
17795     parser->parsing_thread = rb_thread_current();
17796     rb_ensure(ripper_parse0, self, ripper_ensure, self);
17797 
17798     return parser->result;
17799 }
17800 
17801 /*
17802  *  call-seq:
17803  *    ripper#column   -> Integer
17804  *
17805  *  Return column number of current parsing line.
17806  *  This number starts from 0.
17807  */
17808 static VALUE
17809 ripper_column(VALUE self)
17810 {
17811     struct parser_params *parser;
17812     long col;
17813 
17814     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17815     if (!ripper_initialized_p(parser)) {
17816         rb_raise(rb_eArgError, "method called for uninitialized object");
17817     }
17818     if (NIL_P(parser->parsing_thread)) return Qnil;
17819     col = parser->tokp - parser->parser_lex_pbeg;
17820     return LONG2NUM(col);
17821 }
17822 
17823 /*
17824  *  call-seq:
17825  *    ripper#filename   -> String
17826  *
17827  *  Return current parsing filename.
17828  */
17829 static VALUE
17830 ripper_filename(VALUE self)
17831 {
17832     struct parser_params *parser;
17833 
17834     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17835     if (!ripper_initialized_p(parser)) {
17836         rb_raise(rb_eArgError, "method called for uninitialized object");
17837     }
17838     return parser->parser_ruby_sourcefile_string;
17839 }
17840 
17841 /*
17842  *  call-seq:
17843  *    ripper#lineno   -> Integer
17844  *
17845  *  Return line number of current parsing line.
17846  *  This number starts from 1.
17847  */
17848 static VALUE
17849 ripper_lineno(VALUE self)
17850 {
17851     struct parser_params *parser;
17852 
17853     TypedData_Get_Struct(self, struct parser_params, &parser_data_type, parser);
17854     if (!ripper_initialized_p(parser)) {
17855         rb_raise(rb_eArgError, "method called for uninitialized object");
17856     }
17857     if (NIL_P(parser->parsing_thread)) return Qnil;
17858     return INT2NUM(parser->parser_ruby_sourceline);
17859 }
17860 
17861 #ifdef RIPPER_DEBUG
17862 /* :nodoc: */
17863 static VALUE
17864 ripper_assert_Qundef(VALUE self, VALUE obj, VALUE msg)
17865 {
17866     StringValue(msg);
17867     if (obj == Qundef) {
17868         rb_raise(rb_eArgError, "%s", RSTRING_PTR(msg));
17869     }
17870     return Qnil;
17871 }
17872 
17873 /* :nodoc: */
17874 static VALUE
17875 ripper_value(VALUE self, VALUE obj)
17876 {
17877     return ULONG2NUM(obj);
17878 }
17879 #endif
17880 
17881 
17882 void
17883 Init_ripper(void)
17884 {
17885     parser_data_type.parent = RTYPEDDATA_TYPE(rb_parser_new());
17886 
17887     ripper_init_eventids1();
17888     ripper_init_eventids2();
17889     /* ensure existing in symbol table */
17890     (void)rb_intern("||");
17891     (void)rb_intern("&&");
17892 
17893     InitVM(ripper);
17894 }
17895 
17896 void
17897 InitVM_ripper(void)
17898 {
17899     VALUE Ripper;
17900 
17901     Ripper = rb_define_class("Ripper", rb_cObject);
17902     rb_define_const(Ripper, "Version", rb_usascii_str_new2(RIPPER_VERSION));
17903     rb_define_alloc_func(Ripper, ripper_s_allocate);
17904     rb_define_method(Ripper, "initialize", ripper_initialize, -1);
17905     rb_define_method(Ripper, "parse", ripper_parse, 0);
17906     rb_define_method(Ripper, "column", ripper_column, 0);
17907     rb_define_method(Ripper, "filename", ripper_filename, 0);
17908     rb_define_method(Ripper, "lineno", ripper_lineno, 0);
17909     rb_define_method(Ripper, "end_seen?", rb_parser_end_seen_p, 0);
17910     rb_define_method(Ripper, "encoding", rb_parser_encoding, 0);
17911     rb_define_method(Ripper, "yydebug", rb_parser_get_yydebug, 0);
17912     rb_define_method(Ripper, "yydebug=", rb_parser_set_yydebug, 1);
17913 #ifdef RIPPER_DEBUG
17914     rb_define_method(rb_mKernel, "assert_Qundef", ripper_assert_Qundef, 2);
17915     rb_define_method(rb_mKernel, "rawVALUE", ripper_value, 1);
17916     rb_define_method(rb_mKernel, "validate_object", ripper_validate_object, 1);
17917 #endif
17918 
17919     ripper_init_eventids1_table(Ripper);
17920     ripper_init_eventids2_table(Ripper);
17921 
17922 # if 0
17923     /* Hack to let RDoc document SCRIPT_LINES__ */
17924 
17925     /*
17926      * When a Hash is assigned to +SCRIPT_LINES__+ the contents of files loaded
17927      * after the assignment will be added as an Array of lines with the file
17928      * name as the key.
17929      */
17930     rb_define_global_const("SCRIPT_LINES__", Qnil);
17931 #endif
17932 
17933 }
17934 #endif /* RIPPER */
17935 
17936